import { checkbox, confirm, editor, expand, input, number, password, rawlist, search, select } from '@inquirer/prompts'; import type { Context, DistributiveMerge, Prettify } from '@inquirer/type'; import { Observable } from 'rxjs'; export type Answers = Record; export type NoInfer = [T][T extends any ? 0 : never]; type UnionToIntersection = (U extends unknown ? (arg: U) => void : never) extends (arg: infer I) => void ? I : never; type EmptyRecord = Record; type DotPathRecord = Path extends `${infer Head}.${infer Rest}` ? Head extends '' ? EmptyRecord : { [K in Head]: DotPathRecord; } : Path extends '' ? EmptyRecord : { [K in Path]: Value; }; export type NormalizeAnswers = string extends keyof A ? A : Extract extends never ? EmptyRecord : Prettify]: DotPathRecord; }[Extract]>>; type Mutable = { -readonly [K in keyof T]: T[K]; }; type WidenAnswerLiterals = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T extends bigint ? bigint : T extends symbol ? symbol : T extends ReadonlyArray ? ReadonlyArray> : T extends Array ? Array> : T extends Record ? { [K in keyof Mutable]: Mutable[K] extends infer V ? V extends undefined ? never : WidenAnswerLiterals : never; } : T; type MergeAnswerObjects = Prettify & Override>; export type AsyncGetterFunction = (this: { async: () => (...args: [error: null | undefined, value: T] | [error: Error, value: undefined]) => void; }, answers: NoInfer>>) => void | T | Promise; type MaybeAsyncValue = T | AsyncGetterFunction; /** * Allows to inject a custom question type into inquirer module. * * @example * ```ts * declare module 'inquirer' { * interface QuestionMap { * custom: { message: string }; * } * } * ``` * * Globally defined question types are not correct. */ export interface QuestionMap { __dummy: { message: string; }; } type KeyValueOrAsyncGetterFunction = T extends Record ? MaybeAsyncValue : never; export type Question = { type: Type; name: string; message: MaybeAsyncValue; default?: any; choices?: any; validate?: (value: any, answers: NoInfer>) => boolean | string | Promise; filter?: (answer: any, answers: NoInfer>) => any; askAnswered?: boolean; when?: MaybeAsyncValue; }; type QuestionWithGetters, A extends Answers> = DistributiveMerge; filter?(input: any, answers: NoInfer): any; message: KeyValueOrAsyncGetterFunction; default?: KeyValueOrAsyncGetterFunction; choices?: KeyValueOrAsyncGetterFunction; }>; export type UnnamedDistinctQuestion = QuestionWithGetters<'checkbox', Parameters[0] & { default: unknown[]; }, A> | QuestionWithGetters<'confirm', Parameters[0], A> | QuestionWithGetters<'editor', Parameters[0], A> | QuestionWithGetters<'expand', Parameters[0], A> | QuestionWithGetters<'input', Parameters[0], A> | QuestionWithGetters<'number', Parameters[0], A> | QuestionWithGetters<'password', Parameters[0], A> | QuestionWithGetters<'rawlist', Parameters[0], A> | QuestionWithGetters<'search', Parameters[0], A> | QuestionWithGetters<'select', Parameters[0], A>; export type CustomQuestion>> = { [key in Extract]: Readonly>; }[Extract]; export type PromptModuleSpecificQuestion> = never> = UnnamedDistinctQuestion | CustomQuestion; export type PromptModuleNamedQuestion> = never, Flat extends Answers = A> = Prettify & { name: Extract; }>; export type DistinctQuestion = PromptModuleNamedQuestion; export type PromptSession = Question> = readonly Q[] | Record> | Observable | Q; export type QuestionSequence = Q | readonly Q[] | Observable; export type MergedAnswers = MergeAnswerObjects, WidenAnswerLiterals>; export type QuestionDictionary = { [name in keyof A]: Q; }; export type DictionaryAnswers = MergeAnswerObjects>>, WidenAnswerLiterals>; export type PromptModulePublicQuestion = { type: 'input' | 'confirm' | 'editor' | 'password' | 'number' | 'rawlist' | 'expand' | 'checkbox' | 'search' | 'select'; name: Extract; message: MaybeAsyncValue; default?: unknown; choices?: unknown; filter?: (input: any, answers: NoInfer>) => any; askAnswered?: boolean; when?: MaybeAsyncValue; } & Record; export type StreamOptions = Prettify; export {};