@eventcatalog/generator-openapi 7.10.0 → 7.11.0
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.js +114 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +114 -3
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +13 -1
- package/dist/types.d.ts +13 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
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.11.0",
|
|
4217
4217
|
description: "OpenAPI generator for EventCatalog",
|
|
4218
4218
|
scripts: {
|
|
4219
4219
|
build: "tsup",
|
|
@@ -4390,6 +4390,65 @@ var mergeSpecifications = (existing, incoming, options) => {
|
|
|
4390
4390
|
return merged;
|
|
4391
4391
|
};
|
|
4392
4392
|
|
|
4393
|
+
// src/utils/consumers.ts
|
|
4394
|
+
var toArray2 = (value) => Array.isArray(value) ? value : [value];
|
|
4395
|
+
var matchesWildcard = (operationPath, pattern) => {
|
|
4396
|
+
const regexStr = "^" + pattern.replace(/\*/g, "[^/]+(/[^/]+)*") + "$";
|
|
4397
|
+
return new RegExp(regexStr).test(operationPath);
|
|
4398
|
+
};
|
|
4399
|
+
var matchesSingleFilter = (operationPath, filter) => {
|
|
4400
|
+
const checks = [];
|
|
4401
|
+
if (filter.path !== void 0) {
|
|
4402
|
+
const paths = toArray2(filter.path);
|
|
4403
|
+
checks.push(paths.some((p) => operationPath === p));
|
|
4404
|
+
}
|
|
4405
|
+
if (filter.prefix !== void 0) {
|
|
4406
|
+
const prefixes = toArray2(filter.prefix);
|
|
4407
|
+
checks.push(prefixes.some((p) => operationPath.startsWith(p)));
|
|
4408
|
+
}
|
|
4409
|
+
if (filter.suffix !== void 0) {
|
|
4410
|
+
const suffixes = toArray2(filter.suffix);
|
|
4411
|
+
checks.push(suffixes.some((s) => operationPath.endsWith(s)));
|
|
4412
|
+
}
|
|
4413
|
+
if (filter.match !== void 0) {
|
|
4414
|
+
const patterns = toArray2(filter.match);
|
|
4415
|
+
checks.push(patterns.some((p) => matchesWildcard(operationPath, p)));
|
|
4416
|
+
}
|
|
4417
|
+
return checks.length > 0 && checks.every(Boolean);
|
|
4418
|
+
};
|
|
4419
|
+
var filterMessagesByRoutes = (allMessages, routes) => {
|
|
4420
|
+
if (!routes || routes.length === 0) {
|
|
4421
|
+
return allMessages.map(({ id, version }) => ({ id, version }));
|
|
4422
|
+
}
|
|
4423
|
+
const matched = /* @__PURE__ */ new Map();
|
|
4424
|
+
for (const message2 of allMessages) {
|
|
4425
|
+
for (const route of routes) {
|
|
4426
|
+
if (matchesSingleFilter(message2.path, route)) {
|
|
4427
|
+
matched.set(message2.id, { id: message2.id, version: message2.version });
|
|
4428
|
+
break;
|
|
4429
|
+
}
|
|
4430
|
+
}
|
|
4431
|
+
}
|
|
4432
|
+
return Array.from(matched.values());
|
|
4433
|
+
};
|
|
4434
|
+
var mergeReceives = (existing, incoming) => {
|
|
4435
|
+
const merged = /* @__PURE__ */ new Map();
|
|
4436
|
+
for (const entry of existing) {
|
|
4437
|
+
merged.set(entry.id, { ...entry });
|
|
4438
|
+
}
|
|
4439
|
+
for (const entry of incoming) {
|
|
4440
|
+
const current = merged.get(entry.id);
|
|
4441
|
+
if (current) {
|
|
4442
|
+
if (current.version !== void 0) {
|
|
4443
|
+
current.version = entry.version;
|
|
4444
|
+
}
|
|
4445
|
+
} else {
|
|
4446
|
+
merged.set(entry.id, { ...entry });
|
|
4447
|
+
}
|
|
4448
|
+
}
|
|
4449
|
+
return Array.from(merged.values());
|
|
4450
|
+
};
|
|
4451
|
+
|
|
4393
4452
|
// src/index.ts
|
|
4394
4453
|
var toUniqueArray = (array) => {
|
|
4395
4454
|
return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
|
|
@@ -4542,7 +4601,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4542
4601
|
await versionService(service.id);
|
|
4543
4602
|
console.log(import_chalk4.default.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
|
|
4544
4603
|
}
|
|
4545
|
-
let { sends, receives } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4604
|
+
let { sends, receives, allGeneratedMessages } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4546
4605
|
...options,
|
|
4547
4606
|
owners: service.setMessageOwnersToServiceOwners ? service.owners : [],
|
|
4548
4607
|
serviceHasMultipleSpecFiles: Array.isArray(serviceSpec.path),
|
|
@@ -4623,6 +4682,52 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4623
4682
|
);
|
|
4624
4683
|
}
|
|
4625
4684
|
console.log(import_chalk4.default.cyan(` - Service (v${version}) created`));
|
|
4685
|
+
const consumers = serviceSpec.consumers || [];
|
|
4686
|
+
for (const consumer of consumers) {
|
|
4687
|
+
const consumerVersion = consumer.version || "1.0.0";
|
|
4688
|
+
const filteredReceives = filterMessagesByRoutes(allGeneratedMessages, consumer.routes);
|
|
4689
|
+
const existingConsumer = await getService(consumer.id, consumerVersion);
|
|
4690
|
+
if (existingConsumer) {
|
|
4691
|
+
const mergedReceives = mergeReceives(existingConsumer.receives || [], filteredReceives);
|
|
4692
|
+
const consumerResource = await getResourcePath(process.env.PROJECT_DIR, consumer.id, consumerVersion);
|
|
4693
|
+
const consumerWritePath = consumerResource ? (0, import_node_path.join)("../", consumerResource.directory) : consumer.id;
|
|
4694
|
+
await writeService(
|
|
4695
|
+
{
|
|
4696
|
+
...existingConsumer,
|
|
4697
|
+
...mergedReceives.length > 0 ? { receives: mergedReceives } : {}
|
|
4698
|
+
},
|
|
4699
|
+
{ path: consumerWritePath, override: true }
|
|
4700
|
+
);
|
|
4701
|
+
} else {
|
|
4702
|
+
let consumerPath = consumer.id;
|
|
4703
|
+
if (options.domain) {
|
|
4704
|
+
const domainResource = await getResourcePath(
|
|
4705
|
+
process.env.PROJECT_DIR,
|
|
4706
|
+
options.domain.id,
|
|
4707
|
+
options.domain.version
|
|
4708
|
+
);
|
|
4709
|
+
if (domainResource) {
|
|
4710
|
+
consumerPath = (0, import_node_path.join)(domainResource.directory, "services", consumer.id);
|
|
4711
|
+
} else {
|
|
4712
|
+
consumerPath = (0, import_node_path.join)("domains", options.domain.id, "services", consumer.id);
|
|
4713
|
+
}
|
|
4714
|
+
}
|
|
4715
|
+
await writeService(
|
|
4716
|
+
{
|
|
4717
|
+
id: consumer.id,
|
|
4718
|
+
version: consumerVersion,
|
|
4719
|
+
name: consumer.id,
|
|
4720
|
+
markdown: "<NodeGraph />",
|
|
4721
|
+
...filteredReceives.length > 0 ? { receives: filteredReceives } : {}
|
|
4722
|
+
},
|
|
4723
|
+
{ path: consumerPath, override: true }
|
|
4724
|
+
);
|
|
4725
|
+
if (options.domain) {
|
|
4726
|
+
await addServiceToDomain(options.domain.id, { id: consumer.id, version: consumerVersion }, options.domain.version);
|
|
4727
|
+
}
|
|
4728
|
+
}
|
|
4729
|
+
console.log(import_chalk4.default.cyan(` - Consumer service: ${consumer.id} (v${consumerVersion}) processed`));
|
|
4730
|
+
}
|
|
4626
4731
|
}
|
|
4627
4732
|
}
|
|
4628
4733
|
};
|
|
@@ -4663,6 +4768,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4663
4768
|
const parseExamples = options.parseExamples ?? true;
|
|
4664
4769
|
const isDraft = options.isDraft ?? null;
|
|
4665
4770
|
let receives = [], sends = [];
|
|
4771
|
+
let allGeneratedMessages = [];
|
|
4666
4772
|
for (const operation of operations) {
|
|
4667
4773
|
const { requestBodiesAndResponses, sidebar, messageName, ...message2 } = await buildMessage(
|
|
4668
4774
|
pathToSpec,
|
|
@@ -4728,6 +4834,11 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4728
4834
|
version: message2.version
|
|
4729
4835
|
});
|
|
4730
4836
|
}
|
|
4837
|
+
allGeneratedMessages.push({
|
|
4838
|
+
id: message2.id,
|
|
4839
|
+
version: message2.version,
|
|
4840
|
+
path: operation.path
|
|
4841
|
+
});
|
|
4731
4842
|
if (requestBodiesAndResponses?.requestBody) {
|
|
4732
4843
|
await addFileToMessage(
|
|
4733
4844
|
message2.id,
|
|
@@ -4783,7 +4894,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4783
4894
|
console.log(import_chalk4.default.yellow(` - Use operationIds to give better unique names for EventCatalog`));
|
|
4784
4895
|
}
|
|
4785
4896
|
}
|
|
4786
|
-
return { receives, sends };
|
|
4897
|
+
return { receives, sends, allGeneratedMessages };
|
|
4787
4898
|
};
|
|
4788
4899
|
var getParsedSpecFile = (service, document2) => {
|
|
4789
4900
|
const specPath = service.path;
|