import type { ArrayPath } from '../../schema/actions/utils/types.js';
import type { Extension, ItemSchema, Schema, SchemaUnextendedValue } from '../../schema/index.js';
import type { TransformedValue } from './transformedValue.js';
import type { ValidValue } from './validValue.js';
export declare const $extension: unique symbol;
export type $extension = typeof $extension;
export declare const $contextExtension: unique symbol;
export type $contextExtension = typeof $contextExtension;
export type ExtensionParserOptions = {
    transform?: boolean;
    valuePath?: ArrayPath;
};
export type ExtensionParser<EXTENSION extends Extension = Extension, CONTEXT_EXTENSION extends Extension = EXTENSION> = {
    [$extension]?: EXTENSION;
    [$contextExtension]?: CONTEXT_EXTENSION;
} & ((schema: Schema, input: unknown, options?: ExtensionParserOptions) => {
    isExtension: true;
    extensionParser: () => Generator<ValidValue<Schema, {
        extension: EXTENSION;
    }>, TransformedValue<Schema, {
        extension: EXTENSION;
    }>, ValidValue<ItemSchema, {
        extension: CONTEXT_EXTENSION;
    }> | undefined>;
    unextendedInput?: never;
} | {
    isExtension: false;
    extensionParser?: never;
    unextendedInput: SchemaUnextendedValue<EXTENSION> | undefined;
});
