@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
@@ -71,11 +71,4 @@ export class Page extends HybridPage {
71
71
 
72
72
  return doc;
73
73
  }
74
-
75
- protected static createNotFoundResponse(): Response {
76
- return new Response(null, {
77
- status: 404,
78
- statusText: 'Resource documentation not found',
79
- });
80
- }
81
74
  }
@@ -19,6 +19,7 @@ export const prerender = Page.prerender;
19
19
  export const getStaticPaths = Page.getStaticPaths;
20
20
 
21
21
  const props = await Page.getData(Astro);
22
+ if (!props) return Astro.rewrite('/404');
22
23
  const { Content, headings } = await render(props);
23
24
 
24
25
  const title = props.data.title || props.data.id;
@@ -72,11 +72,4 @@ export class Page extends HybridPage {
72
72
 
73
73
  return doc;
74
74
  }
75
-
76
- protected static createNotFoundResponse(): Response {
77
- return new Response(null, {
78
- status: 404,
79
- statusText: 'Resource documentation not found',
80
- });
81
- }
82
75
  }
@@ -19,6 +19,7 @@ export const prerender = Page.prerender;
19
19
  export const getStaticPaths = Page.getStaticPaths;
20
20
 
21
21
  const props = await Page.getData(Astro);
22
+ if (!props) return Astro.rewrite('/404');
22
23
  const { Content, headings } = await render(props);
23
24
 
24
25
  const title = props.data.title || props.data.id;
@@ -63,11 +63,4 @@ export class Page extends HybridPage {
63
63
  ...item,
64
64
  };
65
65
  }
66
-
67
- protected static createNotFoundResponse(): Response {
68
- return new Response(null, {
69
- status: 404,
70
- statusText: 'Documentation not found',
71
- });
72
- }
73
66
  }
@@ -21,7 +21,9 @@ export const prerender = Page.prerender;
21
21
  export const getStaticPaths = Page.getStaticPaths;
22
22
 
23
23
  // Get data
24
- const { collection, data, filePath, filename, path: relativeSpecPath, headers = {} } = await Page.getData(Astro);
24
+ const pageData = await Page.getData(Astro);
25
+ if (!pageData) return Astro.rewrite('/404');
26
+ const { collection, data, filePath, filename, path: relativeSpecPath, headers = {} } = pageData;
25
27
 
26
28
  const fileName = filename || 'asyncapi.yaml';
27
29
  const pathToSpec = getAbsoluteFilePathForAstroFile(filePath, fileName);
@@ -90,11 +90,4 @@ export class Page extends HybridPage {
90
90
  ...item,
91
91
  };
92
92
  }
93
-
94
- protected static createNotFoundResponse(): Response {
95
- return new Response(null, {
96
- status: 404,
97
- statusText: 'AsyncAPI specification not found',
98
- });
99
- }
100
93
  }
@@ -59,11 +59,4 @@ export class Page extends HybridPage {
59
59
  ...item,
60
60
  };
61
61
  }
62
-
63
- protected static createNotFoundResponse(): Response {
64
- return new Response(null, {
65
- status: 404,
66
- statusText: 'Changelog not found',
67
- });
68
- }
69
62
  }
@@ -20,6 +20,7 @@ export const getStaticPaths = Page.getStaticPaths;
20
20
 
21
21
  // Get data
22
22
  const props = await Page.getData(Astro);
23
+ if (!props) return Astro.rewrite('/404');
23
24
 
24
25
  let collectionItem = props;
25
26
  const logs = await getChangeLogs(props);
@@ -12,6 +12,7 @@ export const prerender = Page.prerender;
12
12
  export const getStaticPaths = Page.getStaticPaths;
13
13
 
14
14
  const props = await Page.getData(Astro);
15
+ if (!props) return Astro.rewrite('/404');
15
16
  const { collection, data, example } = props;
16
17
 
17
18
  const pageTitle = `${collection} | ${data.name} | ${example.title}`.replace(/^\w/, (c: string) => c.toUpperCase());
@@ -56,8 +56,4 @@ export class Page extends HybridPage {
56
56
 
57
57
  return { type, example, ...item };
58
58
  }
59
-
60
- protected static createNotFoundResponse(): Response {
61
- return new Response(null, { status: 404, statusText: 'Example not found' });
62
- }
63
59
  }
@@ -63,11 +63,4 @@ export class Page extends HybridPage {
63
63
  ...item,
64
64
  };
65
65
  }
66
-
67
- protected static createNotFoundResponse(): Response {
68
- return new Response(null, {
69
- status: 404,
70
- statusText: 'Field usage not found',
71
- });
72
- }
73
66
  }
@@ -18,6 +18,7 @@ export const getStaticPaths = Page.getStaticPaths;
18
18
 
19
19
  // Get data
20
20
  const props = await Page.getData(Astro);
21
+ if (!props) return Astro.rewrite('/404');
21
22
 
22
23
  const { data, collection } = props;
23
24
  const messageId = data.id;
@@ -16,7 +16,9 @@ export const prerender = Page.prerender;
16
16
  export const getStaticPaths = Page.getStaticPaths;
17
17
 
18
18
  // Get data
19
- const { collection, data, filePath, filename, path: relativeSpecPath } = await Page.getData(Astro);
19
+ const pageData = await Page.getData(Astro);
20
+ if (!pageData) return Astro.rewrite('/404');
21
+ const { collection, data, filePath, filename, path: relativeSpecPath } = pageData;
20
22
 
21
23
  const fileName = filename || 'schema.graphql';
22
24
  const pathToSpec = getAbsoluteFilePathForAstroFile(filePath, fileName);
@@ -90,11 +90,4 @@ export class Page extends HybridPage {
90
90
  ...item,
91
91
  };
92
92
  }
93
-
94
- protected static createNotFoundResponse(): Response {
95
- return new Response(null, {
96
- status: 404,
97
- statusText: 'GraphQL specification not found',
98
- });
99
- }
100
93
  }
@@ -81,6 +81,7 @@ export const getStaticPaths = Page.getStaticPaths;
81
81
 
82
82
  // Get data
83
83
  const props = await Page.getData(Astro);
84
+ if (!props) return Astro.rewrite('/404');
84
85
 
85
86
  const { Content, headings } = await render(props);
86
87
  const isAdrPage = isAdrCollection(props.collection);
@@ -38,9 +38,8 @@ describe('Resources routes', () => {
38
38
  });
39
39
 
40
40
  it('returns not found for types without a Resources page on a server request', async () => {
41
- await expect(Page.getData({ params: { type: 'entities', id: 'Order', version: '1.0.0' }, props: {} } as any)).rejects.toMatchObject({
42
- status: 404,
43
- });
41
+ // Nothing found: the page answers with the 404 page
42
+ await expect(Page.getData({ params: { type: 'entities', id: 'Order', version: '1.0.0' }, props: {} } as any)).resolves.toBeUndefined();
44
43
  expect(mocks.findOwnerWithResources).not.toHaveBeenCalled();
45
44
  });
46
45
  });
@@ -57,13 +57,6 @@ const createResourcesPage = ({
57
57
 
58
58
  return findOwnerWithResources(type as ResourceOwnerCollection, id, version);
59
59
  }
60
-
61
- protected static createNotFoundResponse(): Response {
62
- return new Response(null, {
63
- status: 404,
64
- statusText: 'Resources not found',
65
- });
66
- }
67
60
  };
68
61
 
69
62
  export const Page = createResourcesPage({
@@ -6,6 +6,7 @@ export const prerender = Page.prerender;
6
6
  export const getStaticPaths = Page.getStaticPaths;
7
7
 
8
8
  const resourceOwner = await Page.getData(Astro);
9
+ if (!resourceOwner) return Astro.rewrite('/404');
9
10
  ---
10
11
 
11
12
  <ResourcesPage resourceOwner={resourceOwner} />
@@ -16,6 +16,7 @@ export const getStaticPaths = Page.getStaticPaths;
16
16
 
17
17
  // Get data
18
18
  const props = await Page.getData(Astro);
19
+ if (!props) return Astro.rewrite('/404');
19
20
 
20
21
  // @ts-ignore
21
22
  const { collection, data, filePath, filename, path: relativeSpecPath } = props;
@@ -91,11 +91,4 @@ export class Page extends HybridPage {
91
91
  ...item,
92
92
  };
93
93
  }
94
-
95
- protected static createNotFoundResponse(): Response {
96
- return new Response(null, {
97
- status: 404,
98
- statusText: 'OpenAPI specification not found',
99
- });
100
- }
101
94
  }
@@ -59,11 +59,4 @@ export class Page extends HybridPage {
59
59
  ...item,
60
60
  };
61
61
  }
62
-
63
- protected static createNotFoundResponse(): Response {
64
- return new Response(null, {
65
- status: 404,
66
- statusText: 'Documentation not found',
67
- });
68
- }
69
62
  }
@@ -7,6 +7,7 @@ export const prerender = Page.prerender;
7
7
  export const getStaticPaths = Page.getStaticPaths;
8
8
 
9
9
  const props = await Page.getData(Astro);
10
+ if (!props) return Astro.rewrite('/404');
10
11
 
11
12
  const pageTitle = `${props.collection} | ${props.data.name}`.replace(/^\w/, (c) => c.toUpperCase());
12
13
 
@@ -17,7 +18,7 @@ const redirectUrl = buildUrl(pathname + '/' + props.data.latestVersion, false, t
17
18
  <!doctype html>
18
19
  <html lang="en">
19
20
  <head>
20
- <Seo title={`EventCatalog | ${pageTitle}`} ogTitle={pageTitle} />
21
+ <Seo title={pageTitle} />
21
22
  </head>
22
23
  <body>
23
24
  <p>You are being redirected to <a href={redirectUrl}>{redirectUrl}</a></p>
@@ -99,11 +99,4 @@ export class Page extends HybridPage {
99
99
 
100
100
  return buildUbiquitousLanguageTermPage({ domain, collection, term }).props;
101
101
  }
102
-
103
- protected static createNotFoundResponse(): Response {
104
- return new Response(null, {
105
- status: 404,
106
- statusText: 'Domain not found',
107
- });
108
- }
109
102
  }
@@ -16,6 +16,7 @@ export const prerender = Page.prerender;
16
16
  export const getStaticPaths = Page.getStaticPaths;
17
17
 
18
18
  const props = await Page.getData(Astro);
19
+ if (!props) return Astro.rewrite('/404');
19
20
 
20
21
  const { ubiquitousLanguage } = props;
21
22
  const pageTitle = `${props.type} | ${ubiquitousLanguage.name}`.replace(/^\w/, (c) => c.toUpperCase());
@@ -42,11 +42,4 @@ export class Page extends HybridPage {
42
42
 
43
43
  return domain;
44
44
  }
45
-
46
- protected static createNotFoundResponse(): Response {
47
- return new Response(null, {
48
- status: 404,
49
- statusText: 'Domain not found',
50
- });
51
- }
52
45
  }
@@ -14,6 +14,7 @@ export const getStaticPaths = Page.getStaticPaths;
14
14
 
15
15
  // Get data
16
16
  const props = await Page.getData(Astro);
17
+ if (!props) return Astro.rewrite('/404');
17
18
 
18
19
  const pageTitle = `${props.collection} | ${props.data.name}`.replace(/^\w/, (c) => c.toUpperCase());
19
20
  const ubiquitousLanguageData = await getUbiquitousLanguageWithSubdomains(props);
@@ -39,11 +39,4 @@ export class Page extends HybridPage {
39
39
 
40
40
  return doc || null;
41
41
  }
42
-
43
- protected static createNotFoundResponse(): Response {
44
- return new Response(null, {
45
- status: 404,
46
- statusText: 'Custom documentation page not found',
47
- });
48
- }
49
42
  }
@@ -7,6 +7,7 @@ export const getStaticPaths = Page.getStaticPaths;
7
7
 
8
8
  // Get data
9
9
  const props = await Page.getData(Astro);
10
+ if (!props) return Astro.rewrite('/404');
10
11
  ---
11
12
 
12
13
  <CustomDocumentationPage {...props} />
@@ -12,7 +12,7 @@ const { id, docType, docId } = Astro.params;
12
12
  const version = Astro.props.redirectVersion ?? (id ? await getLatestServiceVersion(id) : undefined);
13
13
 
14
14
  if (!id || !docType || !docId || !version) {
15
- throw new Response(null, { status: 404, statusText: 'Resource documentation not found' });
15
+ return Astro.rewrite('/404');
16
16
  }
17
17
 
18
18
  const redirectUrl = buildUrl(`/docs/services/${id}/${version}/${docType}/${docId}`);
@@ -8,6 +8,7 @@ export const prerender = ServicePage.prerender;
8
8
  export const getStaticPaths = ServicePage.getStaticPaths;
9
9
 
10
10
  const resourceOwner = await ServicePage.getData(Astro);
11
+ if (!resourceOwner) return Astro.rewrite('/404');
11
12
  ---
12
13
 
13
14
  <ResourcesPage resourceOwner={resourceOwner} />
@@ -12,7 +12,7 @@ const { id, filename } = Astro.params;
12
12
  const version = Astro.props.redirectVersion ?? (id ? await getLatestServiceVersion(id) : undefined);
13
13
 
14
14
  if (!id || !filename || !version) {
15
- throw new Response(null, { status: 404, statusText: 'AsyncAPI specification not found' });
15
+ return Astro.rewrite('/404');
16
16
  }
17
17
 
18
18
  const redirectUrl = buildUrl(`/docs/services/${id}/${version}/asyncapi/${filename}`);
@@ -12,7 +12,7 @@ const { id } = Astro.params;
12
12
  const version = Astro.props.redirectVersion ?? (id ? await getLatestServiceVersion(id) : undefined);
13
13
 
14
14
  if (!isChangelogEnabled() || !id || !version) {
15
- throw new Response(null, { status: 404, statusText: 'Changelog not found' });
15
+ return Astro.rewrite('/404');
16
16
  }
17
17
 
18
18
  const redirectUrl = buildUrl(`/docs/services/${id}/${version}/changelog`);
@@ -12,7 +12,7 @@ const { id, filename } = Astro.params;
12
12
  const version = Astro.props.redirectVersion ?? (id ? await getLatestServiceVersion(id) : undefined);
13
13
 
14
14
  if (!id || !filename || !version) {
15
- throw new Response(null, { status: 404, statusText: 'GraphQL specification not found' });
15
+ return Astro.rewrite('/404');
16
16
  }
17
17
 
18
18
  const redirectUrl = buildUrl(`/docs/services/${id}/${version}/graphql/${filename}`);
@@ -12,7 +12,7 @@ const { id, filename } = Astro.params;
12
12
  const version = Astro.props.redirectVersion ?? (id ? await getLatestServiceVersion(id) : undefined);
13
13
 
14
14
  if (!id || !filename || !version) {
15
- throw new Response(null, { status: 404, statusText: 'OpenAPI specification not found' });
15
+ return Astro.rewrite('/404');
16
16
  }
17
17
 
18
18
  const redirectUrl = buildUrl(`/docs/services/${id}/${version}/spec/${filename}`);
@@ -36,11 +36,4 @@ export class Page extends HybridPage {
36
36
 
37
37
  return team || null;
38
38
  }
39
-
40
- protected static createNotFoundResponse(): Response {
41
- return new Response(null, {
42
- status: 404,
43
- statusText: 'Team not found',
44
- });
45
- }
46
39
  }
@@ -18,6 +18,7 @@ export const getStaticPaths = Page.getStaticPaths;
18
18
 
19
19
  // Get data
20
20
  const props = await Page.getData(Astro);
21
+ if (!props) return Astro.rewrite('/404');
21
22
 
22
23
  const { Content } = await render(props);
23
24
 
@@ -36,11 +36,4 @@ export class Page extends HybridPage {
36
36
 
37
37
  return user || null;
38
38
  }
39
-
40
- protected static createNotFoundResponse(): Response {
41
- return new Response(null, {
42
- status: 404,
43
- statusText: 'User not found',
44
- });
45
- }
46
39
  }
@@ -18,6 +18,7 @@ export const getStaticPaths = Page.getStaticPaths;
18
18
 
19
19
  // Get data
20
20
  const props = await Page.getData(Astro);
21
+ if (!props) return Astro.rewrite('/404');
21
22
 
22
23
  const { Content } = await render(props);
23
24
 
@@ -30,7 +30,9 @@ if (existsSync(pathToUserDefinedLandingPage)) {
30
30
  import('@components/MDX/page-components'),
31
31
  import('@components/MDX/components'),
32
32
  ]);
33
- customHomepageComponents = { ...pageComponents, ...mdxComponents(props) };
33
+ const { default: CatalogDashboard } = await import('@components/Homepage/CatalogDashboard.astro');
34
+ // A custom homepage can show the catalog dashboard too: <CatalogDashboard /> from Astro.props.components
35
+ customHomepageComponents = { ...pageComponents, ...mdxComponents(props), CatalogDashboard };
34
36
 
35
37
  const rawContent = readFileSync(pathToUserDefinedLandingPage, 'utf-8');
36
38
  nodeGraphs = getMDXComponentsByName(rawContent, 'NodeGraph') || [];
@@ -60,7 +62,7 @@ if (config.landingPage) {
60
62
 
61
63
  {
62
64
  CustomContent ? (
63
- <VerticalSideBarLayout title="EventCatalog" reducedContentPadding>
65
+ <VerticalSideBarLayout reducedContentPadding>
64
66
  <main class="flex docs-layout h-full">
65
67
  <div class="flex docs-layout w-full">
66
68
  <div class="w-full overflow-y-auto py-8">
@@ -110,11 +110,4 @@ export class Page extends HybridPage {
110
110
  ...item,
111
111
  };
112
112
  }
113
-
114
- protected static createNotFoundResponse(): Response {
115
- return new Response(null, {
116
- status: 404,
117
- statusText: 'Documentation not found',
118
- });
119
- }
120
113
  }
@@ -34,6 +34,7 @@ export const getStaticPaths = Page.getStaticPaths;
34
34
 
35
35
  // Get data
36
36
  const props = await Page.getData(Astro);
37
+ if (!props) return Astro.rewrite('/404');
37
38
  const { type, data } = props as { type: PageTypes; data: any };
38
39
 
39
40
  // Check if this is a data product with a contract
@@ -189,6 +190,13 @@ if (isDataProduct && contractPath) {
189
190
  // Render the requested tab on the server so the page does not flash the default tab before hydration.
190
191
  // Static builds cannot see the query string, so the panel also restores the tab on the client.
191
192
  const initialTab = Astro.url.searchParams.get('tab') ?? undefined;
193
+
194
+ // The versions to switch between and compare. The one being viewed is also `message`, with its usage and flow graphs;
195
+ // switching and comparing only need the schemas, so the list leaves the graphs out (each page carried them twice)
196
+ const versionChoices = sortedVersions.map(({ graph: _graph, ...version }) => {
197
+ const { flows: _flows, ...data } = version.data;
198
+ return { ...version, data };
199
+ });
192
200
  ---
193
201
 
194
202
  <VerticalSideBarLayout title={pageTitle}>
@@ -213,7 +221,7 @@ const initialTab = Astro.url.searchParams.get('tab') ?? undefined;
213
221
  <SchemaPageViewer
214
222
  client:load
215
223
  message={currentMessage}
216
- availableVersions={sortedVersions}
224
+ availableVersions={versionChoices}
217
225
  showOwners={true}
218
226
  showProducersConsumers={true}
219
227
  initialTab={initialTab}
@@ -34,11 +34,4 @@ export class Page extends HybridPage {
34
34
  protected static hasValidProps(props: any): boolean {
35
35
  return props && props.schemas !== undefined;
36
36
  }
37
-
38
- protected static createNotFoundResponse(): Response {
39
- return new Response(null, {
40
- status: 404,
41
- statusText: 'Schema explorer not found',
42
- });
43
- }
44
37
  }
@@ -8,10 +8,12 @@ import '@eventcatalog/visualiser/styles-core.css';
8
8
  export const prerender = Page.prerender;
9
9
  export const getStaticPaths = Page.getStaticPaths;
10
10
 
11
- const { schemas } = await Page.getData(Astro);
11
+ const pageData = await Page.getData(Astro);
12
+ if (!pageData) return Astro.rewrite('/404');
13
+ const { schemas } = pageData;
12
14
  ---
13
15
 
14
- <VerticalSideBarLayout title="Schema Explorer - EventCatalog" showNestedSideBar={false}>
16
+ <VerticalSideBarLayout title="Schema Explorer" showNestedSideBar={false}>
15
17
  <style is:global>
16
18
  .react-flow__attribution {
17
19
  display: none;
@@ -11,8 +11,16 @@ const license: LicenseProps =
11
11
  ? { ...status, issuedAt: status.issuedAt?.getTime(), expiresAt: status.expiresAt?.getTime() }
12
12
  : status;
13
13
  const trialStartedAt = typeof catalog?.tsd === 'number' ? catalog.tsd : undefined;
14
+ // The license on the main branch, the same text as www.eventcatalog.dev/license
15
+ const licenseUrl = 'https://github.com/event-catalog/eventcatalog/blob/main/LICENSE';
14
16
  ---
15
17
 
16
18
  <SettingsLayout title="License" active="license">
17
- <LicenseSettings client:load license={license} trialStartedAt={trialStartedAt} renderedAt={Date.now()} />
19
+ <LicenseSettings
20
+ client:load
21
+ license={license}
22
+ trialStartedAt={trialStartedAt}
23
+ renderedAt={Date.now()}
24
+ licenseUrl={licenseUrl}
25
+ />
18
26
  </SettingsLayout>
@@ -56,11 +56,4 @@ export class Page extends HybridPage {
56
56
  const hasTriggerPaths = getMessagesWithTriggerPaths(receivers, allMessages).includes(item);
57
57
  return hasTriggerPaths ? { type, ...item } : null;
58
58
  }
59
-
60
- protected static createNotFoundResponse(): Response {
61
- return new Response(null, {
62
- status: 404,
63
- statusText: 'Message trigger paths not found',
64
- });
65
- }
66
59
  }
@@ -18,6 +18,7 @@ export const prerender = Page.prerender;
18
18
  export const getStaticPaths = Page.getStaticPaths;
19
19
 
20
20
  const props = await Page.getData(Astro);
21
+ if (!props) return Astro.rewrite('/404');
21
22
  const { data } = props as CollectionEntry<CollectionMessageTypes>;
22
23
  const currentMessage = props as CollectionEntry<CollectionMessageTypes>;
23
24
 
@@ -81,13 +81,6 @@ export class Page extends HybridPage {
81
81
  };
82
82
  }
83
83
 
84
- protected static createNotFoundResponse(): Response {
85
- return new Response(null, {
86
- status: 404,
87
- statusText: 'Visualiser page not found',
88
- });
89
- }
90
-
91
84
  static get clientAuthScript(): string {
92
85
  if (!isAuthEnabled() || !isVisualiserEnabled()) {
93
86
  return '';
@@ -50,13 +50,6 @@ export class Page extends HybridPage {
50
50
  return item;
51
51
  }
52
52
 
53
- protected static createNotFoundResponse(): Response {
54
- return new Response(null, {
55
- status: 404,
56
- statusText: 'Service data page not found',
57
- });
58
- }
59
-
60
53
  static get clientAuthScript(): string {
61
54
  if (!isAuthEnabled() || !isVisualiserEnabled()) {
62
55
  return '';
@@ -8,6 +8,7 @@ export const getStaticPaths = Page.getStaticPaths;
8
8
 
9
9
  // Get data
10
10
  const props = await Page.getData(Astro);
11
+ if (!props) return Astro.rewrite('/404');
11
12
 
12
13
  // The service's data stores are shown at level 2 of its visualiser page
13
14
  return Astro.redirect(buildUrl(`/visualiser/services/${props.data.id}/${props.data.version}?level=2`));
@@ -47,13 +47,6 @@ export class Page extends HybridPage {
47
47
  return item;
48
48
  }
49
49
 
50
- protected static createNotFoundResponse(): Response {
51
- return new Response(null, {
52
- status: 404,
53
- statusText: 'Service entity map page not found',
54
- });
55
- }
56
-
57
50
  static get clientAuthScript(): string {
58
51
  if (!isAuthEnabled() || !isVisualiserEnabled()) {
59
52
  return '';
@@ -10,6 +10,7 @@ export const getStaticPaths = Page.getStaticPaths;
10
10
 
11
11
  // Get data
12
12
  const props = await Page.getData(Astro);
13
+ if (!props) return Astro.rewrite('/404');
13
14
 
14
15
  const {
15
16
  data: { id },