import { Evaluate, KeyValuate, TreeOf, ValueOf, Exact } from "@re-do/utils"; import { ExtractableDefinition } from "./internal.js"; import { TypeSet } from "./typeSet"; import { ValidationErrors } from "./errors.js"; import { Recursible } from "./recursible/index.js"; export declare type MatchesArgs = { definition: DefType; typeSet: TypeSet.Definition; }; export declare type ParseContext = { typeSet: TypeSet.Definition; path: string[]; seen: string[]; shallowSeen: string[]; }; export declare type ParseArgs = [definition: DefType, context: ParseContext]; export declare type AllowsOptions = { ignoreExtraneousKeys?: boolean; }; export declare type ReferencesOptions = { includeBuiltIn?: boolean; }; export declare type GenerateOptions = { onRequiredCycle?: any; }; export declare type ParserInput = { type: DefType; parent: () => { meta: Parent; }; matches: DefinitionMatcher; components?: (...args: ParseArgs) => Components; children?: () => Children; fallback?: (...args: ParseArgs) => any; }; export declare type DefinitionMatcher = (...args: ParseArgs>) => boolean; export declare type HandlesArg = Children extends never[] ? [handles: Required] : [handles?: Handles]; export declare type HandlesContext = [ args: { def: DefType; ctx: ParseContext; } & (unknown extends Components ? {} : { components: Components; }) ]; export declare type HandlesMethods = { allows?: (...args: [ ...args: HandlesContext, valueType: ExtractableDefinition, options: AllowsOptions ]) => ValidationErrors; references?: (...args: [ ...args: HandlesContext, options: ReferencesOptions ]) => DefType extends Recursible.Definition ? TreeOf : string[]; generate?: (...args: [ ...args: HandlesContext, options: GenerateOptions ]) => any; }; export declare type UnhandledMethods = Omit, keyof GetHandledMethods>; export declare type ParseFunction = (...args: ParseArgs) => ParseResult; export declare type ParseResult = { def: DefType; ctx: ParseContext; } & CoreMethods; export declare type CoreMethods = { [MethodName in CoreMethodName]-?: TransformInputMethod[MethodName]>>; }; export declare type TransformInputMethod>> = Method extends (...args: [infer ParseResult, ...infer Rest, infer Opts]) => infer Return ? (...args: [...rest: Rest, opts?: Opts]) => Return : Method; export declare type GetHandledMethods = (KeyValuate extends () => infer Return ? Return : {}) & KeyValuate; export declare type ParserMetadata> = Evaluate<{ meta: { type: DefType; inherits: () => GetHandledMethods; handles: unknown extends Handles ? {} : Handles; matches: DefinitionMatcher; }; }>; export declare type Parser = Evaluate & ParseFunction>; export declare type CoreMethodName = keyof HandlesMethods; export declare const reroot: { meta: { type: string | number | { [x: string]: any; }; inherits: () => void; handles: {}; }; }; export declare const createParser: (args_0: Exact>, ...args_1: HandlesArg>>) => { meta: { type: DefType; inherits: () => GetHandledMethods; handles: unknown extends Handles ? {} : Handles; matches: DefinitionMatcher; }; } & ParseFunction;