UNPKG

@modern-js/utils

Version:

A Progressive React Framework for modern web development.

998 lines (893 loc) • 26 kB
// Type definitions for inquirer 8.2 // Project: https://github.com/SBoudrias/Inquirer.js // Definitions by: Qubo <https://github.com/tkQubo> // Parvez <https://github.com/ppathan> // Jouderian <https://github.com/jouderianjr> // Qibang <https://github.com/bang88> // Jason Dreyzehner <https://github.com/bitjson> // Synarque <https://github.com/synarque> // Justin Rockwood <https://github.com/jrockwood> // Keith Kelly <https://github.com/kwkelly> // Richard Lea <https://github.com/chigix> // Jed Mao <https://github.com/jedmao> // Manuel Thalmann <https://github.com/manuth> // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 4.2 import { Interface as ReadlineInterface } from 'readline'; import { Observable } from './rxjs'; import Choice = require('./lib/objects/choice'); import Choices = require('./lib/objects/choices'); import Separator = require('./lib/objects/separator'); import './lib/prompts/base'; import './lib/prompts/checkbox'; import './lib/prompts/confirm'; import './lib/prompts/editor'; import './lib/prompts/expand'; import './lib/prompts/input'; import './lib/prompts/list'; import './lib/prompts/number'; import './lib/prompts/password'; import './lib/prompts/rawlist'; import './lib/utils/events'; import './lib/utils/paginator'; import './lib/utils/readline'; import './lib/utils/screen-manager'; import './lib/utils/utils'; import BottomBar = require('./lib/ui/bottom-bar'); import PromptUI = require('./lib/ui/prompt'); /** * Represents a union which preserves autocompletion. * * @template T * The keys which are available for autocompletion. * * @template F * The fallback-type. */ type LiteralUnion<T extends F, F = string> = T | (F & {}); /** * Provides prompts for answering questions. */ interface PromptModuleBase { /** * Registers a new prompt-type. * * @param name * The name of the prompt. * * @param prompt * The constructor of the prompt. */ registerPrompt(name: string, prompt: inquirer.prompts.PromptConstructor): void; /** * Registers the default prompts. */ restoreDefaultPrompts(): void; } /** * Represents a list-based question. * * @template T * The type of the answers. * * @template TChoiceMap * The valid choices for the question. */ interface ListQuestionOptionsBase<T extends inquirer.Answers, TChoiceMap extends inquirer.Answers> extends inquirer.Question<T> { /** * The choices of the prompt. */ choices?: inquirer.AsyncDynamicQuestionProperty<ReadonlyArray<inquirer.DistinctChoice<TChoiceMap>>, T> | undefined; /** * The number of elements to show on each page. */ pageSize?: number | undefined; } /** * Provides components for the module. */ declare namespace inquirer { /** * Represents either a key of `T` or a `string`. * * @template T * The type of the keys to suggest. */ type KeyUnion<T> = LiteralUnion<Extract<keyof T, string>>; /** * Converts the specified union-type `U` to an intersection-type. * * @template U * The union to convert to an intersection. */ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; /** * Provides an input and an output-stream. */ interface StreamOptions { /** * A stream to read the input from. */ input?: NodeJS.ReadStream | undefined; /** * A stream to write the output to. */ output?: NodeJS.WriteStream | undefined; } /** * Provides the functionality to prompt questions to the user. */ interface PromptModule extends PromptModuleBase { /** * The prompts of the prompt-module. */ prompts: prompts.PromptCollection; /** * Prompts the questions to the user. */ <T extends Answers = Answers>(questions: QuestionCollection<T>, initialAnswers?: Partial<T>): Promise<T> & { ui: PromptUI<T> }; /** * Registers a new prompt-type. * * @param name * The name of the prompt. * * @param prompt * The constructor of the prompt. */ registerPrompt(name: string, prompt: prompts.PromptConstructor): this; } interface Inquirer extends PromptModuleBase { /** * Registers a new prompt-type. * * @param name * The name of the prompt. * * @param prompt * The constructor of the prompt. */ registerPrompt(name: string, prompt: prompts.PromptConstructor): void; /** * Creates a prompt-module. * * @param opt * The streams for the prompt-module. * * @returns * The new prompt-module. */ createPromptModule(opt?: StreamOptions): PromptModule; /** * The default prompt-module. */ prompt: PromptModule; /** * The prompts of the default prompt-module. * * @deprecated */ prompts: {}; /** * Represents a choice-item separator. */ Separator: typeof Separator; /** * Provides ui-components. */ ui: { /** * Represents the bottom-bar UI. */ BottomBar: typeof BottomBar; /** * Represents the prompt ui. */ Prompt: typeof PromptUI; }; } /** * A set of answers. */ interface Answers extends Record<string, any> {} /** * Provides the functionality to validate answers. * * @template T * The type of the answers. */ type Validator<T extends Answers = Answers> = Question<T>['validate']; /** * Provides the functionality to transform an answer. * * @template T * The type of the answers. */ type Transformer<T extends Answers = Answers> = InputQuestionOptions<T>['transformer']; /** * Represents a dynamic property for a question. * * @template T * The type of the property. * * @template TAnswers * The type of the answers. */ type DynamicQuestionProperty<T, TAnswers extends Answers = Answers> = T | ((answers: TAnswers) => T); /** * Represents a dynamic property for a question which can be fetched asynchronously. * * @template T * The type of the property. * * @template TAnswers * The type of the answers. */ type AsyncDynamicQuestionProperty<T, TAnswers extends Answers = Answers> = DynamicQuestionProperty< T | Promise<T>, TAnswers >; /** * Provides options for a question. * * @template T * The type of the answers. */ interface Question<T extends Answers = Answers> { /** * The type of the question. */ type?: string | undefined; /** * The key to save the answer to the answers-hash. */ name?: KeyUnion<T> | undefined; /** * The message to show to the user. */ message?: AsyncDynamicQuestionProperty<string, T> | undefined; /** * The default value of the question. */ default?: AsyncDynamicQuestionProperty<any, T> | undefined; /** * The prefix of the `message`. */ prefix?: string | undefined; /** * The suffix of the `message`. */ suffix?: string | undefined; /** * Post-processes the answer. * * @param input * The answer provided by the user. * * @param answers * The answers provided by the user. */ filter?(input: any, answers: T): any; /** * A value indicating whether the question should be prompted. */ when?: AsyncDynamicQuestionProperty<boolean, T> | undefined; /** * Validates the integrity of the answer. * * @param input * The answer provided by the user. * * @param answers * The answers provided by the user. * * @returns * Either a value indicating whether the answer is valid or a `string` which describes the error. */ validate?(input: any, answers?: T): boolean | string | Promise<boolean | string>; /** * Force to prompt the question if the answer already exists. */ askAnswered?: boolean; } /** * Represents the possible answers of each question in the prompt */ type QuestionAnswer<T extends Answers = Answers> = { [K in keyof T]: { name: K; answer: T[K] } }[keyof T]; /** * Represents a choice-item. */ interface ChoiceBase { /** * The type of the choice. */ type?: string | undefined; } /** * Provides options for a choice. */ interface ChoiceOptions extends ChoiceBase { /** * @inheritdoc */ type?: 'choice' | undefined; /** * The name of the choice to show to the user. */ name?: string | undefined; /** * The value of the choice. */ value?: any; /** * The short form of the name of the choice. */ short?: string | undefined; /** * The extra properties of the choice. */ extra?: any; } /** * Provides options for a choice of the `ListPrompt`. * * @template T * The type of the answers. */ interface ListChoiceOptions<T extends Answers = Answers> extends ChoiceOptions { /** * A value indicating whether the choice is disabled. */ disabled?: DynamicQuestionProperty<boolean | string, T> | undefined; } /** * Provides options for a choice of the `CheckboxPrompt`. * * @template T * The type of the answers. */ interface CheckboxChoiceOptions<T extends Answers = Answers> extends ListChoiceOptions<T> { /** * A value indicating whether the choice should be initially checked. */ checked?: boolean | undefined; } /** * Provides options for a choice of the `ExpandPrompt`. */ interface ExpandChoiceOptions extends ChoiceOptions { /** * The key to press for selecting the choice. */ key?: string | undefined; } /** * Represents a separator. */ interface SeparatorOptions extends ChoiceBase { /** * Gets the type of the choice. */ type: 'separator'; /** * Gets or sets the text of the separator. */ line?: string | undefined; } /** * Provides all valid choice-types for any kind of question. * * @template T * The type of the answers. */ interface BaseChoiceMap<T extends Answers = Answers> { Choice: Choice<T>; ChoiceOptions: ChoiceOptions; SeparatorOptions: SeparatorOptions; Separator: Separator; } /** * Provides all valid choice-types for the `ListQuestion`. * * @template T * The type of the answers. */ interface ListChoiceMap<T extends Answers = Answers> extends BaseChoiceMap<T> { ListChoiceOptions: ListChoiceOptions<T>; } /** * Provides all valid choice-types for the `CheckboxQuestion`. * * @template T * The type of the answers. */ interface CheckboxChoiceMap<T extends Answers = Answers> extends BaseChoiceMap<T> { CheckboxChoiceOptions: CheckboxChoiceOptions<T>; } /** * Provides all valid choice-types for the `ExpandQuestion`. * * @template T * The type of the answers. */ interface ExpandChoiceMap<T extends Answers = Answers> extends BaseChoiceMap<T> { ExpandChoiceOptions: ExpandChoiceOptions; } /** * Provides all valid choice-types. * * @template T * The type of the answers. */ interface AllChoiceMap<T extends Answers = Answers> { BaseChoiceMap: BaseChoiceMap<T>[keyof BaseChoiceMap<T>]; ListChoiceMap: ListChoiceMap<T>[keyof ListChoiceMap<T>]; CheckboxChoiceMap: CheckboxChoiceMap<T>[keyof CheckboxChoiceMap<T>]; ExpandChoiceMap: ExpandChoiceMap<T>[keyof ExpandChoiceMap<T>]; } /** * Provides valid choices for the question of the `TChoiceMap`. * * @template TAnswers * The type of the answers. * * @template TChoiceMap * The choice-types to provide. */ type DistinctChoice<TAnswers extends Answers = Answers, TChoiceMap = AllChoiceMap<TAnswers>> = | string | TChoiceMap[keyof TChoiceMap]; /** * Represents a set of choices. * * @template T * The type of the answers. */ type ChoiceCollection<T extends Answers = Answers> = Array<DistinctChoice<AllChoiceMap<T>>>; /** * Provides options for a question for the `InputPrompt`. * * @template T * The type of the answers. */ interface InputQuestionOptions<T extends Answers = Answers> extends Question<T> { /** * Transforms the value to display to the user. * * @param input * The input provided by the user. * * @param answers * The answers provided by the users. * * @param flags * Additional information about the value. * * @returns * The value to display to the user. */ transformer?(input: any, answers: T, flags: { isFinal?: boolean | undefined }): string | Promise<string>; } /** * Provides options for a question for the `InputPrompt`. * * @template T * The type of the answers. */ interface InputQuestion<T extends Answers = Answers> extends InputQuestionOptions<T> { /** * @inheritdoc */ type?: 'input' | undefined; } /** * Provides options for a question for the `NumberPrompt`. * * @template T * The type of the answers. */ interface NumberQuestionOptions<T extends Answers = Answers> extends InputQuestionOptions<T> {} /** * Provides options for a question for the `NumberPrompt`. * * @template T * The type of the answers. */ interface NumberQuestion<T extends Answers = Answers> extends NumberQuestionOptions<T> { /** * @inheritdoc */ type: 'number'; } /** * Provides options for a question for the `PasswordPrompt`. * * @template T * The type of the answers. */ interface PasswordQuestionOptions<T extends Answers = Answers> extends InputQuestionOptions<T> { /** * The character to replace the user-input. */ mask?: string | undefined; } /** * Provides options for a question for the `PasswordPrompt`. * * @template T * The type of the answers. */ interface PasswordQuestion<T extends Answers = Answers> extends PasswordQuestionOptions<T> { /** * @inheritdoc */ type: 'password'; } /** * Represents a list-based question that can loop. * * @template T * The type of the answers. * * @template TChoiceMap * The valid choices for the question. */ interface LoopableListQuestionOptionsBase<T extends Answers, TChoiceMap extends Answers> extends ListQuestionOptionsBase<T, TChoiceMap> { /** * A value indicating whether choices in a list should be looped. */ loop?: boolean | undefined; } /** * Provides options for a question for the `ListPrompt`. * * @template T * The type of the answers. */ interface ListQuestionOptions<T extends Answers = Answers> extends LoopableListQuestionOptionsBase<T, ListChoiceMap<T>> {} /** * Provides options for a question for the `ListPrompt`. * * @template T * The type of the answers. */ interface ListQuestion<T extends Answers = Answers> extends ListQuestionOptions<T> { /** * @inheritdoc */ type: 'list'; } /** * Provides options for a question for the `RawListPrompt`. * * @template T * The type of the answers. */ interface RawListQuestionOptions<T extends Answers = Answers> extends ListQuestionOptions<T> {} /** * Provides options for a question for the `RawListPrompt`. * * @template T * The type of the answers. */ interface RawListQuestion<T extends Answers = Answers> extends RawListQuestionOptions<T> { /** * @inheritdoc */ type: 'rawlist'; } /** * Provides options for a question for the `ExpandPrompt`. * * @template T * The type of the answers. */ interface ExpandQuestionOptions<T extends Answers = Answers> extends ListQuestionOptionsBase<T, ExpandChoiceMap<T>> {} /** * Provides options for a question for the `ExpandPrompt`. * * @template T * The type of the answers. */ interface ExpandQuestion<T extends Answers = Answers> extends ExpandQuestionOptions<T> { /** * @inheritdoc */ type: 'expand'; } /** * Provides options for a question for the `CheckboxPrompt`. * * @template T * The type of the answers. */ interface CheckboxQuestionOptions<T extends Answers = Answers> extends LoopableListQuestionOptionsBase<T, CheckboxChoiceMap<T>> {} /** * Provides options for a question for the `CheckboxPrompt`. * * @template T * The type of the answers. */ interface CheckboxQuestion<T extends Answers = Answers> extends CheckboxQuestionOptions<T> { /** * @inheritdoc */ type: 'checkbox'; } /** * Provides options for a question for the `ConfirmPrompt`. * * @template T * The type of the answers. */ interface ConfirmQuestionOptions<T extends Answers = Answers> extends Question<T> {} /** * Provides options for a question for the `ConfirmPrompt`. * * @template T * The type of the answers. */ interface ConfirmQuestion<T extends Answers = Answers> extends ConfirmQuestionOptions<T> { /** * @inheritdoc */ type: 'confirm'; } /** * Provides options for a question for the `EditorPrompt`. * * @template T * The type of the answers. */ interface EditorQuestionOptions<T extends Answers = Answers> extends Question<T> {} /** * Provides options for a question for the `EditorPrompt`. * * @template T * The type of the answers. */ interface EditorQuestion<T extends Answers = Answers> extends EditorQuestionOptions<T> { /** * @inheritdoc */ type: 'editor'; } /** * Provides the available question-types. * * @template T * The type of the answers. */ interface QuestionMap<T extends Answers = Answers> { /** * The `InputQuestion` type. */ input: InputQuestion<T>; /** * The `NumberQuestion` type. */ number: NumberQuestion<T>; /** * The `PasswordQuestion` type. */ password: PasswordQuestion<T>; /** * The `ListQuestion` type. */ list: ListQuestion<T>; /** * The `RawListQuestion` type. */ rawList: RawListQuestion<T>; /** * The `ExpandQuestion` type. */ expand: ExpandQuestion<T>; /** * The `CheckboxQuestion` type. */ checkbox: CheckboxQuestion<T>; /** * The `ConfirmQuestion` type. */ confirm: ConfirmQuestion<T>; /** * The `EditorQuestion` type. */ editor: EditorQuestion<T>; } /** * Represents one of the available questions. * * @template T * The type of the answers. */ type DistinctQuestion<T extends Answers = Answers> = QuestionMap<T>[keyof QuestionMap<T>]; /** * Indicates the type of a question */ type QuestionTypeName = DistinctQuestion['type']; /** * Represents a collection of questions. * * @template T * The type of the answers. */ type QuestionCollection<T extends Answers = Answers> = | DistinctQuestion<T> | ReadonlyArray<DistinctQuestion<T>> | Observable<DistinctQuestion<T>>; /** * Provides components for the prompts. */ namespace prompts { /** * Provides a base for and prompt-options. * * @template T * The type of the answers. */ type PromptOptions<T extends Question = Question> = T & { /** * The choices of the prompt. */ choices: Choices; }; /** * Represents the state of a prompt. */ type PromptState = LiteralUnion<'pending' | 'idle' | 'loading' | 'answered' | 'done'>; /** * Represents a prompt. */ interface PromptBase { /** * Gets or sets a string which represents the state of the prompt. */ status: PromptState; /** * Runs the prompt. * * @returns * The result of the prompt. */ run(): Promise<any>; } /** * Provides the functionality to initialize new prompts. */ interface PromptConstructor { /** * Initializes a new instance of a prompt. * * @param question * The question to prompt. * * @param readLine * An object for reading from the command-line. * * @param answers * The answers provided by the user. */ new (question: any, readLine: ReadlineInterface, answers: Answers): PromptBase; } /** * Provides a set of prompt-constructors. */ type PromptCollection = Record<string, PromptConstructor>; /** * Provides data about the state of a prompt. */ interface PromptStateData { /** * Either a string which describes the error of the prompt or a boolean indicating whether the prompt-value is valid. */ isValid: string | boolean; } /** * Provides data about the successful state of a prompt. * * @param T * The type of the answer. */ interface SuccessfulPromptStateData<T = any> extends PromptStateData { /** * @inheritdoc */ isValid: true; /** * The value of the prompt. */ value: T; } /** * Provides data about the failed state of a prompt. */ interface FailedPromptStateData extends PromptStateData { /** * @inheritdoc */ isValid: false | string; } /** * Provides pipes for handling events of a prompt. * * @param T * The type of the answer. */ interface PromptEventPipes<T = any> { /** * A pypeline for succesful inputs. */ success: Observable<SuccessfulPromptStateData<T>>; /** * An object representing an error. */ error: Observable<FailedPromptStateData>; } } /** * Provides components for the ui. */ namespace ui { /** * Provides options for the bottom-bar UI. */ interface BottomBarOptions extends StreamOptions { /** * The initial text to display. */ bottomBar?: string | undefined; } /** * Represents a fetched answer. * * @template T * The type of the answers. */ type FetchedQuestion<T extends Answers = Answers> = DistinctQuestion<T> & { /** * The type of the question. */ type: string; /** * The message to show to the user. */ message: string; /** * The default value of the question. */ default: any; /** * The choices of the question. */ choices: ChoiceCollection<T>; }; /** * Represents a fetched answer. */ interface FetchedAnswer { /** * The name of the answer. */ name: string; /** * The value of the answer. */ answer: any; } } } /** * Provides the functionality to prompt questions. */ declare var inquirer: inquirer.Inquirer; export = inquirer;