From 50f8d30761097b373be967d4d58533937e37cfed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesse=20Wayde=20Brand=C3=A3o?= <2103730+Jessewb786@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:05:53 +0100 Subject: [PATCH] (feat) WriteResource includes a draft changelog.md by default --- .changeset/new-needles-collect.md | 5 +++++ src/internal/resources.ts | 11 +++++++++++ src/internal/utils.ts | 9 ++++----- src/test/channels.test.ts | 1 + src/test/commands.test.ts | 1 + src/test/domains.test.ts | 1 + src/test/events.test.ts | 1 + src/test/queries.test.ts | 1 + src/test/services.test.ts | 1 + 9 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 .changeset/new-needles-collect.md diff --git a/.changeset/new-needles-collect.md b/.changeset/new-needles-collect.md new file mode 100644 index 0000000..7bc02cd --- /dev/null +++ b/.changeset/new-needles-collect.md @@ -0,0 +1,5 @@ +--- +'@eventcatalog/sdk': minor +--- + +WriteResource now includes a draft changelog.md by default diff --git a/src/internal/resources.ts b/src/internal/resources.ts index 7362834..f272fa8 100644 --- a/src/internal/resources.ts +++ b/src/internal/resources.ts @@ -96,6 +96,17 @@ export const writeResource = async ( const document = matter.stringify(markdown.trim(), frontmatter); fsSync.writeFileSync(lockPath, document); + + // Add empty changelog with generated date to resource + await addFileToResource( + catalogDir, + resource.id, + { + content: '---\ncreatedAt: ' + new Date().toISOString().split('T')[0] + '\n---', + fileName: 'changelog.md', + }, + resource.version + ); } finally { // Always release the lock await unlock(lockPath).catch(() => {}); diff --git a/src/internal/utils.ts b/src/internal/utils.ts index 924c21a..6ea7244 100644 --- a/src/internal/utils.ts +++ b/src/internal/utils.ts @@ -1,10 +1,9 @@ -import { glob, globSync } from 'glob'; -import fs from 'node:fs/promises'; +import { globSync } from 'glob'; import fsSync from 'node:fs'; -import { copy, copySync, CopyFilterAsync, CopyFilterSync } from 'fs-extra'; +import { copy, CopyFilterAsync, CopyFilterSync } from 'fs-extra'; import { join } from 'node:path'; import matter from 'gray-matter'; -import { satisfies, validRange, valid } from 'semver'; +import { satisfies, valid, validRange } from 'semver'; /** * Returns true if a given version of a resource id exists in the catalog @@ -108,7 +107,7 @@ export const copyDir = async (catalogDir: string, source: string, target: string fsSync.rmSync(tmpDirectory, { recursive: true }); }; -// Makes sure values in sends/recieves are unique +// Makes sure values in sends/receives are unique export const uniqueVersions = (messages: { id: string; version: string }[]): { id: string; version: string }[] => { const uniqueSet = new Set(); diff --git a/src/test/channels.test.ts b/src/test/channels.test.ts index 7265b95..46e6483 100644 --- a/src/test/channels.test.ts +++ b/src/test/channels.test.ts @@ -411,6 +411,7 @@ describe('Channels SDK', () => { const channel = await getChannel('inventory.{env}.events'); expect(fs.existsSync(path.join(CATALOG_PATH, 'channels/inventory.{env}.events', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'channels/inventory.{env}.events', 'changelog.md'))).toBe(true); expect(channel).toEqual({ id: 'inventory.{env}.events', diff --git a/src/test/commands.test.ts b/src/test/commands.test.ts index b64ff75..2f014f6 100644 --- a/src/test/commands.test.ts +++ b/src/test/commands.test.ts @@ -289,6 +289,7 @@ describe('Commands SDK', () => { const command = await getCommand('UpdateInventory'); expect(fs.existsSync(path.join(CATALOG_PATH, 'commands/UpdateInventory', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'commands/UpdateInventory', 'changelog.md'))).toBe(true); expect(command).toEqual({ id: 'UpdateInventory', diff --git a/src/test/domains.test.ts b/src/test/domains.test.ts index 7df8a4c..90a5605 100644 --- a/src/test/domains.test.ts +++ b/src/test/domains.test.ts @@ -256,6 +256,7 @@ describe('Domain SDK', () => { const domain = await getDomain('Payment'); expect(fs.existsSync(path.join(CATALOG_PATH, 'domains/Payment', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'domains/Payment', 'changelog.md'))).toBe(true); expect(domain).toEqual({ id: 'Payment', diff --git a/src/test/events.test.ts b/src/test/events.test.ts index b8bb5dd..07164f6 100644 --- a/src/test/events.test.ts +++ b/src/test/events.test.ts @@ -505,6 +505,7 @@ describe('Events SDK', () => { const event = await getEvent('InventoryAdjusted'); expect(fs.existsSync(path.join(CATALOG_PATH, 'events/InventoryAdjusted', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'events/InventoryAdjusted', 'changelog.md'))).toBe(true); expect(event).toEqual({ id: 'InventoryAdjusted', diff --git a/src/test/queries.test.ts b/src/test/queries.test.ts index a092338..604e77d 100644 --- a/src/test/queries.test.ts +++ b/src/test/queries.test.ts @@ -505,6 +505,7 @@ describe('Queries SDK', () => { const query = await getQuery('GetOrder'); expect(fs.existsSync(path.join(CATALOG_PATH, 'queries/GetOrder', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'queries/GetOrder', 'changelog.md'))).toBe(true); expect(query).toEqual({ id: 'GetOrder', diff --git a/src/test/services.test.ts b/src/test/services.test.ts index 11352d5..cf3c3fb 100644 --- a/src/test/services.test.ts +++ b/src/test/services.test.ts @@ -426,6 +426,7 @@ describe('Services SDK', () => { const service = await getService('InventoryService'); expect(fs.existsSync(path.join(CATALOG_PATH, 'services/InventoryService', 'index.md'))).toBe(true); + expect(fs.existsSync(path.join(CATALOG_PATH, 'services/InventoryService', 'changelog.md'))).toBe(true); expect(service).toEqual({ id: 'InventoryService',