type PrimitiveType = "string" | "boolean" | "number" | "symbol" | "null" | "undefined" | "date" | "any" | "unknown"; type SchemaDefOptions = { optional?: boolean; nullable?: boolean; description?: string; default_?: unknown; readonly_?: boolean; }; type ObjectDef = { type: "object"; properties: Record; additionalProperties?: boolean; } & SchemaDefOptions; type ArrayDef = { type: "array"; element: SchemaDef; } & SchemaDefOptions; type TupleDef = { type: "tuple"; entries: SchemaDef[]; } & SchemaDefOptions; type UnionDef = { type: "union"; members: SchemaDef[]; } & SchemaDefOptions; type IntersectionDef = { type: "intersection"; members: SchemaDef[]; } & SchemaDefOptions; type EnumDef = { type: "enum"; members: Record; } & SchemaDefOptions; type FunctionDef = { type: "function"; parameters?: SchemaDef[]; result?: SchemaDef; } & SchemaDefOptions; type StringDef = { type: Extract; regex?: RegExp | string; minLength?: number; maxLength?: number; } & SchemaDefOptions; type NumberDef = { type: Extract; min?: number; max?: number; } & SchemaDefOptions; type BooleanDef = { type: Extract; } & SchemaDefOptions; type DateDef = { type: Extract; } & SchemaDefOptions; type NullDef = { type: Extract; } & SchemaDefOptions; type SymbolDef = { type: Extract; } & SchemaDefOptions; type UndefinedDef = { type: Extract; } & SchemaDefOptions; type AnyDef = { type: Extract; } & SchemaDefOptions; type UnknownDef = { type: Extract; } & SchemaDefOptions; type SchemaDef = ArrayDef | ObjectDef | TupleDef | UnionDef | IntersectionDef | StringDef | NumberDef | BooleanDef | NullDef | SymbolDef | UndefinedDef | FunctionDef | AnyDef | UnknownDef | DateDef | EnumDef; type IsSchemaFn = (value: unknown) => value is TSchemaAny; export type { IsSchemaFn as I, SchemaDef as S };