@eventcatalog/generator-openapi 7.8.0 → 7.9.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
@@ -1605,15 +1605,19 @@ async function getSchemasByOperationId(filePath, operationId, parsedDocument) {
1605
1605
  }
1606
1606
  if (typedOperation.requestBody && typedOperation.requestBody.content) {
1607
1607
  const contentType = Object.keys(typedOperation.requestBody.content)[0];
1608
- schemas.requestBody = typedOperation.requestBody.content[contentType].schema;
1608
+ if (contentType) {
1609
+ schemas.requestBody = typedOperation.requestBody.content[contentType].schema;
1610
+ }
1609
1611
  }
1610
1612
  if (typedOperation.responses) {
1611
1613
  for (const [statusCode, response] of Object.entries(typedOperation.responses)) {
1612
1614
  if (response.content) {
1613
1615
  const contentType = Object.keys(response.content)[0];
1614
- const schemaOrContent = response.content[contentType].schema || response.content[contentType];
1615
- schemas.responses[statusCode] = { ...schemaOrContent };
1616
- schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;
1616
+ if (contentType) {
1617
+ const schemaOrContent = response.content[contentType].schema || response.content[contentType];
1618
+ schemas.responses[statusCode] = { ...schemaOrContent };
1619
+ schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;
1620
+ }
1617
1621
  }
1618
1622
  }
1619
1623
  }
@@ -1627,6 +1631,57 @@ async function getSchemasByOperationId(filePath, operationId, parsedDocument) {
1627
1631
  return;
1628
1632
  }
1629
1633
  }
1634
+ async function getExamplesByOperationId(filePath, operationId, parsedDocument) {
1635
+ const api = parsedDocument || await SwaggerParser.dereference(filePath);
1636
+ const examples = [];
1637
+ for (const [, pathItem] of Object.entries(api.paths)) {
1638
+ for (const [, operation] of Object.entries(pathItem)) {
1639
+ const typedOperation = operation;
1640
+ if (typedOperation.operationId !== operationId) continue;
1641
+ if (typedOperation.requestBody?.content) {
1642
+ const contentType = Object.keys(typedOperation.requestBody.content)[0];
1643
+ if (contentType) {
1644
+ const mediaType = typedOperation.requestBody.content[contentType];
1645
+ if (mediaType.example) {
1646
+ examples.push({ fileName: "example.json", content: JSON.stringify(mediaType.example, null, 2) });
1647
+ }
1648
+ if (mediaType.examples) {
1649
+ for (const [name, exampleObj] of Object.entries(mediaType.examples)) {
1650
+ if (exampleObj.value) {
1651
+ examples.push({ fileName: `${name}.json`, content: JSON.stringify(exampleObj.value, null, 2) });
1652
+ }
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+ if (typedOperation.responses) {
1658
+ for (const [statusCode, response] of Object.entries(typedOperation.responses)) {
1659
+ if (response.content) {
1660
+ const contentType = Object.keys(response.content)[0];
1661
+ if (contentType) {
1662
+ const mediaType = response.content[contentType];
1663
+ if (mediaType.example) {
1664
+ examples.push({ fileName: `response-${statusCode}.json`, content: JSON.stringify(mediaType.example, null, 2) });
1665
+ }
1666
+ if (mediaType.examples) {
1667
+ for (const [name, exampleObj] of Object.entries(mediaType.examples)) {
1668
+ if (exampleObj.value) {
1669
+ examples.push({
1670
+ fileName: `response-${statusCode}-${name}.json`,
1671
+ content: JSON.stringify(exampleObj.value, null, 2)
1672
+ });
1673
+ }
1674
+ }
1675
+ }
1676
+ }
1677
+ }
1678
+ }
1679
+ }
1680
+ return examples;
1681
+ }
1682
+ }
1683
+ return examples;
1684
+ }
1630
1685
  function getDeprecatedValues(openAPIOperation) {
1631
1686
  const deprecatedDate = openAPIOperation["x-eventcatalog-deprecated-date"] || null;
1632
1687
  const deprecatedMessage = openAPIOperation["x-eventcatalog-deprecated-message"] || null;
@@ -1884,7 +1939,10 @@ var getMessageTypeUtils = (projectDirectory, messageType) => {
1884
1939
  getQuery,
1885
1940
  rmQueryById,
1886
1941
  writeQuery,
1887
- addFileToQuery
1942
+ addFileToQuery,
1943
+ addExampleToEvent,
1944
+ addExampleToCommand,
1945
+ addExampleToQuery
1888
1946
  } = utils(projectDirectory);
1889
1947
  const messageTypeMap = {
1890
1948
  event: {
@@ -1893,6 +1951,7 @@ var getMessageTypeUtils = (projectDirectory, messageType) => {
1893
1951
  rmMessageById: rmEventById,
1894
1952
  writeMessage: writeEvent,
1895
1953
  addFileToMessage: addFileToEvent,
1954
+ addExampleToMessage: addExampleToEvent,
1896
1955
  collection: "events"
1897
1956
  },
1898
1957
  command: {
@@ -1901,6 +1960,7 @@ var getMessageTypeUtils = (projectDirectory, messageType) => {
1901
1960
  rmMessageById: rmCommandById,
1902
1961
  writeMessage: writeCommand,
1903
1962
  addFileToMessage: addFileToCommand,
1963
+ addExampleToMessage: addExampleToCommand,
1904
1964
  collection: "commands"
1905
1965
  },
1906
1966
  query: {
@@ -1909,6 +1969,7 @@ var getMessageTypeUtils = (projectDirectory, messageType) => {
1909
1969
  rmMessageById: rmQueryById,
1910
1970
  writeMessage: writeQuery,
1911
1971
  addFileToMessage: addFileToQuery,
1972
+ addExampleToMessage: addExampleToQuery,
1912
1973
  collection: "queries"
1913
1974
  }
1914
1975
  };
@@ -4147,7 +4208,7 @@ import { join } from "path";
4147
4208
  // package.json
4148
4209
  var package_default = {
4149
4210
  name: "@eventcatalog/generator-openapi",
4150
- version: "7.8.0",
4211
+ version: "7.9.1",
4151
4212
  description: "OpenAPI generator for EventCatalog",
4152
4213
  scripts: {
4153
4214
  build: "tsup",
@@ -4184,7 +4245,7 @@ var package_default = {
4184
4245
  dependencies: {
4185
4246
  "@apidevtools/swagger-parser": "^10.1.0",
4186
4247
  "@changesets/cli": "^2.27.7",
4187
- "@eventcatalog/sdk": "2.12.1",
4248
+ "@eventcatalog/sdk": "2.17.4",
4188
4249
  chalk: "4.1.2",
4189
4250
  "js-yaml": "^4.1.0",
4190
4251
  "openapi-types": "^12.1.3",
@@ -4581,6 +4642,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
4581
4642
  const sidebarBadgeType = options.sidebarBadgeType || "HTTP_METHOD";
4582
4643
  const version = options.serviceVersion || document2.info.version;
4583
4644
  const preserveExistingMessages = options.preserveExistingMessages ?? true;
4645
+ const parseExamples = options.parseExamples ?? true;
4584
4646
  const isDraft = options.isDraft ?? null;
4585
4647
  let receives = [], sends = [];
4586
4648
  for (const operation of operations) {
@@ -4601,6 +4663,7 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
4601
4663
  console.log(chalk4.blue(`Processing message: ${message2.name} (v${message2.version})`));
4602
4664
  const {
4603
4665
  addFileToMessage,
4666
+ addExampleToMessage,
4604
4667
  writeMessage,
4605
4668
  getMessage,
4606
4669
  versionMessage,
@@ -4687,6 +4750,15 @@ var processMessagesForOpenAPISpec = async (pathToSpec, document2, servicePath, o
4687
4750
  );
4688
4751
  }
4689
4752
  }
4753
+ if (parseExamples && operation.operationId) {
4754
+ const operationExamples = await getExamplesByOperationId(pathToSpec, operation.operationId, document2);
4755
+ for (const example of operationExamples) {
4756
+ await addExampleToMessage(message2.id, { content: example.content, fileName: example.fileName }, message2.version);
4757
+ }
4758
+ if (operationExamples.length > 0) {
4759
+ console.log(chalk4.cyan(` - ${operationExamples.length} example(s) added to message (v${message2.version})`));
4760
+ }
4761
+ }
4690
4762
  console.log(chalk4.cyan(` - Message (v${message2.version}) created`));
4691
4763
  if (!operation.operationId) {
4692
4764
  console.log(chalk4.yellow(` - OperationId not found for ${operation.method} ${operation.path}, creating one...`));