listr.interface.d.ts 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /// <reference types="node" />
  2. import Enquirer from 'enquirer';
  3. import { Observable, Subject } from 'rxjs';
  4. import { Readable } from 'stream';
  5. import { stateConstants } from './state.constants';
  6. import { Task } from '../lib/task';
  7. import { DefaultRenderer } from '../renderer/default.renderer';
  8. import { SilentRenderer } from '../renderer/silent.renderer';
  9. import { VerboseRenderer } from '../renderer/verbose.renderer';
  10. import { Listr } from '../index';
  11. import { PromptOptions } from '../utils/prompt.interface';
  12. export declare type ListrContext = any;
  13. export declare type ListrDefaultRendererValue = 'default';
  14. export declare type ListrDefaultRenderer = typeof DefaultRenderer;
  15. export declare type ListrFallbackRendererValue = 'verbose';
  16. export declare type ListrFallbackRenderer = typeof VerboseRenderer;
  17. export declare class ListrClass<Ctx = ListrContext, Renderer extends ListrRendererValue = ListrDefaultRendererValue, FallbackRenderer extends ListrRendererValue = ListrFallbackRendererValue> {
  18. tasks: Task<Ctx, ListrGetRendererClassFromValue<Renderer>>[];
  19. constructor(task?: readonly ListrTask<Ctx, ListrGetRendererClassFromValue<Renderer>>[], options?: ListrBaseClassOptions<Ctx, Renderer, FallbackRenderer>);
  20. run(ctx?: Ctx): Promise<Ctx>;
  21. add(tasks: ListrTask<Ctx, ListrGetRendererClassFromValue<Renderer>> | readonly ListrTask<Ctx, ListrGetRendererClassFromValue<Renderer>>[]): void;
  22. }
  23. export interface ListrTaskObject<Ctx, Renderer extends ListrRendererFactory> extends Observable<ListrEvent> {
  24. id: string;
  25. title?: string;
  26. cleanTitle?: string;
  27. output?: string;
  28. task: (ctx: Ctx, task: ListrTaskWrapper<Ctx, Renderer>) => void | ListrTaskResult<Ctx>;
  29. skip: boolean | string | ((ctx: Ctx) => boolean | string | Promise<boolean> | Promise<string>);
  30. subtasks: ListrTaskObject<Ctx, any>[];
  31. state: string;
  32. message: {
  33. duration?: number;
  34. error?: string;
  35. skip?: string;
  36. };
  37. check: (ctx: Ctx) => void;
  38. run: (ctx: Ctx, wrapper: ListrTaskWrapper<Ctx, Renderer>) => Promise<void>;
  39. options: ListrOptions;
  40. rendererOptions: ListrGetRendererOptions<Renderer>;
  41. rendererTaskOptions: ListrGetRendererTaskOptions<Renderer>;
  42. renderHook$: Subject<void>;
  43. hasSubtasks(): boolean;
  44. isPending(): boolean;
  45. isSkipped(): boolean;
  46. isCompleted(): boolean;
  47. isEnabled(): boolean;
  48. isPrompt(): boolean;
  49. hasFailed(): boolean;
  50. hasTitle(): boolean;
  51. }
  52. export interface ListrTask<Ctx = ListrContext, Renderer extends ListrRendererFactory = any> {
  53. title?: string;
  54. task: (ctx: Ctx, task: ListrTaskWrapper<Ctx, Renderer>) => void | ListrTaskResult<Ctx>;
  55. skip?: boolean | string | ((ctx: Ctx) => boolean | string | Promise<boolean> | Promise<string>);
  56. enabled?: boolean | ((ctx: Ctx) => boolean | Promise<boolean>);
  57. options?: ListrGetRendererTaskOptions<Renderer>;
  58. }
  59. export interface ListrTaskWrapper<Ctx, Renderer extends ListrRendererFactory> {
  60. title: string;
  61. output: string;
  62. newListr(task: ListrTask<Ctx, Renderer> | ListrTask<Ctx, Renderer>[] | ((parent: this) => ListrTask<Ctx, Renderer> | ListrTask<Ctx, Renderer>[]), options?: ListrSubClassOptions<Ctx, Renderer>): Listr<Ctx, any, any>;
  63. report(error: Error): void;
  64. skip(message: string): void;
  65. run(ctx?: Ctx, task?: ListrTaskWrapper<Ctx, Renderer>): Promise<void>;
  66. prompt<T = any>(options: PromptOptions | PromptOptions<true>[]): Promise<T>;
  67. stdout(): NodeJS.WritableStream;
  68. }
  69. export declare type ListrTaskResult<Ctx> = string | Promise<any> | ListrClass<Ctx, ListrRendererFactory, any> | Readable | NodeJS.ReadableStream | Observable<any>;
  70. export declare type ListrBaseClassOptions<Ctx = ListrContext, Renderer extends ListrRendererValue = ListrDefaultRendererValue, FallbackRenderer extends ListrRendererValue = ListrFallbackRendererValue> = ListrOptions<Ctx> & ListrDefaultRendererOptions<Renderer> & ListrDefaultNonTTYRendererOptions<FallbackRenderer>;
  71. export declare type ListrSubClassOptions<Ctx = ListrContext, Renderer extends ListrRendererValue = ListrDefaultRendererValue> = ListrOptions<Ctx> & Omit<ListrDefaultRendererOptions<Renderer>, 'renderer'>;
  72. export interface ListrOptions<Ctx = ListrContext> {
  73. concurrent?: boolean | number;
  74. exitOnError?: boolean;
  75. ctx?: Ctx;
  76. registerSignalListeners?: boolean;
  77. rendererFallback?: boolean | (() => boolean);
  78. rendererSilent?: boolean | (() => boolean);
  79. disableColor?: boolean;
  80. injectWrapper?: {
  81. enquirer?: Enquirer<object>;
  82. };
  83. }
  84. export declare type CreateClass<T> = new (...args: any[]) => T;
  85. export declare type ListrGetRendererClassFromValue<T extends ListrRendererValue> = T extends 'default' ? typeof DefaultRenderer : T extends 'verbose' ? typeof VerboseRenderer : T extends 'silent' ? typeof SilentRenderer : T extends ListrRendererFactory ? T : never;
  86. export declare type ListrGetRendererValueFromClass<T extends ListrRendererFactory> = T extends DefaultRenderer ? 'default' : T extends VerboseRenderer ? 'verbose' : T extends SilentRenderer ? 'silent' : T extends ListrRendererFactory ? T : never;
  87. export declare type ListrGetRendererOptions<T extends ListrRendererValue> = T extends 'default' ? typeof DefaultRenderer['rendererOptions'] : T extends 'verbose' ? typeof VerboseRenderer['rendererOptions'] : T extends 'silent' ? typeof SilentRenderer['rendererOptions'] : T extends ListrRendererFactory ? T['rendererOptions'] : never;
  88. export declare type ListrGetRendererTaskOptions<T extends ListrRendererValue> = T extends 'default' ? typeof DefaultRenderer['rendererTaskOptions'] : T extends 'verbose' ? typeof VerboseRenderer['rendererTaskOptions'] : T extends 'silent' ? typeof SilentRenderer['rendererTaskOptions'] : T extends ListrRendererFactory ? T['rendererTaskOptions'] : never;
  89. export interface ListrDefaultRendererOptions<T extends ListrRendererValue> {
  90. renderer?: T;
  91. rendererOptions?: ListrGetRendererOptions<T>;
  92. }
  93. export interface ListrDefaultNonTTYRendererOptions<T extends ListrRendererValue> {
  94. nonTTYRenderer?: T;
  95. nonTTYRendererOptions?: ListrGetRendererOptions<T>;
  96. }
  97. export declare type ListrRendererOptions<Renderer extends ListrRendererValue, FallbackRenderer extends ListrRendererValue> = ListrDefaultRendererOptions<Renderer> & ListrDefaultNonTTYRendererOptions<FallbackRenderer>;
  98. export declare class ListrRenderer {
  99. static rendererOptions: Record<string, any>;
  100. static rendererTaskOptions: Record<string, any>;
  101. static nonTTY: boolean;
  102. constructor(tasks: readonly ListrTaskObject<any, ListrRendererFactory>[], options: typeof ListrRenderer.rendererOptions);
  103. render(): void;
  104. end(err?: Error): void;
  105. }
  106. export declare class ListrBaseRenderer implements ListrRenderer {
  107. static rendererOptions: Record<string, any>;
  108. static rendererTaskOptions: Record<string, any>;
  109. static nonTTY: boolean;
  110. tasks: ListrTaskObject<any, typeof ListrBaseRenderer>[];
  111. options: typeof ListrBaseRenderer.rendererOptions;
  112. constructor(tasks: ListrTaskObject<any, typeof ListrBaseRenderer>[], options: typeof ListrBaseRenderer.rendererOptions);
  113. render(): void;
  114. end(err?: Error): void;
  115. }
  116. export interface ListrRendererFactory {
  117. rendererOptions: Record<string, any>;
  118. rendererTaskOptions: Record<string, any>;
  119. nonTTY: boolean;
  120. new (tasks: readonly ListrTaskObject<any, ListrRendererFactory>[], options: typeof ListrRenderer.rendererOptions, renderHook$?: Subject<void>): ListrRenderer;
  121. }
  122. export declare type ListrRendererValue = 'silent' | 'default' | 'verbose' | ListrRendererFactory;
  123. export declare type ListrEvent = {
  124. type: Exclude<ListrEventTypes, 'MESSAGE'>;
  125. data?: string | boolean;
  126. } | {
  127. type: 'MESSAGE';
  128. data: ListrTaskObject<any, any>['message'];
  129. };
  130. export declare class ListrError extends Error {
  131. message: string;
  132. errors?: Error[];
  133. context?: any;
  134. constructor(message: string, errors?: Error[], context?: any);
  135. }
  136. export declare class PromptError extends Error {
  137. constructor(message: any);
  138. }
  139. export declare type ListrEventTypes = 'TITLE' | 'STATE' | 'ENABLED' | 'SUBTASK' | 'DATA' | 'MESSAGE';
  140. export declare type StateConstants = stateConstants;