@microsoft/teamsfx-api
Version:
teamsfx framework api
207 lines • 5.73 kB
TypeScript
import { Result } from "neverthrow";
import { FxError } from "./error";
export type OptionValue = string | boolean | string[] | undefined;
export type CLIOptionType = "boolean" | "string" | "array";
export interface CLICommand {
/**
* @description command name, only meaningful to its parent command, like "sample"
*/
name: string;
/**
* @description command aliases
*/
aliases?: string[];
/**
* @description command full name, like "teamsfx new sample", only available after command finding
*/
fullName?: string;
/**
* @description CLI version, only necessary for the root command
*/
version?: string;
/**
* @description command description
*/
description: string;
/**
* @description command argument, for example, "teamsfx new sample <sample-name>": sample-name is an argument, which is positional
*/
arguments?: CLICommandArgument[];
/**
* @description command options, followed by "--" or "-" char, for example, "teamsfx new sample --option1 value1 --option2 value2"
*/
options?: CLICommandOption[];
/**
* @description whether to sort options in "--help"
*/
sortOptions?: boolean;
/**
* @description sub commands, CLI commands are organized in a tree structure, commands can have sub commands
*/
commands?: CLICommand[];
/**
* @description whether to sort sub commands in "--help"
*/
sortCommands?: boolean;
/**
* @description examples of how to use this command
*/
examples?: CLIExample[];
/**
* @description command handler
*/
handler?: (ctx: CLIContext) => Promise<Result<undefined, FxError>> | Result<undefined, FxError>;
/**
* @description telemetry will be sent when available
*/
telemetry?: {
event: string;
};
/**
* @description header message will be printed on the top in "--help"
*/
header?: string;
/**
* @description footer message will be printed on the bottom in "--help"
*/
footer?: string;
/**
* @description whether to hide this command in "--help"
*/
hidden?: boolean;
/**
* @description default value of global option "--interactive", default value is true
*/
defaultInteractiveOption?: boolean;
/**
* @description reserve option values in interactive mode
*/
reservedOptionNamesInInteractiveMode?: string[];
}
export interface CLIFoundCommand extends CLICommand {
fullName: string;
}
export interface CLIContext {
/**
* @description the command matched
*/
command: CLIFoundCommand;
/**
* @description parsed option values
*/
optionValues: Record<string, OptionValue>;
/**
* @description parsed global option values, global options are options defined by the root command in the command tree.
*/
globalOptionValues: Record<string, OptionValue>;
/**
* @description parsed argument values
*/
argumentValues: OptionValue[];
/**
* @description telemetry properties, which cen be accessed in the process of command execution lifecycle
*/
telemetryProperties: Record<string, string>;
}
interface CLICommandOptionBase {
/**
* @description option/argument name
* */
name: string;
/**
* @description when converting option key-value into @Inputs for FxCore,
* the key will be used as the property name if defined, otherwise the name will be used
*/
questionName?: string;
/**
* @description option/argument description
*/
description: string;
/**
* @description option/argument abbreviation
*/
shortName?: string;
/**
* @description option/argument value type: boolean, text, array
*/
type: CLIOptionType;
/**
* @description whether this option/argument is required
*/
required?: boolean;
/**
* @description whether this option/argument is hidden in "--help"
*/
hidden?: boolean;
}
export interface CLIBooleanOption extends CLICommandOptionBase {
type: "boolean";
/**
* @description default value
*/
default?: boolean;
/**
* @description parsed input value
*/
value?: boolean;
}
export interface CLIStringOption extends CLICommandOptionBase {
type: "string";
/**
* @description default value
*/
default?: string;
/**
* @description parsed input value
*/
value?: string;
/**
* allowed values
*/
choices?: string[];
/**
* @description whether to skip validation against allowed values defined in choices
*/
skipValidation?: boolean;
/**
* @description command to get choice list
*/
choiceListCommand?: string;
}
export interface CLIArrayOption extends CLICommandOptionBase {
type: "array";
/**
* @description default value
*/
default?: string[];
/**
* @description parsed input value
*/
value?: string[];
/**
* allowed values
*/
choices?: string[];
/**
* @description whether to skip validation against allowed values defined in choices
*/
skipValidation?: boolean;
/**
* @description command to get choice list
*/
choiceListCommand?: string;
}
export type CLICommandOption = CLIBooleanOption | CLIStringOption | CLIArrayOption;
export type CLICommandArgument = CLICommandOption;
export interface CLIExample {
/**
* @description example command
*/
command: string;
/**
* @description description of the sample command
*/
description: string;
}
export {};
//# sourceMappingURL=cli.d.ts.map