@eventcatalog/generator-asyncapi 6.4.1 → 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.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: "6.4.1",
1541
+ version: "6.4.2",
1542
1542
  description: "AsyncAPI generator for EventCatalog",
1543
1543
  scripts: {
1544
1544
  build: "tsup",
@@ -1561,6 +1561,7 @@ var package_default = {
1561
1561
  "@types/lodash": "^4.17.7",
1562
1562
  "@types/minimist": "^1.2.5",
1563
1563
  "@types/node": "^20.16.1",
1564
+ "@types/semver": "^7.7.0",
1564
1565
  prettier: "^3.3.3",
1565
1566
  tsup: "^8.1.0",
1566
1567
  typescript: "^5.5.3",
@@ -1584,6 +1585,7 @@ var package_default = {
1584
1585
  "js-yaml": "^4.1.0",
1585
1586
  lodash: "^4.17.23",
1586
1587
  minimist: "^1.2.8",
1588
+ semver: "^7.7.2",
1587
1589
  slugify: "^1.6.6",
1588
1590
  "update-notifier": "^7.3.1",
1589
1591
  zod: "^3.23.8"
@@ -2719,6 +2721,30 @@ var defaultMarkdown4 = (_document, channel) => {
2719
2721
  `;
2720
2722
  };
2721
2723
 
2724
+ // src/utils/versions.ts
2725
+ import { valid as semverValid, gt as semverGt, eq as semverEq, coerce as semverCoerce } from "semver";
2726
+ var tryCoerceToSemver = (version) => {
2727
+ if (semverValid(version)) return version;
2728
+ const coerced = semverCoerce(version);
2729
+ return coerced ? coerced.version : null;
2730
+ };
2731
+ var isNewerVersion = (incoming, existing) => {
2732
+ if (!incoming || !existing) return false;
2733
+ if (incoming === existing) return false;
2734
+ const incomingSemver = tryCoerceToSemver(incoming);
2735
+ const existingSemver = tryCoerceToSemver(existing);
2736
+ if (!incomingSemver || !existingSemver) return false;
2737
+ return semverGt(incomingSemver, existingSemver);
2738
+ };
2739
+ var isSameVersion = (a, b) => {
2740
+ if (!a || !b) return false;
2741
+ if (a === b) return true;
2742
+ const aSemver = tryCoerceToSemver(a);
2743
+ const bSemver = tryCoerceToSemver(b);
2744
+ if (!aSemver || !bSemver) return false;
2745
+ return semverEq(aSemver, bSemver);
2746
+ };
2747
+
2722
2748
  // ../../shared/checkLicense.ts
2723
2749
  import chalk3 from "chalk";
2724
2750
 
@@ -4427,7 +4453,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4427
4453
  for (const operation of operations) {
4428
4454
  for (const message2 of operation.messages()) {
4429
4455
  const eventType = message2.extensions().get("x-eventcatalog-message-type")?.value() || "event";
4430
- const messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4456
+ let messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4431
4457
  const deprecatedDate = message2.extensions().get("x-eventcatalog-deprecated-date")?.value() || null;
4432
4458
  const deprecatedMessage = message2.extensions().get("x-eventcatalog-deprecated-message")?.value() || null;
4433
4459
  const isMessageMarkedAsDraft = isDomainMarkedAsDraft || isServiceMarkedAsDraft || message2.extensions().get("x-eventcatalog-draft")?.value() || null;
@@ -4465,63 +4491,76 @@ Processing domain: ${domainName} (v${domainVersion})`));
4465
4491
  }
4466
4492
  if (serviceOwnsMessageContract) {
4467
4493
  const catalogedMessage = await getMessage(messageId, "latest");
4494
+ let shouldWriteMessage = true;
4468
4495
  if (catalogedMessage) {
4469
4496
  messageMarkdown = catalogedMessage.markdown;
4470
4497
  messageBadges = catalogedMessage.badges || null;
4471
4498
  messageAttachments = catalogedMessage.attachments || null;
4472
- if (catalogedMessage.version !== messageVersion) {
4499
+ const catalogedVersion = catalogedMessage.version ?? "";
4500
+ if (isSameVersion(catalogedVersion, messageVersion)) {
4501
+ } else if (isNewerVersion(messageVersion, catalogedVersion)) {
4473
4502
  await versionMessage(messageId);
4474
4503
  console.log(chalk4.cyan(` - Versioned previous message: (v${catalogedMessage.version})`));
4504
+ } else {
4505
+ console.log(
4506
+ chalk4.yellow(
4507
+ ` - Skipping ${messageId} (v${messageVersion}) - catalog already has a newer version (v${catalogedVersion})`
4508
+ )
4509
+ );
4510
+ messageVersion = catalogedVersion;
4511
+ shouldWriteMessage = false;
4475
4512
  }
4476
4513
  }
4477
- await writeMessage(
4478
- {
4479
- id: messageId,
4480
- version: messageVersion,
4481
- name: getMessageName(message2),
4482
- summary: getSummary(message2),
4483
- markdown: messageMarkdown,
4484
- badges: messageBadges || badges2.map((badge) => ({ content: badge.name(), textColor: "blue", backgroundColor: "blue" })),
4485
- ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4486
- ...owners && { owners },
4487
- ...messageAttachments && { attachments: messageAttachments },
4488
- ...deprecatedDate && {
4489
- deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4490
- },
4491
- ...isMessageMarkedAsDraft && { draft: true }
4492
- },
4493
- {
4494
- override: true,
4495
- path: messagePath
4496
- }
4497
- );
4498
- console.log(chalk4.cyan(` - Message (v${messageVersion}) created`));
4499
- if (messageHasSchema(message2)) {
4500
- const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4501
- const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4502
- await addSchemaToMessage(
4503
- messageId,
4514
+ if (shouldWriteMessage) {
4515
+ await writeMessage(
4504
4516
  {
4505
- fileName: getSchemaFileName(message2),
4506
- schema: safeStringify(schema, 4)
4517
+ id: messageId,
4518
+ version: messageVersion,
4519
+ name: getMessageName(message2),
4520
+ summary: getSummary(message2),
4521
+ markdown: messageMarkdown,
4522
+ badges: messageBadges || badges2.map((badge) => ({ content: badge.name(), textColor: "blue", backgroundColor: "blue" })),
4523
+ ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4524
+ ...owners && { owners },
4525
+ ...messageAttachments && { attachments: messageAttachments },
4526
+ ...deprecatedDate && {
4527
+ deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4528
+ },
4529
+ ...isMessageMarkedAsDraft && { draft: true }
4507
4530
  },
4508
- messageVersion,
4509
- { path: cleanedMessagePath }
4510
- );
4511
- console.log(chalk4.cyan(` - Schema added to message (v${messageVersion})`));
4512
- }
4513
- if (parseExamples) {
4514
- const messageExamples = message2.examples().all();
4515
- for (let i = 0; i < messageExamples.length; i++) {
4516
- const example = messageExamples[i];
4517
- const payload = example.payload();
4518
- if (payload) {
4519
- const fileName2 = example.hasName() ? `${example.name()}.json` : `example-${i}.json`;
4520
- await addExampleToMessage(messageId, { content: JSON.stringify(payload, null, 2), fileName: fileName2 }, messageVersion);
4531
+ {
4532
+ override: true,
4533
+ path: messagePath
4521
4534
  }
4535
+ );
4536
+ console.log(chalk4.cyan(` - Message (v${messageVersion}) created`));
4537
+ if (messageHasSchema(message2)) {
4538
+ const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4539
+ const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4540
+ await addSchemaToMessage(
4541
+ messageId,
4542
+ {
4543
+ fileName: getSchemaFileName(message2),
4544
+ schema: safeStringify(schema, 4)
4545
+ },
4546
+ messageVersion,
4547
+ { path: cleanedMessagePath }
4548
+ );
4549
+ console.log(chalk4.cyan(` - Schema added to message (v${messageVersion})`));
4522
4550
  }
4523
- if (messageExamples.length > 0) {
4524
- console.log(chalk4.cyan(` - ${messageExamples.length} example(s) added to message (v${messageVersion})`));
4551
+ if (parseExamples) {
4552
+ const messageExamples = message2.examples().all();
4553
+ for (let i = 0; i < messageExamples.length; i++) {
4554
+ const example = messageExamples[i];
4555
+ const payload = example.payload();
4556
+ if (payload) {
4557
+ const fileName2 = example.hasName() ? `${example.name()}.json` : `example-${i}.json`;
4558
+ await addExampleToMessage(messageId, { content: JSON.stringify(payload, null, 2), fileName: fileName2 }, messageVersion);
4559
+ }
4560
+ }
4561
+ if (messageExamples.length > 0) {
4562
+ console.log(chalk4.cyan(` - ${messageExamples.length} example(s) added to message (v${messageVersion})`));
4563
+ }
4525
4564
  }
4526
4565
  }
4527
4566
  } else {