@eventcatalog/generator-asyncapi 2.7.0 → 2.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,6 +23,8 @@
23
23
  - ⭐ Download your AsyncAPI files and message schemas form EventCatalog (e.g Avro, JSON) ([demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/0.0.4))
24
24
  - 💅 Custom MDX components ([read more](https://eventcatalog.dev/docs/development/components/using-components))
25
25
  - 🗄️ Auto versioning of your domains, services and messages
26
+ - ⭐ [Document your channels and protocols](https://www.eventcatalog.dev/docs/development/plugins/async-api/features#mapping-channels-into-eventcatalog)
27
+ - ⭐ [Document queries, commands and events with your AsyncAPI file using EventCatalog extensions](https://www.eventcatalog.dev/docs/development/plugins/async-api/features#mapping-messages-events-commands-or-queries)
26
28
  - ⭐ Discoverability feature (search, filter and more) ([demo](https://demo.eventcatalog.dev/discover/events))
27
29
  - ⭐ And much more...
28
30
 
package/dist/index.js CHANGED
@@ -224,6 +224,9 @@ var validateOptions = (options) => {
224
224
  }
225
225
  };
226
226
  var src_default = async (config, options) => {
227
+ if (!process.env.PROJECT_DIR) {
228
+ process.env.PROJECT_DIR = process.cwd();
229
+ }
227
230
  if (!process.env.PROJECT_DIR) {
228
231
  throw new Error("Please provide catalog url (env variable PROJECT_DIR)");
229
232
  }
@@ -300,6 +303,8 @@ var src_default = async (config, options) => {
300
303
  const version = document.info().version();
301
304
  let sends = [];
302
305
  let receives = [];
306
+ let owners = null;
307
+ let repository = null;
303
308
  let serviceSpecifications = {};
304
309
  let serviceSpecificationsFiles = [];
305
310
  let serviceMarkdown = defaultMarkdown2(document);
@@ -443,6 +448,8 @@ Processing domain: ${domainName} (v${domainVersion})`));
443
448
  console.log(import_chalk2.default.blue(`Processing service: ${serviceId} (v${version})`));
444
449
  if (latestServiceInCatalog) {
445
450
  serviceMarkdown = latestServiceInCatalog.markdown;
451
+ owners = latestServiceInCatalog.owners || [];
452
+ repository = latestServiceInCatalog.repository || null;
446
453
  if (latestServiceInCatalog.version !== version) {
447
454
  await versionService(serviceId);
448
455
  console.log(import_chalk2.default.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
@@ -470,7 +477,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
470
477
  specifications: {
471
478
  ...serviceSpecifications,
472
479
  asyncapiPath: fileName || "asyncapi.yml"
473
- }
480
+ },
481
+ ...owners && { owners },
482
+ ...repository && { repository }
474
483
  },
475
484
  {
476
485
  override: true
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/schemas.ts","../src/utils/messages.ts","../src/utils/services.ts","../src/utils/domains.ts","../src/utils/channels.ts","../src/checkLicense.ts"],"sourcesContent":["import { AsyncAPIDocumentInterface, MessageInterface, Parser, fromFile, fromURL } from '@asyncapi/parser';\nimport utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport argv from 'minimist';\nimport yaml from 'js-yaml';\nimport { z } from 'zod';\nimport chalk from 'chalk';\nimport path from 'path';\n\n// AsyncAPI Parsers\nimport { AvroSchemaParser } from '@asyncapi/avro-schema-parser';\n\nimport {\n defaultMarkdown as generateMarkdownForMessage,\n getChannelsForMessage,\n getMessageName,\n getSummary as getMessageSummary,\n getSchemaFileName,\n messageHasSchema,\n} from './utils/messages';\nimport { defaultMarkdown as generateMarkdownForService, getSummary as getServiceSummary } from './utils/services';\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { defaultMarkdown as generateMarkdownForChannel, getChannelProtocols } from './utils/channels';\nimport checkLicense from './checkLicense';\n\nimport { EventType, MessageOperations } from './types';\n\nconst parser = new Parser();\n\n// register avro schema support\nparser.registerSchemaParser(AvroSchemaParser());\nconst cliArgs = argv(process.argv.slice(2));\n\nconst optionsSchema = z.object({\n services: z.array(\n z.object({\n id: z.string({ required_error: 'The service id is required. please provide the service id' }),\n path: z.string({ required_error: 'The service path is required. please provide the path to specification file' }),\n name: z.string().optional(),\n }),\n { message: 'Please provide correct services configuration' }\n ),\n domain: z\n .object({\n id: z.string({ required_error: 'The domain id is required. please provide a domain id' }),\n name: z.string({ required_error: 'The domain name is required. please provide a domain name' }),\n version: z.string({ required_error: 'The domain version is required. please provide a domain version' }),\n })\n .optional(),\n debug: z.boolean().optional(),\n parseSchemas: z.boolean().optional(),\n parseChannels: z.boolean().optional(),\n saveParsedSpecFile: z.boolean({ invalid_type_error: 'The saveParsedSpecFile is not a boolean in options' }).optional(),\n});\n\ntype Props = z.infer<typeof optionsSchema>;\ntype Domain = z.infer<typeof optionsSchema>['domain'];\ntype Service = z.infer<typeof optionsSchema>['services'][0];\n\nconst validateOptions = (options: Props) => {\n try {\n optionsSchema.parse(options);\n } catch (error: any) {\n if (error instanceof z.ZodError) throw new Error(JSON.stringify(error.issues, null, 2));\n }\n};\n\nexport default async (config: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n writeService,\n writeEvent,\n writeCommand,\n writeQuery,\n getService,\n versionService,\n getDomain,\n writeDomain,\n addServiceToDomain,\n getCommand,\n getEvent,\n getQuery,\n versionCommand,\n versionEvent,\n versionQuery,\n addSchemaToCommand,\n addSchemaToEvent,\n addSchemaToQuery,\n addFileToService,\n versionDomain,\n getSpecificationFilesForService,\n writeChannel,\n getChannel,\n versionChannel,\n } = utils(process.env.PROJECT_DIR);\n\n // Define the message operations mapping with proper types\n const MESSAGE_OPERATIONS: Record<EventType, MessageOperations> = {\n event: {\n write: writeEvent,\n version: versionEvent,\n get: getEvent,\n addSchema: addSchemaToEvent,\n },\n command: {\n write: writeCommand,\n version: versionCommand,\n get: getCommand,\n addSchema: addSchemaToCommand,\n },\n query: {\n write: writeQuery,\n version: versionQuery,\n get: getQuery,\n addSchema: addSchemaToQuery,\n },\n };\n\n // Should the file that is written to the catalog be parsed (https://github.com/asyncapi/parser-js) or as it is?\n validateOptions(options);\n\n const { services, saveParsedSpecFile = false, parseSchemas = true, parseChannels = false } = options;\n // const asyncAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n console.log(chalk.green(`Processing ${services.length} AsyncAPI files...`));\n for (const service of services) {\n console.log(chalk.gray(`Processing ${service.path}`));\n\n const { document, diagnostics } = service.path.startsWith('http')\n ? await fromURL(parser, service.path).parse({\n parseSchemas,\n })\n : await fromFile(parser, service.path).parse({\n parseSchemas,\n });\n\n if (!document) {\n console.log(chalk.red('Failed to parse AsyncAPI file'));\n if (options.debug || cliArgs.debug) {\n console.log(diagnostics);\n } else {\n console.log(chalk.red('Run with debug option in the generator to see diagnostics'));\n }\n continue;\n }\n\n const operations = document.allOperations();\n const channels = document.allChannels();\n const documentTags = document.info().tags().all() || [];\n\n const serviceId = service.id;\n\n const serviceName = service.name || document.info().title();\n const version = document.info().version();\n\n // What messages does this service send and receive\n let sends = [];\n let receives = [];\n\n let serviceSpecifications = {};\n let serviceSpecificationsFiles = [];\n let serviceMarkdown = generateMarkdownForService(document);\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(document),\n // services: [{ id: serviceId, version: version }],\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: serviceId, version: version }, domainVersion);\n }\n\n // Parse channels\n if (parseChannels) {\n for (const channel of channels) {\n const channelAsJSON = channel.json();\n const channelId = channel.id();\n const params = channelAsJSON?.parameters || {};\n const protocols = getChannelProtocols(channel);\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || version;\n let channelMarkdown = generateMarkdownForChannel(document, channel);\n\n console.log(chalk.blue(`Processing channel: ${channelId} (v${channelVersion})`));\n\n const paramsForCatalog = Object.keys(params).reduce(\n (acc, key) => {\n const param = params[key];\n acc[key] = {};\n if (param.enum) acc[key].enum = param.enum;\n if (param.default) acc[key].default = param.default;\n if (param.examples) acc[key].examples = param.examples;\n if (param.description) acc[key].description = param.description;\n return acc;\n },\n {} as Record<string, { enum?: string[]; default?: string; examples?: string[]; description?: string }>\n );\n\n const catalogedChannel = await getChannel(channelId, 'latest');\n\n if (catalogedChannel) {\n channelMarkdown = catalogedChannel.markdown;\n if (catalogedChannel.version !== channelVersion) {\n await versionChannel(channelId);\n console.log(chalk.cyan(` - Versioned previous channel: ${channelId} (v${channelVersion})`));\n }\n }\n\n await writeChannel(\n {\n id: channelId,\n name: channelAsJSON?.title || channel.id(),\n markdown: channelMarkdown,\n version: channelVersion,\n ...(Object.keys(paramsForCatalog).length > 0 && { parameters: paramsForCatalog }),\n ...(channel.address() && { address: channel.address() }),\n ...(channelAsJSON?.summary && { summary: channelAsJSON.summary }),\n ...(protocols.length > 0 && { protocols }),\n },\n { override: true }\n );\n\n console.log(chalk.cyan(` - Message ${channelId} (v${version}) created`));\n }\n }\n\n // Find events/commands\n for (const operation of operations) {\n for (const message of operation.messages()) {\n const eventType = (message.extensions().get('x-eventcatalog-message-type')?.value() as EventType) || 'event';\n const messageVersion = message.extensions().get('x-eventcatalog-message-version')?.value() || version;\n\n // does this service own or just consume the message?\n const serviceOwnsMessageContract = isServiceMessageOwner(message);\n const isReceived = operation.action() === 'receive' || operation.action() === 'subscribe';\n const isSent = operation.action() === 'send' || operation.action() === 'publish';\n\n const messageId = message.id().toLowerCase();\n\n if (eventType !== 'event' && eventType !== 'command' && eventType !== 'query') {\n throw new Error('Invalid message type');\n }\n\n const {\n write: writeMessage,\n version: versionMessage,\n get: getMessage,\n addSchema: addSchemaToMessage,\n } = MESSAGE_OPERATIONS[eventType];\n\n let messageMarkdown = generateMarkdownForMessage(document, message);\n const badges = message.tags().all() || [];\n\n console.log(chalk.blue(`Processing message: ${getMessageName(message)} (v${messageVersion})`));\n\n if (serviceOwnsMessageContract) {\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id().toLowerCase(), 'latest');\n\n if (catalogedMessage) {\n // persist markdown if it exists\n messageMarkdown = catalogedMessage.markdown;\n\n if (catalogedMessage.version !== messageVersion) {\n // if the version does not match, we need to version the message\n await versionMessage(messageId);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n const channelsForMessage = parseChannels ? getChannelsForMessage(message, channels, document) : [];\n\n // Write the message to the catalog\n await writeMessage(\n {\n id: messageId,\n version: messageVersion,\n name: getMessageName(message),\n summary: getMessageSummary(message),\n markdown: messageMarkdown,\n badges: badges.map((badge) => ({ content: badge.name(), textColor: 'blue', backgroundColor: 'blue' })),\n schemaPath: messageHasSchema(message) ? getSchemaFileName(message) : undefined,\n ...(channelsForMessage.length > 0 && { channels: channelsForMessage }),\n },\n {\n override: true,\n path: message.id(),\n }\n );\n\n console.log(chalk.cyan(` - Message (v${messageVersion}) created`));\n // Check if the message has a payload, if it does then document in EventCatalog\n if (messageHasSchema(message)) {\n // Get the schema from the original payload if it exists\n const schema = message.payload()?.extensions()?.get('x-parser-original-payload')?.json() || message.payload()?.json();\n\n await addSchemaToMessage(\n messageId,\n {\n fileName: getSchemaFileName(message),\n schema: JSON.stringify(schema, null, 4),\n },\n messageVersion\n );\n console.log(chalk.cyan(` - Schema added to message (v${messageVersion})`));\n }\n } else {\n // Message is not owned by this service, therefore we don't need to document it\n console.log(chalk.yellow(` - Skipping external message: ${getMessageName(message)}(v${messageVersion})`));\n }\n // Add the message to the correct array\n if (isSent) sends.push({ id: messageId, version: messageVersion });\n if (isReceived) receives.push({ id: messageId, version: messageVersion });\n }\n }\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(serviceId, 'latest');\n\n console.log(chalk.blue(`Processing service: ${serviceId} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\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(serviceId);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, persist data\n if (latestServiceInCatalog.version === version) {\n // we want to preserve the markdown any any spec files that are already there\n serviceMarkdown = latestServiceInCatalog.markdown;\n serviceSpecifications = latestServiceInCatalog.specifications ?? {};\n sends = latestServiceInCatalog.sends ? [...latestServiceInCatalog.sends, ...sends] : sends;\n receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n serviceSpecificationsFiles = await getSpecificationFilesForService(serviceId, version);\n }\n }\n\n const fileName = path.basename(service.path);\n\n await writeService(\n {\n id: serviceId,\n name: serviceName,\n version: version,\n summary: getServiceSummary(document),\n badges: documentTags.map((tag) => ({ content: tag.name(), textColor: 'blue', backgroundColor: 'blue' })),\n markdown: serviceMarkdown,\n sends,\n receives,\n schemaPath: fileName || 'asyncapi.yml',\n specifications: {\n ...serviceSpecifications,\n asyncapiPath: fileName || 'asyncapi.yml',\n },\n },\n {\n override: true,\n }\n );\n\n // What files need added to the service (speficiation files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(service, document) : await getRawSpecFile(service),\n fileName: path.basename(service.path) || 'asyncapi.yml',\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n serviceId,\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 console.log(chalk.green(`\\nFinished generating event catalog for AsyncAPI ${serviceId} (v${version})`));\n }\n\n await checkLicense();\n};\n\nconst getParsedSpecFile = (service: Service, document: AsyncAPIDocumentInterface) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON\n ? JSON.stringify(document.meta().asyncapi.parsed, null, 4)\n : yaml.dump(document.meta().asyncapi.parsed, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n try {\n const response = await fetch(service.path);\n return response.text();\n } catch (error) {\n console.log(chalk.red(`\\nFailed to request AsyncAPI file from ${service.path}`));\n return '';\n }\n } else {\n return await readFile(service.path, 'utf8');\n }\n};\n/**\n * Is the AsyncAPI specification (service) the owner of the message?\n * This is determined by the 'x-eventcatalog-role' extension in the message\n *\n * @param message\n * @returns boolean\n *\n * default is provider (AsyncAPI file / service owns the message)\n */\nconst isServiceMessageOwner = (message: MessageInterface): boolean => {\n const value = message.extensions().get('x-eventcatalog-role')?.value() || 'provider';\n return value === 'provider';\n};\n","export const getFileExtentionFromSchemaFormat = (format: string | undefined = '') => {\n if (format.includes('avro')) return 'avsc';\n if (format.includes('yml')) return 'yml';\n if (format.includes('json')) return 'json';\n if (format.includes('openapi')) return 'openapi';\n if (format.includes('protobuf')) return 'protobuf';\n if (format.includes('yaml')) return 'yaml';\n\n return 'json';\n};\n","import {\n MessageInterface,\n AsyncAPIDocumentInterface,\n ChannelInterface,\n ChannelsInterface,\n MessagesInterface,\n} from '@asyncapi/parser';\nimport { getFileExtentionFromSchemaFormat } from './schemas';\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, message: MessageInterface) => {\n return `\n## Architecture\n<NodeGraph />\n\n${\n messageHasSchema(message) && messageIsJSON(message)\n ? `\n## Schema\n<SchemaViewer file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n${\n messageHasSchema(message) && !messageIsJSON(message)\n ? `\n## Schema\n<Schema file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n\n${\n message.externalDocs()\n ? `\n## External documentation\n- [${message.externalDocs()?.description()}](${message.externalDocs()?.url()})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (message: MessageInterface) => {\n const messageSummary = message.hasSummary() ? message.summary() : '';\n const messageDescription = message.hasDescription() ? 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 messageHasSchema = (message: MessageInterface) => {\n return message.hasPayload() && message.schemaFormat();\n};\n\nexport const messageIsJSON = (message: MessageInterface) => {\n const fileName = getSchemaFileName(message);\n return fileName.endsWith('.json');\n};\n\nexport const getSchemaFileName = (message: MessageInterface) => {\n const extension = getFileExtentionFromSchemaFormat(message.schemaFormat());\n return `schema.${extension}`;\n};\n\nexport const getMessageName = (message: MessageInterface) => {\n return message.hasTitle() && message.title() ? (message.title() as string) : message.id();\n};\n\nexport const getChannelsForMessage = (\n message: MessageInterface,\n channels: ChannelsInterface,\n document: AsyncAPIDocumentInterface\n): { id: string; version: string }[] => {\n let channelsForMessage: ChannelInterface[] = [];\n const globalVersion = document.info().version();\n\n // Go through all channels and link messages they document\n for (const channel of channels) {\n for (const channelMessage of channel.messages() as MessagesInterface) {\n if (channelMessage.id() === message.id()) {\n channelsForMessage.push(channel);\n }\n }\n }\n\n // You can also document a message directly to a channel, add them too\n for (const messageChannel of message.channels()) {\n channelsForMessage.push(messageChannel);\n }\n\n // Make them unique, as there may be overlapping channels\n const uniqueChannels = channelsForMessage.filter(\n (channel, index, self) => index === self.findIndex((t) => t.id() === channel.id())\n );\n\n return uniqueChannels.map((channel) => {\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || globalVersion;\n return {\n id: channel.id(),\n version: channelVersion,\n };\n });\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n${document.info().hasDescription() ? `${document.info().description()}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n${\n document.info().externalDocs()\n ? `\n## External documentation\n- [${document.info().externalDocs()?.description()}](${document.info().externalDocs()?.url()})\n`\n : ''\n}\n`;\n};\n\nexport const getSummary = (document: AsyncAPIDocumentInterface) => {\n const summary = document.info().hasDescription() ? document.info().description() : '';\n return summary && summary.length < 150 ? summary : '';\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { AsyncAPIDocumentInterface, ChannelInterface } from '@asyncapi/parser';\n\nexport const getChannelProtocols = (channel: ChannelInterface): string[] => {\n const protocols = [];\n\n const bindings = channel.bindings();\n for (const binding of bindings) {\n protocols.push(binding.protocol());\n }\n\n return protocols;\n};\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, channel: ChannelInterface) => {\n return `\n ${\n channel.hasDescription()\n ? `\n ## Overview\n ${channel.description()}\n `\n : ''\n }\n\n <ChannelInformation />\n\n ${\n channel.json()?.externalDocs\n ? `\n ## External documentation\n - [${channel.json()?.externalDocs?.description}](${channel.json()?.externalDocs?.url})\n `\n : ''\n }\n \n `;\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, you can purchase a license at https://dashboard.eventcatalog.dev/ or contact us hello@eventcatalog.dev.`\n )\n );\n};\n"],"mappings":"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","names":["import_chalk","defaultMarkdown","getSummary","defaultMarkdown","defaultMarkdown","chalk","argv","utils","chalk","defaultMarkdown","path","getSummary","yaml"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/schemas.ts","../src/utils/messages.ts","../src/utils/services.ts","../src/utils/domains.ts","../src/utils/channels.ts","../src/checkLicense.ts"],"sourcesContent":["import { AsyncAPIDocumentInterface, MessageInterface, Parser, fromFile, fromURL } from '@asyncapi/parser';\nimport utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport argv from 'minimist';\nimport yaml from 'js-yaml';\nimport { z } from 'zod';\nimport chalk from 'chalk';\nimport path from 'path';\n\n// AsyncAPI Parsers\nimport { AvroSchemaParser } from '@asyncapi/avro-schema-parser';\n\nimport {\n defaultMarkdown as generateMarkdownForMessage,\n getChannelsForMessage,\n getMessageName,\n getSummary as getMessageSummary,\n getSchemaFileName,\n messageHasSchema,\n} from './utils/messages';\nimport { defaultMarkdown as generateMarkdownForService, getSummary as getServiceSummary } from './utils/services';\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { defaultMarkdown as generateMarkdownForChannel, getChannelProtocols } from './utils/channels';\nimport checkLicense from './checkLicense';\n\nimport { EventType, MessageOperations } from './types';\n\nconst parser = new Parser();\n\n// register avro schema support\nparser.registerSchemaParser(AvroSchemaParser());\nconst cliArgs = argv(process.argv.slice(2));\n\nconst optionsSchema = z.object({\n services: z.array(\n z.object({\n id: z.string({ required_error: 'The service id is required. please provide the service id' }),\n path: z.string({ required_error: 'The service path is required. please provide the path to specification file' }),\n name: z.string().optional(),\n }),\n { message: 'Please provide correct services configuration' }\n ),\n domain: z\n .object({\n id: z.string({ required_error: 'The domain id is required. please provide a domain id' }),\n name: z.string({ required_error: 'The domain name is required. please provide a domain name' }),\n version: z.string({ required_error: 'The domain version is required. please provide a domain version' }),\n })\n .optional(),\n debug: z.boolean().optional(),\n parseSchemas: z.boolean().optional(),\n parseChannels: z.boolean().optional(),\n saveParsedSpecFile: z.boolean({ invalid_type_error: 'The saveParsedSpecFile is not a boolean in options' }).optional(),\n});\n\ntype Props = z.infer<typeof optionsSchema>;\ntype Domain = z.infer<typeof optionsSchema>['domain'];\ntype Service = z.infer<typeof optionsSchema>['services'][0];\n\nconst validateOptions = (options: Props) => {\n try {\n optionsSchema.parse(options);\n } catch (error: any) {\n if (error instanceof z.ZodError) throw new Error(JSON.stringify(error.issues, null, 2));\n }\n};\n\nexport default async (config: 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 const {\n writeService,\n writeEvent,\n writeCommand,\n writeQuery,\n getService,\n versionService,\n getDomain,\n writeDomain,\n addServiceToDomain,\n getCommand,\n getEvent,\n getQuery,\n versionCommand,\n versionEvent,\n versionQuery,\n addSchemaToCommand,\n addSchemaToEvent,\n addSchemaToQuery,\n addFileToService,\n versionDomain,\n getSpecificationFilesForService,\n writeChannel,\n getChannel,\n versionChannel,\n } = utils(process.env.PROJECT_DIR);\n\n // Define the message operations mapping with proper types\n const MESSAGE_OPERATIONS: Record<EventType, MessageOperations> = {\n event: {\n write: writeEvent,\n version: versionEvent,\n get: getEvent,\n addSchema: addSchemaToEvent,\n },\n command: {\n write: writeCommand,\n version: versionCommand,\n get: getCommand,\n addSchema: addSchemaToCommand,\n },\n query: {\n write: writeQuery,\n version: versionQuery,\n get: getQuery,\n addSchema: addSchemaToQuery,\n },\n };\n\n // Should the file that is written to the catalog be parsed (https://github.com/asyncapi/parser-js) or as it is?\n validateOptions(options);\n\n const { services, saveParsedSpecFile = false, parseSchemas = true, parseChannels = false } = options;\n // const asyncAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n console.log(chalk.green(`Processing ${services.length} AsyncAPI files...`));\n for (const service of services) {\n console.log(chalk.gray(`Processing ${service.path}`));\n\n const { document, diagnostics } = service.path.startsWith('http')\n ? await fromURL(parser, service.path).parse({\n parseSchemas,\n })\n : await fromFile(parser, service.path).parse({\n parseSchemas,\n });\n\n if (!document) {\n console.log(chalk.red('Failed to parse AsyncAPI file'));\n if (options.debug || cliArgs.debug) {\n console.log(diagnostics);\n } else {\n console.log(chalk.red('Run with debug option in the generator to see diagnostics'));\n }\n continue;\n }\n\n const operations = document.allOperations();\n const channels = document.allChannels();\n const documentTags = document.info().tags().all() || [];\n\n const serviceId = service.id;\n\n const serviceName = service.name || document.info().title();\n const version = document.info().version();\n\n // What messages does this service send and receive\n let sends = [];\n let receives = [];\n\n let owners = null;\n let repository = null;\n\n let serviceSpecifications = {};\n let serviceSpecificationsFiles = [];\n let serviceMarkdown = generateMarkdownForService(document);\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(document),\n // services: [{ id: serviceId, version: version }],\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: serviceId, version: version }, domainVersion);\n }\n\n // Parse channels\n if (parseChannels) {\n for (const channel of channels) {\n const channelAsJSON = channel.json();\n const channelId = channel.id();\n const params = channelAsJSON?.parameters || {};\n const protocols = getChannelProtocols(channel);\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || version;\n let channelMarkdown = generateMarkdownForChannel(document, channel);\n\n console.log(chalk.blue(`Processing channel: ${channelId} (v${channelVersion})`));\n\n const paramsForCatalog = Object.keys(params).reduce(\n (acc, key) => {\n const param = params[key];\n acc[key] = {};\n if (param.enum) acc[key].enum = param.enum;\n if (param.default) acc[key].default = param.default;\n if (param.examples) acc[key].examples = param.examples;\n if (param.description) acc[key].description = param.description;\n return acc;\n },\n {} as Record<string, { enum?: string[]; default?: string; examples?: string[]; description?: string }>\n );\n\n const catalogedChannel = await getChannel(channelId, 'latest');\n\n if (catalogedChannel) {\n channelMarkdown = catalogedChannel.markdown;\n if (catalogedChannel.version !== channelVersion) {\n await versionChannel(channelId);\n console.log(chalk.cyan(` - Versioned previous channel: ${channelId} (v${channelVersion})`));\n }\n }\n\n await writeChannel(\n {\n id: channelId,\n name: channelAsJSON?.title || channel.id(),\n markdown: channelMarkdown,\n version: channelVersion,\n ...(Object.keys(paramsForCatalog).length > 0 && { parameters: paramsForCatalog }),\n ...(channel.address() && { address: channel.address() }),\n ...(channelAsJSON?.summary && { summary: channelAsJSON.summary }),\n ...(protocols.length > 0 && { protocols }),\n },\n { override: true }\n );\n\n console.log(chalk.cyan(` - Message ${channelId} (v${version}) created`));\n }\n }\n\n // Find events/commands\n for (const operation of operations) {\n for (const message of operation.messages()) {\n const eventType = (message.extensions().get('x-eventcatalog-message-type')?.value() as EventType) || 'event';\n const messageVersion = message.extensions().get('x-eventcatalog-message-version')?.value() || version;\n\n // does this service own or just consume the message?\n const serviceOwnsMessageContract = isServiceMessageOwner(message);\n const isReceived = operation.action() === 'receive' || operation.action() === 'subscribe';\n const isSent = operation.action() === 'send' || operation.action() === 'publish';\n\n const messageId = message.id().toLowerCase();\n\n if (eventType !== 'event' && eventType !== 'command' && eventType !== 'query') {\n throw new Error('Invalid message type');\n }\n\n const {\n write: writeMessage,\n version: versionMessage,\n get: getMessage,\n addSchema: addSchemaToMessage,\n } = MESSAGE_OPERATIONS[eventType];\n\n let messageMarkdown = generateMarkdownForMessage(document, message);\n const badges = message.tags().all() || [];\n\n console.log(chalk.blue(`Processing message: ${getMessageName(message)} (v${messageVersion})`));\n\n if (serviceOwnsMessageContract) {\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id().toLowerCase(), 'latest');\n\n if (catalogedMessage) {\n // persist markdown if it exists\n messageMarkdown = catalogedMessage.markdown;\n\n if (catalogedMessage.version !== messageVersion) {\n // if the version does not match, we need to version the message\n await versionMessage(messageId);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n const channelsForMessage = parseChannels ? getChannelsForMessage(message, channels, document) : [];\n\n // Write the message to the catalog\n await writeMessage(\n {\n id: messageId,\n version: messageVersion,\n name: getMessageName(message),\n summary: getMessageSummary(message),\n markdown: messageMarkdown,\n badges: badges.map((badge) => ({ content: badge.name(), textColor: 'blue', backgroundColor: 'blue' })),\n schemaPath: messageHasSchema(message) ? getSchemaFileName(message) : undefined,\n ...(channelsForMessage.length > 0 && { channels: channelsForMessage }),\n },\n {\n override: true,\n path: message.id(),\n }\n );\n\n console.log(chalk.cyan(` - Message (v${messageVersion}) created`));\n // Check if the message has a payload, if it does then document in EventCatalog\n if (messageHasSchema(message)) {\n // Get the schema from the original payload if it exists\n const schema = message.payload()?.extensions()?.get('x-parser-original-payload')?.json() || message.payload()?.json();\n\n await addSchemaToMessage(\n messageId,\n {\n fileName: getSchemaFileName(message),\n schema: JSON.stringify(schema, null, 4),\n },\n messageVersion\n );\n console.log(chalk.cyan(` - Schema added to message (v${messageVersion})`));\n }\n } else {\n // Message is not owned by this service, therefore we don't need to document it\n console.log(chalk.yellow(` - Skipping external message: ${getMessageName(message)}(v${messageVersion})`));\n }\n // Add the message to the correct array\n if (isSent) sends.push({ id: messageId, version: messageVersion });\n if (isReceived) receives.push({ id: messageId, version: messageVersion });\n }\n }\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(serviceId, 'latest');\n\n console.log(chalk.blue(`Processing service: ${serviceId} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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(serviceId);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, persist data\n if (latestServiceInCatalog.version === version) {\n // we want to preserve the markdown any any spec files that are already there\n serviceMarkdown = latestServiceInCatalog.markdown;\n serviceSpecifications = latestServiceInCatalog.specifications ?? {};\n sends = latestServiceInCatalog.sends ? [...latestServiceInCatalog.sends, ...sends] : sends;\n receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n serviceSpecificationsFiles = await getSpecificationFilesForService(serviceId, version);\n }\n }\n\n const fileName = path.basename(service.path);\n\n await writeService(\n {\n id: serviceId,\n name: serviceName,\n version: version,\n summary: getServiceSummary(document),\n badges: documentTags.map((tag) => ({ content: tag.name(), textColor: 'blue', backgroundColor: 'blue' })),\n markdown: serviceMarkdown,\n sends,\n receives,\n schemaPath: fileName || 'asyncapi.yml',\n specifications: {\n ...serviceSpecifications,\n asyncapiPath: fileName || 'asyncapi.yml',\n },\n ...(owners && { owners }),\n ...(repository && { repository }),\n },\n {\n override: true,\n }\n );\n\n // What files need added to the service (speficiation files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(service, document) : await getRawSpecFile(service),\n fileName: path.basename(service.path) || 'asyncapi.yml',\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n serviceId,\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 console.log(chalk.green(`\\nFinished generating event catalog for AsyncAPI ${serviceId} (v${version})`));\n }\n\n await checkLicense();\n};\n\nconst getParsedSpecFile = (service: Service, document: AsyncAPIDocumentInterface) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON\n ? JSON.stringify(document.meta().asyncapi.parsed, null, 4)\n : yaml.dump(document.meta().asyncapi.parsed, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n try {\n const response = await fetch(service.path);\n return response.text();\n } catch (error) {\n console.log(chalk.red(`\\nFailed to request AsyncAPI file from ${service.path}`));\n return '';\n }\n } else {\n return await readFile(service.path, 'utf8');\n }\n};\n/**\n * Is the AsyncAPI specification (service) the owner of the message?\n * This is determined by the 'x-eventcatalog-role' extension in the message\n *\n * @param message\n * @returns boolean\n *\n * default is provider (AsyncAPI file / service owns the message)\n */\nconst isServiceMessageOwner = (message: MessageInterface): boolean => {\n const value = message.extensions().get('x-eventcatalog-role')?.value() || 'provider';\n return value === 'provider';\n};\n","export const getFileExtentionFromSchemaFormat = (format: string | undefined = '') => {\n if (format.includes('avro')) return 'avsc';\n if (format.includes('yml')) return 'yml';\n if (format.includes('json')) return 'json';\n if (format.includes('openapi')) return 'openapi';\n if (format.includes('protobuf')) return 'protobuf';\n if (format.includes('yaml')) return 'yaml';\n\n return 'json';\n};\n","import {\n MessageInterface,\n AsyncAPIDocumentInterface,\n ChannelInterface,\n ChannelsInterface,\n MessagesInterface,\n} from '@asyncapi/parser';\nimport { getFileExtentionFromSchemaFormat } from './schemas';\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, message: MessageInterface) => {\n return `\n## Architecture\n<NodeGraph />\n\n${\n messageHasSchema(message) && messageIsJSON(message)\n ? `\n## Schema\n<SchemaViewer file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n${\n messageHasSchema(message) && !messageIsJSON(message)\n ? `\n## Schema\n<Schema file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n\n${\n message.externalDocs()\n ? `\n## External documentation\n- [${message.externalDocs()?.description()}](${message.externalDocs()?.url()})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (message: MessageInterface) => {\n const messageSummary = message.hasSummary() ? message.summary() : '';\n const messageDescription = message.hasDescription() ? 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 messageHasSchema = (message: MessageInterface) => {\n return message.hasPayload() && message.schemaFormat();\n};\n\nexport const messageIsJSON = (message: MessageInterface) => {\n const fileName = getSchemaFileName(message);\n return fileName.endsWith('.json');\n};\n\nexport const getSchemaFileName = (message: MessageInterface) => {\n const extension = getFileExtentionFromSchemaFormat(message.schemaFormat());\n return `schema.${extension}`;\n};\n\nexport const getMessageName = (message: MessageInterface) => {\n return message.hasTitle() && message.title() ? (message.title() as string) : message.id();\n};\n\nexport const getChannelsForMessage = (\n message: MessageInterface,\n channels: ChannelsInterface,\n document: AsyncAPIDocumentInterface\n): { id: string; version: string }[] => {\n let channelsForMessage: ChannelInterface[] = [];\n const globalVersion = document.info().version();\n\n // Go through all channels and link messages they document\n for (const channel of channels) {\n for (const channelMessage of channel.messages() as MessagesInterface) {\n if (channelMessage.id() === message.id()) {\n channelsForMessage.push(channel);\n }\n }\n }\n\n // You can also document a message directly to a channel, add them too\n for (const messageChannel of message.channels()) {\n channelsForMessage.push(messageChannel);\n }\n\n // Make them unique, as there may be overlapping channels\n const uniqueChannels = channelsForMessage.filter(\n (channel, index, self) => index === self.findIndex((t) => t.id() === channel.id())\n );\n\n return uniqueChannels.map((channel) => {\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || globalVersion;\n return {\n id: channel.id(),\n version: channelVersion,\n };\n });\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n${document.info().hasDescription() ? `${document.info().description()}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n${\n document.info().externalDocs()\n ? `\n## External documentation\n- [${document.info().externalDocs()?.description()}](${document.info().externalDocs()?.url()})\n`\n : ''\n}\n`;\n};\n\nexport const getSummary = (document: AsyncAPIDocumentInterface) => {\n const summary = document.info().hasDescription() ? document.info().description() : '';\n return summary && summary.length < 150 ? summary : '';\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { AsyncAPIDocumentInterface, ChannelInterface } from '@asyncapi/parser';\n\nexport const getChannelProtocols = (channel: ChannelInterface): string[] => {\n const protocols = [];\n\n const bindings = channel.bindings();\n for (const binding of bindings) {\n protocols.push(binding.protocol());\n }\n\n return protocols;\n};\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, channel: ChannelInterface) => {\n return `\n ${\n channel.hasDescription()\n ? `\n ## Overview\n ${channel.description()}\n `\n : ''\n }\n\n <ChannelInformation />\n\n ${\n channel.json()?.externalDocs\n ? `\n ## External documentation\n - [${channel.json()?.externalDocs?.description}](${channel.json()?.externalDocs?.url})\n `\n : ''\n }\n \n `;\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, you can purchase a license at https://dashboard.eventcatalog.dev/ or contact us hello@eventcatalog.dev.`\n )\n );\n};\n"],"mappings":"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","names":["import_chalk","defaultMarkdown","getSummary","defaultMarkdown","defaultMarkdown","chalk","argv","utils","chalk","defaultMarkdown","path","getSummary","yaml"]}
package/dist/index.mjs CHANGED
@@ -190,6 +190,9 @@ var validateOptions = (options) => {
190
190
  }
191
191
  };
192
192
  var src_default = async (config, options) => {
193
+ if (!process.env.PROJECT_DIR) {
194
+ process.env.PROJECT_DIR = process.cwd();
195
+ }
193
196
  if (!process.env.PROJECT_DIR) {
194
197
  throw new Error("Please provide catalog url (env variable PROJECT_DIR)");
195
198
  }
@@ -266,6 +269,8 @@ var src_default = async (config, options) => {
266
269
  const version = document.info().version();
267
270
  let sends = [];
268
271
  let receives = [];
272
+ let owners = null;
273
+ let repository = null;
269
274
  let serviceSpecifications = {};
270
275
  let serviceSpecificationsFiles = [];
271
276
  let serviceMarkdown = defaultMarkdown2(document);
@@ -409,6 +414,8 @@ Processing domain: ${domainName} (v${domainVersion})`));
409
414
  console.log(chalk2.blue(`Processing service: ${serviceId} (v${version})`));
410
415
  if (latestServiceInCatalog) {
411
416
  serviceMarkdown = latestServiceInCatalog.markdown;
417
+ owners = latestServiceInCatalog.owners || [];
418
+ repository = latestServiceInCatalog.repository || null;
412
419
  if (latestServiceInCatalog.version !== version) {
413
420
  await versionService(serviceId);
414
421
  console.log(chalk2.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));
@@ -436,7 +443,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
436
443
  specifications: {
437
444
  ...serviceSpecifications,
438
445
  asyncapiPath: fileName || "asyncapi.yml"
439
- }
446
+ },
447
+ ...owners && { owners },
448
+ ...repository && { repository }
440
449
  },
441
450
  {
442
451
  override: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/schemas.ts","../src/utils/messages.ts","../src/utils/services.ts","../src/utils/domains.ts","../src/utils/channels.ts","../src/checkLicense.ts"],"sourcesContent":["import { AsyncAPIDocumentInterface, MessageInterface, Parser, fromFile, fromURL } from '@asyncapi/parser';\nimport utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport argv from 'minimist';\nimport yaml from 'js-yaml';\nimport { z } from 'zod';\nimport chalk from 'chalk';\nimport path from 'path';\n\n// AsyncAPI Parsers\nimport { AvroSchemaParser } from '@asyncapi/avro-schema-parser';\n\nimport {\n defaultMarkdown as generateMarkdownForMessage,\n getChannelsForMessage,\n getMessageName,\n getSummary as getMessageSummary,\n getSchemaFileName,\n messageHasSchema,\n} from './utils/messages';\nimport { defaultMarkdown as generateMarkdownForService, getSummary as getServiceSummary } from './utils/services';\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { defaultMarkdown as generateMarkdownForChannel, getChannelProtocols } from './utils/channels';\nimport checkLicense from './checkLicense';\n\nimport { EventType, MessageOperations } from './types';\n\nconst parser = new Parser();\n\n// register avro schema support\nparser.registerSchemaParser(AvroSchemaParser());\nconst cliArgs = argv(process.argv.slice(2));\n\nconst optionsSchema = z.object({\n services: z.array(\n z.object({\n id: z.string({ required_error: 'The service id is required. please provide the service id' }),\n path: z.string({ required_error: 'The service path is required. please provide the path to specification file' }),\n name: z.string().optional(),\n }),\n { message: 'Please provide correct services configuration' }\n ),\n domain: z\n .object({\n id: z.string({ required_error: 'The domain id is required. please provide a domain id' }),\n name: z.string({ required_error: 'The domain name is required. please provide a domain name' }),\n version: z.string({ required_error: 'The domain version is required. please provide a domain version' }),\n })\n .optional(),\n debug: z.boolean().optional(),\n parseSchemas: z.boolean().optional(),\n parseChannels: z.boolean().optional(),\n saveParsedSpecFile: z.boolean({ invalid_type_error: 'The saveParsedSpecFile is not a boolean in options' }).optional(),\n});\n\ntype Props = z.infer<typeof optionsSchema>;\ntype Domain = z.infer<typeof optionsSchema>['domain'];\ntype Service = z.infer<typeof optionsSchema>['services'][0];\n\nconst validateOptions = (options: Props) => {\n try {\n optionsSchema.parse(options);\n } catch (error: any) {\n if (error instanceof z.ZodError) throw new Error(JSON.stringify(error.issues, null, 2));\n }\n};\n\nexport default async (config: any, options: Props) => {\n if (!process.env.PROJECT_DIR) {\n throw new Error('Please provide catalog url (env variable PROJECT_DIR)');\n }\n\n const {\n writeService,\n writeEvent,\n writeCommand,\n writeQuery,\n getService,\n versionService,\n getDomain,\n writeDomain,\n addServiceToDomain,\n getCommand,\n getEvent,\n getQuery,\n versionCommand,\n versionEvent,\n versionQuery,\n addSchemaToCommand,\n addSchemaToEvent,\n addSchemaToQuery,\n addFileToService,\n versionDomain,\n getSpecificationFilesForService,\n writeChannel,\n getChannel,\n versionChannel,\n } = utils(process.env.PROJECT_DIR);\n\n // Define the message operations mapping with proper types\n const MESSAGE_OPERATIONS: Record<EventType, MessageOperations> = {\n event: {\n write: writeEvent,\n version: versionEvent,\n get: getEvent,\n addSchema: addSchemaToEvent,\n },\n command: {\n write: writeCommand,\n version: versionCommand,\n get: getCommand,\n addSchema: addSchemaToCommand,\n },\n query: {\n write: writeQuery,\n version: versionQuery,\n get: getQuery,\n addSchema: addSchemaToQuery,\n },\n };\n\n // Should the file that is written to the catalog be parsed (https://github.com/asyncapi/parser-js) or as it is?\n validateOptions(options);\n\n const { services, saveParsedSpecFile = false, parseSchemas = true, parseChannels = false } = options;\n // const asyncAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n console.log(chalk.green(`Processing ${services.length} AsyncAPI files...`));\n for (const service of services) {\n console.log(chalk.gray(`Processing ${service.path}`));\n\n const { document, diagnostics } = service.path.startsWith('http')\n ? await fromURL(parser, service.path).parse({\n parseSchemas,\n })\n : await fromFile(parser, service.path).parse({\n parseSchemas,\n });\n\n if (!document) {\n console.log(chalk.red('Failed to parse AsyncAPI file'));\n if (options.debug || cliArgs.debug) {\n console.log(diagnostics);\n } else {\n console.log(chalk.red('Run with debug option in the generator to see diagnostics'));\n }\n continue;\n }\n\n const operations = document.allOperations();\n const channels = document.allChannels();\n const documentTags = document.info().tags().all() || [];\n\n const serviceId = service.id;\n\n const serviceName = service.name || document.info().title();\n const version = document.info().version();\n\n // What messages does this service send and receive\n let sends = [];\n let receives = [];\n\n let serviceSpecifications = {};\n let serviceSpecificationsFiles = [];\n let serviceMarkdown = generateMarkdownForService(document);\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(document),\n // services: [{ id: serviceId, version: version }],\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: serviceId, version: version }, domainVersion);\n }\n\n // Parse channels\n if (parseChannels) {\n for (const channel of channels) {\n const channelAsJSON = channel.json();\n const channelId = channel.id();\n const params = channelAsJSON?.parameters || {};\n const protocols = getChannelProtocols(channel);\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || version;\n let channelMarkdown = generateMarkdownForChannel(document, channel);\n\n console.log(chalk.blue(`Processing channel: ${channelId} (v${channelVersion})`));\n\n const paramsForCatalog = Object.keys(params).reduce(\n (acc, key) => {\n const param = params[key];\n acc[key] = {};\n if (param.enum) acc[key].enum = param.enum;\n if (param.default) acc[key].default = param.default;\n if (param.examples) acc[key].examples = param.examples;\n if (param.description) acc[key].description = param.description;\n return acc;\n },\n {} as Record<string, { enum?: string[]; default?: string; examples?: string[]; description?: string }>\n );\n\n const catalogedChannel = await getChannel(channelId, 'latest');\n\n if (catalogedChannel) {\n channelMarkdown = catalogedChannel.markdown;\n if (catalogedChannel.version !== channelVersion) {\n await versionChannel(channelId);\n console.log(chalk.cyan(` - Versioned previous channel: ${channelId} (v${channelVersion})`));\n }\n }\n\n await writeChannel(\n {\n id: channelId,\n name: channelAsJSON?.title || channel.id(),\n markdown: channelMarkdown,\n version: channelVersion,\n ...(Object.keys(paramsForCatalog).length > 0 && { parameters: paramsForCatalog }),\n ...(channel.address() && { address: channel.address() }),\n ...(channelAsJSON?.summary && { summary: channelAsJSON.summary }),\n ...(protocols.length > 0 && { protocols }),\n },\n { override: true }\n );\n\n console.log(chalk.cyan(` - Message ${channelId} (v${version}) created`));\n }\n }\n\n // Find events/commands\n for (const operation of operations) {\n for (const message of operation.messages()) {\n const eventType = (message.extensions().get('x-eventcatalog-message-type')?.value() as EventType) || 'event';\n const messageVersion = message.extensions().get('x-eventcatalog-message-version')?.value() || version;\n\n // does this service own or just consume the message?\n const serviceOwnsMessageContract = isServiceMessageOwner(message);\n const isReceived = operation.action() === 'receive' || operation.action() === 'subscribe';\n const isSent = operation.action() === 'send' || operation.action() === 'publish';\n\n const messageId = message.id().toLowerCase();\n\n if (eventType !== 'event' && eventType !== 'command' && eventType !== 'query') {\n throw new Error('Invalid message type');\n }\n\n const {\n write: writeMessage,\n version: versionMessage,\n get: getMessage,\n addSchema: addSchemaToMessage,\n } = MESSAGE_OPERATIONS[eventType];\n\n let messageMarkdown = generateMarkdownForMessage(document, message);\n const badges = message.tags().all() || [];\n\n console.log(chalk.blue(`Processing message: ${getMessageName(message)} (v${messageVersion})`));\n\n if (serviceOwnsMessageContract) {\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id().toLowerCase(), 'latest');\n\n if (catalogedMessage) {\n // persist markdown if it exists\n messageMarkdown = catalogedMessage.markdown;\n\n if (catalogedMessage.version !== messageVersion) {\n // if the version does not match, we need to version the message\n await versionMessage(messageId);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n const channelsForMessage = parseChannels ? getChannelsForMessage(message, channels, document) : [];\n\n // Write the message to the catalog\n await writeMessage(\n {\n id: messageId,\n version: messageVersion,\n name: getMessageName(message),\n summary: getMessageSummary(message),\n markdown: messageMarkdown,\n badges: badges.map((badge) => ({ content: badge.name(), textColor: 'blue', backgroundColor: 'blue' })),\n schemaPath: messageHasSchema(message) ? getSchemaFileName(message) : undefined,\n ...(channelsForMessage.length > 0 && { channels: channelsForMessage }),\n },\n {\n override: true,\n path: message.id(),\n }\n );\n\n console.log(chalk.cyan(` - Message (v${messageVersion}) created`));\n // Check if the message has a payload, if it does then document in EventCatalog\n if (messageHasSchema(message)) {\n // Get the schema from the original payload if it exists\n const schema = message.payload()?.extensions()?.get('x-parser-original-payload')?.json() || message.payload()?.json();\n\n await addSchemaToMessage(\n messageId,\n {\n fileName: getSchemaFileName(message),\n schema: JSON.stringify(schema, null, 4),\n },\n messageVersion\n );\n console.log(chalk.cyan(` - Schema added to message (v${messageVersion})`));\n }\n } else {\n // Message is not owned by this service, therefore we don't need to document it\n console.log(chalk.yellow(` - Skipping external message: ${getMessageName(message)}(v${messageVersion})`));\n }\n // Add the message to the correct array\n if (isSent) sends.push({ id: messageId, version: messageVersion });\n if (isReceived) receives.push({ id: messageId, version: messageVersion });\n }\n }\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(serviceId, 'latest');\n\n console.log(chalk.blue(`Processing service: ${serviceId} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\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(serviceId);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, persist data\n if (latestServiceInCatalog.version === version) {\n // we want to preserve the markdown any any spec files that are already there\n serviceMarkdown = latestServiceInCatalog.markdown;\n serviceSpecifications = latestServiceInCatalog.specifications ?? {};\n sends = latestServiceInCatalog.sends ? [...latestServiceInCatalog.sends, ...sends] : sends;\n receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n serviceSpecificationsFiles = await getSpecificationFilesForService(serviceId, version);\n }\n }\n\n const fileName = path.basename(service.path);\n\n await writeService(\n {\n id: serviceId,\n name: serviceName,\n version: version,\n summary: getServiceSummary(document),\n badges: documentTags.map((tag) => ({ content: tag.name(), textColor: 'blue', backgroundColor: 'blue' })),\n markdown: serviceMarkdown,\n sends,\n receives,\n schemaPath: fileName || 'asyncapi.yml',\n specifications: {\n ...serviceSpecifications,\n asyncapiPath: fileName || 'asyncapi.yml',\n },\n },\n {\n override: true,\n }\n );\n\n // What files need added to the service (speficiation files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(service, document) : await getRawSpecFile(service),\n fileName: path.basename(service.path) || 'asyncapi.yml',\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n serviceId,\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 console.log(chalk.green(`\\nFinished generating event catalog for AsyncAPI ${serviceId} (v${version})`));\n }\n\n await checkLicense();\n};\n\nconst getParsedSpecFile = (service: Service, document: AsyncAPIDocumentInterface) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON\n ? JSON.stringify(document.meta().asyncapi.parsed, null, 4)\n : yaml.dump(document.meta().asyncapi.parsed, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n try {\n const response = await fetch(service.path);\n return response.text();\n } catch (error) {\n console.log(chalk.red(`\\nFailed to request AsyncAPI file from ${service.path}`));\n return '';\n }\n } else {\n return await readFile(service.path, 'utf8');\n }\n};\n/**\n * Is the AsyncAPI specification (service) the owner of the message?\n * This is determined by the 'x-eventcatalog-role' extension in the message\n *\n * @param message\n * @returns boolean\n *\n * default is provider (AsyncAPI file / service owns the message)\n */\nconst isServiceMessageOwner = (message: MessageInterface): boolean => {\n const value = message.extensions().get('x-eventcatalog-role')?.value() || 'provider';\n return value === 'provider';\n};\n","export const getFileExtentionFromSchemaFormat = (format: string | undefined = '') => {\n if (format.includes('avro')) return 'avsc';\n if (format.includes('yml')) return 'yml';\n if (format.includes('json')) return 'json';\n if (format.includes('openapi')) return 'openapi';\n if (format.includes('protobuf')) return 'protobuf';\n if (format.includes('yaml')) return 'yaml';\n\n return 'json';\n};\n","import {\n MessageInterface,\n AsyncAPIDocumentInterface,\n ChannelInterface,\n ChannelsInterface,\n MessagesInterface,\n} from '@asyncapi/parser';\nimport { getFileExtentionFromSchemaFormat } from './schemas';\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, message: MessageInterface) => {\n return `\n## Architecture\n<NodeGraph />\n\n${\n messageHasSchema(message) && messageIsJSON(message)\n ? `\n## Schema\n<SchemaViewer file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n${\n messageHasSchema(message) && !messageIsJSON(message)\n ? `\n## Schema\n<Schema file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n\n${\n message.externalDocs()\n ? `\n## External documentation\n- [${message.externalDocs()?.description()}](${message.externalDocs()?.url()})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (message: MessageInterface) => {\n const messageSummary = message.hasSummary() ? message.summary() : '';\n const messageDescription = message.hasDescription() ? 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 messageHasSchema = (message: MessageInterface) => {\n return message.hasPayload() && message.schemaFormat();\n};\n\nexport const messageIsJSON = (message: MessageInterface) => {\n const fileName = getSchemaFileName(message);\n return fileName.endsWith('.json');\n};\n\nexport const getSchemaFileName = (message: MessageInterface) => {\n const extension = getFileExtentionFromSchemaFormat(message.schemaFormat());\n return `schema.${extension}`;\n};\n\nexport const getMessageName = (message: MessageInterface) => {\n return message.hasTitle() && message.title() ? (message.title() as string) : message.id();\n};\n\nexport const getChannelsForMessage = (\n message: MessageInterface,\n channels: ChannelsInterface,\n document: AsyncAPIDocumentInterface\n): { id: string; version: string }[] => {\n let channelsForMessage: ChannelInterface[] = [];\n const globalVersion = document.info().version();\n\n // Go through all channels and link messages they document\n for (const channel of channels) {\n for (const channelMessage of channel.messages() as MessagesInterface) {\n if (channelMessage.id() === message.id()) {\n channelsForMessage.push(channel);\n }\n }\n }\n\n // You can also document a message directly to a channel, add them too\n for (const messageChannel of message.channels()) {\n channelsForMessage.push(messageChannel);\n }\n\n // Make them unique, as there may be overlapping channels\n const uniqueChannels = channelsForMessage.filter(\n (channel, index, self) => index === self.findIndex((t) => t.id() === channel.id())\n );\n\n return uniqueChannels.map((channel) => {\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || globalVersion;\n return {\n id: channel.id(),\n version: channelVersion,\n };\n });\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n${document.info().hasDescription() ? `${document.info().description()}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n${\n document.info().externalDocs()\n ? `\n## External documentation\n- [${document.info().externalDocs()?.description()}](${document.info().externalDocs()?.url()})\n`\n : ''\n}\n`;\n};\n\nexport const getSummary = (document: AsyncAPIDocumentInterface) => {\n const summary = document.info().hasDescription() ? document.info().description() : '';\n return summary && summary.length < 150 ? summary : '';\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { AsyncAPIDocumentInterface, ChannelInterface } from '@asyncapi/parser';\n\nexport const getChannelProtocols = (channel: ChannelInterface): string[] => {\n const protocols = [];\n\n const bindings = channel.bindings();\n for (const binding of bindings) {\n protocols.push(binding.protocol());\n }\n\n return protocols;\n};\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, channel: ChannelInterface) => {\n return `\n ${\n channel.hasDescription()\n ? `\n ## Overview\n ${channel.description()}\n `\n : ''\n }\n\n <ChannelInformation />\n\n ${\n channel.json()?.externalDocs\n ? `\n ## External documentation\n - [${channel.json()?.externalDocs?.description}](${channel.json()?.externalDocs?.url})\n `\n : ''\n }\n \n `;\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, you can purchase a license at https://dashboard.eventcatalog.dev/ or contact us hello@eventcatalog.dev.`\n )\n );\n};\n"],"mappings":"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","names":["chalk","defaultMarkdown","getSummary","defaultMarkdown","defaultMarkdown","chalk","defaultMarkdown","getSummary"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/schemas.ts","../src/utils/messages.ts","../src/utils/services.ts","../src/utils/domains.ts","../src/utils/channels.ts","../src/checkLicense.ts"],"sourcesContent":["import { AsyncAPIDocumentInterface, MessageInterface, Parser, fromFile, fromURL } from '@asyncapi/parser';\nimport utils from '@eventcatalog/sdk';\nimport { readFile } from 'node:fs/promises';\nimport argv from 'minimist';\nimport yaml from 'js-yaml';\nimport { z } from 'zod';\nimport chalk from 'chalk';\nimport path from 'path';\n\n// AsyncAPI Parsers\nimport { AvroSchemaParser } from '@asyncapi/avro-schema-parser';\n\nimport {\n defaultMarkdown as generateMarkdownForMessage,\n getChannelsForMessage,\n getMessageName,\n getSummary as getMessageSummary,\n getSchemaFileName,\n messageHasSchema,\n} from './utils/messages';\nimport { defaultMarkdown as generateMarkdownForService, getSummary as getServiceSummary } from './utils/services';\nimport { defaultMarkdown as generateMarkdownForDomain } from './utils/domains';\nimport { defaultMarkdown as generateMarkdownForChannel, getChannelProtocols } from './utils/channels';\nimport checkLicense from './checkLicense';\n\nimport { EventType, MessageOperations } from './types';\n\nconst parser = new Parser();\n\n// register avro schema support\nparser.registerSchemaParser(AvroSchemaParser());\nconst cliArgs = argv(process.argv.slice(2));\n\nconst optionsSchema = z.object({\n services: z.array(\n z.object({\n id: z.string({ required_error: 'The service id is required. please provide the service id' }),\n path: z.string({ required_error: 'The service path is required. please provide the path to specification file' }),\n name: z.string().optional(),\n }),\n { message: 'Please provide correct services configuration' }\n ),\n domain: z\n .object({\n id: z.string({ required_error: 'The domain id is required. please provide a domain id' }),\n name: z.string({ required_error: 'The domain name is required. please provide a domain name' }),\n version: z.string({ required_error: 'The domain version is required. please provide a domain version' }),\n })\n .optional(),\n debug: z.boolean().optional(),\n parseSchemas: z.boolean().optional(),\n parseChannels: z.boolean().optional(),\n saveParsedSpecFile: z.boolean({ invalid_type_error: 'The saveParsedSpecFile is not a boolean in options' }).optional(),\n});\n\ntype Props = z.infer<typeof optionsSchema>;\ntype Domain = z.infer<typeof optionsSchema>['domain'];\ntype Service = z.infer<typeof optionsSchema>['services'][0];\n\nconst validateOptions = (options: Props) => {\n try {\n optionsSchema.parse(options);\n } catch (error: any) {\n if (error instanceof z.ZodError) throw new Error(JSON.stringify(error.issues, null, 2));\n }\n};\n\nexport default async (config: 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 const {\n writeService,\n writeEvent,\n writeCommand,\n writeQuery,\n getService,\n versionService,\n getDomain,\n writeDomain,\n addServiceToDomain,\n getCommand,\n getEvent,\n getQuery,\n versionCommand,\n versionEvent,\n versionQuery,\n addSchemaToCommand,\n addSchemaToEvent,\n addSchemaToQuery,\n addFileToService,\n versionDomain,\n getSpecificationFilesForService,\n writeChannel,\n getChannel,\n versionChannel,\n } = utils(process.env.PROJECT_DIR);\n\n // Define the message operations mapping with proper types\n const MESSAGE_OPERATIONS: Record<EventType, MessageOperations> = {\n event: {\n write: writeEvent,\n version: versionEvent,\n get: getEvent,\n addSchema: addSchemaToEvent,\n },\n command: {\n write: writeCommand,\n version: versionCommand,\n get: getCommand,\n addSchema: addSchemaToCommand,\n },\n query: {\n write: writeQuery,\n version: versionQuery,\n get: getQuery,\n addSchema: addSchemaToQuery,\n },\n };\n\n // Should the file that is written to the catalog be parsed (https://github.com/asyncapi/parser-js) or as it is?\n validateOptions(options);\n\n const { services, saveParsedSpecFile = false, parseSchemas = true, parseChannels = false } = options;\n // const asyncAPIFiles = Array.isArray(options.path) ? options.path : [options.path];\n console.log(chalk.green(`Processing ${services.length} AsyncAPI files...`));\n for (const service of services) {\n console.log(chalk.gray(`Processing ${service.path}`));\n\n const { document, diagnostics } = service.path.startsWith('http')\n ? await fromURL(parser, service.path).parse({\n parseSchemas,\n })\n : await fromFile(parser, service.path).parse({\n parseSchemas,\n });\n\n if (!document) {\n console.log(chalk.red('Failed to parse AsyncAPI file'));\n if (options.debug || cliArgs.debug) {\n console.log(diagnostics);\n } else {\n console.log(chalk.red('Run with debug option in the generator to see diagnostics'));\n }\n continue;\n }\n\n const operations = document.allOperations();\n const channels = document.allChannels();\n const documentTags = document.info().tags().all() || [];\n\n const serviceId = service.id;\n\n const serviceName = service.name || document.info().title();\n const version = document.info().version();\n\n // What messages does this service send and receive\n let sends = [];\n let receives = [];\n\n let owners = null;\n let repository = null;\n\n let serviceSpecifications = {};\n let serviceSpecificationsFiles = [];\n let serviceMarkdown = generateMarkdownForService(document);\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(document),\n // services: [{ id: serviceId, version: version }],\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: serviceId, version: version }, domainVersion);\n }\n\n // Parse channels\n if (parseChannels) {\n for (const channel of channels) {\n const channelAsJSON = channel.json();\n const channelId = channel.id();\n const params = channelAsJSON?.parameters || {};\n const protocols = getChannelProtocols(channel);\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || version;\n let channelMarkdown = generateMarkdownForChannel(document, channel);\n\n console.log(chalk.blue(`Processing channel: ${channelId} (v${channelVersion})`));\n\n const paramsForCatalog = Object.keys(params).reduce(\n (acc, key) => {\n const param = params[key];\n acc[key] = {};\n if (param.enum) acc[key].enum = param.enum;\n if (param.default) acc[key].default = param.default;\n if (param.examples) acc[key].examples = param.examples;\n if (param.description) acc[key].description = param.description;\n return acc;\n },\n {} as Record<string, { enum?: string[]; default?: string; examples?: string[]; description?: string }>\n );\n\n const catalogedChannel = await getChannel(channelId, 'latest');\n\n if (catalogedChannel) {\n channelMarkdown = catalogedChannel.markdown;\n if (catalogedChannel.version !== channelVersion) {\n await versionChannel(channelId);\n console.log(chalk.cyan(` - Versioned previous channel: ${channelId} (v${channelVersion})`));\n }\n }\n\n await writeChannel(\n {\n id: channelId,\n name: channelAsJSON?.title || channel.id(),\n markdown: channelMarkdown,\n version: channelVersion,\n ...(Object.keys(paramsForCatalog).length > 0 && { parameters: paramsForCatalog }),\n ...(channel.address() && { address: channel.address() }),\n ...(channelAsJSON?.summary && { summary: channelAsJSON.summary }),\n ...(protocols.length > 0 && { protocols }),\n },\n { override: true }\n );\n\n console.log(chalk.cyan(` - Message ${channelId} (v${version}) created`));\n }\n }\n\n // Find events/commands\n for (const operation of operations) {\n for (const message of operation.messages()) {\n const eventType = (message.extensions().get('x-eventcatalog-message-type')?.value() as EventType) || 'event';\n const messageVersion = message.extensions().get('x-eventcatalog-message-version')?.value() || version;\n\n // does this service own or just consume the message?\n const serviceOwnsMessageContract = isServiceMessageOwner(message);\n const isReceived = operation.action() === 'receive' || operation.action() === 'subscribe';\n const isSent = operation.action() === 'send' || operation.action() === 'publish';\n\n const messageId = message.id().toLowerCase();\n\n if (eventType !== 'event' && eventType !== 'command' && eventType !== 'query') {\n throw new Error('Invalid message type');\n }\n\n const {\n write: writeMessage,\n version: versionMessage,\n get: getMessage,\n addSchema: addSchemaToMessage,\n } = MESSAGE_OPERATIONS[eventType];\n\n let messageMarkdown = generateMarkdownForMessage(document, message);\n const badges = message.tags().all() || [];\n\n console.log(chalk.blue(`Processing message: ${getMessageName(message)} (v${messageVersion})`));\n\n if (serviceOwnsMessageContract) {\n // Check if the message already exists in the catalog\n const catalogedMessage = await getMessage(message.id().toLowerCase(), 'latest');\n\n if (catalogedMessage) {\n // persist markdown if it exists\n messageMarkdown = catalogedMessage.markdown;\n\n if (catalogedMessage.version !== messageVersion) {\n // if the version does not match, we need to version the message\n await versionMessage(messageId);\n console.log(chalk.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));\n }\n }\n\n const channelsForMessage = parseChannels ? getChannelsForMessage(message, channels, document) : [];\n\n // Write the message to the catalog\n await writeMessage(\n {\n id: messageId,\n version: messageVersion,\n name: getMessageName(message),\n summary: getMessageSummary(message),\n markdown: messageMarkdown,\n badges: badges.map((badge) => ({ content: badge.name(), textColor: 'blue', backgroundColor: 'blue' })),\n schemaPath: messageHasSchema(message) ? getSchemaFileName(message) : undefined,\n ...(channelsForMessage.length > 0 && { channels: channelsForMessage }),\n },\n {\n override: true,\n path: message.id(),\n }\n );\n\n console.log(chalk.cyan(` - Message (v${messageVersion}) created`));\n // Check if the message has a payload, if it does then document in EventCatalog\n if (messageHasSchema(message)) {\n // Get the schema from the original payload if it exists\n const schema = message.payload()?.extensions()?.get('x-parser-original-payload')?.json() || message.payload()?.json();\n\n await addSchemaToMessage(\n messageId,\n {\n fileName: getSchemaFileName(message),\n schema: JSON.stringify(schema, null, 4),\n },\n messageVersion\n );\n console.log(chalk.cyan(` - Schema added to message (v${messageVersion})`));\n }\n } else {\n // Message is not owned by this service, therefore we don't need to document it\n console.log(chalk.yellow(` - Skipping external message: ${getMessageName(message)}(v${messageVersion})`));\n }\n // Add the message to the correct array\n if (isSent) sends.push({ id: messageId, version: messageVersion });\n if (isReceived) receives.push({ id: messageId, version: messageVersion });\n }\n }\n\n // Check if service is already defined... if the versions do not match then create service.\n const latestServiceInCatalog = await getService(serviceId, 'latest');\n\n console.log(chalk.blue(`Processing service: ${serviceId} (v${version})`));\n\n if (latestServiceInCatalog) {\n serviceMarkdown = latestServiceInCatalog.markdown;\n owners = latestServiceInCatalog.owners || ([] as any);\n repository = latestServiceInCatalog.repository || null;\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(serviceId);\n console.log(chalk.cyan(` - Versioned previous service (v${latestServiceInCatalog.version})`));\n }\n\n // Match found, persist data\n if (latestServiceInCatalog.version === version) {\n // we want to preserve the markdown any any spec files that are already there\n serviceMarkdown = latestServiceInCatalog.markdown;\n serviceSpecifications = latestServiceInCatalog.specifications ?? {};\n sends = latestServiceInCatalog.sends ? [...latestServiceInCatalog.sends, ...sends] : sends;\n receives = latestServiceInCatalog.receives ? [...latestServiceInCatalog.receives, ...receives] : receives;\n serviceSpecificationsFiles = await getSpecificationFilesForService(serviceId, version);\n }\n }\n\n const fileName = path.basename(service.path);\n\n await writeService(\n {\n id: serviceId,\n name: serviceName,\n version: version,\n summary: getServiceSummary(document),\n badges: documentTags.map((tag) => ({ content: tag.name(), textColor: 'blue', backgroundColor: 'blue' })),\n markdown: serviceMarkdown,\n sends,\n receives,\n schemaPath: fileName || 'asyncapi.yml',\n specifications: {\n ...serviceSpecifications,\n asyncapiPath: fileName || 'asyncapi.yml',\n },\n ...(owners && { owners }),\n ...(repository && { repository }),\n },\n {\n override: true,\n }\n );\n\n // What files need added to the service (speficiation files)\n const specFiles = [\n // add any previous spec files to the list\n ...serviceSpecificationsFiles,\n {\n content: saveParsedSpecFile ? getParsedSpecFile(service, document) : await getRawSpecFile(service),\n fileName: path.basename(service.path) || 'asyncapi.yml',\n },\n ];\n\n for (const specFile of specFiles) {\n await addFileToService(\n serviceId,\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 console.log(chalk.green(`\\nFinished generating event catalog for AsyncAPI ${serviceId} (v${version})`));\n }\n\n await checkLicense();\n};\n\nconst getParsedSpecFile = (service: Service, document: AsyncAPIDocumentInterface) => {\n const isSpecFileJSON = service.path.endsWith('.json');\n return isSpecFileJSON\n ? JSON.stringify(document.meta().asyncapi.parsed, null, 4)\n : yaml.dump(document.meta().asyncapi.parsed, { noRefs: true });\n};\n\nconst getRawSpecFile = async (service: Service) => {\n if (service.path.startsWith('http')) {\n try {\n const response = await fetch(service.path);\n return response.text();\n } catch (error) {\n console.log(chalk.red(`\\nFailed to request AsyncAPI file from ${service.path}`));\n return '';\n }\n } else {\n return await readFile(service.path, 'utf8');\n }\n};\n/**\n * Is the AsyncAPI specification (service) the owner of the message?\n * This is determined by the 'x-eventcatalog-role' extension in the message\n *\n * @param message\n * @returns boolean\n *\n * default is provider (AsyncAPI file / service owns the message)\n */\nconst isServiceMessageOwner = (message: MessageInterface): boolean => {\n const value = message.extensions().get('x-eventcatalog-role')?.value() || 'provider';\n return value === 'provider';\n};\n","export const getFileExtentionFromSchemaFormat = (format: string | undefined = '') => {\n if (format.includes('avro')) return 'avsc';\n if (format.includes('yml')) return 'yml';\n if (format.includes('json')) return 'json';\n if (format.includes('openapi')) return 'openapi';\n if (format.includes('protobuf')) return 'protobuf';\n if (format.includes('yaml')) return 'yaml';\n\n return 'json';\n};\n","import {\n MessageInterface,\n AsyncAPIDocumentInterface,\n ChannelInterface,\n ChannelsInterface,\n MessagesInterface,\n} from '@asyncapi/parser';\nimport { getFileExtentionFromSchemaFormat } from './schemas';\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, message: MessageInterface) => {\n return `\n## Architecture\n<NodeGraph />\n\n${\n messageHasSchema(message) && messageIsJSON(message)\n ? `\n## Schema\n<SchemaViewer file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n${\n messageHasSchema(message) && !messageIsJSON(message)\n ? `\n## Schema\n<Schema file=\"${getSchemaFileName(message)}\" title=\"Message Schema\" maxHeight=\"500\" />\n`\n : ''\n}\n\n${\n message.externalDocs()\n ? `\n## External documentation\n- [${message.externalDocs()?.description()}](${message.externalDocs()?.url()})\n`\n : ''\n}\n\n`;\n};\n\nexport const getSummary = (message: MessageInterface) => {\n const messageSummary = message.hasSummary() ? message.summary() : '';\n const messageDescription = message.hasDescription() ? 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 messageHasSchema = (message: MessageInterface) => {\n return message.hasPayload() && message.schemaFormat();\n};\n\nexport const messageIsJSON = (message: MessageInterface) => {\n const fileName = getSchemaFileName(message);\n return fileName.endsWith('.json');\n};\n\nexport const getSchemaFileName = (message: MessageInterface) => {\n const extension = getFileExtentionFromSchemaFormat(message.schemaFormat());\n return `schema.${extension}`;\n};\n\nexport const getMessageName = (message: MessageInterface) => {\n return message.hasTitle() && message.title() ? (message.title() as string) : message.id();\n};\n\nexport const getChannelsForMessage = (\n message: MessageInterface,\n channels: ChannelsInterface,\n document: AsyncAPIDocumentInterface\n): { id: string; version: string }[] => {\n let channelsForMessage: ChannelInterface[] = [];\n const globalVersion = document.info().version();\n\n // Go through all channels and link messages they document\n for (const channel of channels) {\n for (const channelMessage of channel.messages() as MessagesInterface) {\n if (channelMessage.id() === message.id()) {\n channelsForMessage.push(channel);\n }\n }\n }\n\n // You can also document a message directly to a channel, add them too\n for (const messageChannel of message.channels()) {\n channelsForMessage.push(messageChannel);\n }\n\n // Make them unique, as there may be overlapping channels\n const uniqueChannels = channelsForMessage.filter(\n (channel, index, self) => index === self.findIndex((t) => t.id() === channel.id())\n );\n\n return uniqueChannels.map((channel) => {\n const channelVersion = channel.extensions().get('x-eventcatalog-channel-version')?.value() || globalVersion;\n return {\n id: channel.id(),\n version: channelVersion,\n };\n });\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n${document.info().hasDescription() ? `${document.info().description()}` : ''} \n\n## Architecture diagram\n<NodeGraph />\n\n${\n document.info().externalDocs()\n ? `\n## External documentation\n- [${document.info().externalDocs()?.description()}](${document.info().externalDocs()?.url()})\n`\n : ''\n}\n`;\n};\n\nexport const getSummary = (document: AsyncAPIDocumentInterface) => {\n const summary = document.info().hasDescription() ? document.info().description() : '';\n return summary && summary.length < 150 ? summary : '';\n};\n","import { AsyncAPIDocumentInterface } from '@asyncapi/parser';\n\nexport const defaultMarkdown = (document: AsyncAPIDocumentInterface) => {\n return `\n\n## Architecture diagram\n<NodeGraph />\n\n`;\n};\n","import { AsyncAPIDocumentInterface, ChannelInterface } from '@asyncapi/parser';\n\nexport const getChannelProtocols = (channel: ChannelInterface): string[] => {\n const protocols = [];\n\n const bindings = channel.bindings();\n for (const binding of bindings) {\n protocols.push(binding.protocol());\n }\n\n return protocols;\n};\n\nexport const defaultMarkdown = (_document: AsyncAPIDocumentInterface, channel: ChannelInterface) => {\n return `\n ${\n channel.hasDescription()\n ? `\n ## Overview\n ${channel.description()}\n `\n : ''\n }\n\n <ChannelInformation />\n\n ${\n channel.json()?.externalDocs\n ? `\n ## External documentation\n - [${channel.json()?.externalDocs?.description}](${channel.json()?.externalDocs?.url})\n `\n : ''\n }\n \n `;\n};\n","import chalk from 'chalk';\n\nexport default () => {\n console.log(chalk.bgBlue(`\\nYou are using the open source license for this plugin`));\n console.log(\n chalk.blueBright(\n `This plugin is governed and published under a dual-license. \\nIf using for internal, commercial or proprietary software, you can purchase a license at https://dashboard.eventcatalog.dev/ or contact us hello@eventcatalog.dev.`\n )\n );\n};\n"],"mappings":";AAAA,SAAsD,QAAQ,UAAU,eAAe;AACvF,OAAO,WAAW;AAClB,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,SAAS,SAAS;AAClB,OAAOA,YAAW;AAClB,OAAO,UAAU;AAGjB,SAAS,wBAAwB;;;ACV1B,IAAM,mCAAmC,CAAC,SAA6B,OAAO;AACnF,MAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AACpC,MAAI,OAAO,SAAS,KAAK,EAAG,QAAO;AACnC,MAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AACpC,MAAI,OAAO,SAAS,SAAS,EAAG,QAAO;AACvC,MAAI,OAAO,SAAS,UAAU,EAAG,QAAO;AACxC,MAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AAEpC,SAAO;AACT;;;ACAO,IAAM,kBAAkB,CAAC,WAAsC,YAA8B;AAClG,SAAO;AAAA;AAAA;AAAA;AAAA,EAKP,iBAAiB,OAAO,KAAK,cAAc,OAAO,IAC9C;AAAA;AAAA,sBAEgB,kBAAkB,OAAO,CAAC;AAAA,IAE1C,EACN;AAAA,EAEE,iBAAiB,OAAO,KAAK,CAAC,cAAc,OAAO,IAC/C;AAAA;AAAA,gBAEU,kBAAkB,OAAO,CAAC;AAAA,IAEpC,EACN;AAAA;AAAA,EAGE,QAAQ,aAAa,IACjB;AAAA;AAAA,KAED,QAAQ,aAAa,GAAG,YAAY,CAAC,KAAK,QAAQ,aAAa,GAAG,IAAI,CAAC;AAAA,IAEtE,EACN;AAAA;AAAA;AAGA;AAEO,IAAM,aAAa,CAAC,YAA8B;AACvD,QAAM,iBAAiB,QAAQ,WAAW,IAAI,QAAQ,QAAQ,IAAI;AAClE,QAAM,qBAAqB,QAAQ,eAAe,IAAI,QAAQ,YAAY,IAAI;AAE9E,MAAI,6BAA6B;AAEjC,MAAI,CAAC,4BAA4B;AAC/B,iCAA6B,sBAAsB,mBAAmB,SAAS,MAAM,qBAAqB;AAAA,EAC5G;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAC,YAA8B;AAC7D,SAAO,QAAQ,WAAW,KAAK,QAAQ,aAAa;AACtD;AAEO,IAAM,gBAAgB,CAAC,YAA8B;AAC1D,QAAM,WAAW,kBAAkB,OAAO;AAC1C,SAAO,SAAS,SAAS,OAAO;AAClC;AAEO,IAAM,oBAAoB,CAAC,YAA8B;AAC9D,QAAM,YAAY,iCAAiC,QAAQ,aAAa,CAAC;AACzE,SAAO,UAAU,SAAS;AAC5B;AAEO,IAAM,iBAAiB,CAAC,YAA8B;AAC3D,SAAO,QAAQ,SAAS,KAAK,QAAQ,MAAM,IAAK,QAAQ,MAAM,IAAe,QAAQ,GAAG;AAC1F;AAEO,IAAM,wBAAwB,CACnC,SACA,UACA,aACsC;AACtC,MAAI,qBAAyC,CAAC;AAC9C,QAAM,gBAAgB,SAAS,KAAK,EAAE,QAAQ;AAG9C,aAAW,WAAW,UAAU;AAC9B,eAAW,kBAAkB,QAAQ,SAAS,GAAwB;AACpE,UAAI,eAAe,GAAG,MAAM,QAAQ,GAAG,GAAG;AACxC,2BAAmB,KAAK,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAGA,aAAW,kBAAkB,QAAQ,SAAS,GAAG;AAC/C,uBAAmB,KAAK,cAAc;AAAA,EACxC;AAGA,QAAM,iBAAiB,mBAAmB;AAAA,IACxC,CAAC,SAAS,OAAO,SAAS,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,MAAM,QAAQ,GAAG,CAAC;AAAA,EACnF;AAEA,SAAO,eAAe,IAAI,CAAC,YAAY;AACrC,UAAM,iBAAiB,QAAQ,WAAW,EAAE,IAAI,gCAAgC,GAAG,MAAM,KAAK;AAC9F,WAAO;AAAA,MACL,IAAI,QAAQ,GAAG;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;;;AC1GO,IAAMC,mBAAkB,CAAC,aAAwC;AACtE,SAAO;AAAA;AAAA,EAEP,SAAS,KAAK,EAAE,eAAe,IAAI,GAAG,SAAS,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1E,SAAS,KAAK,EAAE,aAAa,IACzB;AAAA;AAAA,KAED,SAAS,KAAK,EAAE,aAAa,GAAG,YAAY,CAAC,KAAK,SAAS,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;AAAA,IAEtF,EACN;AAAA;AAEA;AAEO,IAAMC,cAAa,CAAC,aAAwC;AACjE,QAAM,UAAU,SAAS,KAAK,EAAE,eAAe,IAAI,SAAS,KAAK,EAAE,YAAY,IAAI;AACnF,SAAO,WAAW,QAAQ,SAAS,MAAM,UAAU;AACrD;;;ACtBO,IAAMC,mBAAkB,CAAC,aAAwC;AACtE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAMT;;;ACPO,IAAM,sBAAsB,CAAC,YAAwC;AAC1E,QAAM,YAAY,CAAC;AAEnB,QAAM,WAAW,QAAQ,SAAS;AAClC,aAAW,WAAW,UAAU;AAC9B,cAAU,KAAK,QAAQ,SAAS,CAAC;AAAA,EACnC;AAEA,SAAO;AACT;AAEO,IAAMC,mBAAkB,CAAC,WAAsC,YAA8B;AAClG,SAAO;AAAA,IAEL,QAAQ,eAAe,IACnB;AAAA;AAAA,IAEJ,QAAQ,YAAY,CAAC;AAAA,MAEjB,EACN;AAAA;AAAA;AAAA;AAAA,IAKE,QAAQ,KAAK,GAAG,eACZ;AAAA;AAAA,OAED,QAAQ,KAAK,GAAG,cAAc,WAAW,KAAK,QAAQ,KAAK,GAAG,cAAc,GAAG;AAAA,MAE9E,EACN;AAAA;AAAA;AAGF;;;ACpCA,OAAO,WAAW;AAElB,IAAO,uBAAQ,MAAM;AACnB,UAAQ,IAAI,MAAM,OAAO;AAAA,sDAAyD,CAAC;AACnF,UAAQ;AAAA,IACN,MAAM;AAAA,MACJ;AAAA;AAAA,IACF;AAAA,EACF;AACF;;;ANkBA,IAAM,SAAS,IAAI,OAAO;AAG1B,OAAO,qBAAqB,iBAAiB,CAAC;AAC9C,IAAM,UAAU,KAAK,QAAQ,KAAK,MAAM,CAAC,CAAC;AAE1C,IAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,UAAU,EAAE;AAAA,IACV,EAAE,OAAO;AAAA,MACP,IAAI,EAAE,OAAO,EAAE,gBAAgB,4DAA4D,CAAC;AAAA,MAC5F,MAAM,EAAE,OAAO,EAAE,gBAAgB,8EAA8E,CAAC;AAAA,MAChH,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,IACD,EAAE,SAAS,gDAAgD;AAAA,EAC7D;AAAA,EACA,QAAQ,EACL,OAAO;AAAA,IACN,IAAI,EAAE,OAAO,EAAE,gBAAgB,wDAAwD,CAAC;AAAA,IACxF,MAAM,EAAE,OAAO,EAAE,gBAAgB,4DAA4D,CAAC;AAAA,IAC9F,SAAS,EAAE,OAAO,EAAE,gBAAgB,kEAAkE,CAAC;AAAA,EACzG,CAAC,EACA,SAAS;AAAA,EACZ,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,qDAAqD,CAAC,EAAE,SAAS;AACvH,CAAC;AAMD,IAAM,kBAAkB,CAAC,YAAmB;AAC1C,MAAI;AACF,kBAAc,MAAM,OAAO;AAAA,EAC7B,SAAS,OAAY;AACnB,QAAI,iBAAiB,EAAE,SAAU,OAAM,IAAI,MAAM,KAAK,UAAU,MAAM,QAAQ,MAAM,CAAC,CAAC;AAAA,EACxF;AACF;AAEA,IAAO,cAAQ,OAAO,QAAa,YAAmB;AACpD,MAAI,CAAC,QAAQ,IAAI,aAAa;AAC5B,YAAQ,IAAI,cAAc,QAAQ,IAAI;AAAA,EACxC;AAEA,MAAI,CAAC,QAAQ,IAAI,aAAa;AAC5B,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,MAAM,QAAQ,IAAI,WAAW;AAGjC,QAAM,qBAA2D;AAAA,IAC/D,OAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,WAAW;AAAA,IACb;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,WAAW;AAAA,IACb;AAAA,EACF;AAGA,kBAAgB,OAAO;AAEvB,QAAM,EAAE,UAAU,qBAAqB,OAAO,eAAe,MAAM,gBAAgB,MAAM,IAAI;AAE7F,UAAQ,IAAIC,OAAM,MAAM,cAAc,SAAS,MAAM,oBAAoB,CAAC;AAC1E,aAAW,WAAW,UAAU;AAC9B,YAAQ,IAAIA,OAAM,KAAK,cAAc,QAAQ,IAAI,EAAE,CAAC;AAEpD,UAAM,EAAE,UAAU,YAAY,IAAI,QAAQ,KAAK,WAAW,MAAM,IAC5D,MAAM,QAAQ,QAAQ,QAAQ,IAAI,EAAE,MAAM;AAAA,MACxC;AAAA,IACF,CAAC,IACD,MAAM,SAAS,QAAQ,QAAQ,IAAI,EAAE,MAAM;AAAA,MACzC;AAAA,IACF,CAAC;AAEL,QAAI,CAAC,UAAU;AACb,cAAQ,IAAIA,OAAM,IAAI,+BAA+B,CAAC;AACtD,UAAI,QAAQ,SAAS,QAAQ,OAAO;AAClC,gBAAQ,IAAI,WAAW;AAAA,MACzB,OAAO;AACL,gBAAQ,IAAIA,OAAM,IAAI,2DAA2D,CAAC;AAAA,MACpF;AACA;AAAA,IACF;AAEA,UAAM,aAAa,SAAS,cAAc;AAC1C,UAAM,WAAW,SAAS,YAAY;AACtC,UAAM,eAAe,SAAS,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC;AAEtD,UAAM,YAAY,QAAQ;AAE1B,UAAM,cAAc,QAAQ,QAAQ,SAAS,KAAK,EAAE,MAAM;AAC1D,UAAM,UAAU,SAAS,KAAK,EAAE,QAAQ;AAGxC,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW,CAAC;AAEhB,QAAI,SAAS;AACb,QAAI,aAAa;AAEjB,QAAI,wBAAwB,CAAC;AAC7B,QAAI,6BAA6B,CAAC;AAClC,QAAI,kBAAkBC,iBAA2B,QAAQ;AAGzD,QAAI,QAAQ,QAAQ;AAElB,YAAM,EAAE,IAAI,UAAU,MAAM,YAAY,SAAS,cAAc,IAAI,QAAQ;AAC3E,YAAM,SAAS,MAAM,UAAU,QAAQ,OAAO,IAAI,iBAAiB,QAAQ;AAC3E,YAAM,gBAAgB,MAAM,UAAU,QAAQ,OAAO,IAAI,QAAQ;AAEjE,cAAQ,IAAID,OAAM,KAAK;AAAA,qBAAwB,UAAU,MAAM,aAAa,GAAG,CAAC;AAGhF,UAAI,iBAAiB,cAAc,YAAY,eAAe;AAC5D,cAAM,cAAc,QAAQ;AAC5B,gBAAQ,IAAIA,OAAM,KAAK,kCAAkC,cAAc,OAAO,GAAG,CAAC;AAAA,MACpF;AAGA,UAAI,CAAC,UAAW,UAAU,OAAO,YAAY,eAAgB;AAC3D,cAAM,YAAY;AAAA,UAChB,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAUC,iBAA0B,QAAQ;AAAA;AAAA,QAE9C,CAAC;AACD,gBAAQ,IAAID,OAAM,KAAK,eAAe,aAAa,WAAW,CAAC;AAAA,MACjE;AAEA,UAAI,iBAAiB,cAAc,YAAY,eAAe;AAC5D,gBAAQ,IAAIA,OAAM,OAAO,eAAe,aAAa,uCAAuC,CAAC;AAAA,MAC/F;AAGA,YAAM,mBAAmB,UAAU,EAAE,IAAI,WAAW,QAAiB,GAAG,aAAa;AAAA,IACvF;AAGA,QAAI,eAAe;AACjB,iBAAW,WAAW,UAAU;AAC9B,cAAM,gBAAgB,QAAQ,KAAK;AACnC,cAAM,YAAY,QAAQ,GAAG;AAC7B,cAAM,SAAS,eAAe,cAAc,CAAC;AAC7C,cAAM,YAAY,oBAAoB,OAAO;AAC7C,cAAM,iBAAiB,QAAQ,WAAW,EAAE,IAAI,gCAAgC,GAAG,MAAM,KAAK;AAC9F,YAAI,kBAAkBC,iBAA2B,UAAU,OAAO;AAElE,gBAAQ,IAAID,OAAM,KAAK,uBAAuB,SAAS,MAAM,cAAc,GAAG,CAAC;AAE/E,cAAM,mBAAmB,OAAO,KAAK,MAAM,EAAE;AAAA,UAC3C,CAAC,KAAK,QAAQ;AACZ,kBAAM,QAAQ,OAAO,GAAG;AACxB,gBAAI,GAAG,IAAI,CAAC;AACZ,gBAAI,MAAM,KAAM,KAAI,GAAG,EAAE,OAAO,MAAM;AACtC,gBAAI,MAAM,QAAS,KAAI,GAAG,EAAE,UAAU,MAAM;AAC5C,gBAAI,MAAM,SAAU,KAAI,GAAG,EAAE,WAAW,MAAM;AAC9C,gBAAI,MAAM,YAAa,KAAI,GAAG,EAAE,cAAc,MAAM;AACpD,mBAAO;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QACH;AAEA,cAAM,mBAAmB,MAAM,WAAW,WAAW,QAAQ;AAE7D,YAAI,kBAAkB;AACpB,4BAAkB,iBAAiB;AACnC,cAAI,iBAAiB,YAAY,gBAAgB;AAC/C,kBAAM,eAAe,SAAS;AAC9B,oBAAQ,IAAIA,OAAM,KAAK,kCAAkC,SAAS,MAAM,cAAc,GAAG,CAAC;AAAA,UAC5F;AAAA,QACF;AAEA,cAAM;AAAA,UACJ;AAAA,YACE,IAAI;AAAA,YACJ,MAAM,eAAe,SAAS,QAAQ,GAAG;AAAA,YACzC,UAAU;AAAA,YACV,SAAS;AAAA,YACT,GAAI,OAAO,KAAK,gBAAgB,EAAE,SAAS,KAAK,EAAE,YAAY,iBAAiB;AAAA,YAC/E,GAAI,QAAQ,QAAQ,KAAK,EAAE,SAAS,QAAQ,QAAQ,EAAE;AAAA,YACtD,GAAI,eAAe,WAAW,EAAE,SAAS,cAAc,QAAQ;AAAA,YAC/D,GAAI,UAAU,SAAS,KAAK,EAAE,UAAU;AAAA,UAC1C;AAAA,UACA,EAAE,UAAU,KAAK;AAAA,QACnB;AAEA,gBAAQ,IAAIA,OAAM,KAAK,cAAc,SAAS,MAAM,OAAO,WAAW,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,eAAW,aAAa,YAAY;AAClC,iBAAW,WAAW,UAAU,SAAS,GAAG;AAC1C,cAAM,YAAa,QAAQ,WAAW,EAAE,IAAI,6BAA6B,GAAG,MAAM,KAAmB;AACrG,cAAM,iBAAiB,QAAQ,WAAW,EAAE,IAAI,gCAAgC,GAAG,MAAM,KAAK;AAG9F,cAAM,6BAA6B,sBAAsB,OAAO;AAChE,cAAM,aAAa,UAAU,OAAO,MAAM,aAAa,UAAU,OAAO,MAAM;AAC9E,cAAM,SAAS,UAAU,OAAO,MAAM,UAAU,UAAU,OAAO,MAAM;AAEvE,cAAM,YAAY,QAAQ,GAAG,EAAE,YAAY;AAE3C,YAAI,cAAc,WAAW,cAAc,aAAa,cAAc,SAAS;AAC7E,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AAEA,cAAM;AAAA,UACJ,OAAO;AAAA,UACP,SAAS;AAAA,UACT,KAAK;AAAA,UACL,WAAW;AAAA,QACb,IAAI,mBAAmB,SAAS;AAEhC,YAAI,kBAAkB,gBAA2B,UAAU,OAAO;AAClE,cAAM,SAAS,QAAQ,KAAK,EAAE,IAAI,KAAK,CAAC;AAExC,gBAAQ,IAAIA,OAAM,KAAK,uBAAuB,eAAe,OAAO,CAAC,MAAM,cAAc,GAAG,CAAC;AAE7F,YAAI,4BAA4B;AAE9B,gBAAM,mBAAmB,MAAM,WAAW,QAAQ,GAAG,EAAE,YAAY,GAAG,QAAQ;AAE9E,cAAI,kBAAkB;AAEpB,8BAAkB,iBAAiB;AAEnC,gBAAI,iBAAiB,YAAY,gBAAgB;AAE/C,oBAAM,eAAe,SAAS;AAC9B,sBAAQ,IAAIA,OAAM,KAAK,oCAAoC,iBAAiB,OAAO,GAAG,CAAC;AAAA,YACzF;AAAA,UACF;AAEA,gBAAM,qBAAqB,gBAAgB,sBAAsB,SAAS,UAAU,QAAQ,IAAI,CAAC;AAGjG,gBAAM;AAAA,YACJ;AAAA,cACE,IAAI;AAAA,cACJ,SAAS;AAAA,cACT,MAAM,eAAe,OAAO;AAAA,cAC5B,SAAS,WAAkB,OAAO;AAAA,cAClC,UAAU;AAAA,cACV,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,MAAM,KAAK,GAAG,WAAW,QAAQ,iBAAiB,OAAO,EAAE;AAAA,cACrG,YAAY,iBAAiB,OAAO,IAAI,kBAAkB,OAAO,IAAI;AAAA,cACrE,GAAI,mBAAmB,SAAS,KAAK,EAAE,UAAU,mBAAmB;AAAA,YACtE;AAAA,YACA;AAAA,cACE,UAAU;AAAA,cACV,MAAM,QAAQ,GAAG;AAAA,YACnB;AAAA,UACF;AAEA,kBAAQ,IAAIA,OAAM,KAAK,gBAAgB,cAAc,WAAW,CAAC;AAEjE,cAAI,iBAAiB,OAAO,GAAG;AAE7B,kBAAM,SAAS,QAAQ,QAAQ,GAAG,WAAW,GAAG,IAAI,2BAA2B,GAAG,KAAK,KAAK,QAAQ,QAAQ,GAAG,KAAK;AAEpH,kBAAM;AAAA,cACJ;AAAA,cACA;AAAA,gBACE,UAAU,kBAAkB,OAAO;AAAA,gBACnC,QAAQ,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,cACxC;AAAA,cACA;AAAA,YACF;AACA,oBAAQ,IAAIA,OAAM,KAAK,gCAAgC,cAAc,GAAG,CAAC;AAAA,UAC3E;AAAA,QACF,OAAO;AAEL,kBAAQ,IAAIA,OAAM,OAAO,iCAAiC,eAAe,OAAO,CAAC,KAAK,cAAc,GAAG,CAAC;AAAA,QAC1G;AAEA,YAAI,OAAQ,OAAM,KAAK,EAAE,IAAI,WAAW,SAAS,eAAe,CAAC;AACjE,YAAI,WAAY,UAAS,KAAK,EAAE,IAAI,WAAW,SAAS,eAAe,CAAC;AAAA,MAC1E;AAAA,IACF;AAGA,UAAM,yBAAyB,MAAM,WAAW,WAAW,QAAQ;AAEnE,YAAQ,IAAIA,OAAM,KAAK,uBAAuB,SAAS,MAAM,OAAO,GAAG,CAAC;AAExE,QAAI,wBAAwB;AAC1B,wBAAkB,uBAAuB;AACzC,eAAS,uBAAuB,UAAW,CAAC;AAC5C,mBAAa,uBAAuB,cAAc;AAGlD,UAAI,uBAAuB,YAAY,SAAS;AAC9C,cAAM,eAAe,SAAS;AAC9B,gBAAQ,IAAIA,OAAM,KAAK,mCAAmC,uBAAuB,OAAO,GAAG,CAAC;AAAA,MAC9F;AAGA,UAAI,uBAAuB,YAAY,SAAS;AAE9C,0BAAkB,uBAAuB;AACzC,gCAAwB,uBAAuB,kBAAkB,CAAC;AAClE,gBAAQ,uBAAuB,QAAQ,CAAC,GAAG,uBAAuB,OAAO,GAAG,KAAK,IAAI;AACrF,mBAAW,uBAAuB,WAAW,CAAC,GAAG,uBAAuB,UAAU,GAAG,QAAQ,IAAI;AACjG,qCAA6B,MAAM,gCAAgC,WAAW,OAAO;AAAA,MACvF;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,SAAS,QAAQ,IAAI;AAE3C,UAAM;AAAA,MACJ;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN;AAAA,QACA,SAASE,YAAkB,QAAQ;AAAA,QACnC,QAAQ,aAAa,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,KAAK,GAAG,WAAW,QAAQ,iBAAiB,OAAO,EAAE;AAAA,QACvG,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,YAAY,YAAY;AAAA,QACxB,gBAAgB;AAAA,UACd,GAAG;AAAA,UACH,cAAc,YAAY;AAAA,QAC5B;AAAA,QACA,GAAI,UAAU,EAAE,OAAO;AAAA,QACvB,GAAI,cAAc,EAAE,WAAW;AAAA,MACjC;AAAA,MACA;AAAA,QACE,UAAU;AAAA,MACZ;AAAA,IACF;AAGA,UAAM,YAAY;AAAA;AAAA,MAEhB,GAAG;AAAA,MACH;AAAA,QACE,SAAS,qBAAqB,kBAAkB,SAAS,QAAQ,IAAI,MAAM,eAAe,OAAO;AAAA,QACjG,UAAU,KAAK,SAAS,QAAQ,IAAI,KAAK;AAAA,MAC3C;AAAA,IACF;AAEA,eAAW,YAAY,WAAW;AAChC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,UAAU,SAAS;AAAA,UACnB,SAAS,SAAS;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAIF,OAAM,KAAK,gBAAgB,OAAO,WAAW,CAAC;AAE1D,YAAQ,IAAIA,OAAM,MAAM;AAAA,iDAAoD,SAAS,MAAM,OAAO,GAAG,CAAC;AAAA,EACxG;AAEA,QAAM,qBAAa;AACrB;AAEA,IAAM,oBAAoB,CAAC,SAAkB,aAAwC;AACnF,QAAM,iBAAiB,QAAQ,KAAK,SAAS,OAAO;AACpD,SAAO,iBACH,KAAK,UAAU,SAAS,KAAK,EAAE,SAAS,QAAQ,MAAM,CAAC,IACvD,KAAK,KAAK,SAAS,KAAK,EAAE,SAAS,QAAQ,EAAE,QAAQ,KAAK,CAAC;AACjE;AAEA,IAAM,iBAAiB,OAAO,YAAqB;AACjD,MAAI,QAAQ,KAAK,WAAW,MAAM,GAAG;AACnC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,QAAQ,IAAI;AACzC,aAAO,SAAS,KAAK;AAAA,IACvB,SAAS,OAAO;AACd,cAAQ,IAAIA,OAAM,IAAI;AAAA,uCAA0C,QAAQ,IAAI,EAAE,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,WAAO,MAAM,SAAS,QAAQ,MAAM,MAAM;AAAA,EAC5C;AACF;AAUA,IAAM,wBAAwB,CAAC,YAAuC;AACpE,QAAM,QAAQ,QAAQ,WAAW,EAAE,IAAI,qBAAqB,GAAG,MAAM,KAAK;AAC1E,SAAO,UAAU;AACnB;","names":["chalk","defaultMarkdown","getSummary","defaultMarkdown","defaultMarkdown","chalk","defaultMarkdown","getSummary"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventcatalog/generator-asyncapi",
3
- "version": "2.7.0",
3
+ "version": "2.7.2",
4
4
  "description": "AsyncAPI generator for EventCatalog",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -30,7 +30,7 @@
30
30
  "dependencies": {
31
31
  "@asyncapi/avro-schema-parser": "^3.0.24",
32
32
  "@asyncapi/parser": "^3.3.0",
33
- "@eventcatalog/sdk": "^1.4.1",
33
+ "@eventcatalog/sdk": "^1.4.4",
34
34
  "chalk": "^4",
35
35
  "fs-extra": "^11.2.0",
36
36
  "glob": "^11.0.0",