@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.js CHANGED
@@ -1533,6 +1533,7 @@ __export(index_exports, {
1533
1533
  module.exports = __toCommonJS(index_exports);
1534
1534
  var import_sdk2 = __toESM(require("@eventcatalog/sdk"));
1535
1535
  var import_promises = require("fs/promises");
1536
+ var import_promises2 = __toESM(require("fs/promises"));
1536
1537
  var import_chalk4 = __toESM(require("chalk"));
1537
1538
  var import_swagger_parser2 = __toESM(require("@apidevtools/swagger-parser"));
1538
1539
 
@@ -1579,9 +1580,7 @@ var buildService = (serviceOptions, document2, generateMarkdown) => {
1579
1580
  name: document2.info.title,
1580
1581
  summary: getSummary(document2),
1581
1582
  schemaPath,
1582
- specifications: {
1583
- openapiPath: schemaPath
1584
- },
1583
+ specifications: [{ type: "openapi", path: schemaPath }],
1585
1584
  markdown: generateMarkdown ? generateMarkdown({ service: serviceOptions, document: document2, markdown: generatedMarkdownForService }) : generatedMarkdownForService,
1586
1585
  badges: documentTags.map((tag2) => ({ content: tag2.name, textColor: "blue", backgroundColor: "blue" })),
1587
1586
  owners: serviceOptions.owners || [],
@@ -1842,6 +1841,17 @@ var buildMessage = async (pathToFile, document2, operation, generateMarkdown, me
1842
1841
  const separator = messageIdConfig.separator || "-";
1843
1842
  uniqueIdentifier = [serviceId, uniqueIdentifier].join(separator);
1844
1843
  }
1844
+ const validOperationMethods = ["GET", "POST", "PUT", "DELETE", "PATCH"];
1845
+ const operationMethod = operation.method.toUpperCase();
1846
+ let operationFrontmatter;
1847
+ if (validOperationMethods.includes(operationMethod)) {
1848
+ const statusCodes = requestBodiesAndResponses?.responses ? Object.keys(requestBodiesAndResponses.responses).filter((code) => code !== "default") : [];
1849
+ operationFrontmatter = {
1850
+ method: operationMethod,
1851
+ path: operation.path,
1852
+ ...statusCodes.length > 0 ? { statusCodes } : {}
1853
+ };
1854
+ }
1845
1855
  return {
1846
1856
  id: extensions["x-eventcatalog-message-id"] || uniqueIdentifier,
1847
1857
  version: messageVersion,
@@ -1856,7 +1866,8 @@ var buildMessage = async (pathToFile, document2, operation, generateMarkdown, me
1856
1866
  },
1857
1867
  messageName,
1858
1868
  ...extensions["x-eventcatalog-draft"] ? { draft: true } : {},
1859
- ...operation.deprecated ? { deprecated: operation.deprecated } : {}
1869
+ ...operation.deprecated ? { deprecated: operation.deprecated } : {},
1870
+ ...operationFrontmatter ? { operation: operationFrontmatter } : {}
1860
1871
  };
1861
1872
  };
1862
1873
 
@@ -2991,27 +3002,95 @@ function ansiRegex({ onlyFirst = false } = {}) {
2991
3002
  return new RegExp(pattern, onlyFirst ? void 0 : "g");
2992
3003
  }
2993
3004
 
2994
- // ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
3005
+ // ../../node_modules/.pnpm/strip-ansi@7.2.0/node_modules/strip-ansi/index.js
2995
3006
  var regex = ansiRegex();
2996
3007
  function stripAnsi(string) {
2997
3008
  if (typeof string !== "string") {
2998
3009
  throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
2999
3010
  }
3011
+ if (!string.includes("\x1B") && !string.includes("\x9B")) {
3012
+ return string;
3013
+ }
3000
3014
  return string.replace(regex, "");
3001
3015
  }
3002
3016
 
3003
- // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
3004
- function isAmbiguous(x) {
3005
- 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;
3006
- }
3007
- function isFullWidth(x) {
3008
- return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
3009
- }
3010
- function isWide(x) {
3011
- 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;
3017
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup-data.js
3018
+ 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];
3019
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
3020
+ var halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
3021
+ var narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
3022
+ 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];
3023
+
3024
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/utilities.js
3025
+ var isInRange = (ranges, codePoint) => {
3026
+ let low = 0;
3027
+ let high = Math.floor(ranges.length / 2) - 1;
3028
+ while (low <= high) {
3029
+ const mid = Math.floor((low + high) / 2);
3030
+ const i = mid * 2;
3031
+ if (codePoint < ranges[i]) {
3032
+ high = mid - 1;
3033
+ } else if (codePoint > ranges[i + 1]) {
3034
+ low = mid + 1;
3035
+ } else {
3036
+ return true;
3037
+ }
3038
+ }
3039
+ return false;
3040
+ };
3041
+
3042
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup.js
3043
+ var minimumAmbiguousCodePoint = ambiguousRanges[0];
3044
+ var maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
3045
+ var minimumFullWidthCodePoint = fullwidthRanges[0];
3046
+ var maximumFullWidthCodePoint = fullwidthRanges.at(-1);
3047
+ var minimumHalfWidthCodePoint = halfwidthRanges[0];
3048
+ var maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
3049
+ var minimumNarrowCodePoint = narrowRanges[0];
3050
+ var maximumNarrowCodePoint = narrowRanges.at(-1);
3051
+ var minimumWideCodePoint = wideRanges[0];
3052
+ var maximumWideCodePoint = wideRanges.at(-1);
3053
+ var commonCjkCodePoint = 19968;
3054
+ var [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
3055
+ function findWideFastPathRange(ranges) {
3056
+ let fastPathStart = ranges[0];
3057
+ let fastPathEnd = ranges[1];
3058
+ for (let index = 0; index < ranges.length; index += 2) {
3059
+ const start = ranges[index];
3060
+ const end = ranges[index + 1];
3061
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
3062
+ return [start, end];
3063
+ }
3064
+ if (end - start > fastPathEnd - fastPathStart) {
3065
+ fastPathStart = start;
3066
+ fastPathEnd = end;
3067
+ }
3068
+ }
3069
+ return [fastPathStart, fastPathEnd];
3012
3070
  }
3071
+ var isAmbiguous = (codePoint) => {
3072
+ if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
3073
+ return false;
3074
+ }
3075
+ return isInRange(ambiguousRanges, codePoint);
3076
+ };
3077
+ var isFullWidth = (codePoint) => {
3078
+ if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
3079
+ return false;
3080
+ }
3081
+ return isInRange(fullwidthRanges, codePoint);
3082
+ };
3083
+ var isWide = (codePoint) => {
3084
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
3085
+ return true;
3086
+ }
3087
+ if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
3088
+ return false;
3089
+ }
3090
+ return isInRange(wideRanges, codePoint);
3091
+ };
3013
3092
 
3014
- // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
3093
+ // ../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/index.js
3015
3094
  function validate(codePoint) {
3016
3095
  if (!Number.isSafeInteger(codePoint)) {
3017
3096
  throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
@@ -4073,7 +4152,7 @@ var import_node_path = require("path");
4073
4152
  // package.json
4074
4153
  var package_default = {
4075
4154
  name: "@eventcatalog/generator-openapi",
4076
- version: "7.7.1",
4155
+ version: "7.8.0",
4077
4156
  description: "OpenAPI generator for EventCatalog",
4078
4157
  scripts: {
4079
4158
  build: "tsup",
@@ -4182,6 +4261,74 @@ var isVersionLessThan = (version, givenVersion) => {
4182
4261
  return (0, import_semver.satisfies)(version, `<${givenVersion}`);
4183
4262
  };
4184
4263
 
4264
+ // src/utils/specifications.ts
4265
+ var toArray = (specifications) => {
4266
+ if (!specifications) return [];
4267
+ if (Array.isArray(specifications)) {
4268
+ return specifications.filter((spec) => spec?.type && spec?.path).map((spec) => ({
4269
+ type: spec.type,
4270
+ path: spec.path,
4271
+ ...spec.name ? { name: spec.name } : {},
4272
+ ...spec.headers ? { headers: spec.headers } : {}
4273
+ }));
4274
+ }
4275
+ const output = [];
4276
+ if (specifications.openapiPath) {
4277
+ output.push({ type: "openapi", path: specifications.openapiPath });
4278
+ }
4279
+ if (specifications.asyncapiPath) {
4280
+ output.push({ type: "asyncapi", path: specifications.asyncapiPath });
4281
+ }
4282
+ if (specifications.graphqlPath) {
4283
+ output.push({ type: "graphql", path: specifications.graphqlPath });
4284
+ }
4285
+ return output;
4286
+ };
4287
+ var dedupe = (specifications) => {
4288
+ const unique = /* @__PURE__ */ new Map();
4289
+ for (const spec of specifications) {
4290
+ const key = `${spec.type}:${spec.path}`;
4291
+ if (!unique.has(key)) {
4292
+ unique.set(key, spec);
4293
+ }
4294
+ }
4295
+ return [...unique.values()];
4296
+ };
4297
+ var canUseLegacyFormat = (specifications) => {
4298
+ const countByType = {
4299
+ openapi: 0,
4300
+ asyncapi: 0,
4301
+ graphql: 0
4302
+ };
4303
+ for (const spec of specifications) {
4304
+ countByType[spec.type] += 1;
4305
+ if (spec.name || spec.headers) {
4306
+ return false;
4307
+ }
4308
+ }
4309
+ return Object.values(countByType).every((count) => count <= 1);
4310
+ };
4311
+ var toLegacy = (specifications) => {
4312
+ const legacy = {};
4313
+ for (const spec of specifications) {
4314
+ if (spec.type === "openapi") legacy.openapiPath = spec.path;
4315
+ if (spec.type === "asyncapi") legacy.asyncapiPath = spec.path;
4316
+ if (spec.type === "graphql") legacy.graphqlPath = spec.path;
4317
+ }
4318
+ return legacy;
4319
+ };
4320
+ var mergeSpecifications = (existing, incoming, options) => {
4321
+ const merged = dedupe([...toArray(existing), ...toArray(incoming)]);
4322
+ if (merged.length === 0) return void 0;
4323
+ if (options?.preferArray) {
4324
+ return merged;
4325
+ }
4326
+ if (canUseLegacyFormat(merged)) {
4327
+ return toLegacy(merged);
4328
+ }
4329
+ return merged;
4330
+ };
4331
+
4185
4332
  // src/index.ts
4186
4333
  var toUniqueArray = (array) => {
4187
4334
  return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
@@ -4205,13 +4352,6 @@ var fetchAuthenticatedSpec = async (specUrl, headers) => {
4205
4352
  return import_js_yaml.default.load(content);
4206
4353
  }
4207
4354
  };
4208
- var mergeOpenApiIntoSpecifications = (existingSpecs, openapiFileName) => {
4209
- if (Array.isArray(existingSpecs)) {
4210
- return [...existingSpecs.filter((spec) => spec.type !== "openapi"), { type: "openapi", path: openapiFileName }];
4211
- }
4212
- const { openapiPath: _, ...rest } = existingSpecs || {};
4213
- return { openapiPath: openapiFileName, ...rest };
4214
- };
4215
4355
  var index_default = async (_, options) => {
4216
4356
  if (!process.env.PROJECT_DIR) {
4217
4357
  process.env.PROJECT_DIR = process.cwd();
@@ -4230,8 +4370,7 @@ var index_default = async (_, options) => {
4230
4370
  getService,
4231
4371
  versionService,
4232
4372
  writeService,
4233
- addFileToService,
4234
- getSpecificationFilesForService
4373
+ addFileToService
4235
4374
  } = (0, import_sdk2.default)(process.env.PROJECT_DIR);
4236
4375
  const { services = [], saveParsedSpecFile = false } = options;
4237
4376
  for (const serviceSpec of services) {
@@ -4320,11 +4459,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4320
4459
  await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);
4321
4460
  }
4322
4461
  const latestServiceInCatalog = await getService(service.id, "latest");
4323
- let latestVersionSpecificationFiles = [];
4324
- try {
4325
- latestVersionSpecificationFiles = await getSpecificationFilesForService(service.id, "latest");
4326
- } catch (error) {
4327
- }
4328
4462
  const versionTheService = latestServiceInCatalog && isVersionGreaterThan(version, latestServiceInCatalog.version);
4329
4463
  console.log(import_chalk4.default.blue(`Processing service: ${document2.info.title} (v${version})`));
4330
4464
  if (latestServiceInCatalog && isVersionLessThan(version, latestServiceInCatalog.version)) {
@@ -4351,7 +4485,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4351
4485
  const persistPreviousSpecificationFiles = Array.isArray(serviceSpec.path) === false;
4352
4486
  if (latestServiceInCatalog) {
4353
4487
  serviceMarkdown = latestServiceInCatalog.markdown;
4354
- serviceSpecificationsFiles = latestVersionSpecificationFiles;
4488
+ serviceSpecificationsFiles = await getExistingSpecificationFiles(service.id, latestServiceInCatalog.specifications);
4355
4489
  sends = latestServiceInCatalog.sends || [];
4356
4490
  owners = latestServiceInCatalog.owners || [];
4357
4491
  repository = latestServiceInCatalog.repository || null;
@@ -4361,8 +4495,10 @@ Processing domain: ${domainName} (v${domainVersion})`));
4361
4495
  serviceDiagrams = latestServiceInCatalog.diagrams || null;
4362
4496
  serviceWritesTo = latestServiceInCatalog.writesTo || [];
4363
4497
  serviceReadsFrom = latestServiceInCatalog.readsFrom || [];
4364
- if (persistPreviousSpecificationFiles && latestServiceInCatalog.specifications) {
4365
- serviceSpecifications = mergeOpenApiIntoSpecifications(latestServiceInCatalog.specifications, service.schemaPath);
4498
+ if (persistPreviousSpecificationFiles) {
4499
+ serviceSpecifications = mergeSpecifications(latestServiceInCatalog.specifications, serviceSpecifications, {
4500
+ preferArray: true
4501
+ });
4366
4502
  }
4367
4503
  if (latestServiceInCatalog.version === version) {
4368
4504
  receives = latestServiceInCatalog.receives ? (
@@ -4416,6 +4552,35 @@ Processing domain: ${domainName} (v${domainVersion})`));
4416
4552
  }
4417
4553
  }
4418
4554
  };
4555
+ var toSpecificationEntries = (specifications) => {
4556
+ if (!specifications) return [];
4557
+ if (Array.isArray(specifications)) {
4558
+ return specifications.filter((spec) => Boolean(spec?.type && spec?.path));
4559
+ }
4560
+ const entries = [];
4561
+ if (specifications.openapiPath) entries.push({ type: "openapi", path: specifications.openapiPath });
4562
+ if (specifications.asyncapiPath) entries.push({ type: "asyncapi", path: specifications.asyncapiPath });
4563
+ if (specifications.graphqlPath) entries.push({ type: "graphql", path: specifications.graphqlPath });
4564
+ return entries;
4565
+ };
4566
+ var getExistingSpecificationFiles = async (serviceId, specifications) => {
4567
+ const entries = toSpecificationEntries(specifications);
4568
+ const uniqueEntries = entries.filter(
4569
+ (entry, index, all) => all.findIndex((candidate) => candidate.path === entry.path) === index
4570
+ );
4571
+ const files = await Promise.all(
4572
+ uniqueEntries.map(async (entry) => {
4573
+ const filePath = (0, import_node_path.join)(process.env.PROJECT_DIR, "services", serviceId, entry.path);
4574
+ try {
4575
+ const content = await import_promises2.default.readFile(filePath, "utf8");
4576
+ return { fileName: entry.path, content };
4577
+ } catch (error) {
4578
+ return void 0;
4579
+ }
4580
+ })
4581
+ );
4582
+ return files.filter(Boolean);
4583
+ };
4419
4584
  var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, options) => {
4420
4585
  const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages, document2);
4421
4586
  const sidebarBadgeType = options.sidebarBadgeType || "HTTP_METHOD";