@eventcatalog/core 5.0.0-beta.9 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/LICENSE +13 -12
  2. package/README.md +5 -5
  3. package/dist/analytics/analytics.cjs +1 -1
  4. package/dist/analytics/analytics.js +2 -2
  5. package/dist/analytics/log-build.cjs +91 -44
  6. package/dist/analytics/log-build.d.cts +2 -2
  7. package/dist/analytics/log-build.d.ts +2 -2
  8. package/dist/analytics/log-build.js +6 -5
  9. package/dist/analytics/studio-usage.cjs +90 -0
  10. package/dist/analytics/studio-usage.d.cts +5 -0
  11. package/dist/analytics/studio-usage.d.ts +5 -0
  12. package/dist/analytics/studio-usage.js +10 -0
  13. package/dist/catalog-runtime.cjs +1 -1
  14. package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
  15. package/dist/{chunk-AWOO63ME.js → chunk-AD7CL772.js} +11 -4
  16. package/dist/chunk-CA6WCQ2T.js +54 -0
  17. package/dist/{chunk-GAHKCOQM.js → chunk-JZN4RSMF.js} +1 -1
  18. package/dist/{chunk-JQMYHZWI.js → chunk-NEAVAFSJ.js} +16 -8
  19. package/dist/{chunk-4CFZUHGG.js → chunk-NIVST4WY.js} +1 -1
  20. package/dist/{chunk-ENAG6UH7.js → chunk-NKNOXQ62.js} +1 -6
  21. package/dist/{chunk-ZEY2XUJN.js → chunk-OX6TSVHY.js} +6 -6
  22. package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
  23. package/dist/{chunk-EUNQJO3J.js → chunk-RE7UTPWH.js} +1 -1
  24. package/dist/chunk-S5GWAUG5.js +29 -0
  25. package/dist/{chunk-TZVDMWQX.js → chunk-YQGRMDRB.js} +4 -2
  26. package/dist/constants.cjs +1 -1
  27. package/dist/constants.js +1 -1
  28. package/dist/docs/api/02-config.md +57 -7
  29. package/dist/docs/development/00-why-eventcatalog.md +11 -11
  30. package/dist/docs/development/01-fundamentals.md +20 -13
  31. package/dist/docs/development/01-getting-started/configuration-overview.md +2 -2
  32. package/dist/docs/development/01-getting-started/installation.md +9 -1
  33. package/dist/docs/development/_getting-started.mdx +1 -1
  34. package/dist/docs/development/ask-your-architecture/01-intro.md +5 -5
  35. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/01-what-is-eventcatalog-assistant.md +0 -4
  36. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +15 -3
  37. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/03-bring-your-own-tools.md +0 -3
  38. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/_category_.json +1 -1
  39. package/dist/docs/development/ask-your-architecture/02-llms.txt.md +1 -1
  40. package/dist/docs/development/ask-your-architecture/{05-skills/01-introduction.md → 03-install-skills.md} +57 -7
  41. package/dist/docs/development/ask-your-architecture/03-mcp-server/_category_.json +1 -1
  42. package/dist/docs/development/ask-your-architecture/03-mcp-server/getting-started.md +86 -33
  43. package/dist/docs/development/ask-your-architecture/03-mcp-server/introduction.md +14 -4
  44. package/dist/docs/development/ask-your-architecture/03-schemas.txt.md +1 -1
  45. package/dist/docs/development/ask-your-architecture/04-agents/_category_.json +1 -1
  46. package/dist/docs/development/authentication/01-introduction.md +2 -23
  47. package/dist/docs/development/authentication/02-enabling-authentication.md +0 -20
  48. package/dist/docs/development/authentication/07-rbac-middleware.md +0 -2
  49. package/dist/docs/development/authentication/providers/03-setting-up-github.md +0 -2
  50. package/dist/docs/development/authentication/providers/03a-setting-up-google.md +0 -2
  51. package/dist/docs/development/authentication/providers/04-setting-up-azure-ad.md +0 -2
  52. package/dist/docs/development/authentication/providers/05-setting-up-okta.md +0 -3
  53. package/dist/docs/development/authentication/providers/06-setting-up-auth0.md +0 -2
  54. package/dist/docs/development/bring-your-own-documentation/01-introduction.md +0 -4
  55. package/dist/docs/development/bring-your-own-documentation/custom-pages/01-introduction.md +0 -3
  56. package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +0 -17
  57. package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +0 -4
  58. package/dist/docs/development/bring-your-own-documentation/custom-pages/04-owners.md +0 -2
  59. package/dist/docs/development/bring-your-own-documentation/resource-docs/01-introduction.md +1 -3
  60. package/dist/docs/development/bring-your-own-documentation/resource-docs/02-adding-resource-docs.md +1 -4
  61. package/dist/docs/development/bring-your-own-documentation/resource-docs/03-categories.md +0 -2
  62. package/dist/docs/development/bring-your-own-documentation/resource-docs/04-versioning.md +1 -3
  63. package/dist/docs/development/components/components/11-flow.md +17 -0
  64. package/dist/docs/development/components/components/15-nodegraph.md +43 -10
  65. package/dist/docs/development/components/components/18-remote-schema.md +1 -4
  66. package/dist/docs/development/components/custom-components/07-reference.md +14 -0
  67. package/dist/docs/development/customization/02-themes.md +0 -5
  68. package/dist/docs/development/customization/03-search.md +1 -1
  69. package/dist/docs/development/customization/05-custom-pages-and-api-routes/01-introduction.md +0 -2
  70. package/dist/docs/development/customization/05-custom-pages-and-api-routes/04-reference.md +7 -1
  71. package/dist/docs/development/customization/05-resource-sidebar.md +1 -1
  72. package/dist/docs/development/customization/09-embed-eventcatalog.md +20 -25
  73. package/dist/docs/development/deployment/hosting-options.md +7 -2
  74. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +16 -0
  75. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +31 -1
  76. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +1 -1
  77. package/dist/docs/development/governance/architecture-change-detection/01-introduction.md +0 -10
  78. package/dist/docs/development/governance/architecture-change-detection/06-pipeline-gates.md +0 -4
  79. package/dist/docs/development/guides/97-architecture-graph.md +1 -1
  80. package/dist/docs/development/guides/99-adding-analytics.md +0 -7
  81. package/dist/docs/development/guides/domains/03-model-subdomains.md +2 -2
  82. package/dist/docs/development/guides/domains/04-add-resources-to-domains/01-add-systems-to-domains.md +3 -1
  83. package/dist/docs/development/guides/domains/04-add-resources-to-domains/02-add-services-to-domains.md +5 -1
  84. package/dist/docs/development/guides/domains/04-add-resources-to-domains/03-add-messages-to-domains.md +2 -2
  85. package/dist/docs/development/guides/domains/04-add-resources-to-domains/05-add-entities-to-domains.md +1 -1
  86. package/dist/docs/development/guides/domains/04-add-resources-to-domains/06-domain-resources-page.md +40 -0
  87. package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-diagram.md +89 -0
  88. package/dist/docs/development/guides/domains/06-visualize-domains/_category_.json +1 -2
  89. package/dist/docs/development/guides/domains/09-reference.md +4 -4
  90. package/dist/docs/development/guides/owners/automated-teams-and-users/create-your-own-connector.md +0 -2
  91. package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-github.md +0 -3
  92. package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-microsoft-entra.md +0 -2
  93. package/dist/docs/development/guides/resources/adrs/03-linking-resources.md +8 -0
  94. package/dist/docs/development/guides/resources/adrs/06-reference.md +4 -4
  95. package/dist/docs/development/guides/resources/agents/11-reference.md +1 -1
  96. package/dist/docs/development/guides/resources/data/04-reference.md +1 -1
  97. package/dist/docs/development/guides/resources/data-products/07-reference.md +1 -1
  98. package/dist/docs/development/guides/resources/entities/05-entity-maps.md +1 -1
  99. package/dist/docs/development/guides/resources/entities/06-reference.md +2 -2
  100. package/dist/docs/development/guides/resources/flows/01-introduction.md +11 -1
  101. package/dist/docs/development/guides/resources/flows/03-model-flow-steps.md +65 -6
  102. package/dist/docs/development/guides/resources/flows/05-explore-flows.md +112 -0
  103. package/dist/docs/development/guides/resources/flows/06-reference.md +25 -4
  104. package/dist/docs/development/guides/resources/messages/01-what-are-messages.md +19 -0
  105. package/dist/docs/development/guides/resources/messages/04-message-channels/01-introduction.md +16 -0
  106. package/dist/docs/development/guides/resources/messages/04-message-channels/05-reference.md +2 -1
  107. package/dist/docs/development/guides/resources/messages/10-reference.md +6 -3
  108. package/dist/docs/development/guides/resources/schemas/04-explore-schemas/01-schema-explorer.md +2 -2
  109. package/dist/docs/development/guides/resources/schemas/04-explore-schemas/02-fields-explorer.md +0 -9
  110. package/dist/docs/development/guides/resources/schemas/05-schema-api.md +0 -3
  111. package/dist/docs/development/guides/resources/schemas/06-schema-mcp.md +11 -3
  112. package/dist/docs/development/guides/resources/services/04-add-resources-to-services/03-add-entities-to-services.md +1 -1
  113. package/dist/docs/development/guides/resources/services/05-resources-page.md +50 -0
  114. package/dist/docs/development/guides/resources/services/08-reference.md +2 -1
  115. package/dist/docs/development/guides/systems/01-introduction.md +1 -1
  116. package/dist/docs/development/guides/systems/02-create-system.md +2 -2
  117. package/dist/docs/development/guides/systems/03-add-resources-to-systems.md +35 -9
  118. package/dist/docs/development/guides/systems/04-model-relationships-and-actors.md +5 -3
  119. package/dist/docs/development/guides/systems/05-system-context-maps.md +39 -22
  120. package/dist/docs/development/guides/systems/06-reference.md +4 -4
  121. package/dist/docs/development/license/01-license-file.md +151 -0
  122. package/dist/docs/development/license/_category_.json +12 -0
  123. package/dist/docs/development/license-keys/_category_.json +3 -3
  124. package/dist/docs/development/license-keys/integrations.md +7 -37
  125. package/dist/docs/development/license-keys/license-validation.md +4 -0
  126. package/dist/docs/development/license-keys/overview.md +5 -1
  127. package/dist/docs/development/license-keys/plans.md +4 -2
  128. package/dist/docs/development/studio/01-introduction.md +60 -0
  129. package/dist/docs/development/studio/02-create-a-canvas.md +103 -0
  130. package/dist/docs/development/studio/03-set-up-persistent-storage.md +59 -0
  131. package/dist/docs/development/studio/04-collaborate-on-a-canvas.md +78 -0
  132. package/dist/docs/development/studio/05-connect-your-agent.md +102 -0
  133. package/dist/docs/development/studio/06-run-studio-in-production.md +54 -0
  134. package/dist/docs/development/studio/07-reference.md +294 -0
  135. package/dist/docs/development/studio/_category_.json +12 -0
  136. package/dist/docs/development/upgrading/v5.md +345 -0
  137. package/dist/docs/federation/00-overview.md +2 -8
  138. package/dist/docs/federation/01-first-federation.md +6 -18
  139. package/dist/docs/federation/explanation/how-it-works.md +0 -4
  140. package/dist/docs/federation/explanation/lockfile-and-cache.md +0 -4
  141. package/dist/docs/federation/explanation/mvp-status-and-feedback.md +0 -4
  142. package/dist/docs/federation/explanation/ownership-and-references.md +0 -4
  143. package/dist/docs/federation/how-to/configure-github-sources.md +6 -5
  144. package/dist/docs/federation/how-to/configure-validation-rules.md +0 -4
  145. package/dist/docs/federation/how-to/run-in-ci.md +2 -9
  146. package/dist/docs/federation/how-to/share-assets-and-components.md +0 -4
  147. package/dist/docs/federation/how-to/use-local-sources.md +0 -4
  148. package/dist/docs/federation/legacy-federation/00-introduction.md +4 -22
  149. package/dist/docs/federation/legacy-federation/01-installation.md +7 -58
  150. package/dist/docs/federation/legacy-federation/02-plugin-configuration.md +3 -21
  151. package/dist/docs/federation/legacy-federation/03-examples.md +3 -5
  152. package/dist/docs/federation/legacy-federation/04-configuration.md +3 -8
  153. package/dist/docs/federation/legacy-federation/05-setup-team-catalog.md +3 -6
  154. package/dist/docs/federation/reference/cli.md +2 -8
  155. package/dist/docs/federation/reference/configuration.md +0 -4
  156. package/dist/docs/federation/reference/diagnostic-rules.md +0 -5
  157. package/dist/docs/federation/reference/generated-output.md +0 -4
  158. package/dist/docs/federation/reference/supported-content.md +0 -4
  159. package/dist/docs/federation/reference/troubleshooting.md +0 -14
  160. package/dist/docs/plugins/02-generators.md +1 -1
  161. package/dist/docs/plugins/amazon-apigateway/00-intro.md +3 -28
  162. package/dist/docs/plugins/amazon-apigateway/01-installation.md +4 -56
  163. package/dist/docs/plugins/amazon-apigateway/02-plugin-configuration.md +1 -6
  164. package/dist/docs/plugins/apicurio/00-intro.md +2 -31
  165. package/dist/docs/plugins/apicurio/01-installation.md +2 -26
  166. package/dist/docs/plugins/apicurio/02-plugin-configuration.md +5 -13
  167. package/dist/docs/plugins/apicurio/03-features.md +1 -3
  168. package/dist/docs/plugins/asyncapi/00-intro.md +2 -28
  169. package/dist/docs/plugins/asyncapi/01-installation.md +3 -54
  170. package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +2 -1
  171. package/dist/docs/plugins/aws-glue-registry/00-intro.md +4 -32
  172. package/dist/docs/plugins/aws-glue-registry/00a-installation.md +3 -53
  173. package/dist/docs/plugins/azure-schema-registry/00-intro.md +4 -32
  174. package/dist/docs/plugins/azure-schema-registry/01-installation.md +6 -33
  175. package/dist/docs/plugins/azure-schema-registry/02-plugin-configuration.md +1 -14
  176. package/dist/docs/plugins/azure-schema-registry/04-examples.md +0 -2
  177. package/dist/docs/plugins/backstage/00-overview.md +1 -7
  178. package/dist/docs/plugins/backstage/01-get-started.md +6 -15
  179. package/dist/docs/plugins/backstage/06-configuration.md +2 -8
  180. package/dist/docs/plugins/confluent-schema-registry/00-intro.md +2 -29
  181. package/dist/docs/plugins/confluent-schema-registry/01-installation.md +2 -26
  182. package/dist/docs/plugins/eventbridge/00-intro.md +0 -4
  183. package/dist/docs/plugins/eventbridge/00a-installation.md +1 -87
  184. package/dist/docs/plugins/eventbridge/03-api.md +2 -20
  185. package/dist/docs/plugins/github/00-intro.md +0 -31
  186. package/dist/docs/plugins/github/01-installation.md +2 -34
  187. package/dist/docs/plugins/graphql/00-intro.md +0 -30
  188. package/dist/docs/plugins/graphql/01-installation.md +1 -53
  189. package/dist/docs/plugins/graphql/02-plugin-configuration.md +0 -1
  190. package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
  191. package/dist/docs/plugins/openapi/00-intro.md +0 -30
  192. package/dist/docs/plugins/openapi/01-installation.md +1 -57
  193. package/dist/docs/plugins/openapi/02-plugin-configuration.md +0 -5
  194. package/dist/docs/plugins/openapi/03-features.md +0 -4
  195. package/dist/eventcatalog-config-file-utils.cjs +34 -41
  196. package/dist/eventcatalog-config-file-utils.d.cts +56 -58
  197. package/dist/eventcatalog-config-file-utils.d.ts +56 -58
  198. package/dist/eventcatalog-config-file-utils.js +1 -1
  199. package/dist/eventcatalog.cjs +340 -249
  200. package/dist/eventcatalog.config.d.cts +18 -15
  201. package/dist/eventcatalog.config.d.ts +18 -15
  202. package/dist/eventcatalog.js +51 -33
  203. package/dist/features.cjs +36 -49
  204. package/dist/features.d.cts +1 -3
  205. package/dist/features.d.ts +1 -3
  206. package/dist/features.js +4 -6
  207. package/dist/federation/federate.cjs +37 -44
  208. package/dist/federation/federate.js +5 -5
  209. package/dist/federation/source-provider.js +2 -2
  210. package/dist/generate.cjs +37 -42
  211. package/dist/generate.js +4 -4
  212. package/dist/resolve-catalog-dependencies.cjs +34 -41
  213. package/dist/resolve-catalog-dependencies.js +2 -2
  214. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
  215. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
  216. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
  217. package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
  218. package/dist/runtime-dependencies/manifest.json +5 -1
  219. package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
  220. package/dist/utils/child-process-signals.cjs +53 -0
  221. package/dist/utils/child-process-signals.d.cts +19 -0
  222. package/dist/utils/child-process-signals.d.ts +19 -0
  223. package/dist/utils/child-process-signals.js +6 -0
  224. package/dist/utils/cli-logger.cjs +1 -1
  225. package/dist/utils/cli-logger.js +2 -2
  226. package/dist/utils/license-status.cjs +11 -4
  227. package/dist/utils/license-status.d.cts +3 -2
  228. package/dist/utils/license-status.d.ts +3 -2
  229. package/dist/utils/license-status.js +1 -1
  230. package/eventcatalog/astro.config.mjs +21 -1
  231. package/eventcatalog/integrations/config-loader.mjs +56 -58
  232. package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
  233. package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
  234. package/eventcatalog/integrations/storage.mjs +20 -0
  235. package/eventcatalog/integrations/studio-server.mjs +4 -1
  236. package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
  237. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
  238. package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
  239. package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
  240. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
  241. package/eventcatalog/src/components/NavigationProgress.astro +7 -0
  242. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
  243. package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
  244. package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
  245. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
  246. package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
  247. package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
  248. package/eventcatalog/src/components/Search/search-utils.ts +26 -0
  249. package/eventcatalog/src/components/Seo.astro +5 -1
  250. package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
  251. package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
  252. package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
  253. package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
  254. package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
  255. package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
  256. package/eventcatalog/src/components/Settings/Row.tsx +7 -4
  257. package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
  258. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +37 -76
  259. package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
  260. package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +122 -1
  261. package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
  262. package/eventcatalog/src/components/TrialBadge.astro +20 -9
  263. package/eventcatalog/src/content.config.ts +19 -2
  264. package/eventcatalog/src/features/auth/error.astro +4 -2
  265. package/eventcatalog/src/features/auth/login.astro +2 -1
  266. package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +21 -1
  267. package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
  268. package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
  269. package/eventcatalog/src/features/integrations/eventcatalog-features.ts +13 -7
  270. package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
  271. package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +3 -3
  272. package/eventcatalog/src/features/mcp/apps/canvas/styles.css +3 -1
  273. package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +7 -5
  274. package/eventcatalog/src/features/mcp/apps/generated/canvas.html +123 -98
  275. package/eventcatalog/src/features/mcp/apps/generated/viewer.html +118 -101
  276. package/eventcatalog/src/features/mcp/mcp-server.ts +20 -4
  277. package/eventcatalog/src/features/server/start.ts +25 -0
  278. package/eventcatalog/src/features/storage/database.ts +88 -0
  279. package/eventcatalog/src/features/storage/migrations.ts +85 -0
  280. package/eventcatalog/src/features/storage/sql/database.sql +5 -0
  281. package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
  282. package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
  283. package/eventcatalog/src/features/storage/sql.ts +28 -0
  284. package/eventcatalog/src/features/studio/agent-choreography.ts +13 -10
  285. package/eventcatalog/src/features/studio/agents.ts +28 -0
  286. package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
  287. package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
  288. package/eventcatalog/src/features/studio/api/client.ts +40 -0
  289. package/eventcatalog/src/features/studio/canvas-actions.ts +160 -34
  290. package/eventcatalog/src/features/studio/canvas-preview.ts +1 -2
  291. package/eventcatalog/src/features/studio/catalog.ts +16 -14
  292. package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +274 -105
  293. package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +15 -14
  294. package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +272 -119
  295. package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +1 -2
  296. package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
  297. package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
  298. package/eventcatalog/src/features/studio/components/JoinForm.tsx +101 -26
  299. package/eventcatalog/src/features/studio/components/LeftPanel.tsx +122 -230
  300. package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
  301. package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
  302. package/eventcatalog/src/features/studio/components/Presence.tsx +52 -45
  303. package/eventcatalog/src/features/studio/components/ShareDialog.tsx +277 -141
  304. package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
  305. package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +1314 -385
  306. package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
  307. package/eventcatalog/src/features/studio/document-name.ts +7 -0
  308. package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
  309. package/eventcatalog/src/features/studio/hooks/presence-sender.ts +19 -2
  310. package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +9 -3
  311. package/eventcatalog/src/features/studio/hooks/use-comments.ts +2 -2
  312. package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +8 -3
  313. package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +244 -32
  314. package/eventcatalog/src/features/studio/identity.ts +25 -1
  315. package/eventcatalog/src/features/studio/limits.ts +2 -0
  316. package/eventcatalog/src/features/studio/pages/[id].astro +42 -16
  317. package/eventcatalog/src/features/studio/pages/index.astro +596 -373
  318. package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +12 -15
  319. package/eventcatalog/src/features/studio/server/canvas-mcp.ts +8 -23
  320. package/eventcatalog/src/features/studio/server/runtime.ts +150 -46
  321. package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
  322. package/eventcatalog/src/features/studio/server/storage.ts +53 -73
  323. package/eventcatalog/src/features/studio/webmcp-relay/LICENSE +21 -0
  324. package/eventcatalog/src/features/studio/webmcp-relay/README.md +5 -0
  325. package/eventcatalog/src/features/studio/webmcp-relay/embed.js +2 -0
  326. package/eventcatalog/src/features/studio/webmcp-relay/widget.html +10 -0
  327. package/eventcatalog/src/features/studio/webmcp-relay/widget.js +1 -0
  328. package/eventcatalog/src/features/tools/catalog-tools.ts +3 -1
  329. package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
  330. package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
  331. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +3 -2
  332. package/eventcatalog/src/pages/_index.astro +5 -342
  333. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
  334. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
  335. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
  336. package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
  337. package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
  338. package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
  339. package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
  340. package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
  341. package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
  342. package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
  343. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
  344. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
  345. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
  346. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
  347. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
  348. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
  349. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
  350. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
  351. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
  352. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
  353. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
  354. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
  355. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
  356. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
  357. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
  358. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
  359. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
  360. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
  361. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
  362. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
  363. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
  364. package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
  365. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
  366. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
  367. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
  368. package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
  369. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
  370. package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
  371. package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
  372. package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
  373. package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
  374. package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
  375. package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
  376. package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
  377. package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
  378. package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
  379. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
  380. package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
  381. package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
  382. package/eventcatalog/src/pages/index.astro +4 -2
  383. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
  384. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +9 -1
  385. package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
  386. package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
  387. package/eventcatalog/src/pages/settings/license.astro +9 -1
  388. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
  389. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
  390. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
  391. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
  392. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
  393. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
  394. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
  395. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
  396. package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
  397. package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
  398. package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
  399. package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
  400. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
  401. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
  402. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
  403. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
  404. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
  405. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
  406. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
  407. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
  408. package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
  409. package/eventcatalog/src/utils/collections/flows.ts +20 -7
  410. package/eventcatalog/src/utils/collections/resource-owners.ts +8 -2
  411. package/eventcatalog/src/utils/collections/resources.ts +2 -0
  412. package/eventcatalog/src/utils/collections/util.ts +8 -4
  413. package/eventcatalog/src/utils/git.ts +11 -0
  414. package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
  415. package/eventcatalog/src/utils/license.ts +1 -1
  416. package/eventcatalog/src/utils/link-validation.ts +25 -19
  417. package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
  418. package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
  419. package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
  420. package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
  421. package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
  422. package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
  423. package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
  424. package/eventcatalog/src/utils/page-title.ts +15 -0
  425. package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
  426. package/eventcatalog/src/utils/trial.ts +13 -0
  427. package/package.json +11 -11
  428. package/dist/docs/development/ask-your-architecture/05-skills/02-installation.md +0 -60
  429. package/dist/docs/development/ask-your-architecture/05-skills/_category_.json +0 -11
  430. package/dist/docs/development/ask-your-architecture/06-slack-integration/01-introduction.md +0 -63
  431. package/dist/docs/development/ask-your-architecture/06-slack-integration/02-slack-app-setup.md +0 -154
  432. package/dist/docs/development/ask-your-architecture/06-slack-integration/03-installation.md +0 -169
  433. package/dist/docs/development/ask-your-architecture/06-slack-integration/04-deployment.md +0 -236
  434. package/dist/docs/development/ask-your-architecture/06-slack-integration/05-usage.md +0 -140
  435. package/dist/docs/development/ask-your-architecture/06-slack-integration/06-troubleshooting.md +0 -268
  436. package/dist/docs/development/ask-your-architecture/06-slack-integration/_category_.json +0 -13
  437. package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-integration-map.md +0 -40
  438. package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +0 -3
  439. package/eventcatalog/src/features/studio/canvas-doc.ts +0 -409
  440. package/eventcatalog/src/features/studio/clipboard.ts +0 -97
  441. package/eventcatalog/src/features/studio/components/CanvasControls.tsx +0 -154
  442. package/eventcatalog/src/features/studio/components/Comments.tsx +0 -770
  443. package/eventcatalog/src/features/studio/components/ContainerChooser.tsx +0 -145
  444. package/eventcatalog/src/features/studio/components/DragGhost.tsx +0 -115
  445. package/eventcatalog/src/features/studio/components/Picture.tsx +0 -21
  446. package/eventcatalog/src/features/studio/components/PropertiesPanel.tsx +0 -212
  447. package/eventcatalog/src/features/studio/components/canvas-nodes.tsx +0 -255
  448. package/eventcatalog/src/features/studio/components/icons.ts +0 -53
  449. package/eventcatalog/src/features/studio/components/status.ts +0 -51
  450. package/eventcatalog/src/features/studio/edges.ts +0 -56
  451. package/eventcatalog/src/features/studio/flow-state.ts +0 -92
  452. package/eventcatalog/src/features/studio/grouping.ts +0 -226
  453. package/eventcatalog/src/features/studio/layout.ts +0 -42
  454. package/eventcatalog/src/features/studio/levels.ts +0 -282
  455. package/eventcatalog/src/features/studio/node-types.ts +0 -205
  456. package/eventcatalog/src/features/studio/pages/new.astro +0 -24
  457. package/eventcatalog/src/features/studio/pages/wake.ts +0 -15
  458. package/eventcatalog/src/features/studio/placement.ts +0 -197
  459. package/eventcatalog/src/features/studio/studio.css +0 -273
  460. package/dist/{chunk-A2RZR3U4.js → chunk-6K7XZAYI.js} +3 -3
@@ -198,22 +198,25 @@ type McpConfig = {
198
198
  auth?: McpAuthConfig;
199
199
  };
200
200
  /**
201
- * Where EventCatalog Studio keeps canvases. People and agents always work on the copy held in memory by the
202
- * server, so storage doesn't slow editing down: it's read when the server starts and written a moment after a
203
- * canvas changes (and as the server stops).
201
+ * The state EventCatalog keeps for features that need it (today, Studio's canvases). Features always work on a copy
202
+ * held in memory by the server, so storage doesn't slow them down: it's read when the server starts and written a
203
+ * moment after something changes (and as the server stops).
204
204
  */
205
- type StudioStorageConfig =
206
- /** Kept only while the server runs: canvases are lost when it restarts or redeploys (the default) */
205
+ type StorageConfig =
206
+ /** Kept only while the server runs: lost when it restarts or redeploys (the default) */
207
207
  {
208
208
  type: 'memory';
209
209
  }
210
- /** A SQLite database file. Uses Node.js's built-in SQLite, so needs Node.js 22.13 or later. */
210
+ /**
211
+ * One SQLite database file for the whole catalog, brought up to date (migrated) as `eventcatalog dev` and
212
+ * `eventcatalog start` start. Uses Node.js's built-in SQLite, so needs Node.js 22.13 or later.
213
+ */
211
214
  | {
212
215
  type: 'sqlite';
213
216
  /**
214
- * The database file, relative to the catalog. In a container, put it on a volume (e.g. `/data/studio.db`)
215
- * so canvases survive redeploys.
216
- * @default '.eventcatalog/studio.db'
217
+ * The database file, relative to the catalog. In a container, put it on a volume (e.g. `/data/eventcatalog.db`)
218
+ * so it survives redeploys.
219
+ * @default '.eventcatalog/eventcatalog.db'
217
220
  */
218
221
  path?: string;
219
222
  };
@@ -225,11 +228,6 @@ type StudioConfig = {
225
228
  * @default false
226
229
  */
227
230
  enabled?: boolean;
228
- /**
229
- * Where canvases are kept between restarts.
230
- * @default { type: 'memory' }
231
- */
232
- storage?: StudioStorageConfig;
233
231
  };
234
232
  type GA4Config = {
235
233
  measurementId: string;
@@ -317,6 +315,11 @@ interface Config {
317
315
  mcp?: McpConfig;
318
316
  /** EventCatalog Studio: collaborative canvases (experimental) */
319
317
  studio?: StudioConfig;
318
+ /**
319
+ * Where EventCatalog keeps state between restarts (e.g. Studio's canvases), for every feature that has some.
320
+ * @default { type: 'memory' }
321
+ */
322
+ storage?: StorageConfig;
320
323
  rss?: {
321
324
  enabled?: boolean;
322
325
  limit?: number;
@@ -473,4 +476,4 @@ interface Config {
473
476
  federation?: FederationConfig;
474
477
  }
475
478
 
476
- export type { Config, FederationRuleId, FederationRuleLevel, FederationRulesConfig, FederationSourceConfig };
479
+ export type { Config, FederationRuleId, FederationRuleLevel, FederationRulesConfig, FederationSourceConfig, StorageConfig };
@@ -198,22 +198,25 @@ type McpConfig = {
198
198
  auth?: McpAuthConfig;
199
199
  };
200
200
  /**
201
- * Where EventCatalog Studio keeps canvases. People and agents always work on the copy held in memory by the
202
- * server, so storage doesn't slow editing down: it's read when the server starts and written a moment after a
203
- * canvas changes (and as the server stops).
201
+ * The state EventCatalog keeps for features that need it (today, Studio's canvases). Features always work on a copy
202
+ * held in memory by the server, so storage doesn't slow them down: it's read when the server starts and written a
203
+ * moment after something changes (and as the server stops).
204
204
  */
205
- type StudioStorageConfig =
206
- /** Kept only while the server runs: canvases are lost when it restarts or redeploys (the default) */
205
+ type StorageConfig =
206
+ /** Kept only while the server runs: lost when it restarts or redeploys (the default) */
207
207
  {
208
208
  type: 'memory';
209
209
  }
210
- /** A SQLite database file. Uses Node.js's built-in SQLite, so needs Node.js 22.13 or later. */
210
+ /**
211
+ * One SQLite database file for the whole catalog, brought up to date (migrated) as `eventcatalog dev` and
212
+ * `eventcatalog start` start. Uses Node.js's built-in SQLite, so needs Node.js 22.13 or later.
213
+ */
211
214
  | {
212
215
  type: 'sqlite';
213
216
  /**
214
- * The database file, relative to the catalog. In a container, put it on a volume (e.g. `/data/studio.db`)
215
- * so canvases survive redeploys.
216
- * @default '.eventcatalog/studio.db'
217
+ * The database file, relative to the catalog. In a container, put it on a volume (e.g. `/data/eventcatalog.db`)
218
+ * so it survives redeploys.
219
+ * @default '.eventcatalog/eventcatalog.db'
217
220
  */
218
221
  path?: string;
219
222
  };
@@ -225,11 +228,6 @@ type StudioConfig = {
225
228
  * @default false
226
229
  */
227
230
  enabled?: boolean;
228
- /**
229
- * Where canvases are kept between restarts.
230
- * @default { type: 'memory' }
231
- */
232
- storage?: StudioStorageConfig;
233
231
  };
234
232
  type GA4Config = {
235
233
  measurementId: string;
@@ -317,6 +315,11 @@ interface Config {
317
315
  mcp?: McpConfig;
318
316
  /** EventCatalog Studio: collaborative canvases (experimental) */
319
317
  studio?: StudioConfig;
318
+ /**
319
+ * Where EventCatalog keeps state between restarts (e.g. Studio's canvases), for every feature that has some.
320
+ * @default { type: 'memory' }
321
+ */
322
+ storage?: StorageConfig;
320
323
  rss?: {
321
324
  enabled?: boolean;
322
325
  limit?: number;
@@ -473,4 +476,4 @@ interface Config {
473
476
  federation?: FederationConfig;
474
477
  }
475
478
 
476
- export type { Config, FederationRuleId, FederationRuleLevel, FederationRulesConfig, FederationSourceConfig };
479
+ export type { Config, FederationRuleId, FederationRuleLevel, FederationRulesConfig, FederationSourceConfig, StorageConfig };
@@ -1,47 +1,49 @@
1
- import {
2
- log_build_default
3
- } from "./chunk-JQMYHZWI.js";
4
- import "./chunk-4CFZUHGG.js";
5
- import "./chunk-ZAZHAVKB.js";
6
- import "./chunk-CPW6G62V.js";
7
1
  import {
8
2
  runMigrations
9
3
  } from "./chunk-XUAF2H54.js";
10
4
  import "./chunk-CA4U2JP7.js";
5
+ import {
6
+ stopChildWithParent
7
+ } from "./chunk-S5GWAUG5.js";
8
+ import {
9
+ log_build_default
10
+ } from "./chunk-NEAVAFSJ.js";
11
11
  import {
12
12
  getLicenseStatus,
13
13
  printLicenseStatus
14
- } from "./chunk-AWOO63ME.js";
14
+ } from "./chunk-AD7CL772.js";
15
+ import "./chunk-ZAZHAVKB.js";
16
+ import "./chunk-CA6WCQ2T.js";
15
17
  import {
16
18
  FederationConflictError,
17
19
  FederationDiagnosticError,
18
20
  federateCatalog
19
- } from "./chunk-ZEY2XUJN.js";
21
+ } from "./chunk-OX6TSVHY.js";
22
+ import "./chunk-WRNH5C3U.js";
23
+ import "./chunk-5EPNFDT5.js";
24
+ import "./chunk-6K7XZAYI.js";
25
+ import "./chunk-352FGP6W.js";
26
+ import "./chunk-R7Z5ALYI.js";
20
27
  import {
21
28
  getFederationDiagnosticCounts,
22
29
  getVisibleFederationDiagnostics
23
30
  } from "./chunk-JJPB6EOZ.js";
24
- import "./chunk-WRNH5C3U.js";
25
- import "./chunk-5EPNFDT5.js";
26
- import "./chunk-A2RZR3U4.js";
27
31
  import "./chunk-SDZQJTJW.js";
28
- import "./chunk-352FGP6W.js";
29
32
  import {
30
33
  getProjectOutDir,
31
34
  isAuthEnabled,
32
35
  isIndexedSearchEnabled,
33
- isOutputServer,
34
- isStudioEnabled
35
- } from "./chunk-ENAG6UH7.js";
36
+ isOutputServer
37
+ } from "./chunk-NKNOXQ62.js";
36
38
  import {
37
39
  generate
38
- } from "./chunk-TZVDMWQX.js";
40
+ } from "./chunk-YQGRMDRB.js";
39
41
  import {
40
42
  logger
41
- } from "./chunk-GAHKCOQM.js";
43
+ } from "./chunk-JZN4RSMF.js";
42
44
  import {
43
45
  resolve_catalog_dependencies_default
44
- } from "./chunk-36RYTYT5.js";
46
+ } from "./chunk-PD7KTSYN.js";
45
47
  import {
46
48
  buildSearchIndex
47
49
  } from "./chunk-DJCOJ77J.js";
@@ -52,7 +54,8 @@ import {
52
54
  import {
53
55
  watch
54
56
  } from "./chunk-U63GDPPY.js";
55
- import "./chunk-R7Z5ALYI.js";
57
+ import "./chunk-NIVST4WY.js";
58
+ import "./chunk-CPW6G62V.js";
56
59
  import {
57
60
  getAstroConfigPath
58
61
  } from "./chunk-VIJJ7JKH.js";
@@ -68,11 +71,11 @@ import {
68
71
  } from "./chunk-LFQJXLHG.js";
69
72
  import {
70
73
  VERSION
71
- } from "./chunk-EUNQJO3J.js";
74
+ } from "./chunk-RE7UTPWH.js";
72
75
  import {
73
76
  getEventCatalogConfigFile,
74
77
  verifyRequiredFieldsAreInCatalogConfigFile
75
- } from "./chunk-RFIXKATC.js";
78
+ } from "./chunk-4G7FSRPN.js";
76
79
 
77
80
  // src/eventcatalog.ts
78
81
  import { Command } from "commander";
@@ -639,6 +642,7 @@ async function buildFieldsIndex(catalogDir, outputDir) {
639
642
  // src/eventcatalog.ts
640
643
  var currentDir = path2.dirname(fileURLToPath(import.meta.url));
641
644
  var astroCli = path2.join(path2.dirname(createRequire(import.meta.url).resolve("astro/package.json")), "bin/astro.mjs");
645
+ var ASTRO_IN_FOREGROUND = { ASTRO_DEV_BACKGROUND: "1", ASTRO_PREVIEW_BACKGROUND: "1" };
642
646
  var program = new Command().version(VERSION);
643
647
  var dir = path2.resolve(process.env.PROJECT_DIR || process.cwd());
644
648
  var eventCatalogDir = path2.resolve(join(currentDir, "../eventcatalog/"));
@@ -670,7 +674,7 @@ var resolveDevPort = async ({ projectDir }) => {
670
674
  };
671
675
  var startDevPrewarm = ({
672
676
  port = 3e3,
673
- paths = ["/ping", "/"],
677
+ paths = ["/"],
674
678
  retries = 80,
675
679
  intervalMs = 250,
676
680
  initialDelayMs = 500
@@ -679,10 +683,13 @@ var startDevPrewarm = ({
679
683
  const hit = (requestPath) => new Promise((resolve) => {
680
684
  const req = http.get(
681
685
  {
682
- hostname: "127.0.0.1",
686
+ // Not 127.0.0.1: the dev server can listen on IPv6 only ([::1]), which refused
687
+ // every prewarm request
688
+ hostname: "localhost",
683
689
  port,
684
690
  path: requestPath,
685
- timeout: 1200
691
+ // A refused connection fails at once; once connected, let the first render finish
692
+ timeout: 3e4
686
693
  },
687
694
  (res) => {
688
695
  res.resume();
@@ -780,10 +787,14 @@ var runCommandWithFilteredOutput = async ({
780
787
  cwd,
781
788
  env: {
782
789
  ...process.env,
790
+ // Astro sends usage data (commands, config, machine details) to Astro by default: turn it off
791
+ // for everyone using EventCatalog
792
+ ASTRO_TELEMETRY_DISABLED: "1",
783
793
  ...env
784
794
  },
785
795
  stdio: ["inherit", "pipe", "pipe"]
786
796
  });
797
+ const signals = stopChildWithParent(child);
787
798
  let stdoutBuffer = "";
788
799
  let stderrBuffer = "";
789
800
  const flush = (buffer, writer, isFinal = false) => {
@@ -811,11 +822,13 @@ var runCommandWithFilteredOutput = async ({
811
822
  stderrBuffer = flush(stderrBuffer, process.stderr);
812
823
  });
813
824
  child.on("error", (error) => {
825
+ signals.childClosed();
814
826
  reject(error);
815
827
  });
816
828
  child.on("close", (code) => {
817
829
  stdoutBuffer = flush(stdoutBuffer, process.stdout, true);
818
830
  stderrBuffer = flush(stderrBuffer, process.stderr, true);
831
+ if (signals.childClosed()) return;
819
832
  if (code === 0) {
820
833
  resolve();
821
834
  return;
@@ -941,7 +954,9 @@ program.command("dev").description("Run development server of EventCatalog").opt
941
954
  });
942
955
  startDevPrewarm({
943
956
  port: prewarmPort,
944
- paths: ["/ping", "/"]
957
+ // Renders the homepage before anyone opens it. Requests stop at the first response,
958
+ // so a probe path like /ping first would leave the homepage cold.
959
+ paths: ["/"]
945
960
  });
946
961
  }
947
962
  await runCommandWithFilteredOutput({
@@ -953,7 +968,8 @@ program.command("dev").description("Run development server of EventCatalog").opt
953
968
  CATALOG_DIR: core,
954
969
  EVENTCATALOG_DEV_MODE: "true",
955
970
  IGNORE_BUILD_ARTIFACTS: "true",
956
- NODE_NO_WARNINGS: "1"
971
+ NODE_NO_WARNINGS: "1",
972
+ ...ASTRO_IN_FOREGROUND
957
973
  },
958
974
  shouldFilterLine: createAstroDevLineFilter(),
959
975
  transformLine: replaceAstroReadyVersionLine
@@ -1025,7 +1041,8 @@ var previewCatalog = async ({ command }) => {
1025
1041
  cwd: dir,
1026
1042
  env: {
1027
1043
  PROJECT_DIR: dir,
1028
- CATALOG_DIR: core
1044
+ CATALOG_DIR: core,
1045
+ ...ASTRO_IN_FOREGROUND
1029
1046
  },
1030
1047
  shouldFilterLine: createAstroLineFilter()
1031
1048
  });
@@ -1034,13 +1051,13 @@ var SERVER_BOOTSTRAP = `
1034
1051
  const entry = await import(process.argv[1]);
1035
1052
  const { server } = entry.startServer();
1036
1053
  globalThis[Symbol.for('eventcatalog.http-server')] = server.server;
1037
- const wake = process.env.EVENTCATALOG_STUDIO_WAKE_PATH;
1038
- if (wake) {
1054
+ const start = process.env.EVENTCATALOG_START_PATH;
1055
+ if (start) {
1039
1056
  server.server.once('listening', () => {
1040
1057
  // Where the server listens (HOST can be one address only); loopback when it listens on every address
1041
1058
  const { address, port } = server.server.address();
1042
1059
  const host = ['0.0.0.0', '::'].includes(address) ? '127.0.0.1' : address.includes(':') ? '[' + address + ']' : address;
1043
- fetch('http://' + host + ':' + port + wake).catch((error) => console.error('[studio] Could not start Studio:', error.message));
1060
+ fetch('http://' + host + ':' + port + start).catch((error) => console.error('[eventcatalog] Could not start the server:', error.message));
1044
1061
  });
1045
1062
  }
1046
1063
  `;
@@ -1056,7 +1073,7 @@ var startServerCatalog = async () => {
1056
1073
  PROJECT_DIR: dir,
1057
1074
  CATALOG_DIR: core,
1058
1075
  ASTRO_NODE_AUTOSTART: "disabled",
1059
- ...await isStudioEnabled() && { EVENTCATALOG_STUDIO_WAKE_PATH: `${base}/_eventcatalog/studio/wake` }
1076
+ EVENTCATALOG_START_PATH: `${base}/_eventcatalog/start`
1060
1077
  },
1061
1078
  shouldFilterLine: createAstroLineFilter()
1062
1079
  });
@@ -1077,7 +1094,8 @@ program.command("start").description("Serves the contents of your eventcatalog b
1077
1094
  }
1078
1095
  const isServerOutput = await isOutputServer();
1079
1096
  if (isServerOutput) {
1080
- await getLicenseStatus(dir);
1097
+ const license = await getLicenseStatus(dir);
1098
+ void log_build_default(dir, { command: "start", license });
1081
1099
  await startServerCatalog();
1082
1100
  } else {
1083
1101
  await previewCatalog({ command });
@@ -1224,7 +1242,7 @@ program.addHelpText(
1224
1242
  Example: npx eventcatalog dev --debug -- --env=production --port=3000
1225
1243
  `
1226
1244
  );
1227
- program.parseAsync().then(() => process.exit(0)).catch((err) => {
1245
+ program.parseAsync().then(() => process.exit()).catch((err) => {
1228
1246
  if (!(err instanceof FederationConflictError) && !(err instanceof FederationDiagnosticError)) console.error(err);
1229
1247
  process.exit(1);
1230
1248
  });
package/dist/features.cjs CHANGED
@@ -33,8 +33,7 @@ __export(features_exports, {
33
33
  getProjectOutDir: () => getProjectOutDir,
34
34
  isAuthEnabled: () => isAuthEnabled,
35
35
  isIndexedSearchEnabled: () => isIndexedSearchEnabled,
36
- isOutputServer: () => isOutputServer,
37
- isStudioEnabled: () => isStudioEnabled
36
+ isOutputServer: () => isOutputServer
38
37
  });
39
38
  module.exports = __toCommonJS(features_exports);
40
39
 
@@ -49,65 +48,58 @@ var import_promises = require("fs/promises");
49
48
  var import_node_fs = require("fs");
50
49
  var import_node_path = __toESM(require("path"), 1);
51
50
  var import_node_url = require("url");
52
- var import_node_os = require("os");
51
+ var import_node_module = require("module");
53
52
  async function cleanup(projectDirectory) {
54
53
  const filePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.mjs");
55
54
  if ((0, import_node_fs.existsSync)(filePath)) {
56
55
  await (0, import_promises.rm)(filePath);
57
56
  }
58
57
  }
59
- var findNodeModulesDirectory = (directory) => {
60
- let currentDirectory = directory;
61
- while (true) {
62
- const nodeModulesDirectory = import_node_path.default.join(currentDirectory, "node_modules");
63
- if ((0, import_node_fs.existsSync)(nodeModulesDirectory)) {
64
- return nodeModulesDirectory;
65
- }
66
- const parentDirectory = import_node_path.default.dirname(currentDirectory);
67
- if (parentDirectory === currentDirectory) {
68
- return void 0;
69
- }
70
- currentDirectory = parentDirectory;
71
- }
58
+ var hidesConfigModuleTypeWarning = false;
59
+ var loads = 0;
60
+ var hideConfigModuleTypeWarning = () => {
61
+ if (hidesConfigModuleTypeWarning) return;
62
+ hidesConfigModuleTypeWarning = true;
63
+ const emitWarning = process.emitWarning;
64
+ process.emitWarning = function(warning, ...args) {
65
+ const code = typeof args[0] === "object" ? args[0]?.code : args[1];
66
+ const message = typeof warning === "string" ? warning : warning?.message;
67
+ if (code === "MODULE_TYPELESS_PACKAGE_JSON" && message?.includes("eventcatalog.config.js")) return;
68
+ return emitWarning.call(this, warning, ...args);
69
+ };
72
70
  };
73
- var linkNodeModulesIntoTempDirectory = async ({ projectDirectory, tempDir }) => {
74
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
75
- if (!nodeModulesDirectory) {
76
- return;
77
- }
78
- await (0, import_promises.symlink)(nodeModulesDirectory, import_node_path.default.join(tempDir, "node_modules"), "dir");
71
+ var AS_MODULE_QUERY = "eventcatalog-config-as-module";
72
+ var loadsMarkedConfigsAsModules = false;
73
+ var loadMarkedConfigsAsModules = () => {
74
+ if (loadsMarkedConfigsAsModules) return;
75
+ loadsMarkedConfigsAsModules = true;
76
+ const hook = `export async function load(url, context, nextLoad) {
77
+ return nextLoad(url, url.includes('${AS_MODULE_QUERY}=') ? { ...context, format: 'module' } : context);
78
+ }`;
79
+ (0, import_node_module.register)(`data:text/javascript,${encodeURIComponent(hook)}`);
79
80
  };
80
- var createTemporaryConfigDirectory = async (projectDirectory) => {
81
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
82
- if (nodeModulesDirectory) {
83
- return (0, import_promises.mkdtemp)(import_node_path.default.join(nodeModulesDirectory, ".eventcatalog-config-"));
81
+ var isCommonJSPackage = async (projectDirectory) => {
82
+ try {
83
+ const packageJson = JSON.parse(await (0, import_promises.readFile)(import_node_path.default.join(projectDirectory, "package.json"), "utf-8"));
84
+ return packageJson?.type === "commonjs";
85
+ } catch {
86
+ return false;
84
87
  }
85
- const tempDir = await (0, import_promises.mkdtemp)(import_node_path.default.join((0, import_node_os.tmpdir)(), "eventcatalog-config-"));
86
- await linkNodeModulesIntoTempDirectory({ projectDirectory, tempDir });
87
- return tempDir;
88
88
  };
89
89
  var getEventCatalogConfigFile = async (projectDirectory) => {
90
- let tempDir;
91
90
  try {
92
- let configFilePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.js");
93
- const filePath = import_node_path.default.join(projectDirectory, "package.json");
94
- const packageJson = JSON.parse(await (0, import_promises.readFile)(filePath, "utf-8"));
95
- if (packageJson?.type !== "module") {
96
- tempDir = await createTemporaryConfigDirectory(projectDirectory);
97
- configFilePath = import_node_path.default.join(tempDir, "eventcatalog.config.mjs");
98
- await (0, import_promises.copyFile)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js"), configFilePath);
99
- }
100
- const configFileURL = `${(0, import_node_url.pathToFileURL)(configFilePath).href}?t=${Date.now()}`;
91
+ hideConfigModuleTypeWarning();
92
+ const asModule = await isCommonJSPackage(projectDirectory);
93
+ if (asModule) loadMarkedConfigsAsModules();
94
+ const configFileURL = (0, import_node_url.pathToFileURL)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js")).href;
95
+ const query = `${asModule ? AS_MODULE_QUERY : "loaded"}=${Date.now()}-${loads++}`;
101
96
  const config = await import(
102
97
  /* @vite-ignore */
103
- configFileURL
98
+ `${configFileURL}?${query}`
104
99
  );
105
100
  return config.default;
106
101
  } finally {
107
102
  await cleanup(projectDirectory);
108
- if (tempDir) {
109
- await (0, import_promises.rm)(tempDir, { recursive: true, force: true });
110
- }
111
103
  }
112
104
  };
113
105
 
@@ -122,10 +114,6 @@ var isOutputServer = async () => {
122
114
  const config = await getEventCatalogConfigFile(process.env.PROJECT_DIR || "");
123
115
  return config?.output === "server";
124
116
  };
125
- var isStudioEnabled = async () => {
126
- const config = await getEventCatalogConfigFile(process.env.PROJECT_DIR || "");
127
- return config?.output === "server" && config?.studio?.enabled === true;
128
- };
129
117
  var isIndexedSearchEnabled = async () => {
130
118
  const config = await getEventCatalogConfigFile(process.env.PROJECT_DIR || "");
131
119
  return config?.search?.type === "indexed";
@@ -140,6 +128,5 @@ var isAuthEnabled = async () => {
140
128
  getProjectOutDir,
141
129
  isAuthEnabled,
142
130
  isIndexedSearchEnabled,
143
- isOutputServer,
144
- isStudioEnabled
131
+ isOutputServer
145
132
  });
@@ -1,8 +1,6 @@
1
1
  declare const getProjectOutDir: () => Promise<any>;
2
2
  declare const isOutputServer: () => Promise<boolean>;
3
- /** EventCatalog Studio in production (server output, studio.enabled) */
4
- declare const isStudioEnabled: () => Promise<boolean>;
5
3
  declare const isIndexedSearchEnabled: () => Promise<boolean>;
6
4
  declare const isAuthEnabled: () => Promise<boolean>;
7
5
 
8
- export { getProjectOutDir, isAuthEnabled, isIndexedSearchEnabled, isOutputServer, isStudioEnabled };
6
+ export { getProjectOutDir, isAuthEnabled, isIndexedSearchEnabled, isOutputServer };
@@ -1,8 +1,6 @@
1
1
  declare const getProjectOutDir: () => Promise<any>;
2
2
  declare const isOutputServer: () => Promise<boolean>;
3
- /** EventCatalog Studio in production (server output, studio.enabled) */
4
- declare const isStudioEnabled: () => Promise<boolean>;
5
3
  declare const isIndexedSearchEnabled: () => Promise<boolean>;
6
4
  declare const isAuthEnabled: () => Promise<boolean>;
7
5
 
8
- export { getProjectOutDir, isAuthEnabled, isIndexedSearchEnabled, isOutputServer, isStudioEnabled };
6
+ export { getProjectOutDir, isAuthEnabled, isIndexedSearchEnabled, isOutputServer };
package/dist/features.js CHANGED
@@ -2,14 +2,12 @@ import {
2
2
  getProjectOutDir,
3
3
  isAuthEnabled,
4
4
  isIndexedSearchEnabled,
5
- isOutputServer,
6
- isStudioEnabled
7
- } from "./chunk-ENAG6UH7.js";
8
- import "./chunk-RFIXKATC.js";
5
+ isOutputServer
6
+ } from "./chunk-NKNOXQ62.js";
7
+ import "./chunk-4G7FSRPN.js";
9
8
  export {
10
9
  getProjectOutDir,
11
10
  isAuthEnabled,
12
11
  isIndexedSearchEnabled,
13
- isOutputServer,
14
- isStudioEnabled
12
+ isOutputServer
15
13
  };
@@ -51,65 +51,58 @@ var import_promises = require("fs/promises");
51
51
  var import_node_fs = require("fs");
52
52
  var import_node_path = __toESM(require("path"), 1);
53
53
  var import_node_url = require("url");
54
- var import_node_os = require("os");
54
+ var import_node_module = require("module");
55
55
  async function cleanup(projectDirectory) {
56
56
  const filePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.mjs");
57
57
  if ((0, import_node_fs.existsSync)(filePath)) {
58
58
  await (0, import_promises.rm)(filePath);
59
59
  }
60
60
  }
61
- var findNodeModulesDirectory = (directory) => {
62
- let currentDirectory = directory;
63
- while (true) {
64
- const nodeModulesDirectory = import_node_path.default.join(currentDirectory, "node_modules");
65
- if ((0, import_node_fs.existsSync)(nodeModulesDirectory)) {
66
- return nodeModulesDirectory;
67
- }
68
- const parentDirectory = import_node_path.default.dirname(currentDirectory);
69
- if (parentDirectory === currentDirectory) {
70
- return void 0;
71
- }
72
- currentDirectory = parentDirectory;
73
- }
74
- };
75
- var linkNodeModulesIntoTempDirectory = async ({ projectDirectory, tempDir }) => {
76
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
77
- if (!nodeModulesDirectory) {
78
- return;
79
- }
80
- await (0, import_promises.symlink)(nodeModulesDirectory, import_node_path.default.join(tempDir, "node_modules"), "dir");
61
+ var hidesConfigModuleTypeWarning = false;
62
+ var loads = 0;
63
+ var hideConfigModuleTypeWarning = () => {
64
+ if (hidesConfigModuleTypeWarning) return;
65
+ hidesConfigModuleTypeWarning = true;
66
+ const emitWarning = process.emitWarning;
67
+ process.emitWarning = function(warning, ...args) {
68
+ const code = typeof args[0] === "object" ? args[0]?.code : args[1];
69
+ const message = typeof warning === "string" ? warning : warning?.message;
70
+ if (code === "MODULE_TYPELESS_PACKAGE_JSON" && message?.includes("eventcatalog.config.js")) return;
71
+ return emitWarning.call(this, warning, ...args);
72
+ };
81
73
  };
82
- var createTemporaryConfigDirectory = async (projectDirectory) => {
83
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
84
- if (nodeModulesDirectory) {
85
- return (0, import_promises.mkdtemp)(import_node_path.default.join(nodeModulesDirectory, ".eventcatalog-config-"));
74
+ var AS_MODULE_QUERY = "eventcatalog-config-as-module";
75
+ var loadsMarkedConfigsAsModules = false;
76
+ var loadMarkedConfigsAsModules = () => {
77
+ if (loadsMarkedConfigsAsModules) return;
78
+ loadsMarkedConfigsAsModules = true;
79
+ const hook = `export async function load(url, context, nextLoad) {
80
+ return nextLoad(url, url.includes('${AS_MODULE_QUERY}=') ? { ...context, format: 'module' } : context);
81
+ }`;
82
+ (0, import_node_module.register)(`data:text/javascript,${encodeURIComponent(hook)}`);
83
+ };
84
+ var isCommonJSPackage = async (projectDirectory) => {
85
+ try {
86
+ const packageJson = JSON.parse(await (0, import_promises.readFile)(import_node_path.default.join(projectDirectory, "package.json"), "utf-8"));
87
+ return packageJson?.type === "commonjs";
88
+ } catch {
89
+ return false;
86
90
  }
87
- const tempDir = await (0, import_promises.mkdtemp)(import_node_path.default.join((0, import_node_os.tmpdir)(), "eventcatalog-config-"));
88
- await linkNodeModulesIntoTempDirectory({ projectDirectory, tempDir });
89
- return tempDir;
90
91
  };
91
92
  var getEventCatalogConfigFile = async (projectDirectory) => {
92
- let tempDir;
93
93
  try {
94
- let configFilePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.js");
95
- const filePath = import_node_path.default.join(projectDirectory, "package.json");
96
- const packageJson = JSON.parse(await (0, import_promises.readFile)(filePath, "utf-8"));
97
- if (packageJson?.type !== "module") {
98
- tempDir = await createTemporaryConfigDirectory(projectDirectory);
99
- configFilePath = import_node_path.default.join(tempDir, "eventcatalog.config.mjs");
100
- await (0, import_promises.copyFile)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js"), configFilePath);
101
- }
102
- const configFileURL = `${(0, import_node_url.pathToFileURL)(configFilePath).href}?t=${Date.now()}`;
94
+ hideConfigModuleTypeWarning();
95
+ const asModule = await isCommonJSPackage(projectDirectory);
96
+ if (asModule) loadMarkedConfigsAsModules();
97
+ const configFileURL = (0, import_node_url.pathToFileURL)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js")).href;
98
+ const query = `${asModule ? AS_MODULE_QUERY : "loaded"}=${Date.now()}-${loads++}`;
103
99
  const config = await import(
104
100
  /* @vite-ignore */
105
- configFileURL
101
+ `${configFileURL}?${query}`
106
102
  );
107
103
  return config.default;
108
104
  } finally {
109
105
  await cleanup(projectDirectory);
110
- if (tempDir) {
111
- await (0, import_promises.rm)(tempDir, { recursive: true, force: true });
112
- }
113
106
  }
114
107
  };
115
108
 
@@ -633,7 +626,7 @@ var createFileSystemSourceProvider = (projectDirectory) => ({
633
626
  // src/federation/github-source-provider.ts
634
627
  var import_node_child_process = require("child_process");
635
628
  var import_promises7 = __toESM(require("fs/promises"), 1);
636
- var import_node_os2 = __toESM(require("os"), 1);
629
+ var import_node_os = __toESM(require("os"), 1);
637
630
  var import_node_path7 = __toESM(require("path"), 1);
638
631
  var import_node_util = require("util");
639
632
  var import_sdk2 = __toESM(require("@eventcatalog/sdk"), 1);
@@ -690,7 +683,7 @@ var getGitEnvironment = (token) => {
690
683
  var createCheckout = (executeFile, token) => async (source, ref, callback) => {
691
684
  const { owner, repository } = parseGitHubSource(source);
692
685
  const catalogPath = import_node_path7.default.posix.normalize(source.path ?? ".");
693
- const directory = await import_promises7.default.mkdtemp(import_node_path7.default.join(import_node_os2.default.tmpdir(), "eventcatalog-federation-"));
686
+ const directory = await import_promises7.default.mkdtemp(import_node_path7.default.join(import_node_os.default.tmpdir(), "eventcatalog-federation-"));
694
687
  const env = getGitEnvironment(token);
695
688
  try {
696
689
  const git = (args) => executeFile("git", args, { cwd: directory, env, encoding: "utf8" });