From 49bd7e078215f19ba37b54e86a3247a79c12a50d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 12 May 2026 22:43:15 +0200 Subject: [PATCH] feat(core-shared/conformance): ConformanceError class --- .../src/conformance/conformance-error.test.ts | 17 +++++++++++++++++ .../src/conformance/conformance-error.ts | 13 +++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 packages/core-shared/src/conformance/conformance-error.test.ts create mode 100644 packages/core-shared/src/conformance/conformance-error.ts diff --git a/packages/core-shared/src/conformance/conformance-error.test.ts b/packages/core-shared/src/conformance/conformance-error.test.ts new file mode 100644 index 0000000..4d4eb46 --- /dev/null +++ b/packages/core-shared/src/conformance/conformance-error.test.ts @@ -0,0 +1,17 @@ +import { describe, it, expect } from "vitest"; +import { ConformanceError } from "@/conformance/conformance-error"; + +describe("ConformanceError", () => { + it("extends Error with the standard shape", () => { + const err = new ConformanceError("auth.signIn: missing __instrumented brand"); + expect(err).toBeInstanceOf(Error); + expect(err).toBeInstanceOf(ConformanceError); + expect(err.message).toBe("auth.signIn: missing __instrumented brand"); + expect(err.name).toBe("ConformanceError"); + }); + + it("preserves a stack trace", () => { + const err = new ConformanceError("test"); + expect(typeof err.stack).toBe("string"); + }); +}); diff --git a/packages/core-shared/src/conformance/conformance-error.ts b/packages/core-shared/src/conformance/conformance-error.ts new file mode 100644 index 0000000..4683262 --- /dev/null +++ b/packages/core-shared/src/conformance/conformance-error.ts @@ -0,0 +1,13 @@ +/** + * Thrown by `assertFeatureConformance` when a binding does not match the + * manifest's declared shape. The boot assertion lets this propagate + * synchronously so `pnpm dev` refuses to start on drift. + */ +export class ConformanceError extends Error { + constructor(message: string) { + super(message); + this.name = "ConformanceError"; + // Maintain a proper prototype chain across down-compilation. + Object.setPrototypeOf(this, ConformanceError.prototype); + } +}