import { DefaultResult, DeprecatedResult, ExpectedResult, ForwardResult, OptionValue, RedirectResult, Utils, ValidateResult } from './types'; export interface SchemaParameters<$Value> extends SchemaHandlers<$Value> { name: string; } export interface SchemaHandlers<$Value> { default?: DefaultResult<$Value> | ((schema: Schema<$Value>, utils: Utils) => DefaultResult<$Value>); expected?: ExpectedResult | ((schema: Schema<$Value>, utils: Utils) => ExpectedResult); validate?: ValidateResult | ((value: unknown, schema: Schema<$Value>, utils: Utils) => ValidateResult); deprecated?: DeprecatedResult<$Value> | ((value: $Value, schema: Schema<$Value>, utils: Utils) => DeprecatedResult<$Value>); forward?: ForwardResult<$Value> | ((value: $Value, schema: Schema<$Value>, utils: Utils) => ForwardResult<$Value>); redirect?: RedirectResult<$Value> | ((value: $Value, schema: Schema<$Value>, utils: Utils) => RedirectResult<$Value>); overlap?: (currentValue: $Value, newValue: $Value, schema: Schema<$Value>, utils: Utils) => $Value; preprocess?: (value: unknown, schema: Schema<$Value>, utils: Utils) => unknown; postprocess?: (value: $Value, schema: Schema<$Value>, utils: Utils) => unknown; } export declare function createSchema<$Schema extends Schema, $Parameters extends $Schema['_parametersType']>(SchemaConstructor: new (parameters: $Parameters) => $Schema, parameters: $Parameters): $Schema; export declare abstract class Schema<$Value extends OptionValue, $Parameters extends SchemaHandlers<$Value> = SchemaHandlers<$Value>> { static create<$Schema extends Schema>(parameters: $Schema['_parametersType']): $Schema; name: string; _valueType: $Value; _parametersType: $Parameters; constructor(parameters: SchemaParameters<$Value>); default(_utils: Utils): DefaultResult<$Value>; expected(_utils: Utils): ExpectedResult; validate(_value: unknown, _utils: Utils): ValidateResult; deprecated(_value: $Value, _utils: Utils): DeprecatedResult<$Value>; forward(_value: $Value, _utils: Utils): ForwardResult<$Value>; redirect(_value: $Value, _utils: Utils): RedirectResult<$Value>; overlap(currentValue: $Value, _newValue: $Value, _utils: Utils): $Value; preprocess(value: unknown, _utils: Utils): unknown; postprocess(value: $Value, _utils: Utils): unknown; }