/** * Primary options show up in the web UI in the "Language" settings tab, * secondary options in "Other". */ export declare type OptionKind = "primary" | "secondary"; export interface OptionDefinition { name: string; type: StringConstructor | BooleanConstructor; kind?: OptionKind; renderer?: boolean; alias?: string; multiple?: boolean; defaultOption?: boolean; defaultValue?: any; typeLabel?: string; description: string; legalValues?: string[]; } /** * The superclass for target language options. You probably want to use one of its * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`. */ export declare abstract class Option { readonly definition: OptionDefinition; constructor(definition: OptionDefinition); getValue(values: { [name: string]: any; }): T; readonly cliDefinitions: { display: OptionDefinition[]; actual: OptionDefinition[]; }; } export declare type OptionValueType = O extends Option ? T : never; export declare type OptionValues = { [P in keyof T]: OptionValueType; }; export declare function getOptionValues; }>(options: T, untypedOptionValues: { [name: string]: any; }): OptionValues; /** * A target language option that allows setting a boolean flag. */ export declare class BooleanOption extends Option { /** * @param name The shorthand name. * @param description Short-ish description of the option. * @param defaultValue The default value. * @param kind Whether it's a primary or secondary option. */ constructor(name: string, description: string, defaultValue: boolean, kind?: OptionKind); readonly cliDefinitions: { display: OptionDefinition[]; actual: OptionDefinition[]; }; getValue(values: { [name: string]: any; }): boolean; } export declare class StringOption extends Option { constructor(name: string, description: string, typeLabel: string, defaultValue: string, kind?: OptionKind); } export declare class EnumOption extends Option { private readonly _values; constructor(name: string, description: string, values: [string, T][], defaultValue?: string | undefined, kind?: OptionKind); getValue(values: { [name: string]: any; }): T; }