import { BinderNode } from './BinderNode.js'; import type { Validator } from './Validation.js'; export declare const _ItemModel: unique symbol; export declare const _parent: unique symbol; export declare const _key: unique symbol; export declare const _fromString: unique symbol; export declare const _validators: unique symbol; export declare const _binderNode: unique symbol; export declare const _getPropertyModel: unique symbol; declare const _properties: unique symbol; declare const _optional: unique symbol; export declare function getBinderNode, T = ModelValue>(model: M): BinderNode; interface HasFromString { [_fromString](value: string): T; } export interface HasValue { value?: T; } export declare type ModelParent = AbstractModel | HasValue; export declare type ModelValue> = ReturnType; export interface ModelConstructor> { createEmptyValue: () => T; new (parent: ModelParent, key: keyof any, optional: boolean, ...args: any[]): M; } declare type ModelVariableArguments>> = C extends new (parent: ModelParent, key: keyof any, ...args: infer R) => any ? R : never; export declare abstract class AbstractModel { static createEmptyValue(): unknown; readonly [_parent]: ModelParent; readonly [_validators]: ReadonlyArray>; readonly [_optional]: boolean; [_binderNode]?: BinderNode; [_key]: keyof any; constructor(parent: ModelParent, key: keyof any, optional: boolean, ...validators: ReadonlyArray>); toString(): string; valueOf(): T; } export declare abstract class PrimitiveModel extends AbstractModel { } export declare class BooleanModel extends PrimitiveModel implements HasFromString { static createEmptyValue: BooleanConstructor; [_fromString]: BooleanConstructor; } export declare class NumberModel extends PrimitiveModel implements HasFromString { static createEmptyValue: NumberConstructor; constructor(parent: ModelParent, key: keyof any, optional: boolean, ...validators: ReadonlyArray>); [_fromString](str: string): number | undefined; } export declare class StringModel extends PrimitiveModel implements HasFromString { static createEmptyValue: StringConstructor; [_fromString]: StringConstructor; } export declare class ObjectModel extends AbstractModel { static createEmptyValue(): {}; private [_properties]; protected [_getPropertyModel]>, key: keyof any, optional: boolean, ...args: any[]) => any>(name: N, ValueModel: C, valueModelArgs: any[]): InstanceType; } export declare class ArrayModel> extends AbstractModel> { static createEmptyValue(): readonly unknown[]; private readonly [_ItemModel]; private readonly itemModelArgs; private readonly itemModels; constructor(parent: ModelParent>, key: keyof any, optional: boolean, ItemModel: ModelConstructor, itemModelArgs: ModelVariableArguments, ...validators: ReadonlyArray>>); /** * Iterates the current array value and yields a binder node for every item. */ [Symbol.iterator](): IterableIterator>; } export {}; //# sourceMappingURL=Models.d.ts.map