UNPKG

runtypes

Version:

Runtime validation for static types

100 lines (99 loc) 4.11 kB
import type Runtype from "../Runtype.js"; import type Failcode from "./Failcode.js"; declare namespace Failure { /** * A detailed object enumerating where the validation failed exactly. */ type Details = globalThis.Record<PropertyKey, Failure>; } type Legend = { /** * The tag indicating failure. */ success: false; /** * An error code that roughly categorizes the problem. */ code: Failcode; /** * A string that summarizes the problem overall. Only for debugging. */ message: string; /** * The runtype that yielded this failure. */ expected: Runtype.Interfaces; /** * The value that caused this failure. */ received: unknown; /** * An object that describes which property was invalid precisely. Only available for complex runtypes (e.g. `Object`, `Array`, and the like; `Union` and `Intersect` also emit this enumerating a failure for each member). */ details: Failure.Details; /** * An object that describes the failure of the inner runtype. Only available for `Brand` and contextual failures (e.g. failures in `Record` keys, in boundaries of `Contract`/`AsyncContract`, etc.). */ detail: Failure; /** * A thrown value, which is typically an error message, if any. Only available for runtypes that involve user-provided validation functions (e.g. `Constraint` and `Parser`) or constraint-like failures like about the length of `Tuple`. */ thrown: unknown; }; /** * A failed validation result. */ type Failure = ((Pick<Legend, "success" | "message" | "code" | "expected" | "received"> & (Pick<Legend, "details"> | Pick<Legend, "detail"> | object)) & { code: typeof Failcode.TYPE_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received"> & { code: typeof Failcode.VALUE_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received"> & Pick<Legend, "detail"> & { code: typeof Failcode.KEY_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "details"> & { code: typeof Failcode.CONTENT_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "detail"> & { code: typeof Failcode.ARGUMENTS_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "detail"> & { code: typeof Failcode.RETURN_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "detail"> & { code: typeof Failcode.RESOLVE_INCORRECT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "thrown"> & { code: typeof Failcode.CONSTRAINT_FAILED; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected"> & { code: typeof Failcode.PROPERTY_MISSING; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received"> & { code: typeof Failcode.PROPERTY_PRESENT; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received"> & { code: typeof Failcode.NOTHING_EXPECTED; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "thrown"> & { code: typeof Failcode.PARSING_FAILED; } extends infer T ? { [K in keyof T]: T[K]; } : never) | (Pick<Legend, "success" | "message" | "code" | "expected" | "received" | "thrown"> & { code: typeof Failcode.INSTANCEOF_FAILED; } extends infer T ? { [K in keyof T]: T[K]; } : never); export default Failure;