@eventcatalog/generator-openapi 4.0.0 → 4.0.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
@@ -188,25 +188,24 @@ var markdownForResponses = (openAPIOperation) => {
188
188
  for (const [statusCode, content] of Object.entries(openAPIOperation.responses)) {
189
189
  if (content.isSchema) {
190
190
  markdown += `**${statusCode} Response**
191
- <SchemaViewer file="response-${statusCode}.json" maxHeight="500" id="response-${statusCode}" />
192
- `;
191
+ `;
192
+ markdown += `<SchemaViewer file="response-${statusCode}.json" maxHeight="500" id="response-${statusCode}" />
193
+
194
+ `;
193
195
  } else {
194
196
  markdown += `**${statusCode} Response**
195
- \`\`\`json
197
+ `;
198
+ markdown += `\`\`\`json
196
199
  ${JSON.stringify(content, null, 2)}
197
200
  \`\`\`
198
- `;
201
+
202
+ `;
199
203
  }
200
204
  }
201
205
  return markdown;
202
206
  };
203
207
  var defaultMarkdown3 = (message, openAPIOperation = {}) => {
204
208
  return `
205
-
206
-
207
- ## Architecture
208
- <NodeGraph />
209
-
210
209
  ${message.description ? `
211
210
  ## Overview
212
211
  ${message.description}
@@ -228,6 +227,10 @@ ${openAPIOperation.requestBody ? `
228
227
 
229
228
  ${markdownForResponses(openAPIOperation)}
230
229
 
230
+ ## Architecture
231
+
232
+ <NodeGraph />
233
+
231
234
  `;
232
235
  };
233
236
  var getSummary2 = (message) => {
@@ -321,7 +324,7 @@ var import_chalk = __toESM(require("chalk"));
321
324
  // package.json
322
325
  var package_default = {
323
326
  name: "@eventcatalog/generator-openapi",
324
- version: "4.0.0",
327
+ version: "4.0.1",
325
328
  description: "OpenAPI generator for EventCatalog",
326
329
  scripts: {
327
330
  build: "tsup",
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","../package.json"],"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, Service } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\nimport yaml from 'js-yaml';\nimport { join } from 'node:path';\ntype Props = {\n services: Service[];\n domain?: Domain;\n debug?: boolean;\n saveParsedSpecFile?: boolean;\n licenseKey?: string;\n writeFilesToRoot?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n process.env.PROJECT_DIR = process.cwd();\n }\n\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n // Check if the license is valid\n await checkLicense(options.licenseKey);\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n writeService,\n addFileToService,\n getSpecificationFilesForService,\n } = utils(process.env.PROJECT_DIR);\n\n const { services = [], saveParsedSpecFile = false } = options;\n for (const serviceSpec of services) {\n console.log(chalk.green(`Processing ${serviceSpec.path}`));\n\n try {\n await SwaggerParser.validate(serviceSpec.path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${serviceSpec.path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const document = await SwaggerParser.dereference(serviceSpec.path);\n const version = document.info.version;\n\n const service = buildService(serviceSpec, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecificationsFiles = [];\n let serviceSpecifications = service.specifications;\n\n // Have to ../ as the SDK will put the files into hard coded folders\n let servicePath = options.domain\n ? join('../', 'domains', options.domain.id, 'services', service.id)\n : join('../', 'services', service.id);\n if (options.writeFilesToRoot) {\n servicePath = service.id;\n }\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(serviceSpec.path, document, servicePath, options);\n let owners = [];\n let repository = null;\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 serviceSpecificationsFiles = await getSpecificationFilesForService(service.id, 'latest');\n sends = latestServiceInCatalog.sends || ([] as any);\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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 receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n ...(owners ? { owners } : {}),\n ...(repository ? { repository } : {}),\n },\n { path: join(servicePath), override: true }\n );\n\n // What files need added to the service (specification files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(serviceSpec, document) : await getRawSpecFile(serviceSpec),\n fileName: service.schemaPath,\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n service.id,\n {\n fileName: specFile.fileName,\n content: specFile.content,\n },\n version\n );\n }\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n};\n\nconst processMessagesForOpenAPISpec = async (\n pathToSpec: string,\n document: OpenAPI.Document,\n servicePath: string,\n options: Props\n) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [],\n sends = [];\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 const messageAction = operation.action;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${message.version})`));\n\n const {\n addFileToMessage,\n writeMessage,\n getMessage,\n versionMessage,\n collection: folder,\n } = getMessageTypeUtils(process.env.PROJECT_DIR as string, messageType);\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 // 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 let messagePath = join(servicePath, folder, message.id);\n if (options.writeFilesToRoot) {\n messagePath = message.id;\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: messagePath, override: true });\n\n // If the message send or recieved by the service?\n if (messageAction === 'sends') {\n sends.push({\n id: message.id,\n version: message.version,\n });\n } else {\n receives.push({\n id: message.id,\n version: message.version,\n });\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${message.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\nconst getParsedSpecFile = (service: Service, document: OpenAPI.Document) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON ? JSON.stringify(document, null, 2) : yaml.dump(document, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n const file = await fetch(service.path, { method: 'GET' });\n if (!file.ok) {\n throw new Error(`Failed to fetch file: ${service.path}, status: ${file.status}`);\n }\n return await file.text();\n }\n return await readFile(service.path, 'utf8');\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';\nimport { Service } from '../types';\nimport path from 'path';\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${\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 = (serviceOptions: Service, document: OpenAPI.Document) => {\n const schemaPath = path.basename(serviceOptions.path) || 'openapi.yml';\n const documentTags = document.tags || [];\n const serviceId = serviceOptions.id || slugify(document.info.title, { lower: true, strict: true });\n return {\n id: serviceId,\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 const messageAction = openAPIOperation['x-eventcatalog-message-action'] === 'sends' ? 'sends' : 'receives';\n const extensions = Object.keys(openAPIOperation).reduce((acc: { [key: string]: any }, key) => {\n if (key.startsWith('x-eventcatalog-')) {\n acc[key] = openAPIOperation[key];\n }\n return acc;\n }, {});\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n action: messageAction,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n extensions,\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.description\n ? `\n## Overview\n${message.description}\n`\n : ''\n}\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 const extensions = operation.extensions || {};\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: extensions['x-eventcatalog-message-id'] || uniqueIdentifier,\n version: extensions['x-eventcatalog-message-version'] || document.info.version,\n name: extensions['x-eventcatalog-message-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 versionQuery,\n getQuery,\n rmQueryById,\n writeQuery,\n addFileToQuery,\n } = utils(projectDirectory);\n\n const messageTypeMap: { [key: string]: any } = {\n event: {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n collection: 'events',\n },\n command: {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n collection: 'commands',\n },\n query: {\n versionMessage: versionQuery,\n getMessage: getQuery,\n rmMessageById: rmQueryById,\n writeMessage: writeQuery,\n addFileToMessage: addFileToQuery,\n collection: 'queries',\n },\n };\n\n return messageTypeMap[messageType] || messageTypeMap.query;\n};\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\ntype LicenseResponse = {\n is_trial: boolean;\n plugin: string;\n state: string;\n};\n\nexport default async (licenseKey?: string) => {\n const LICENSE_KEY = process.env.EVENTCATALOG_LICENSE_KEY_OPENAPI || licenseKey || null;\n\n if (!LICENSE_KEY) {\n console.log(chalk.bgRed(`\\nThis plugin requires a license key to use`));\n console.log(chalk.redBright(`\\nVisit https://eventcatalog.cloud/ to get a 14 day trial or purchase a license`));\n process.exit(1);\n }\n\n // Verify the license key\n const response = await fetch('https://api.eventcatalog.cloud/functions/v1/license', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${LICENSE_KEY}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.status !== 200) {\n console.log(chalk.bgRed(`\\nInvalid license key`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (response.status === 200) {\n const data = (await response.json()) as LicenseResponse;\n\n if (pkg.name !== data.plugin) {\n console.log(chalk.bgRed(`\\nInvalid license key for this plugin`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (data.is_trial) {\n console.log(chalk.bgBlue(`\\nYou are using a trial license for this plugin`));\n }\n }\n\n return Promise.resolve();\n};\n","{\n \"name\": \"@eventcatalog/generator-openapi\",\n \"version\": \"4.0.0\",\n \"description\": \"OpenAPI generator for EventCatalog\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest\",\n \"format\": \"prettier --write .\",\n \"format:diff\": \"prettier --list-different .\",\n \"changeset\": \"changeset\",\n \"release\": \"changeset publish\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash\": \"^4.17.7\",\n \"@types/node\": \"^20.16.1\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.1.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.2\"\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@changesets/cli\": \"^2.27.7\",\n \"@eventcatalog/sdk\": \"^1.4.8\",\n \"chalk\": \"^4\",\n \"js-yaml\": \"^4.1.0\",\n \"openapi-types\": \"^12.1.3\",\n \"slugify\": \"^1.6.6\"\n }\n}\n"],"mappings":"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","names":["import_sdk","import_chalk","import_swagger_parser","defaultMarkdown","path","slugify","SwaggerParser","path","import_slugify","defaultMarkdown","getSummary","slugify","path","utils","chalk","utils","chalk","SwaggerParser","yaml"]}
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","../package.json"],"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, Service } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\nimport yaml from 'js-yaml';\nimport { join } from 'node:path';\ntype Props = {\n services: Service[];\n domain?: Domain;\n debug?: boolean;\n saveParsedSpecFile?: boolean;\n licenseKey?: string;\n writeFilesToRoot?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n process.env.PROJECT_DIR = process.cwd();\n }\n\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n // Check if the license is valid\n await checkLicense(options.licenseKey);\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n writeService,\n addFileToService,\n getSpecificationFilesForService,\n } = utils(process.env.PROJECT_DIR);\n\n const { services = [], saveParsedSpecFile = false } = options;\n for (const serviceSpec of services) {\n console.log(chalk.green(`Processing ${serviceSpec.path}`));\n\n try {\n await SwaggerParser.validate(serviceSpec.path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${serviceSpec.path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const document = await SwaggerParser.dereference(serviceSpec.path);\n const version = document.info.version;\n\n const service = buildService(serviceSpec, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecificationsFiles = [];\n let serviceSpecifications = service.specifications;\n\n // Have to ../ as the SDK will put the files into hard coded folders\n let servicePath = options.domain\n ? join('../', 'domains', options.domain.id, 'services', service.id)\n : join('../', 'services', service.id);\n if (options.writeFilesToRoot) {\n servicePath = service.id;\n }\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(serviceSpec.path, document, servicePath, options);\n let owners = [];\n let repository = null;\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 serviceSpecificationsFiles = await getSpecificationFilesForService(service.id, 'latest');\n sends = latestServiceInCatalog.sends || ([] as any);\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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 receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n ...(owners ? { owners } : {}),\n ...(repository ? { repository } : {}),\n },\n { path: join(servicePath), override: true }\n );\n\n // What files need added to the service (specification files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(serviceSpec, document) : await getRawSpecFile(serviceSpec),\n fileName: service.schemaPath,\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n service.id,\n {\n fileName: specFile.fileName,\n content: specFile.content,\n },\n version\n );\n }\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n};\n\nconst processMessagesForOpenAPISpec = async (\n pathToSpec: string,\n document: OpenAPI.Document,\n servicePath: string,\n options: Props\n) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [],\n sends = [];\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 const messageAction = operation.action;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${message.version})`));\n\n const {\n addFileToMessage,\n writeMessage,\n getMessage,\n versionMessage,\n collection: folder,\n } = getMessageTypeUtils(process.env.PROJECT_DIR as string, messageType);\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 // 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 let messagePath = join(servicePath, folder, message.id);\n if (options.writeFilesToRoot) {\n messagePath = message.id;\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: messagePath, override: true });\n\n // If the message send or recieved by the service?\n if (messageAction === 'sends') {\n sends.push({\n id: message.id,\n version: message.version,\n });\n } else {\n receives.push({\n id: message.id,\n version: message.version,\n });\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${message.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\nconst getParsedSpecFile = (service: Service, document: OpenAPI.Document) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON ? JSON.stringify(document, null, 2) : yaml.dump(document, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n const file = await fetch(service.path, { method: 'GET' });\n if (!file.ok) {\n throw new Error(`Failed to fetch file: ${service.path}, status: ${file.status}`);\n }\n return await file.text();\n }\n return await readFile(service.path, 'utf8');\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';\nimport { Service } from '../types';\nimport path from 'path';\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${\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 = (serviceOptions: Service, document: OpenAPI.Document) => {\n const schemaPath = path.basename(serviceOptions.path) || 'openapi.yml';\n const documentTags = document.tags || [];\n const serviceId = serviceOptions.id || slugify(document.info.title, { lower: true, strict: true });\n return {\n id: serviceId,\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 const messageAction = openAPIOperation['x-eventcatalog-message-action'] === 'sends' ? 'sends' : 'receives';\n const extensions = Object.keys(openAPIOperation).reduce((acc: { [key: string]: any }, key) => {\n if (key.startsWith('x-eventcatalog-')) {\n acc[key] = openAPIOperation[key];\n }\n return acc;\n }, {});\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n action: messageAction,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n extensions,\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 // @ts-ignore\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\\n`;\n markdown += `<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\\n\\n`;\n } else {\n markdown += `**${statusCode} Response**\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(content, null, 2)}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n${\n message.description\n ? `\n## Overview\n${message.description}\n`\n : ''\n}\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## Architecture\n\n<NodeGraph />\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 const extensions = operation.extensions || {};\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: extensions['x-eventcatalog-message-id'] || uniqueIdentifier,\n version: extensions['x-eventcatalog-message-version'] || document.info.version,\n name: extensions['x-eventcatalog-message-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 versionQuery,\n getQuery,\n rmQueryById,\n writeQuery,\n addFileToQuery,\n } = utils(projectDirectory);\n\n const messageTypeMap: { [key: string]: any } = {\n event: {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n collection: 'events',\n },\n command: {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n collection: 'commands',\n },\n query: {\n versionMessage: versionQuery,\n getMessage: getQuery,\n rmMessageById: rmQueryById,\n writeMessage: writeQuery,\n addFileToMessage: addFileToQuery,\n collection: 'queries',\n },\n };\n\n return messageTypeMap[messageType] || messageTypeMap.query;\n};\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\ntype LicenseResponse = {\n is_trial: boolean;\n plugin: string;\n state: string;\n};\n\nexport default async (licenseKey?: string) => {\n const LICENSE_KEY = process.env.EVENTCATALOG_LICENSE_KEY_OPENAPI || licenseKey || null;\n\n if (!LICENSE_KEY) {\n console.log(chalk.bgRed(`\\nThis plugin requires a license key to use`));\n console.log(chalk.redBright(`\\nVisit https://eventcatalog.cloud/ to get a 14 day trial or purchase a license`));\n process.exit(1);\n }\n\n // Verify the license key\n const response = await fetch('https://api.eventcatalog.cloud/functions/v1/license', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${LICENSE_KEY}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.status !== 200) {\n console.log(chalk.bgRed(`\\nInvalid license key`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (response.status === 200) {\n const data = (await response.json()) as LicenseResponse;\n\n if (pkg.name !== data.plugin) {\n console.log(chalk.bgRed(`\\nInvalid license key for this plugin`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (data.is_trial) {\n console.log(chalk.bgBlue(`\\nYou are using a trial license for this plugin`));\n }\n }\n\n return Promise.resolve();\n};\n","{\n \"name\": \"@eventcatalog/generator-openapi\",\n \"version\": \"4.0.1\",\n \"description\": \"OpenAPI generator for EventCatalog\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest\",\n \"format\": \"prettier --write .\",\n \"format:diff\": \"prettier --list-different .\",\n \"changeset\": \"changeset\",\n \"release\": \"changeset publish\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash\": \"^4.17.7\",\n \"@types/node\": \"^20.16.1\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.1.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.2\"\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@changesets/cli\": \"^2.27.7\",\n \"@eventcatalog/sdk\": \"^1.4.8\",\n \"chalk\": \"^4\",\n \"js-yaml\": \"^4.1.0\",\n \"openapi-types\": \"^12.1.3\",\n \"slugify\": \"^1.6.6\"\n }\n}\n"],"mappings":"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","names":["import_sdk","import_chalk","import_swagger_parser","defaultMarkdown","path","slugify","SwaggerParser","path","import_slugify","defaultMarkdown","getSummary","slugify","path","utils","chalk","utils","chalk","SwaggerParser","yaml"]}
package/dist/index.mjs CHANGED
@@ -154,25 +154,24 @@ var markdownForResponses = (openAPIOperation) => {
154
154
  for (const [statusCode, content] of Object.entries(openAPIOperation.responses)) {
155
155
  if (content.isSchema) {
156
156
  markdown += `**${statusCode} Response**
157
- <SchemaViewer file="response-${statusCode}.json" maxHeight="500" id="response-${statusCode}" />
158
- `;
157
+ `;
158
+ markdown += `<SchemaViewer file="response-${statusCode}.json" maxHeight="500" id="response-${statusCode}" />
159
+
160
+ `;
159
161
  } else {
160
162
  markdown += `**${statusCode} Response**
161
- \`\`\`json
163
+ `;
164
+ markdown += `\`\`\`json
162
165
  ${JSON.stringify(content, null, 2)}
163
166
  \`\`\`
164
- `;
167
+
168
+ `;
165
169
  }
166
170
  }
167
171
  return markdown;
168
172
  };
169
173
  var defaultMarkdown3 = (message, openAPIOperation = {}) => {
170
174
  return `
171
-
172
-
173
- ## Architecture
174
- <NodeGraph />
175
-
176
175
  ${message.description ? `
177
176
  ## Overview
178
177
  ${message.description}
@@ -194,6 +193,10 @@ ${openAPIOperation.requestBody ? `
194
193
 
195
194
  ${markdownForResponses(openAPIOperation)}
196
195
 
196
+ ## Architecture
197
+
198
+ <NodeGraph />
199
+
197
200
  `;
198
201
  };
199
202
  var getSummary2 = (message) => {
@@ -287,7 +290,7 @@ import chalk from "chalk";
287
290
  // package.json
288
291
  var package_default = {
289
292
  name: "@eventcatalog/generator-openapi",
290
- version: "4.0.0",
293
+ version: "4.0.1",
291
294
  description: "OpenAPI generator for EventCatalog",
292
295
  scripts: {
293
296
  build: "tsup",
@@ -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","../package.json"],"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, Service } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\nimport yaml from 'js-yaml';\nimport { join } from 'node:path';\ntype Props = {\n services: Service[];\n domain?: Domain;\n debug?: boolean;\n saveParsedSpecFile?: boolean;\n licenseKey?: string;\n writeFilesToRoot?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n process.env.PROJECT_DIR = process.cwd();\n }\n\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n // Check if the license is valid\n await checkLicense(options.licenseKey);\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n writeService,\n addFileToService,\n getSpecificationFilesForService,\n } = utils(process.env.PROJECT_DIR);\n\n const { services = [], saveParsedSpecFile = false } = options;\n for (const serviceSpec of services) {\n console.log(chalk.green(`Processing ${serviceSpec.path}`));\n\n try {\n await SwaggerParser.validate(serviceSpec.path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${serviceSpec.path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const document = await SwaggerParser.dereference(serviceSpec.path);\n const version = document.info.version;\n\n const service = buildService(serviceSpec, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecificationsFiles = [];\n let serviceSpecifications = service.specifications;\n\n // Have to ../ as the SDK will put the files into hard coded folders\n let servicePath = options.domain\n ? join('../', 'domains', options.domain.id, 'services', service.id)\n : join('../', 'services', service.id);\n if (options.writeFilesToRoot) {\n servicePath = service.id;\n }\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(serviceSpec.path, document, servicePath, options);\n let owners = [];\n let repository = null;\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 serviceSpecificationsFiles = await getSpecificationFilesForService(service.id, 'latest');\n sends = latestServiceInCatalog.sends || ([] as any);\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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 receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n ...(owners ? { owners } : {}),\n ...(repository ? { repository } : {}),\n },\n { path: join(servicePath), override: true }\n );\n\n // What files need added to the service (specification files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(serviceSpec, document) : await getRawSpecFile(serviceSpec),\n fileName: service.schemaPath,\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n service.id,\n {\n fileName: specFile.fileName,\n content: specFile.content,\n },\n version\n );\n }\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n};\n\nconst processMessagesForOpenAPISpec = async (\n pathToSpec: string,\n document: OpenAPI.Document,\n servicePath: string,\n options: Props\n) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [],\n sends = [];\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 const messageAction = operation.action;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${message.version})`));\n\n const {\n addFileToMessage,\n writeMessage,\n getMessage,\n versionMessage,\n collection: folder,\n } = getMessageTypeUtils(process.env.PROJECT_DIR as string, messageType);\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 // 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 let messagePath = join(servicePath, folder, message.id);\n if (options.writeFilesToRoot) {\n messagePath = message.id;\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: messagePath, override: true });\n\n // If the message send or recieved by the service?\n if (messageAction === 'sends') {\n sends.push({\n id: message.id,\n version: message.version,\n });\n } else {\n receives.push({\n id: message.id,\n version: message.version,\n });\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${message.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\nconst getParsedSpecFile = (service: Service, document: OpenAPI.Document) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON ? JSON.stringify(document, null, 2) : yaml.dump(document, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n const file = await fetch(service.path, { method: 'GET' });\n if (!file.ok) {\n throw new Error(`Failed to fetch file: ${service.path}, status: ${file.status}`);\n }\n return await file.text();\n }\n return await readFile(service.path, 'utf8');\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';\nimport { Service } from '../types';\nimport path from 'path';\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${\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 = (serviceOptions: Service, document: OpenAPI.Document) => {\n const schemaPath = path.basename(serviceOptions.path) || 'openapi.yml';\n const documentTags = document.tags || [];\n const serviceId = serviceOptions.id || slugify(document.info.title, { lower: true, strict: true });\n return {\n id: serviceId,\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 const messageAction = openAPIOperation['x-eventcatalog-message-action'] === 'sends' ? 'sends' : 'receives';\n const extensions = Object.keys(openAPIOperation).reduce((acc: { [key: string]: any }, key) => {\n if (key.startsWith('x-eventcatalog-')) {\n acc[key] = openAPIOperation[key];\n }\n return acc;\n }, {});\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n action: messageAction,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n extensions,\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.description\n ? `\n## Overview\n${message.description}\n`\n : ''\n}\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 const extensions = operation.extensions || {};\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: extensions['x-eventcatalog-message-id'] || uniqueIdentifier,\n version: extensions['x-eventcatalog-message-version'] || document.info.version,\n name: extensions['x-eventcatalog-message-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 versionQuery,\n getQuery,\n rmQueryById,\n writeQuery,\n addFileToQuery,\n } = utils(projectDirectory);\n\n const messageTypeMap: { [key: string]: any } = {\n event: {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n collection: 'events',\n },\n command: {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n collection: 'commands',\n },\n query: {\n versionMessage: versionQuery,\n getMessage: getQuery,\n rmMessageById: rmQueryById,\n writeMessage: writeQuery,\n addFileToMessage: addFileToQuery,\n collection: 'queries',\n },\n };\n\n return messageTypeMap[messageType] || messageTypeMap.query;\n};\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\ntype LicenseResponse = {\n is_trial: boolean;\n plugin: string;\n state: string;\n};\n\nexport default async (licenseKey?: string) => {\n const LICENSE_KEY = process.env.EVENTCATALOG_LICENSE_KEY_OPENAPI || licenseKey || null;\n\n if (!LICENSE_KEY) {\n console.log(chalk.bgRed(`\\nThis plugin requires a license key to use`));\n console.log(chalk.redBright(`\\nVisit https://eventcatalog.cloud/ to get a 14 day trial or purchase a license`));\n process.exit(1);\n }\n\n // Verify the license key\n const response = await fetch('https://api.eventcatalog.cloud/functions/v1/license', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${LICENSE_KEY}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.status !== 200) {\n console.log(chalk.bgRed(`\\nInvalid license key`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (response.status === 200) {\n const data = (await response.json()) as LicenseResponse;\n\n if (pkg.name !== data.plugin) {\n console.log(chalk.bgRed(`\\nInvalid license key for this plugin`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (data.is_trial) {\n console.log(chalk.bgBlue(`\\nYou are using a trial license for this plugin`));\n }\n }\n\n return Promise.resolve();\n};\n","{\n \"name\": \"@eventcatalog/generator-openapi\",\n \"version\": \"4.0.0\",\n \"description\": \"OpenAPI generator for EventCatalog\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest\",\n \"format\": \"prettier --write .\",\n \"format:diff\": \"prettier --list-different .\",\n \"changeset\": \"changeset\",\n \"release\": \"changeset publish\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash\": \"^4.17.7\",\n \"@types/node\": \"^20.16.1\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.1.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.2\"\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@changesets/cli\": \"^2.27.7\",\n \"@eventcatalog/sdk\": \"^1.4.8\",\n \"chalk\": \"^4\",\n \"js-yaml\": \"^4.1.0\",\n \"openapi-types\": \"^12.1.3\",\n \"slugify\": \"^1.6.6\"\n }\n}\n"],"mappings":"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","names":["utils","chalk","SwaggerParser","defaultMarkdown","path","slugify","defaultMarkdown","getSummary","path","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","../package.json"],"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, Service } from './types';\nimport { getMessageTypeUtils } from './utils/catalog-shorthand';\nimport { OpenAPI } from 'openapi-types';\nimport checkLicense from './utils/checkLicense';\nimport yaml from 'js-yaml';\nimport { join } from 'node:path';\ntype Props = {\n services: Service[];\n domain?: Domain;\n debug?: boolean;\n saveParsedSpecFile?: boolean;\n licenseKey?: string;\n writeFilesToRoot?: boolean;\n};\n\nexport default async (_: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n process.env.PROJECT_DIR = process.cwd();\n }\n\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n // Check if the license is valid\n await checkLicense(options.licenseKey);\n\n const {\n getDomain,\n versionDomain,\n writeDomain,\n addServiceToDomain,\n getService,\n versionService,\n writeService,\n addFileToService,\n getSpecificationFilesForService,\n } = utils(process.env.PROJECT_DIR);\n\n const { services = [], saveParsedSpecFile = false } = options;\n for (const serviceSpec of services) {\n console.log(chalk.green(`Processing ${serviceSpec.path}`));\n\n try {\n await SwaggerParser.validate(serviceSpec.path);\n } catch (error) {\n console.error(chalk.red(`Failed to parse OpenAPI file: ${serviceSpec.path}`));\n console.error(chalk.red(error));\n continue;\n }\n\n const document = await SwaggerParser.dereference(serviceSpec.path);\n const version = document.info.version;\n\n const service = buildService(serviceSpec, document);\n let serviceMarkdown = service.markdown;\n let serviceSpecificationsFiles = [];\n let serviceSpecifications = service.specifications;\n\n // Have to ../ as the SDK will put the files into hard coded folders\n let servicePath = options.domain\n ? join('../', 'domains', options.domain.id, 'services', service.id)\n : join('../', 'services', service.id);\n if (options.writeFilesToRoot) {\n servicePath = service.id;\n }\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(serviceSpec.path, document, servicePath, options);\n let owners = [];\n let repository = null;\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 serviceSpecificationsFiles = await getSpecificationFilesForService(service.id, 'latest');\n sends = latestServiceInCatalog.sends || ([] as any);\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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 receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n }\n }\n\n await writeService(\n {\n ...service,\n markdown: serviceMarkdown,\n specifications: serviceSpecifications,\n sends,\n receives,\n ...(owners ? { owners } : {}),\n ...(repository ? { repository } : {}),\n },\n { path: join(servicePath), override: true }\n );\n\n // What files need added to the service (specification files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(serviceSpec, document) : await getRawSpecFile(serviceSpec),\n fileName: service.schemaPath,\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n service.id,\n {\n fileName: specFile.fileName,\n content: specFile.content,\n },\n version\n );\n }\n\n console.log(chalk.cyan(` - Service (v${version}) created`));\n }\n};\n\nconst processMessagesForOpenAPISpec = async (\n pathToSpec: string,\n document: OpenAPI.Document,\n servicePath: string,\n options: Props\n) => {\n const operations = await getOperationsByType(pathToSpec);\n const version = document.info.version;\n let receives = [],\n sends = [];\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 const messageAction = operation.action;\n\n console.log(chalk.blue(`Processing message: ${message.name} (v${message.version})`));\n\n const {\n addFileToMessage,\n writeMessage,\n getMessage,\n versionMessage,\n collection: folder,\n } = getMessageTypeUtils(process.env.PROJECT_DIR as string, messageType);\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 // 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 let messagePath = join(servicePath, folder, message.id);\n if (options.writeFilesToRoot) {\n messagePath = message.id;\n }\n\n // Write the message to the catalog\n await writeMessage({ ...message, markdown: messageMarkdown }, { path: messagePath, override: true });\n\n // If the message send or recieved by the service?\n if (messageAction === 'sends') {\n sends.push({\n id: message.id,\n version: message.version,\n });\n } else {\n receives.push({\n id: message.id,\n version: message.version,\n });\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${message.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\nconst getParsedSpecFile = (service: Service, document: OpenAPI.Document) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON ? JSON.stringify(document, null, 2) : yaml.dump(document, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n const file = await fetch(service.path, { method: 'GET' });\n if (!file.ok) {\n throw new Error(`Failed to fetch file: ${service.path}, status: ${file.status}`);\n }\n return await file.text();\n }\n return await readFile(service.path, 'utf8');\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';\nimport { Service } from '../types';\nimport path from 'path';\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${\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 = (serviceOptions: Service, document: OpenAPI.Document) => {\n const schemaPath = path.basename(serviceOptions.path) || 'openapi.yml';\n const documentTags = document.tags || [];\n const serviceId = serviceOptions.id || slugify(document.info.title, { lower: true, strict: true });\n return {\n id: serviceId,\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 const messageAction = openAPIOperation['x-eventcatalog-message-action'] === 'sends' ? 'sends' : 'receives';\n const extensions = Object.keys(openAPIOperation).reduce((acc: { [key: string]: any }, key) => {\n if (key.startsWith('x-eventcatalog-')) {\n acc[key] = openAPIOperation[key];\n }\n return acc;\n }, {});\n\n const operation = {\n path: path,\n method: method.toUpperCase(),\n operationId: openAPIOperation.operationId,\n externalDocs: openAPIOperation.externalDocs,\n type: messageType,\n action: messageAction,\n description: openAPIOperation.description,\n summary: openAPIOperation.summary,\n tags: openAPIOperation.tags || [],\n extensions,\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 // @ts-ignore\n if (content.isSchema) {\n markdown += `**${statusCode} Response**\\n`;\n markdown += `<SchemaViewer file=\"response-${statusCode}.json\" maxHeight=\"500\" id=\"response-${statusCode}\" />\\n\\n`;\n } else {\n markdown += `**${statusCode} Response**\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(content, null, 2)}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n return markdown;\n};\n\nexport const defaultMarkdown = (message: Operation, openAPIOperation: OpenAPIOperation = {}) => {\n return `\n${\n message.description\n ? `\n## Overview\n${message.description}\n`\n : ''\n}\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## Architecture\n\n<NodeGraph />\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 const extensions = operation.extensions || {};\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: extensions['x-eventcatalog-message-id'] || uniqueIdentifier,\n version: extensions['x-eventcatalog-message-version'] || document.info.version,\n name: extensions['x-eventcatalog-message-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 versionQuery,\n getQuery,\n rmQueryById,\n writeQuery,\n addFileToQuery,\n } = utils(projectDirectory);\n\n const messageTypeMap: { [key: string]: any } = {\n event: {\n versionMessage: versionEvent,\n getMessage: getEvent,\n rmMessageById: rmEventById,\n writeMessage: writeEvent,\n addFileToMessage: addFileToEvent,\n collection: 'events',\n },\n command: {\n versionMessage: versionCommand,\n getMessage: getCommand,\n rmMessageById: rmCommandById,\n writeMessage: writeCommand,\n addFileToMessage: addFileToCommand,\n collection: 'commands',\n },\n query: {\n versionMessage: versionQuery,\n getMessage: getQuery,\n rmMessageById: rmQueryById,\n writeMessage: writeQuery,\n addFileToMessage: addFileToQuery,\n collection: 'queries',\n },\n };\n\n return messageTypeMap[messageType] || messageTypeMap.query;\n};\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\ntype LicenseResponse = {\n is_trial: boolean;\n plugin: string;\n state: string;\n};\n\nexport default async (licenseKey?: string) => {\n const LICENSE_KEY = process.env.EVENTCATALOG_LICENSE_KEY_OPENAPI || licenseKey || null;\n\n if (!LICENSE_KEY) {\n console.log(chalk.bgRed(`\\nThis plugin requires a license key to use`));\n console.log(chalk.redBright(`\\nVisit https://eventcatalog.cloud/ to get a 14 day trial or purchase a license`));\n process.exit(1);\n }\n\n // Verify the license key\n const response = await fetch('https://api.eventcatalog.cloud/functions/v1/license', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${LICENSE_KEY}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.status !== 200) {\n console.log(chalk.bgRed(`\\nInvalid license key`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (response.status === 200) {\n const data = (await response.json()) as LicenseResponse;\n\n if (pkg.name !== data.plugin) {\n console.log(chalk.bgRed(`\\nInvalid license key for this plugin`));\n console.log(chalk.redBright('Please check your plugin license key or purchase a license at https://eventcatalog.cloud/'));\n process.exit(1);\n }\n\n if (data.is_trial) {\n console.log(chalk.bgBlue(`\\nYou are using a trial license for this plugin`));\n }\n }\n\n return Promise.resolve();\n};\n","{\n \"name\": \"@eventcatalog/generator-openapi\",\n \"version\": \"4.0.1\",\n \"description\": \"OpenAPI generator for EventCatalog\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest\",\n \"format\": \"prettier --write .\",\n \"format:diff\": \"prettier --list-different .\",\n \"changeset\": \"changeset\",\n \"release\": \"changeset publish\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash\": \"^4.17.7\",\n \"@types/node\": \"^20.16.1\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.1.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.2\"\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@changesets/cli\": \"^2.27.7\",\n \"@eventcatalog/sdk\": \"^1.4.8\",\n \"chalk\": \"^4\",\n \"js-yaml\": \"^4.1.0\",\n \"openapi-types\": \"^12.1.3\",\n \"slugify\": \"^1.6.6\"\n }\n}\n"],"mappings":"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","names":["utils","chalk","SwaggerParser","defaultMarkdown","path","slugify","defaultMarkdown","getSummary","path","utils","chalk","SwaggerParser"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventcatalog/generator-openapi",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "OpenAPI generator for EventCatalog",
5
5
  "publishConfig": {
6
6
  "access": "public"