import type { Primitive, TupleOf } from '@bemedev/core/lib/globals/types.js'; import type { Monad } from './monad'; export type LengthOf = T['length']; export type ToString_F = (value: T) => PTS; export type PrimeToString = T extends number ? T : `${T}`; export type PTS = PrimeToString; export type PrimesToStrings = T extends [ infer U extends Primitive, ...infer Rest extends Primitive[] ] ? [PTS, ...(LengthOf extends 0 ? [] : PrimesToStrings)] : never; export type Result = { check: true; value: T; } | false; export type CheckerB_F = (arg: unknown) => boolean; export type Checker_F = (arg: unknown) => Result; export type CheckerA = ((arg: unknown) => arg is T) | CheckerB_F; export type CreateCheck_F = (fn: CheckerA) => Checker_F; export type TransformCheckA = T extends CheckerA ? Checker_F : never; export type TransformChecksA = T extends [ infer U extends CheckerA, ...infer Rest extends CheckerA[] ] ? [ TransformCheckA, ...(LengthOf extends 0 ? [] : TransformChecksA) ] : []; export type CreateChecker_F = []>(key: K, ...functions: T) => [K, ...TransformChecksA]; export type CreateCheckerSN_F = (key: K) => CheckerSN; export type CreatePrimeChecker_F = (key: K) => [PTS, Checker_F]; export type CheckerSN = [K, Checker_F]; export type TransformChecksSN = T extends [ infer U extends string | number, ...infer Rest extends (string | number)[] ] ? [ CheckerSN, ...(LengthOf extends 0 ? [] : TransformChecksSN) ] : []; export type CreateMonadSN_F = (...keys: T) => Monad>; export type CreatePrimitiveMonad_F = (...keys: T) => Monad>>; type Fn = (...args: any[]) => any; export type Checker = [ string | number, ...TupleOf ]; export type GetFunctionsFrom = T extends [ any, ...infer Rest ] ? Rest : never; export type DisplayChecker = { key: T[0]; functions: GetFunctionsFrom; }; export type CheckerMap = Checker[]; export type SimpleMap = [string, ...CheckerB_F[]][]; export type MapLength = LengthOf>; export type CheckerHeritage = T extends Checker ? Checker : never; export type CheckerMapHeritage = CheckerMap>; export type MaybeArray = LengthOf extends 1 ? T[0] : T; export type ToObject = T extends [ infer U extends Checker, ...infer Rest extends CheckerMapHeritage ] ? { [key in U[0]]: MaybeArray>>>; } & (Rest['length'] extends 0 ? {} : ToObject) : {}; type ToObject2 = T extends [ infer U extends Checker, ...infer Rest extends CheckerMap ] ? { [key in U[0]]: GetFunctionsFrom; } & (Rest['length'] extends 0 ? {} : ToObject2) : {}; export type ToObject_F = (...map: T) => ToObject; export type ResultFrom = ReturnType> extends { value: infer R; check: true; } | false ? R : never; export type ResultsFrom = T extends [infer U, ...infer R extends any[]] ? [ResultFrom, ...(LengthOf extends 0 ? [] : ResultsFrom)] : []; export type CreateMonad_F = (checkers: T) => Monad; export type ToRawFunction_F = (arg: [string, Checker_F]) => Checker_F; export type ToKey_F = (arg: [string, Fn]) => string; export type ToFunction_F = (arg: [string, (arg: unknown) => boolean]) => (arg: unknown) => boolean; type _ToSimple = T extends [ infer U extends Checker, ...infer Rest extends CheckerMap ] ? [ [ U[0], ...TupleOf>> ], ...(Rest['length'] extends 0 ? [] : _ToSimple) ] : never; export type ToSimple = Extract<_ToSimple, any[]>; export type Add_F = (key: K, checker: F) => Monad<[...T, [K, F]]>; export type ToSimple_F = (map: T) => ToSimple; export type ToSimpleOne_F = (fn: Checker_F) => CheckerB_F; type TrueKey = T extends number | string ? T : never; export declare const AND_LITERAL = "&&"; export type AndLiteral = typeof AND_LITERAL; export declare const OR_LITERAL = "||"; export type OrLiteral = typeof OR_LITERAL; export declare const CONCAT_LITERAL = "::"; export type ConcatLiteral = typeof CONCAT_LITERAL; export type CL = ConcatLiteral; export type ToB = T extends true ? AndLiteral : OrLiteral; type Merge2, B extends boolean = true> = [`${TrueKey}${ToB}${TrueKey}`, U[1]]; type Merge3 = M extends [ infer U extends CheckerHeritage, ...infer Rest extends CheckerMap ] ? [ Merge2, ...(Rest['length'] extends 0 ? [] : Merge3) ] : never; export type Merge, B extends boolean = true> = Prev extends [ infer U1 extends Checker, ...infer Rest extends CheckerMapHeritage ] ? [ ...Merge3, ...(Rest['length'] extends 0 ? [] : Next extends CheckerMapHeritage ? Merge : []) ] : never; type Concat2 = [ `${TrueKey}${CL}${TrueKey}`, ...GetFunctionsFrom, ...GetFunctionsFrom ]; type Concat3 = M extends [ infer U extends Checker, ...infer Rest extends CheckerMap ] ? [Concat2, ...(Rest['length'] extends 0 ? [] : Concat3)] : never; export type Concat = Prev extends [ infer U1 extends Checker, ...infer Rest extends CheckerMap ] ? [ ...Concat3, ...(Rest['length'] extends 0 ? [] : Concat) ] : never; export type Parser_F = (...args: TupleOf>) => Tr; type ReturnTypes any>> = { [K in keyof T]: ReturnType; }[keyof T]; export type Transform = ToObject2> = ({ else: Parser_F; } & { [key in keyof T]?: (...args: ResultsFrom) => any; }) | ({ else?: Parser_F; } & { [key in keyof T]: (...args: ResultsFrom) => any; }); export type TransformWithReturnType = ToObject2, Te extends Tr = Tr> = ({ else: Parser_F; } & { [key in keyof T]?: (...args: ResultsFrom) => Te; }) | ({ else?: Parser_F; } & { [key in keyof T]: (...args: ResultsFrom) => Tr; }); export type Transform_F = >(monad: Monad, transformers: Transformers) => Parser_F>; export type RawCheckersFrom> = T['rawCheckers']; export type CheckersFrom = T['checkers']; export {}; //# sourceMappingURL=types.d.ts.map