@eventcatalog/generator-openapi 7.6.5 → 7.7.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.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.1",
4076
4077
  description: "OpenAPI generator for EventCatalog",
4077
4078
  scripts: {
4078
4079
  build: "tsup",
@@ -4109,7 +4110,7 @@ var package_default = {
4109
4110
  dependencies: {
4110
4111
  "@apidevtools/swagger-parser": "^10.1.0",
4111
4112
  "@changesets/cli": "^2.27.7",
4112
- "@eventcatalog/sdk": "^2.9.6",
4113
+ "@eventcatalog/sdk": "2.12.1",
4113
4114
  chalk: "4.1.2",
4114
4115
  "js-yaml": "^4.1.0",
4115
4116
  "openapi-types": "^12.1.3",
@@ -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,
@@ -4316,6 +4345,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4316
4345
  let owners = service.owners || [];
4317
4346
  let repository = null;
4318
4347
  let styles2 = null;
4348
+ let serviceDiagrams = null;
4319
4349
  let serviceWritesTo = configuredWritesTo;
4320
4350
  let serviceReadsFrom = configuredReadsFrom;
4321
4351
  const persistPreviousSpecificationFiles = Array.isArray(serviceSpec.path) === false;
@@ -4328,6 +4358,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4328
4358
  styles2 = latestServiceInCatalog.styles || null;
4329
4359
  serviceBadges = latestServiceInCatalog.badges || null;
4330
4360
  serviceAttachments = latestServiceInCatalog.attachments || null;
4361
+ serviceDiagrams = latestServiceInCatalog.diagrams || null;
4331
4362
  serviceWritesTo = latestServiceInCatalog.writesTo || [];
4332
4363
  serviceReadsFrom = latestServiceInCatalog.readsFrom || [];
4333
4364
  if (persistPreviousSpecificationFiles && latestServiceInCatalog.specifications) {
@@ -4338,7 +4369,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4338
4369
  // @ts-ignore
4339
4370
  toUniqueArray([...latestServiceInCatalog.receives, ...receives])
4340
4371
  ) : receives;
4341
- console.log("MEOW", "HELLO", latestServiceInCatalog.writesTo, serviceWritesTo);
4342
4372
  serviceWritesTo = latestServiceInCatalog.writesTo ? toUniqueArray([...latestServiceInCatalog.writesTo, ...configuredWritesTo]) : configuredWritesTo;
4343
4373
  serviceReadsFrom = latestServiceInCatalog.readsFrom ? toUniqueArray([...latestServiceInCatalog.readsFrom, ...configuredReadsFrom]) : configuredReadsFrom;
4344
4374
  }
@@ -4356,6 +4386,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4356
4386
  ...owners ? { owners } : {},
4357
4387
  ...repository ? { repository } : {},
4358
4388
  ...styles2 ? { styles: styles2 } : {},
4389
+ ...serviceDiagrams ? { diagrams: serviceDiagrams } : {},
4359
4390
  ...isServiceMarkedAsDraft ? { draft: true } : {},
4360
4391
  ...serviceAttachments ? { attachments: serviceAttachments } : {},
4361
4392
  ...serviceWritesTo.length > 0 ? { writesTo: serviceWritesTo } : {},
@@ -4386,7 +4417,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4386
4417
  }
4387
4418
  };
4388
4419
  var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, options) => {
4389
- const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages);
4420
+ const operations = await getOperationsByType(pathToSpec, options.httpMethodsToMessages, document2);
4390
4421
  const sidebarBadgeType = options.sidebarBadgeType || "HTTP_METHOD";
4391
4422
  const version = options.serviceVersion || document2.info.version;
4392
4423
  const preserveExistingMessages = options.preserveExistingMessages ?? true;
@@ -4512,7 +4543,11 @@ var getParsedSpecFile = (service, document2) => {
4512
4543
  var getRawSpecFile = async (service) => {
4513
4544
  const specPath = service.path;
4514
4545
  if (specPath.startsWith("http")) {
4515
- const file = await fetch(specPath, { method: "GET" });
4546
+ const fetchOptions = { method: "GET" };
4547
+ if (service.headers && Object.keys(service.headers).length > 0) {
4548
+ fetchOptions.headers = service.headers;
4549
+ }
4550
+ const file = await fetch(specPath, fetchOptions);
4516
4551
  if (!file.ok) {
4517
4552
  throw new Error(`Failed to fetch file: ${specPath}, status: ${file.status}`);
4518
4553
  }