import { AllOfSchema, AtomicSchemaObject, type LogicalCombination, type LogicalCombinationOfLiterals } from '../../atomic-schema/index.js';
import { MultipleOfAtomicSchema } from '../../built-in-plugins/type.js';
import type { ExtractionPlugin, SimplificationPlugin, ValidationPlugin } from '../../plugin/index.js';
import { MaximumAtomicSchema, MinimumAtomicSchema } from '../../built-in-plugins/index.js';
export declare const stringFormatNames: ["date", "time", "date-time", "iso-time", "iso-date-time", "duration", "uri-reference", "uri-template", "uri", "email", "hostname", "ipv4", "ipv6", "regex", "uuid", "json-pointer", "relative-json-pointer", "byte"];
export type StringFormatName = (typeof stringFormatNames)[number];
export declare class StringFormatAtomicSchema<FormatName_ extends StringFormatName = StringFormatName> extends AtomicSchemaObject {
    readonly format: FormatName_;
    constructor(format: FormatName_);
    negate(): LogicalCombinationOfLiterals;
    toJSONSchema(): {
        format: FormatName_;
    };
}
export declare const stringFormatLogicalCombinations: Record<StringFormatName, LogicalCombination>;
export declare const numberFormatLogicalCombinations: {
    readonly int32: AllOfSchema<MultipleOfAtomicSchema | MinimumAtomicSchema | MaximumAtomicSchema>;
    readonly int64: MultipleOfAtomicSchema;
};
export declare const formatExtractionPlugin: ExtractionPlugin;
export declare const formatValidationPlugin: ValidationPlugin;
export type FormatConjunctionSchema<FormatName extends string = string> = {
    allOf?: ({
        format: FormatName;
    } | {
        not: {
            format: FormatName;
        };
    })[];
};
export type FormatSimplificationPlugin = SimplificationPlugin<'string', FormatConjunctionSchema<StringFormatName>, never>;
export declare const formatSimplificationPlugin: FormatSimplificationPlugin;
export type FormatPlugin = [
    ValidationPlugin,
    ExtractionPlugin,
    FormatSimplificationPlugin
];
/**
 * Adds support for the `format` values provided by
 * [`ajv-formats`](https://ajv.js.org/packages/ajv-formats.html).
 *
 * `format`s that apply to strings are only compared for equality, so that only
 * schemas like
 *
 * ```json
 * {
 *   "allOf": [
 *     { "format": "email" },
 *     { "not": { "format": "email" } }
 *   ]
 * }
 * ```
 *
 * include a [contradiction](https://github.com/jobohner/json-schema-describes-subset/blob/v0.4.0/docs/README.md#contradictions).
 *
 * `format`s that apply to numbers are transformed to equivalent
 * {@link AtomicSchemaObject}s like {@link MultipleOfAtomicSchema},
 * {@link MinimumAtomicSchema} or {@link MaximumAtomicSchema}.
 *
 * @example ```ts
 * import { schemaDescribesSubset } from 'json-schema-describes-subset'
 * import { formatPlugin } from 'json-schema-describes-subset/custom-plugins/format-plugin'
 *
 * console.log(
 *   schemaDescribesSubset(
 *     { format: 'email' },
 *     { format: 'date-time' },
 *     { plugins: [formatPlugin] },
 *   ),
 * ) // logs: `null`
 *
 * console.log(
 *   schemaDescribesSubset(
 *     { type: 'integer', minimum: 0, maximum: 10 },
 *     { format: 'int32' },
 *     { plugins: [formatPlugin] },
 *   ),
 * ) // logs: `true`
 * ```
 *
 * @privateRemarks TODO: return type of {@link toDNF}
 *
 */
export declare const formatPlugin: FormatPlugin;
