@eventcatalog/core 5.0.0-beta.8 → 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 (467) hide show
  1. package/LICENSE +234 -134
  2. package/README.md +5 -5
  3. package/dist/analytics/analytics.cjs +18 -3
  4. package/dist/analytics/analytics.d.cts +1 -1
  5. package/dist/analytics/analytics.d.ts +1 -1
  6. package/dist/analytics/analytics.js +3 -2
  7. package/dist/analytics/log-build.cjs +157 -76
  8. package/dist/analytics/log-build.d.cts +2 -2
  9. package/dist/analytics/log-build.d.ts +2 -2
  10. package/dist/analytics/log-build.js +7 -5
  11. package/dist/analytics/studio-usage.cjs +90 -0
  12. package/dist/analytics/studio-usage.d.cts +5 -0
  13. package/dist/analytics/studio-usage.d.ts +5 -0
  14. package/dist/analytics/studio-usage.js +10 -0
  15. package/dist/analytics/telemetry.cjs +42 -0
  16. package/dist/analytics/telemetry.d.cts +20 -0
  17. package/dist/analytics/telemetry.d.ts +20 -0
  18. package/dist/analytics/telemetry.js +8 -0
  19. package/dist/catalog-runtime.cjs +1 -1
  20. package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
  21. package/dist/{chunk-AWOO63ME.js → chunk-AD7CL772.js} +11 -4
  22. package/dist/chunk-CA6WCQ2T.js +54 -0
  23. package/dist/chunk-CPW6G62V.js +17 -0
  24. package/dist/{chunk-PU25TOOJ.js → chunk-JZN4RSMF.js} +1 -1
  25. package/dist/{chunk-4W55ZOOS.js → chunk-NEAVAFSJ.js} +66 -35
  26. package/dist/{chunk-C6T2AAFR.js → chunk-NIVST4WY.js} +9 -3
  27. package/dist/{chunk-ENAG6UH7.js → chunk-NKNOXQ62.js} +1 -6
  28. package/dist/{chunk-AYNZXUB5.js → chunk-OX6TSVHY.js} +5 -5
  29. package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
  30. package/dist/{chunk-RDIZJ7UT.js → chunk-RE7UTPWH.js} +1 -1
  31. package/dist/chunk-S5GWAUG5.js +29 -0
  32. package/dist/{chunk-T4G3VVZ4.js → chunk-YQGRMDRB.js} +4 -2
  33. package/dist/constants.cjs +1 -1
  34. package/dist/constants.js +1 -1
  35. package/dist/docs/api/02-config.md +57 -7
  36. package/dist/docs/development/00-why-eventcatalog.md +11 -11
  37. package/dist/docs/development/01-fundamentals.md +20 -13
  38. package/dist/docs/development/01-getting-started/configuration-overview.md +2 -2
  39. package/dist/docs/development/01-getting-started/installation.md +9 -1
  40. package/dist/docs/development/_getting-started.mdx +1 -1
  41. package/dist/docs/development/ask-your-architecture/01-intro.md +5 -5
  42. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/01-what-is-eventcatalog-assistant.md +0 -4
  43. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +15 -3
  44. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/03-bring-your-own-tools.md +0 -3
  45. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/_category_.json +1 -1
  46. package/dist/docs/development/ask-your-architecture/02-llms.txt.md +1 -1
  47. package/dist/docs/development/ask-your-architecture/{05-skills/01-introduction.md → 03-install-skills.md} +57 -7
  48. package/dist/docs/development/ask-your-architecture/03-mcp-server/_category_.json +1 -1
  49. package/dist/docs/development/ask-your-architecture/03-mcp-server/getting-started.md +86 -33
  50. package/dist/docs/development/ask-your-architecture/03-mcp-server/introduction.md +14 -4
  51. package/dist/docs/development/ask-your-architecture/03-schemas.txt.md +1 -1
  52. package/dist/docs/development/ask-your-architecture/04-agents/_category_.json +1 -1
  53. package/dist/docs/development/authentication/01-introduction.md +2 -23
  54. package/dist/docs/development/authentication/02-enabling-authentication.md +0 -20
  55. package/dist/docs/development/authentication/07-rbac-middleware.md +0 -2
  56. package/dist/docs/development/authentication/providers/03-setting-up-github.md +0 -2
  57. package/dist/docs/development/authentication/providers/03a-setting-up-google.md +0 -2
  58. package/dist/docs/development/authentication/providers/04-setting-up-azure-ad.md +0 -2
  59. package/dist/docs/development/authentication/providers/05-setting-up-okta.md +0 -3
  60. package/dist/docs/development/authentication/providers/06-setting-up-auth0.md +0 -2
  61. package/dist/docs/development/bring-your-own-documentation/01-introduction.md +0 -4
  62. package/dist/docs/development/bring-your-own-documentation/custom-pages/01-introduction.md +0 -3
  63. package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +0 -17
  64. package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +0 -4
  65. package/dist/docs/development/bring-your-own-documentation/custom-pages/04-owners.md +0 -2
  66. package/dist/docs/development/bring-your-own-documentation/resource-docs/01-introduction.md +1 -3
  67. package/dist/docs/development/bring-your-own-documentation/resource-docs/02-adding-resource-docs.md +1 -4
  68. package/dist/docs/development/bring-your-own-documentation/resource-docs/03-categories.md +0 -2
  69. package/dist/docs/development/bring-your-own-documentation/resource-docs/04-versioning.md +1 -3
  70. package/dist/docs/development/components/components/11-flow.md +17 -0
  71. package/dist/docs/development/components/components/15-nodegraph.md +43 -10
  72. package/dist/docs/development/components/components/18-remote-schema.md +1 -4
  73. package/dist/docs/development/components/custom-components/07-reference.md +14 -0
  74. package/dist/docs/development/customization/02-themes.md +0 -5
  75. package/dist/docs/development/customization/03-search.md +1 -1
  76. package/dist/docs/development/customization/05-custom-pages-and-api-routes/01-introduction.md +0 -2
  77. package/dist/docs/development/customization/05-custom-pages-and-api-routes/04-reference.md +7 -1
  78. package/dist/docs/development/customization/05-resource-sidebar.md +1 -1
  79. package/dist/docs/development/customization/09-embed-eventcatalog.md +20 -25
  80. package/dist/docs/development/deployment/hosting-options.md +7 -2
  81. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +16 -0
  82. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +31 -1
  83. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +1 -1
  84. package/dist/docs/development/governance/architecture-change-detection/01-introduction.md +0 -10
  85. package/dist/docs/development/governance/architecture-change-detection/06-pipeline-gates.md +0 -4
  86. package/dist/docs/development/guides/97-architecture-graph.md +1 -1
  87. package/dist/docs/development/guides/99-adding-analytics.md +0 -7
  88. package/dist/docs/development/guides/domains/03-model-subdomains.md +2 -2
  89. package/dist/docs/development/guides/domains/04-add-resources-to-domains/01-add-systems-to-domains.md +3 -1
  90. package/dist/docs/development/guides/domains/04-add-resources-to-domains/02-add-services-to-domains.md +5 -1
  91. package/dist/docs/development/guides/domains/04-add-resources-to-domains/03-add-messages-to-domains.md +2 -2
  92. package/dist/docs/development/guides/domains/04-add-resources-to-domains/05-add-entities-to-domains.md +1 -1
  93. package/dist/docs/development/guides/domains/04-add-resources-to-domains/06-domain-resources-page.md +40 -0
  94. package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-diagram.md +89 -0
  95. package/dist/docs/development/guides/domains/06-visualize-domains/_category_.json +1 -2
  96. package/dist/docs/development/guides/domains/09-reference.md +4 -4
  97. package/dist/docs/development/guides/owners/automated-teams-and-users/create-your-own-connector.md +0 -2
  98. package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-github.md +0 -3
  99. package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-microsoft-entra.md +0 -2
  100. package/dist/docs/development/guides/resources/adrs/03-linking-resources.md +8 -0
  101. package/dist/docs/development/guides/resources/adrs/06-reference.md +4 -4
  102. package/dist/docs/development/guides/resources/agents/11-reference.md +1 -1
  103. package/dist/docs/development/guides/resources/data/04-reference.md +1 -1
  104. package/dist/docs/development/guides/resources/data-products/07-reference.md +1 -1
  105. package/dist/docs/development/guides/resources/entities/05-entity-maps.md +1 -1
  106. package/dist/docs/development/guides/resources/entities/06-reference.md +2 -2
  107. package/dist/docs/development/guides/resources/flows/01-introduction.md +11 -1
  108. package/dist/docs/development/guides/resources/flows/03-model-flow-steps.md +65 -6
  109. package/dist/docs/development/guides/resources/flows/05-explore-flows.md +112 -0
  110. package/dist/docs/development/guides/resources/flows/06-reference.md +25 -4
  111. package/dist/docs/development/guides/resources/messages/01-what-are-messages.md +19 -0
  112. package/dist/docs/development/guides/resources/messages/04-message-channels/01-introduction.md +16 -0
  113. package/dist/docs/development/guides/resources/messages/04-message-channels/05-reference.md +2 -1
  114. package/dist/docs/development/guides/resources/messages/10-reference.md +6 -3
  115. package/dist/docs/development/guides/resources/schemas/04-explore-schemas/01-schema-explorer.md +2 -2
  116. package/dist/docs/development/guides/resources/schemas/04-explore-schemas/02-fields-explorer.md +0 -9
  117. package/dist/docs/development/guides/resources/schemas/05-schema-api.md +0 -3
  118. package/dist/docs/development/guides/resources/schemas/06-schema-mcp.md +11 -3
  119. package/dist/docs/development/guides/resources/services/04-add-resources-to-services/03-add-entities-to-services.md +1 -1
  120. package/dist/docs/development/guides/resources/services/05-resources-page.md +50 -0
  121. package/dist/docs/development/guides/resources/services/08-reference.md +2 -1
  122. package/dist/docs/development/guides/systems/01-introduction.md +1 -1
  123. package/dist/docs/development/guides/systems/02-create-system.md +2 -2
  124. package/dist/docs/development/guides/systems/03-add-resources-to-systems.md +35 -9
  125. package/dist/docs/development/guides/systems/04-model-relationships-and-actors.md +5 -3
  126. package/dist/docs/development/guides/systems/05-system-context-maps.md +39 -22
  127. package/dist/docs/development/guides/systems/06-reference.md +4 -4
  128. package/dist/docs/development/license/01-license-file.md +151 -0
  129. package/dist/docs/development/license/_category_.json +12 -0
  130. package/dist/docs/development/license-keys/_category_.json +3 -3
  131. package/dist/docs/development/license-keys/integrations.md +7 -37
  132. package/dist/docs/development/license-keys/license-validation.md +4 -0
  133. package/dist/docs/development/license-keys/overview.md +5 -1
  134. package/dist/docs/development/license-keys/plans.md +4 -2
  135. package/dist/docs/development/studio/01-introduction.md +60 -0
  136. package/dist/docs/development/studio/02-create-a-canvas.md +103 -0
  137. package/dist/docs/development/studio/03-set-up-persistent-storage.md +59 -0
  138. package/dist/docs/development/studio/04-collaborate-on-a-canvas.md +78 -0
  139. package/dist/docs/development/studio/05-connect-your-agent.md +102 -0
  140. package/dist/docs/development/studio/06-run-studio-in-production.md +54 -0
  141. package/dist/docs/development/studio/07-reference.md +294 -0
  142. package/dist/docs/development/studio/_category_.json +12 -0
  143. package/dist/docs/development/upgrading/v5.md +345 -0
  144. package/dist/docs/federation/00-overview.md +2 -8
  145. package/dist/docs/federation/01-first-federation.md +6 -18
  146. package/dist/docs/federation/explanation/how-it-works.md +0 -4
  147. package/dist/docs/federation/explanation/lockfile-and-cache.md +0 -4
  148. package/dist/docs/federation/explanation/mvp-status-and-feedback.md +0 -4
  149. package/dist/docs/federation/explanation/ownership-and-references.md +0 -4
  150. package/dist/docs/federation/how-to/configure-github-sources.md +6 -5
  151. package/dist/docs/federation/how-to/configure-validation-rules.md +0 -4
  152. package/dist/docs/federation/how-to/run-in-ci.md +2 -9
  153. package/dist/docs/federation/how-to/share-assets-and-components.md +0 -4
  154. package/dist/docs/federation/how-to/use-local-sources.md +0 -4
  155. package/dist/docs/federation/legacy-federation/00-introduction.md +4 -22
  156. package/dist/docs/federation/legacy-federation/01-installation.md +7 -58
  157. package/dist/docs/federation/legacy-federation/02-plugin-configuration.md +3 -21
  158. package/dist/docs/federation/legacy-federation/03-examples.md +3 -5
  159. package/dist/docs/federation/legacy-federation/04-configuration.md +3 -8
  160. package/dist/docs/federation/legacy-federation/05-setup-team-catalog.md +3 -6
  161. package/dist/docs/federation/reference/cli.md +2 -8
  162. package/dist/docs/federation/reference/configuration.md +0 -4
  163. package/dist/docs/federation/reference/diagnostic-rules.md +0 -5
  164. package/dist/docs/federation/reference/generated-output.md +0 -4
  165. package/dist/docs/federation/reference/supported-content.md +0 -4
  166. package/dist/docs/federation/reference/troubleshooting.md +0 -14
  167. package/dist/docs/plugins/02-generators.md +1 -1
  168. package/dist/docs/plugins/amazon-apigateway/00-intro.md +3 -28
  169. package/dist/docs/plugins/amazon-apigateway/01-installation.md +4 -56
  170. package/dist/docs/plugins/amazon-apigateway/02-plugin-configuration.md +1 -6
  171. package/dist/docs/plugins/apicurio/00-intro.md +2 -31
  172. package/dist/docs/plugins/apicurio/01-installation.md +2 -26
  173. package/dist/docs/plugins/apicurio/02-plugin-configuration.md +5 -13
  174. package/dist/docs/plugins/apicurio/03-features.md +1 -3
  175. package/dist/docs/plugins/asyncapi/00-intro.md +2 -28
  176. package/dist/docs/plugins/asyncapi/01-installation.md +3 -54
  177. package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +2 -1
  178. package/dist/docs/plugins/aws-glue-registry/00-intro.md +4 -32
  179. package/dist/docs/plugins/aws-glue-registry/00a-installation.md +3 -53
  180. package/dist/docs/plugins/azure-schema-registry/00-intro.md +4 -32
  181. package/dist/docs/plugins/azure-schema-registry/01-installation.md +6 -33
  182. package/dist/docs/plugins/azure-schema-registry/02-plugin-configuration.md +1 -14
  183. package/dist/docs/plugins/azure-schema-registry/04-examples.md +0 -2
  184. package/dist/docs/plugins/backstage/00-overview.md +1 -7
  185. package/dist/docs/plugins/backstage/01-get-started.md +6 -15
  186. package/dist/docs/plugins/backstage/06-configuration.md +2 -8
  187. package/dist/docs/plugins/confluent-schema-registry/00-intro.md +2 -29
  188. package/dist/docs/plugins/confluent-schema-registry/01-installation.md +2 -26
  189. package/dist/docs/plugins/eventbridge/00-intro.md +0 -4
  190. package/dist/docs/plugins/eventbridge/00a-installation.md +1 -87
  191. package/dist/docs/plugins/eventbridge/03-api.md +2 -20
  192. package/dist/docs/plugins/github/00-intro.md +0 -31
  193. package/dist/docs/plugins/github/01-installation.md +2 -34
  194. package/dist/docs/plugins/graphql/00-intro.md +0 -30
  195. package/dist/docs/plugins/graphql/01-installation.md +1 -53
  196. package/dist/docs/plugins/graphql/02-plugin-configuration.md +0 -1
  197. package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
  198. package/dist/docs/plugins/openapi/00-intro.md +0 -30
  199. package/dist/docs/plugins/openapi/01-installation.md +1 -57
  200. package/dist/docs/plugins/openapi/02-plugin-configuration.md +0 -5
  201. package/dist/docs/plugins/openapi/03-features.md +0 -4
  202. package/dist/eventcatalog-config-file-utils.cjs +34 -41
  203. package/dist/eventcatalog-config-file-utils.d.cts +56 -58
  204. package/dist/eventcatalog-config-file-utils.d.ts +56 -58
  205. package/dist/eventcatalog-config-file-utils.js +1 -1
  206. package/dist/eventcatalog.cjs +408 -281
  207. package/dist/eventcatalog.config.d.cts +26 -15
  208. package/dist/eventcatalog.config.d.ts +26 -15
  209. package/dist/eventcatalog.js +46 -27
  210. package/dist/features.cjs +36 -49
  211. package/dist/features.d.cts +1 -3
  212. package/dist/features.d.ts +1 -3
  213. package/dist/features.js +4 -6
  214. package/dist/federation/federate.cjs +37 -44
  215. package/dist/federation/federate.js +5 -5
  216. package/dist/federation/source-provider.js +2 -2
  217. package/dist/generate.cjs +37 -42
  218. package/dist/generate.js +4 -4
  219. package/dist/resolve-catalog-dependencies.cjs +34 -41
  220. package/dist/resolve-catalog-dependencies.js +2 -2
  221. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
  222. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
  223. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
  224. package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
  225. package/dist/runtime-dependencies/manifest.json +5 -1
  226. package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
  227. package/dist/utils/child-process-signals.cjs +53 -0
  228. package/dist/utils/child-process-signals.d.cts +19 -0
  229. package/dist/utils/child-process-signals.d.ts +19 -0
  230. package/dist/utils/child-process-signals.js +6 -0
  231. package/dist/utils/cli-logger.cjs +1 -1
  232. package/dist/utils/cli-logger.js +2 -2
  233. package/dist/utils/license-status.cjs +11 -4
  234. package/dist/utils/license-status.d.cts +3 -2
  235. package/dist/utils/license-status.d.ts +3 -2
  236. package/dist/utils/license-status.js +1 -1
  237. package/eventcatalog/astro.config.mjs +21 -1
  238. package/eventcatalog/integrations/config-loader.mjs +56 -58
  239. package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
  240. package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
  241. package/eventcatalog/integrations/storage.mjs +20 -0
  242. package/eventcatalog/integrations/studio-server.mjs +4 -1
  243. package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
  244. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
  245. package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
  246. package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
  247. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
  248. package/eventcatalog/src/components/NavigationProgress.astro +7 -0
  249. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
  250. package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
  251. package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
  252. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
  253. package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
  254. package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
  255. package/eventcatalog/src/components/Search/search-utils.ts +26 -0
  256. package/eventcatalog/src/components/Seo.astro +5 -1
  257. package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
  258. package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
  259. package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
  260. package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
  261. package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
  262. package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
  263. package/eventcatalog/src/components/Settings/Row.tsx +7 -4
  264. package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
  265. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +37 -76
  266. package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
  267. package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +122 -1
  268. package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
  269. package/eventcatalog/src/components/TrialBadge.astro +20 -9
  270. package/eventcatalog/src/content.config.ts +19 -2
  271. package/eventcatalog/src/features/auth/error.astro +4 -2
  272. package/eventcatalog/src/features/auth/login.astro +2 -1
  273. package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +21 -1
  274. package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
  275. package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
  276. package/eventcatalog/src/features/integrations/eventcatalog-features.ts +13 -7
  277. package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
  278. package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +3 -3
  279. package/eventcatalog/src/features/mcp/apps/canvas/styles.css +3 -1
  280. package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +7 -5
  281. package/eventcatalog/src/features/mcp/apps/generated/canvas.html +123 -98
  282. package/eventcatalog/src/features/mcp/apps/generated/viewer.html +118 -101
  283. package/eventcatalog/src/features/mcp/mcp-server.ts +20 -4
  284. package/eventcatalog/src/features/server/start.ts +25 -0
  285. package/eventcatalog/src/features/storage/database.ts +88 -0
  286. package/eventcatalog/src/features/storage/migrations.ts +85 -0
  287. package/eventcatalog/src/features/storage/sql/database.sql +5 -0
  288. package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
  289. package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
  290. package/eventcatalog/src/features/storage/sql.ts +28 -0
  291. package/eventcatalog/src/features/studio/agent-choreography.ts +13 -10
  292. package/eventcatalog/src/features/studio/agents.ts +28 -0
  293. package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
  294. package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
  295. package/eventcatalog/src/features/studio/api/client.ts +40 -0
  296. package/eventcatalog/src/features/studio/canvas-actions.ts +160 -34
  297. package/eventcatalog/src/features/studio/canvas-preview.ts +1 -2
  298. package/eventcatalog/src/features/studio/catalog.ts +16 -14
  299. package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +274 -105
  300. package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +15 -14
  301. package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +272 -119
  302. package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +1 -2
  303. package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
  304. package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
  305. package/eventcatalog/src/features/studio/components/JoinForm.tsx +101 -26
  306. package/eventcatalog/src/features/studio/components/LeftPanel.tsx +122 -230
  307. package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
  308. package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
  309. package/eventcatalog/src/features/studio/components/Presence.tsx +52 -45
  310. package/eventcatalog/src/features/studio/components/ShareDialog.tsx +277 -141
  311. package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
  312. package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +1314 -385
  313. package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
  314. package/eventcatalog/src/features/studio/document-name.ts +7 -0
  315. package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
  316. package/eventcatalog/src/features/studio/hooks/presence-sender.ts +19 -2
  317. package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +9 -3
  318. package/eventcatalog/src/features/studio/hooks/use-comments.ts +2 -2
  319. package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +8 -3
  320. package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +244 -32
  321. package/eventcatalog/src/features/studio/identity.ts +25 -1
  322. package/eventcatalog/src/features/studio/limits.ts +2 -0
  323. package/eventcatalog/src/features/studio/pages/[id].astro +42 -16
  324. package/eventcatalog/src/features/studio/pages/index.astro +596 -373
  325. package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +12 -15
  326. package/eventcatalog/src/features/studio/server/canvas-mcp.ts +8 -23
  327. package/eventcatalog/src/features/studio/server/runtime.ts +150 -46
  328. package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
  329. package/eventcatalog/src/features/studio/server/storage.ts +53 -73
  330. package/eventcatalog/src/features/studio/webmcp-relay/LICENSE +21 -0
  331. package/eventcatalog/src/features/studio/webmcp-relay/README.md +5 -0
  332. package/eventcatalog/src/features/studio/webmcp-relay/embed.js +2 -0
  333. package/eventcatalog/src/features/studio/webmcp-relay/widget.html +10 -0
  334. package/eventcatalog/src/features/studio/webmcp-relay/widget.js +1 -0
  335. package/eventcatalog/src/features/tools/catalog-tools.ts +3 -1
  336. package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
  337. package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
  338. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +3 -2
  339. package/eventcatalog/src/pages/_index.astro +5 -342
  340. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
  341. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
  342. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
  343. package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
  344. package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
  345. package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
  346. package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
  347. package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
  348. package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
  349. package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
  350. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
  351. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
  352. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
  353. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
  354. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
  355. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
  356. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
  357. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
  358. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
  359. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
  360. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
  361. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
  362. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
  363. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
  364. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
  365. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
  366. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
  367. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
  368. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
  369. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
  370. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
  371. package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
  372. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
  373. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
  374. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
  375. package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
  376. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
  377. package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
  378. package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
  379. package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
  380. package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
  381. package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
  382. package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
  383. package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
  384. package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
  385. package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
  386. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
  387. package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
  388. package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
  389. package/eventcatalog/src/pages/index.astro +4 -2
  390. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
  391. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +9 -1
  392. package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
  393. package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
  394. package/eventcatalog/src/pages/settings/license.astro +9 -1
  395. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
  396. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
  397. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
  398. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
  399. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
  400. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
  401. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
  402. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
  403. package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
  404. package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
  405. package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
  406. package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
  407. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
  408. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
  409. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
  410. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
  411. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
  412. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
  413. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
  414. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
  415. package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
  416. package/eventcatalog/src/utils/collections/flows.ts +20 -7
  417. package/eventcatalog/src/utils/collections/resource-owners.ts +8 -2
  418. package/eventcatalog/src/utils/collections/resources.ts +2 -0
  419. package/eventcatalog/src/utils/collections/util.ts +8 -4
  420. package/eventcatalog/src/utils/git.ts +11 -0
  421. package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
  422. package/eventcatalog/src/utils/license.ts +1 -1
  423. package/eventcatalog/src/utils/link-validation.ts +25 -19
  424. package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
  425. package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
  426. package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
  427. package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
  428. package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
  429. package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
  430. package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
  431. package/eventcatalog/src/utils/page-title.ts +15 -0
  432. package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
  433. package/eventcatalog/src/utils/trial.ts +13 -0
  434. package/package.json +11 -11
  435. package/dist/docs/development/ask-your-architecture/05-skills/02-installation.md +0 -60
  436. package/dist/docs/development/ask-your-architecture/05-skills/_category_.json +0 -11
  437. package/dist/docs/development/ask-your-architecture/06-slack-integration/01-introduction.md +0 -63
  438. package/dist/docs/development/ask-your-architecture/06-slack-integration/02-slack-app-setup.md +0 -154
  439. package/dist/docs/development/ask-your-architecture/06-slack-integration/03-installation.md +0 -169
  440. package/dist/docs/development/ask-your-architecture/06-slack-integration/04-deployment.md +0 -236
  441. package/dist/docs/development/ask-your-architecture/06-slack-integration/05-usage.md +0 -140
  442. package/dist/docs/development/ask-your-architecture/06-slack-integration/06-troubleshooting.md +0 -268
  443. package/dist/docs/development/ask-your-architecture/06-slack-integration/_category_.json +0 -13
  444. package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-integration-map.md +0 -40
  445. package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +0 -3
  446. package/eventcatalog/src/features/studio/canvas-doc.ts +0 -409
  447. package/eventcatalog/src/features/studio/clipboard.ts +0 -97
  448. package/eventcatalog/src/features/studio/components/CanvasControls.tsx +0 -154
  449. package/eventcatalog/src/features/studio/components/Comments.tsx +0 -770
  450. package/eventcatalog/src/features/studio/components/ContainerChooser.tsx +0 -145
  451. package/eventcatalog/src/features/studio/components/DragGhost.tsx +0 -115
  452. package/eventcatalog/src/features/studio/components/Picture.tsx +0 -21
  453. package/eventcatalog/src/features/studio/components/PropertiesPanel.tsx +0 -212
  454. package/eventcatalog/src/features/studio/components/canvas-nodes.tsx +0 -255
  455. package/eventcatalog/src/features/studio/components/icons.ts +0 -53
  456. package/eventcatalog/src/features/studio/components/status.ts +0 -51
  457. package/eventcatalog/src/features/studio/edges.ts +0 -56
  458. package/eventcatalog/src/features/studio/flow-state.ts +0 -92
  459. package/eventcatalog/src/features/studio/grouping.ts +0 -226
  460. package/eventcatalog/src/features/studio/layout.ts +0 -42
  461. package/eventcatalog/src/features/studio/levels.ts +0 -282
  462. package/eventcatalog/src/features/studio/node-types.ts +0 -205
  463. package/eventcatalog/src/features/studio/pages/new.astro +0 -24
  464. package/eventcatalog/src/features/studio/pages/wake.ts +0 -15
  465. package/eventcatalog/src/features/studio/placement.ts +0 -197
  466. package/eventcatalog/src/features/studio/studio.css +0 -273
  467. package/dist/{chunk-A2RZR3U4.js → chunk-6K7XZAYI.js} +3 -3
@@ -45,65 +45,58 @@ var import_promises = require("fs/promises");
45
45
  var import_node_fs = require("fs");
46
46
  var import_node_path = __toESM(require("path"), 1);
47
47
  var import_node_url = require("url");
48
- var import_node_os = require("os");
48
+ var import_node_module = require("module");
49
49
  async function cleanup(projectDirectory) {
50
50
  const filePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.mjs");
51
51
  if ((0, import_node_fs.existsSync)(filePath)) {
52
52
  await (0, import_promises.rm)(filePath);
53
53
  }
54
54
  }
55
- var findNodeModulesDirectory = (directory) => {
56
- let currentDirectory = directory;
57
- while (true) {
58
- const nodeModulesDirectory = import_node_path.default.join(currentDirectory, "node_modules");
59
- if ((0, import_node_fs.existsSync)(nodeModulesDirectory)) {
60
- return nodeModulesDirectory;
61
- }
62
- const parentDirectory = import_node_path.default.dirname(currentDirectory);
63
- if (parentDirectory === currentDirectory) {
64
- return void 0;
65
- }
66
- currentDirectory = parentDirectory;
67
- }
55
+ var hidesConfigModuleTypeWarning = false;
56
+ var loads = 0;
57
+ var hideConfigModuleTypeWarning = () => {
58
+ if (hidesConfigModuleTypeWarning) return;
59
+ hidesConfigModuleTypeWarning = true;
60
+ const emitWarning = process.emitWarning;
61
+ process.emitWarning = function(warning, ...args) {
62
+ const code = typeof args[0] === "object" ? args[0]?.code : args[1];
63
+ const message = typeof warning === "string" ? warning : warning?.message;
64
+ if (code === "MODULE_TYPELESS_PACKAGE_JSON" && message?.includes("eventcatalog.config.js")) return;
65
+ return emitWarning.call(this, warning, ...args);
66
+ };
68
67
  };
69
- var linkNodeModulesIntoTempDirectory = async ({ projectDirectory, tempDir }) => {
70
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
71
- if (!nodeModulesDirectory) {
72
- return;
73
- }
74
- await (0, import_promises.symlink)(nodeModulesDirectory, import_node_path.default.join(tempDir, "node_modules"), "dir");
68
+ var AS_MODULE_QUERY = "eventcatalog-config-as-module";
69
+ var loadsMarkedConfigsAsModules = false;
70
+ var loadMarkedConfigsAsModules = () => {
71
+ if (loadsMarkedConfigsAsModules) return;
72
+ loadsMarkedConfigsAsModules = true;
73
+ const hook = `export async function load(url, context, nextLoad) {
74
+ return nextLoad(url, url.includes('${AS_MODULE_QUERY}=') ? { ...context, format: 'module' } : context);
75
+ }`;
76
+ (0, import_node_module.register)(`data:text/javascript,${encodeURIComponent(hook)}`);
75
77
  };
76
- var createTemporaryConfigDirectory = async (projectDirectory) => {
77
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
78
- if (nodeModulesDirectory) {
79
- return (0, import_promises.mkdtemp)(import_node_path.default.join(nodeModulesDirectory, ".eventcatalog-config-"));
78
+ var isCommonJSPackage = async (projectDirectory) => {
79
+ try {
80
+ const packageJson = JSON.parse(await (0, import_promises.readFile)(import_node_path.default.join(projectDirectory, "package.json"), "utf-8"));
81
+ return packageJson?.type === "commonjs";
82
+ } catch {
83
+ return false;
80
84
  }
81
- const tempDir = await (0, import_promises.mkdtemp)(import_node_path.default.join((0, import_node_os.tmpdir)(), "eventcatalog-config-"));
82
- await linkNodeModulesIntoTempDirectory({ projectDirectory, tempDir });
83
- return tempDir;
84
85
  };
85
86
  var getEventCatalogConfigFile = async (projectDirectory) => {
86
- let tempDir;
87
87
  try {
88
- let configFilePath = import_node_path.default.join(projectDirectory, "eventcatalog.config.js");
89
- const filePath = import_node_path.default.join(projectDirectory, "package.json");
90
- const packageJson = JSON.parse(await (0, import_promises.readFile)(filePath, "utf-8"));
91
- if (packageJson?.type !== "module") {
92
- tempDir = await createTemporaryConfigDirectory(projectDirectory);
93
- configFilePath = import_node_path.default.join(tempDir, "eventcatalog.config.mjs");
94
- await (0, import_promises.copyFile)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js"), configFilePath);
95
- }
96
- const configFileURL = `${(0, import_node_url.pathToFileURL)(configFilePath).href}?t=${Date.now()}`;
88
+ hideConfigModuleTypeWarning();
89
+ const asModule = await isCommonJSPackage(projectDirectory);
90
+ if (asModule) loadMarkedConfigsAsModules();
91
+ const configFileURL = (0, import_node_url.pathToFileURL)(import_node_path.default.join(projectDirectory, "eventcatalog.config.js")).href;
92
+ const query = `${asModule ? AS_MODULE_QUERY : "loaded"}=${Date.now()}-${loads++}`;
97
93
  const config = await import(
98
94
  /* @vite-ignore */
99
- configFileURL
95
+ `${configFileURL}?${query}`
100
96
  );
101
97
  return config.default;
102
98
  } finally {
103
99
  await cleanup(projectDirectory);
104
- if (tempDir) {
105
- await (0, import_promises.rm)(tempDir, { recursive: true, force: true });
106
- }
107
100
  }
108
101
  };
109
102
 
@@ -176,13 +169,27 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
176
169
  var import_os = __toESM(require("os"), 1);
177
170
 
178
171
  // package.json
179
- var version = "5.0.0-beta.8";
172
+ var version = "5.0.0";
180
173
 
181
174
  // src/constants.ts
182
175
  var VERSION = version;
183
176
 
177
+ // src/analytics/telemetry.ts
178
+ var TELEMETRY_REQUEST_TIMEOUT_MS = 2e3;
179
+ var isOptOutEnvValue = (value) => {
180
+ if (typeof value !== "string") return false;
181
+ const normalized = value.trim().toLowerCase();
182
+ return normalized === "1" || normalized === "true";
183
+ };
184
+ var isTelemetryDisabled = (config, env) => {
185
+ if (isOptOutEnvValue(env.EVENTCATALOG_TELEMETRY_DISABLED)) return true;
186
+ if (isOptOutEnvValue(env.DO_NOT_TRACK)) return true;
187
+ return config?.telemetry === false;
188
+ };
189
+
184
190
  // src/analytics/analytics.js
185
- async function raiseEvent(eventData) {
191
+ async function raiseEvent(eventData, config) {
192
+ if (isTelemetryDisabled(config, process.env)) return;
186
193
  if (typeof eventData?.command !== "string" || typeof eventData?.cId !== "string") return;
187
194
  const url = "https://queue.simpleanalyticscdn.com/events";
188
195
  const userAgent = `@eventcatalog/eventcatalog@${VERSION} (${import_os.default.platform()}; ${import_os.default.arch()}; Node/${process.version})`;
@@ -204,7 +211,8 @@ async function raiseEvent(eventData) {
204
211
  const response = await fetch(url, {
205
212
  method: "POST",
206
213
  headers,
207
- body: JSON.stringify(payload)
214
+ body: JSON.stringify(payload),
215
+ signal: AbortSignal.timeout(TELEMETRY_REQUEST_TIMEOUT_MS)
208
216
  });
209
217
  if (!response.ok) {
210
218
  throw new Error(`Failed to raise analytics event: ${response.status}`);
@@ -286,6 +294,7 @@ var import_license2 = require("@eventcatalog/license");
286
294
 
287
295
  // eventcatalog/src/utils/trial.ts
288
296
  var TRIAL_LENGTH_DAYS = 60;
297
+ var FREE_USE_NOTE = "Under $10M revenue and $10M raised, an individual or an open-source project? You qualify for Free Use; get a free key at eventcatalog.cloud.";
289
298
  var DAY_IN_MS = 24 * 60 * 60 * 1e3;
290
299
  var getTrialStatus = (tsd, now = Date.now()) => {
291
300
  if (typeof tsd !== "number" || !Number.isFinite(tsd) || tsd <= 0) return;
@@ -313,6 +322,56 @@ var getLicenseAnalytics = (license = { state: "none" }, tsd) => ({
313
322
  trialExpiry: getTrialStatus(tsd)?.endsAt.getTime()
314
323
  });
315
324
  var COLOURS = { bold: import_picocolors.default.bold, dim: import_picocolors.default.dim, link: (text) => import_picocolors.default.cyan(text) };
325
+ var FREE_USE_LINES = FREE_USE_NOTE.split(/(?<=\?) /);
326
+
327
+ // src/analytics/studio-usage.js
328
+ var import_node_fs3 = __toESM(require("fs"), 1);
329
+ var import_node_path5 = __toESM(require("path"), 1);
330
+ var DAY_IN_MS3 = 24 * 60 * 60 * 1e3;
331
+ var DEFAULT_DATABASE_PATH = ".eventcatalog/eventcatalog.db";
332
+ var getStudioMode = (configFile) => {
333
+ const enabled = configFile.studio?.enabled;
334
+ if (enabled === false) return "off";
335
+ return configFile.output === "server" && enabled === true ? "server" : "dev";
336
+ };
337
+ var getStorageType = (configFile) => configFile.storage?.type || "memory";
338
+ var loadSqlite = () => {
339
+ const emitWarning = process.emitWarning;
340
+ process.emitWarning = function(warning, ...args) {
341
+ const type = typeof args[0] === "object" ? args[0]?.type : args[0];
342
+ const message = typeof warning === "string" ? warning : warning?.message;
343
+ if (type === "ExperimentalWarning" && message?.startsWith("SQLite")) return;
344
+ return emitWarning.call(this, warning, ...args);
345
+ };
346
+ try {
347
+ return process.getBuiltinModule?.("node:sqlite");
348
+ } catch {
349
+ return void 0;
350
+ } finally {
351
+ process.emitWarning = emitWarning;
352
+ }
353
+ };
354
+ var UNKNOWN = "canvases:unknown";
355
+ var serializeStudioUsage = (projectDirectory, configFile, now = Date.now()) => {
356
+ if (getStudioMode(configFile) === "off" || getStorageType(configFile) !== "sqlite") return UNKNOWN;
357
+ const file = import_node_path5.default.resolve(projectDirectory, configFile.storage.path ?? DEFAULT_DATABASE_PATH);
358
+ if (!import_node_fs3.default.existsSync(file)) return "canvases:0,changed7d:0,changed30d:0,deleted:0";
359
+ let database;
360
+ try {
361
+ const sqlite = loadSqlite();
362
+ if (!sqlite?.DatabaseSync) return UNKNOWN;
363
+ database = new sqlite.DatabaseSync(file, { readOnly: true });
364
+ const canvases = database.prepare(
365
+ "SELECT COUNT(*) AS total, SUM(updated_at >= ?) AS changed7d, SUM(updated_at >= ?) AS changed30d FROM studio_canvases"
366
+ ).get(now - 7 * DAY_IN_MS3, now - 30 * DAY_IN_MS3);
367
+ const { deleted } = database.prepare("SELECT COUNT(*) AS deleted FROM studio_deleted_canvases").get();
368
+ return `canvases:${canvases.total},changed7d:${canvases.changed7d ?? 0},changed30d:${canvases.changed30d ?? 0},deleted:${deleted}`;
369
+ } catch {
370
+ return UNKNOWN;
371
+ } finally {
372
+ database?.close();
373
+ }
374
+ };
316
375
 
317
376
  // src/analytics/log-build.js
318
377
  var isMCPEnabled = (configFile) => configFile.output === "server" && (configFile.mcp?.enabled ?? true);
@@ -327,7 +386,9 @@ var getFeatures = async (configFile) => {
327
386
  environments: Array.isArray(configFile.environments) && configFile.environments.length > 0,
328
387
  output: configFile.output || "static",
329
388
  mcp,
330
- mcpAuth: mcp && (configFile.mcp?.auth?.enabled ?? false)
389
+ mcpAuth: mcp && (configFile.mcp?.auth?.enabled ?? false),
390
+ studio: getStudioMode(configFile),
391
+ storage: getStorageType(configFile)
331
392
  };
332
393
  };
333
394
  var getDirectoryProvider = (source) => {
@@ -369,50 +430,70 @@ var toCloudResourceCounts = (counts) => ({
369
430
  customPages: counts.customPages || 0,
370
431
  customApis: counts.customApis || 0
371
432
  });
372
- var reportCloudResourceInventory = async (configFile, resourceCounts) => {
433
+ var getEnabledCloudAnalytics = (configFile) => {
373
434
  const analytics = configFile.cloud?.analytics;
374
- if (!analytics?.enabled || !analytics.trackingId || !analytics.writeKey) return;
435
+ if (!analytics?.enabled || !analytics.trackingId || !analytics.writeKey) return null;
436
+ return analytics;
437
+ };
438
+ var reportCloudResourceInventory = async (configFile, resourceCounts) => {
439
+ const analytics = getEnabledCloudAnalytics(configFile);
440
+ if (!analytics) return;
375
441
  const endpoint = analytics.endpoint || CLOUD_ANALYTICS_ENDPOINT;
376
- await fetch(endpoint, {
377
- method: "POST",
378
- headers: {
379
- "Content-Type": "application/json",
380
- "X-EventCatalog-Analytics-Key": analytics.writeKey
381
- },
382
- body: JSON.stringify({
383
- trackingId: analytics.trackingId,
384
- event: "catalog.resource_inventory_reported",
385
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
386
- counts: toCloudResourceCounts(resourceCounts)
387
- })
388
- });
442
+ try {
443
+ await fetch(endpoint, {
444
+ method: "POST",
445
+ headers: {
446
+ "Content-Type": "application/json",
447
+ "X-EventCatalog-Analytics-Key": analytics.writeKey
448
+ },
449
+ body: JSON.stringify({
450
+ trackingId: analytics.trackingId,
451
+ event: "catalog.resource_inventory_reported",
452
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
453
+ counts: toCloudResourceCounts(resourceCounts)
454
+ }),
455
+ signal: AbortSignal.timeout(TELEMETRY_REQUEST_TIMEOUT_MS)
456
+ });
457
+ } catch {
458
+ }
389
459
  };
390
460
  var main = async (projectDir, { command = "build", license } = {}) => {
391
461
  try {
392
462
  await verifyRequiredFieldsAreInCatalogConfigFile(projectDir);
393
463
  const configFile = await getEventCatalogConfigFile(projectDir);
464
+ if (isTelemetryDisabled(configFile, process.env)) {
465
+ if (getEnabledCloudAnalytics(configFile)) {
466
+ const resourceCounts2 = await countResources(projectDir);
467
+ await reportCloudResourceInventory(configFile, resourceCounts2);
468
+ }
469
+ return;
470
+ }
394
471
  const { cId, tsd, organizationName, generators = [] } = configFile;
395
472
  const generatorNames = generators.length > 0 ? generators.map((generator) => generator[0]) : ["none"];
396
473
  const features = await getFeatures(configFile);
397
474
  const resourceCounts = await countResources(projectDir);
398
475
  const contentHash = await hashCatalogContent(projectDir);
399
476
  await reportCloudResourceInventory(configFile, resourceCounts);
400
- await raiseEvent({
401
- command,
402
- org: organizationName,
403
- cId,
404
- // Trial start date (unix ms) from eventcatalog.config.js
405
- tsd,
406
- // Commercial license or trial, and when each expires (unix ms)
407
- ...getLicenseAnalytics(license, tsd),
408
- // CI redeploys and human-run builds are different signals; tag rather than suppress
409
- ci: process.env.CI ? "true" : "false",
410
- contentHash,
411
- generators: generatorNames.toString(),
412
- features: Object.keys(features).map((feature) => `${feature}:${features[feature]}`).join(","),
413
- directorySources: serializeDirectorySources(configFile),
414
- resources: serializeCounts(resourceCounts)
415
- });
477
+ await raiseEvent(
478
+ {
479
+ command,
480
+ org: organizationName,
481
+ cId,
482
+ // Trial start date (unix ms) from eventcatalog.config.js
483
+ tsd,
484
+ // Commercial license or trial, and when each expires (unix ms)
485
+ ...getLicenseAnalytics(license, tsd),
486
+ // CI redeploys and human-run builds are different signals; tag rather than suppress
487
+ ci: process.env.CI ? "true" : "false",
488
+ contentHash,
489
+ generators: generatorNames.toString(),
490
+ features: Object.keys(features).map((feature) => `${feature}:${features[feature]}`).join(","),
491
+ directorySources: serializeDirectorySources(configFile),
492
+ resources: serializeCounts(resourceCounts),
493
+ studio: serializeStudioUsage(projectDir, configFile)
494
+ },
495
+ configFile
496
+ );
416
497
  } catch (error) {
417
498
  }
418
499
  };
@@ -3,10 +3,10 @@ import { L as LicenseStatus } from '../license-C1y-56bb.cjs';
3
3
  /**
4
4
  *
5
5
  * @param {string} projectDir
6
- * @param {{ command?: 'build' | 'dev', license?: import('../utils/license-status').LicenseStatus }} [options]
6
+ * @param {{ command?: 'build' | 'dev' | 'start', license?: import('../utils/license-status').LicenseStatus }} [options]
7
7
  */
8
8
  declare function main(projectDir: string, { command, license }?: {
9
- command?: "build" | "dev";
9
+ command?: "build" | "dev" | "start";
10
10
  license?: LicenseStatus;
11
11
  }): Promise<void>;
12
12
 
@@ -3,10 +3,10 @@ import { L as LicenseStatus } from '../license-C1y-56bb.js';
3
3
  /**
4
4
  *
5
5
  * @param {string} projectDir
6
- * @param {{ command?: 'build' | 'dev', license?: import('../utils/license-status').LicenseStatus }} [options]
6
+ * @param {{ command?: 'build' | 'dev' | 'start', license?: import('../utils/license-status').LicenseStatus }} [options]
7
7
  */
8
8
  declare function main(projectDir: string, { command, license }?: {
9
- command?: "build" | "dev";
9
+ command?: "build" | "dev" | "start";
10
10
  license?: LicenseStatus;
11
11
  }): Promise<void>;
12
12
 
@@ -1,11 +1,13 @@
1
1
  import {
2
2
  log_build_default
3
- } from "../chunk-4W55ZOOS.js";
4
- import "../chunk-AWOO63ME.js";
3
+ } from "../chunk-NEAVAFSJ.js";
4
+ import "../chunk-AD7CL772.js";
5
5
  import "../chunk-ZAZHAVKB.js";
6
- import "../chunk-C6T2AAFR.js";
7
- import "../chunk-RDIZJ7UT.js";
8
- import "../chunk-RFIXKATC.js";
6
+ import "../chunk-CA6WCQ2T.js";
7
+ import "../chunk-NIVST4WY.js";
8
+ import "../chunk-CPW6G62V.js";
9
+ import "../chunk-RE7UTPWH.js";
10
+ import "../chunk-4G7FSRPN.js";
9
11
  export {
10
12
  log_build_default as default
11
13
  };
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/analytics/studio-usage.js
31
+ var studio_usage_exports = {};
32
+ __export(studio_usage_exports, {
33
+ getStorageType: () => getStorageType,
34
+ getStudioMode: () => getStudioMode,
35
+ serializeStudioUsage: () => serializeStudioUsage
36
+ });
37
+ module.exports = __toCommonJS(studio_usage_exports);
38
+ var import_node_fs = __toESM(require("fs"), 1);
39
+ var import_node_path = __toESM(require("path"), 1);
40
+ var DAY_IN_MS = 24 * 60 * 60 * 1e3;
41
+ var DEFAULT_DATABASE_PATH = ".eventcatalog/eventcatalog.db";
42
+ var getStudioMode = (configFile) => {
43
+ const enabled = configFile.studio?.enabled;
44
+ if (enabled === false) return "off";
45
+ return configFile.output === "server" && enabled === true ? "server" : "dev";
46
+ };
47
+ var getStorageType = (configFile) => configFile.storage?.type || "memory";
48
+ var loadSqlite = () => {
49
+ const emitWarning = process.emitWarning;
50
+ process.emitWarning = function(warning, ...args) {
51
+ const type = typeof args[0] === "object" ? args[0]?.type : args[0];
52
+ const message = typeof warning === "string" ? warning : warning?.message;
53
+ if (type === "ExperimentalWarning" && message?.startsWith("SQLite")) return;
54
+ return emitWarning.call(this, warning, ...args);
55
+ };
56
+ try {
57
+ return process.getBuiltinModule?.("node:sqlite");
58
+ } catch {
59
+ return void 0;
60
+ } finally {
61
+ process.emitWarning = emitWarning;
62
+ }
63
+ };
64
+ var UNKNOWN = "canvases:unknown";
65
+ var serializeStudioUsage = (projectDirectory, configFile, now = Date.now()) => {
66
+ if (getStudioMode(configFile) === "off" || getStorageType(configFile) !== "sqlite") return UNKNOWN;
67
+ const file = import_node_path.default.resolve(projectDirectory, configFile.storage.path ?? DEFAULT_DATABASE_PATH);
68
+ if (!import_node_fs.default.existsSync(file)) return "canvases:0,changed7d:0,changed30d:0,deleted:0";
69
+ let database;
70
+ try {
71
+ const sqlite = loadSqlite();
72
+ if (!sqlite?.DatabaseSync) return UNKNOWN;
73
+ database = new sqlite.DatabaseSync(file, { readOnly: true });
74
+ const canvases = database.prepare(
75
+ "SELECT COUNT(*) AS total, SUM(updated_at >= ?) AS changed7d, SUM(updated_at >= ?) AS changed30d FROM studio_canvases"
76
+ ).get(now - 7 * DAY_IN_MS, now - 30 * DAY_IN_MS);
77
+ const { deleted } = database.prepare("SELECT COUNT(*) AS deleted FROM studio_deleted_canvases").get();
78
+ return `canvases:${canvases.total},changed7d:${canvases.changed7d ?? 0},changed30d:${canvases.changed30d ?? 0},deleted:${deleted}`;
79
+ } catch {
80
+ return UNKNOWN;
81
+ } finally {
82
+ database?.close();
83
+ }
84
+ };
85
+ // Annotate the CommonJS export names for ESM import in node:
86
+ 0 && (module.exports = {
87
+ getStorageType,
88
+ getStudioMode,
89
+ serializeStudioUsage
90
+ });
@@ -0,0 +1,5 @@
1
+ declare function getStudioMode(configFile: any): "off" | "server" | "dev";
2
+ declare function getStorageType(configFile: any): any;
3
+ declare function serializeStudioUsage(projectDirectory: any, configFile: any, now?: number): string;
4
+
5
+ export { getStorageType, getStudioMode, serializeStudioUsage };
@@ -0,0 +1,5 @@
1
+ declare function getStudioMode(configFile: any): "off" | "server" | "dev";
2
+ declare function getStorageType(configFile: any): any;
3
+ declare function serializeStudioUsage(projectDirectory: any, configFile: any, now?: number): string;
4
+
5
+ export { getStorageType, getStudioMode, serializeStudioUsage };
@@ -0,0 +1,10 @@
1
+ import {
2
+ getStorageType,
3
+ getStudioMode,
4
+ serializeStudioUsage
5
+ } from "../chunk-CA6WCQ2T.js";
6
+ export {
7
+ getStorageType,
8
+ getStudioMode,
9
+ serializeStudioUsage
10
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/analytics/telemetry.ts
21
+ var telemetry_exports = {};
22
+ __export(telemetry_exports, {
23
+ TELEMETRY_REQUEST_TIMEOUT_MS: () => TELEMETRY_REQUEST_TIMEOUT_MS,
24
+ isTelemetryDisabled: () => isTelemetryDisabled
25
+ });
26
+ module.exports = __toCommonJS(telemetry_exports);
27
+ var TELEMETRY_REQUEST_TIMEOUT_MS = 2e3;
28
+ var isOptOutEnvValue = (value) => {
29
+ if (typeof value !== "string") return false;
30
+ const normalized = value.trim().toLowerCase();
31
+ return normalized === "1" || normalized === "true";
32
+ };
33
+ var isTelemetryDisabled = (config, env) => {
34
+ if (isOptOutEnvValue(env.EVENTCATALOG_TELEMETRY_DISABLED)) return true;
35
+ if (isOptOutEnvValue(env.DO_NOT_TRACK)) return true;
36
+ return config?.telemetry === false;
37
+ };
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ TELEMETRY_REQUEST_TIMEOUT_MS,
41
+ isTelemetryDisabled
42
+ });
@@ -0,0 +1,20 @@
1
+ /** How long a telemetry request may take before it is aborted. */
2
+ declare const TELEMETRY_REQUEST_TIMEOUT_MS = 2000;
3
+ type TelemetryConfig = {
4
+ telemetry?: boolean;
5
+ };
6
+ type TelemetryEnv = {
7
+ EVENTCATALOG_TELEMETRY_DISABLED?: string;
8
+ DO_NOT_TRACK?: string;
9
+ };
10
+ /**
11
+ * Anonymous telemetry is on unless the catalog opts out.
12
+ * Opt out with EVENTCATALOG_TELEMETRY_DISABLED or DO_NOT_TRACK set to "1" or "true"
13
+ * (any case), or with telemetry: false in eventcatalog.config.js.
14
+ *
15
+ * packages/create-eventcatalog/templates/telemetry.ts copies the env rules and
16
+ * TELEMETRY_REQUEST_TIMEOUT_MS. Keep that copy in sync.
17
+ */
18
+ declare const isTelemetryDisabled: (config: TelemetryConfig | null | undefined, env: TelemetryEnv) => boolean;
19
+
20
+ export { TELEMETRY_REQUEST_TIMEOUT_MS, isTelemetryDisabled };
@@ -0,0 +1,20 @@
1
+ /** How long a telemetry request may take before it is aborted. */
2
+ declare const TELEMETRY_REQUEST_TIMEOUT_MS = 2000;
3
+ type TelemetryConfig = {
4
+ telemetry?: boolean;
5
+ };
6
+ type TelemetryEnv = {
7
+ EVENTCATALOG_TELEMETRY_DISABLED?: string;
8
+ DO_NOT_TRACK?: string;
9
+ };
10
+ /**
11
+ * Anonymous telemetry is on unless the catalog opts out.
12
+ * Opt out with EVENTCATALOG_TELEMETRY_DISABLED or DO_NOT_TRACK set to "1" or "true"
13
+ * (any case), or with telemetry: false in eventcatalog.config.js.
14
+ *
15
+ * packages/create-eventcatalog/templates/telemetry.ts copies the env rules and
16
+ * TELEMETRY_REQUEST_TIMEOUT_MS. Keep that copy in sync.
17
+ */
18
+ declare const isTelemetryDisabled: (config: TelemetryConfig | null | undefined, env: TelemetryEnv) => boolean;
19
+
20
+ export { TELEMETRY_REQUEST_TIMEOUT_MS, isTelemetryDisabled };
@@ -0,0 +1,8 @@
1
+ import {
2
+ TELEMETRY_REQUEST_TIMEOUT_MS,
3
+ isTelemetryDisabled
4
+ } from "../chunk-CPW6G62V.js";
5
+ export {
6
+ TELEMETRY_REQUEST_TIMEOUT_MS,
7
+ isTelemetryDisabled
8
+ };
@@ -36,7 +36,7 @@ __export(catalog_runtime_exports, {
36
36
  });
37
37
  module.exports = __toCommonJS(catalog_runtime_exports);
38
38
 
39
- // ../../node_modules/.pnpm/tsup@8.5.0_jiti@2.7.0_postcss@8.5.15_tsx@4.21.0_typescript@5.9.3_yaml@2.9.0/node_modules/tsup/assets/cjs_shims.js
39
+ // ../../node_modules/.pnpm/tsup@8.5.0_jiti@2.7.0_postcss@8.5.29_tsx@4.23.15_typescript@5.9.3_yaml@2.9.1/node_modules/tsup/assets/cjs_shims.js
40
40
  var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
41
41
  var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
42
42