@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.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.0",
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
 
@@ -4358,6 +4384,18 @@ Processing domain: ${domainName} (v${domainVersion})`));
4358
4384
  } else {
4359
4385
  servicePath = path3.join("../", "domains", options.domain.id, "services", service.id);
4360
4386
  }
4387
+ } else {
4388
+ const existingService = await getService(serviceId, "latest");
4389
+ if (existingService) {
4390
+ const existingServiceResource = await getResourcePath(
4391
+ process.env.PROJECT_DIR,
4392
+ serviceId,
4393
+ existingService.version
4394
+ );
4395
+ if (existingServiceResource) {
4396
+ servicePath = path3.join("../", existingServiceResource.directory);
4397
+ }
4398
+ }
4361
4399
  }
4362
4400
  if (options.writeFilesToRoot) {
4363
4401
  servicePath = service.id;
@@ -4415,7 +4453,7 @@ Processing domain: ${domainName} (v${domainVersion})`));
4415
4453
  for (const operation of operations) {
4416
4454
  for (const message2 of operation.messages()) {
4417
4455
  const eventType = message2.extensions().get("x-eventcatalog-message-type")?.value() || "event";
4418
- const messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4456
+ let messageVersion = message2.extensions().get("x-eventcatalog-message-version")?.value() || version;
4419
4457
  const deprecatedDate = message2.extensions().get("x-eventcatalog-deprecated-date")?.value() || null;
4420
4458
  const deprecatedMessage = message2.extensions().get("x-eventcatalog-deprecated-message")?.value() || null;
4421
4459
  const isMessageMarkedAsDraft = isDomainMarkedAsDraft || isServiceMarkedAsDraft || message2.extensions().get("x-eventcatalog-draft")?.value() || null;
@@ -4453,63 +4491,76 @@ Processing domain: ${domainName} (v${domainVersion})`));
4453
4491
  }
4454
4492
  if (serviceOwnsMessageContract) {
4455
4493
  const catalogedMessage = await getMessage(messageId, "latest");
4494
+ let shouldWriteMessage = true;
4456
4495
  if (catalogedMessage) {
4457
4496
  messageMarkdown = catalogedMessage.markdown;
4458
4497
  messageBadges = catalogedMessage.badges || null;
4459
4498
  messageAttachments = catalogedMessage.attachments || null;
4460
- if (catalogedMessage.version !== messageVersion) {
4499
+ const catalogedVersion = catalogedMessage.version ?? "";
4500
+ if (isSameVersion(catalogedVersion, messageVersion)) {
4501
+ } else if (isNewerVersion(messageVersion, catalogedVersion)) {
4461
4502
  await versionMessage(messageId);
4462
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;
4463
4512
  }
4464
4513
  }
4465
- await writeMessage(
4466
- {
4467
- id: messageId,
4468
- version: messageVersion,
4469
- name: getMessageName(message2),
4470
- summary: getSummary(message2),
4471
- markdown: messageMarkdown,
4472
- badges: messageBadges || badges2.map((badge) => ({ content: badge.name(), textColor: "blue", backgroundColor: "blue" })),
4473
- ...messageHasSchema(message2) && { schemaPath: getSchemaFileName(message2) },
4474
- ...owners && { owners },
4475
- ...messageAttachments && { attachments: messageAttachments },
4476
- ...deprecatedDate && {
4477
- deprecated: { date: deprecatedDate, ...deprecatedMessage && { message: deprecatedMessage } }
4478
- },
4479
- ...isMessageMarkedAsDraft && { draft: true }
4480
- },
4481
- {
4482
- override: true,
4483
- path: messagePath
4484
- }
4485
- );
4486
- console.log(chalk4.cyan(` - Message (v${messageVersion}) created`));
4487
- if (messageHasSchema(message2)) {
4488
- const schema = getSchemaForMessage(message2, attachHeadersToSchema);
4489
- const cleanedMessagePath = messagePath.replace(/\\/g, "/").replace(/^(\.\.\/|\.\/)+/g, "");
4490
- await addSchemaToMessage(
4491
- messageId,
4514
+ if (shouldWriteMessage) {
4515
+ await writeMessage(
4492
4516
  {
4493
- fileName: getSchemaFileName(message2),
4494
- 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 }
4495
4530
  },
4496
- messageVersion,
4497
- { path: cleanedMessagePath }
4498
- );
4499
- console.log(chalk4.cyan(` - Schema added to message (v${messageVersion})`));
4500
- }
4501
- if (parseExamples) {
4502
- const messageExamples = message2.examples().all();
4503
- for (let i = 0; i < messageExamples.length; i++) {
4504
- const example = messageExamples[i];
4505
- const payload = example.payload();
4506
- if (payload) {
4507
- const fileName2 = example.hasName() ? `${example.name()}.json` : `example-${i}.json`;
4508
- await addExampleToMessage(messageId, { content: JSON.stringify(payload, null, 2), fileName: fileName2 }, messageVersion);
4531
+ {
4532
+ override: true,
4533
+ path: messagePath
4509
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})`));
4510
4550
  }
4511
- if (messageExamples.length > 0) {
4512
- 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
+ }
4513
4564
  }
4514
4565
  }
4515
4566
  } else {