@eventcatalog/core 4.12.3 → 5.0.0-beta.1
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 +226 -95
- package/NOTICE +30 -0
- package/README.md +3 -2
- package/dist/analytics/analytics.cjs +2 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +44 -16
- package/dist/analytics/log-build.d.cts +6 -5
- package/dist/analytics/log-build.d.ts +6 -5
- package/dist/analytics/log-build.js +4 -3
- package/dist/{chunk-U4YJSTGV.js → chunk-AYNZXUB5.js} +2 -10
- package/dist/{chunk-5BPN6QEC.js → chunk-K2ACDO7Y.js} +1 -1
- package/dist/{chunk-ZYTCBNB3.js → chunk-KYJZJLBD.js} +2 -1
- package/dist/{chunk-TV3YAWKQ.js → chunk-Q6SD5SNQ.js} +1 -1
- package/dist/{chunk-HPC6KUDQ.js → chunk-S2QGT7ZF.js} +1 -1
- package/dist/chunk-TQLRG35T.js +203 -0
- package/dist/{chunk-M577VUOX.js → chunk-UDS3SYLZ.js} +13 -16
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +408 -291
- package/dist/eventcatalog.config.d.cts +2 -3
- package/dist/eventcatalog.config.d.ts +2 -3
- package/dist/eventcatalog.js +35 -98
- package/dist/federation/content-cache.d.cts +0 -5
- package/dist/federation/content-cache.d.ts +0 -5
- package/dist/federation/diagnostics.d.cts +0 -5
- package/dist/federation/diagnostics.d.ts +0 -5
- package/dist/federation/federate.cjs +0 -9
- package/dist/federation/federate.d.cts +0 -5
- package/dist/federation/federate.d.ts +0 -5
- package/dist/federation/federate.js +4 -5
- package/dist/federation/filesystem-source-provider.d.cts +0 -5
- package/dist/federation/filesystem-source-provider.d.ts +0 -5
- package/dist/federation/github-source-provider.d.cts +0 -5
- package/dist/federation/github-source-provider.d.ts +0 -5
- package/dist/federation/output-transaction.d.cts +0 -4
- package/dist/federation/output-transaction.d.ts +0 -4
- package/dist/federation/public-assets.d.cts +0 -5
- package/dist/federation/public-assets.d.ts +0 -5
- package/dist/federation/source-provider.d.cts +0 -5
- package/dist/federation/source-provider.d.ts +0 -5
- package/dist/federation/types.d.cts +0 -5
- package/dist/federation/types.d.ts +0 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/license-C1y-56bb.d.cts +23 -0
- package/dist/license-C1y-56bb.d.ts +23 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__layout.mjs +3 -0
- package/dist/runtime-dependencies/@modelcontextprotocol__ext-apps.mjs +3 -0
- package/dist/runtime-dependencies/@modelcontextprotocol__ext-apps__react.mjs +3 -0
- package/dist/runtime-dependencies/@modelcontextprotocol__ext-apps__server.mjs +3 -0
- package/dist/runtime-dependencies/@modelcontextprotocol__sdk__types.js.mjs +3 -0
- package/dist/runtime-dependencies/manifest.json +12 -1
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__languages__prism__graphql.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__languages__prism__json.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__languages__prism__markup.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__languages__prism__protobuf.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__languages__prism__yaml.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__styles__prism__one-dark.mjs +3 -0
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__esm__styles__prism__one-light.mjs +3 -0
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/dist/utils/license-status.cjs +240 -0
- package/dist/utils/license-status.d.cts +28 -0
- package/dist/utils/license-status.d.ts +28 -0
- package/dist/utils/license-status.js +12 -0
- package/eventcatalog/astro.config.mjs +1 -1
- package/eventcatalog/integrations/eventcatalog-runtime.mjs +1 -1
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +29 -19
- package/eventcatalog/src/components/ChatPanel/OfflineReply.tsx +74 -0
- package/eventcatalog/src/components/FieldsExplorer/FieldFilters.tsx +24 -28
- package/eventcatalog/src/components/FieldsExplorer/FieldNodeGraph.tsx +16 -11
- package/eventcatalog/src/components/FieldsExplorer/FieldsExplorer.tsx +4 -218
- package/eventcatalog/src/components/FieldsExplorer/FieldsTable.tsx +27 -36
- package/eventcatalog/src/components/Header.astro +43 -58
- package/eventcatalog/src/components/Lists/PillListFlat.styles.css +17 -17
- package/eventcatalog/src/components/MDX/EntityMap/EntityMap.astro +1 -1
- package/eventcatalog/src/components/MDX/Flow/Flow.astro +4 -0
- package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +14 -0
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +49 -18
- package/eventcatalog/src/components/MDX/RemoteFile.astro +2 -24
- package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +59 -93
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +1 -32
- package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +20 -67
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -11
- package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +11 -60
- package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +1 -3
- package/eventcatalog/src/components/SchemaExplorer/SchemaPageViewer.tsx +0 -3
- package/eventcatalog/src/components/SchemaExplorer/VersionHistoryModal.tsx +2 -9
- package/eventcatalog/src/components/SchemaExplorer/parse-schema.ts +46 -0
- package/eventcatalog/src/components/SchemaExplorer/utils.ts +11 -0
- package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +2 -9
- package/eventcatalog/src/components/Settings/LicenseSettings.tsx +288 -0
- package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +3 -19
- package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +85 -30
- package/eventcatalog/src/components/Settings/SettingsShared.tsx +7 -75
- package/eventcatalog/src/components/SideNav/CustomDocsNav.astro +2 -2
- package/eventcatalog/src/components/TrialBadge.astro +82 -0
- package/eventcatalog/src/content.config.ts +9 -96
- package/eventcatalog/src/{enterprise → features}/ai/chat-api.ts +22 -34
- package/eventcatalog/src/{enterprise → features}/analytics/adapters/ga4.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/analytics/adapters/gtm.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/analytics/adapters/posthog.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/analytics/components/AnalyticsHead.astro +2 -4
- package/eventcatalog/src/{enterprise → features}/analytics/components/AnalyticsTracker.astro +2 -4
- package/eventcatalog/src/{enterprise → features}/analytics/tracker.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/api/catalog.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/auth/[...auth].ts +0 -5
- package/eventcatalog/src/{enterprise → features}/auth/middleware/middleware-auth.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/auth/middleware/middleware.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/collections/custom-pages.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/collections/index.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/collections/resource-docs.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/custom-documentation/collection.ts +0 -5
- package/eventcatalog/src/features/custom-documentation/components/CustomDocsNav/CustomDocsNav.astro +9 -0
- package/eventcatalog/src/{enterprise → features}/custom-documentation/components/CustomDocsNav/CustomDocsNavWrapper.tsx +0 -5
- package/eventcatalog/src/{enterprise → features}/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +1 -6
- package/eventcatalog/src/{enterprise → features}/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +0 -5
- package/eventcatalog/src/{enterprise → features}/custom-documentation/components/CustomDocsNav/index.tsx +1 -6
- package/eventcatalog/src/{enterprise → features}/custom-documentation/components/CustomDocsNav/types.ts +0 -5
- package/eventcatalog/src/{enterprise/custom-documentation/pages/docs/custom/index.astro → features/custom-documentation/components/CustomDocumentationPage.astro} +5 -5
- package/eventcatalog/src/{enterprise → features}/custom-documentation/utils/badge-styles.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/custom-documentation/utils/custom-docs.ts +1 -6
- package/eventcatalog/src/{enterprise → features}/custom-documentation/utils/docs-search.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/custom-pages/routes.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/directory/user-team-directory.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/fields/field-extractor.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/fields/field-indexer.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/fields/fields-db.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/fields/pages/api/fields.ts +1 -6
- package/eventcatalog/src/{enterprise → features}/fields/pages/fields.astro +1 -2
- package/eventcatalog/src/{enterprise → features}/integrations/eventcatalog-features.ts +17 -75
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/links.ts +59 -0
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +299 -0
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/shared.ts +14 -0
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/view.tsx +454 -0
- package/eventcatalog/src/features/mcp/apps/generated/viewer.html +432 -0
- package/eventcatalog/src/features/mcp/apps/mermaid-stub.ts +10 -0
- package/eventcatalog/src/features/mcp/apps/schema-viewer/schema-code.tsx +65 -0
- package/eventcatalog/src/features/mcp/apps/schema-viewer/shared.ts +23 -0
- package/eventcatalog/src/features/mcp/apps/schema-viewer/view.tsx +170 -0
- package/eventcatalog/src/features/mcp/apps/shared/app-view.tsx +98 -0
- package/eventcatalog/src/features/mcp/apps/shared/resource-types.ts +15 -0
- package/eventcatalog/src/features/mcp/apps/viewer/shared.ts +24 -0
- package/eventcatalog/src/features/mcp/apps/viewer/styles.css +25 -0
- package/eventcatalog/src/features/mcp/apps/viewer/view.tsx +59 -0
- package/eventcatalog/src/features/mcp/mcp-app-icons.ts +63 -0
- package/eventcatalog/src/features/mcp/mcp-apps.ts +160 -0
- package/eventcatalog/src/{enterprise → features}/mcp/mcp-auth.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/mcp/mcp-scope.ts +7 -7
- package/eventcatalog/src/{enterprise → features}/mcp/mcp-scoped-tools.ts +47 -40
- package/eventcatalog/src/{enterprise → features}/mcp/mcp-server.ts +347 -34
- package/eventcatalog/src/{enterprise → features}/mcp/oauth-protected-resource.ts +0 -5
- package/eventcatalog/src/features/mcp/schema-viewer.ts +24 -0
- package/eventcatalog/src/{enterprise → features}/tools/catalog-tools.ts +133 -102
- package/eventcatalog/src/features/tools/index.ts +5 -0
- package/eventcatalog/src/{enterprise → features}/visualizer-layout/reset.ts +0 -5
- package/eventcatalog/src/{enterprise → features}/visualizer-layout/save.ts +0 -5
- package/eventcatalog/src/layouts/BaseLayout.astro +2 -2
- package/eventcatalog/src/layouts/Footer.astro +31 -39
- package/eventcatalog/src/layouts/SettingsLayout.astro +6 -6
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +7 -37
- package/eventcatalog/src/{enterprise → pages}/api/schemas/[collection]/[id]/[version]/index.ts +0 -22
- package/eventcatalog/src/{enterprise → pages}/api/schemas/services/[id]/[version]/[specification]/index.ts +0 -19
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +2 -6
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -5
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +2 -6
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -5
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId].md.ts +2 -6
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId].mdx.ts +2 -6
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +9 -5
- package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +12 -0
- package/eventcatalog/src/{enterprise/custom-documentation/pages/docs/custom/root-index.astro → pages/docs/custom/index.astro} +1 -23
- package/eventcatalog/src/pages/docs/llm/llms-full.txt.ts +4 -9
- package/eventcatalog/src/pages/docs/llm/llms.txt.ts +4 -4
- package/eventcatalog/src/pages/docs/llm/schemas.txt.ts +0 -11
- package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +2 -2
- package/eventcatalog/src/pages/index.astro +2 -2
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +0 -3
- package/eventcatalog/src/pages/schemas/explorer/index.astro +1 -4
- package/eventcatalog/src/pages/settings/assistant.astro +2 -4
- package/eventcatalog/src/pages/settings/license.astro +18 -0
- package/eventcatalog/src/pages/settings/llm-access.astro +1 -4
- package/eventcatalog/src/pages/settings/mcp.astro +33 -4
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +1 -2
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +2 -45
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -1
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version].mermaid.ts +7 -109
- package/eventcatalog/src/pages/visualiser/_mermaid-route.ts +78 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/_index.data.ts +44 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -1
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +56 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +3 -40
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version].mermaid.ts +20 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/_index.data.ts +29 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +3 -38
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +56 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version].mermaid.ts +20 -0
- package/eventcatalog/src/stores/sidebar-store/builders/agent.ts +1 -1
- package/eventcatalog/src/stores/sidebar-store/builders/container.ts +1 -1
- package/eventcatalog/src/stores/sidebar-store/builders/data-product.ts +1 -1
- package/eventcatalog/src/stores/sidebar-store/builders/domain.ts +7 -32
- package/eventcatalog/src/stores/sidebar-store/builders/entity.ts +1 -1
- package/eventcatalog/src/stores/sidebar-store/builders/message.ts +1 -1
- package/eventcatalog/src/stores/sidebar-store/builders/service.ts +2 -8
- package/eventcatalog/src/stores/sidebar-store/builders/system.ts +2 -12
- package/eventcatalog/src/stores/sidebar-store/custom-sidebar.ts +0 -10
- package/eventcatalog/src/stores/sidebar-store/state.ts +4 -6
- package/eventcatalog/src/styles/theme.css +22 -18
- package/eventcatalog/src/styles/themes/forest.css +8 -8
- package/eventcatalog/src/styles/themes/ocean.css +8 -8
- package/eventcatalog/src/styles/themes/sapphire.css +8 -8
- package/eventcatalog/src/styles/themes/sunset.css +8 -8
- package/eventcatalog/src/utils/clipboard.ts +4 -4
- package/eventcatalog/src/utils/collections/flow-step-schema.ts +117 -0
- package/eventcatalog/src/utils/collections/pointer-schema.ts +7 -0
- package/eventcatalog/src/utils/collections/resource-docs.ts +677 -14
- package/eventcatalog/src/utils/collections/schema-loader.ts +0 -5
- package/eventcatalog/src/utils/feature.ts +14 -23
- package/eventcatalog/src/utils/license.ts +114 -0
- package/eventcatalog/src/utils/node-graphs/architecture-diagram-types.ts +32 -0
- package/eventcatalog/src/utils/node-graphs/architecture-diagram.ts +84 -0
- package/eventcatalog/src/utils/node-graphs/channel-node-graph.ts +4 -25
- package/eventcatalog/src/utils/node-graphs/container-node-graph.ts +12 -39
- package/eventcatalog/src/utils/node-graphs/data-products-node-graph.ts +11 -27
- package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +679 -0
- package/eventcatalog/src/utils/node-graphs/domains-node-graph.ts +3 -20
- package/eventcatalog/src/utils/node-graphs/export-mermaid.ts +51 -4
- package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +8 -23
- package/eventcatalog/src/utils/node-graphs/flow-lanes.ts +119 -0
- package/eventcatalog/src/utils/node-graphs/flows-node-graph.ts +133 -47
- package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +28 -0
- package/eventcatalog/src/utils/node-graphs/layout-persistence.ts +3 -3
- package/eventcatalog/src/utils/node-graphs/message-node-graph.ts +16 -34
- package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +11 -25
- package/eventcatalog/src/utils/node-graphs/system-context-node-graph.ts +18 -54
- package/eventcatalog/src/utils/node-graphs/system-levels-node-graph.ts +59 -0
- package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +20 -80
- package/eventcatalog/src/utils/node-graphs/utils/utils.ts +1 -78
- package/eventcatalog/src/utils/trial.ts +36 -0
- package/eventcatalog/tsconfig.json +1 -1
- package/package.json +11 -11
- package/dist/chunk-FV56YFM4.js +0 -7
- package/dist/federation/entitlement.cjs +0 -31
- package/dist/federation/entitlement.d.cts +0 -12
- package/dist/federation/entitlement.d.ts +0 -12
- package/dist/federation/entitlement.js +0 -6
- package/dist/runtime-dependencies/dagre.mjs +0 -3
- package/eventcatalog/src/components/Settings/BillingSettingsForm.tsx +0 -265
- package/eventcatalog/src/enterprise/LICENSE +0 -57
- package/eventcatalog/src/enterprise/README.md +0 -5
- package/eventcatalog/src/enterprise/collections/resource-docs-utils.ts +0 -691
- package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/CustomDocsNav.astro +0 -9
- package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/[...path]/index.astro +0 -18
- package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/feature.astro +0 -171
- package/eventcatalog/src/enterprise/feature.ts +0 -75
- package/eventcatalog/src/enterprise/tools/index.ts +0 -10
- package/eventcatalog/src/hooks/eventcatalog-visualizer.ts +0 -126
- package/eventcatalog/src/pages/settings/billing.astro +0 -17
- package/eventcatalog/src/pages/visualiser/domain-integrations/index.astro +0 -26
- package/eventcatalog/src/types/mcp-modules.d.ts +0 -67
- package/eventcatalog/src/utils/node-graphs/domains-canvas.ts +0 -261
- package/eventcatalog/src/utils/node-graphs/export-node-graph.ts +0 -91
- /package/eventcatalog/src/{enterprise → features}/auth/error.astro +0 -0
- /package/eventcatalog/src/{enterprise → features}/auth/login.astro +0 -0
- /package/eventcatalog/src/{enterprise → features}/auth/unauthorized.astro +0 -0
- /package/eventcatalog/src/{enterprise/custom-documentation/pages → pages}/docs/custom/[...path]/_index.data.ts +0 -0
- /package/eventcatalog/src/{enterprise/custom-documentation/pages → pages}/docs/custom/[...path].mdx.ts +0 -0
package/eventcatalog/src/{enterprise → features}/analytics/components/AnalyticsTracker.astro
RENAMED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
import config from '@config';
|
|
3
|
-
import { isIntegrationsEnabled } from '@utils/feature';
|
|
4
3
|
|
|
5
4
|
const integrations = config.integrations;
|
|
6
5
|
const cloudAnalytics = config.cloud?.analytics;
|
|
7
|
-
const
|
|
8
|
-
const hasProviders = enabled && (integrations?.ga4 || integrations?.gtm || integrations?.posthog);
|
|
6
|
+
const hasProviders = !!(integrations?.ga4 || integrations?.gtm || integrations?.posthog);
|
|
9
7
|
const debug = integrations?.debug ?? false;
|
|
10
8
|
const isCloudAnalyticsEnabled = cloudAnalytics?.enabled === true && !!cloudAnalytics?.trackingId;
|
|
11
|
-
const shouldRender = isCloudAnalyticsEnabled || (
|
|
9
|
+
const shouldRender = isCloudAnalyticsEnabled || (!!integrations && (hasProviders || debug));
|
|
12
10
|
|
|
13
11
|
const base = (config.base || '/').replace(/\/$/, '');
|
|
14
12
|
const baseJson = JSON.stringify(base);
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import type { MiddlewareHandler } from 'astro';
|
|
7
2
|
import { authMiddleware } from './middleware-auth.ts';
|
|
8
3
|
import { sequence } from 'astro:middleware';
|
package/eventcatalog/src/features/custom-documentation/components/CustomDocsNav/CustomDocsNav.astro
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getNavigationItems } from '@features/custom-documentation/utils/custom-docs';
|
|
3
|
+
import CustomDocsNavWrapper from '@features/custom-documentation/components/CustomDocsNav/CustomDocsNavWrapper';
|
|
4
|
+
|
|
5
|
+
const currentPath = Astro.url.pathname;
|
|
6
|
+
const sidebarItems = await getNavigationItems();
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<CustomDocsNavWrapper client:only sidebarItems={sidebarItems} currentPath={currentPath} />
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import React from 'react';
|
|
7
2
|
import { buildUrl } from '@utils/url-builder';
|
|
8
3
|
import type { SidebarItem } from '../types';
|
|
9
4
|
import { ExternalLinkIcon } from 'lucide-react';
|
|
10
|
-
import { getCustomDocsSidebarBadgeClasses } from '@
|
|
5
|
+
import { getCustomDocsSidebarBadgeClasses } from '@features/custom-documentation/utils/badge-styles';
|
|
11
6
|
|
|
12
7
|
interface NestedItemProps {
|
|
13
8
|
item: SidebarItem;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
|
7
2
|
import { ChevronDoubleDownIcon, ChevronDoubleUpIcon } from '@heroicons/react/24/outline';
|
|
8
3
|
import { buildUrl } from '@utils/url-builder';
|
|
9
4
|
import type { CustomDocsNavProps, SidebarSection, SidebarItem } from './types';
|
|
10
5
|
import NestedItem from './components/NestedItem';
|
|
11
6
|
import NoResultsFound from './components/NoResultsFound';
|
|
12
|
-
import { getCustomDocsSidebarBadgeClasses } from '@
|
|
7
|
+
import { getCustomDocsSidebarBadgeClasses } from '@features/custom-documentation/utils/badge-styles';
|
|
13
8
|
|
|
14
9
|
const STORAGE_KEY = 'EventCatalog:customDocsSidebarCollapsedGroups';
|
|
15
10
|
const DEBOUNCE_DELAY = 300; // 300ms debounce delay
|
|
@@ -11,8 +11,8 @@ import { getOwner } from '@utils/collections/owners';
|
|
|
11
11
|
import { buildUrl, buildEditUrlForResource } from '@utils/url-builder';
|
|
12
12
|
import { resourceToCollectionMap } from '@utils/collections/util';
|
|
13
13
|
import { getMDXComponentsByName, parseMdxBooleanProp } from '@utils/markdown';
|
|
14
|
-
import { getAdjacentPages, getNavigationItems } from '@
|
|
15
|
-
import CustomDocsNav from '@
|
|
14
|
+
import { getAdjacentPages, getNavigationItems } from '@features/custom-documentation/utils/custom-docs';
|
|
15
|
+
import CustomDocsNav from '@features/custom-documentation/components/CustomDocsNav/CustomDocsNav.astro';
|
|
16
16
|
import NodeGraph from '@components/MDX/NodeGraph/NodeGraph.astro';
|
|
17
17
|
import ArchitectureGraph from '@components/MDX/ArchitectureGraph/ArchitectureGraph.astro';
|
|
18
18
|
import CopyAsMarkdown from '@components/CopyAsMarkdown';
|
|
@@ -46,10 +46,10 @@ const resolvedNodeGraphs = await Promise.all(
|
|
|
46
46
|
...nodeGraph,
|
|
47
47
|
collection,
|
|
48
48
|
graphCollection,
|
|
49
|
-
title: nodeGraph.title ?? (hasSystems ? 'System Context
|
|
50
|
-
hrefLabel: hasSystems ? 'Open
|
|
49
|
+
title: nodeGraph.title ?? (hasSystems ? 'System Context Diagram' : undefined),
|
|
50
|
+
hrefLabel: hasSystems ? 'Open Diagram' : 'Open in Visualiser',
|
|
51
51
|
visualiserUrl: hasSystems
|
|
52
|
-
? buildUrl(`/visualiser/domains/${nodeGraph.id}/${nodeGraph.version}
|
|
52
|
+
? buildUrl(`/visualiser/domains/${nodeGraph.id}/${nodeGraph.version}?level=1`)
|
|
53
53
|
: buildUrl(`/visualiser/${collection}/${nodeGraph.id}/${nodeGraph.version}`),
|
|
54
54
|
};
|
|
55
55
|
})
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
type ThemeBadgeType = 'domain' | 'service' | 'event' | 'command' | 'query' | 'design' | 'channel' | 'default';
|
|
7
2
|
|
|
8
3
|
const THEME_BADGE_CLASSES: Record<ThemeBadgeType, string> = {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import config from '@config';
|
|
7
2
|
import fs from 'node:fs';
|
|
8
3
|
import path from 'node:path';
|
|
@@ -12,7 +7,7 @@ import matter from 'gray-matter';
|
|
|
12
7
|
// Use getCollection (which returns plain entries) instead of getEntry, which installs
|
|
13
8
|
// Astro's `slug` deprecation accessor on every entry it returns. The accessor fires a
|
|
14
9
|
// `console.error` on each access of `entry.data.slug`, even though our schema legitimately
|
|
15
|
-
// defines `slug` as an optional user field. See packages/core/eventcatalog/src/
|
|
10
|
+
// defines `slug` as an optional user field. See packages/core/eventcatalog/src/features/collections/custom-pages.ts.
|
|
16
11
|
const getCustomPagesById = async () => {
|
|
17
12
|
const all = await getCollection('customPages');
|
|
18
13
|
const map = new Map<string, (typeof all)[number]>();
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Loader } from 'astro/loaders';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
-
import { isEventCatalogScaleEnabled } from '../feature';
|
|
4
3
|
import { EventCatalogStore } from '../../stores/eventcatalog-store';
|
|
5
4
|
import { globWithSafeWatcher, type GlobOptions } from '../../utils/collections/glob-loader';
|
|
6
5
|
|
|
@@ -71,10 +70,6 @@ export const userTeamDirectoryLoader = ({
|
|
|
71
70
|
return;
|
|
72
71
|
}
|
|
73
72
|
|
|
74
|
-
if (!isEventCatalogScaleEnabled()) {
|
|
75
|
-
throw new Error('Directory sources require EventCatalog Scale.');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
73
|
const loadEntries = collection === 'users' ? 'loadUsers' : 'loadTeams';
|
|
79
74
|
const syncedDirectoryStoreResources = new Map<string, DirectoryStoreResource>();
|
|
80
75
|
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import type { APIRoute } from 'astro';
|
|
7
2
|
import { Hono } from 'hono';
|
|
8
|
-
import { getFieldsDatabase } from '@
|
|
3
|
+
import { getFieldsDatabase } from '@features/fields/fields-db';
|
|
9
4
|
import { getRuntimePaths } from '../../../../../integrations/runtime-paths.mjs';
|
|
10
5
|
|
|
11
6
|
// The CLI builds the index at this same path. Shipping it with dist-only SSR
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import '@eventcatalog/visualiser/styles-core.css';
|
|
4
4
|
import VerticalSideBarLayout from '@layouts/VerticalSideBarLayout.astro';
|
|
5
5
|
import FieldsExplorer from '@components/FieldsExplorer/FieldsExplorer';
|
|
6
|
-
import { isEventCatalogScaleEnabled } from '@utils/feature';
|
|
7
6
|
|
|
8
7
|
export const prerender = false;
|
|
9
8
|
---
|
|
@@ -18,6 +17,6 @@ export const prerender = false;
|
|
|
18
17
|
class="min-h-0 overflow-hidden bg-[rgb(var(--ec-page-bg))]"
|
|
19
18
|
style="--ec-fields-sidebar-width: 320px; margin-left: calc(var(--ec-app-content-padding-left, 5rem) * -1); margin-right: calc(var(--ec-app-content-padding-right, 5rem) * -1); height: calc(100dvh - 60px);"
|
|
20
19
|
>
|
|
21
|
-
<FieldsExplorer client:load
|
|
20
|
+
<FieldsExplorer client:load />
|
|
22
21
|
</main>
|
|
23
22
|
</VerticalSideBarLayout>
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Licensed under the EventCatalog Commercial License.
|
|
3
|
-
* See /packages/core/eventcatalog/src/enterprise/LICENSE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import type { AstroIntegration } from 'astro';
|
|
7
2
|
import fs from 'node:fs';
|
|
8
3
|
import path from 'path';
|
|
@@ -13,14 +8,10 @@ import config from '../../utils/eventcatalog-config/source';
|
|
|
13
8
|
import {
|
|
14
9
|
isEventCatalogChatEnabled,
|
|
15
10
|
isAuthEnabled,
|
|
16
|
-
isEventCatalogScaleEnabled,
|
|
17
11
|
isEventCatalogMCPEnabled,
|
|
18
12
|
isEventCatalogMCPAuthEnabled,
|
|
19
13
|
isFullCatalogAPIEnabled,
|
|
20
14
|
isDevMode,
|
|
21
|
-
isIntegrationsEnabled,
|
|
22
|
-
isCustomDocsEnabled,
|
|
23
|
-
isCustomPagesEnabled,
|
|
24
15
|
isSSR,
|
|
25
16
|
} from '../../utils/feature';
|
|
26
17
|
import { getCustomPageRoutes, isApiRoute, listCustomPageFiles, resolveCustomPagesPrefix } from '../custom-pages/routes';
|
|
@@ -83,25 +74,25 @@ const configureAuthentication = (params: {
|
|
|
83
74
|
}) => {
|
|
84
75
|
params.injectRoute({
|
|
85
76
|
pattern: '/api/[...auth]',
|
|
86
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
77
|
+
entrypoint: path.join(packageDirectory, 'src/features/auth/[...auth].ts'),
|
|
87
78
|
});
|
|
88
79
|
params.injectRoute({
|
|
89
80
|
pattern: '/auth/login',
|
|
90
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
81
|
+
entrypoint: path.join(packageDirectory, 'src/features/auth/login.astro'),
|
|
91
82
|
});
|
|
92
83
|
params.injectRoute({
|
|
93
84
|
pattern: '/auth/error',
|
|
94
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
85
|
+
entrypoint: path.join(packageDirectory, 'src/features/auth/error.astro'),
|
|
95
86
|
});
|
|
96
87
|
|
|
97
88
|
params.injectRoute({
|
|
98
89
|
pattern: '/unauthorized',
|
|
99
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
90
|
+
entrypoint: path.join(packageDirectory, 'src/features/auth/unauthorized.astro'),
|
|
100
91
|
});
|
|
101
92
|
|
|
102
93
|
// Add the authentication middleware
|
|
103
94
|
params.addMiddleware({
|
|
104
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
95
|
+
entrypoint: path.join(packageDirectory, 'src/features/auth/middleware/middleware.ts'),
|
|
105
96
|
order: 'pre',
|
|
106
97
|
});
|
|
107
98
|
};
|
|
@@ -115,26 +106,26 @@ export default function eventCatalogIntegration(): AstroIntegration {
|
|
|
115
106
|
if (isEventCatalogChatEnabled()) {
|
|
116
107
|
params.injectRoute({
|
|
117
108
|
pattern: '/api/chat',
|
|
118
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
109
|
+
entrypoint: path.join(packageDirectory, 'src/features/ai/chat-api.ts'),
|
|
119
110
|
});
|
|
120
111
|
}
|
|
121
112
|
|
|
122
|
-
// Handle routes for MCP Server (requires SSR
|
|
113
|
+
// Handle routes for MCP Server (requires SSR)
|
|
123
114
|
if (isEventCatalogMCPEnabled()) {
|
|
124
115
|
params.injectRoute({
|
|
125
116
|
pattern: '/docs/mcp/[...path]',
|
|
126
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
117
|
+
entrypoint: path.join(packageDirectory, 'src/features/mcp/mcp-server.ts'),
|
|
127
118
|
});
|
|
128
119
|
}
|
|
129
120
|
|
|
130
121
|
if (isEventCatalogMCPAuthEnabled()) {
|
|
131
122
|
params.injectRoute({
|
|
132
123
|
pattern: '/.well-known/oauth-protected-resource',
|
|
133
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
124
|
+
entrypoint: path.join(packageDirectory, 'src/features/mcp/oauth-protected-resource.ts'),
|
|
134
125
|
});
|
|
135
126
|
params.injectRoute({
|
|
136
127
|
pattern: '/.well-known/oauth-protected-resource/[...path]',
|
|
137
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
128
|
+
entrypoint: path.join(packageDirectory, 'src/features/mcp/oauth-protected-resource.ts'),
|
|
138
129
|
});
|
|
139
130
|
}
|
|
140
131
|
|
|
@@ -143,51 +134,11 @@ export default function eventCatalogIntegration(): AstroIntegration {
|
|
|
143
134
|
configureAuthentication(params);
|
|
144
135
|
}
|
|
145
136
|
|
|
146
|
-
// Custom documentation routes (Starter/Scale plan)
|
|
147
|
-
if (isCustomDocsEnabled()) {
|
|
148
|
-
params.injectRoute({
|
|
149
|
-
pattern: '/docs/custom',
|
|
150
|
-
entrypoint: path.join(packageDirectory, 'src/enterprise/custom-documentation/pages/docs/custom/root-index.astro'),
|
|
151
|
-
});
|
|
152
|
-
params.injectRoute({
|
|
153
|
-
pattern: '/docs/custom/[...path]',
|
|
154
|
-
entrypoint: path.join(
|
|
155
|
-
packageDirectory,
|
|
156
|
-
'src/enterprise/custom-documentation/pages/docs/custom/[...path]/index.astro'
|
|
157
|
-
),
|
|
158
|
-
});
|
|
159
|
-
params.injectRoute({
|
|
160
|
-
pattern: '/docs/custom/[...path].mdx',
|
|
161
|
-
entrypoint: path.join(packageDirectory, 'src/enterprise/custom-documentation/pages/docs/custom/[...path].mdx.ts'),
|
|
162
|
-
});
|
|
163
|
-
} else {
|
|
164
|
-
// Show feature page for non-paying users
|
|
165
|
-
params.injectRoute({
|
|
166
|
-
pattern: '/docs/custom',
|
|
167
|
-
entrypoint: path.join(packageDirectory, 'src/enterprise/custom-documentation/pages/docs/custom/feature.astro'),
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Schema API routes (Scale plan)
|
|
172
|
-
if (isEventCatalogScaleEnabled()) {
|
|
173
|
-
params.injectRoute({
|
|
174
|
-
pattern: '/api/schemas/[collection]/[id]/[version]',
|
|
175
|
-
entrypoint: path.join(packageDirectory, 'src/enterprise/api/schemas/[collection]/[id]/[version]/index.ts'),
|
|
176
|
-
});
|
|
177
|
-
params.injectRoute({
|
|
178
|
-
pattern: '/api/schemas/services/[id]/[version]/[specification]',
|
|
179
|
-
entrypoint: path.join(
|
|
180
|
-
packageDirectory,
|
|
181
|
-
'src/enterprise/api/schemas/services/[id]/[version]/[specification]/index.ts'
|
|
182
|
-
),
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
|
|
186
137
|
// Full catalog API route (opt-in)
|
|
187
138
|
if (isFullCatalogAPIEnabled()) {
|
|
188
139
|
params.injectRoute({
|
|
189
140
|
pattern: '/api/catalog',
|
|
190
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
141
|
+
entrypoint: path.join(packageDirectory, 'src/features/api/catalog.ts'),
|
|
191
142
|
});
|
|
192
143
|
}
|
|
193
144
|
|
|
@@ -195,40 +146,31 @@ export default function eventCatalogIntegration(): AstroIntegration {
|
|
|
195
146
|
if (isSSR()) {
|
|
196
147
|
params.injectRoute({
|
|
197
148
|
pattern: '/schemas/fields',
|
|
198
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
149
|
+
entrypoint: path.join(packageDirectory, 'src/features/fields/pages/fields.astro'),
|
|
199
150
|
});
|
|
200
151
|
params.injectRoute({
|
|
201
152
|
pattern: '/api/schemas/fields',
|
|
202
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
153
|
+
entrypoint: path.join(packageDirectory, 'src/features/fields/pages/api/fields.ts'),
|
|
203
154
|
});
|
|
204
155
|
}
|
|
205
156
|
|
|
206
|
-
// User-defined pages and API routes
|
|
207
|
-
|
|
208
|
-
configureCustomPages(params);
|
|
209
|
-
} else if (listCustomPageFiles(customPagesDirectory).length > 0) {
|
|
210
|
-
console.warn('[EventCatalog] Custom pages require the Scale plan. The routes for your pages will not be served.');
|
|
211
|
-
}
|
|
157
|
+
// User-defined pages and API routes
|
|
158
|
+
configureCustomPages(params);
|
|
212
159
|
|
|
213
160
|
// Keep routes in sync during dev — a manifest change restarts the dev
|
|
214
161
|
// server so injectRoute runs again with the new file list
|
|
215
162
|
writeCustomPagesManifest();
|
|
216
163
|
params.addWatchFile(customPagesManifest);
|
|
217
164
|
|
|
218
|
-
// Warn if integrations are configured without Scale plan
|
|
219
|
-
if (config.integrations && !isIntegrationsEnabled()) {
|
|
220
|
-
console.warn('[EventCatalog] Integrations require the Scale plan. Analytics integrations will not be loaded.');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
165
|
// Dev-only routes for visualizer layout persistence
|
|
224
166
|
if (isDevMode()) {
|
|
225
167
|
params.injectRoute({
|
|
226
168
|
pattern: '/api/dev/visualizer-layout/save',
|
|
227
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
169
|
+
entrypoint: path.join(packageDirectory, 'src/features/visualizer-layout/save.ts'),
|
|
228
170
|
});
|
|
229
171
|
params.injectRoute({
|
|
230
172
|
pattern: '/api/dev/visualizer-layout/reset',
|
|
231
|
-
entrypoint: path.join(packageDirectory, 'src/
|
|
173
|
+
entrypoint: path.join(packageDirectory, 'src/features/visualizer-layout/reset.ts'),
|
|
232
174
|
});
|
|
233
175
|
}
|
|
234
176
|
},
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Links in the architecture diagram view. Links to a resource's Diagram page (e.g. "Focus node")
|
|
3
|
+
* open that diagram in the view; other links open EventCatalog in the MCP host.
|
|
4
|
+
*/
|
|
5
|
+
import {
|
|
6
|
+
isArchitectureDiagramCollection,
|
|
7
|
+
type ArchitectureDiagramCollection,
|
|
8
|
+
} from '@utils/node-graphs/architecture-diagram-types';
|
|
9
|
+
|
|
10
|
+
// /visualiser/{collection}/{id}/{version}, after any base path
|
|
11
|
+
const DIAGRAM_PATH = /\/visualiser\/([^/]+)\/([^/]+)\/([^/]+)\/?$/;
|
|
12
|
+
|
|
13
|
+
export type DiagramLink = { collection: ArchitectureDiagramCollection; id: string; version: string };
|
|
14
|
+
|
|
15
|
+
/** The diagram a link opens, if it is a link to a Diagram page in this EventCatalog */
|
|
16
|
+
export function parseDiagramLink(href: string, catalogUrl: string): DiagramLink | undefined {
|
|
17
|
+
let url: URL;
|
|
18
|
+
try {
|
|
19
|
+
url = new URL(href, catalogUrl);
|
|
20
|
+
} catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
if (url.origin !== new URL(catalogUrl).origin) return undefined;
|
|
24
|
+
|
|
25
|
+
const match = url.pathname.match(DIAGRAM_PATH);
|
|
26
|
+
if (!match || !isArchitectureDiagramCollection(match[1])) return undefined;
|
|
27
|
+
|
|
28
|
+
const [, collection, id, version] = match.map((part) => decodeURIComponent(part));
|
|
29
|
+
return { collection: collection as ArchitectureDiagramCollection, id, version };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Links in a node's right-click menu that open the "Ask a question" modal for the node
|
|
33
|
+
const ASK_LINK_PREFIX = '#ec-mcp-ask=';
|
|
34
|
+
|
|
35
|
+
export const askLink = (nodeId: string) => `${ASK_LINK_PREFIX}${encodeURIComponent(nodeId)}`;
|
|
36
|
+
|
|
37
|
+
/** The id of the node to ask about, if the link opens the "Ask a question" modal */
|
|
38
|
+
export const parseAskLink = (href: string) =>
|
|
39
|
+
href.startsWith(ASK_LINK_PREFIX) ? decodeURIComponent(href.slice(ASK_LINK_PREFIX.length)) : undefined;
|
|
40
|
+
|
|
41
|
+
type ContextMenuItem = { label: string; href: string; separator?: boolean; [key: string]: unknown };
|
|
42
|
+
type GraphNode = { id: string; data?: Record<string, any> };
|
|
43
|
+
|
|
44
|
+
/** Nodes with "Ask a question" first in their right-click menu, before the menu they already have */
|
|
45
|
+
export function withAskMenuItem<T extends GraphNode>(nodes: T[]): Array<T & { data: { contextMenu: ContextMenuItem[] } }> {
|
|
46
|
+
return nodes.map((node) => {
|
|
47
|
+
const menu: ContextMenuItem[] = node.data?.contextMenu ?? [];
|
|
48
|
+
return {
|
|
49
|
+
...node,
|
|
50
|
+
data: {
|
|
51
|
+
...node.data,
|
|
52
|
+
contextMenu: [
|
|
53
|
+
{ label: 'Ask a question', href: askLink(node.id) },
|
|
54
|
+
...menu.map((item, index) => (index === 0 ? { ...item, separator: true } : item)),
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|