import type { DecodedValue, FormattedValue, ReadValueOptions, Schema, TransformedValue } from '../../../schema/index.js';
import { SchemaAction } from '../../../schema/index.js';
import type { FormatValueOptions, InferReadValueOptions } from './options.js';
export type FormatterYield<SCHEMA extends Schema, OPTIONS extends FormatValueOptions<SCHEMA> = {}, READ_VALUE_OPTIONS extends ReadValueOptions<SCHEMA> = InferReadValueOptions<SCHEMA, OPTIONS>> = OPTIONS extends {
    transform: false;
} | {
    format: false;
} ? never : DecodedValue<SCHEMA, READ_VALUE_OPTIONS>;
export type FormatterReturn<SCHEMA extends Schema, OPTIONS extends FormatValueOptions<SCHEMA> = {}, READ_VALUE_OPTIONS extends ReadValueOptions<SCHEMA> = InferReadValueOptions<SCHEMA, OPTIONS>> = OPTIONS extends {
    format: false;
} ? DecodedValue<SCHEMA, READ_VALUE_OPTIONS> : FormattedValue<SCHEMA, READ_VALUE_OPTIONS>;
export declare class Formatter<SCHEMA extends Schema = Schema> extends SchemaAction<SCHEMA> {
    static actionName: "format";
    start<OPTIONS extends FormatValueOptions<SCHEMA> = {}>(inputValue: unknown, options?: OPTIONS): Generator<FormatterYield<SCHEMA, OPTIONS>, FormatterReturn<SCHEMA, OPTIONS>>;
    format<OPTIONS extends FormatValueOptions<SCHEMA> = {}>(inputValue: unknown, options?: OPTIONS): FormatterReturn<SCHEMA, OPTIONS>;
    validate(inputValue: unknown): inputValue is TransformedValue<SCHEMA>;
}
