@eventcatalog/generator-asyncapi 6.4.4 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1528,7 +1528,7 @@ var require_dist2 = __commonJS({
1528
1528
  // src/index.ts
1529
1529
  import { Parser, fromFile, fromURL } from "@asyncapi/parser";
1530
1530
  import utils from "@eventcatalog/sdk";
1531
- import { readFile } from "fs/promises";
1531
+ import { cp, mkdir, readFile, rm } from "fs/promises";
1532
1532
  import argv from "minimist";
1533
1533
  import yaml from "js-yaml";
1534
1534
  import { z } from "zod";
@@ -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: "6.4.4",
1541
+ version: "7.0.1",
1542
1542
  description: "AsyncAPI generator for EventCatalog",
1543
1543
  scripts: {
1544
1544
  build: "tsup",
@@ -4156,6 +4156,7 @@ var cliArgs = argv(process.argv.slice(2));
4156
4156
  var optionsSchema = z.object({
4157
4157
  licenseKey: z.string().optional(),
4158
4158
  writeFilesToRoot: z.boolean().optional(),
4159
+ preserveExistingMessages: z.boolean().optional(),
4159
4160
  services: z.array(
4160
4161
  z.object({
4161
4162
  id: z.string({ required_error: "The service id is required. please provide the service id" }),
@@ -4290,6 +4291,9 @@ var index_default = async (config, options) => {
4290
4291
  versionCommand,
4291
4292
  versionEvent,
4292
4293
  versionQuery,
4294
+ rmCommandById,
4295
+ rmEventById,
4296
+ rmQueryById,
4293
4297
  addSchemaToCommand,
4294
4298
  addSchemaToEvent,
4295
4299
  addSchemaToQuery,
@@ -4309,6 +4313,7 @@ var index_default = async (config, options) => {
4309
4313
  write: writeEvent,
4310
4314
  version: versionEvent,
4311
4315
  get: getEvent,
4316
+ remove: rmEventById,
4312
4317
  addSchema: addSchemaToEvent,
4313
4318
  addExample: addExampleToEvent,
4314
4319
  collection: "events"
@@ -4317,6 +4322,7 @@ var index_default = async (config, options) => {
4317
4322
  write: writeCommand,
4318
4323
  version: versionCommand,
4319
4324
  get: getCommand,
4325
+ remove: rmCommandById,
4320
4326
  addSchema: addSchemaToCommand,
4321
4327
  addExample: addExampleToCommand,
4322
4328
  collection: "commands"
@@ -4325,6 +4331,7 @@ var index_default = async (config, options) => {
4325
4331
  write: writeQuery,
4326
4332
  version: versionQuery,
4327
4333
  get: getQuery,
4334
+ remove: rmQueryById,
4328
4335
  addSchema: addSchemaToQuery,
4329
4336
  addExample: addExampleToQuery,
4330
4337
  collection: "queries"
@@ -4337,7 +4344,8 @@ var index_default = async (config, options) => {
4337
4344
  parseSchemas = true,
4338
4345
  parseChannels = false,
4339
4346
  parseExamples = true,
4340
- attachHeadersToSchema = false
4347
+ attachHeadersToSchema = false,
4348
+ preserveExistingMessages = true
4341
4349
  } = options;
4342
4350
  console.log(chalk4.green(`Processing ${services.length} AsyncAPI files...`));
4343
4351
  for (const service of services) {
@@ -4496,7 +4504,8 @@ Processing domain: ${domainName} (v${domainVersion})`));
4496
4504
  const deprecatedDate = message2.extensions().get("x-eventcatalog-deprecated-date")?.value() || null;
4497
4505
  const deprecatedMessage = message2.extensions().get("x-eventcatalog-deprecated-message")?.value() || null;
4498
4506
  const isMessageMarkedAsDraft = isDomainMarkedAsDraft || isServiceMarkedAsDraft || message2.extensions().get("x-eventcatalog-draft")?.value() || null;
4499
- const serviceOwnsMessageContract = isServiceMessageOwner(message2, operation);
4507
+ const messageOwnership = getMessageOwnership(message2, operation);
4508
+ const serviceOwnsMessageContract = messageOwnership === "owner";
4500
4509
  const isReceived = operation.action() === "receive" || operation.action() === "subscribe";
4501
4510
  const isSent = operation.action() === "send" || operation.action() === "publish";
4502
4511
  let messageId = options.messages?.id?.lowerCase ? message2.id().toLowerCase() : message2.id();
@@ -4514,6 +4523,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4514
4523
  write: writeMessage,
4515
4524
  version: versionMessage,
4516
4525
  get: getMessage,
4526
+ remove: removeMessage,
4517
4527
  addSchema: addSchemaToMessage,
4518
4528
  addExample: addExampleToMessage,
4519
4529
  collection: folder
@@ -4528,15 +4538,26 @@ Processing domain: ${domainName} (v${domainVersion})`));
4528
4538
  if (options.writeFilesToRoot) {
4529
4539
  messagePath = messageId;
4530
4540
  }
4531
- if (serviceOwnsMessageContract) {
4541
+ if (messageOwnership === "external") {
4542
+ console.log(chalk4.yellow(` - Skipping external message: ${getMessageName(message2)}(v${messageVersion})`));
4543
+ } else {
4532
4544
  const catalogedMessage = await getMessage(messageId, "latest");
4533
4545
  let shouldWriteMessage = true;
4534
- if (catalogedMessage) {
4535
- messageMarkdown = catalogedMessage.markdown;
4546
+ let existingMessageDirectoryToRelocate = null;
4547
+ if (serviceOwnsMessageContract && catalogedMessage) {
4536
4548
  messageBadges = catalogedMessage.badges || null;
4537
4549
  messageAttachments = catalogedMessage.attachments || null;
4550
+ if (preserveExistingMessages) {
4551
+ messageMarkdown = catalogedMessage.markdown;
4552
+ }
4538
4553
  const catalogedVersion = catalogedMessage.version ?? "";
4539
4554
  if (isSameVersion(catalogedVersion, messageVersion)) {
4555
+ const catalogedMessagePath = await getResourcePath(process.env.PROJECT_DIR, messageId, catalogedVersion);
4556
+ const targetMessageDirectory = path3.resolve(process.env.PROJECT_DIR, folder, messagePath);
4557
+ const catalogedMessageDirectory = catalogedMessagePath ? path3.dirname(catalogedMessagePath.fullPath) : null;
4558
+ if (catalogedMessageDirectory && path3.normalize(catalogedMessageDirectory) !== path3.normalize(targetMessageDirectory)) {
4559
+ existingMessageDirectoryToRelocate = catalogedMessageDirectory;
4560
+ }
4540
4561
  } else if (isNewerVersion(messageVersion, catalogedVersion)) {
4541
4562
  await versionMessage(messageId);
4542
4563
  console.log(chalk4.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));
@@ -4549,8 +4570,24 @@ Processing domain: ${domainName} (v${domainVersion})`));
4549
4570
  messageVersion = catalogedVersion;
4550
4571
  shouldWriteMessage = false;
4551
4572
  }
4573
+ } else if (!serviceOwnsMessageContract && catalogedMessage) {
4574
+ console.log(
4575
+ chalk4.yellow(` - Referencing existing message ${messageId} (v${catalogedMessage.version}) without overwriting`)
4576
+ );
4577
+ messageVersion = catalogedMessage.version ?? messageVersion;
4578
+ shouldWriteMessage = false;
4552
4579
  }
4553
4580
  if (shouldWriteMessage) {
4581
+ if (existingMessageDirectoryToRelocate) {
4582
+ const targetMessageDirectory = path3.resolve(process.env.PROJECT_DIR, folder, messagePath);
4583
+ await removeMessage(messageId, messageVersion, true);
4584
+ await mkdir(path3.dirname(targetMessageDirectory), { recursive: true });
4585
+ await cp(existingMessageDirectoryToRelocate, targetMessageDirectory, {
4586
+ recursive: true,
4587
+ force: true
4588
+ });
4589
+ await rm(existingMessageDirectoryToRelocate, { recursive: true, force: true });
4590
+ }
4554
4591
  await writeMessage(
4555
4592
  {
4556
4593
  id: messageId,
@@ -4568,7 +4605,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
4568
4605
  ...isMessageMarkedAsDraft && { draft: true }
4569
4606
  },
4570
4607
  {
4571
- override: true,
4608
+ // References only reach this branch when the message is missing. They may
4609
+ // create a fallback, but only owners may replace an existing contract.
4610
+ override: serviceOwnsMessageContract,
4572
4611
  path: messagePath
4573
4612
  }
4574
4613
  );
@@ -4602,8 +4641,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4602
4641
  }
4603
4642
  }
4604
4643
  }
4605
- } else {
4606
- console.log(chalk4.yellow(` - Skipping external message: ${getMessageName(message2)}(v${messageVersion})`));
4607
4644
  }
4608
4645
  const group = options.groupMessagesBy === "x-extension" ? message2.extensions().get("x-eventcatalog-group")?.value() || void 0 : void 0;
4609
4646
  if (parseChannels) {
@@ -4769,11 +4806,18 @@ var getSchemaFromMessagePart = (schema) => {
4769
4806
  var isJSONSchemaMessage = (message2) => {
4770
4807
  return getSchemaFileName(message2).endsWith(".json");
4771
4808
  };
4772
- var isServiceMessageOwner = (message2, operation) => {
4809
+ var getMessageOwnership = (message2, operation) => {
4773
4810
  const operationRole = operation?.extensions?.().get?.("x-eventcatalog-role")?.value?.();
4774
4811
  const messageRole = message2.extensions().get("x-eventcatalog-role")?.value();
4775
- const value = operationRole || messageRole || "provider";
4776
- return value === "provider";
4812
+ const explicitRole = operationRole || messageRole;
4813
+ if (explicitRole) {
4814
+ return explicitRole === "provider" ? "owner" : "external";
4815
+ }
4816
+ const action = operation?.action?.();
4817
+ if (action === "receive" || action === "subscribe") {
4818
+ return "reference";
4819
+ }
4820
+ return "owner";
4777
4821
  };
4778
4822
  export {
4779
4823
  index_default as default