@eventcatalog/generator-asyncapi 5.5.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1538,7 +1538,7 @@ import path3 from "path";
1538
1538
  // package.json
1539
1539
  var package_default = {
1540
1540
  name: "@eventcatalog/generator-asyncapi",
1541
- version: "5.5.0",
1541
+ version: "6.0.0",
1542
1542
  description: "AsyncAPI generator for EventCatalog",
1543
1543
  scripts: {
1544
1544
  build: "tsup",
@@ -2646,30 +2646,6 @@ var getSchemaFileName = (message2) => {
2646
2646
  var getMessageName = (message2) => {
2647
2647
  return message2.hasTitle() && message2.title() ? message2.title() : message2.id();
2648
2648
  };
2649
- var getChannelsForMessage = (message2, channels, document2) => {
2650
- let channelsForMessage = [];
2651
- const globalVersion = document2.info().version();
2652
- for (const channel of channels) {
2653
- for (const channelMessage of channel.messages()) {
2654
- if (channelMessage.id() === message2.id()) {
2655
- channelsForMessage.push(channel);
2656
- }
2657
- }
2658
- }
2659
- for (const messageChannel of message2.channels()) {
2660
- channelsForMessage.push(messageChannel);
2661
- }
2662
- const uniqueChannels = channelsForMessage.filter(
2663
- (channel, index, self) => index === self.findIndex((t) => t.id() === channel.id())
2664
- );
2665
- return uniqueChannels.map((channel) => {
2666
- const channelVersion = channel.extensions().get("x-eventcatalog-channel-version")?.value() || globalVersion;
2667
- return {
2668
- id: channel.id(),
2669
- version: channelVersion
2670
- };
2671
- });
2672
- };
2673
2649
 
2674
2650
  // src/utils/services.ts
2675
2651
  var defaultMarkdown2 = (document2) => {
@@ -4158,6 +4134,7 @@ var optionsSchema = z.object({
4158
4134
  debug: z.boolean().optional(),
4159
4135
  parseSchemas: z.boolean().optional(),
4160
4136
  parseChannels: z.boolean().optional(),
4137
+ attachHeadersToSchema: z.boolean().optional(),
4161
4138
  saveParsedSpecFile: z.boolean({ invalid_type_error: "The saveParsedSpecFile is not a boolean in options" }).optional()
4162
4139
  });
4163
4140
  var toUniqueArray = (array) => {
@@ -4236,7 +4213,13 @@ var index_default = async (config, options) => {
4236
4213
  }
4237
4214
  };
4238
4215
  validateOptions(options);
4239
- const { services, saveParsedSpecFile = false, parseSchemas = true, parseChannels = false } = options;
4216
+ const {
4217
+ services,
4218
+ saveParsedSpecFile = false,
4219
+ parseSchemas = true,
4220
+ parseChannels = false,
4221
+ attachHeadersToSchema = false
4222
+ } = options;
4240
4223
  console.log(chalk4.green(`Processing ${services.length} AsyncAPI files...`));
4241
4224
  for (const service of services) {
4242
4225
  console.log(chalk4.gray(`Processing ${service.path}`));
@@ -4414,7 +4397,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4414
4397
  console.log(chalk4.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));
4415
4398
  }
4416
4399
  }
4417
- const channelsForMessage = parseChannels ? getChannelsForMessage(message2, channels, document2) : [];
4418
4400
  await writeMessage(
4419
4401
  {
4420
4402
  id: messageId,
@@ -4426,7 +4408,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4426
4408
  ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4427
4409
  ...owners && { owners },
4428
4410
  ...messageAttachments && { attachments: messageAttachments },
4429
- ...channelsForMessage.length > 0 && { channels: channelsForMessage },
4430
4411
  ...deprecatedDate && {
4431
4412
  deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4432
4413
  },
@@ -4439,10 +4420,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4439
4420
  );
4440
4421
  console.log(chalk4.cyan(` - Message (v${messageVersion}) created`));
4441
4422
  if (messageHasSchema(message2)) {
4442
- let schema = message2.payload()?.extensions()?.get("x-parser-original-payload")?.json() || message2.payload()?.json();
4443
- if (schema?.schema) {
4444
- schema = schema.schema;
4445
- }
4423
+ const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4446
4424
  const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4447
4425
  await addSchemaToMessage(
4448
4426
  messageId,
@@ -4458,8 +4436,24 @@ Processing domain: ${domainName} (v${domainVersion})`));
4458
4436
  } else {
4459
4437
  console.log(chalk4.yellow(` - Skipping external message: ${getMessageName(message2)}(v${messageVersion})`));
4460
4438
  }
4461
- if (isSent) sends.push({ id: messageId, version: messageVersion });
4462
- if (isReceived) receives.push({ id: messageId, version: messageVersion });
4439
+ if (parseChannels) {
4440
+ const operationChannels = operation.channels().all();
4441
+ const channelPointers = operationChannels.map((channel) => {
4442
+ const explicitVersion = channel.extensions().get("x-eventcatalog-channel-version")?.value();
4443
+ return { id: channel.id(), ...explicitVersion && { version: explicitVersion } };
4444
+ });
4445
+ if (isSent)
4446
+ sends.push({ id: messageId, version: messageVersion, ...channelPointers.length > 0 && { to: channelPointers } });
4447
+ if (isReceived)
4448
+ receives.push({
4449
+ id: messageId,
4450
+ version: messageVersion,
4451
+ ...channelPointers.length > 0 && { from: channelPointers }
4452
+ });
4453
+ } else {
4454
+ if (isSent) sends.push({ id: messageId, version: messageVersion });
4455
+ if (isReceived) receives.push({ id: messageId, version: messageVersion });
4456
+ }
4463
4457
  }
4464
4458
  }
4465
4459
  const latestServiceInCatalog = await getService(serviceId, "latest");
@@ -4563,6 +4557,36 @@ Failed to request AsyncAPI file from ${service.path}`));
4563
4557
  return await readFile(service.path, "utf8");
4564
4558
  }
4565
4559
  };
4560
+ var getSchemaForMessage = (message2, attachHeadersToSchema) => {
4561
+ const payloadSchema = getSchemaFromMessagePart(
4562
+ message2.payload()?.extensions()?.get("x-parser-original-payload")?.json() || message2.payload()?.json()
4563
+ );
4564
+ if (!attachHeadersToSchema || !message2.hasHeaders() || !isJSONSchemaMessage(message2)) {
4565
+ return payloadSchema;
4566
+ }
4567
+ const headersSchema = getSchemaFromMessagePart(
4568
+ message2.headers()?.extensions()?.get("x-parser-original-payload")?.json() || message2.headers()?.json()
4569
+ );
4570
+ if (!headersSchema) {
4571
+ return payloadSchema;
4572
+ }
4573
+ return {
4574
+ type: "object",
4575
+ properties: {
4576
+ headers: headersSchema,
4577
+ payload: payloadSchema
4578
+ }
4579
+ };
4580
+ };
4581
+ var getSchemaFromMessagePart = (schema) => {
4582
+ if (schema?.schema) {
4583
+ return schema.schema;
4584
+ }
4585
+ return schema;
4586
+ };
4587
+ var isJSONSchemaMessage = (message2) => {
4588
+ return getSchemaFileName(message2).endsWith(".json");
4589
+ };
4566
4590
  var isServiceMessageOwner = (message2, operation) => {
4567
4591
  const operationRole = operation?.extensions?.().get?.("x-eventcatalog-role")?.value?.();
4568
4592
  const messageRole = message2.extensions().get("x-eventcatalog-role")?.value();