@eventcatalog/generator-openapi 7.7.1 → 7.8.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.mjs CHANGED
@@ -1528,6 +1528,7 @@ var require_dist2 = __commonJS({
1528
1528
  // src/index.ts
1529
1529
  import utils2 from "@eventcatalog/sdk";
1530
1530
  import { readFile } from "fs/promises";
1531
+ import fs2 from "fs/promises";
1531
1532
  import chalk4 from "chalk";
1532
1533
  import SwaggerParser2 from "@apidevtools/swagger-parser";
1533
1534
 
@@ -1574,9 +1575,7 @@ var buildService = (serviceOptions, document2, generateMarkdown) => {
1574
1575
  name: document2.info.title,
1575
1576
  summary: getSummary(document2),
1576
1577
  schemaPath,
1577
- specifications: {
1578
- openapiPath: schemaPath
1579
- },
1578
+ specifications: [{ type: "openapi", path: schemaPath }],
1580
1579
  markdown: generateMarkdown ? generateMarkdown({ service: serviceOptions, document: document2, markdown: generatedMarkdownForService }) : generatedMarkdownForService,
1581
1580
  badges: documentTags.map((tag2) => ({ content: tag2.name, textColor: "blue", backgroundColor: "blue" })),
1582
1581
  owners: serviceOptions.owners || [],
@@ -1837,6 +1836,17 @@ var buildMessage = async (pathToFile, document2, operation, generateMarkdown, me
1837
1836
  const separator = messageIdConfig.separator || "-";
1838
1837
  uniqueIdentifier = [serviceId, uniqueIdentifier].join(separator);
1839
1838
  }
1839
+ const validOperationMethods = ["GET", "POST", "PUT", "DELETE", "PATCH"];
1840
+ const operationMethod = operation.method.toUpperCase();
1841
+ let operationFrontmatter;
1842
+ if (validOperationMethods.includes(operationMethod)) {
1843
+ const statusCodes = requestBodiesAndResponses?.responses ? Object.keys(requestBodiesAndResponses.responses).filter((code) => code !== "default") : [];
1844
+ operationFrontmatter = {
1845
+ method: operationMethod,
1846
+ path: operation.path,
1847
+ ...statusCodes.length > 0 ? { statusCodes } : {}
1848
+ };
1849
+ }
1840
1850
  return {
1841
1851
  id: extensions["x-eventcatalog-message-id"] || uniqueIdentifier,
1842
1852
  version: messageVersion,
@@ -1851,7 +1861,8 @@ var buildMessage = async (pathToFile, document2, operation, generateMarkdown, me
1851
1861
  },
1852
1862
  messageName,
1853
1863
  ...extensions["x-eventcatalog-draft"] ? { draft: true } : {},
1854
- ...operation.deprecated ? { deprecated: operation.deprecated } : {}
1864
+ ...operation.deprecated ? { deprecated: operation.deprecated } : {},
1865
+ ...operationFrontmatter ? { operation: operationFrontmatter } : {}
1855
1866
  };
1856
1867
  };
1857
1868
 
@@ -2986,27 +2997,95 @@ function ansiRegex({ onlyFirst = false } = {}) {
2986
2997
  return new RegExp(pattern, onlyFirst ? void 0 : "g");
2987
2998
  }
2988
2999
 
2989
- // ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
3000
+ // ../../node_modules/.pnpm/strip-ansi@7.2.0/node_modules/strip-ansi/index.js
2990
3001
  var regex = ansiRegex();
2991
3002
  function stripAnsi(string) {
2992
3003
  if (typeof string !== "string") {
2993
3004
  throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
2994
3005
  }
3006
+ if (!string.includes("\x1B") && !string.includes("\x9B")) {
3007
+ return string;
3008
+ }
2995
3009
  return string.replace(regex, "");
2996
3010
  }
2997
3011
 
2998
- // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
2999
- function isAmbiguous(x) {
3000
- return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
3001
- }
3002
- function isFullWidth(x) {
3003
- return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
3004
- }
3005
- function isWide(x) {
3006
- return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x >= 94192 && x <= 94198 || x >= 94208 && x <= 101589 || x >= 101631 && x <= 101662 || x >= 101760 && x <= 101874 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128728 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129674 || x >= 129678 && x <= 129734 || x === 129736 || x >= 129741 && x <= 129756 || x >= 129759 && x <= 129770 || x >= 129775 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
3012
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup-data.js
3013
+ var ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
3014
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
3015
+ var halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
3016
+ var narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
3017
+ var wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
3018
+
3019
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/utilities.js
3020
+ var isInRange = (ranges, codePoint) => {
3021
+ let low = 0;
3022
+ let high = Math.floor(ranges.length / 2) - 1;
3023
+ while (low <= high) {
3024
+ const mid = Math.floor((low + high) / 2);
3025
+ const i = mid * 2;
3026
+ if (codePoint < ranges[i]) {
3027
+ high = mid - 1;
3028
+ } else if (codePoint > ranges[i + 1]) {
3029
+ low = mid + 1;
3030
+ } else {
3031
+ return true;
3032
+ }
3033
+ }
3034
+ return false;
3035
+ };
3036
+
3037
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup.js
3038
+ var minimumAmbiguousCodePoint = ambiguousRanges[0];
3039
+ var maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
3040
+ var minimumFullWidthCodePoint = fullwidthRanges[0];
3041
+ var maximumFullWidthCodePoint = fullwidthRanges.at(-1);
3042
+ var minimumHalfWidthCodePoint = halfwidthRanges[0];
3043
+ var maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
3044
+ var minimumNarrowCodePoint = narrowRanges[0];
3045
+ var maximumNarrowCodePoint = narrowRanges.at(-1);
3046
+ var minimumWideCodePoint = wideRanges[0];
3047
+ var maximumWideCodePoint = wideRanges.at(-1);
3048
+ var commonCjkCodePoint = 19968;
3049
+ var [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
3050
+ function findWideFastPathRange(ranges) {
3051
+ let fastPathStart = ranges[0];
3052
+ let fastPathEnd = ranges[1];
3053
+ for (let index = 0; index < ranges.length; index += 2) {
3054
+ const start = ranges[index];
3055
+ const end = ranges[index + 1];
3056
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
3057
+ return [start, end];
3058
+ }
3059
+ if (end - start > fastPathEnd - fastPathStart) {
3060
+ fastPathStart = start;
3061
+ fastPathEnd = end;
3062
+ }
3063
+ }
3064
+ return [fastPathStart, fastPathEnd];
3007
3065
  }
3066
+ var isAmbiguous = (codePoint) => {
3067
+ if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
3068
+ return false;
3069
+ }
3070
+ return isInRange(ambiguousRanges, codePoint);
3071
+ };
3072
+ var isFullWidth = (codePoint) => {
3073
+ if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
3074
+ return false;
3075
+ }
3076
+ return isInRange(fullwidthRanges, codePoint);
3077
+ };
3078
+ var isWide = (codePoint) => {
3079
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
3080
+ return true;
3081
+ }
3082
+ if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
3083
+ return false;
3084
+ }
3085
+ return isInRange(wideRanges, codePoint);
3086
+ };
3008
3087
 
3009
- // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
3088
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/index.js
3010
3089
  function validate(codePoint) {
3011
3090
  if (!Number.isSafeInteger(codePoint)) {
3012
3091
  throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
@@ -4068,7 +4147,7 @@ import { join } from "path";
4068
4147
  // package.json
4069
4148
  var package_default = {
4070
4149
  name: "@eventcatalog/generator-openapi",
4071
- version: "7.7.1",
4150
+ version: "7.8.0",
4072
4151
  description: "OpenAPI generator for EventCatalog",
4073
4152
  scripts: {
4074
4153
  build: "tsup",
@@ -4177,6 +4256,74 @@ var isVersionLessThan = (version, givenVersion) => {
4177
4256
  return satisfies(version, `<${givenVersion}`);
4178
4257
  };
4179
4258
 
4259
+ // src/utils/specifications.ts
4260
+ var toArray = (specifications) => {
4261
+ if (!specifications) return [];
4262
+ if (Array.isArray(specifications)) {
4263
+ return specifications.filter((spec) => spec?.type && spec?.path).map((spec) => ({
4264
+ type: spec.type,
4265
+ path: spec.path,
4266
+ ...spec.name ? { name: spec.name } : {},
4267
+ ...spec.headers ? { headers: spec.headers } : {}
4268
+ }));
4269
+ }
4270
+ const output = [];
4271
+ if (specifications.openapiPath) {
4272
+ output.push({ type: "openapi", path: specifications.openapiPath });
4273
+ }
4274
+ if (specifications.asyncapiPath) {
4275
+ output.push({ type: "asyncapi", path: specifications.asyncapiPath });
4276
+ }
4277
+ if (specifications.graphqlPath) {
4278
+ output.push({ type: "graphql", path: specifications.graphqlPath });
4279
+ }
4280
+ return output;
4281
+ };
4282
+ var dedupe = (specifications) => {
4283
+ const unique = /* @__PURE__ */ new Map();
4284
+ for (const spec of specifications) {
4285
+ const key = `${spec.type}:${spec.path}`;
4286
+ if (!unique.has(key)) {
4287
+ unique.set(key, spec);
4288
+ }
4289
+ }
4290
+ return [...unique.values()];
4291
+ };
4292
+ var canUseLegacyFormat = (specifications) => {
4293
+ const countByType = {
4294
+ openapi: 0,
4295
+ asyncapi: 0,
4296
+ graphql: 0
4297
+ };
4298
+ for (const spec of specifications) {
4299
+ countByType[spec.type] += 1;
4300
+ if (spec.name || spec.headers) {
4301
+ return false;
4302
+ }
4303
+ }
4304
+ return Object.values(countByType).every((count) => count <= 1);
4305
+ };
4306
+ var toLegacy = (specifications) => {
4307
+ const legacy = {};
4308
+ for (const spec of specifications) {
4309
+ if (spec.type === "openapi") legacy.openapiPath = spec.path;
4310
+ if (spec.type === "asyncapi") legacy.asyncapiPath = spec.path;
4311
+ if (spec.type === "graphql") legacy.graphqlPath = spec.path;
4312
+ }
4313
+ return legacy;
4314
+ };
4315
+ var mergeSpecifications = (existing, incoming, options) => {
4316
+ const merged = dedupe([...toArray(existing), ...toArray(incoming)]);
4317
+ if (merged.length === 0) return void 0;
4318
+ if (options?.preferArray) {
4319
+ return merged;
4320
+ }
4321
+ if (canUseLegacyFormat(merged)) {
4322
+ return toLegacy(merged);
4323
+ }
4324
+ return merged;
4325
+ };
4326
+
4180
4327
  // src/index.ts
4181
4328
  var toUniqueArray = (array) => {
4182
4329
  return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
@@ -4200,13 +4347,6 @@ var fetchAuthenticatedSpec = async (specUrl, headers) => {
4200
4347
  return yaml.load(content);
4201
4348
  }
4202
4349
  };
4203
- var mergeOpenApiIntoSpecifications = (existingSpecs, openapiFileName) => {
4204
- if (Array.isArray(existingSpecs)) {
4205
- return [...existingSpecs.filter((spec) => spec.type !== "openapi"), { type: "openapi", path: openapiFileName }];
4206
- }
4207
- const { openapiPath: _, ...rest } = existingSpecs || {};
4208
- return { openapiPath: openapiFileName, ...rest };
4209
- };
4210
4350
  var index_default = async (_, options) => {
4211
4351
  if (!process.env.PROJECT_DIR) {
4212
4352
  process.env.PROJECT_DIR = process.cwd();
@@ -4225,8 +4365,7 @@ var index_default = async (_, options) => {
4225
4365
  getService,
4226
4366
  versionService,
4227
4367
  writeService,
4228
- addFileToService,
4229
- getSpecificationFilesForService
4368
+ addFileToService
4230
4369
  } = utils2(process.env.PROJECT_DIR);
4231
4370
  const { services = [], saveParsedSpecFile = false } = options;
4232
4371
  for (const serviceSpec of services) {
@@ -4315,11 +4454,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4315
4454
  await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);
4316
4455
  }
4317
4456
  const latestServiceInCatalog = await getService(service.id, "latest");
4318
- let latestVersionSpecificationFiles = [];
4319
- try {
4320
- latestVersionSpecificationFiles = await getSpecificationFilesForService(service.id, "latest");
4321
- } catch (error) {
4322
- }
4323
4457
  const versionTheService = latestServiceInCatalog && isVersionGreaterThan(version, latestServiceInCatalog.version);
4324
4458
  console.log(chalk4.blue(`Processing service: ${document2.info.title} (v${version})`));
4325
4459
  if (latestServiceInCatalog && isVersionLessThan(version, latestServiceInCatalog.version)) {
@@ -4346,7 +4480,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4346
4480
  const persistPreviousSpecificationFiles = Array.isArray(serviceSpec.path) === false;
4347
4481
  if (latestServiceInCatalog) {
4348
4482
  serviceMarkdown = latestServiceInCatalog.markdown;
4349
- serviceSpecificationsFiles = latestVersionSpecificationFiles;
4483
+ serviceSpecificationsFiles = await getExistingSpecificationFiles(service.id, latestServiceInCatalog.specifications);
4350
4484
  sends = latestServiceInCatalog.sends || [];
4351
4485
  owners = latestServiceInCatalog.owners || [];
4352
4486
  repository = latestServiceInCatalog.repository || null;
@@ -4356,8 +4490,10 @@ Processing domain: ${domainName} (v${domainVersion})`));
4356
4490
  serviceDiagrams = latestServiceInCatalog.diagrams || null;
4357
4491
  serviceWritesTo = latestServiceInCatalog.writesTo || [];
4358
4492
  serviceReadsFrom = latestServiceInCatalog.readsFrom || [];
4359
- if (persistPreviousSpecificationFiles && latestServiceInCatalog.specifications) {
4360
- serviceSpecifications = mergeOpenApiIntoSpecifications(latestServiceInCatalog.specifications, service.schemaPath);
4493
+ if (persistPreviousSpecificationFiles) {
4494
+ serviceSpecifications = mergeSpecifications(latestServiceInCatalog.specifications, serviceSpecifications, {
4495
+ preferArray: true
4496
+ });
4361
4497
  }
4362
4498
  if (latestServiceInCatalog.version === version) {
4363
4499
  receives = latestServiceInCatalog.receives ? (
@@ -4411,6 +4547,35 @@ Processing domain: ${domainName} (v${domainVersion})`));
4411
4547
  }
4412
4548
  }
4413
4549
  };
4550
+ var toSpecificationEntries = (specifications) => {
4551
+ if (!specifications) return [];
4552
+ if (Array.isArray(specifications)) {
4553
+ return specifications.filter((spec) => Boolean(spec?.type && spec?.path));
4554
+ }
4555
+ const entries = [];
4556
+ if (specifications.openapiPath) entries.push({ type: "openapi", path: specifications.openapiPath });
4557
+ if (specifications.asyncapiPath) entries.push({ type: "asyncapi", path: specifications.asyncapiPath });
4558
+ if (specifications.graphqlPath) entries.push({ type: "graphql", path: specifications.graphqlPath });
4559
+ return entries;
4560
+ };
4561
+ var getExistingSpecificationFiles = async (serviceId, specifications) => {
4562
+ const entries = toSpecificationEntries(specifications);
4563
+ const uniqueEntries = entries.filter(
4564
+ (entry, index, all) => all.findIndex((candidate) => candidate.path === entry.path) === index
4565
+ );
4566
+ const files = await Promise.all(
4567
+ uniqueEntries.map(async (entry) => {
4568
+ const filePath = join(process.env.PROJECT_DIR, "services", serviceId, entry.path);
4569
+ try {
4570
+ const content = await fs2.readFile(filePath, "utf8");
4571
+ return { fileName: entry.path, content };
4572
+ } catch (error) {
4573
+ return void 0;
4574
+ }
4575
+ })
4576
+ );
4577
+ return files.filter(Boolean);
4578
+ };
4414
4579
  var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, options) => {
4415
4580
  const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages, document2);
4416
4581
  const sidebarBadgeType = options.sidebarBadgeType || "HTTP_METHOD";