Upgrading inquirer 11 to 12
Breaking11.1.0 → 12.11.1Security1Platform3New8Changed10Fixed13Other2
SecurityReplaces the external-editor dependency with @inquirer/external-editor, removing the vulnerable tmp transitive dependency.Advisory ↗
BreakingUpgrade verdict
3 platform requirement changes and a security fix.
In plain terms
- 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.
Must act 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).
What you must change
Security1
Replaces the external-editor dependency with @inquirer/external-editor, removing the vulnerable tmp transitive dependency.
external-editor@inquirer/external-editortmpPlatform3
Makes
@types/node an optional peer dependency.@types/nodeMarks
@types/node as an optional peer dependency across all packages.@types/nodeMoves @types/node to peerDependencies, greatly reducing install size for non-TypeScript users.
@types/nodeAPI changes
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>