import { describe, expect, it } from "vitest"; import { asArray, asNumber, asRecord, asString } from "./projection"; describe("projection guards", () => { it("asRecord accepts plain objects only", () => { expect(asRecord({ a: 1 })).toEqual({ a: 1 }); expect(asRecord([1])).toBeNull(); expect(asRecord("x")).toBeNull(); expect(asRecord(null)).toBeNull(); }); it("asString / asNumber narrow primitives", () => { expect(asString("s")).toBe("s"); expect(asString(1)).toBeNull(); expect(asNumber(4)).toBe(4); expect(asNumber("4")).toBeNull(); expect(asNumber(NaN)).toBeNull(); }); it("asArray defaults to empty", () => { expect(asArray([1, 2])).toEqual([1, 2]); expect(asArray(undefined)).toEqual([]); expect(asArray({})).toEqual([]); }); });