@eventcatalog/generator-asyncapi 6.4.4 → 7.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
@@ -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.0",
1542
1542
  description: "AsyncAPI generator for EventCatalog",
1543
1543
  scripts: {
1544
1544
  build: "tsup",
@@ -4290,6 +4290,9 @@ var index_default = async (config, options) => {
4290
4290
  versionCommand,
4291
4291
  versionEvent,
4292
4292
  versionQuery,
4293
+ rmCommandById,
4294
+ rmEventById,
4295
+ rmQueryById,
4293
4296
  addSchemaToCommand,
4294
4297
  addSchemaToEvent,
4295
4298
  addSchemaToQuery,
@@ -4309,6 +4312,7 @@ var index_default = async (config, options) => {
4309
4312
  write: writeEvent,
4310
4313
  version: versionEvent,
4311
4314
  get: getEvent,
4315
+ remove: rmEventById,
4312
4316
  addSchema: addSchemaToEvent,
4313
4317
  addExample: addExampleToEvent,
4314
4318
  collection: "events"
@@ -4317,6 +4321,7 @@ var index_default = async (config, options) => {
4317
4321
  write: writeCommand,
4318
4322
  version: versionCommand,
4319
4323
  get: getCommand,
4324
+ remove: rmCommandById,
4320
4325
  addSchema: addSchemaToCommand,
4321
4326
  addExample: addExampleToCommand,
4322
4327
  collection: "commands"
@@ -4325,6 +4330,7 @@ var index_default = async (config, options) => {
4325
4330
  write: writeQuery,
4326
4331
  version: versionQuery,
4327
4332
  get: getQuery,
4333
+ remove: rmQueryById,
4328
4334
  addSchema: addSchemaToQuery,
4329
4335
  addExample: addExampleToQuery,
4330
4336
  collection: "queries"
@@ -4496,7 +4502,8 @@ Processing domain: ${domainName} (v${domainVersion})`));
4496
4502
  const deprecatedDate = message2.extensions().get("x-eventcatalog-deprecated-date")?.value() || null;
4497
4503
  const deprecatedMessage = message2.extensions().get("x-eventcatalog-deprecated-message")?.value() || null;
4498
4504
  const isMessageMarkedAsDraft = isDomainMarkedAsDraft || isServiceMarkedAsDraft || message2.extensions().get("x-eventcatalog-draft")?.value() || null;
4499
- const serviceOwnsMessageContract = isServiceMessageOwner(message2, operation);
4505
+ const messageOwnership = getMessageOwnership(message2, operation);
4506
+ const serviceOwnsMessageContract = messageOwnership === "owner";
4500
4507
  const isReceived = operation.action() === "receive" || operation.action() === "subscribe";
4501
4508
  const isSent = operation.action() === "send" || operation.action() === "publish";
4502
4509
  let messageId = options.messages?.id?.lowerCase ? message2.id().toLowerCase() : message2.id();
@@ -4514,6 +4521,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4514
4521
  write: writeMessage,
4515
4522
  version: versionMessage,
4516
4523
  get: getMessage,
4524
+ remove: removeMessage,
4517
4525
  addSchema: addSchemaToMessage,
4518
4526
  addExample: addExampleToMessage,
4519
4527
  collection: folder
@@ -4528,15 +4536,24 @@ Processing domain: ${domainName} (v${domainVersion})`));
4528
4536
  if (options.writeFilesToRoot) {
4529
4537
  messagePath = messageId;
4530
4538
  }
4531
- if (serviceOwnsMessageContract) {
4539
+ if (messageOwnership === "external") {
4540
+ console.log(chalk4.yellow(` - Skipping external message: ${getMessageName(message2)}(v${messageVersion})`));
4541
+ } else {
4532
4542
  const catalogedMessage = await getMessage(messageId, "latest");
4533
4543
  let shouldWriteMessage = true;
4534
- if (catalogedMessage) {
4544
+ let existingMessageDirectoryToRelocate = null;
4545
+ if (serviceOwnsMessageContract && catalogedMessage) {
4535
4546
  messageMarkdown = catalogedMessage.markdown;
4536
4547
  messageBadges = catalogedMessage.badges || null;
4537
4548
  messageAttachments = catalogedMessage.attachments || null;
4538
4549
  const catalogedVersion = catalogedMessage.version ?? "";
4539
4550
  if (isSameVersion(catalogedVersion, messageVersion)) {
4551
+ const catalogedMessagePath = await getResourcePath(process.env.PROJECT_DIR, messageId, catalogedVersion);
4552
+ const targetMessageDirectory = path3.resolve(process.env.PROJECT_DIR, folder, messagePath);
4553
+ const catalogedMessageDirectory = catalogedMessagePath ? path3.dirname(catalogedMessagePath.fullPath) : null;
4554
+ if (catalogedMessageDirectory && path3.normalize(catalogedMessageDirectory) !== path3.normalize(targetMessageDirectory)) {
4555
+ existingMessageDirectoryToRelocate = catalogedMessageDirectory;
4556
+ }
4540
4557
  } else if (isNewerVersion(messageVersion, catalogedVersion)) {
4541
4558
  await versionMessage(messageId);
4542
4559
  console.log(chalk4.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));
@@ -4549,8 +4566,24 @@ Processing domain: ${domainName} (v${domainVersion})`));
4549
4566
  messageVersion = catalogedVersion;
4550
4567
  shouldWriteMessage = false;
4551
4568
  }
4569
+ } else if (!serviceOwnsMessageContract && catalogedMessage) {
4570
+ console.log(
4571
+ chalk4.yellow(` - Referencing existing message ${messageId} (v${catalogedMessage.version}) without overwriting`)
4572
+ );
4573
+ messageVersion = catalogedMessage.version ?? messageVersion;
4574
+ shouldWriteMessage = false;
4552
4575
  }
4553
4576
  if (shouldWriteMessage) {
4577
+ if (existingMessageDirectoryToRelocate) {
4578
+ const targetMessageDirectory = path3.resolve(process.env.PROJECT_DIR, folder, messagePath);
4579
+ await removeMessage(messageId, messageVersion, true);
4580
+ await mkdir(path3.dirname(targetMessageDirectory), { recursive: true });
4581
+ await cp(existingMessageDirectoryToRelocate, targetMessageDirectory, {
4582
+ recursive: true,
4583
+ force: true
4584
+ });
4585
+ await rm(existingMessageDirectoryToRelocate, { recursive: true, force: true });
4586
+ }
4554
4587
  await writeMessage(
4555
4588
  {
4556
4589
  id: messageId,
@@ -4568,7 +4601,9 @@ Processing domain: ${domainName} (v${domainVersion})`));
4568
4601
  ...isMessageMarkedAsDraft && { draft: true }
4569
4602
  },
4570
4603
  {
4571
- override: true,
4604
+ // References only reach this branch when the message is missing. They may
4605
+ // create a fallback, but only owners may replace an existing contract.
4606
+ override: serviceOwnsMessageContract,
4572
4607
  path: messagePath
4573
4608
  }
4574
4609
  );
@@ -4602,8 +4637,6 @@ Processing domain: ${domainName} (v${domainVersion})`));
4602
4637
  }
4603
4638
  }
4604
4639
  }
4605
- } else {
4606
- console.log(chalk4.yellow(` - Skipping external message: ${getMessageName(message2)}(v${messageVersion})`));
4607
4640
  }
4608
4641
  const group = options.groupMessagesBy === "x-extension" ? message2.extensions().get("x-eventcatalog-group")?.value() || void 0 : void 0;
4609
4642
  if (parseChannels) {
@@ -4769,11 +4802,18 @@ var getSchemaFromMessagePart = (schema) => {
4769
4802
  var isJSONSchemaMessage = (message2) => {
4770
4803
  return getSchemaFileName(message2).endsWith(".json");
4771
4804
  };
4772
- var isServiceMessageOwner = (message2, operation) => {
4805
+ var getMessageOwnership = (message2, operation) => {
4773
4806
  const operationRole = operation?.extensions?.().get?.("x-eventcatalog-role")?.value?.();
4774
4807
  const messageRole = message2.extensions().get("x-eventcatalog-role")?.value();
4775
- const value = operationRole || messageRole || "provider";
4776
- return value === "provider";
4808
+ const explicitRole = operationRole || messageRole;
4809
+ if (explicitRole) {
4810
+ return explicitRole === "provider" ? "owner" : "external";
4811
+ }
4812
+ const action = operation?.action?.();
4813
+ if (action === "receive" || action === "subscribe") {
4814
+ return "reference";
4815
+ }
4816
+ return "owner";
4777
4817
  };
4778
4818
  export {
4779
4819
  index_default as default