prompt.interface.d.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /// <reference types="node" />
  2. import * as Enquirer from 'enquirer';
  3. import { WriteStream } from 'fs';
  4. import { Writable } from 'stream';
  5. import { PromptError } from '../interfaces/listr-error.interface';
  6. /** Returns all the prompt options depending on the type selected. */
  7. export declare type PromptOptions<T extends boolean = false> = Unionize<{
  8. [K in PromptTypes]-?: T extends true ? {
  9. type: K;
  10. } & PromptOptionsType<K> & {
  11. name: string | (() => string);
  12. } : {
  13. type: K;
  14. } & PromptOptionsType<K>;
  15. }> | ({
  16. type: string;
  17. } & T extends true ? PromptOptionsType<string> & {
  18. name: string | (() => string);
  19. } : PromptOptionsType<string>);
  20. export declare type Unionize<T extends Record<PropertyKey, unknown>> = {
  21. [P in keyof T]: T[P];
  22. }[keyof T];
  23. interface BasePromptOptions {
  24. message: string | (() => string) | (() => Promise<string>);
  25. initial?: boolean | number | number[] | string | (() => string) | (() => Promise<string>);
  26. required?: boolean;
  27. stdin?: NodeJS.ReadStream;
  28. stdout?: NodeJS.WriteStream;
  29. header?: string;
  30. footer?: string;
  31. skip?(value: any): boolean | Promise<boolean>;
  32. format?(value: any): any | Promise<any>;
  33. result?(value: any): any | Promise<any>;
  34. validate?(value: any, state: any): boolean | Promise<boolean> | string | Promise<string> | Promise<string | boolean>;
  35. onSubmit?(name: any, value: any, prompt: Enquirer.Prompt): boolean | Promise<boolean>;
  36. onCancel?(name: any, value: any, prompt: Enquirer.Prompt): boolean | Promise<boolean>;
  37. }
  38. interface BasePromptOptionsWithName extends BasePromptOptions {
  39. name: string | (() => string);
  40. }
  41. interface ArrayPromptOptions extends BasePromptOptions {
  42. choices: string[] | BasePromptOptionsWithName[];
  43. maxChoices?: number;
  44. multiple?: boolean;
  45. initial?: number | number[];
  46. delay?: number;
  47. separator?: boolean;
  48. sort?: boolean;
  49. linebreak?: boolean;
  50. edgeLength?: number;
  51. align?: 'left' | 'right';
  52. scroll?: boolean;
  53. }
  54. interface BooleanPromptOptions extends BasePromptOptions {
  55. initial?: boolean | (() => string) | (() => Promise<string>);
  56. }
  57. interface StringPromptOptions extends BasePromptOptions {
  58. initial?: string;
  59. multiline?: boolean;
  60. }
  61. interface ScalePromptOptions extends ArrayPromptOptions {
  62. scale: StringPromptOptions[];
  63. margin?: [number, number, number, number];
  64. }
  65. interface NumberPromptOptions extends BasePromptOptions {
  66. min?: number;
  67. max?: number;
  68. delay?: number;
  69. float?: boolean;
  70. round?: boolean;
  71. major?: number;
  72. minor?: number;
  73. initial?: number;
  74. }
  75. interface SnippetPromptOptions extends BasePromptOptions {
  76. newline?: string;
  77. fields: Partial<BasePromptOptionsWithName>[];
  78. template: string;
  79. }
  80. interface SortPromptOptions extends BasePromptOptions {
  81. hint?: string;
  82. drag?: boolean;
  83. numbered?: boolean;
  84. }
  85. interface SurveyPromptOptions extends ArrayPromptOptions {
  86. scale: BasePromptOptionsWithName[];
  87. margin: [number, number, number, number];
  88. }
  89. interface QuizPromptOptions extends ArrayPromptOptions {
  90. correctChoice: number;
  91. }
  92. interface TogglePromptOptions extends BasePromptOptions {
  93. enabled?: string;
  94. disabled?: string;
  95. }
  96. export declare type PromptTypes = 'AutoComplete' | 'BasicAuth' | 'Confirm' | 'Editable' | 'Form' | 'Input' | 'Invisible' | 'List' | 'MultiSelect' | 'Numeral' | 'Password' | 'Quiz' | 'Scale' | 'Select' | 'Snippet' | 'Sort' | 'Survey' | 'Text' | 'Toggle';
  97. export declare type PromptOptionsType<T> = T extends keyof PromptOptionsMap ? PromptOptionsMap[T] : T extends string ? BasePromptOptions & Record<PropertyKey, unknown> : any;
  98. export declare class PromptOptionsMap implements Record<PromptTypes, Record<PropertyKey, any>> {
  99. AutoComplete: ArrayPromptOptions;
  100. BasicAuth: StringPromptOptions;
  101. Confirm: BooleanPromptOptions;
  102. Editable: ArrayPromptOptions;
  103. Form: ArrayPromptOptions;
  104. Input: StringPromptOptions;
  105. Invisible: StringPromptOptions;
  106. List: ArrayPromptOptions;
  107. MultiSelect: ArrayPromptOptions;
  108. Numeral: NumberPromptOptions;
  109. Password: StringPromptOptions;
  110. Quiz: QuizPromptOptions;
  111. Scale: ScalePromptOptions;
  112. Select: ArrayPromptOptions;
  113. Snippet: SnippetPromptOptions;
  114. Sort: SortPromptOptions;
  115. Survey: SurveyPromptOptions;
  116. Text: StringPromptOptions;
  117. Toggle: TogglePromptOptions;
  118. }
  119. export interface PromptSettings {
  120. error?: boolean;
  121. cancelCallback?: (settings?: PromptSettings) => string | Error | PromptError | void;
  122. stdout?: WriteStream | Writable;
  123. enquirer?: Enquirer;
  124. }
  125. export interface PromptInstance extends Omit<BasePromptOptions, 'onCancel' | 'onSubmit'> {
  126. submit(): void;
  127. cancel(err?: string): void;
  128. }
  129. export {};