@eventcatalog/generator-openapi 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -6,8 +6,6 @@
6
6
  <img src="https://img.shields.io/github/actions/workflow/status/event-catalog/generator-asyncapi/verify-build.yml"/>
7
7
  [![](https://dcbadge.limes.pink/api/server/https://discord.gg/3rjaZMmrAm?style=flat)](https://discord.gg/3rjaZMmrAm) [<img src="https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white" height="20px" />](https://www.linkedin.com/in/david-boyne/) [![blog](https://img.shields.io/badge/license-Dual--License-brightgreen)](https://github.com/event-catalog/generator-openapi/blob/main/LICENSE.md)
8
8
 
9
-
10
-
11
9
  <img alt="header" src="./images/openapi.png" />
12
10
 
13
11
  <h4>Features: Generate EventCatalogs with your OpenAPI files, Auto versioning, schema downloads, map to domains, custom OpenAPI extensions and more... </h4>
@@ -132,3 +130,5 @@ You can find the [contributing guidelines here](https://eventcatalog.dev/docs/co
132
130
  # Commercial Use
133
131
 
134
132
  This project is governed by a [dual-license](./LICENSE.md). To ensure the sustainability of the project, you can freely make use of this software if your projects are Open Source. Otherwise for internal systems you must obtain a [commercial license](./LICENSE-COMMERCIAL.md).
133
+
134
+ To obtain a commercial license or have any questions you can email us at `hello@eventcatalog.dev`.
package/dist/index.js CHANGED
@@ -81,6 +81,9 @@ var buildService = (pathToFile, document) => {
81
81
  name: document.info.title,
82
82
  summary: getSummary(document),
83
83
  schemaPath,
84
+ specifications: {
85
+ openapiPath: schemaPath
86
+ },
84
87
  markdown: defaultMarkdown2(document, schemaPath),
85
88
  badges: documentTags.map((tag) => ({ content: tag.name, textColor: "blue", backgroundColor: "blue" }))
86
89
  };
@@ -326,6 +329,7 @@ var src_default = async (_, options) => {
326
329
  const version = document.info.version;
327
330
  const service = buildService(path, document);
328
331
  let serviceMarkdown = service.markdown;
332
+ let serviceSpecifications = service.specifications;
329
333
  if (options.domain) {
330
334
  const { id: domainId, name: domainName, version: domainVersion } = options.domain;
331
335
  const domain = await getDomain(options.domain.id, domainVersion || "latest");
@@ -356,6 +360,10 @@ Processing domain: ${domainName} (v${domainVersion})`));
356
360
  if (latestServiceInCatalog) {
357
361
  serviceMarkdown = latestServiceInCatalog.markdown;
358
362
  sends = latestServiceInCatalog.sends || [];
363
+ serviceSpecifications = {
364
+ ...serviceSpecifications,
365
+ ...latestServiceInCatalog.specifications
366
+ };
359
367
  if (latestServiceInCatalog.version !== version) {
360
368
  await versionService(service.id);
361
369
  console.log(import_chalk2.default.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
@@ -368,6 +376,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
368
376
  {
369
377
  ...service,
370
378
  markdown: serviceMarkdown,
379
+ specifications: serviceSpecifications,
371
380
  sends,
372
381
  receives
373
382
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/domains.ts","../src/utils/services.ts","../src/utils/openapi.ts","../src/utils/messages.ts","../src/utils/catalog-shorthand.ts","../src/utils/checkLicense.ts"],"sourcesContent":["import utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport chalk from 'chalk';\nimport SwaggerParser from '@apidevtools/swagger-parser';\n\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { buildService } from './utils/services';\nimport { buildMessage } from './utils/messages';\nimport { getOperationsByType } from './utils/openapi';\nimport { Domain } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\n\ntype Props = {\n path: string | string[];\n domain?: Domain;\n debug?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n rmService,\n writeService,\n addFileToService,\n } = utils(process.env.PROJECT_DIR);\n\n const openAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n\n for (const path of openAPIFiles) {\n console.log(chalk.green(`Processing ${path}`));\n\n try {\n await SwaggerParser.validate(path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const openAPIFile = await readFile(path, 'utf-8');\n const document = await SwaggerParser.parse(path);\n const version = document.info.version;\n\n const service = buildService(path, document);\n let serviceMarkdown = service.markdown;\n\n // Manage domain\n if (options.domain) {\n // Try and get the domain\n const { id: domainId, name: domainName, version: domainVersion } = options.domain;\n const domain = await getDomain(options.domain.id, domainVersion || 'latest');\n const currentDomain = await getDomain(options.domain.id, 'latest');\n\n console.log(chalk.blue(`\\nProcessing domain: ${domainName} (v${domainVersion})`));\n\n // Found a domain, but the versions do not match\n if (currentDomain && currentDomain.version !== domainVersion) {\n await versionDomain(domainId);\n console.log(chalk.cyan(` - Versioned previous domain (v${currentDomain.version})`));\n }\n\n // Do we need to create a new domain?\n if (!domain || (domain && domain.version !== domainVersion)) {\n await writeDomain({\n id: domainId,\n name: domainName,\n version: domainVersion,\n markdown: generateMarkdownForDomain(),\n });\n console.log(chalk.cyan(` - Domain (v${domainVersion}) created`));\n }\n\n if (currentDomain && currentDomain.version === domainVersion) {\n console.log(chalk.yellow(` - Domain (v${domainVersion}) already exists, skipped creation...`));\n }\n\n // Add the service to the domain\n await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);\n }\n\n // Process all messages for the OpenAPI spec\n let { sends, receives } = await processMessagesForOpenAPISpec(path, document);\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(service.id, 'latest');\n console.log(chalk.blue(`Processing service: ${document.info.title} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n sends = latestServiceInCatalog.sends || ([] as any);\n // Found a service, and versions do not match, we need to version the one already there\n if (latestServiceInCatalog.version !== version) {\n await versionService(service.id);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, override it\n if (latestServiceInCatalog.version === version) {\n await rmService(service.name);\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n sends,\n receives,\n },\n { path: service.name }\n );\n\n await addFileToService(\n service.id,\n {\n fileName: service.schemaPath,\n content: openAPIFile,\n },\n version\n );\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n\n await checkLicense();\n};\n\nconst processMessagesForOpenAPISpec = async (pathToSpec: string, document: OpenAPI.Document) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [];\n\n // Go through all messages\n for (const operation of operations) {\n const { requestBodiesAndResponses, ...message } = await buildMessage(pathToSpec, document, operation);\n let messageMarkdown = message.markdown;\n const messageType = operation.type;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${version})`));\n\n const { addFileToMessage, writeMessage, rmMessageById, getMessage, versionMessage } = getMessageTypeUtils(\n process.env.PROJECT_DIR as string,\n messageType\n );\n\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id, 'latest');\n\n if (catalogedMessage) {\n messageMarkdown = catalogedMessage.markdown;\n // if the version matches, we can override the message but keep markdown as it was\n if (catalogedMessage.version === version) {\n await rmMessageById(message.id, version);\n } else {\n // if the version does not match, we need to version the message\n await versionMessage(message.id);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: message.name });\n\n // messages will always be messages the service receives\n receives.push({\n id: message.id,\n version: message.version,\n });\n\n // Does the message have a request body or responses?\n if (requestBodiesAndResponses?.requestBody) {\n await addFileToMessage(\n message.id,\n {\n fileName: 'request-body.json',\n content: JSON.stringify(requestBodiesAndResponses.requestBody, null, 2),\n },\n message.version\n );\n }\n\n if (requestBodiesAndResponses?.responses) {\n for (const [statusCode, schema] of Object.entries(requestBodiesAndResponses.responses)) {\n await addFileToMessage(\n message.id,\n {\n fileName: `response-${statusCode}.json`,\n content: JSON.stringify(schema, null, 2),\n },\n message.version\n );\n }\n }\n\n console.log(chalk.cyan(` - Message (v${version}) created`));\n if (!operation.operationId) {\n console.log(chalk.yellow(` - OperationId not found for ${operation.method} ${operation.path}, creating one...`));\n console.log(chalk.yellow(` - Use operationIds to give better unique names for EventCatalog`));\n }\n }\n return { receives, sends: [] };\n};\n","export const defaultMarkdown = () => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { OpenAPI } from 'openapi-types';\nimport slugify from 'slugify';\n\nexport const defaultMarkdown = (document: OpenAPI.Document, fileName: string) => {\n return `\n\n${document.info.description ? `${document.info.description}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n## OpenAPI Specification\n<OpenAPI file=\"${fileName}\"/>\n\n${\n document.externalDocs\n ? `\n## External documentation\n- [${document.externalDocs.description}](${document.externalDocs.url})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (document: OpenAPI.Document) => {\n const summary = document.info.description ? document.info.description : '';\n return summary && summary.length < 150 ? summary : '';\n};\n\nexport const buildService = (pathToFile: string, document: OpenAPI.Document) => {\n const schemaPath = pathToFile.split('/').pop() || 'openapi.yml';\n const documentTags = document.tags || [];\n return {\n id: slugify(document.info.title, { lower: true, strict: true }),\n version: document.info.version,\n name: document.info.title,\n summary: getSummary(document),\n schemaPath,\n markdown: defaultMarkdown(document, schemaPath),\n badges: documentTags.map((tag) => ({ content: tag.name, textColor: 'blue', backgroundColor: 'blue' })),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport { OpenAPIDocument, OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\n\nconst DEFAULT_MESSAGE_TYPE = 'query';\n\nexport async function getSchemasByOperationId(filePath: string, operationId: string): Promise<OpenAPIOperation | undefined> {\n try {\n // Parse and resolve all references in the OpenAPI document\n const api = (await SwaggerParser.dereference(filePath)) as OpenAPIDocument;\n const schemas: {\n parameters: OpenAPIParameter[];\n requestBody: any;\n responses: { [statusCode: string]: any };\n } = {\n parameters: [],\n requestBody: null,\n responses: {},\n };\n\n // Iterate through paths and operations\n for (const [path, pathItem] of Object.entries(api.paths)) {\n for (const [method, operation] of Object.entries(pathItem)) {\n // Cast operation to OpenAPIOperation type\n const typedOperation = operation as OpenAPIOperation;\n\n if (typedOperation.operationId === operationId) {\n // Extract query parameters\n if (typedOperation.parameters) {\n schemas.parameters = typedOperation.parameters;\n }\n\n // Extract request body schema\n if (typedOperation.requestBody && typedOperation.requestBody.content) {\n const contentType = Object.keys(typedOperation.requestBody.content)[0];\n schemas.requestBody = typedOperation.requestBody.content[contentType].schema;\n }\n\n // Extract response schemas\n if (typedOperation.responses) {\n for (const [statusCode, response] of Object.entries(typedOperation.responses)) {\n if (response.content) {\n const contentType = Object.keys(response.content)[0];\n schemas.responses[statusCode] = response.content[contentType].schema || response.content[contentType];\n schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;\n }\n }\n }\n\n return schemas;\n }\n }\n }\n\n throw new Error(`Operation with ID \"${operationId}\" not found.`);\n } catch (error) {\n console.error('Error parsing OpenAPI file or finding operation:', error);\n return;\n }\n}\n\nexport async function getOperationsByType(openApiPath: string) {\n try {\n // Parse the OpenAPI document\n const api = await SwaggerParser.validate(openApiPath);\n\n const operations = [];\n\n // Iterate through paths\n for (const path in api.paths) {\n const pathItem = api.paths[path];\n\n // Iterate through each HTTP method in the path\n for (const method in pathItem) {\n // @ts-ignore\n const openAPIOperation = pathItem[method];\n\n // Check if the x-eventcatalog-message-type field is set\n const messageType = openAPIOperation['x-eventcatalog-message-type'] || DEFAULT_MESSAGE_TYPE;\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n } as Operation;\n\n operations.push(operation);\n }\n }\n\n return operations;\n } catch (err) {\n console.error('Error parsing OpenAPI document:', err);\n return [];\n }\n}\n","import { OpenAPI } from 'openapi-types';\nimport { getSchemasByOperationId } from './openapi';\nimport { OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\nimport slugify from 'slugify';\n\nconst markdownForParameters = (parameters: OpenAPIParameter[]) => {\n let markdown = '### Parameters\\n';\n\n for (const parameter of parameters) {\n markdown += `- **${parameter.name}** (${parameter.in})`;\n if (parameter.required) {\n markdown += ' (required)';\n }\n if (parameter.description) {\n markdown += `: ${parameter.description}`;\n }\n markdown += '\\n';\n }\n\n return markdown;\n};\n\nexport const markdownForResponses = (openAPIOperation: OpenAPIOperation) => {\n let markdown = '### Responses\\n';\n\n for (const [statusCode, content] of Object.entries(openAPIOperation.responses as any)) {\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\n<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\n `;\n } else {\n markdown += `**${statusCode} Response**\n \\`\\`\\`json\n${JSON.stringify(content, null, 2)}\n\\`\\`\\`\n `;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n\n\n## Architecture\n<NodeGraph />\n\n${\n message.externalDocs\n ? `\n## External documentation\n- [${message.externalDocs.description}](${message.externalDocs.url})\n`\n : ''\n}\n\n## ${message.method.toUpperCase()} \\`(${message.path})\\`\n\n${openAPIOperation.parameters && openAPIOperation.parameters.length > 0 ? markdownForParameters(openAPIOperation.parameters) : ''}\n\n${\n openAPIOperation.requestBody\n ? `\n### Request Body\n<SchemaViewer file=\"request-body.json\" maxHeight=\"500\" id=\"request-body\" />\n`\n : ''\n}\n\n${markdownForResponses(openAPIOperation)}\n\n`;\n};\n\nexport const getSummary = (message: Operation) => {\n const messageSummary = message.summary ? message.summary : '';\n const messageDescription = message.description ? message.description : '';\n\n let eventCatalogMessageSummary = messageSummary;\n\n if (!eventCatalogMessageSummary) {\n eventCatalogMessageSummary = messageDescription && messageDescription.length < 150 ? messageDescription : '';\n }\n\n return eventCatalogMessageSummary;\n};\n\nexport const buildMessage = async (pathToFile: string, document: OpenAPI.Document, operation: Operation) => {\n const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId);\n\n const operationTags = operation.tags.map((badge) => ({\n content: `tag:${badge}`,\n textColor: 'blue',\n backgroundColor: 'blue',\n }));\n\n const badges = [{ content: operation.method.toUpperCase(), textColor: 'blue', backgroundColor: 'blue' }, ...operationTags];\n\n const apiName = slugify(document.info.title, { lower: true });\n const path = operation.path.replace(/\\//, '').replace(/\\//g, '_');\n let uniqueIdentifier = operation.operationId || `${apiName}_${operation.method}`;\n\n if (!operation.operationId && path) {\n uniqueIdentifier = uniqueIdentifier.concat(`_${path}`);\n }\n\n return {\n id: uniqueIdentifier,\n version: document.info.version,\n name: uniqueIdentifier,\n summary: getSummary(operation),\n markdown: defaultMarkdown(operation, requestBodiesAndResponses),\n schemaPath: requestBodiesAndResponses?.requestBody ? 'request-body.json' : '',\n badges,\n requestBodiesAndResponses,\n };\n};\n","/**\n * TODO: Move this into the SDK\n */\n\nimport utils from '@eventcatalog/sdk';\n\nexport const getMessageTypeUtils = (projectDirectory: string, messageType: string) => {\n const {\n writeEvent,\n versionCommand,\n getEvent,\n getCommand,\n rmCommandById,\n rmEventById,\n writeCommand,\n addFileToCommand,\n addFileToEvent,\n versionEvent,\n } = utils(projectDirectory);\n\n if (messageType === 'event') {\n return {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n };\n }\n\n // default command\n return {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n };\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, please contact hello@eventcatalog.dev for a license to support the project.`\n )\n );\n};\n"],"mappings":"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","names":["import_sdk","import_chalk","import_swagger_parser","defaultMarkdown","slugify","SwaggerParser","import_slugify","defaultMarkdown","getSummary","slugify","utils","chalk","utils","chalk","SwaggerParser"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/domains.ts","../src/utils/services.ts","../src/utils/openapi.ts","../src/utils/messages.ts","../src/utils/catalog-shorthand.ts","../src/utils/checkLicense.ts"],"sourcesContent":["import utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport chalk from 'chalk';\nimport SwaggerParser from '@apidevtools/swagger-parser';\n\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { buildService } from './utils/services';\nimport { buildMessage } from './utils/messages';\nimport { getOperationsByType } from './utils/openapi';\nimport { Domain } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\n\ntype Props = {\n path: string | string[];\n domain?: Domain;\n debug?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n rmService,\n writeService,\n addFileToService,\n } = utils(process.env.PROJECT_DIR);\n\n const openAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n\n for (const path of openAPIFiles) {\n console.log(chalk.green(`Processing ${path}`));\n\n try {\n await SwaggerParser.validate(path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const openAPIFile = await readFile(path, 'utf-8');\n const document = await SwaggerParser.parse(path);\n const version = document.info.version;\n\n const service = buildService(path, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecifications = service.specifications;\n\n // Manage domain\n if (options.domain) {\n // Try and get the domain\n const { id: domainId, name: domainName, version: domainVersion } = options.domain;\n const domain = await getDomain(options.domain.id, domainVersion || 'latest');\n const currentDomain = await getDomain(options.domain.id, 'latest');\n\n console.log(chalk.blue(`\\nProcessing domain: ${domainName} (v${domainVersion})`));\n\n // Found a domain, but the versions do not match\n if (currentDomain && currentDomain.version !== domainVersion) {\n await versionDomain(domainId);\n console.log(chalk.cyan(` - Versioned previous domain (v${currentDomain.version})`));\n }\n\n // Do we need to create a new domain?\n if (!domain || (domain && domain.version !== domainVersion)) {\n await writeDomain({\n id: domainId,\n name: domainName,\n version: domainVersion,\n markdown: generateMarkdownForDomain(),\n });\n console.log(chalk.cyan(` - Domain (v${domainVersion}) created`));\n }\n\n if (currentDomain && currentDomain.version === domainVersion) {\n console.log(chalk.yellow(` - Domain (v${domainVersion}) already exists, skipped creation...`));\n }\n\n // Add the service to the domain\n await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);\n }\n\n // Process all messages for the OpenAPI spec\n let { sends, receives } = await processMessagesForOpenAPISpec(path, document);\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(service.id, 'latest');\n console.log(chalk.blue(`Processing service: ${document.info.title} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n sends = latestServiceInCatalog.sends || ([] as any);\n\n // persist any specifications that are already in the catalog\n serviceSpecifications = {\n ...serviceSpecifications,\n ...latestServiceInCatalog.specifications,\n };\n\n // Found a service, and versions do not match, we need to version the one already there\n if (latestServiceInCatalog.version !== version) {\n await versionService(service.id);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, override it\n if (latestServiceInCatalog.version === version) {\n await rmService(service.name);\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n },\n { path: service.name }\n );\n\n await addFileToService(\n service.id,\n {\n fileName: service.schemaPath,\n content: openAPIFile,\n },\n version\n );\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n\n await checkLicense();\n};\n\nconst processMessagesForOpenAPISpec = async (pathToSpec: string, document: OpenAPI.Document) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [];\n\n // Go through all messages\n for (const operation of operations) {\n const { requestBodiesAndResponses, ...message } = await buildMessage(pathToSpec, document, operation);\n let messageMarkdown = message.markdown;\n const messageType = operation.type;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${version})`));\n\n const { addFileToMessage, writeMessage, rmMessageById, getMessage, versionMessage } = getMessageTypeUtils(\n process.env.PROJECT_DIR as string,\n messageType\n );\n\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id, 'latest');\n\n if (catalogedMessage) {\n messageMarkdown = catalogedMessage.markdown;\n // if the version matches, we can override the message but keep markdown as it was\n if (catalogedMessage.version === version) {\n await rmMessageById(message.id, version);\n } else {\n // if the version does not match, we need to version the message\n await versionMessage(message.id);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: message.name });\n\n // messages will always be messages the service receives\n receives.push({\n id: message.id,\n version: message.version,\n });\n\n // Does the message have a request body or responses?\n if (requestBodiesAndResponses?.requestBody) {\n await addFileToMessage(\n message.id,\n {\n fileName: 'request-body.json',\n content: JSON.stringify(requestBodiesAndResponses.requestBody, null, 2),\n },\n message.version\n );\n }\n\n if (requestBodiesAndResponses?.responses) {\n for (const [statusCode, schema] of Object.entries(requestBodiesAndResponses.responses)) {\n await addFileToMessage(\n message.id,\n {\n fileName: `response-${statusCode}.json`,\n content: JSON.stringify(schema, null, 2),\n },\n message.version\n );\n }\n }\n\n console.log(chalk.cyan(` - Message (v${version}) created`));\n if (!operation.operationId) {\n console.log(chalk.yellow(` - OperationId not found for ${operation.method} ${operation.path}, creating one...`));\n console.log(chalk.yellow(` - Use operationIds to give better unique names for EventCatalog`));\n }\n }\n return { receives, sends: [] };\n};\n","export const defaultMarkdown = () => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { OpenAPI } from 'openapi-types';\nimport slugify from 'slugify';\n\nexport const defaultMarkdown = (document: OpenAPI.Document, fileName: string) => {\n return `\n\n${document.info.description ? `${document.info.description}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n## OpenAPI Specification\n<OpenAPI file=\"${fileName}\"/>\n\n${\n document.externalDocs\n ? `\n## External documentation\n- [${document.externalDocs.description}](${document.externalDocs.url})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (document: OpenAPI.Document) => {\n const summary = document.info.description ? document.info.description : '';\n return summary && summary.length < 150 ? summary : '';\n};\n\nexport const buildService = (pathToFile: string, document: OpenAPI.Document) => {\n const schemaPath = pathToFile.split('/').pop() || 'openapi.yml';\n const documentTags = document.tags || [];\n return {\n id: slugify(document.info.title, { lower: true, strict: true }),\n version: document.info.version,\n name: document.info.title,\n summary: getSummary(document),\n schemaPath,\n specifications: {\n openapiPath: schemaPath,\n },\n markdown: defaultMarkdown(document, schemaPath),\n badges: documentTags.map((tag) => ({ content: tag.name, textColor: 'blue', backgroundColor: 'blue' })),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport { OpenAPIDocument, OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\n\nconst DEFAULT_MESSAGE_TYPE = 'query';\n\nexport async function getSchemasByOperationId(filePath: string, operationId: string): Promise<OpenAPIOperation | undefined> {\n try {\n // Parse and resolve all references in the OpenAPI document\n const api = (await SwaggerParser.dereference(filePath)) as OpenAPIDocument;\n const schemas: {\n parameters: OpenAPIParameter[];\n requestBody: any;\n responses: { [statusCode: string]: any };\n } = {\n parameters: [],\n requestBody: null,\n responses: {},\n };\n\n // Iterate through paths and operations\n for (const [path, pathItem] of Object.entries(api.paths)) {\n for (const [method, operation] of Object.entries(pathItem)) {\n // Cast operation to OpenAPIOperation type\n const typedOperation = operation as OpenAPIOperation;\n\n if (typedOperation.operationId === operationId) {\n // Extract query parameters\n if (typedOperation.parameters) {\n schemas.parameters = typedOperation.parameters;\n }\n\n // Extract request body schema\n if (typedOperation.requestBody && typedOperation.requestBody.content) {\n const contentType = Object.keys(typedOperation.requestBody.content)[0];\n schemas.requestBody = typedOperation.requestBody.content[contentType].schema;\n }\n\n // Extract response schemas\n if (typedOperation.responses) {\n for (const [statusCode, response] of Object.entries(typedOperation.responses)) {\n if (response.content) {\n const contentType = Object.keys(response.content)[0];\n schemas.responses[statusCode] = response.content[contentType].schema || response.content[contentType];\n schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;\n }\n }\n }\n\n return schemas;\n }\n }\n }\n\n throw new Error(`Operation with ID \"${operationId}\" not found.`);\n } catch (error) {\n console.error('Error parsing OpenAPI file or finding operation:', error);\n return;\n }\n}\n\nexport async function getOperationsByType(openApiPath: string) {\n try {\n // Parse the OpenAPI document\n const api = await SwaggerParser.validate(openApiPath);\n\n const operations = [];\n\n // Iterate through paths\n for (const path in api.paths) {\n const pathItem = api.paths[path];\n\n // Iterate through each HTTP method in the path\n for (const method in pathItem) {\n // @ts-ignore\n const openAPIOperation = pathItem[method];\n\n // Check if the x-eventcatalog-message-type field is set\n const messageType = openAPIOperation['x-eventcatalog-message-type'] || DEFAULT_MESSAGE_TYPE;\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n } as Operation;\n\n operations.push(operation);\n }\n }\n\n return operations;\n } catch (err) {\n console.error('Error parsing OpenAPI document:', err);\n return [];\n }\n}\n","import { OpenAPI } from 'openapi-types';\nimport { getSchemasByOperationId } from './openapi';\nimport { OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\nimport slugify from 'slugify';\n\nconst markdownForParameters = (parameters: OpenAPIParameter[]) => {\n let markdown = '### Parameters\\n';\n\n for (const parameter of parameters) {\n markdown += `- **${parameter.name}** (${parameter.in})`;\n if (parameter.required) {\n markdown += ' (required)';\n }\n if (parameter.description) {\n markdown += `: ${parameter.description}`;\n }\n markdown += '\\n';\n }\n\n return markdown;\n};\n\nexport const markdownForResponses = (openAPIOperation: OpenAPIOperation) => {\n let markdown = '### Responses\\n';\n\n for (const [statusCode, content] of Object.entries(openAPIOperation.responses as any)) {\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\n<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\n `;\n } else {\n markdown += `**${statusCode} Response**\n \\`\\`\\`json\n${JSON.stringify(content, null, 2)}\n\\`\\`\\`\n `;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n\n\n## Architecture\n<NodeGraph />\n\n${\n message.externalDocs\n ? `\n## External documentation\n- [${message.externalDocs.description}](${message.externalDocs.url})\n`\n : ''\n}\n\n## ${message.method.toUpperCase()} \\`(${message.path})\\`\n\n${openAPIOperation.parameters && openAPIOperation.parameters.length > 0 ? markdownForParameters(openAPIOperation.parameters) : ''}\n\n${\n openAPIOperation.requestBody\n ? `\n### Request Body\n<SchemaViewer file=\"request-body.json\" maxHeight=\"500\" id=\"request-body\" />\n`\n : ''\n}\n\n${markdownForResponses(openAPIOperation)}\n\n`;\n};\n\nexport const getSummary = (message: Operation) => {\n const messageSummary = message.summary ? message.summary : '';\n const messageDescription = message.description ? message.description : '';\n\n let eventCatalogMessageSummary = messageSummary;\n\n if (!eventCatalogMessageSummary) {\n eventCatalogMessageSummary = messageDescription && messageDescription.length < 150 ? messageDescription : '';\n }\n\n return eventCatalogMessageSummary;\n};\n\nexport const buildMessage = async (pathToFile: string, document: OpenAPI.Document, operation: Operation) => {\n const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId);\n\n const operationTags = operation.tags.map((badge) => ({\n content: `tag:${badge}`,\n textColor: 'blue',\n backgroundColor: 'blue',\n }));\n\n const badges = [{ content: operation.method.toUpperCase(), textColor: 'blue', backgroundColor: 'blue' }, ...operationTags];\n\n const apiName = slugify(document.info.title, { lower: true });\n const path = operation.path.replace(/\\//, '').replace(/\\//g, '_');\n let uniqueIdentifier = operation.operationId || `${apiName}_${operation.method}`;\n\n if (!operation.operationId && path) {\n uniqueIdentifier = uniqueIdentifier.concat(`_${path}`);\n }\n\n return {\n id: uniqueIdentifier,\n version: document.info.version,\n name: uniqueIdentifier,\n summary: getSummary(operation),\n markdown: defaultMarkdown(operation, requestBodiesAndResponses),\n schemaPath: requestBodiesAndResponses?.requestBody ? 'request-body.json' : '',\n badges,\n requestBodiesAndResponses,\n };\n};\n","/**\n * TODO: Move this into the SDK\n */\n\nimport utils from '@eventcatalog/sdk';\n\nexport const getMessageTypeUtils = (projectDirectory: string, messageType: string) => {\n const {\n writeEvent,\n versionCommand,\n getEvent,\n getCommand,\n rmCommandById,\n rmEventById,\n writeCommand,\n addFileToCommand,\n addFileToEvent,\n versionEvent,\n } = utils(projectDirectory);\n\n if (messageType === 'event') {\n return {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n };\n }\n\n // default command\n return {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n };\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, please contact hello@eventcatalog.dev for a license to support the project.`\n )\n );\n};\n"],"mappings":"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","names":["import_sdk","import_chalk","import_swagger_parser","defaultMarkdown","slugify","SwaggerParser","import_slugify","defaultMarkdown","getSummary","slugify","utils","chalk","utils","chalk","SwaggerParser"]}
package/dist/index.mjs CHANGED
@@ -47,6 +47,9 @@ var buildService = (pathToFile, document) => {
47
47
  name: document.info.title,
48
48
  summary: getSummary(document),
49
49
  schemaPath,
50
+ specifications: {
51
+ openapiPath: schemaPath
52
+ },
50
53
  markdown: defaultMarkdown2(document, schemaPath),
51
54
  badges: documentTags.map((tag) => ({ content: tag.name, textColor: "blue", backgroundColor: "blue" }))
52
55
  };
@@ -292,6 +295,7 @@ var src_default = async (_, options) => {
292
295
  const version = document.info.version;
293
296
  const service = buildService(path, document);
294
297
  let serviceMarkdown = service.markdown;
298
+ let serviceSpecifications = service.specifications;
295
299
  if (options.domain) {
296
300
  const { id: domainId, name: domainName, version: domainVersion } = options.domain;
297
301
  const domain = await getDomain(options.domain.id, domainVersion || "latest");
@@ -322,6 +326,10 @@ Processing domain: ${domainName} (v${domainVersion})`));
322
326
  if (latestServiceInCatalog) {
323
327
  serviceMarkdown = latestServiceInCatalog.markdown;
324
328
  sends = latestServiceInCatalog.sends || [];
329
+ serviceSpecifications = {
330
+ ...serviceSpecifications,
331
+ ...latestServiceInCatalog.specifications
332
+ };
325
333
  if (latestServiceInCatalog.version !== version) {
326
334
  await versionService(service.id);
327
335
  console.log(chalk2.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
@@ -334,6 +342,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
334
342
  {
335
343
  ...service,
336
344
  markdown: serviceMarkdown,
345
+ specifications: serviceSpecifications,
337
346
  sends,
338
347
  receives
339
348
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/domains.ts","../src/utils/services.ts","../src/utils/openapi.ts","../src/utils/messages.ts","../src/utils/catalog-shorthand.ts","../src/utils/checkLicense.ts"],"sourcesContent":["import utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport chalk from 'chalk';\nimport SwaggerParser from '@apidevtools/swagger-parser';\n\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { buildService } from './utils/services';\nimport { buildMessage } from './utils/messages';\nimport { getOperationsByType } from './utils/openapi';\nimport { Domain } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\n\ntype Props = {\n path: string | string[];\n domain?: Domain;\n debug?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n rmService,\n writeService,\n addFileToService,\n } = utils(process.env.PROJECT_DIR);\n\n const openAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n\n for (const path of openAPIFiles) {\n console.log(chalk.green(`Processing ${path}`));\n\n try {\n await SwaggerParser.validate(path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const openAPIFile = await readFile(path, 'utf-8');\n const document = await SwaggerParser.parse(path);\n const version = document.info.version;\n\n const service = buildService(path, document);\n let serviceMarkdown = service.markdown;\n\n // Manage domain\n if (options.domain) {\n // Try and get the domain\n const { id: domainId, name: domainName, version: domainVersion } = options.domain;\n const domain = await getDomain(options.domain.id, domainVersion || 'latest');\n const currentDomain = await getDomain(options.domain.id, 'latest');\n\n console.log(chalk.blue(`\\nProcessing domain: ${domainName} (v${domainVersion})`));\n\n // Found a domain, but the versions do not match\n if (currentDomain && currentDomain.version !== domainVersion) {\n await versionDomain(domainId);\n console.log(chalk.cyan(` - Versioned previous domain (v${currentDomain.version})`));\n }\n\n // Do we need to create a new domain?\n if (!domain || (domain && domain.version !== domainVersion)) {\n await writeDomain({\n id: domainId,\n name: domainName,\n version: domainVersion,\n markdown: generateMarkdownForDomain(),\n });\n console.log(chalk.cyan(` - Domain (v${domainVersion}) created`));\n }\n\n if (currentDomain && currentDomain.version === domainVersion) {\n console.log(chalk.yellow(` - Domain (v${domainVersion}) already exists, skipped creation...`));\n }\n\n // Add the service to the domain\n await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);\n }\n\n // Process all messages for the OpenAPI spec\n let { sends, receives } = await processMessagesForOpenAPISpec(path, document);\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(service.id, 'latest');\n console.log(chalk.blue(`Processing service: ${document.info.title} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n sends = latestServiceInCatalog.sends || ([] as any);\n // Found a service, and versions do not match, we need to version the one already there\n if (latestServiceInCatalog.version !== version) {\n await versionService(service.id);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, override it\n if (latestServiceInCatalog.version === version) {\n await rmService(service.name);\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n sends,\n receives,\n },\n { path: service.name }\n );\n\n await addFileToService(\n service.id,\n {\n fileName: service.schemaPath,\n content: openAPIFile,\n },\n version\n );\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n\n await checkLicense();\n};\n\nconst processMessagesForOpenAPISpec = async (pathToSpec: string, document: OpenAPI.Document) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [];\n\n // Go through all messages\n for (const operation of operations) {\n const { requestBodiesAndResponses, ...message } = await buildMessage(pathToSpec, document, operation);\n let messageMarkdown = message.markdown;\n const messageType = operation.type;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${version})`));\n\n const { addFileToMessage, writeMessage, rmMessageById, getMessage, versionMessage } = getMessageTypeUtils(\n process.env.PROJECT_DIR as string,\n messageType\n );\n\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id, 'latest');\n\n if (catalogedMessage) {\n messageMarkdown = catalogedMessage.markdown;\n // if the version matches, we can override the message but keep markdown as it was\n if (catalogedMessage.version === version) {\n await rmMessageById(message.id, version);\n } else {\n // if the version does not match, we need to version the message\n await versionMessage(message.id);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: message.name });\n\n // messages will always be messages the service receives\n receives.push({\n id: message.id,\n version: message.version,\n });\n\n // Does the message have a request body or responses?\n if (requestBodiesAndResponses?.requestBody) {\n await addFileToMessage(\n message.id,\n {\n fileName: 'request-body.json',\n content: JSON.stringify(requestBodiesAndResponses.requestBody, null, 2),\n },\n message.version\n );\n }\n\n if (requestBodiesAndResponses?.responses) {\n for (const [statusCode, schema] of Object.entries(requestBodiesAndResponses.responses)) {\n await addFileToMessage(\n message.id,\n {\n fileName: `response-${statusCode}.json`,\n content: JSON.stringify(schema, null, 2),\n },\n message.version\n );\n }\n }\n\n console.log(chalk.cyan(` - Message (v${version}) created`));\n if (!operation.operationId) {\n console.log(chalk.yellow(` - OperationId not found for ${operation.method} ${operation.path}, creating one...`));\n console.log(chalk.yellow(` - Use operationIds to give better unique names for EventCatalog`));\n }\n }\n return { receives, sends: [] };\n};\n","export const defaultMarkdown = () => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { OpenAPI } from 'openapi-types';\nimport slugify from 'slugify';\n\nexport const defaultMarkdown = (document: OpenAPI.Document, fileName: string) => {\n return `\n\n${document.info.description ? `${document.info.description}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n## OpenAPI Specification\n<OpenAPI file=\"${fileName}\"/>\n\n${\n document.externalDocs\n ? `\n## External documentation\n- [${document.externalDocs.description}](${document.externalDocs.url})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (document: OpenAPI.Document) => {\n const summary = document.info.description ? document.info.description : '';\n return summary && summary.length < 150 ? summary : '';\n};\n\nexport const buildService = (pathToFile: string, document: OpenAPI.Document) => {\n const schemaPath = pathToFile.split('/').pop() || 'openapi.yml';\n const documentTags = document.tags || [];\n return {\n id: slugify(document.info.title, { lower: true, strict: true }),\n version: document.info.version,\n name: document.info.title,\n summary: getSummary(document),\n schemaPath,\n markdown: defaultMarkdown(document, schemaPath),\n badges: documentTags.map((tag) => ({ content: tag.name, textColor: 'blue', backgroundColor: 'blue' })),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport { OpenAPIDocument, OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\n\nconst DEFAULT_MESSAGE_TYPE = 'query';\n\nexport async function getSchemasByOperationId(filePath: string, operationId: string): Promise<OpenAPIOperation | undefined> {\n try {\n // Parse and resolve all references in the OpenAPI document\n const api = (await SwaggerParser.dereference(filePath)) as OpenAPIDocument;\n const schemas: {\n parameters: OpenAPIParameter[];\n requestBody: any;\n responses: { [statusCode: string]: any };\n } = {\n parameters: [],\n requestBody: null,\n responses: {},\n };\n\n // Iterate through paths and operations\n for (const [path, pathItem] of Object.entries(api.paths)) {\n for (const [method, operation] of Object.entries(pathItem)) {\n // Cast operation to OpenAPIOperation type\n const typedOperation = operation as OpenAPIOperation;\n\n if (typedOperation.operationId === operationId) {\n // Extract query parameters\n if (typedOperation.parameters) {\n schemas.parameters = typedOperation.parameters;\n }\n\n // Extract request body schema\n if (typedOperation.requestBody && typedOperation.requestBody.content) {\n const contentType = Object.keys(typedOperation.requestBody.content)[0];\n schemas.requestBody = typedOperation.requestBody.content[contentType].schema;\n }\n\n // Extract response schemas\n if (typedOperation.responses) {\n for (const [statusCode, response] of Object.entries(typedOperation.responses)) {\n if (response.content) {\n const contentType = Object.keys(response.content)[0];\n schemas.responses[statusCode] = response.content[contentType].schema || response.content[contentType];\n schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;\n }\n }\n }\n\n return schemas;\n }\n }\n }\n\n throw new Error(`Operation with ID \"${operationId}\" not found.`);\n } catch (error) {\n console.error('Error parsing OpenAPI file or finding operation:', error);\n return;\n }\n}\n\nexport async function getOperationsByType(openApiPath: string) {\n try {\n // Parse the OpenAPI document\n const api = await SwaggerParser.validate(openApiPath);\n\n const operations = [];\n\n // Iterate through paths\n for (const path in api.paths) {\n const pathItem = api.paths[path];\n\n // Iterate through each HTTP method in the path\n for (const method in pathItem) {\n // @ts-ignore\n const openAPIOperation = pathItem[method];\n\n // Check if the x-eventcatalog-message-type field is set\n const messageType = openAPIOperation['x-eventcatalog-message-type'] || DEFAULT_MESSAGE_TYPE;\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n } as Operation;\n\n operations.push(operation);\n }\n }\n\n return operations;\n } catch (err) {\n console.error('Error parsing OpenAPI document:', err);\n return [];\n }\n}\n","import { OpenAPI } from 'openapi-types';\nimport { getSchemasByOperationId } from './openapi';\nimport { OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\nimport slugify from 'slugify';\n\nconst markdownForParameters = (parameters: OpenAPIParameter[]) => {\n let markdown = '### Parameters\\n';\n\n for (const parameter of parameters) {\n markdown += `- **${parameter.name}** (${parameter.in})`;\n if (parameter.required) {\n markdown += ' (required)';\n }\n if (parameter.description) {\n markdown += `: ${parameter.description}`;\n }\n markdown += '\\n';\n }\n\n return markdown;\n};\n\nexport const markdownForResponses = (openAPIOperation: OpenAPIOperation) => {\n let markdown = '### Responses\\n';\n\n for (const [statusCode, content] of Object.entries(openAPIOperation.responses as any)) {\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\n<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\n `;\n } else {\n markdown += `**${statusCode} Response**\n \\`\\`\\`json\n${JSON.stringify(content, null, 2)}\n\\`\\`\\`\n `;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n\n\n## Architecture\n<NodeGraph />\n\n${\n message.externalDocs\n ? `\n## External documentation\n- [${message.externalDocs.description}](${message.externalDocs.url})\n`\n : ''\n}\n\n## ${message.method.toUpperCase()} \\`(${message.path})\\`\n\n${openAPIOperation.parameters && openAPIOperation.parameters.length > 0 ? markdownForParameters(openAPIOperation.parameters) : ''}\n\n${\n openAPIOperation.requestBody\n ? `\n### Request Body\n<SchemaViewer file=\"request-body.json\" maxHeight=\"500\" id=\"request-body\" />\n`\n : ''\n}\n\n${markdownForResponses(openAPIOperation)}\n\n`;\n};\n\nexport const getSummary = (message: Operation) => {\n const messageSummary = message.summary ? message.summary : '';\n const messageDescription = message.description ? message.description : '';\n\n let eventCatalogMessageSummary = messageSummary;\n\n if (!eventCatalogMessageSummary) {\n eventCatalogMessageSummary = messageDescription && messageDescription.length < 150 ? messageDescription : '';\n }\n\n return eventCatalogMessageSummary;\n};\n\nexport const buildMessage = async (pathToFile: string, document: OpenAPI.Document, operation: Operation) => {\n const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId);\n\n const operationTags = operation.tags.map((badge) => ({\n content: `tag:${badge}`,\n textColor: 'blue',\n backgroundColor: 'blue',\n }));\n\n const badges = [{ content: operation.method.toUpperCase(), textColor: 'blue', backgroundColor: 'blue' }, ...operationTags];\n\n const apiName = slugify(document.info.title, { lower: true });\n const path = operation.path.replace(/\\//, '').replace(/\\//g, '_');\n let uniqueIdentifier = operation.operationId || `${apiName}_${operation.method}`;\n\n if (!operation.operationId && path) {\n uniqueIdentifier = uniqueIdentifier.concat(`_${path}`);\n }\n\n return {\n id: uniqueIdentifier,\n version: document.info.version,\n name: uniqueIdentifier,\n summary: getSummary(operation),\n markdown: defaultMarkdown(operation, requestBodiesAndResponses),\n schemaPath: requestBodiesAndResponses?.requestBody ? 'request-body.json' : '',\n badges,\n requestBodiesAndResponses,\n };\n};\n","/**\n * TODO: Move this into the SDK\n */\n\nimport utils from '@eventcatalog/sdk';\n\nexport const getMessageTypeUtils = (projectDirectory: string, messageType: string) => {\n const {\n writeEvent,\n versionCommand,\n getEvent,\n getCommand,\n rmCommandById,\n rmEventById,\n writeCommand,\n addFileToCommand,\n addFileToEvent,\n versionEvent,\n } = utils(projectDirectory);\n\n if (messageType === 'event') {\n return {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n };\n }\n\n // default command\n return {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n };\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, please contact hello@eventcatalog.dev for a license to support the project.`\n )\n );\n};\n"],"mappings":"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","names":["utils","chalk","SwaggerParser","defaultMarkdown","slugify","defaultMarkdown","getSummary","utils","chalk","SwaggerParser"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/domains.ts","../src/utils/services.ts","../src/utils/openapi.ts","../src/utils/messages.ts","../src/utils/catalog-shorthand.ts","../src/utils/checkLicense.ts"],"sourcesContent":["import utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport chalk from 'chalk';\nimport SwaggerParser from '@apidevtools/swagger-parser';\n\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { buildService } from './utils/services';\nimport { buildMessage } from './utils/messages';\nimport { getOperationsByType } from './utils/openapi';\nimport { Domain } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\n\ntype Props = {\n path: string | string[];\n domain?: Domain;\n debug?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n rmService,\n writeService,\n addFileToService,\n } = utils(process.env.PROJECT_DIR);\n\n const openAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n\n for (const path of openAPIFiles) {\n console.log(chalk.green(`Processing ${path}`));\n\n try {\n await SwaggerParser.validate(path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const openAPIFile = await readFile(path, 'utf-8');\n const document = await SwaggerParser.parse(path);\n const version = document.info.version;\n\n const service = buildService(path, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecifications = service.specifications;\n\n // Manage domain\n if (options.domain) {\n // Try and get the domain\n const { id: domainId, name: domainName, version: domainVersion } = options.domain;\n const domain = await getDomain(options.domain.id, domainVersion || 'latest');\n const currentDomain = await getDomain(options.domain.id, 'latest');\n\n console.log(chalk.blue(`\\nProcessing domain: ${domainName} (v${domainVersion})`));\n\n // Found a domain, but the versions do not match\n if (currentDomain && currentDomain.version !== domainVersion) {\n await versionDomain(domainId);\n console.log(chalk.cyan(` - Versioned previous domain (v${currentDomain.version})`));\n }\n\n // Do we need to create a new domain?\n if (!domain || (domain && domain.version !== domainVersion)) {\n await writeDomain({\n id: domainId,\n name: domainName,\n version: domainVersion,\n markdown: generateMarkdownForDomain(),\n });\n console.log(chalk.cyan(` - Domain (v${domainVersion}) created`));\n }\n\n if (currentDomain && currentDomain.version === domainVersion) {\n console.log(chalk.yellow(` - Domain (v${domainVersion}) already exists, skipped creation...`));\n }\n\n // Add the service to the domain\n await addServiceToDomain(domainId, { id: service.id, version: service.version }, domainVersion);\n }\n\n // Process all messages for the OpenAPI spec\n let { sends, receives } = await processMessagesForOpenAPISpec(path, document);\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(service.id, 'latest');\n console.log(chalk.blue(`Processing service: ${document.info.title} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n sends = latestServiceInCatalog.sends || ([] as any);\n\n // persist any specifications that are already in the catalog\n serviceSpecifications = {\n ...serviceSpecifications,\n ...latestServiceInCatalog.specifications,\n };\n\n // Found a service, and versions do not match, we need to version the one already there\n if (latestServiceInCatalog.version !== version) {\n await versionService(service.id);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, override it\n if (latestServiceInCatalog.version === version) {\n await rmService(service.name);\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n },\n { path: service.name }\n );\n\n await addFileToService(\n service.id,\n {\n fileName: service.schemaPath,\n content: openAPIFile,\n },\n version\n );\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n\n await checkLicense();\n};\n\nconst processMessagesForOpenAPISpec = async (pathToSpec: string, document: OpenAPI.Document) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [];\n\n // Go through all messages\n for (const operation of operations) {\n const { requestBodiesAndResponses, ...message } = await buildMessage(pathToSpec, document, operation);\n let messageMarkdown = message.markdown;\n const messageType = operation.type;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${version})`));\n\n const { addFileToMessage, writeMessage, rmMessageById, getMessage, versionMessage } = getMessageTypeUtils(\n process.env.PROJECT_DIR as string,\n messageType\n );\n\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id, 'latest');\n\n if (catalogedMessage) {\n messageMarkdown = catalogedMessage.markdown;\n // if the version matches, we can override the message but keep markdown as it was\n if (catalogedMessage.version === version) {\n await rmMessageById(message.id, version);\n } else {\n // if the version does not match, we need to version the message\n await versionMessage(message.id);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: message.name });\n\n // messages will always be messages the service receives\n receives.push({\n id: message.id,\n version: message.version,\n });\n\n // Does the message have a request body or responses?\n if (requestBodiesAndResponses?.requestBody) {\n await addFileToMessage(\n message.id,\n {\n fileName: 'request-body.json',\n content: JSON.stringify(requestBodiesAndResponses.requestBody, null, 2),\n },\n message.version\n );\n }\n\n if (requestBodiesAndResponses?.responses) {\n for (const [statusCode, schema] of Object.entries(requestBodiesAndResponses.responses)) {\n await addFileToMessage(\n message.id,\n {\n fileName: `response-${statusCode}.json`,\n content: JSON.stringify(schema, null, 2),\n },\n message.version\n );\n }\n }\n\n console.log(chalk.cyan(` - Message (v${version}) created`));\n if (!operation.operationId) {\n console.log(chalk.yellow(` - OperationId not found for ${operation.method} ${operation.path}, creating one...`));\n console.log(chalk.yellow(` - Use operationIds to give better unique names for EventCatalog`));\n }\n }\n return { receives, sends: [] };\n};\n","export const defaultMarkdown = () => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { OpenAPI } from 'openapi-types';\nimport slugify from 'slugify';\n\nexport const defaultMarkdown = (document: OpenAPI.Document, fileName: string) => {\n return `\n\n${document.info.description ? `${document.info.description}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n## OpenAPI Specification\n<OpenAPI file=\"${fileName}\"/>\n\n${\n document.externalDocs\n ? `\n## External documentation\n- [${document.externalDocs.description}](${document.externalDocs.url})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (document: OpenAPI.Document) => {\n const summary = document.info.description ? document.info.description : '';\n return summary && summary.length < 150 ? summary : '';\n};\n\nexport const buildService = (pathToFile: string, document: OpenAPI.Document) => {\n const schemaPath = pathToFile.split('/').pop() || 'openapi.yml';\n const documentTags = document.tags || [];\n return {\n id: slugify(document.info.title, { lower: true, strict: true }),\n version: document.info.version,\n name: document.info.title,\n summary: getSummary(document),\n schemaPath,\n specifications: {\n openapiPath: schemaPath,\n },\n markdown: defaultMarkdown(document, schemaPath),\n badges: documentTags.map((tag) => ({ content: tag.name, textColor: 'blue', backgroundColor: 'blue' })),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport { OpenAPIDocument, OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\n\nconst DEFAULT_MESSAGE_TYPE = 'query';\n\nexport async function getSchemasByOperationId(filePath: string, operationId: string): Promise<OpenAPIOperation | undefined> {\n try {\n // Parse and resolve all references in the OpenAPI document\n const api = (await SwaggerParser.dereference(filePath)) as OpenAPIDocument;\n const schemas: {\n parameters: OpenAPIParameter[];\n requestBody: any;\n responses: { [statusCode: string]: any };\n } = {\n parameters: [],\n requestBody: null,\n responses: {},\n };\n\n // Iterate through paths and operations\n for (const [path, pathItem] of Object.entries(api.paths)) {\n for (const [method, operation] of Object.entries(pathItem)) {\n // Cast operation to OpenAPIOperation type\n const typedOperation = operation as OpenAPIOperation;\n\n if (typedOperation.operationId === operationId) {\n // Extract query parameters\n if (typedOperation.parameters) {\n schemas.parameters = typedOperation.parameters;\n }\n\n // Extract request body schema\n if (typedOperation.requestBody && typedOperation.requestBody.content) {\n const contentType = Object.keys(typedOperation.requestBody.content)[0];\n schemas.requestBody = typedOperation.requestBody.content[contentType].schema;\n }\n\n // Extract response schemas\n if (typedOperation.responses) {\n for (const [statusCode, response] of Object.entries(typedOperation.responses)) {\n if (response.content) {\n const contentType = Object.keys(response.content)[0];\n schemas.responses[statusCode] = response.content[contentType].schema || response.content[contentType];\n schemas.responses[statusCode].isSchema = !!response.content[contentType].schema;\n }\n }\n }\n\n return schemas;\n }\n }\n }\n\n throw new Error(`Operation with ID \"${operationId}\" not found.`);\n } catch (error) {\n console.error('Error parsing OpenAPI file or finding operation:', error);\n return;\n }\n}\n\nexport async function getOperationsByType(openApiPath: string) {\n try {\n // Parse the OpenAPI document\n const api = await SwaggerParser.validate(openApiPath);\n\n const operations = [];\n\n // Iterate through paths\n for (const path in api.paths) {\n const pathItem = api.paths[path];\n\n // Iterate through each HTTP method in the path\n for (const method in pathItem) {\n // @ts-ignore\n const openAPIOperation = pathItem[method];\n\n // Check if the x-eventcatalog-message-type field is set\n const messageType = openAPIOperation['x-eventcatalog-message-type'] || DEFAULT_MESSAGE_TYPE;\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n } as Operation;\n\n operations.push(operation);\n }\n }\n\n return operations;\n } catch (err) {\n console.error('Error parsing OpenAPI document:', err);\n return [];\n }\n}\n","import { OpenAPI } from 'openapi-types';\nimport { getSchemasByOperationId } from './openapi';\nimport { OpenAPIOperation, OpenAPIParameter, Operation } from '../types';\nimport slugify from 'slugify';\n\nconst markdownForParameters = (parameters: OpenAPIParameter[]) => {\n let markdown = '### Parameters\\n';\n\n for (const parameter of parameters) {\n markdown += `- **${parameter.name}** (${parameter.in})`;\n if (parameter.required) {\n markdown += ' (required)';\n }\n if (parameter.description) {\n markdown += `: ${parameter.description}`;\n }\n markdown += '\\n';\n }\n\n return markdown;\n};\n\nexport const markdownForResponses = (openAPIOperation: OpenAPIOperation) => {\n let markdown = '### Responses\\n';\n\n for (const [statusCode, content] of Object.entries(openAPIOperation.responses as any)) {\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\n<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\n `;\n } else {\n markdown += `**${statusCode} Response**\n \\`\\`\\`json\n${JSON.stringify(content, null, 2)}\n\\`\\`\\`\n `;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n\n\n## Architecture\n<NodeGraph />\n\n${\n message.externalDocs\n ? `\n## External documentation\n- [${message.externalDocs.description}](${message.externalDocs.url})\n`\n : ''\n}\n\n## ${message.method.toUpperCase()} \\`(${message.path})\\`\n\n${openAPIOperation.parameters && openAPIOperation.parameters.length > 0 ? markdownForParameters(openAPIOperation.parameters) : ''}\n\n${\n openAPIOperation.requestBody\n ? `\n### Request Body\n<SchemaViewer file=\"request-body.json\" maxHeight=\"500\" id=\"request-body\" />\n`\n : ''\n}\n\n${markdownForResponses(openAPIOperation)}\n\n`;\n};\n\nexport const getSummary = (message: Operation) => {\n const messageSummary = message.summary ? message.summary : '';\n const messageDescription = message.description ? message.description : '';\n\n let eventCatalogMessageSummary = messageSummary;\n\n if (!eventCatalogMessageSummary) {\n eventCatalogMessageSummary = messageDescription && messageDescription.length < 150 ? messageDescription : '';\n }\n\n return eventCatalogMessageSummary;\n};\n\nexport const buildMessage = async (pathToFile: string, document: OpenAPI.Document, operation: Operation) => {\n const requestBodiesAndResponses = await getSchemasByOperationId(pathToFile, operation.operationId);\n\n const operationTags = operation.tags.map((badge) => ({\n content: `tag:${badge}`,\n textColor: 'blue',\n backgroundColor: 'blue',\n }));\n\n const badges = [{ content: operation.method.toUpperCase(), textColor: 'blue', backgroundColor: 'blue' }, ...operationTags];\n\n const apiName = slugify(document.info.title, { lower: true });\n const path = operation.path.replace(/\\//, '').replace(/\\//g, '_');\n let uniqueIdentifier = operation.operationId || `${apiName}_${operation.method}`;\n\n if (!operation.operationId && path) {\n uniqueIdentifier = uniqueIdentifier.concat(`_${path}`);\n }\n\n return {\n id: uniqueIdentifier,\n version: document.info.version,\n name: uniqueIdentifier,\n summary: getSummary(operation),\n markdown: defaultMarkdown(operation, requestBodiesAndResponses),\n schemaPath: requestBodiesAndResponses?.requestBody ? 'request-body.json' : '',\n badges,\n requestBodiesAndResponses,\n };\n};\n","/**\n * TODO: Move this into the SDK\n */\n\nimport utils from '@eventcatalog/sdk';\n\nexport const getMessageTypeUtils = (projectDirectory: string, messageType: string) => {\n const {\n writeEvent,\n versionCommand,\n getEvent,\n getCommand,\n rmCommandById,\n rmEventById,\n writeCommand,\n addFileToCommand,\n addFileToEvent,\n versionEvent,\n } = utils(projectDirectory);\n\n if (messageType === 'event') {\n return {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n };\n }\n\n // default command\n return {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n };\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, please contact hello@eventcatalog.dev for a license to support the project.`\n )\n );\n};\n"],"mappings":"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","names":["utils","chalk","SwaggerParser","defaultMarkdown","slugify","defaultMarkdown","getSummary","utils","chalk","SwaggerParser"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventcatalog/generator-openapi",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "OpenAPI generator for EventCatalog",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@apidevtools/swagger-parser": "^10.1.0",
29
29
  "@changesets/cli": "^2.27.7",
30
- "@eventcatalog/sdk": "^0.0.12",
30
+ "@eventcatalog/sdk": "^0.1.1",
31
31
  "chalk": "^4",
32
32
  "openapi-types": "^12.1.3",
33
33
  "slugify": "^1.6.6"