/** Type-level input and output inference for definitions accepted by omptype. */ type Whitespace = " " | "\n" | "\r" | "\t"; type TrimLeft = s extends `${Whitespace}${infer rest}` ? TrimLeft : s; type TrimRight = s extends `${infer rest}${Whitespace}` ? TrimRight : s; type Trim = TrimLeft>; /** * Flat keyword lookup. An indexed access is one instantiation level, unlike a * nested conditional chain — this sits under every string-DSL property, so its * depth is multiplied by every layer of object nesting above it. * `never` is intentionally absent: the parser rejects it and the fallback in * `InferMember` treats a missing entry as "not a primitive". */ type ArkAny = ReturnType; interface PrimitiveMap { string: string; "string.url": string; number: number; "number.integer": number; "number.epoch": number; "number.safe": number; "number.NaN": number; "number.Infinity": number; "number.NegativeInfinity": number; boolean: boolean; null: null; undefined: undefined; unknown: unknown; "unknown.any": ArkAny; any: unknown; object: object; bigint: bigint; symbol: symbol; Key: PropertyKey; Date: Date; Array: unknown[]; Function: Function; RegExp: RegExp; File: File; Error: Error; Set: Set; Map: Map; WeakSet: WeakSet; WeakMap: WeakMap; Promise: Promise; FormData: FormData; "object.json": unknown; true: true; false: false; } type Merge = left extends object ? right extends object ? Omit & right : never : never; type InferUtility = s extends `Record<${string},${infer value}>` ? Record> : s extends `Array<${infer element}>` | `Array.liftFrom<${infer element}>` ? InferString[] : s extends `Partial<${infer value}>` ? Partial> : s extends `Required<${infer value}>` ? Required> : s extends `Pick<${infer value},${infer keys}>` ? Pick, Extract, keyof InferString>> : s extends `Omit<${infer value},${infer keys}>` ? Omit, Extract, keyof InferString>> : s extends `Merge<${infer left},${infer right}>` ? Merge, InferString> : never; /** Output types of morph (`.parse`) keywords; `never` when `s` is not one. */ type InferParse = s extends | "string.numeric.parse" | "string.integer.parse" | "parse.number" | "parse.integer" ? number : s extends "string.date.parse" | "string.date.iso.parse" | "string.date.epoch.parse" | "parse.date" ? Date : s extends "string.url.parse" | "parse.url" ? URL : s extends "string.json.parse" | "parse.json" ? unknown : s extends "object.json.stringify" ? string : s extends "FormData.parse" ? Record : s extends "parse.boolean" ? boolean : s extends "parse.bigint" ? bigint : never; /** * Member inference as a flat false-branch chain: TypeScript tail-evaluates * chained conditionals in the false position, so this stays at constant * instantiation depth where the previous `extends infer` ladder nested every * fallback inside a true branch and accumulated depth per step. */ type InferMember = Trim extends infer s extends string ? InferMemberTrimmed : unknown; type InferMemberTrimmed = s extends `(${infer inner})` ? InferString : s extends `${infer element}[]` ? InferMember[] : s extends `'${infer literal}'` | `"${infer literal}"` ? literal : s extends `d'${string}'` | `d"${string}"` ? Date : s extends `\`${string}\`` ? string : s extends `/${string}/${string}` | `/${string}/` ? string : s extends `${infer literal extends number}` ? literal : s extends keyof PrimitiveMap ? PrimitiveMap[s] : [InferParse] extends [never] ? InferUtility extends infer utility ? [utility] extends [never] ? InferMemberFallback : utility : unknown : InferParse; type InferMemberFallback = s extends `string.${string}` ? string : s extends `${string}Date${string}` ? Date : s extends `${string}string${string}` ? string : s extends `${string}number${string}` ? number : unknown; /** Split unions without distributing over the accumulated members. */ type InferUnion = s extends `${infer head}|${infer tail}` ? InferUnion> : result | InferMember; /** Input side of one union member: morph keywords accept their source type. */ type InferMemberIn = Trim extends infer s extends string ? s extends `${string}.parse` | `parse.${string}` ? string : InferMemberTrimmed : unknown; /** Split unions on the input side without distributing over accumulated members. */ type InferUnionIn = s extends `${infer head}|${infer tail}` ? InferUnionIn> : result | InferMemberIn; type HasInlineDefault = s extends `${string}=${string}` ? s extends `${string}<${string}` | `${string}>${string}` ? false : true : false; type WithoutInlineDefault = HasInlineDefault extends true ? (s extends `${infer base}=${string}` ? Trim : s) : s; type InferStringOutput = InferUnion; /** String-DSL output inference. */ export type InferString = WithoutInlineDefault> extends infer trimmed extends string ? trimmed extends `${infer base}?` ? InferString : trimmed extends `(${infer inner})[]` ? InferUnion[] : InferStringOutput : unknown; /** String-DSL input inference, preserving the source side of morph keywords. */ export type InferStringIn = WithoutInlineDefault> extends infer trimmed extends string ? trimmed extends `${infer base}?` ? InferStringIn : trimmed extends `(${infer inner})[]` ? InferUnionIn[] : InferUnionIn : unknown; type HasDefault = def extends string ? HasInlineDefault : def extends readonly [unknown, "=", unknown] ? true : def extends { readonly hasDefault: true } ? true : false; type DefinitionKeys = Exclude; type IsOptionalProp = key extends `${string}?` ? true : def extends string ? Trim extends `${string}?` ? true : false : def extends readonly [unknown, "?"] ? true : false; type PropName = key extends `${infer name}?` ? name : key; type UnwrapProperty = def extends readonly [infer value, "?" | "=", ...unknown[]] ? value : def; type Simplify = { [key in keyof t]: t[key] }; type OutputRequired = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? HasDefault extends true ? PropName : never : PropName ]-?: InferDef>; }; type OutputOptional = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? HasDefault extends true ? never : PropName : never ]?: InferDef>; }; type InputRequired = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? never : HasDefault extends true ? never : PropName ]-?: InferDefIn>; }; type InputOptional = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? PropName : HasDefault extends true ? PropName : never ]?: InferDefIn>; }; /** * CYCLE SAFETY: when a fluent generic method is called on a schema whose def * embeds other schemas, TypeScript instantiates `InferDef` while `def` * is still generic. `"..." extends keyof def` resolves TRUE under permissive * instantiation (`keyof any` contains every literal), so spread/index members * cannot be deferred by wrapper conditionals — a bare `InferDef` * member re-enters this expansion and instantiates without bound (TS2589). * Interface members only instantiate when resolved, so routing the recursive * reference through `DefBox` keeps generic instantiation shallow: it stops at * a type reference plus an indexed access instead of expanding `InferDef`. */ interface DefBox { readonly out: InferDef; readonly in: InferDefIn; } type OutputSpread = "..." extends keyof def ? DefBox["out"] : unknown; type InputSpread = "..." extends keyof def ? DefBox["in"] : unknown; type OutputIndex = "[string]" extends keyof def ? Record["out"]> : unknown; type InputIndex = "[string]" extends keyof def ? Record["in"]> : unknown; type InferObject = "[string]" extends keyof def ? [DefinitionKeys] extends [never] ? Record["out"]> : Simplify & OutputOptional & OutputSpread> & OutputIndex : Simplify & OutputOptional & OutputSpread>; type InferObjectIn = "[string]" extends keyof def ? [DefinitionKeys] extends [never] ? Record["in"]> : Simplify & InputOptional & InputSpread> & InputIndex : Simplify & InputOptional & InputSpread>; /** Object-literal inference used by fluent composition overloads. */ export type InferObjectDef = InferObject; type InferLiteralDef = def extends { readonly infer: infer output } ? output : def extends string ? InferString : def extends object ? InferObjectLiteral : unknown; type InferLiteralDefIn = def extends { readonly inferIn: infer input } ? input : def extends string ? InferStringIn : def extends object ? InferObjectLiteralIn : unknown; type LiteralRequired = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? HasDefault extends true ? PropName : never : PropName ]-?: InferLiteralDef>; }; type LiteralOptional = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? HasDefault extends true ? never : PropName : never ]?: InferLiteralDef>; }; type LiteralRequiredIn = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? never : HasDefault extends true ? never : PropName ]-?: InferLiteralDefIn>; }; type LiteralOptionalIn = { -readonly [ key in DefinitionKeys as IsOptionalProp extends true ? PropName : HasDefault extends true ? PropName : never ]?: InferLiteralDefIn>; }; /** Object-literal inference that unwraps embedded schema values one level deep. */ export type InferObjectLiteral = Simplify & LiteralOptional>; /** Input-side object-literal inference (embedded schemas contribute `inferIn`). */ export type InferObjectLiteralIn = Simplify & LiteralOptionalIn>; type InstanceOf = ctor extends abstract new (...args: never[]) => infer instance ? instance : never; type SpreadOutput = InferDef extends readonly (infer element)[] ? element[] : never[]; type SpreadInput = InferDefIn extends readonly (infer element)[] ? element[] : never[]; type InferTupleOutput = defs extends readonly [] ? result : defs extends readonly ["...", infer spread, ...infer rest] ? [...result, ...SpreadOutput, ...InferTupleOutput] : defs extends readonly [infer head, ...infer rest] ? head extends readonly [infer value, "?"] ? InferTupleOutput?]> : head extends readonly [infer value, "=", unknown] ? InferTupleOutput]> : InferTupleOutput]> : result; type InferTupleInput = defs extends readonly [] ? result : defs extends readonly ["...", infer spread, ...infer rest] ? [...result, ...SpreadInput, ...InferTupleInput] : defs extends readonly [infer head, ...infer rest] ? head extends readonly [infer value, "?" | "=", ...unknown[]] ? InferTupleInput?]> : InferTupleInput]> : result; /** * True only for `any` (`1 & any` is `any`; `0 extends any` holds). During * relation checking TypeScript instantiates these aliases permissively with * every type parameter replaced by `any`, and under `any` the object branch * recurses forever (`any["..."]` is `any` again). Cutting `any` off up front * makes permissive instantiation terminate immediately, mirroring ArkType's * `anyOrNever` guards. */ type IsAny = 0 extends 1 & def ? true : false; /** Infer the validated output type produced by a definition. */ export type InferDef = IsAny extends true ? unknown : def extends { readonly infer: infer output } ? output : def extends string ? InferString : def extends RegExp ? string : def extends readonly [infer element, "[]"] ? InferDef[] : def extends readonly [infer left, "|", infer right] ? InferDef | InferDef : def extends readonly [infer left, "&", infer right] ? InferDef & InferDef : def extends readonly [unknown, "=>", (...args: never[]) => infer output] ? output : def extends readonly [unknown, "|>", infer output] ? InferDef : def extends readonly [infer base, ":", unknown] | readonly [infer base, "@", unknown] ? InferDef : def extends readonly ["keyof", infer base] ? keyof InferDef : def extends readonly ["instanceof", ...infer constructors] ? InstanceOf : def extends readonly ["===", ...infer values] ? values[number] : def extends readonly unknown[] ? InferTupleOutput : def extends object ? InferObject : unknown; /** Infer values accepted before defaults and morphs are applied. */ export type InferDefIn = IsAny extends true ? unknown : def extends { readonly inferIn: infer input } ? input : def extends string ? InferStringIn : def extends RegExp ? string : def extends readonly [infer element, "[]"] ? InferDefIn[] : def extends readonly [infer left, "|", infer right] ? InferDefIn | InferDefIn : def extends readonly [infer left, "&", infer right] ? InferDefIn & InferDefIn : def extends readonly [infer input, "=>", unknown] | readonly [infer input, "|>", unknown] ? InferDefIn : def extends readonly [infer base, ":", unknown] | readonly [infer base, "@", unknown] ? InferDefIn : def extends readonly ["keyof", infer base] ? keyof InferDefIn : def extends readonly ["instanceof", ...infer constructors] ? InstanceOf : def extends readonly ["===", ...infer values] ? values[number] : def extends readonly unknown[] ? InferTupleInput : def extends object ? InferObjectIn : unknown;