@eventcatalog/core 5.0.0-beta.3 → 5.0.0-beta.31

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 (277) 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 +160 -77
  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-BH2F5WPN.js → chunk-2UCCTEIH.js} +1 -1
  21. package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
  22. package/dist/{chunk-TQLRG35T.js → chunk-AD7CL772.js} +78 -45
  23. package/dist/{chunk-NDJOAITI.js → chunk-BNSLGNQI.js} +9 -3
  24. package/dist/chunk-CA6WCQ2T.js +54 -0
  25. package/dist/chunk-CPW6G62V.js +17 -0
  26. package/dist/{chunk-MDWB5HLO.js → chunk-NKNOXQ62.js} +1 -1
  27. package/dist/{chunk-423S2KHN.js → chunk-OUEGYMBA.js} +4 -2
  28. package/dist/{chunk-3PKS2IIP.js → chunk-OX6TSVHY.js} +1 -1
  29. package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
  30. package/dist/chunk-S5GWAUG5.js +29 -0
  31. package/dist/{chunk-GYIVJXOJ.js → chunk-WADZVNCA.js} +1 -1
  32. package/dist/{chunk-6OC46WQJ.js → chunk-XRFL642Z.js} +66 -35
  33. package/dist/constants.cjs +1 -1
  34. package/dist/constants.js +1 -1
  35. package/dist/eventcatalog-config-file-utils.cjs +34 -41
  36. package/dist/eventcatalog-config-file-utils.d.cts +56 -58
  37. package/dist/eventcatalog-config-file-utils.d.ts +56 -58
  38. package/dist/eventcatalog-config-file-utils.js +1 -1
  39. package/dist/eventcatalog.cjs +531 -356
  40. package/dist/eventcatalog.config.d.cts +59 -1
  41. package/dist/eventcatalog.config.d.ts +59 -1
  42. package/dist/eventcatalog.js +63 -25
  43. package/dist/features.cjs +34 -41
  44. package/dist/features.js +2 -2
  45. package/dist/federation/federate.cjs +37 -44
  46. package/dist/federation/federate.js +2 -2
  47. package/dist/generate.cjs +37 -42
  48. package/dist/generate.js +4 -4
  49. package/dist/resolve-catalog-dependencies.cjs +34 -41
  50. package/dist/resolve-catalog-dependencies.js +2 -2
  51. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
  52. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
  53. package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
  54. package/dist/runtime-dependencies/@hocuspocus__provider.mjs +3 -0
  55. package/dist/runtime-dependencies/@hocuspocus__server.mjs +3 -0
  56. package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +3 -0
  57. package/dist/runtime-dependencies/@mcp-b__webmcp-polyfill.mjs +3 -0
  58. package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
  59. package/dist/runtime-dependencies/manifest.json +13 -1
  60. package/dist/runtime-dependencies/react-hotkeys-hook.mjs +3 -0
  61. package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
  62. package/dist/runtime-dependencies/y-protocols.mjs +3 -0
  63. package/dist/runtime-dependencies/y-protocols__awareness.mjs +3 -0
  64. package/dist/runtime-dependencies/yjs.mjs +3 -0
  65. package/dist/utils/child-process-signals.cjs +53 -0
  66. package/dist/utils/child-process-signals.d.cts +19 -0
  67. package/dist/utils/child-process-signals.d.ts +19 -0
  68. package/dist/utils/child-process-signals.js +6 -0
  69. package/dist/utils/cli-logger.cjs +1 -1
  70. package/dist/utils/cli-logger.js +2 -2
  71. package/dist/utils/license-status.cjs +78 -45
  72. package/dist/utils/license-status.d.cts +15 -5
  73. package/dist/utils/license-status.d.ts +15 -5
  74. package/dist/utils/license-status.js +1 -1
  75. package/eventcatalog/astro.config.mjs +23 -1
  76. package/eventcatalog/integrations/config-loader.mjs +56 -58
  77. package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
  78. package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
  79. package/eventcatalog/integrations/storage.mjs +20 -0
  80. package/eventcatalog/integrations/studio-server.mjs +32 -0
  81. package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
  82. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
  83. package/eventcatalog/src/components/Header.astro +3 -3
  84. package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
  85. package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
  86. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
  87. package/eventcatalog/src/components/NavigationProgress.astro +7 -0
  88. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
  89. package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
  90. package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
  91. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
  92. package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
  93. package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
  94. package/eventcatalog/src/components/Search/search-utils.ts +26 -0
  95. package/eventcatalog/src/components/Seo.astro +5 -1
  96. package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
  97. package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
  98. package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
  99. package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
  100. package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
  101. package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
  102. package/eventcatalog/src/components/Settings/Row.tsx +7 -4
  103. package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
  104. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +53 -83
  105. package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
  106. package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +131 -0
  107. package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
  108. package/eventcatalog/src/components/TrialBadge.astro +20 -9
  109. package/eventcatalog/src/content.config.ts +19 -2
  110. package/eventcatalog/src/features/auth/error.astro +4 -2
  111. package/eventcatalog/src/features/auth/login.astro +2 -1
  112. package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +10 -0
  113. package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
  114. package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
  115. package/eventcatalog/src/features/integrations/eventcatalog-features.ts +34 -1
  116. package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
  117. package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +47 -0
  118. package/eventcatalog/src/features/mcp/apps/canvas/styles.css +24 -0
  119. package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +278 -0
  120. package/eventcatalog/src/features/mcp/apps/generated/canvas.html +272 -0
  121. package/eventcatalog/src/features/mcp/apps/generated/viewer.html +65 -65
  122. package/eventcatalog/src/features/mcp/apps/shared/app-view.tsx +2 -1
  123. package/eventcatalog/src/features/mcp/mcp-apps.ts +6 -3
  124. package/eventcatalog/src/features/mcp/mcp-server.ts +36 -5
  125. package/eventcatalog/src/features/server/start.ts +25 -0
  126. package/eventcatalog/src/features/storage/database.ts +88 -0
  127. package/eventcatalog/src/features/storage/migrations.ts +85 -0
  128. package/eventcatalog/src/features/storage/sql/database.sql +5 -0
  129. package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
  130. package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
  131. package/eventcatalog/src/features/storage/sql.ts +28 -0
  132. package/eventcatalog/src/features/studio/agent-choreography.ts +384 -0
  133. package/eventcatalog/src/features/studio/agents.ts +28 -0
  134. package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
  135. package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
  136. package/eventcatalog/src/features/studio/api/client.ts +40 -0
  137. package/eventcatalog/src/features/studio/canvas-actions.ts +540 -0
  138. package/eventcatalog/src/features/studio/canvas-preview.ts +52 -0
  139. package/eventcatalog/src/features/studio/catalog-resources.ts +155 -0
  140. package/eventcatalog/src/features/studio/catalog.ts +173 -0
  141. package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +518 -0
  142. package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +118 -0
  143. package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +434 -0
  144. package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +143 -0
  145. package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
  146. package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
  147. package/eventcatalog/src/features/studio/components/JoinForm.tsx +109 -0
  148. package/eventcatalog/src/features/studio/components/LeftPanel.tsx +206 -0
  149. package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
  150. package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
  151. package/eventcatalog/src/features/studio/components/Presence.tsx +293 -0
  152. package/eventcatalog/src/features/studio/components/ShareDialog.tsx +396 -0
  153. package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
  154. package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +2091 -0
  155. package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
  156. package/eventcatalog/src/features/studio/document-name.ts +7 -0
  157. package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
  158. package/eventcatalog/src/features/studio/hooks/presence-sender.ts +63 -0
  159. package/eventcatalog/src/features/studio/hooks/presence-store.ts +119 -0
  160. package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +353 -0
  161. package/eventcatalog/src/features/studio/hooks/use-comments.ts +54 -0
  162. package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +109 -0
  163. package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +782 -0
  164. package/eventcatalog/src/features/studio/identity.ts +59 -0
  165. package/eventcatalog/src/features/studio/limits.ts +2 -0
  166. package/eventcatalog/src/features/studio/pages/[id].astro +69 -0
  167. package/eventcatalog/src/features/studio/pages/index.astro +784 -0
  168. package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +27 -0
  169. package/eventcatalog/src/features/studio/server/canvas-mcp.ts +495 -0
  170. package/eventcatalog/src/features/studio/server/runtime.ts +498 -0
  171. package/eventcatalog/src/features/studio/server/sign-in.ts +18 -0
  172. package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
  173. package/eventcatalog/src/features/studio/server/storage.ts +90 -0
  174. package/eventcatalog/src/features/studio/server/tool-icons.ts +30 -0
  175. package/eventcatalog/src/features/studio/tool-sync.ts +75 -0
  176. package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
  177. package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
  178. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +13 -5
  179. package/eventcatalog/src/pages/_index.astro +5 -342
  180. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
  181. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
  182. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
  183. package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
  184. package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
  185. package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
  186. package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
  187. package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
  188. package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
  189. package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
  190. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
  191. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
  192. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
  193. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
  194. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
  195. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
  196. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
  197. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
  198. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
  199. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
  200. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
  201. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
  202. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
  203. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
  204. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
  205. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
  206. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
  207. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
  208. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
  209. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
  210. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
  211. package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
  212. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
  213. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
  214. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
  215. package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
  216. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
  217. package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
  218. package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
  219. package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
  220. package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
  221. package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
  222. package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
  223. package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
  224. package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
  225. package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
  226. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
  227. package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
  228. package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
  229. package/eventcatalog/src/pages/index.astro +4 -2
  230. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
  231. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +1 -0
  232. package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
  233. package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
  234. package/eventcatalog/src/pages/settings/license.astro +9 -1
  235. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
  236. package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
  237. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
  238. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
  239. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
  240. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
  241. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
  242. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
  243. package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
  244. package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
  245. package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
  246. package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
  247. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
  248. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
  249. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
  250. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
  251. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
  252. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
  253. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
  254. package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
  255. package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
  256. package/eventcatalog/src/utils/collections/util.ts +8 -4
  257. package/eventcatalog/src/utils/feature.ts +8 -0
  258. package/eventcatalog/src/utils/git.ts +22 -5
  259. package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
  260. package/eventcatalog/src/utils/license.ts +1 -1
  261. package/eventcatalog/src/utils/link-validation.ts +25 -19
  262. package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
  263. package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
  264. package/eventcatalog/src/utils/node-graphs/export-mermaid.ts +0 -2
  265. package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
  266. package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
  267. package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
  268. package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
  269. package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
  270. package/eventcatalog/src/utils/page-title.ts +15 -0
  271. package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
  272. package/eventcatalog/src/utils/trial.ts +14 -1
  273. package/package.json +19 -13
  274. package/dist/runtime-dependencies/shelljs.mjs +0 -3
  275. package/eventcatalog/public/studio-bg.png +0 -0
  276. package/eventcatalog/src/components/Studio/StudioPageModal.tsx +0 -150
  277. package/eventcatalog/src/pages/studio.astro +0 -316
@@ -5,69 +5,62 @@ import { v4 as uuidV4 } from "uuid";
5
5
  import matter from "gray-matter";
6
6
 
7
7
  // eventcatalog/integrations/config-loader.mjs
8
- import { readFile, rm, copyFile, mkdtemp, symlink } from "fs/promises";
8
+ import { readFile, rm } from "fs/promises";
9
9
  import { existsSync } from "fs";
10
10
  import path from "path";
11
11
  import { pathToFileURL } from "url";
12
- import { tmpdir } from "os";
12
+ import { register } from "module";
13
13
  async function cleanup(projectDirectory) {
14
14
  const filePath = path.join(projectDirectory, "eventcatalog.config.mjs");
15
15
  if (existsSync(filePath)) {
16
16
  await rm(filePath);
17
17
  }
18
18
  }
19
- var findNodeModulesDirectory = (directory) => {
20
- let currentDirectory = directory;
21
- while (true) {
22
- const nodeModulesDirectory = path.join(currentDirectory, "node_modules");
23
- if (existsSync(nodeModulesDirectory)) {
24
- return nodeModulesDirectory;
25
- }
26
- const parentDirectory = path.dirname(currentDirectory);
27
- if (parentDirectory === currentDirectory) {
28
- return void 0;
29
- }
30
- currentDirectory = parentDirectory;
31
- }
19
+ var hidesConfigModuleTypeWarning = false;
20
+ var loads = 0;
21
+ var hideConfigModuleTypeWarning = () => {
22
+ if (hidesConfigModuleTypeWarning) return;
23
+ hidesConfigModuleTypeWarning = true;
24
+ const emitWarning = process.emitWarning;
25
+ process.emitWarning = function(warning, ...args) {
26
+ const code = typeof args[0] === "object" ? args[0]?.code : args[1];
27
+ const message = typeof warning === "string" ? warning : warning?.message;
28
+ if (code === "MODULE_TYPELESS_PACKAGE_JSON" && message?.includes("eventcatalog.config.js")) return;
29
+ return emitWarning.call(this, warning, ...args);
30
+ };
32
31
  };
33
- var linkNodeModulesIntoTempDirectory = async ({ projectDirectory, tempDir }) => {
34
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
35
- if (!nodeModulesDirectory) {
36
- return;
37
- }
38
- await symlink(nodeModulesDirectory, path.join(tempDir, "node_modules"), "dir");
32
+ var AS_MODULE_QUERY = "eventcatalog-config-as-module";
33
+ var loadsMarkedConfigsAsModules = false;
34
+ var loadMarkedConfigsAsModules = () => {
35
+ if (loadsMarkedConfigsAsModules) return;
36
+ loadsMarkedConfigsAsModules = true;
37
+ const hook = `export async function load(url, context, nextLoad) {
38
+ return nextLoad(url, url.includes('${AS_MODULE_QUERY}=') ? { ...context, format: 'module' } : context);
39
+ }`;
40
+ register(`data:text/javascript,${encodeURIComponent(hook)}`);
39
41
  };
40
- var createTemporaryConfigDirectory = async (projectDirectory) => {
41
- const nodeModulesDirectory = findNodeModulesDirectory(projectDirectory);
42
- if (nodeModulesDirectory) {
43
- return mkdtemp(path.join(nodeModulesDirectory, ".eventcatalog-config-"));
42
+ var isCommonJSPackage = async (projectDirectory) => {
43
+ try {
44
+ const packageJson = JSON.parse(await readFile(path.join(projectDirectory, "package.json"), "utf-8"));
45
+ return packageJson?.type === "commonjs";
46
+ } catch {
47
+ return false;
44
48
  }
45
- const tempDir = await mkdtemp(path.join(tmpdir(), "eventcatalog-config-"));
46
- await linkNodeModulesIntoTempDirectory({ projectDirectory, tempDir });
47
- return tempDir;
48
49
  };
49
50
  var getEventCatalogConfigFile = async (projectDirectory) => {
50
- let tempDir;
51
51
  try {
52
- let configFilePath = path.join(projectDirectory, "eventcatalog.config.js");
53
- const filePath = path.join(projectDirectory, "package.json");
54
- const packageJson = JSON.parse(await readFile(filePath, "utf-8"));
55
- if (packageJson?.type !== "module") {
56
- tempDir = await createTemporaryConfigDirectory(projectDirectory);
57
- configFilePath = path.join(tempDir, "eventcatalog.config.mjs");
58
- await copyFile(path.join(projectDirectory, "eventcatalog.config.js"), configFilePath);
59
- }
60
- const configFileURL = `${pathToFileURL(configFilePath).href}?t=${Date.now()}`;
52
+ hideConfigModuleTypeWarning();
53
+ const asModule = await isCommonJSPackage(projectDirectory);
54
+ if (asModule) loadMarkedConfigsAsModules();
55
+ const configFileURL = pathToFileURL(path.join(projectDirectory, "eventcatalog.config.js")).href;
56
+ const query = `${asModule ? AS_MODULE_QUERY : "loaded"}=${Date.now()}-${loads++}`;
61
57
  const config = await import(
62
58
  /* @vite-ignore */
63
- configFileURL
59
+ `${configFileURL}?${query}`
64
60
  );
65
61
  return config.default;
66
62
  } finally {
67
63
  await cleanup(projectDirectory);
68
- if (tempDir) {
69
- await rm(tempDir, { recursive: true, force: true });
70
- }
71
64
  }
72
65
  };
73
66
 
@@ -1,11 +1,15 @@
1
1
  // src/utils/license-status.ts
2
2
  import boxen from "boxen";
3
+ import pc from "picocolors";
3
4
  import { isEventCatalogScaleEnabled, isEventCatalogStarterEnabled } from "@eventcatalog/license";
4
5
 
5
6
  // eventcatalog/src/utils/trial.ts
6
- var TRIAL_LENGTH_DAYS = 90;
7
+ var TRIAL_LENGTH_DAYS = 60;
7
8
  var LICENSE_FAQ_URL = "https://www.eventcatalog.dev/license-faq";
8
9
  var LICENSE_RENEW_URL = "https://eventcatalog.cloud";
10
+ var BUY_BUSINESS_URL = "https://www.eventcatalog.dev/buy?source=cli";
11
+ var PRICING_URL = "https://www.eventcatalog.dev/pricing";
12
+ 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.";
9
13
  var DAY_IN_MS = 24 * 60 * 60 * 1e3;
10
14
  var getTrialStatus = (tsd, now = Date.now()) => {
11
15
  if (typeof tsd !== "number" || !Number.isFinite(tsd) || tsd <= 0) return;
@@ -122,75 +126,104 @@ var getLicenseAnalytics = (license = { state: "none" }, tsd) => ({
122
126
  });
123
127
  var formatDate = (date) => date.toLocaleDateString(void 0, { dateStyle: "medium" });
124
128
  var formatDays = (days) => `${days} ${days === 1 ? "day" : "days"}`;
125
- var getTrialLine = (tsd, now) => {
129
+ var PLAIN = { bold: (text) => text, dim: (text) => text, link: (text) => text };
130
+ var COLOURS = { bold: pc.bold, dim: pc.dim, link: (text) => pc.cyan(text) };
131
+ var render = ({ headline, rows, links, note }, colours) => {
132
+ const width = Math.max(0, ...[...rows, ...links].map(([label]) => label.length));
133
+ const row = ([label, value]) => `${colours.dim(label.padEnd(width))} ${value}`;
134
+ return [
135
+ colours.bold(headline),
136
+ ...rows.length ? ["", ...rows.map(row)] : [],
137
+ ...links.length ? ["", ...links.map(([label, url]) => row([label, colours.link(url)]))] : [],
138
+ ...note?.length ? ["", ...note.map(colours.dim)] : []
139
+ ].join("\n");
140
+ };
141
+ var FREE_USE_LINES = FREE_USE_NOTE.split(/(?<=\?) /);
142
+ var message = (content) => ({
143
+ ...content,
144
+ text: render(content, PLAIN)
145
+ });
146
+ var getTrialRow = (tsd, now) => {
126
147
  const trial = getTrialStatus(tsd, now);
127
148
  if (!trial) return;
128
- return trial.ended ? `Your ${TRIAL_LENGTH_DAYS}-day EventCatalog trial ended on ${formatDate(trial.endsAt)}.` : `${formatDays(trial.daysLeft)} left of your ${TRIAL_LENGTH_DAYS}-day EventCatalog trial (ends ${formatDate(trial.endsAt)}).`;
149
+ return [
150
+ "Trial",
151
+ trial.ended ? `Ended ${formatDate(trial.endsAt)}` : `${formatDays(trial.daysLeft)} left of ${TRIAL_LENGTH_DAYS} (ends ${formatDate(trial.endsAt)})`
152
+ ];
129
153
  };
130
154
  var getLicenseStatusMessage = (license, tsd, now = Date.now()) => {
155
+ const licensing = ["Licensing", LICENSE_FAQ_URL];
156
+ const renew = ["Renew", LICENSE_RENEW_URL];
157
+ const licensedTo = "org" in license && license.org ? [["Licensed to", license.org]] : [];
131
158
  if (license.state === "licensed") {
132
159
  const daysLeft = Math.max(0, Math.ceil((license.expiresAt.getTime() - now) / DAY_IN_MS2));
133
- const licensedTo = license.org ? `Licensed to ${license.org}` : "Licensed";
134
160
  if (daysLeft < LICENSE_REMINDER_DAYS) {
135
- return {
136
- title: "EventCatalog Commercial License",
161
+ return message({
162
+ title: "EventCatalog license",
137
163
  color: "yellow",
138
- text: [
139
- licensedTo,
140
- `Your license expires in ${formatDays(daysLeft)}, on ${formatDate(license.expiresAt)}.`,
141
- `Renew it to keep using EventCatalog commercially: ${LICENSE_RENEW_URL}`
142
- ].join("\n")
143
- };
164
+ headline: `Your commercial license expires in ${formatDays(daysLeft)}`,
165
+ rows: [...licensedTo, ["Expires", formatDate(license.expiresAt)]],
166
+ links: [renew]
167
+ });
144
168
  }
145
- return {
146
- title: "EventCatalog Commercial License",
169
+ return message({
170
+ title: "EventCatalog license",
147
171
  color: "green",
148
- text: `${licensedTo}
149
- Valid until ${formatDate(license.expiresAt)} (${formatDays(daysLeft)} left)`
150
- };
172
+ headline: "Commercial license active",
173
+ rows: [...licensedTo, ["Valid until", `${formatDate(license.expiresAt)} (${formatDays(daysLeft)} left)`]],
174
+ links: []
175
+ });
151
176
  }
152
177
  if (license.state === "plan") return;
153
- const trialLine = getTrialLine(tsd, now);
178
+ const trialRow = getTrialRow(tsd, now);
179
+ const trialRows = trialRow ? [trialRow] : [];
154
180
  if (license.state === "none") {
155
- if (!trialLine) return;
156
- const ended = getTrialStatus(tsd, now)?.ended;
157
- return {
181
+ const trial = getTrialStatus(tsd, now);
182
+ if (!trial || !trialRow) return;
183
+ return message({
158
184
  title: "EventCatalog trial",
159
- color: ended ? "yellow" : "green",
160
- text: `${trialLine}
161
- Learn about licensing: ${LICENSE_FAQ_URL}`
162
- };
185
+ color: trial.ended ? "yellow" : "green",
186
+ headline: trial.ended ? "Your EventCatalog trial has ended" : `You're on the ${TRIAL_LENGTH_DAYS}-day EventCatalog trial`,
187
+ rows: trialRows,
188
+ links: trial.ended ? [["Get a license", LICENSE_RENEW_URL], ["Buy Business", BUY_BUSINESS_URL], licensing] : [["Buy a license", PRICING_URL], licensing],
189
+ note: trial.ended ? FREE_USE_LINES : void 0
190
+ });
163
191
  }
164
192
  if (license.state === "expired") {
165
- const expiredOn = license.expiresAt ? `expired on ${formatDate(license.expiresAt)} (${formatDays(Math.floor((now - license.expiresAt.getTime()) / DAY_IN_MS2))} ago)` : "has expired";
166
- return {
167
- title: "EventCatalog License Expired",
193
+ const expiredOn = license.expiresAt ? [
194
+ [
195
+ "Expired",
196
+ `${formatDate(license.expiresAt)} (${formatDays(Math.floor((now - license.expiresAt.getTime()) / DAY_IN_MS2))} ago)`
197
+ ]
198
+ ] : [];
199
+ return message({
200
+ title: "EventCatalog license",
168
201
  color: "yellow",
169
- text: [
170
- `Your EventCatalog commercial license${license.org ? ` for ${license.org}` : ""} ${expiredOn}.`,
171
- `Renew it to keep using EventCatalog commercially: ${LICENSE_RENEW_URL}`,
172
- trialLine,
173
- `Learn about licensing: ${LICENSE_FAQ_URL}`
174
- ].filter(Boolean).join("\n")
175
- };
202
+ headline: "Your commercial license has expired",
203
+ // A catalog has a license or is on the trial: an expired license is renewed, not replaced by the trial
204
+ rows: [...licensedTo, ...expiredOn],
205
+ links: [renew, licensing]
206
+ });
176
207
  }
177
- return {
208
+ return message({
178
209
  title: "EventCatalog license",
179
210
  color: "yellow",
180
- text: [`Your license.jwt could not be verified: ${license.reason}.`, trialLine, `Learn about licensing: ${LICENSE_FAQ_URL}`].filter(Boolean).join("\n")
181
- };
211
+ headline: "Your license.jwt couldn't be verified",
212
+ rows: [["Reason", license.reason.charAt(0).toUpperCase() + license.reason.slice(1)], ...trialRows],
213
+ links: [licensing]
214
+ });
182
215
  };
183
216
  var printLicenseStatus = (license, tsd) => {
184
- const message = getLicenseStatusMessage(license, tsd);
185
- if (!message) return;
217
+ const status = getLicenseStatusMessage(license, tsd);
218
+ if (!status) return;
186
219
  console.log(
187
- boxen(message.text, {
188
- padding: 1,
220
+ boxen(render(status, COLOURS), {
221
+ padding: { top: 1, bottom: 1, left: 2, right: 2 },
189
222
  margin: 1,
190
223
  borderStyle: "round",
191
- borderColor: message.color,
192
- title: message.title,
193
- titleAlignment: "center"
224
+ borderColor: status.color,
225
+ title: status.title,
226
+ titleAlignment: "left"
194
227
  })
195
228
  );
196
229
  };
@@ -1,10 +1,15 @@
1
+ import {
2
+ TELEMETRY_REQUEST_TIMEOUT_MS,
3
+ isTelemetryDisabled
4
+ } from "./chunk-CPW6G62V.js";
1
5
  import {
2
6
  VERSION
3
- } from "./chunk-GYIVJXOJ.js";
7
+ } from "./chunk-WADZVNCA.js";
4
8
 
5
9
  // src/analytics/analytics.js
6
10
  import os from "os";
7
- async function raiseEvent(eventData) {
11
+ async function raiseEvent(eventData, config) {
12
+ if (isTelemetryDisabled(config, process.env)) return;
8
13
  if (typeof eventData?.command !== "string" || typeof eventData?.cId !== "string") return;
9
14
  const url = "https://queue.simpleanalyticscdn.com/events";
10
15
  const userAgent = `@eventcatalog/eventcatalog@${VERSION} (${os.platform()}; ${os.arch()}; Node/${process.version})`;
@@ -26,7 +31,8 @@ async function raiseEvent(eventData) {
26
31
  const response = await fetch(url, {
27
32
  method: "POST",
28
33
  headers,
29
- body: JSON.stringify(payload)
34
+ body: JSON.stringify(payload),
35
+ signal: AbortSignal.timeout(TELEMETRY_REQUEST_TIMEOUT_MS)
30
36
  });
31
37
  if (!response.ok) {
32
38
  throw new Error(`Failed to raise analytics event: ${response.status}`);
@@ -0,0 +1,54 @@
1
+ // src/analytics/studio-usage.js
2
+ import fs from "fs";
3
+ import path from "path";
4
+ var DAY_IN_MS = 24 * 60 * 60 * 1e3;
5
+ var DEFAULT_DATABASE_PATH = ".eventcatalog/eventcatalog.db";
6
+ var getStudioMode = (configFile) => {
7
+ const enabled = configFile.studio?.enabled;
8
+ if (enabled === false) return "off";
9
+ return configFile.output === "server" && enabled === true ? "server" : "dev";
10
+ };
11
+ var getStorageType = (configFile) => configFile.storage?.type || "memory";
12
+ var loadSqlite = () => {
13
+ const emitWarning = process.emitWarning;
14
+ process.emitWarning = function(warning, ...args) {
15
+ const type = typeof args[0] === "object" ? args[0]?.type : args[0];
16
+ const message = typeof warning === "string" ? warning : warning?.message;
17
+ if (type === "ExperimentalWarning" && message?.startsWith("SQLite")) return;
18
+ return emitWarning.call(this, warning, ...args);
19
+ };
20
+ try {
21
+ return process.getBuiltinModule?.("node:sqlite");
22
+ } catch {
23
+ return void 0;
24
+ } finally {
25
+ process.emitWarning = emitWarning;
26
+ }
27
+ };
28
+ var UNKNOWN = "canvases:unknown";
29
+ var serializeStudioUsage = (projectDirectory, configFile, now = Date.now()) => {
30
+ if (getStudioMode(configFile) === "off" || getStorageType(configFile) !== "sqlite") return UNKNOWN;
31
+ const file = path.resolve(projectDirectory, configFile.storage.path ?? DEFAULT_DATABASE_PATH);
32
+ if (!fs.existsSync(file)) return "canvases:0,changed7d:0,changed30d:0,deleted:0";
33
+ let database;
34
+ try {
35
+ const sqlite = loadSqlite();
36
+ if (!sqlite?.DatabaseSync) return UNKNOWN;
37
+ database = new sqlite.DatabaseSync(file, { readOnly: true });
38
+ const canvases = database.prepare(
39
+ "SELECT COUNT(*) AS total, SUM(updated_at >= ?) AS changed7d, SUM(updated_at >= ?) AS changed30d FROM studio_canvases"
40
+ ).get(now - 7 * DAY_IN_MS, now - 30 * DAY_IN_MS);
41
+ const { deleted } = database.prepare("SELECT COUNT(*) AS deleted FROM studio_deleted_canvases").get();
42
+ return `canvases:${canvases.total},changed7d:${canvases.changed7d ?? 0},changed30d:${canvases.changed30d ?? 0},deleted:${deleted}`;
43
+ } catch {
44
+ return UNKNOWN;
45
+ } finally {
46
+ database?.close();
47
+ }
48
+ };
49
+
50
+ export {
51
+ getStudioMode,
52
+ getStorageType,
53
+ serializeStudioUsage
54
+ };
@@ -0,0 +1,17 @@
1
+ // src/analytics/telemetry.ts
2
+ var TELEMETRY_REQUEST_TIMEOUT_MS = 2e3;
3
+ var isOptOutEnvValue = (value) => {
4
+ if (typeof value !== "string") return false;
5
+ const normalized = value.trim().toLowerCase();
6
+ return normalized === "1" || normalized === "true";
7
+ };
8
+ var isTelemetryDisabled = (config, env) => {
9
+ if (isOptOutEnvValue(env.EVENTCATALOG_TELEMETRY_DISABLED)) return true;
10
+ if (isOptOutEnvValue(env.DO_NOT_TRACK)) return true;
11
+ return config?.telemetry === false;
12
+ };
13
+
14
+ export {
15
+ TELEMETRY_REQUEST_TIMEOUT_MS,
16
+ isTelemetryDisabled
17
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getEventCatalogConfigFile
3
- } from "./chunk-RFIXKATC.js";
3
+ } from "./chunk-4G7FSRPN.js";
4
4
 
5
5
  // src/features.ts
6
6
  import { join } from "path";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-BH2F5WPN.js";
3
+ } from "./chunk-2UCCTEIH.js";
4
4
  import {
5
5
  cleanup,
6
6
  getEventCatalogConfigFile
7
- } from "./chunk-RFIXKATC.js";
7
+ } from "./chunk-4G7FSRPN.js";
8
8
 
9
9
  // src/generate.js
10
10
  import path from "path";
@@ -54,10 +54,12 @@ var generate = async (PROJECT_DIRECTORY) => {
54
54
  for (const { plugin } of errors) {
55
55
  logger.error(` - ${plugin}`, "generator");
56
56
  }
57
+ process.exitCode = 1;
57
58
  }
58
59
  } catch (error) {
59
60
  console.error(error);
60
61
  await cleanup(PROJECT_DIRECTORY);
62
+ process.exitCode = 1;
61
63
  }
62
64
  };
63
65
 
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-JJPB6EOZ.js";
17
17
  import {
18
18
  getEventCatalogConfigFile
19
- } from "./chunk-RFIXKATC.js";
19
+ } from "./chunk-4G7FSRPN.js";
20
20
 
21
21
  // src/federation/federate.ts
22
22
  import { createHash } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getEventCatalogConfigFile
3
- } from "./chunk-RFIXKATC.js";
3
+ } from "./chunk-4G7FSRPN.js";
4
4
 
5
5
  // src/resolve-catalog-dependencies.js
6
6
  import path from "path";
@@ -0,0 +1,29 @@
1
+ // src/utils/child-process-signals.ts
2
+ import { constants } from "os";
3
+ var FORWARDED_SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];
4
+ var isRunning = (child) => child.exitCode === null && child.signalCode === null;
5
+ var stopChildWithParent = (child, parent = process) => {
6
+ let received;
7
+ const onSignal = (signal) => {
8
+ received = signal;
9
+ if (isRunning(child)) child.kill(signal);
10
+ };
11
+ const onExit = () => {
12
+ if (isRunning(child)) child.kill("SIGTERM");
13
+ };
14
+ for (const signal of FORWARDED_SIGNALS) parent.on(signal, onSignal);
15
+ parent.on("exit", onExit);
16
+ return {
17
+ childClosed: () => {
18
+ for (const signal of FORWARDED_SIGNALS) parent.off(signal, onSignal);
19
+ parent.off("exit", onExit);
20
+ if (!received) return false;
21
+ parent.exit(128 + constants.signals[received]);
22
+ return true;
23
+ }
24
+ };
25
+ };
26
+
27
+ export {
28
+ stopChildWithParent
29
+ };
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "5.0.0-beta.3";
2
+ var version = "5.0.0-beta.31";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -1,18 +1,27 @@
1
1
  import {
2
2
  getLicenseAnalytics
3
- } from "./chunk-TQLRG35T.js";
3
+ } from "./chunk-AD7CL772.js";
4
4
  import {
5
5
  countResources,
6
6
  hashCatalogContent,
7
7
  serializeCounts
8
8
  } from "./chunk-ZAZHAVKB.js";
9
+ import {
10
+ getStorageType,
11
+ getStudioMode,
12
+ serializeStudioUsage
13
+ } from "./chunk-CA6WCQ2T.js";
9
14
  import {
10
15
  raiseEvent
11
- } from "./chunk-NDJOAITI.js";
16
+ } from "./chunk-BNSLGNQI.js";
17
+ import {
18
+ TELEMETRY_REQUEST_TIMEOUT_MS,
19
+ isTelemetryDisabled
20
+ } from "./chunk-CPW6G62V.js";
12
21
  import {
13
22
  getEventCatalogConfigFile,
14
23
  verifyRequiredFieldsAreInCatalogConfigFile
15
- } from "./chunk-RFIXKATC.js";
24
+ } from "./chunk-4G7FSRPN.js";
16
25
 
17
26
  // src/analytics/log-build.js
18
27
  var isMCPEnabled = (configFile) => configFile.output === "server" && (configFile.mcp?.enabled ?? true);
@@ -27,7 +36,9 @@ var getFeatures = async (configFile) => {
27
36
  environments: Array.isArray(configFile.environments) && configFile.environments.length > 0,
28
37
  output: configFile.output || "static",
29
38
  mcp,
30
- mcpAuth: mcp && (configFile.mcp?.auth?.enabled ?? false)
39
+ mcpAuth: mcp && (configFile.mcp?.auth?.enabled ?? false),
40
+ studio: getStudioMode(configFile),
41
+ storage: getStorageType(configFile)
31
42
  };
32
43
  };
33
44
  var getDirectoryProvider = (source) => {
@@ -69,50 +80,70 @@ var toCloudResourceCounts = (counts) => ({
69
80
  customPages: counts.customPages || 0,
70
81
  customApis: counts.customApis || 0
71
82
  });
72
- var reportCloudResourceInventory = async (configFile, resourceCounts) => {
83
+ var getEnabledCloudAnalytics = (configFile) => {
73
84
  const analytics = configFile.cloud?.analytics;
74
- if (!analytics?.enabled || !analytics.trackingId || !analytics.writeKey) return;
85
+ if (!analytics?.enabled || !analytics.trackingId || !analytics.writeKey) return null;
86
+ return analytics;
87
+ };
88
+ var reportCloudResourceInventory = async (configFile, resourceCounts) => {
89
+ const analytics = getEnabledCloudAnalytics(configFile);
90
+ if (!analytics) return;
75
91
  const endpoint = analytics.endpoint || CLOUD_ANALYTICS_ENDPOINT;
76
- await fetch(endpoint, {
77
- method: "POST",
78
- headers: {
79
- "Content-Type": "application/json",
80
- "X-EventCatalog-Analytics-Key": analytics.writeKey
81
- },
82
- body: JSON.stringify({
83
- trackingId: analytics.trackingId,
84
- event: "catalog.resource_inventory_reported",
85
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
86
- counts: toCloudResourceCounts(resourceCounts)
87
- })
88
- });
92
+ try {
93
+ await fetch(endpoint, {
94
+ method: "POST",
95
+ headers: {
96
+ "Content-Type": "application/json",
97
+ "X-EventCatalog-Analytics-Key": analytics.writeKey
98
+ },
99
+ body: JSON.stringify({
100
+ trackingId: analytics.trackingId,
101
+ event: "catalog.resource_inventory_reported",
102
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
103
+ counts: toCloudResourceCounts(resourceCounts)
104
+ }),
105
+ signal: AbortSignal.timeout(TELEMETRY_REQUEST_TIMEOUT_MS)
106
+ });
107
+ } catch {
108
+ }
89
109
  };
90
110
  var main = async (projectDir, { command = "build", license } = {}) => {
91
111
  try {
92
112
  await verifyRequiredFieldsAreInCatalogConfigFile(projectDir);
93
113
  const configFile = await getEventCatalogConfigFile(projectDir);
114
+ if (isTelemetryDisabled(configFile, process.env)) {
115
+ if (getEnabledCloudAnalytics(configFile)) {
116
+ const resourceCounts2 = await countResources(projectDir);
117
+ await reportCloudResourceInventory(configFile, resourceCounts2);
118
+ }
119
+ return;
120
+ }
94
121
  const { cId, tsd, organizationName, generators = [] } = configFile;
95
122
  const generatorNames = generators.length > 0 ? generators.map((generator) => generator[0]) : ["none"];
96
123
  const features = await getFeatures(configFile);
97
124
  const resourceCounts = await countResources(projectDir);
98
125
  const contentHash = await hashCatalogContent(projectDir);
99
126
  await reportCloudResourceInventory(configFile, resourceCounts);
100
- await raiseEvent({
101
- command,
102
- org: organizationName,
103
- cId,
104
- // Trial start date (unix ms) from eventcatalog.config.js
105
- tsd,
106
- // Commercial license or trial, and when each expires (unix ms)
107
- ...getLicenseAnalytics(license, tsd),
108
- // CI redeploys and human-run builds are different signals; tag rather than suppress
109
- ci: process.env.CI ? "true" : "false",
110
- contentHash,
111
- generators: generatorNames.toString(),
112
- features: Object.keys(features).map((feature) => `${feature}:${features[feature]}`).join(","),
113
- directorySources: serializeDirectorySources(configFile),
114
- resources: serializeCounts(resourceCounts)
115
- });
127
+ await raiseEvent(
128
+ {
129
+ command,
130
+ org: organizationName,
131
+ cId,
132
+ // Trial start date (unix ms) from eventcatalog.config.js
133
+ tsd,
134
+ // Commercial license or trial, and when each expires (unix ms)
135
+ ...getLicenseAnalytics(license, tsd),
136
+ // CI redeploys and human-run builds are different signals; tag rather than suppress
137
+ ci: process.env.CI ? "true" : "false",
138
+ contentHash,
139
+ generators: generatorNames.toString(),
140
+ features: Object.keys(features).map((feature) => `${feature}:${features[feature]}`).join(","),
141
+ directorySources: serializeDirectorySources(configFile),
142
+ resources: serializeCounts(resourceCounts),
143
+ studio: serializeStudioUsage(projectDir, configFile)
144
+ },
145
+ configFile
146
+ );
116
147
  } catch (error) {
117
148
  }
118
149
  };
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "5.0.0-beta.3";
28
+ var version = "5.0.0-beta.31";
29
29
 
30
30
  // src/constants.ts
31
31
  var VERSION = version;
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-GYIVJXOJ.js";
3
+ } from "./chunk-WADZVNCA.js";
4
4
  export {
5
5
  VERSION
6
6
  };