@eventcatalog/core 3.28.2 → 3.28.3
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/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-O4RPLUS4.js → chunk-JLGWTWR4.js} +1 -1
- package/dist/{chunk-7HW6TPKN.js → chunk-KP324TGM.js} +1 -1
- package/dist/{chunk-5ZS4S6VX.js → chunk-L36OEOCB.js} +1 -1
- package/dist/{chunk-3LXRFH5D.js → chunk-LLC66YM2.js} +1 -1
- package/dist/{chunk-LVGHWP4C.js → chunk-SBZBCN3T.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId].md.ts +75 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId].mdx.ts +75 -0
- package/eventcatalog/src/pages/docs/llm/llms-full.txt.ts +6 -3
- package/eventcatalog/src/pages/docs/llm/llms.txt.ts +34 -1
- package/eventcatalog/src/utils/node-graphs/flows-node-graph.ts +33 -4
- package/package.json +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
log_build_default
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-JLGWTWR4.js";
|
|
4
|
+
import "../chunk-SBZBCN3T.js";
|
|
5
5
|
import "../chunk-4UVFXLPI.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-L36OEOCB.js";
|
|
7
7
|
import "../chunk-5T63CXKU.js";
|
|
8
8
|
export {
|
|
9
9
|
log_build_default as default
|
package/dist/constants.cjs
CHANGED
package/dist/constants.js
CHANGED
package/dist/eventcatalog.cjs
CHANGED
|
@@ -114,7 +114,7 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
|
|
|
114
114
|
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
115
115
|
|
|
116
116
|
// package.json
|
|
117
|
-
var version = "3.28.
|
|
117
|
+
var version = "3.28.3";
|
|
118
118
|
|
|
119
119
|
// src/constants.ts
|
|
120
120
|
var VERSION = version;
|
package/dist/eventcatalog.js
CHANGED
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from "./chunk-PLNJC7NZ.js";
|
|
7
7
|
import {
|
|
8
8
|
log_build_default
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-JLGWTWR4.js";
|
|
10
|
+
import "./chunk-SBZBCN3T.js";
|
|
11
11
|
import "./chunk-4UVFXLPI.js";
|
|
12
12
|
import {
|
|
13
13
|
runMigrations
|
|
@@ -22,13 +22,13 @@ import {
|
|
|
22
22
|
} from "./chunk-3KXCGYET.js";
|
|
23
23
|
import {
|
|
24
24
|
generate
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-KP324TGM.js";
|
|
26
26
|
import {
|
|
27
27
|
logger
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-LLC66YM2.js";
|
|
29
29
|
import {
|
|
30
30
|
VERSION
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-L36OEOCB.js";
|
|
32
32
|
import {
|
|
33
33
|
getEventCatalogConfigFile,
|
|
34
34
|
verifyRequiredFieldsAreInCatalogConfigFile
|
package/dist/generate.cjs
CHANGED
package/dist/generate.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generate
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-KP324TGM.js";
|
|
4
|
+
import "./chunk-LLC66YM2.js";
|
|
5
|
+
import "./chunk-L36OEOCB.js";
|
|
6
6
|
import "./chunk-5T63CXKU.js";
|
|
7
7
|
export {
|
|
8
8
|
generate
|
package/dist/utils/cli-logger.js
CHANGED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Exposes the raw markdown for a resource doc.
|
|
2
|
+
// Example: /docs/services/OrdersService/1.0.0/adrs/01-some-decision.md
|
|
3
|
+
// Used by llms.txt so LLMs can fetch the markdown directly.
|
|
4
|
+
|
|
5
|
+
import type { APIRoute } from 'astro';
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import { isLLMSTxtEnabled, isResourceDocsEnabled, isSSR } from '@utils/feature';
|
|
8
|
+
import { getResourceDocs, getResourceDocsForResource, type ResourceCollection } from '@utils/collections/resource-docs';
|
|
9
|
+
|
|
10
|
+
const supportedResourceCollections = new Set<ResourceCollection>([
|
|
11
|
+
'domains',
|
|
12
|
+
'services',
|
|
13
|
+
'events',
|
|
14
|
+
'commands',
|
|
15
|
+
'queries',
|
|
16
|
+
'flows',
|
|
17
|
+
'containers',
|
|
18
|
+
'channels',
|
|
19
|
+
'entities',
|
|
20
|
+
'data-products',
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
export async function getStaticPaths() {
|
|
24
|
+
if (isSSR() || !isLLMSTxtEnabled() || !isResourceDocsEnabled()) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const docs = await getResourceDocs();
|
|
29
|
+
const latestDocs = docs.filter((doc) => doc.data.version === doc.data.latestVersion);
|
|
30
|
+
|
|
31
|
+
return latestDocs.map((doc) => ({
|
|
32
|
+
params: {
|
|
33
|
+
type: doc.data.resourceCollection,
|
|
34
|
+
id: doc.data.resourceId,
|
|
35
|
+
version: doc.data.resourceVersion,
|
|
36
|
+
docType: doc.data.type,
|
|
37
|
+
docId: doc.data.id,
|
|
38
|
+
},
|
|
39
|
+
props: { filePath: doc.filePath },
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const GET: APIRoute = async ({ params, props }) => {
|
|
44
|
+
if (!isLLMSTxtEnabled()) {
|
|
45
|
+
return new Response('llms.txt is not enabled for this Catalog.', { status: 404 });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!isResourceDocsEnabled()) {
|
|
49
|
+
return new Response('Resource docs are not enabled for this Catalog.', { status: 404 });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let filePath = (props as { filePath?: string } | undefined)?.filePath;
|
|
53
|
+
|
|
54
|
+
if (!filePath && isSSR()) {
|
|
55
|
+
const type = params.type as ResourceCollection | undefined;
|
|
56
|
+
if (!type || !supportedResourceCollections.has(type)) {
|
|
57
|
+
return new Response('Not found', { status: 404 });
|
|
58
|
+
}
|
|
59
|
+
const docsForResource = await getResourceDocsForResource(type, params.id ?? '', params.version ?? '');
|
|
60
|
+
const doc = docsForResource.find(
|
|
61
|
+
(resourceDoc) =>
|
|
62
|
+
resourceDoc.data.type === params.docType &&
|
|
63
|
+
resourceDoc.data.id === params.docId &&
|
|
64
|
+
resourceDoc.data.version === resourceDoc.data.latestVersion
|
|
65
|
+
);
|
|
66
|
+
filePath = doc?.filePath;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!filePath) {
|
|
70
|
+
return new Response('Not found', { status: 404 });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const file = fs.readFileSync(filePath, 'utf8');
|
|
74
|
+
return new Response(file, { status: 200, headers: { 'Content-Type': 'text/markdown; charset=utf-8' } });
|
|
75
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Exposes the raw mdx for a resource doc.
|
|
2
|
+
// Example: /docs/services/OrdersService/1.0.0/adrs/01-some-decision.mdx
|
|
3
|
+
// Used by llms.txt so LLMs can fetch the markdown directly.
|
|
4
|
+
|
|
5
|
+
import type { APIRoute } from 'astro';
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import { isLLMSTxtEnabled, isResourceDocsEnabled, isSSR } from '@utils/feature';
|
|
8
|
+
import { getResourceDocs, getResourceDocsForResource, type ResourceCollection } from '@utils/collections/resource-docs';
|
|
9
|
+
|
|
10
|
+
const supportedResourceCollections = new Set<ResourceCollection>([
|
|
11
|
+
'domains',
|
|
12
|
+
'services',
|
|
13
|
+
'events',
|
|
14
|
+
'commands',
|
|
15
|
+
'queries',
|
|
16
|
+
'flows',
|
|
17
|
+
'containers',
|
|
18
|
+
'channels',
|
|
19
|
+
'entities',
|
|
20
|
+
'data-products',
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
export async function getStaticPaths() {
|
|
24
|
+
if (isSSR() || !isLLMSTxtEnabled() || !isResourceDocsEnabled()) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const docs = await getResourceDocs();
|
|
29
|
+
const latestDocs = docs.filter((doc) => doc.data.version === doc.data.latestVersion);
|
|
30
|
+
|
|
31
|
+
return latestDocs.map((doc) => ({
|
|
32
|
+
params: {
|
|
33
|
+
type: doc.data.resourceCollection,
|
|
34
|
+
id: doc.data.resourceId,
|
|
35
|
+
version: doc.data.resourceVersion,
|
|
36
|
+
docType: doc.data.type,
|
|
37
|
+
docId: doc.data.id,
|
|
38
|
+
},
|
|
39
|
+
props: { filePath: doc.filePath },
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const GET: APIRoute = async ({ params, props }) => {
|
|
44
|
+
if (!isLLMSTxtEnabled()) {
|
|
45
|
+
return new Response('llms.txt is not enabled for this Catalog.', { status: 404 });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!isResourceDocsEnabled()) {
|
|
49
|
+
return new Response('Resource docs are not enabled for this Catalog.', { status: 404 });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let filePath = (props as { filePath?: string } | undefined)?.filePath;
|
|
53
|
+
|
|
54
|
+
if (!filePath && isSSR()) {
|
|
55
|
+
const type = params.type as ResourceCollection | undefined;
|
|
56
|
+
if (!type || !supportedResourceCollections.has(type)) {
|
|
57
|
+
return new Response('Not found', { status: 404 });
|
|
58
|
+
}
|
|
59
|
+
const docsForResource = await getResourceDocsForResource(type, params.id ?? '', params.version ?? '');
|
|
60
|
+
const doc = docsForResource.find(
|
|
61
|
+
(resourceDoc) =>
|
|
62
|
+
resourceDoc.data.type === params.docType &&
|
|
63
|
+
resourceDoc.data.id === params.docId &&
|
|
64
|
+
resourceDoc.data.version === resourceDoc.data.latestVersion
|
|
65
|
+
);
|
|
66
|
+
filePath = doc?.filePath;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!filePath) {
|
|
70
|
+
return new Response('Not found', { status: 404 });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const file = fs.readFileSync(filePath, 'utf8');
|
|
74
|
+
return new Response(file, { status: 200, headers: { 'Content-Type': 'text/markdown; charset=utf-8' } });
|
|
75
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getCollection, type CollectionEntry } from 'astro:content';
|
|
2
2
|
import type { APIRoute } from 'astro';
|
|
3
3
|
import fs from 'fs';
|
|
4
|
-
import { isCustomDocsEnabled } from '@utils/feature';
|
|
4
|
+
import { isCustomDocsEnabled, isResourceDocsEnabled, isLLMSTxtEnabled } from '@utils/feature';
|
|
5
5
|
import { addSchemaToMarkdown } from '@utils/llms';
|
|
6
6
|
|
|
7
7
|
type AllowedCollections =
|
|
@@ -30,8 +30,7 @@ const channels = await getCollection('channels');
|
|
|
30
30
|
const flows = await getCollection('flows');
|
|
31
31
|
const containers = await getCollection('containers');
|
|
32
32
|
const customDocs = await getCollection('customPages');
|
|
33
|
-
|
|
34
|
-
import { isLLMSTxtEnabled } from '@utils/feature';
|
|
33
|
+
const resourceDocs = isResourceDocsEnabled() ? await getCollection('resourceDocs') : [];
|
|
35
34
|
|
|
36
35
|
export const GET: APIRoute = async ({ params, request }) => {
|
|
37
36
|
if (!isLLMSTxtEnabled()) {
|
|
@@ -56,6 +55,10 @@ export const GET: APIRoute = async ({ params, request }) => {
|
|
|
56
55
|
resources.push(...(customDocs as CollectionEntry<AllowedCollections>[]));
|
|
57
56
|
}
|
|
58
57
|
|
|
58
|
+
if (isResourceDocsEnabled()) {
|
|
59
|
+
resources.push(...(resourceDocs as CollectionEntry<AllowedCollections>[]));
|
|
60
|
+
}
|
|
61
|
+
|
|
59
62
|
const content = resources
|
|
60
63
|
.map((item) => {
|
|
61
64
|
if (!item.filePath) return '';
|
|
@@ -2,8 +2,9 @@ import { getCollection } from 'astro:content';
|
|
|
2
2
|
import config from '@config';
|
|
3
3
|
import type { APIRoute } from 'astro';
|
|
4
4
|
|
|
5
|
-
import { isCustomDocsEnabled } from '@utils/feature';
|
|
5
|
+
import { isCustomDocsEnabled, isResourceDocsEnabled } from '@utils/feature';
|
|
6
6
|
import { getUbiquitousLanguage } from '@utils/collections/domains';
|
|
7
|
+
import { getResourceDocs } from '@utils/collections/resource-docs';
|
|
7
8
|
|
|
8
9
|
const events = await getCollection('events');
|
|
9
10
|
const commands = await getCollection('commands');
|
|
@@ -22,6 +23,7 @@ const containers = await getCollection('containers');
|
|
|
22
23
|
const entities = await getCollection('entities');
|
|
23
24
|
|
|
24
25
|
const customDocs = await getCollection('customPages');
|
|
26
|
+
const resourceDocsList = isResourceDocsEnabled() ? await getResourceDocs() : [];
|
|
25
27
|
|
|
26
28
|
const ubiquitousLanguages: Record<string, { id: string; version: string; properties: any }[]> = {};
|
|
27
29
|
|
|
@@ -94,6 +96,36 @@ export const GET: APIRoute = async ({ params, request }) => {
|
|
|
94
96
|
const formatCustomDoc = (item: any, route: string) =>
|
|
95
97
|
`- [${item.data.title}](${baseUrl}/${route}/${item.id.replace('docs\/', '')}.mdx) - ${item.data.summary || ''}`;
|
|
96
98
|
|
|
99
|
+
const formatResourceDoc = (doc: any) => {
|
|
100
|
+
const { resourceCollection, resourceId, resourceVersion, type, id } = doc.data;
|
|
101
|
+
const title = doc.data.title || id || doc.id;
|
|
102
|
+
const docUrl = `${baseUrl}/docs/${resourceCollection}/${resourceId}/${resourceVersion}/${type}/${id}.mdx`;
|
|
103
|
+
return `- [${title}](${docUrl})${doc.data.summary ? ` - ${doc.data.summary}` : ''}`;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const renderResourceDocs = () => {
|
|
107
|
+
const grouped = new Map<string, { resourceCollection: string; resourceId: string; resourceVersion: string; docs: any[] }>();
|
|
108
|
+
|
|
109
|
+
for (const doc of resourceDocsList) {
|
|
110
|
+
const { resourceCollection, resourceId, resourceVersion } = doc.data;
|
|
111
|
+
const key = `${resourceCollection}:${resourceId}:${resourceVersion}`;
|
|
112
|
+
let group = grouped.get(key);
|
|
113
|
+
if (!group) {
|
|
114
|
+
group = { resourceCollection, resourceId, resourceVersion, docs: [] };
|
|
115
|
+
grouped.set(key, group);
|
|
116
|
+
}
|
|
117
|
+
group.docs.push(doc);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return Array.from(grouped.values())
|
|
121
|
+
.map((group) => {
|
|
122
|
+
const parentUrl = `${baseUrl}/docs/${group.resourceCollection}/${group.resourceId}/${group.resourceVersion}.mdx`;
|
|
123
|
+
const heading = `### [${group.resourceId}](${parentUrl}) (${group.resourceCollection})`;
|
|
124
|
+
return [heading, group.docs.map(formatResourceDoc).join('\n')].join('\n');
|
|
125
|
+
})
|
|
126
|
+
.join('\n\n');
|
|
127
|
+
};
|
|
128
|
+
|
|
97
129
|
const content = [
|
|
98
130
|
`# ${config.organizationName} EventCatalog Documentation\n`,
|
|
99
131
|
`> ${config.tagline}\n`,
|
|
@@ -127,6 +159,7 @@ export const GET: APIRoute = async ({ params, request }) => {
|
|
|
127
159
|
...(isCustomDocsEnabled()
|
|
128
160
|
? ['\n## Custom Docs', customDocs.map((item) => formatCustomDoc(item, 'docs/custom')).join('\n')]
|
|
129
161
|
: []),
|
|
162
|
+
...(isResourceDocsEnabled() && resourceDocsList.length > 0 ? ['\n## Resource Docs', renderResourceDocs()] : []),
|
|
130
163
|
].join('\n');
|
|
131
164
|
|
|
132
165
|
return new Response(content, {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { getCollection, type CollectionEntry } from 'astro:content';
|
|
2
2
|
import dagre from 'dagre';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
createDagreGraph,
|
|
5
|
+
calculatedNodes,
|
|
6
|
+
DEFAULT_NODE_WIDTH,
|
|
7
|
+
DEFAULT_NODE_HEIGHT,
|
|
8
|
+
buildContextMenuForResource,
|
|
9
|
+
buildContextMenuForService,
|
|
10
|
+
} from '@utils/node-graphs/utils/utils';
|
|
4
11
|
import { MarkerType } from '@xyflow/react';
|
|
5
12
|
import type { Node as NodeType } from '@xyflow/react';
|
|
6
13
|
import { createVersionedMap, findInMap } from '@utils/collections/util';
|
|
@@ -101,9 +108,31 @@ export const getNodesAndEdges = async ({ id, defaultFlow, version, mode = 'simpl
|
|
|
101
108
|
type: step.type,
|
|
102
109
|
} as NodeType;
|
|
103
110
|
|
|
104
|
-
if (step.service)
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
if (step.service) {
|
|
112
|
+
node.data.service = { ...step.service, ...step.service.data };
|
|
113
|
+
node.data.contextMenu = buildContextMenuForService({
|
|
114
|
+
id: step.service.data.id,
|
|
115
|
+
version: step.service.data.version,
|
|
116
|
+
specifications: step.service.data.specifications,
|
|
117
|
+
repository: step.service.data.repository,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (step.flow) {
|
|
121
|
+
node.data.flow = { ...step.flow, ...step.flow.data };
|
|
122
|
+
node.data.contextMenu = buildContextMenuForResource({
|
|
123
|
+
collection: 'flows',
|
|
124
|
+
id: step.flow.data.id,
|
|
125
|
+
version: step.flow.data.version,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (step.message) {
|
|
129
|
+
node.data.message = { ...step.message, ...step.message.data };
|
|
130
|
+
node.data.contextMenu = buildContextMenuForResource({
|
|
131
|
+
collection: step.message.collection,
|
|
132
|
+
id: step.message.data.id,
|
|
133
|
+
version: step.message.data.version,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
107
136
|
if (step.actor) {
|
|
108
137
|
node.data.actor = { ...step.actor, ...step.actor.data };
|
|
109
138
|
node.data = { ...node.data, ...step.actor };
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"license": "SEE LICENSE IN LICENSE",
|
|
9
9
|
"type": "module",
|
|
10
|
-
"version": "3.28.
|
|
10
|
+
"version": "3.28.3",
|
|
11
11
|
"publishConfig": {
|
|
12
12
|
"access": "public"
|
|
13
13
|
},
|
|
@@ -104,8 +104,8 @@
|
|
|
104
104
|
"uuid": "^10.0.0",
|
|
105
105
|
"zod": "^4.3.6",
|
|
106
106
|
"@eventcatalog/linter": "1.0.21",
|
|
107
|
-
"@eventcatalog/
|
|
108
|
-
"@eventcatalog/
|
|
107
|
+
"@eventcatalog/sdk": "2.20.0",
|
|
108
|
+
"@eventcatalog/visualiser": "^3.18.4"
|
|
109
109
|
},
|
|
110
110
|
"devDependencies": {
|
|
111
111
|
"@astrojs/check": "^0.9.8",
|