--- /dev/null
+import { EventEmitter } from "events";
+
+interface BasePromptOptions {
+ name: string | (() => string)
+ type: string | (() => string)
+ message: string | (() => string) | (() => Promise<string>)
+ initial?: any
+ required?: boolean
+ format?(value: string): string | Promise<string>
+ result?(value: string): string | Promise<string>
+ skip?: ((state: object) => boolean | Promise<boolean>) | boolean
+ validate?(value: string): boolean | Promise<boolean> | string | Promise<string>
+ onSubmit?(name: string, value: any, prompt: Enquirer.Prompt): boolean | Promise<boolean>
+ onCancel?(name: string, value: any, prompt: Enquirer.Prompt): boolean | Promise<boolean>
+ stdin?: NodeJS.ReadStream
+ stdout?: NodeJS.WriteStream
+}
+
+interface Choice {
+ name: string
+ message?: string
+ value?: string
+ hint?: string
+ disabled?: boolean | string
+}
+
+interface ArrayPromptOptions extends BasePromptOptions {
+ type:
+ | 'autocomplete'
+ | 'editable'
+ | 'form'
+ | 'multiselect'
+ | 'select'
+ | 'survey'
+ | 'list'
+ | 'scale'
+ choices: string[] | Choice[]
+ maxChoices?: number
+ muliple?: boolean
+ initial?: number
+ delay?: number
+ separator?: boolean
+ sort?: boolean
+ linebreak?: boolean
+ edgeLength?: number
+ align?: 'left' | 'right'
+ scroll?: boolean
+}
+
+interface BooleanPromptOptions extends BasePromptOptions {
+ type: 'confirm'
+ initial?: boolean
+}
+
+interface StringPromptOptions extends BasePromptOptions {
+ type: 'input' | 'invisible' | 'list' | 'password' | 'text'
+ initial?: string
+ multiline?: boolean
+}
+
+interface NumberPromptOptions extends BasePromptOptions {
+ type: 'numeral'
+ min?: number
+ max?: number
+ delay?: number
+ float?: boolean
+ round?: boolean
+ major?: number
+ minor?: number
+ initial?: number
+}
+
+interface SnippetPromptOptions extends BasePromptOptions {
+ type: 'snippet'
+ newline?: string
+ template?: string
+}
+
+interface SortPromptOptions extends BasePromptOptions {
+ type: 'sort'
+ hint?: string
+ drag?: boolean
+ numbered?: boolean
+}
+
+type PromptOptions =
+ | BasePromptOptions
+ | ArrayPromptOptions
+ | BooleanPromptOptions
+ | StringPromptOptions
+ | NumberPromptOptions
+ | SnippetPromptOptions
+ | SortPromptOptions
+
+declare class BasePrompt extends EventEmitter {
+ constructor(options?: PromptOptions);
+
+ render(): void;
+
+ run(): Promise<any>;
+ }
+
+declare class Enquirer<T = object> extends EventEmitter {
+ constructor(options?: object, answers?: T);
+
+ /**
+ * Register a custom prompt type.
+ *
+ * @param type
+ * @param fn `Prompt` class, or a function that returns a `Prompt` class.
+ */
+ register(type: string, fn: typeof BasePrompt | (() => typeof BasePrompt)): this;
+
+ /**
+ * Register a custom prompt type.
+ */
+ register(type: { [key: string]: typeof BasePrompt | (() => typeof BasePrompt) }): this;
+
+ /**
+ * Prompt function that takes a "question" object or array of question objects,
+ * and returns an object with responses from the user.
+ *
+ * @param questions Options objects for one or more prompts to run.
+ */
+ prompt(
+ questions:
+ | PromptOptions
+ | ((this: Enquirer) => PromptOptions)
+ | (PromptOptions | ((this: Enquirer) => PromptOptions))[]
+ ): Promise<T>;
+
+ /**
+ * Use an enquirer plugin.
+ *
+ * @param plugin Plugin function that takes an instance of Enquirer.
+ */
+ use(plugin: (this: this, enquirer: this) => void): this;
+}
+
+declare namespace Enquirer {
+ function prompt<T = object>(
+ questions:
+ | PromptOptions
+ | ((this: Enquirer) => PromptOptions)
+ | (PromptOptions | ((this: Enquirer) => PromptOptions))[]
+ ): Promise<T>;
+
+ class Prompt extends BasePrompt {}
+}
+
+export = Enquirer;