import type { InputValue, Schema, TransformedValue, ValidValue, WriteValueOptions } from '../../../schema/index.js';
import { SchemaAction } from '../../../schema/index.js';
import type { InferWriteValueOptions, ParseValueOptions } from './options.js';
type ParserInput<SCHEMA extends Schema, OPTIONS extends ParseValueOptions = {}, WRITE_VALUE_OPTIONS extends WriteValueOptions = InferWriteValueOptions<OPTIONS>> = OPTIONS extends {
    fill: false;
} ? ValidValue<SCHEMA, WRITE_VALUE_OPTIONS> : InputValue<SCHEMA, WRITE_VALUE_OPTIONS>;
export type ParserYield<SCHEMA extends Schema, OPTIONS extends ParseValueOptions = {}, WRITE_VALUE_OPTIONS extends WriteValueOptions = InferWriteValueOptions<OPTIONS>> = (OPTIONS extends {
    fill: false;
} ? never : InputValue<SCHEMA, WRITE_VALUE_OPTIONS>) | ValidValue<SCHEMA, WRITE_VALUE_OPTIONS>;
export type ParserReturn<SCHEMA extends Schema, OPTIONS extends ParseValueOptions = {}, WRITE_VALUE_OPTIONS extends WriteValueOptions = InferWriteValueOptions<OPTIONS>> = OPTIONS extends {
    transform: false;
} ? ValidValue<SCHEMA, WRITE_VALUE_OPTIONS> : TransformedValue<SCHEMA, WRITE_VALUE_OPTIONS>;
export declare class Parser<SCHEMA extends Schema> extends SchemaAction<SCHEMA> {
    static actionName: "parse";
    start<OPTIONS extends ParseValueOptions = {}>(inputValue: unknown, options?: OPTIONS): Generator<ParserYield<SCHEMA, OPTIONS>, ParserReturn<SCHEMA, OPTIONS>>;
    parse<OPTIONS extends ParseValueOptions = {}>(inputValue: unknown, options?: OPTIONS): ParserReturn<SCHEMA, OPTIONS>;
    reparse<OPTIONS extends ParseValueOptions = {}>(inputValue: ParserInput<SCHEMA, OPTIONS>, options?: OPTIONS): ParserReturn<SCHEMA, OPTIONS>;
    validate<OPTIONS extends Omit<ParseValueOptions, 'fill' | 'transform'> = {}>(inputValue: unknown, options?: OPTIONS): inputValue is ValidValue<SCHEMA, OPTIONS>;
}
export {};
