import { plugins } from './validator-map.js';
import { SwitchConfig, SwitchSchema } from './schemas/switch.js';
import { InferSchemaType, SObjectProperties, InferSObjectType, ValidatorConfig, Validator } from './types.js';
import { Schema } from './schemas/schema.js';
import { ArraySchema } from './schemas/array.js';
import { ObjectSchema } from './schemas/object.js';
import { SetSchema } from './schemas/set.js';
import { UnionSchema, UnionValidatorConfig } from './schemas/union.js';
export { SwitchSchema, Schema };
export * from './types.js';
type Builder = {
[P in Exclude<(typeof plugins)[number], {
dataType: "switch" | "object" | "literal" | "array" | "record" | "map" | "set" | "union" | "instanceof";
}> as P["dataType"]]: (config?: ValidatorConfig
? TOutput : never>) => Schema
? TOutput : never, P extends Validator ? TInput : never>;
} & {
array, TOutput = InferSchemaType[], TInput = InferSchemaType[]>(itemSchema: T, config?: ValidatorConfig): ArraySchema;
object>(config: ValidatorConfig & {
validate?: {
properties?: P;
};
}): ObjectSchema;
switch(config: SwitchConfig): Schema;
literal(value: T, config?: ValidatorConfig): Schema;
record, V extends Schema, TOutput = Record, InferSchemaType>, TInput = Record, InferSchemaType>>(keySchema: K, valueSchema: V, config?: ValidatorConfig): Schema;
map, V extends Schema, TOutput = Map, InferSchemaType>, TInput = Map, InferSchemaType>>(keySchema: K, valueSchema: V, config?: ValidatorConfig): Schema;
set, TOutput = Set>, TInput = Set>>(config?: ValidatorConfig & {
validate?: {
ofType?: T;
};
}): SetSchema;
union, ...Schema[]], TOutput = InferSchemaType, TInput = InferSchemaType>(config: UnionValidatorConfig): UnionSchema;
instanceof(constructor: new (...args: any[]) => T, config?: ValidatorConfig): Schema;
lazy>(resolver: () => T): T;
};
export declare const s: Builder;
export declare namespace s {
type infer> = T extends Schema ? U : never;
}