@eventcatalog/generator-asyncapi 6.4.0 → 6.4.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/dist/index.js CHANGED
@@ -1543,7 +1543,7 @@ var import_path3 = __toESM(require("path"));
1543
1543
  // package.json
1544
1544
  var package_default = {
1545
1545
  name: "@eventcatalog/generator-asyncapi",
1546
- version: "6.4.0",
1546
+ version: "6.4.2",
1547
1547
  description: "AsyncAPI generator for EventCatalog",
1548
1548
  scripts: {
1549
1549
  build: "tsup",
@@ -1566,6 +1566,7 @@ var package_default = {
1566
1566
  "@types/lodash": "^4.17.7",
1567
1567
  "@types/minimist": "^1.2.5",
1568
1568
  "@types/node": "^20.16.1",
1569
+ "@types/semver": "^7.7.0",
1569
1570
  prettier: "^3.3.3",
1570
1571
  tsup: "^8.1.0",
1571
1572
  typescript: "^5.5.3",
@@ -1589,6 +1590,7 @@ var package_default = {
1589
1590
  "js-yaml": "^4.1.0",
1590
1591
  lodash: "^4.17.23",
1591
1592
  minimist: "^1.2.8",
1593
+ semver: "^7.7.2",
1592
1594
  slugify: "^1.6.6",
1593
1595
  "update-notifier": "^7.3.1",
1594
1596
  zod: "^3.23.8"
@@ -2724,6 +2726,30 @@ var defaultMarkdown4 = (_document, channel) => {
2724
2726
  `;
2725
2727
  };
2726
2728
 
2729
+ // src/utils/versions.ts
2730
+ var import_semver = require("semver");
2731
+ var tryCoerceToSemver = (version) => {
2732
+ if ((0, import_semver.valid)(version)) return version;
2733
+ const coerced = (0, import_semver.coerce)(version);
2734
+ return coerced ? coerced.version : null;
2735
+ };
2736
+ var isNewerVersion = (incoming, existing) => {
2737
+ if (!incoming || !existing) return false;
2738
+ if (incoming === existing) return false;
2739
+ const incomingSemver = tryCoerceToSemver(incoming);
2740
+ const existingSemver = tryCoerceToSemver(existing);
2741
+ if (!incomingSemver || !existingSemver) return false;
2742
+ return (0, import_semver.gt)(incomingSemver, existingSemver);
2743
+ };
2744
+ var isSameVersion = (a, b) => {
2745
+ if (!a || !b) return false;
2746
+ if (a === b) return true;
2747
+ const aSemver = tryCoerceToSemver(a);
2748
+ const bSemver = tryCoerceToSemver(b);
2749
+ if (!aSemver || !bSemver) return false;
2750
+ return (0, import_semver.eq)(aSemver, bSemver);
2751
+ };
2752
+
2727
2753
  // ../../shared/checkLicense.ts
2728
2754
  var import_chalk3 = __toESM(require("chalk"));
2729
2755
 
@@ -4363,6 +4389,18 @@ Processing domain: ${domainName} (v${domainVersion})`));
4363
4389
  } else {
4364
4390
  servicePath = import_path3.default.join("../", "domains", options.domain.id, "services", service.id);
4365
4391
  }
4392
+ } else {
4393
+ const existingService = await getService(serviceId, "latest");
4394
+ if (existingService) {
4395
+ const existingServiceResource = await getResourcePath(
4396
+ process.env.PROJECT_DIR,
4397
+ serviceId,
4398
+ existingService.version
4399
+ );
4400
+ if (existingServiceResource) {
4401
+ servicePath = import_path3.default.join("../", existingServiceResource.directory);
4402
+ }
4403
+ }
4366
4404
  }
4367
4405
  if (options.writeFilesToRoot) {
4368
4406
  servicePath = service.id;
@@ -4420,7 +4458,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4420
4458
  for (const operation of operations) {
4421
4459
  for (const message2 of operation.messages()) {
4422
4460
  const eventType = message2.extensions().get("x-eventcatalog-message-type")?.value() || "event";
4423
- const messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4461
+ let messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4424
4462
  const deprecatedDate = message2.extensions().get("x-eventcatalog-deprecated-date")?.value() || null;
4425
4463
  const deprecatedMessage = message2.extensions().get("x-eventcatalog-deprecated-message")?.value() || null;
4426
4464
  const isMessageMarkedAsDraft = isDomainMarkedAsDraft || isServiceMarkedAsDraft || message2.extensions().get("x-eventcatalog-draft")?.value() || null;
@@ -4458,63 +4496,76 @@ Processing domain: ${domainName} (v${domainVersion})`));
4458
4496
  }
4459
4497
  if (serviceOwnsMessageContract) {
4460
4498
  const catalogedMessage = await getMessage(messageId, "latest");
4499
+ let shouldWriteMessage = true;
4461
4500
  if (catalogedMessage) {
4462
4501
  messageMarkdown = catalogedMessage.markdown;
4463
4502
  messageBadges = catalogedMessage.badges || null;
4464
4503
  messageAttachments = catalogedMessage.attachments || null;
4465
- if (catalogedMessage.version !== messageVersion) {
4504
+ const catalogedVersion = catalogedMessage.version ?? "";
4505
+ if (isSameVersion(catalogedVersion, messageVersion)) {
4506
+ } else if (isNewerVersion(messageVersion, catalogedVersion)) {
4466
4507
  await versionMessage(messageId);
4467
4508
  console.log(import_chalk4.default.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));
4509
+ } else {
4510
+ console.log(
4511
+ import_chalk4.default.yellow(
4512
+ ` - Skipping ${messageId} (v${messageVersion}) - catalog already has a newer version (v${catalogedVersion})`
4513
+ )
4514
+ );
4515
+ messageVersion = catalogedVersion;
4516
+ shouldWriteMessage = false;
4468
4517
  }
4469
4518
  }
4470
- await writeMessage(
4471
- {
4472
- id: messageId,
4473
- version: messageVersion,
4474
- name: getMessageName(message2),
4475
- summary: getSummary(message2),
4476
- markdown: messageMarkdown,
4477
- badges: messageBadges || badges2.map((badge) => ({ content: badge.name(), textColor: "blue", backgroundColor: "blue" })),
4478
- ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4479
- ...owners && { owners },
4480
- ...messageAttachments && { attachments: messageAttachments },
4481
- ...deprecatedDate && {
4482
- deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4483
- },
4484
- ...isMessageMarkedAsDraft && { draft: true }
4485
- },
4486
- {
4487
- override: true,
4488
- path: messagePath
4489
- }
4490
- );
4491
- console.log(import_chalk4.default.cyan(` - Message (v${messageVersion}) created`));
4492
- if (messageHasSchema(message2)) {
4493
- const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4494
- const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4495
- await addSchemaToMessage(
4496
- messageId,
4519
+ if (shouldWriteMessage) {
4520
+ await writeMessage(
4497
4521
  {
4498
- fileName: getSchemaFileName(message2),
4499
- schema: safeStringify(schema, 4)
4522
+ id: messageId,
4523
+ version: messageVersion,
4524
+ name: getMessageName(message2),
4525
+ summary: getSummary(message2),
4526
+ markdown: messageMarkdown,
4527
+ badges: messageBadges || badges2.map((badge) => ({ content: badge.name(), textColor: "blue", backgroundColor: "blue" })),
4528
+ ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4529
+ ...owners && { owners },
4530
+ ...messageAttachments && { attachments: messageAttachments },
4531
+ ...deprecatedDate && {
4532
+ deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4533
+ },
4534
+ ...isMessageMarkedAsDraft && { draft: true }
4500
4535
  },
4501
- messageVersion,
4502
- { path: cleanedMessagePath }
4503
- );
4504
- console.log(import_chalk4.default.cyan(` - Schema added to message (v${messageVersion})`));
4505
- }
4506
- if (parseExamples) {
4507
- const messageExamples = message2.examples().all();
4508
- for (let i = 0; i < messageExamples.length; i++) {
4509
- const example = messageExamples[i];
4510
- const payload = example.payload();
4511
- if (payload) {
4512
- const fileName2 = example.hasName() ? `${example.name()}.json` : `example-${i}.json`;
4513
- await addExampleToMessage(messageId, { content: JSON.stringify(payload, null, 2), fileName: fileName2 }, messageVersion);
4536
+ {
4537
+ override: true,
4538
+ path: messagePath
4514
4539
  }
4540
+ );
4541
+ console.log(import_chalk4.default.cyan(` - Message (v${messageVersion}) created`));
4542
+ if (messageHasSchema(message2)) {
4543
+ const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4544
+ const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4545
+ await addSchemaToMessage(
4546
+ messageId,
4547
+ {
4548
+ fileName: getSchemaFileName(message2),
4549
+ schema: safeStringify(schema, 4)
4550
+ },
4551
+ messageVersion,
4552
+ { path: cleanedMessagePath }
4553
+ );
4554
+ console.log(import_chalk4.default.cyan(` - Schema added to message (v${messageVersion})`));
4515
4555
  }
4516
- if (messageExamples.length > 0) {
4517
- console.log(import_chalk4.default.cyan(` - ${messageExamples.length} example(s) added to message (v${messageVersion})`));
4556
+ if (parseExamples) {
4557
+ const messageExamples = message2.examples().all();
4558
+ for (let i = 0; i < messageExamples.length; i++) {
4559
+ const example = messageExamples[i];
4560
+ const payload = example.payload();
4561
+ if (payload) {
4562
+ const fileName2 = example.hasName() ? `${example.name()}.json` : `example-${i}.json`;
4563
+ await addExampleToMessage(messageId, { content: JSON.stringify(payload, null, 2), fileName: fileName2 }, messageVersion);
4564
+ }
4565
+ }
4566
+ if (messageExamples.length > 0) {
4567
+ console.log(import_chalk4.default.cyan(` - ${messageExamples.length} example(s) added to message (v${messageVersion})`));
4568
+ }
4518
4569
  }
4519
4570
  }
4520
4571
  } else {