@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.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.0",
|
|
4212
4212
|
description: "OpenAPI generator for EventCatalog",
|
|
4213
4213
|
scripts: {
|
|
4214
4214
|
build: "tsup",
|
|
@@ -4245,7 +4245,7 @@ var package_default = {
|
|
|
4245
4245
|
dependencies: {
|
|
4246
4246
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
4247
4247
|
"@changesets/cli": "^2.27.7",
|
|
4248
|
-
"@eventcatalog/sdk": "2.
|
|
4248
|
+
"@eventcatalog/sdk": "^2.18.2",
|
|
4249
4249
|
chalk: "4.1.2",
|
|
4250
4250
|
"js-yaml": "^4.1.0",
|
|
4251
4251
|
"openapi-types": "^12.1.3",
|
|
@@ -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 mergeReceives = (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));
|
|
@@ -4426,7 +4485,8 @@ var index_default = async (_, options) => {
|
|
|
4426
4485
|
getService,
|
|
4427
4486
|
versionService,
|
|
4428
4487
|
writeService,
|
|
4429
|
-
addFileToService
|
|
4488
|
+
addFileToService,
|
|
4489
|
+
getResourcePath
|
|
4430
4490
|
} = utils2(process.env.PROJECT_DIR);
|
|
4431
4491
|
const { services = [], saveParsedSpecFile = false } = options;
|
|
4432
4492
|
for (const serviceSpec of services) {
|
|
@@ -4483,10 +4543,6 @@ var index_default = async (_, options) => {
|
|
|
4483
4543
|
// @ts-ignore
|
|
4484
4544
|
isDomainMarkedAsDraft || document2.info?.["x-eventcatalog-draft"] || serviceSpec.draft || null
|
|
4485
4545
|
);
|
|
4486
|
-
let servicePath = options.domain ? join("../", "domains", options.domain.id, "services", service.id) : join("../", "services", service.id);
|
|
4487
|
-
if (options.writeFilesToRoot) {
|
|
4488
|
-
servicePath = service.id;
|
|
4489
|
-
}
|
|
4490
4546
|
if (options.domain) {
|
|
4491
4547
|
const { id: domainId, name: domainName, version: domainVersion } = options.domain;
|
|
4492
4548
|
const domain = await getDomain(options.domain.id, domainVersion || "latest");
|
|
@@ -4514,6 +4570,22 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4514
4570
|
}
|
|
4515
4571
|
await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);
|
|
4516
4572
|
}
|
|
4573
|
+
let servicePath = join("../", "services", service.id);
|
|
4574
|
+
if (options.domain) {
|
|
4575
|
+
const domainResource = await getResourcePath(
|
|
4576
|
+
process.env.PROJECT_DIR,
|
|
4577
|
+
options.domain.id,
|
|
4578
|
+
options.domain.version
|
|
4579
|
+
);
|
|
4580
|
+
if (domainResource) {
|
|
4581
|
+
servicePath = join("../", domainResource.directory, "services", service.id);
|
|
4582
|
+
} else {
|
|
4583
|
+
servicePath = join("../", "domains", options.domain.id, "services", service.id);
|
|
4584
|
+
}
|
|
4585
|
+
}
|
|
4586
|
+
if (options.writeFilesToRoot) {
|
|
4587
|
+
servicePath = service.id;
|
|
4588
|
+
}
|
|
4517
4589
|
const latestServiceInCatalog = await getService(service.id, "latest");
|
|
4518
4590
|
const versionTheService = latestServiceInCatalog && isVersionGreaterThan(version, latestServiceInCatalog.version);
|
|
4519
4591
|
console.log(chalk4.blue(`Processing service: ${document2.info.title} (v${version})`));
|
|
@@ -4524,7 +4596,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4524
4596
|
await versionService(service.id);
|
|
4525
4597
|
console.log(chalk4.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
|
|
4526
4598
|
}
|
|
4527
|
-
let { sends, receives } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4599
|
+
let { sends, receives, allGeneratedMessages } = await processMessagesForOpenAPISpec(specPath, document2, servicePath, {
|
|
4528
4600
|
...options,
|
|
4529
4601
|
owners: service.setMessageOwnersToServiceOwners ? service.owners : [],
|
|
4530
4602
|
serviceHasMultipleSpecFiles: Array.isArray(serviceSpec.path),
|
|
@@ -4605,6 +4677,52 @@ Processing domain: ${domainName} (v${domainVersion})`));
|
|
|
4605
4677
|
);
|
|
4606
4678
|
}
|
|
4607
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 filteredReceives = filterMessagesByRoutes(allGeneratedMessages, consumer.routes);
|
|
4684
|
+
const existingConsumer = await getService(consumer.id, consumerVersion);
|
|
4685
|
+
if (existingConsumer) {
|
|
4686
|
+
const mergedReceives = mergeReceives(existingConsumer.receives || [], filteredReceives);
|
|
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
|
+
...mergedReceives.length > 0 ? { receives: mergedReceives } : {}
|
|
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
|
+
...filteredReceives.length > 0 ? { receives: filteredReceives } : {}
|
|
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
|
+
}
|
|
4608
4726
|
}
|
|
4609
4727
|
}
|
|
4610
4728
|
};
|
|
@@ -4645,6 +4763,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4645
4763
|
const parseExamples = options.parseExamples ?? true;
|
|
4646
4764
|
const isDraft = options.isDraft ?? null;
|
|
4647
4765
|
let receives = [], sends = [];
|
|
4766
|
+
let allGeneratedMessages = [];
|
|
4648
4767
|
for (const operation of operations) {
|
|
4649
4768
|
const { requestBodiesAndResponses, sidebar, messageName, ...message2 } = await buildMessage(
|
|
4650
4769
|
pathToSpec,
|
|
@@ -4710,6 +4829,11 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4710
4829
|
version: message2.version
|
|
4711
4830
|
});
|
|
4712
4831
|
}
|
|
4832
|
+
allGeneratedMessages.push({
|
|
4833
|
+
id: message2.id,
|
|
4834
|
+
version: message2.version,
|
|
4835
|
+
path: operation.path
|
|
4836
|
+
});
|
|
4713
4837
|
if (requestBodiesAndResponses?.requestBody) {
|
|
4714
4838
|
await addFileToMessage(
|
|
4715
4839
|
message2.id,
|
|
@@ -4765,7 +4889,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
|
|
|
4765
4889
|
console.log(chalk4.yellow(` - Use operationIds to give better unique names for EventCatalog`));
|
|
4766
4890
|
}
|
|
4767
4891
|
}
|
|
4768
|
-
return { receives, sends };
|
|
4892
|
+
return { receives, sends, allGeneratedMessages };
|
|
4769
4893
|
};
|
|
4770
4894
|
var getParsedSpecFile = (service, document2) => {
|
|
4771
4895
|
const specPath = service.path;
|