@eventcatalog/generator-openapi 7.9.1 → 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 +133 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +133 -9
- 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 +2 -2
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",
|
|
@@ -4250,7 +4250,7 @@ var package_default = {
|
|
|
4250
4250
|
dependencies: {
|
|
4251
4251
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
4252
4252
|
"@changesets/cli": "^2.27.7",
|
|
4253
|
-
"@eventcatalog/sdk": "2.
|
|
4253
|
+
"@eventcatalog/sdk": "^2.18.2",
|
|
4254
4254
|
chalk: "4.1.2",
|
|
4255
4255
|
"js-yaml": "^4.1.0",
|
|
4256
4256
|
"openapi-types": "^12.1.3",
|
|
@@ -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));
|
|
@@ -4431,7 +4490,8 @@ var index_default = async (_, options) => {
|
|
|
4431
4490
|
getService,
|
|
4432
4491
|
versionService,
|
|
4433
4492
|
writeService,
|
|
4434
|
-
addFileToService
|
|
4493
|
+
addFileToService,
|
|
4494
|
+
getResourcePath
|
|
4435
4495
|
} = (0, import_sdk2.default)(process.env.PROJECT_DIR);
|
|
4436
4496
|
const { services = [], saveParsedSpecFile = false } = options;
|
|
4437
4497
|
for (const serviceSpec of services) {
|
|
@@ -4488,10 +4548,6 @@ var index_default = async (_, options) => {
|
|
|
4488
4548
|
// @ts-ignore
|
|
4489
4549
|
isDomainMarkedAsDraft || document2.info?.["x-eventcatalog-draft"] || serviceSpec.draft || null
|
|
4490
4550
|
);
|
|
4491
|
-
let servicePath = options.domain ? (0, import_node_path.join)("../", "domains", options.domain.id, "services", service.id) : (0, import_node_path.join)("../", "services", service.id);
|
|
4492
|
-
if (options.writeFilesToRoot) {
|
|
4493
|
-
servicePath = service.id;
|
|
4494
|
-
}
|
|
4495
4551
|
if (options.domain) {
|
|
4496
4552
|
const { id: domainId, name: domainName, version: domainVersion } = options.domain;
|
|
4497
4553
|
const domain = await getDomain(options.domain.id, domainVersion || "latest");
|
|
@@ -4519,6 +4575,22 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4519
4575
|
}
|
|
4520
4576
|
await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);
|
|
4521
4577
|
}
|
|
4578
|
+
let servicePath = (0, import_node_path.join)("../", "services", service.id);
|
|
4579
|
+
if (options.domain) {
|
|
4580
|
+
const domainResource = await getResourcePath(
|
|
4581
|
+
process.env.PROJECT_DIR,
|
|
4582
|
+
options.domain.id,
|
|
4583
|
+
options.domain.version
|
|
4584
|
+
);
|
|
4585
|
+
if (domainResource) {
|
|
4586
|
+
servicePath = (0, import_node_path.join)("../", domainResource.directory, "services", service.id);
|
|
4587
|
+
} else {
|
|
4588
|
+
servicePath = (0, import_node_path.join)("../", "domains", options.domain.id, "services", service.id);
|
|
4589
|
+
}
|
|
4590
|
+
}
|
|
4591
|
+
if (options.writeFilesToRoot) {
|
|
4592
|
+
servicePath = service.id;
|
|
4593
|
+
}
|
|
4522
4594
|
const latestServiceInCatalog = await getService(service.id, "latest");
|
|
4523
4595
|
const versionTheService = latestServiceInCatalog && isVersionGreaterThan(version, latestServiceInCatalog.version);
|
|
4524
4596
|
console.log(import_chalk4.default.blue(`Processing service: ${document2.info.title} (v${version})`));
|
|
@@ -4529,7 +4601,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4529
4601
|
await versionService(service.id);
|
|
4530
4602
|
console.log(import_chalk4.default.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
|
|
4531
4603
|
}
|
|
4532
|
-
let { sends, receives } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4604
|
+
let { sends, receives, allGeneratedMessages } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4533
4605
|
...options,
|
|
4534
4606
|
owners: service.setMessageOwnersToServiceOwners ? service.owners : [],
|
|
4535
4607
|
serviceHasMultipleSpecFiles: Array.isArray(serviceSpec.path),
|
|
@@ -4610,6 +4682,52 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4610
4682
|
);
|
|
4611
4683
|
}
|
|
4612
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
|
+
}
|
|
4613
4731
|
}
|
|
4614
4732
|
}
|
|
4615
4733
|
};
|
|
@@ -4650,6 +4768,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4650
4768
|
const parseExamples = options.parseExamples ?? true;
|
|
4651
4769
|
const isDraft = options.isDraft ?? null;
|
|
4652
4770
|
let receives = [], sends = [];
|
|
4771
|
+
let allGeneratedMessages = [];
|
|
4653
4772
|
for (const operation of operations) {
|
|
4654
4773
|
const { requestBodiesAndResponses, sidebar, messageName, ...message2 } = await buildMessage(
|
|
4655
4774
|
pathToSpec,
|
|
@@ -4715,6 +4834,11 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4715
4834
|
version: message2.version
|
|
4716
4835
|
});
|
|
4717
4836
|
}
|
|
4837
|
+
allGeneratedMessages.push({
|
|
4838
|
+
id: message2.id,
|
|
4839
|
+
version: message2.version,
|
|
4840
|
+
path: operation.path
|
|
4841
|
+
});
|
|
4718
4842
|
if (requestBodiesAndResponses?.requestBody) {
|
|
4719
4843
|
await addFileToMessage(
|
|
4720
4844
|
message2.id,
|
|
@@ -4770,7 +4894,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4770
4894
|
console.log(import_chalk4.default.yellow(` - Use operationIds to give better unique names for EventCatalog`));
|
|
4771
4895
|
}
|
|
4772
4896
|
}
|
|
4773
|
-
return { receives, sends };
|
|
4897
|
+
return { receives, sends, allGeneratedMessages };
|
|
4774
4898
|
};
|
|
4775
4899
|
var getParsedSpecFile = (service, document2) => {
|
|
4776
4900
|
const specPath = service.path;
|