From 4cfd894541b264dceca7f84ea6c9f8c67016d03e Mon Sep 17 00:00:00 2001 From: Isha Dijcks Date: Mon, 18 May 2026 12:21:57 +0200 Subject: [PATCH] Add getSchema to retrieve schemas by kind --- CHANGELOG.md | 6 +++++ package.json | 2 +- src/content/ContentManager.ts | 8 +++++++ tests/content/content-manager.spec.ts | 33 +++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95d2e9f..1605a27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @123ishatest/louter +## 0.4.0 + +### Minor Changes + +- Add getSchema to retrieve schemas by kind + ## 0.3.1 ### Patch Changes diff --git a/package.json b/package.json index 2345b95..c656b86 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@123ishatest/louter", "private": false, - "version": "0.3.1", + "version": "0.4.0", "publishConfig": { "access": "public", "provenance": true diff --git a/src/content/ContentManager.ts b/src/content/ContentManager.ts index fcd9e74..46eff6b 100644 --- a/src/content/ContentManager.ts +++ b/src/content/ContentManager.ts @@ -54,6 +54,14 @@ export class ContentManager(kind: Kind): Kinds[Kind] { + const schema = this._kinds[kind]; + if (!schema) { + throw new ContentKindNotFoundError(`Could not get schema of ${kind.toString()}`); + } + return schema; + } + /** * Throw away all currently managed content */ diff --git a/tests/content/content-manager.spec.ts b/tests/content/content-manager.spec.ts index 55d7e89..481ebfa 100644 --- a/tests/content/content-manager.spec.ts +++ b/tests/content/content-manager.spec.ts @@ -75,3 +75,36 @@ it('throws an error when a piece of content does not exist', () => { manager.get('wrong', 'example'); }).toThrow(ContentNotFoundError); }); + +it('can get schemas', () => { + // Arrange + const exampleSchema = z.strictObject({ + id: z.string(), + amount: z.number(), + }); + const manager = new ContentManager({ + example: exampleSchema, + }); + + // Act + const schema = manager.getSchema('example'); + + // Assert + expect(schema).toBe(exampleSchema); +}); + +it('throws an error when a schema does not exist', () => { + // Arrange + const manager = new ContentManager({ + example: z.strictObject({ + id: z.string(), + amount: z.number(), + }), + }); + + // Act + expect(() => { + // @ts-expect-error wrong kind + manager.getSchema('wrong'); + }).toThrow(ContentKindNotFoundError); +});