@eventcatalog/generator-openapi 7.11.2 → 7.12.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/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +45 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +45 -11
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -16,6 +16,13 @@ type Props = {
|
|
|
16
16
|
httpMethodsToMessages?: HTTP_METHOD_TO_MESSAGE_TYPE;
|
|
17
17
|
preserveExistingMessages?: boolean;
|
|
18
18
|
parseExamples?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Group messages in the visualiser by a derived value.
|
|
21
|
+
* - `'x-extension'`: Use the `x-eventcatalog-group` extension on each operation.
|
|
22
|
+
* - `'path-prefix'`: Derive the group from the first meaningful URL path segment
|
|
23
|
+
* (skips common prefixes like `api`, `v1`, `v2`).
|
|
24
|
+
*/
|
|
25
|
+
groupMessagesBy?: 'x-extension' | 'path-prefix';
|
|
19
26
|
};
|
|
20
27
|
declare const _default: (_: any, options: Props) => Promise<void>;
|
|
21
28
|
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,13 @@ type Props = {
|
|
|
16
16
|
httpMethodsToMessages?: HTTP_METHOD_TO_MESSAGE_TYPE;
|
|
17
17
|
preserveExistingMessages?: boolean;
|
|
18
18
|
parseExamples?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Group messages in the visualiser by a derived value.
|
|
21
|
+
* - `'x-extension'`: Use the `x-eventcatalog-group` extension on each operation.
|
|
22
|
+
* - `'path-prefix'`: Derive the group from the first meaningful URL path segment
|
|
23
|
+
* (skips common prefixes like `api`, `v1`, `v2`).
|
|
24
|
+
*/
|
|
25
|
+
groupMessagesBy?: 'x-extension' | 'path-prefix';
|
|
19
26
|
};
|
|
20
27
|
declare const _default: (_: any, options: Props) => Promise<void>;
|
|
21
28
|
|
package/dist/index.js
CHANGED
|
@@ -4213,7 +4213,7 @@ var import_node_path = require("path");
|
|
|
4213
4213
|
// package.json
|
|
4214
4214
|
var package_default = {
|
|
4215
4215
|
name: "@eventcatalog/generator-openapi",
|
|
4216
|
-
version: "7.
|
|
4216
|
+
version: "7.12.1",
|
|
4217
4217
|
description: "OpenAPI generator for EventCatalog",
|
|
4218
4218
|
scripts: {
|
|
4219
4219
|
build: "tsup",
|
|
@@ -4453,6 +4453,39 @@ var mergeSends = (existing, incoming) => {
|
|
|
4453
4453
|
var toUniqueArray = (array) => {
|
|
4454
4454
|
return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
|
|
4455
4455
|
};
|
|
4456
|
+
var isSkippableSegment = (segment) => /^(api|v\d+)$/i.test(segment);
|
|
4457
|
+
var getPathPrefix = (path4) => {
|
|
4458
|
+
const segments = path4.split("/").filter(Boolean);
|
|
4459
|
+
const meaningful = segments.filter((s) => !isSkippableSegment(s));
|
|
4460
|
+
return meaningful.find((s) => !s.startsWith("{"));
|
|
4461
|
+
};
|
|
4462
|
+
var buildGroupablePrefixes = (operations) => {
|
|
4463
|
+
const prefixToPaths = /* @__PURE__ */ new Map();
|
|
4464
|
+
for (const op of operations) {
|
|
4465
|
+
const prefix = getPathPrefix(op.path);
|
|
4466
|
+
if (!prefix) continue;
|
|
4467
|
+
if (!prefixToPaths.has(prefix)) prefixToPaths.set(prefix, /* @__PURE__ */ new Set());
|
|
4468
|
+
prefixToPaths.get(prefix).add(op.path);
|
|
4469
|
+
}
|
|
4470
|
+
const groupable = /* @__PURE__ */ new Set();
|
|
4471
|
+
for (const [prefix, paths] of prefixToPaths) {
|
|
4472
|
+
if (paths.size >= 2) groupable.add(prefix);
|
|
4473
|
+
}
|
|
4474
|
+
return groupable;
|
|
4475
|
+
};
|
|
4476
|
+
var getMessageGroup = (operation, groupMessagesBy, groupablePrefixes) => {
|
|
4477
|
+
if (!groupMessagesBy) return void 0;
|
|
4478
|
+
if (groupMessagesBy === "x-extension") {
|
|
4479
|
+
return operation.extensions?.["x-eventcatalog-group"] || void 0;
|
|
4480
|
+
}
|
|
4481
|
+
if (groupMessagesBy === "path-prefix") {
|
|
4482
|
+
const prefix = getPathPrefix(operation.path);
|
|
4483
|
+
if (!prefix) return void 0;
|
|
4484
|
+
if (!groupablePrefixes?.has(prefix)) return void 0;
|
|
4485
|
+
return `/${prefix}`;
|
|
4486
|
+
}
|
|
4487
|
+
return void 0;
|
|
4488
|
+
};
|
|
4456
4489
|
var fetchAuthenticatedSpec = async (specUrl, headers) => {
|
|
4457
4490
|
const response = await fetch(specUrl, { method: "GET", headers });
|
|
4458
4491
|
if (!response.ok) {
|
|
@@ -4690,9 +4723,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4690
4723
|
console.log(import_chalk4.default.cyan(` - Service (v${version}) created`));
|
|
4691
4724
|
const consumers = serviceSpec.consumers || [];
|
|
4692
4725
|
for (const consumer of consumers) {
|
|
4693
|
-
const consumerVersion = consumer.version || "1.0.0";
|
|
4694
4726
|
const filteredSends = filterMessagesByRoutes(allGeneratedMessages, consumer.routes);
|
|
4695
|
-
const existingConsumer = await getService(consumer.id,
|
|
4727
|
+
const existingConsumer = await getService(consumer.id, consumer.version || "latest");
|
|
4728
|
+
const consumerVersion = consumer.version || existingConsumer?.version || "1.0.0";
|
|
4696
4729
|
if (existingConsumer) {
|
|
4697
4730
|
const mergedSends = mergeSends(existingConsumer.sends || [], filteredSends);
|
|
4698
4731
|
const consumerResource = await getResourcePath(process.env.PROJECT_DIR, consumer.id, consumerVersion);
|
|
@@ -4773,6 +4806,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4773
4806
|
const preserveExistingMessages = options.preserveExistingMessages ?? true;
|
|
4774
4807
|
const parseExamples = options.parseExamples ?? true;
|
|
4775
4808
|
const isDraft = options.isDraft ?? null;
|
|
4809
|
+
const groupablePrefixes = options.groupMessagesBy === "path-prefix" ? buildGroupablePrefixes(operations) : void 0;
|
|
4776
4810
|
let receives = [], sends = [];
|
|
4777
4811
|
let allGeneratedMessages = [];
|
|
4778
4812
|
for (const operation of operations) {
|
|
@@ -4829,16 +4863,16 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4829
4863
|
},
|
|
4830
4864
|
{ path: options.pathForMessages || messagePath, override: true }
|
|
4831
4865
|
);
|
|
4866
|
+
const group = getMessageGroup(operation, options.groupMessagesBy, groupablePrefixes);
|
|
4867
|
+
const pointer = {
|
|
4868
|
+
id: message2.id,
|
|
4869
|
+
version: message2.version,
|
|
4870
|
+
...group ? { group } : {}
|
|
4871
|
+
};
|
|
4832
4872
|
if (messageAction === "sends") {
|
|
4833
|
-
sends.push(
|
|
4834
|
-
id: message2.id,
|
|
4835
|
-
version: message2.version
|
|
4836
|
-
});
|
|
4873
|
+
sends.push(pointer);
|
|
4837
4874
|
} else {
|
|
4838
|
-
receives.push(
|
|
4839
|
-
id: message2.id,
|
|
4840
|
-
version: message2.version
|
|
4841
|
-
});
|
|
4875
|
+
receives.push(pointer);
|
|
4842
4876
|
}
|
|
4843
4877
|
allGeneratedMessages.push({
|
|
4844
4878
|
id: message2.id,
|