@eventcatalog/generator-openapi 7.10.0 → 7.11.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 +19 -0
- 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.mjs
CHANGED
|
@@ -4208,7 +4208,7 @@ import { join } from "path";
|
|
|
4208
4208
|
// package.json
|
|
4209
4209
|
var package_default = {
|
|
4210
4210
|
name: "@eventcatalog/generator-openapi",
|
|
4211
|
-
version: "7.
|
|
4211
|
+
version: "7.11.1",
|
|
4212
4212
|
description: "OpenAPI generator for EventCatalog",
|
|
4213
4213
|
scripts: {
|
|
4214
4214
|
build: "tsup",
|
|
@@ -4385,6 +4385,65 @@ var mergeSpecifications = (existing, incoming, options) => {
|
|
|
4385
4385
|
return merged;
|
|
4386
4386
|
};
|
|
4387
4387
|
|
|
4388
|
+
// src/utils/consumers.ts
|
|
4389
|
+
var toArray2 = (value) => Array.isArray(value) ? value : [value];
|
|
4390
|
+
var matchesWildcard = (operationPath, pattern) => {
|
|
4391
|
+
const regexStr = "^" + pattern.replace(/\*/g, "[^/]+(/[^/]+)*") + "$";
|
|
4392
|
+
return new RegExp(regexStr).test(operationPath);
|
|
4393
|
+
};
|
|
4394
|
+
var matchesSingleFilter = (operationPath, filter) => {
|
|
4395
|
+
const checks = [];
|
|
4396
|
+
if (filter.path !== void 0) {
|
|
4397
|
+
const paths = toArray2(filter.path);
|
|
4398
|
+
checks.push(paths.some((p) => operationPath === p));
|
|
4399
|
+
}
|
|
4400
|
+
if (filter.prefix !== void 0) {
|
|
4401
|
+
const prefixes = toArray2(filter.prefix);
|
|
4402
|
+
checks.push(prefixes.some((p) => operationPath.startsWith(p)));
|
|
4403
|
+
}
|
|
4404
|
+
if (filter.suffix !== void 0) {
|
|
4405
|
+
const suffixes = toArray2(filter.suffix);
|
|
4406
|
+
checks.push(suffixes.some((s) => operationPath.endsWith(s)));
|
|
4407
|
+
}
|
|
4408
|
+
if (filter.match !== void 0) {
|
|
4409
|
+
const patterns = toArray2(filter.match);
|
|
4410
|
+
checks.push(patterns.some((p) => matchesWildcard(operationPath, p)));
|
|
4411
|
+
}
|
|
4412
|
+
return checks.length > 0 && checks.every(Boolean);
|
|
4413
|
+
};
|
|
4414
|
+
var filterMessagesByRoutes = (allMessages, routes) => {
|
|
4415
|
+
if (!routes || routes.length === 0) {
|
|
4416
|
+
return allMessages.map(({ id, version }) => ({ id, version }));
|
|
4417
|
+
}
|
|
4418
|
+
const matched = /* @__PURE__ */ new Map();
|
|
4419
|
+
for (const message2 of allMessages) {
|
|
4420
|
+
for (const route of routes) {
|
|
4421
|
+
if (matchesSingleFilter(message2.path, route)) {
|
|
4422
|
+
matched.set(message2.id, { id: message2.id, version: message2.version });
|
|
4423
|
+
break;
|
|
4424
|
+
}
|
|
4425
|
+
}
|
|
4426
|
+
}
|
|
4427
|
+
return Array.from(matched.values());
|
|
4428
|
+
};
|
|
4429
|
+
var mergeSends = (existing, incoming) => {
|
|
4430
|
+
const merged = /* @__PURE__ */ new Map();
|
|
4431
|
+
for (const entry of existing) {
|
|
4432
|
+
merged.set(entry.id, { ...entry });
|
|
4433
|
+
}
|
|
4434
|
+
for (const entry of incoming) {
|
|
4435
|
+
const current = merged.get(entry.id);
|
|
4436
|
+
if (current) {
|
|
4437
|
+
if (current.version !== void 0) {
|
|
4438
|
+
current.version = entry.version;
|
|
4439
|
+
}
|
|
4440
|
+
} else {
|
|
4441
|
+
merged.set(entry.id, { ...entry });
|
|
4442
|
+
}
|
|
4443
|
+
}
|
|
4444
|
+
return Array.from(merged.values());
|
|
4445
|
+
};
|
|
4446
|
+
|
|
4388
4447
|
// src/index.ts
|
|
4389
4448
|
var toUniqueArray = (array) => {
|
|
4390
4449
|
return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
|
|
@@ -4537,7 +4596,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4537
4596
|
await versionService(service.id);
|
|
4538
4597
|
console.log(chalk4.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
|
|
4539
4598
|
}
|
|
4540
|
-
let { sends, receives } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4599
|
+
let { sends, receives, allGeneratedMessages } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4541
4600
|
...options,
|
|
4542
4601
|
owners: service.setMessageOwnersToServiceOwners ? service.owners : [],
|
|
4543
4602
|
serviceHasMultipleSpecFiles: Array.isArray(serviceSpec.path),
|
|
@@ -4618,6 +4677,52 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4618
4677
|
);
|
|
4619
4678
|
}
|
|
4620
4679
|
console.log(chalk4.cyan(` - Service (v${version}) created`));
|
|
4680
|
+
const consumers = serviceSpec.consumers || [];
|
|
4681
|
+
for (const consumer of consumers) {
|
|
4682
|
+
const consumerVersion = consumer.version || "1.0.0";
|
|
4683
|
+
const filteredSends = filterMessagesByRoutes(allGeneratedMessages, consumer.routes);
|
|
4684
|
+
const existingConsumer = await getService(consumer.id, consumerVersion);
|
|
4685
|
+
if (existingConsumer) {
|
|
4686
|
+
const mergedSends = mergeSends(existingConsumer.sends || [], filteredSends);
|
|
4687
|
+
const consumerResource = await getResourcePath(process.env.PROJECT_DIR, consumer.id, consumerVersion);
|
|
4688
|
+
const consumerWritePath = consumerResource ? join("../", consumerResource.directory) : consumer.id;
|
|
4689
|
+
await writeService(
|
|
4690
|
+
{
|
|
4691
|
+
...existingConsumer,
|
|
4692
|
+
...mergedSends.length > 0 ? { sends: mergedSends } : {}
|
|
4693
|
+
},
|
|
4694
|
+
{ path: consumerWritePath, override: true }
|
|
4695
|
+
);
|
|
4696
|
+
} else {
|
|
4697
|
+
let consumerPath = consumer.id;
|
|
4698
|
+
if (options.domain) {
|
|
4699
|
+
const domainResource = await getResourcePath(
|
|
4700
|
+
process.env.PROJECT_DIR,
|
|
4701
|
+
options.domain.id,
|
|
4702
|
+
options.domain.version
|
|
4703
|
+
);
|
|
4704
|
+
if (domainResource) {
|
|
4705
|
+
consumerPath = join("../", domainResource.directory, "services", consumer.id);
|
|
4706
|
+
} else {
|
|
4707
|
+
consumerPath = join("../", "domains", options.domain.id, "services", consumer.id);
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
await writeService(
|
|
4711
|
+
{
|
|
4712
|
+
id: consumer.id,
|
|
4713
|
+
version: consumerVersion,
|
|
4714
|
+
name: consumer.id,
|
|
4715
|
+
markdown: "<NodeGraph />",
|
|
4716
|
+
...filteredSends.length > 0 ? { sends: filteredSends } : {}
|
|
4717
|
+
},
|
|
4718
|
+
{ path: consumerPath, override: true }
|
|
4719
|
+
);
|
|
4720
|
+
if (options.domain) {
|
|
4721
|
+
await addServiceToDomain(options.domain.id, { id: consumer.id, version: consumerVersion }, options.domain.version);
|
|
4722
|
+
}
|
|
4723
|
+
}
|
|
4724
|
+
console.log(chalk4.cyan(` - Consumer service: ${consumer.id} (v${consumerVersion}) processed`));
|
|
4725
|
+
}
|
|
4621
4726
|
}
|
|
4622
4727
|
}
|
|
4623
4728
|
};
|
|
@@ -4658,6 +4763,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4658
4763
|
const parseExamples = options.parseExamples ?? true;
|
|
4659
4764
|
const isDraft = options.isDraft ?? null;
|
|
4660
4765
|
let receives = [], sends = [];
|
|
4766
|
+
let allGeneratedMessages = [];
|
|
4661
4767
|
for (const operation of operations) {
|
|
4662
4768
|
const { requestBodiesAndResponses, sidebar, messageName, ...message2 } = await buildMessage(
|
|
4663
4769
|
pathToSpec,
|
|
@@ -4723,6 +4829,11 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4723
4829
|
version: message2.version
|
|
4724
4830
|
});
|
|
4725
4831
|
}
|
|
4832
|
+
allGeneratedMessages.push({
|
|
4833
|
+
id: message2.id,
|
|
4834
|
+
version: message2.version,
|
|
4835
|
+
path: operation.path
|
|
4836
|
+
});
|
|
4726
4837
|
if (requestBodiesAndResponses?.requestBody) {
|
|
4727
4838
|
await addFileToMessage(
|
|
4728
4839
|
message2.id,
|
|
@@ -4778,7 +4889,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4778
4889
|
console.log(chalk4.yellow(` - Use operationIds to give better unique names for EventCatalog`));
|
|
4779
4890
|
}
|
|
4780
4891
|
}
|
|
4781
|
-
return { receives, sends };
|
|
4892
|
+
return { receives, sends, allGeneratedMessages };
|
|
4782
4893
|
};
|
|
4783
4894
|
var getParsedSpecFile = (service, document2) => {
|
|
4784
4895
|
const specPath = service.path;
|