feat(core-shared/conformance): defineFeature helper + manifest types
This commit is contained in:
45
packages/core-shared/src/conformance/define-feature.test.ts
Normal file
45
packages/core-shared/src/conformance/define-feature.test.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { describe, it, expectTypeOf } from "vitest";
|
||||
import { defineFeature, type FeatureManifest } from "@/conformance/define-feature";
|
||||
|
||||
describe("defineFeature", () => {
|
||||
it("preserves literal types of a manifest declared with `as const`", () => {
|
||||
const manifest = defineFeature({
|
||||
name: "auth",
|
||||
requiredCores: ["audit"],
|
||||
useCases: {
|
||||
signIn: {
|
||||
mutates: false,
|
||||
audits: [],
|
||||
publishes: [],
|
||||
consumes: [],
|
||||
},
|
||||
signUp: {
|
||||
mutates: true,
|
||||
audits: ["user.created"],
|
||||
publishes: ["auth.signed-up"],
|
||||
consumes: [],
|
||||
},
|
||||
},
|
||||
realtimeChannels: [],
|
||||
jobs: [],
|
||||
} as const);
|
||||
|
||||
// Literal preservation: name is the literal "auth", not string
|
||||
expectTypeOf(manifest.name).toEqualTypeOf<"auth">();
|
||||
// Use-case keys preserved
|
||||
expectTypeOf(manifest.useCases.signUp.audits).toEqualTypeOf<readonly ["user.created"]>();
|
||||
expectTypeOf(manifest.useCases.signUp.mutates).toEqualTypeOf<true>();
|
||||
expectTypeOf(manifest.useCases.signIn.mutates).toEqualTypeOf<false>();
|
||||
});
|
||||
|
||||
it("FeatureManifest type accepts the shape", () => {
|
||||
const manifest = defineFeature({
|
||||
name: "blog",
|
||||
requiredCores: [],
|
||||
useCases: {},
|
||||
realtimeChannels: [],
|
||||
jobs: [],
|
||||
} as const);
|
||||
expectTypeOf(manifest).toMatchTypeOf<FeatureManifest>();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user