import { Result } from 'resultage'; declare const CastingErrorEnum: { readonly ERR_MISSING_VALUE: "ERR_MISSING_VALUE"; readonly ERR_INVALID_VALUE: "ERR_INVALID_VALUE"; readonly ERR_INVALID_VALUE_TYPE: "ERR_INVALID_VALUE_TYPE"; readonly ERR_INVALID_KEY: "ERR_INVALID_KEY"; }; type CastingErrorCode = (typeof CastingErrorEnum)[keyof typeof CastingErrorEnum]; declare const $castingError: unique symbol; type Extra = { expected: string; received?: unknown; causes?: CastingError[]; reason?: string; }; interface CastingError extends Error { [$castingError]: true; code: CastingErrorCode; path: string[]; extra: Extra; } interface CasterFn { (value: unknown, path?: string[]): Result; } interface ParserFn { (value: unknown, path?: string[]): Result; } interface UnpackCasterFn { (value: unknown, path?: string[]): T; } type Guard = (value: unknown) => value is T; type OkType> = T extends CasterFn ? S : never; declare const ERR_MISSING_VALUE: "ERR_MISSING_VALUE"; declare const ERR_INVALID_VALUE: "ERR_INVALID_VALUE"; declare const ERR_INVALID_VALUE_TYPE: "ERR_INVALID_VALUE_TYPE"; declare const ERR_INVALID_KEY: "ERR_INVALID_KEY"; interface Caster extends CasterFn { nullable: Caster; optional: Caster; default(value: T, name?: string): Caster; unpack: UnpackCasterFn; validate(predicate: (value: T) => value is S, name?: string, error?: (value: T, path: string[]) => CastingError): Caster; validate(predicate: (value: T) => boolean, name?: string, error?: (value: T, path: string[]) => CastingError): Caster; match(okMatcher: (data: T) => S, errMatcher: (err: CastingError) => E): UnpackCasterFn; unpackOr(handleError: (err: CastingError) => E): UnpackCasterFn; map(transform: (data: T) => S, name?: string): Caster; chain(casterFn: (data: T, path?: string[]) => Result, name?: string): Caster; parse(value: unknown, path?: string[]): Result; assert(value: unknown, path?: string[]): asserts value is T; } type RequiredKeys = { [K in keyof T]-?: undefined extends T[K] ? never : K; }[keyof T]; type OptionalKeys = { [K in keyof T]-?: undefined extends T[K] ? K : never; }[keyof T]; type Cp = { [K in keyof T]: T[K]; } & {}; type UndefinedAsOptional = Cp<{ [field in RequiredKeys]: T[field]; } & { [field in OptionalKeys]?: T[field]; }>; type CastedBy = C extends CasterFn ? T : never; declare const array: (caster: Caster, name?: string) => Caster; declare const nonEmptyArray: (caster: Caster, name?: string) => Caster<[T, ...T[]]>; declare const casterApi: (casterFn: CasterFn, name?: string, parser?: ParserFn) => Caster; declare const fromGuard: (guard: (value: any) => value is T, name?: string, errorCode?: CastingErrorCode) => Caster; declare const fromGuardAndTransform: (guard: (value: any) => value is T, transform: (value: T, path: string[]) => Result, name?: string, errorCode?: CastingErrorCode, parser?: (value: T, path: string[]) => Result) => Caster; declare const is: (caster: CasterFn) => (value: unknown) => value is T; declare const isInteger: (value: any) => value is number; declare const isString: (value: any) => value is string; declare const isBoolean: (value: any) => value is boolean; declare const isNumber: (value: any) => value is number; declare const isObject: (value: any) => value is Record; declare const isArray: (value: any) => value is Array; declare const isNull: (value: any) => value is null; declare const isUndefined: (value: any) => value is undefined; declare const int: Caster; declare const string: Caster; declare const boolean: Caster; declare const number: Caster; declare const object: Caster>; declare const nill: Caster; declare const undef: Caster; declare const any: Caster; declare const unknown: Caster; declare const record: (keyCaster: Caster, valueCaster: Caster, name?: string) => Caster>; type Schema = { readonly schema: T; }; declare const struct: >(casters: { [K in keyof T]: Caster; }, name?: string) => Caster> & Schema<{ [K in keyof T]: Caster; }>; declare const tuple: (...casters: { [K in keyof T]: Caster; }) => Caster; declare const oneOf: (...casters: { [K in keyof T]: CasterFn; }) => Caster; /** * Combines multiple casters into a single caster that applies all of them. * The resulting caster will validate and transform a value using each of the provided casters, * and merge the results into a single object. * * @template T - A tuple of object types that the casters will handle. * @param {...{ [K in keyof T]: Caster }} casters - An array of casters to be combined. * @returns {Caster>} A caster that applies all provided casters and merges their results. */ declare const allOf: { (caster: Caster): Caster; (caster1: Caster, caster2: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster, caster21: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster, caster21: Caster, caster22: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster, caster21: Caster, caster22: Caster, caster23: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster, caster21: Caster, caster22: Caster, caster23: Caster, caster24: Caster): Caster; (caster1: Caster, caster2: Caster, caster3: Caster, caster4: Caster, caster5: Caster, caster6: Caster, caster7: Caster, caster8: Caster, caster9: Caster, caster10: Caster, caster11: Caster, caster12: Caster, caster13: Caster, caster14: Caster, caster15: Caster, caster16: Caster, caster17: Caster, caster18: Caster, caster19: Caster, caster20: Caster, caster21: Caster, caster22: Caster, caster23: Caster, caster24: Caster, caster25: Caster): Caster; }; declare const value: (value: T) => Caster; declare const values: (...values: T[]) => Caster; declare const json: Caster & { object: Caster>; struct: >(casters: { [K in keyof T]: Caster; }, name?: string) => Caster>; array: (caster: Caster, name?: string) => Caster; }; declare const jsonObject: Caster>; declare const jsonStruct: >(casters: { [K in keyof T]: Caster; }, name?: string) => Caster>; declare const jsonArray: (caster: Caster, name?: string) => Caster; declare const textInt: Caster; declare const textNumber: Caster; declare const textBool: Caster; declare const text: { int: Caster; number: Caster; bool: Caster; }; declare const possibleTextInt: Caster; declare const possibleTextNumber: Caster; declare const possibleTextBool: Caster; declare const possibleText: { int: Caster; number: Caster; bool: Caster; }; declare const isCastingError: (error: unknown) => error is CastingError; declare const errorMessage: ({ code, path, extra }: Pick, prefix?: string) => string; declare class CastingException extends Error implements CastingError { readonly [$castingError] = true; readonly name: string; readonly code: CastingErrorCode; readonly path: string[]; readonly extra: Extra; readonly reason?: string | undefined; constructor(code: CastingErrorCode, path: string[], extra: Extra); toString(): string; toJSON(): { code: CastingErrorCode; path: string[]; extra: Extra; }; } declare const castingErr: (code: CastingErrorCode, path: string[], extra: Extra) => CastingError; declare const castErr: (code: CastingErrorCode, path: string[], extra: Extra) => Result; declare const replaceExpected: (expected: string, currentPath?: string[]) => (error: CastingError) => CastingError; declare const updateError: ({ code, path, extra }: Partial) => (error: CastingError) => CastingError; declare const date: Caster & { iso: Caster; }; declare const unixDateTimeStamp: Caster; declare const jsDateTimeStamp: Caster; declare const isoDate: Caster; declare const dateTimeStamp: { unix: Caster; js: Caster; }; export { $castingError, type CastedBy, type Caster, type CasterFn, type CastingError, type CastingErrorCode, CastingErrorEnum, CastingException, type Cp, ERR_INVALID_KEY, ERR_INVALID_VALUE, ERR_INVALID_VALUE_TYPE, ERR_MISSING_VALUE, type Extra, type Guard, type OkType, type OptionalKeys, type ParserFn, type RequiredKeys, type UndefinedAsOptional, type UnpackCasterFn, allOf, any, array, boolean, castErr, casterApi, castingErr, date, dateTimeStamp, errorMessage, fromGuard, fromGuardAndTransform, int, is, isArray, isBoolean, isCastingError, isInteger, isNull, isNumber, isObject, isString, isUndefined, isoDate, jsDateTimeStamp, json, jsonArray, jsonObject, jsonStruct, nill, nonEmptyArray, number, object, oneOf, possibleText, possibleTextBool, possibleTextInt, possibleTextNumber, record, replaceExpected, string, struct, text, textBool, textInt, textNumber, tuple, undef, unixDateTimeStamp, unknown, updateError, value, values };