@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.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.11.2",
4211
+ version: "7.12.1",
4212
4212
  description: "OpenAPI generator for EventCatalog",
4213
4213
  scripts: {
4214
4214
  build: "tsup",
@@ -4448,6 +4448,39 @@ var mergeSends = (existing, incoming) => {
4448
4448
  var toUniqueArray = (array) => {
4449
4449
  return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
4450
4450
  };
4451
+ var isSkippableSegment = (segment) => /^(api|v\d+)$/i.test(segment);
4452
+ var getPathPrefix = (path4) => {
4453
+ const segments = path4.split("/").filter(Boolean);
4454
+ const meaningful = segments.filter((s) => !isSkippableSegment(s));
4455
+ return meaningful.find((s) => !s.startsWith("{"));
4456
+ };
4457
+ var buildGroupablePrefixes = (operations) => {
4458
+ const prefixToPaths = /* @__PURE__ */ new Map();
4459
+ for (const op of operations) {
4460
+ const prefix = getPathPrefix(op.path);
4461
+ if (!prefix) continue;
4462
+ if (!prefixToPaths.has(prefix)) prefixToPaths.set(prefix, /* @__PURE__ */ new Set());
4463
+ prefixToPaths.get(prefix).add(op.path);
4464
+ }
4465
+ const groupable = /* @__PURE__ */ new Set();
4466
+ for (const [prefix, paths] of prefixToPaths) {
4467
+ if (paths.size >= 2) groupable.add(prefix);
4468
+ }
4469
+ return groupable;
4470
+ };
4471
+ var getMessageGroup = (operation, groupMessagesBy, groupablePrefixes) => {
4472
+ if (!groupMessagesBy) return void 0;
4473
+ if (groupMessagesBy === "x-extension") {
4474
+ return operation.extensions?.["x-eventcatalog-group"] || void 0;
4475
+ }
4476
+ if (groupMessagesBy === "path-prefix") {
4477
+ const prefix = getPathPrefix(operation.path);
4478
+ if (!prefix) return void 0;
4479
+ if (!groupablePrefixes?.has(prefix)) return void 0;
4480
+ return `/${prefix}`;
4481
+ }
4482
+ return void 0;
4483
+ };
4451
4484
  var fetchAuthenticatedSpec = async (specUrl, headers) => {
4452
4485
  const response = await fetch(specUrl, { method: "GET", headers });
4453
4486
  if (!response.ok) {
@@ -4685,9 +4718,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
4685
4718
  console.log(chalk4.cyan(` - Service (v${version}) created`));
4686
4719
  const consumers = serviceSpec.consumers || [];
4687
4720
  for (const consumer of consumers) {
4688
- const consumerVersion = consumer.version || "1.0.0";
4689
4721
  const filteredSends = filterMessagesByRoutes(allGeneratedMessages, consumer.routes);
4690
- const existingConsumer = await getService(consumer.id, consumerVersion);
4722
+ const existingConsumer = await getService(consumer.id, consumer.version || "latest");
4723
+ const consumerVersion = consumer.version || existingConsumer?.version || "1.0.0";
4691
4724
  if (existingConsumer) {
4692
4725
  const mergedSends = mergeSends(existingConsumer.sends || [], filteredSends);
4693
4726
  const consumerResource = await getResourcePath(process.env.PROJECT_DIR, consumer.id, consumerVersion);
@@ -4768,6 +4801,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
4768
4801
  const preserveExistingMessages = options.preserveExistingMessages ?? true;
4769
4802
  const parseExamples = options.parseExamples ?? true;
4770
4803
  const isDraft = options.isDraft ?? null;
4804
+ const groupablePrefixes = options.groupMessagesBy === "path-prefix" ? buildGroupablePrefixes(operations) : void 0;
4771
4805
  let receives = [], sends = [];
4772
4806
  let allGeneratedMessages = [];
4773
4807
  for (const operation of operations) {
@@ -4824,16 +4858,16 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
4824
4858
  },
4825
4859
  { path: options.pathForMessages || messagePath, override: true }
4826
4860
  );
4861
+ const group = getMessageGroup(operation, options.groupMessagesBy, groupablePrefixes);
4862
+ const pointer = {
4863
+ id: message2.id,
4864
+ version: message2.version,
4865
+ ...group ? { group } : {}
4866
+ };
4827
4867
  if (messageAction === "sends") {
4828
- sends.push({
4829
- id: message2.id,
4830
- version: message2.version
4831
- });
4868
+ sends.push(pointer);
4832
4869
  } else {
4833
- receives.push({
4834
- id: message2.id,
4835
- version: message2.version
4836
- });
4870
+ receives.push(pointer);
4837
4871
  }
4838
4872
  allGeneratedMessages.push({
4839
4873
  id: message2.id,