@eventcatalog/generator-openapi 7.6.5 → 7.7.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
@@ -1594,9 +1594,9 @@ var buildService = (serviceOptions, document2, generateMarkdown) => {
1594
1594
  // src/utils/openapi.ts
1595
1595
  var import_swagger_parser = __toESM(require("@apidevtools/swagger-parser"));
1596
1596
  var DEFAULT_MESSAGE_TYPE = "query";
1597
- async function getSchemasByOperationId(filePath, operationId) {
1597
+ async function getSchemasByOperationId(filePath, operationId, parsedDocument) {
1598
1598
  try {
1599
- const api = await import_swagger_parser.default.dereference(filePath);
1599
+ const api = parsedDocument || await import_swagger_parser.default.dereference(filePath);
1600
1600
  const schemas = {
1601
1601
  parameters: [],
1602
1602
  requestBody: null,
@@ -1617,7 +1617,8 @@ async function getSchemasByOperationId(filePath, operationId) {
1617
1617
  for (const [statusCode, response] of Object.entries(typedOperation.responses)) {
1618
1618
  if (response.content) {
1619
1619
  const contentType = Object.keys(response.content)[0];
1620
- schemas.responses[statusCode] = response.content[contentType].schema || response.content[contentType];
1620
+ const schemaOrContent = response.content[contentType].schema || response.content[contentType];
1621
+ schemas.responses[statusCode] = { ...schemaOrContent };
1621
1622
  schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;
1622
1623
  }
1623
1624
  }
@@ -1645,9 +1646,9 @@ function getDeprecatedValues(openAPIOperation) {
1645
1646
  }
1646
1647
  return deprecated;
1647
1648
  }
1648
- async function getOperationsByType(openApiPath, httpMethodsToMessages) {
1649
+ async function getOperationsByType(openApiPath, httpMethodsToMessages, parsedDocument) {
1649
1650
  try {
1650
- const api = await import_swagger_parser.default.validate(openApiPath);
1651
+ const api = parsedDocument || await import_swagger_parser.default.validate(openApiPath);
1651
1652
  const operations = [];
1652
1653
  for (const path4 in api.paths) {
1653
1654
  const pathItem = api.paths[path4];
@@ -1815,7 +1816,7 @@ var getSummary2 = (message2) => {
1815
1816
  return escapeSpecialCharactersThatBreakMarkdown(eventCatalogMessageSummary);
1816
1817
  };
1817
1818
  var buildMessage = async (pathToFile, document2, operation, generateMarkdown, messageIdConfig, serviceId, serviceVersion) => {
1818
- const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId);
1819
+ const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId, document2);
1819
1820
  const extensions = operation.extensions || {};
1820
1821
  const operationTags = operation.tags.map((badge) => ({
1821
1822
  content: `tag:${badge}`,
@@ -4072,7 +4073,7 @@ var import_node_path = require("path");
4072
4073
  // package.json
4073
4074
  var package_default = {
4074
4075
  name: "@eventcatalog/generator-openapi",
4075
- version: "7.6.5",
4076
+ version: "7.7.0",
4076
4077
  description: "OpenAPI generator for EventCatalog",
4077
4078
  scripts: {
4078
4079
  build: "tsup",
@@ -4185,6 +4186,25 @@ var isVersionLessThan = (version, givenVersion) => {
4185
4186
  var toUniqueArray = (array) => {
4186
4187
  return array.filter((item, index, self) => index === self.findIndex((t) => t.id === item.id && t.version === item.version));
4187
4188
  };
4189
+ var fetchAuthenticatedSpec = async (specUrl, headers) => {
4190
+ const response = await fetch(specUrl, { method: "GET", headers });
4191
+ if (!response.ok) {
4192
+ throw new Error(`Failed to fetch file: ${specUrl}, status: ${response.status}`);
4193
+ }
4194
+ const content = await response.text();
4195
+ const contentType = response.headers.get("content-type") || "";
4196
+ if (contentType.includes("json")) {
4197
+ return JSON.parse(content);
4198
+ }
4199
+ if (contentType.includes("yaml")) {
4200
+ return import_js_yaml.default.load(content);
4201
+ }
4202
+ try {
4203
+ return JSON.parse(content);
4204
+ } catch {
4205
+ return import_js_yaml.default.load(content);
4206
+ }
4207
+ };
4188
4208
  var mergeOpenApiIntoSpecifications = (existingSpecs, openapiFileName) => {
4189
4209
  if (Array.isArray(existingSpecs)) {
4190
4210
  return [...existingSpecs.filter((spec) => spec.type !== "openapi"), { type: "openapi", path: openapiFileName }];
@@ -4218,8 +4238,17 @@ var index_default = async (_, options) => {
4218
4238
  const specFiles = Array.isArray(serviceSpec.path) ? serviceSpec.path : [serviceSpec.path];
4219
4239
  const specs = specFiles.map(async (specFile) => {
4220
4240
  try {
4221
- await import_swagger_parser2.default.validate(specFile);
4222
- const document2 = await import_swagger_parser2.default.dereference(specFile);
4241
+ const isUrl = specFile.startsWith("http");
4242
+ const hasHeaders = serviceSpec.headers && Object.keys(serviceSpec.headers).length > 0;
4243
+ let document2;
4244
+ if (isUrl && hasHeaders) {
4245
+ const parsedSpec = await fetchAuthenticatedSpec(specFile, serviceSpec.headers);
4246
+ await import_swagger_parser2.default.validate(parsedSpec);
4247
+ document2 = await import_swagger_parser2.default.dereference(parsedSpec);
4248
+ } else {
4249
+ await import_swagger_parser2.default.validate(specFile);
4250
+ document2 = await import_swagger_parser2.default.dereference(specFile);
4251
+ }
4223
4252
  return {
4224
4253
  document: document2,
4225
4254
  path: specFile,
@@ -4338,7 +4367,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4338
4367
  // @ts-ignore
4339
4368
  toUniqueArray([...latestServiceInCatalog.receives, ...receives])
4340
4369
  ) : receives;
4341
- console.log("MEOW", "HELLO", latestServiceInCatalog.writesTo, serviceWritesTo);
4342
4370
  serviceWritesTo = latestServiceInCatalog.writesTo ? toUniqueArray([...latestServiceInCatalog.writesTo, ...configuredWritesTo]) : configuredWritesTo;
4343
4371
  serviceReadsFrom = latestServiceInCatalog.readsFrom ? toUniqueArray([...latestServiceInCatalog.readsFrom, ...configuredReadsFrom]) : configuredReadsFrom;
4344
4372
  }
@@ -4386,7 +4414,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4386
4414
  }
4387
4415
  };
4388
4416
  var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, options) => {
4389
- const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages);
4417
+ const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages, document2);
4390
4418
  const sidebarBadgeType = options.sidebarBadgeType || "HTTP_METHOD";
4391
4419
  const version = options.serviceVersion || document2.info.version;
4392
4420
  const preserveExistingMessages = options.preserveExistingMessages ?? true;
@@ -4512,7 +4540,11 @@ var getParsedSpecFile = (service, document2) => {
4512
4540
  var getRawSpecFile = async (service) => {
4513
4541
  const specPath = service.path;
4514
4542
  if (specPath.startsWith("http")) {
4515
- const file = await fetch(specPath, { method: "GET" });
4543
+ const fetchOptions = { method: "GET" };
4544
+ if (service.headers && Object.keys(service.headers).length > 0) {
4545
+ fetchOptions.headers = service.headers;
4546
+ }
4547
+ const file = await fetch(specPath, fetchOptions);
4516
4548
  if (!file.ok) {
4517
4549
  throw new Error(`Failed to fetch file: ${specPath}, status: ${file.status}`);
4518
4550
  }