import type { Builder } from "./builders/Builder.js";
import type { Spec } from "./builders/Spec.js";
import { type HelpMessageOptions } from "./utils/help-message.js";
type ExtractBuilderResult<B> = B extends Builder<Spec<infer I, infer P>> ? I extends never ? P : I | P : never;
export declare class FlagsParser<T extends Record<string, Builder<any>>> {
    private schema;
    readonly metadata: {
        readonly program: string;
        readonly description?: string;
        readonly version?: string;
        readonly combineShortFlags?: boolean;
    };
    constructor(schema: T, metadata?: {
        readonly program: string;
        readonly description?: string;
        readonly version?: string;
        readonly combineShortFlags?: boolean;
    });
    program(name: string): FlagsParser<T>;
    describe(description: string): FlagsParser<T>;
    version(version: string): FlagsParser<T>;
    combineShortFlags(): FlagsParser<T>;
    helpMessage: (options?: HelpMessageOptions) => string;
    parse(args: string[]): {
        [K in keyof T]: ExtractBuilderResult<T[K]>;
    };
    formatError(error: unknown): string;
    safeParse(args: string[]): [ok: true, error: undefined, output: {
        [K in keyof T]: ExtractBuilderResult<T[K]>;
    }] | [ok: false, error: unknown, output: undefined];
    private expandCombinedShortFlags;
}
export {};
