@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.
- package/LICENSE +234 -134
- package/README.md +5 -5
- package/dist/analytics/analytics.cjs +18 -3
- package/dist/analytics/analytics.d.cts +1 -1
- package/dist/analytics/analytics.d.ts +1 -1
- package/dist/analytics/analytics.js +3 -2
- package/dist/analytics/log-build.cjs +160 -77
- package/dist/analytics/log-build.d.cts +2 -2
- package/dist/analytics/log-build.d.ts +2 -2
- package/dist/analytics/log-build.js +7 -5
- package/dist/analytics/studio-usage.cjs +90 -0
- package/dist/analytics/studio-usage.d.cts +5 -0
- package/dist/analytics/studio-usage.d.ts +5 -0
- package/dist/analytics/studio-usage.js +10 -0
- package/dist/analytics/telemetry.cjs +42 -0
- package/dist/analytics/telemetry.d.cts +20 -0
- package/dist/analytics/telemetry.d.ts +20 -0
- package/dist/analytics/telemetry.js +8 -0
- package/dist/catalog-runtime.cjs +1 -1
- package/dist/{chunk-BH2F5WPN.js → chunk-2UCCTEIH.js} +1 -1
- package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
- package/dist/{chunk-TQLRG35T.js → chunk-AD7CL772.js} +78 -45
- package/dist/{chunk-NDJOAITI.js → chunk-BNSLGNQI.js} +9 -3
- package/dist/chunk-CA6WCQ2T.js +54 -0
- package/dist/chunk-CPW6G62V.js +17 -0
- package/dist/{chunk-MDWB5HLO.js → chunk-NKNOXQ62.js} +1 -1
- package/dist/{chunk-423S2KHN.js → chunk-OUEGYMBA.js} +4 -2
- package/dist/{chunk-3PKS2IIP.js → chunk-OX6TSVHY.js} +1 -1
- package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
- package/dist/chunk-S5GWAUG5.js +29 -0
- package/dist/{chunk-GYIVJXOJ.js → chunk-WADZVNCA.js} +1 -1
- package/dist/{chunk-6OC46WQJ.js → chunk-XRFL642Z.js} +66 -35
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog-config-file-utils.cjs +34 -41
- package/dist/eventcatalog-config-file-utils.d.cts +56 -58
- package/dist/eventcatalog-config-file-utils.d.ts +56 -58
- package/dist/eventcatalog-config-file-utils.js +1 -1
- package/dist/eventcatalog.cjs +531 -356
- package/dist/eventcatalog.config.d.cts +59 -1
- package/dist/eventcatalog.config.d.ts +59 -1
- package/dist/eventcatalog.js +63 -25
- package/dist/features.cjs +34 -41
- package/dist/features.js +2 -2
- package/dist/federation/federate.cjs +37 -44
- package/dist/federation/federate.js +2 -2
- package/dist/generate.cjs +37 -42
- package/dist/generate.js +4 -4
- package/dist/resolve-catalog-dependencies.cjs +34 -41
- package/dist/resolve-catalog-dependencies.js +2 -2
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
- package/dist/runtime-dependencies/@hocuspocus__provider.mjs +3 -0
- package/dist/runtime-dependencies/@hocuspocus__server.mjs +3 -0
- package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +3 -0
- package/dist/runtime-dependencies/@mcp-b__webmcp-polyfill.mjs +3 -0
- package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
- package/dist/runtime-dependencies/manifest.json +13 -1
- package/dist/runtime-dependencies/react-hotkeys-hook.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
- package/dist/runtime-dependencies/y-protocols.mjs +3 -0
- package/dist/runtime-dependencies/y-protocols__awareness.mjs +3 -0
- package/dist/runtime-dependencies/yjs.mjs +3 -0
- package/dist/utils/child-process-signals.cjs +53 -0
- package/dist/utils/child-process-signals.d.cts +19 -0
- package/dist/utils/child-process-signals.d.ts +19 -0
- package/dist/utils/child-process-signals.js +6 -0
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/dist/utils/license-status.cjs +78 -45
- package/dist/utils/license-status.d.cts +15 -5
- package/dist/utils/license-status.d.ts +15 -5
- package/dist/utils/license-status.js +1 -1
- package/eventcatalog/astro.config.mjs +23 -1
- package/eventcatalog/integrations/config-loader.mjs +56 -58
- package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
- package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
- package/eventcatalog/integrations/storage.mjs +20 -0
- package/eventcatalog/integrations/studio-server.mjs +32 -0
- package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
- package/eventcatalog/src/components/Header.astro +3 -3
- package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
- package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
- package/eventcatalog/src/components/NavigationProgress.astro +7 -0
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
- package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
- package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
- package/eventcatalog/src/components/Search/search-utils.ts +26 -0
- package/eventcatalog/src/components/Seo.astro +5 -1
- package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
- package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
- package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
- package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
- package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
- package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
- package/eventcatalog/src/components/Settings/Row.tsx +7 -4
- package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
- package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +53 -83
- package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
- package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +131 -0
- package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
- package/eventcatalog/src/components/TrialBadge.astro +20 -9
- package/eventcatalog/src/content.config.ts +19 -2
- package/eventcatalog/src/features/auth/error.astro +4 -2
- package/eventcatalog/src/features/auth/login.astro +2 -1
- package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +10 -0
- package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
- package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
- package/eventcatalog/src/features/integrations/eventcatalog-features.ts +34 -1
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
- package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +47 -0
- package/eventcatalog/src/features/mcp/apps/canvas/styles.css +24 -0
- package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +278 -0
- package/eventcatalog/src/features/mcp/apps/generated/canvas.html +272 -0
- package/eventcatalog/src/features/mcp/apps/generated/viewer.html +65 -65
- package/eventcatalog/src/features/mcp/apps/shared/app-view.tsx +2 -1
- package/eventcatalog/src/features/mcp/mcp-apps.ts +6 -3
- package/eventcatalog/src/features/mcp/mcp-server.ts +36 -5
- package/eventcatalog/src/features/server/start.ts +25 -0
- package/eventcatalog/src/features/storage/database.ts +88 -0
- package/eventcatalog/src/features/storage/migrations.ts +85 -0
- package/eventcatalog/src/features/storage/sql/database.sql +5 -0
- package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
- package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
- package/eventcatalog/src/features/storage/sql.ts +28 -0
- package/eventcatalog/src/features/studio/agent-choreography.ts +384 -0
- package/eventcatalog/src/features/studio/agents.ts +28 -0
- package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
- package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
- package/eventcatalog/src/features/studio/api/client.ts +40 -0
- package/eventcatalog/src/features/studio/canvas-actions.ts +540 -0
- package/eventcatalog/src/features/studio/canvas-preview.ts +52 -0
- package/eventcatalog/src/features/studio/catalog-resources.ts +155 -0
- package/eventcatalog/src/features/studio/catalog.ts +173 -0
- package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +518 -0
- package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +118 -0
- package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +434 -0
- package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +143 -0
- package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
- package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
- package/eventcatalog/src/features/studio/components/JoinForm.tsx +109 -0
- package/eventcatalog/src/features/studio/components/LeftPanel.tsx +206 -0
- package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
- package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
- package/eventcatalog/src/features/studio/components/Presence.tsx +293 -0
- package/eventcatalog/src/features/studio/components/ShareDialog.tsx +396 -0
- package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
- package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +2091 -0
- package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
- package/eventcatalog/src/features/studio/document-name.ts +7 -0
- package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
- package/eventcatalog/src/features/studio/hooks/presence-sender.ts +63 -0
- package/eventcatalog/src/features/studio/hooks/presence-store.ts +119 -0
- package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +353 -0
- package/eventcatalog/src/features/studio/hooks/use-comments.ts +54 -0
- package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +109 -0
- package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +782 -0
- package/eventcatalog/src/features/studio/identity.ts +59 -0
- package/eventcatalog/src/features/studio/limits.ts +2 -0
- package/eventcatalog/src/features/studio/pages/[id].astro +69 -0
- package/eventcatalog/src/features/studio/pages/index.astro +784 -0
- package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +27 -0
- package/eventcatalog/src/features/studio/server/canvas-mcp.ts +495 -0
- package/eventcatalog/src/features/studio/server/runtime.ts +498 -0
- package/eventcatalog/src/features/studio/server/sign-in.ts +18 -0
- package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
- package/eventcatalog/src/features/studio/server/storage.ts +90 -0
- package/eventcatalog/src/features/studio/server/tool-icons.ts +30 -0
- package/eventcatalog/src/features/studio/tool-sync.ts +75 -0
- package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
- package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +13 -5
- package/eventcatalog/src/pages/_index.astro +5 -342
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
- package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
- package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
- package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/index.astro +4 -2
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
- package/eventcatalog/src/pages/settings/license.astro +9 -1
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
- package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
- package/eventcatalog/src/utils/collections/util.ts +8 -4
- package/eventcatalog/src/utils/feature.ts +8 -0
- package/eventcatalog/src/utils/git.ts +22 -5
- package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
- package/eventcatalog/src/utils/license.ts +1 -1
- package/eventcatalog/src/utils/link-validation.ts +25 -19
- package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
- package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
- package/eventcatalog/src/utils/node-graphs/export-mermaid.ts +0 -2
- package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
- package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
- package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
- package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
- package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
- package/eventcatalog/src/utils/page-title.ts +15 -0
- package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
- package/eventcatalog/src/utils/trial.ts +14 -1
- package/package.json +19 -13
- package/dist/runtime-dependencies/shelljs.mjs +0 -3
- package/eventcatalog/public/studio-bg.png +0 -0
- package/eventcatalog/src/components/Studio/StudioPageModal.tsx +0 -150
- 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
|
|
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 {
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return
|
|
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
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
161
|
+
return message({
|
|
162
|
+
title: "EventCatalog license",
|
|
137
163
|
color: "yellow",
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
|
169
|
+
return message({
|
|
170
|
+
title: "EventCatalog license",
|
|
147
171
|
color: "green",
|
|
148
|
-
|
|
149
|
-
Valid until
|
|
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
|
|
178
|
+
const trialRow = getTrialRow(tsd, now);
|
|
179
|
+
const trialRows = trialRow ? [trialRow] : [];
|
|
154
180
|
if (license.state === "none") {
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
161
|
-
|
|
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 ?
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
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
|
|
185
|
-
if (!
|
|
217
|
+
const status = getLicenseStatusMessage(license, tsd);
|
|
218
|
+
if (!status) return;
|
|
186
219
|
console.log(
|
|
187
|
-
boxen(
|
|
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:
|
|
192
|
-
title:
|
|
193
|
-
titleAlignment: "
|
|
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-
|
|
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,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
logger
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2UCCTEIH.js";
|
|
4
4
|
import {
|
|
5
5
|
cleanup,
|
|
6
6
|
getEventCatalogConfigFile
|
|
7
|
-
} from "./chunk-
|
|
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
|
|
|
@@ -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,18 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getLicenseAnalytics
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
};
|
package/dist/constants.cjs
CHANGED