/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { NativeParsedArgs } from "../common/argv.mjs";
/**
 * This code is also used by standalone cli's. Avoid adding any other dependencies.
 */
declare const helpCategories: {
    o: string;
    e: string;
    t: string;
};
export interface Option<OptionType> {
    type: OptionType;
    alias?: string;
    deprecates?: string[];
    args?: string | string[];
    description?: string;
    deprecationMessage?: string;
    allowEmptyValue?: boolean;
    cat?: keyof typeof helpCategories;
    global?: boolean;
}
export interface Subcommand<T> {
    type: 'subcommand';
    description?: string;
    deprecationMessage?: string;
    options: OptionDescriptions<Required<T>>;
}
export type OptionDescriptions<T> = {
    [P in keyof T]: T[P] extends boolean | undefined ? Option<'boolean'> : T[P] extends string | undefined ? Option<'string'> : T[P] extends string[] | undefined ? Option<'string[]'> : Subcommand<T[P]>;
};
export declare const OPTIONS: OptionDescriptions<Required<NativeParsedArgs>>;
export interface ErrorReporter {
    onUnknownOption(id: string): void;
    onMultipleValues(id: string, usedValue: string): void;
    onEmptyValue(id: string): void;
    onDeprecatedOption(deprecatedId: string, message: string): void;
    getSubcommandReporter?(commmand: string): ErrorReporter;
}
export declare function parseArgs<T>(args: string[], options: OptionDescriptions<T>, errorReporter?: ErrorReporter): T;
export declare function formatOptions(options: OptionDescriptions<any>, columns: number): string[];
export declare function buildHelpMessage(productName: string, executableName: string, version: string, options: OptionDescriptions<any>, capabilities?: {
    noPipe?: boolean;
    noInputFiles: boolean;
}): string;
export declare function buildVersionMessage(version: string | undefined, commit: string | undefined): string;
export {};
