{"version":3,"file":"guards.cjs","names":[],"sources":["../../src/utils/guards.ts"],"sourcesContent":["/**\n * Type guard asserting a value is neither `null` nor `undefined`.\n *\n * Useful for narrowing in `Array.prototype.filter` to drop nullish entries\n * while preserving the element type.\n *\n * @example\n * const xs: (number | null)[] = [1, null, 2];\n * const clean: number[] = xs.filter(isDefined); // [1, 2]\n */\nexport function isDefined<T>(value: T | null | undefined): value is T {\n    return value !== null && value !== undefined;\n}\n\n/**\n * Type guard asserting a value is a string primitive.\n *\n * @example\n * isString(\"hi\"); // true\n * isString(42);   // false\n */\nexport function isString(value: unknown): value is string {\n    return typeof value === \"string\";\n}\n\n/**\n * Type guard asserting a value is a number, excluding `NaN`.\n *\n * @example\n * isNumber(42);       // true\n * isNumber(NaN);      // false\n * isNumber(\"42\");     // false\n */\nexport function isNumber(value: unknown): value is number {\n    return typeof value === \"number\" && !Number.isNaN(value);\n}\n\n/**\n * Type guard asserting a value is a plain object literal.\n *\n * Returns `false` for arrays, `null`, dates, maps, sets, and class instances —\n * only objects created from `{}` / `Object.create(null)` / object literals pass.\n *\n * @example\n * isPlainObject({ a: 1 });     // true\n * isPlainObject([]);           // false\n * isPlainObject(null);         // false\n * isPlainObject(new Date());   // false\n */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n    if (typeof value !== \"object\" || value === null) return false;\n    const proto = Object.getPrototypeOf(value);\n    return proto === Object.prototype || proto === null;\n}\n\n/**\n * Assert that a code path is unreachable, throwing at runtime if reached.\n *\n * Use in the `default` branch of an exhaustive `switch` so TypeScript flags any\n * unhandled union member at compile time and the runtime fails loudly if an\n * unexpected value slips through.\n *\n * @param value - The value that should be of type `never`.\n * @param message - Optional custom error message.\n * @throws {Error} Always.\n *\n * @example\n * type Shape = \"circle\" | \"square\";\n * function area(shape: Shape): number {\n *   switch (shape) {\n *     case \"circle\": return 1;\n *     case \"square\": return 2;\n *     default: return assertNever(shape);\n *   }\n * }\n */\nexport function assertNever(value: never, message?: string): never {\n    throw new Error(message ?? `Unexpected value: ${String(value)}`);\n}\n"],"mappings":"AAUA,SAAgB,EAAa,EAAyC,CAClE,OAAO,GAAU,IACrB,CASA,SAAgB,EAAS,EAAiC,CACtD,OAAO,OAAO,GAAU,QAC5B,CAUA,SAAgB,EAAS,EAAiC,CACtD,OAAO,OAAO,GAAU,UAAY,CAAC,OAAO,MAAM,CAAK,CAC3D,CAcA,SAAgB,EAAc,EAAkD,CAC5E,GAAI,OAAO,GAAU,WAAY,EAAgB,MAAO,GACxD,IAAM,EAAQ,OAAO,eAAe,CAAK,EACzC,OAAO,IAAU,OAAO,WAAa,IAAU,IACnD,CAuBA,SAAgB,EAAY,EAAc,EAAyB,CAC/D,MAAU,MAAM,GAAW,qBAAqB,OAAO,CAAK,GAAG,CACnE"}