Skip to content

Upgrading inquirer 11 to 12

Breaking11.1.0 → 12.11.1Security1Platform3New8Changed10Fixed13Other2

BreakingUpgrade verdict

3 platform requirement changes and a security fix.

  • TypeScript users no longer have to install Node type definitions just to use this package.
  • The packages now list the Node.js type definitions as an optional peer dependency, so you are not forced to install them.
  • The package no longer installs Node.js type definitions automatically, which makes it smaller to install unless you use TypeScript.
  • The package no longer pulls in a helper library that had a known security weakness, so installs are safer.
4 items need code or config changes

Adds @inquirer/ansi ^1.0.2.

Drops @types/mute-stream, ansi-escapes.

Installs 35 packages in all (was 42).

Security1
Replaces the external-editor dependency with @inquirer/external-editor, removing the vulnerable tmp transitive dependency.
external-editor@inquirer/external-editortmp
Platform3
Makes @types/node an optional peer dependency.
@types/node
Marks @types/node as an optional peer dependency across all packages.
@types/node
Moves @types/node to peerDependencies, greatly reducing install size for non-TypeScript users.
@types/node

Generated by DepDelta from published .d.ts files. Not mixed with prose notes.

  • removed: const inquirer: { prompt: { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: (UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { […
  • removed: default inquirer
  • removed: export { Answers } from './types'
  • removed: export { DistinctQuestion } from './types'
  • removed: export { PromptSession } from './types'
  • removed: export { Question } from './types'
  • removed: export { QuestionMap } from './types'
  • removed: function createPromptModule<Prompts extends Record<string, Record<string, unknown>> = never>(opt?: StreamOptions): { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: ((UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (PrefilledAnswers & A)[K] } : never> | CustomQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (Prefill…
  • removed: interface QuestionMap
  • removed: property QuestionMap.__dummy: { message: string }
  • removed: type Answers<Key extends string = string> = Record<Key, any>
  • removed: type AsyncGetterFunction<R, A extends Answers> = (this: { async: () => AsyncCallbackFunction<R> }, answers: Prettify<Partial<A>>) => void | R | Promise<R>
  • removed: type CustomQuestion<A extends Answers, Q extends Record<string, Record<string, any>>> = { [key in Extract<keyof Q, string>]: Readonly<QuestionWithGetters<key, Q[key], A>> }[Extract<keyof Q, string>]
  • removed: type DistinctQuestion<A extends Answers = Answers> = Prettify<UnnamedDistinctQuestion<A> & { name: Extract<keyof A, string> }>
  • removed: type PromptSession<A extends Answers = Answers, Q extends Question<A> = Question<A>> = Q[] | Record<string, Omit<Q, 'name'>> | Observable<Q> | Q
  • removed: type Question<A extends Answers = Answers, Type extends string = string> = { type: Type; name: string; message: string | AsyncGetterFunction<string, A>; default?: any; choices?: any; filter?: (answer: any, answers: Partial<A>) => any;…
  • removed: type StreamOptions = Prettify<Context & { skipTTYChecks?: boolean }>
  • removed: type UnnamedDistinctQuestion<A extends Answers = object> = QuestionWithGetters<'checkbox', Parameters<typeof checkbox>[0], A> | QuestionWithGetters<'confirm', Parameters<typeof confirm>[0], A> | QuestionWithGetters<'ed…
  • removed: const _: { set: (obj: Record<string, unknown>, path: string | undefined, value: unknown) => void; get: (obj: object, path?: string | number | symbol, defaultValue?: unk…
  • removed: constructor PromptsRunner(prompts: PromptCollection, opt?: StreamOptions)
  • removed: default class PromptsRunner<A extends Answers>
  • removed: interface LegacyPromptConstructor
  • removed: interface PromptBase
  • removed: method PromptBase.run(): Promise<any>
  • removed: method PromptsRunner.run(questions: PromptSession<A>, answers?: Partial<A>): Promise<A>
  • removed: new LegacyPromptConstructor(question: any, readLine: InquirerReadline, answers: Record<string, any>): PromptBase
  • removed: property PromptsRunner.answers: Partial<A>
  • removed: property PromptsRunner.close: () => void
  • removed: property PromptsRunner.process: Observable<any>
  • removed: type PromptCollection = Record<string, PromptFn | LegacyPromptConstructor>
  • removed: type PromptFn<Value = any, Config = any> = (config: Config, context: StreamOptions & { signal: AbortSignal }) => Promise<Value>
  • changed: const inquirer: { prompt: { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: (UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { [… → const inquirer: { prompt: PromptModuleApi<Omit<QuestionMap, '__dummy'>>; ui: { Prompt: typeof PromptsRunner }; createPromptModule: typeof createPromptModule; registerPrompt: t…
  • changed: function createPromptModule<Prompts extends Record<string, Record<string, unknown>> = never>(opt?: StreamOptions): { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: ((UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (PrefilledAnswers & A)[K] } : never> | CustomQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (Prefill… → function createPromptModule<Prompts extends Record<string, Record<string, unknown>> = never>(opt?: StreamOptions): PromptModuleApi<Prompts>
  • changed: type AsyncGetterFunction<R, A extends Answers> = (this: { async: () => AsyncCallbackFunction<R> }, answers: Prettify<Partial<A>>) => void | R | Promise<R> → type AsyncGetterFunction<R, A extends Answers> = (this: { async: () => AsyncCallbackFunction<R> }, answers: NoInfer<Prettify<Partial<A>>>) => void | R | Promise<R>
  • changed: type DistinctQuestion<A extends Answers = Answers> = Prettify<UnnamedDistinctQuestion<A> & { name: Extract<keyof A, string> }> → type DistinctQuestion<A extends Answers = Answers> = PromptModuleNamedQuestion<A>
  • changed: type PromptSession<A extends Answers = Answers, Q extends Question<A> = Question<A>> = Q[] | Record<string, Omit<Q, 'name'>> | Observable<Q> | Q → type PromptSession<A extends Answers = Answers, Q extends Question<A> = Question<A>> = readonly Q[] | Record<string, Omit<Q, 'name'>> | Observable<Q> | Q
  • changed: type Question<A extends Answers = Answers, Type extends string = string> = { type: Type; name: string; message: string | AsyncGetterFunction<string, A>; default?: any; choices?: any; filter?: (answer: any, answers: Partial<A>) => any;… → type Question<A extends Answers = Answers, Type extends string = string> = { type: Type; name: string; message: string | AsyncGetterFunction<string, A>; default?: any; choices?: any; filter?: (answer: any, answers: NoInfer<Partial<A>>…
  • changed: type UnnamedDistinctQuestion<A extends Answers = object> = QuestionWithGetters<'checkbox', Parameters<typeof checkbox>[0], A> | QuestionWithGetters<'confirm', Parameters<typeof confirm>[0], A> | QuestionWithGetters<'ed… → type UnnamedDistinctQuestion<A extends Answers = object> = QuestionWithGetters<'checkbox', Parameters<typeof checkbox>[0] & { default: unknown[] }, A> | QuestionWithGetters<'confirm', Parameters<typeof confirm>[0], A>…
  • added: type DictionaryAnswers<A extends Answers, Prefilled extends Answers> = MergeAnswerObjects<NormalizeAnswers<Answers<Extract<keyof A, string>>>, WidenAnswerLiterals<Prefilled>>
  • added: type MergedAnswers<A extends Answers, Prefilled extends Answers> = MergeAnswerObjects<NormalizeAnswers<A>, WidenAnswerLiterals<Prefilled>>
  • added: type NoInfer<T> = [T][T extends any ? 0 : never]
  • added: type NormalizeAnswers<A extends Answers> = string extends keyof A ? A : Extract<keyof A, string> extends never ? EmptyRecord : Prettify<UnionToIntersection<{ [Key in Extract<keyof A, string>]: DotPathRe…
  • added: type PromptModuleNamedQuestion<A extends Answers, Prompts extends Record<string, Record<string, any>> = never, Flat extends Answers = A> = Prettify<PromptModuleSpecificQuestion<A, Prompts> & { name: Extract<keyof Flat, string> }>
  • added: type PromptModulePublicQuestion<A extends Answers, Flat extends Answers = A> = { type: 'input' | 'confirm' | 'editor' | 'password' | 'number' | 'rawlist' | 'expand' | 'checkbox' | 'search' | 'select' | 'list'; name: Extract<keyof Flat, st…
  • added: type PromptModuleSpecificQuestion<A extends Answers, Prompts extends Record<string, Record<string, any>> = never> = UnnamedDistinctQuestion<A> | CustomQuestion<A, Prompts>
  • added: type QuestionDictionary<A extends Answers, Q> = { [name in keyof A]: Q }
  • added: type QuestionSequence<Q> = Q | readonly Q[] | Observable<Q>
  • added: const inquirer: { prompt: PromptModuleApi<Omit<QuestionMap, '__dummy'>>; ui: { Prompt: typeof PromptsRunner }; createPromptModule: typeof createPromptModule; registerPrompt: t…
  • added: default inquirer
  • added: export { Answers } from './types'
  • added: export { DistinctQuestion } from './types'
  • added: export { PromptSession } from './types'
  • added: export { Question } from './types'
  • added: export { QuestionMap } from './types'
  • added: function createPromptModule<Prompts extends Record<string, Record<string, unknown>> = never>(opt?: StreamOptions): PromptModuleApi<Prompts>
  • added: interface QuestionMap
  • added: property QuestionMap.__dummy: { message: string }
  • added: type Answers<Key extends string = string> = Record<Key, any>
  • added: type AsyncGetterFunction<R, A extends Answers> = (this: { async: () => AsyncCallbackFunction<R> }, answers: NoInfer<Prettify<Partial<A>>>) => void | R | Promise<R>
  • added: type CustomQuestion<A extends Answers, Q extends Record<string, Record<string, any>>> = { [key in Extract<keyof Q, string>]: Readonly<QuestionWithGetters<key, Q[key], A>> }[Extract<keyof Q, string>]
  • added: type DictionaryAnswers<A extends Answers, Prefilled extends Answers> = MergeAnswerObjects<NormalizeAnswers<Answers<Extract<keyof A, string>>>, WidenAnswerLiterals<Prefilled>>
  • added: type DistinctQuestion<A extends Answers = Answers> = PromptModuleNamedQuestion<A>
  • added: type MergedAnswers<A extends Answers, Prefilled extends Answers> = MergeAnswerObjects<NormalizeAnswers<A>, WidenAnswerLiterals<Prefilled>>
  • added: type NoInfer<T> = [T][T extends any ? 0 : never]
  • added: type NormalizeAnswers<A extends Answers> = string extends keyof A ? A : Extract<keyof A, string> extends never ? EmptyRecord : Prettify<UnionToIntersection<{ [Key in Extract<keyof A, string>]: DotPathRe…
  • added: type PromptModuleNamedQuestion<A extends Answers, Prompts extends Record<string, Record<string, any>> = never, Flat extends Answers = A> = Prettify<PromptModuleSpecificQuestion<A, Prompts> & { name: Extract<keyof Flat, string> }>
  • added: type PromptModulePublicQuestion<A extends Answers, Flat extends Answers = A> = { type: 'input' | 'confirm' | 'editor' | 'password' | 'number' | 'rawlist' | 'expand' | 'checkbox' | 'search' | 'select' | 'list'; name: Extract<keyof Flat, st…
  • added: type PromptModuleSpecificQuestion<A extends Answers, Prompts extends Record<string, Record<string, any>> = never> = UnnamedDistinctQuestion<A> | CustomQuestion<A, Prompts>
  • added: type PromptSession<A extends Answers = Answers, Q extends Question<A> = Question<A>> = readonly Q[] | Record<string, Omit<Q, 'name'>> | Observable<Q> | Q
  • added: type Question<A extends Answers = Answers, Type extends string = string> = { type: Type; name: string; message: string | AsyncGetterFunction<string, A>; default?: any; choices?: any; filter?: (answer: any, answers: NoInfer<Partial<A>>…
  • added: type QuestionDictionary<A extends Answers, Q> = { [name in keyof A]: Q }
  • added: type QuestionSequence<Q> = Q | readonly Q[] | Observable<Q>
  • added: type StreamOptions = Prettify<Context & { skipTTYChecks?: boolean }>
  • added: type UnnamedDistinctQuestion<A extends Answers = object> = QuestionWithGetters<'checkbox', Parameters<typeof checkbox>[0] & { default: unknown[] }, A> | QuestionWithGetters<'confirm', Parameters<typeof confirm>[0], A>…
  • removed: const inquirer: { prompt: { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: (UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { […
  • removed: default inquirer
  • removed: export { Answers } from './types'
  • removed: export { DistinctQuestion } from './types'
  • removed: export { PromptSession } from './types'
  • removed: export { Question } from './types'
  • removed: export { QuestionMap } from './types'
  • removed: function createPromptModule<Prompts extends Record<string, Record<string, unknown>> = never>(opt?: StreamOptions): { <const A extends Answers, PrefilledAnswers extends Answers = object>(questions: ((UnnamedDistinctQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (PrefilledAnswers & A)[K] } : never> | CustomQuestion<PrefilledAnswers & A extends infer T ? { [K in keyof T]: (Prefill…
  • removed: interface QuestionMap
  • removed: property QuestionMap.__dummy: { message: string }
  • removed: type Answers<Key extends string = string> = Record<Key, any>
  • removed: type AsyncGetterFunction<R, A extends Answers> = (this: { async: () => AsyncCallbackFunction<R> }, answers: Prettify<Partial<A>>) => void | R | Promise<R>
  • removed: type CustomQuestion<A extends Answers, Q extends Record<string, Record<string, any>>> = { [key in Extract<keyof Q, string>]: Readonly<QuestionWithGetters<key, Q[key], A>> }[Extract<keyof Q, string>]
  • removed: type DistinctQuestion<A extends Answers = Answers> = Prettify<UnnamedDistinctQuestion<A> & { name: Extract<keyof A, string> }>
  • removed: type PromptSession<A extends Answers = Answers, Q extends Question<A> = Question<A>> = Q[] | Record<string, Omit<Q, 'name'>> | Observable<Q> | Q
  • removed: type Question<A extends Answers = Answers, Type extends string = string> = { type: Type; name: string; message: string | AsyncGetterFunction<string, A>; default?: any; choices?: any; filter?: (answer: any, answers: Partial<A>) => any;…
  • removed: type StreamOptions = Prettify<Context & { skipTTYChecks?: boolean }>
  • removed: type UnnamedDistinctQuestion<A extends Answers = object> = QuestionWithGetters<'checkbox', Parameters<typeof checkbox>[0], A> | QuestionWithGetters<'confirm', Parameters<typeof confirm>[0], A> | QuestionWithGetters<'ed…
  • removed: const _: { set: (obj: Record<string, unknown>, path: string | undefined, value: unknown) => void; get: (obj: object, path?: string | number | symbol, defaultValue?: unk…
  • removed: constructor PromptsRunner(prompts: PromptCollection, opt?: StreamOptions)
  • removed: default class PromptsRunner<A extends Answers>
  • removed: interface LegacyPromptConstructor
  • removed: interface PromptBase
  • removed: method PromptBase.run(): Promise<any>
  • removed: method PromptsRunner.run(questions: PromptSession<A>, answers?: Partial<A>): Promise<A>
  • removed: new LegacyPromptConstructor(question: any, readLine: InquirerReadline, answers: Record<string, any>): PromptBase
  • removed: property PromptsRunner.answers: Partial<A>
  • removed: property PromptsRunner.close: () => void
  • removed: property PromptsRunner.process: Observable<any>
  • removed: type PromptCollection = Record<string, PromptFn | LegacyPromptConstructor>
  • removed: type PromptFn<Value = any, Config = any> = (config: Config, context: StreamOptions & { signal: AbortSignal }) => Promise<Value>
  • added: const _: { set: (obj: Record<string, unknown>, path: string | undefined, value: unknown) => void; get: (obj: object, path?: string | number | symbol, defaultValue?: unk…
  • added: constructor PromptsRunner(prompts: PromptCollection, opt?: StreamOptions)
  • added: default class PromptsRunner<A extends Answers>
  • added: interface LegacyPromptConstructor
  • added: interface PromptBase
  • added: method PromptBase.run(): Promise<any>
  • added: method PromptsRunner.run(questions: PromptSession<A>, answers?: Partial<A>): Promise<A>
  • added: new LegacyPromptConstructor(question: any, readLine: InquirerReadline, answers: Record<string, any>): PromptBase
  • added: property PromptsRunner.answers: Partial<A>
  • added: property PromptsRunner.close: () => void
  • added: property PromptsRunner.process: Observable<any>
  • added: type PromptCollection = Record<string, PromptFn | LegacyPromptConstructor>
  • added: type PromptFn<Value = any, Config = any> = (config: Config, context: StreamOptions & { signal: AbortSignal }) => Promise<Value>