| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- import {type SpinnerName} from 'cli-spinners';
- export type Spinner = {
- readonly interval?: number;
- readonly frames: string[];
- };
- export type Color =
- | 'black'
- | 'red'
- | 'green'
- | 'yellow'
- | 'blue'
- | 'magenta'
- | 'cyan'
- | 'white'
- | 'gray';
- export type PrefixTextGenerator = () => string;
- export type SuffixTextGenerator = () => string;
- export type Options = {
- /**
- The text to display next to the spinner.
- */
- readonly text?: string;
- /**
- Text or a function that returns text to display before the spinner. No prefix text will be displayed if set to an empty string.
- */
- readonly prefixText?: string | PrefixTextGenerator;
- /**
- Text or a function that returns text to display after the spinner text. No suffix text will be displayed if set to an empty string.
- */
- readonly suffixText?: string | SuffixTextGenerator;
- /**
- The name of one of the provided spinners. See [`example.js`](https://github.com/BendingBender/ora/blob/main/example.js) in this repo if you want to test out different spinners. On Windows (expect for Windows Terminal), it will always use the line spinner as the Windows command-line doesn't have proper Unicode support.
- @default 'dots'
- Or an object like:
- @example
- ```
- {
- frames: ['-', '+', '-'],
- interval: 80 // Optional
- }
- ```
- */
- readonly spinner?: SpinnerName | Spinner;
- /**
- The color of the spinner.
- @default 'cyan'
- */
- readonly color?: Color | boolean;
- /**
- Set to `false` to stop Ora from hiding the cursor.
- @default true
- */
- readonly hideCursor?: boolean;
- /**
- Indent the spinner with the given number of spaces.
- @default 0
- */
- readonly indent?: number;
- /**
- Interval between each frame.
- Spinners provide their own recommended interval, so you don't really need to specify this.
- Default: Provided by the spinner or `100`.
- */
- readonly interval?: number;
- /**
- Stream to write the output.
- You could for example set this to `process.stdout` instead.
- @default process.stderr
- */
- readonly stream?: NodeJS.WritableStream;
- /**
- Force enable/disable the spinner. If not specified, the spinner will be enabled if the `stream` is being run inside a TTY context (not spawned or piped) and/or not in a CI environment.
- Note that `{isEnabled: false}` doesn't mean it won't output anything. It just means it won't output the spinner, colors, and other ansi escape codes. It will still log text.
- */
- readonly isEnabled?: boolean;
- /**
- Disable the spinner and all log text. All output is suppressed and `isEnabled` will be considered `false`.
- @default false
- */
- readonly isSilent?: boolean;
- /**
- Discard stdin input (except Ctrl+C) while running if it's TTY. This prevents the spinner from twitching on input, outputting broken lines on `Enter` key presses, and prevents buffering of input while the spinner is running.
- This has no effect on Windows as there's no good way to implement discarding stdin properly there.
- @default true
- */
- readonly discardStdin?: boolean;
- };
- export type PersistOptions = {
- /**
- Symbol to replace the spinner with.
- @default ' '
- */
- readonly symbol?: string;
- /**
- Text to be persisted after the symbol.
- Default: Current `text`.
- */
- readonly text?: string;
- /**
- Text or a function that returns text to be persisted before the symbol. No prefix text will be displayed if set to an empty string.
- Default: Current `prefixText`.
- */
- readonly prefixText?: string | PrefixTextGenerator;
- /**
- Text or a function that returns text to be persisted after the text after the symbol. No suffix text will be displayed if set to an empty string.
- Default: Current `suffixText`.
- */
- readonly suffixText?: string | SuffixTextGenerator;
- };
- export type PromiseOptions<T> = {
- /**
- The new text of the spinner when the promise is resolved.
- Keeps the existing text if `undefined`.
- */
- successText?: string | ((result: T) => string) | undefined;
- /**
- The new text of the spinner when the promise is rejected.
- Keeps the existing text if `undefined`.
- */
- failText?: string | ((error: Error) => string) | undefined;
- } & Options;
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
- export interface Ora {
- /**
- Change the text after the spinner.
- */
- text: string;
- /**
- Change the text or function that returns text before the spinner.
- No prefix text will be displayed if set to an empty string.
- */
- prefixText: string;
- /**
- Change the text or function that returns text after the spinner text.
- No suffix text will be displayed if set to an empty string.
- */
- suffixText: string;
- /**
- Change the spinner color.
- */
- color: Color | boolean;
- /**
- Change the spinner indent.
- */
- indent: number;
- /**
- Get the spinner.
- */
- get spinner(): Spinner;
- /**
- Set the spinner.
- */
- set spinner(spinner: SpinnerName | Spinner);
- /**
- A boolean indicating whether the instance is currently spinning.
- */
- get isSpinning(): boolean;
- /**
- The interval between each frame.
- The interval is decided by the chosen spinner.
- */
- get interval(): number;
- /**
- Start the spinner.
- @param text - Set the current text.
- @returns The spinner instance.
- */
- start(text?: string): this;
- /**
- Stop and clear the spinner.
- @returns The spinner instance.
- */
- stop(): this;
- /**
- Stop the spinner, change it to a green `✔` and persist the current text, or `text` if provided.
- @param text - Will persist text if provided.
- @returns The spinner instance.
- */
- succeed(text?: string): this;
- /**
- Stop the spinner, change it to a red `✖` and persist the current text, or `text` if provided.
- @param text - Will persist text if provided.
- @returns The spinner instance.
- */
- fail(text?: string): this;
- /**
- Stop the spinner, change it to a yellow `⚠` and persist the current text, or `text` if provided.
- @param text - Will persist text if provided.
- @returns The spinner instance.
- */
- warn(text?: string): this;
- /**
- Stop the spinner, change it to a blue `ℹ` and persist the current text, or `text` if provided.
- @param text - Will persist text if provided.
- @returns The spinner instance.
- */
- info(text?: string): this;
- /**
- Stop the spinner and change the symbol or text.
- @returns The spinner instance.
- */
- stopAndPersist(options?: PersistOptions): this;
- /**
- Clear the spinner.
- @returns The spinner instance.
- */
- clear(): this;
- /**
- Manually render a new frame.
- @returns The spinner instance.
- */
- render(): this;
- /**
- Get a new frame.
- @returns The spinner instance text.
- */
- frame(): string;
- }
- /**
- Elegant terminal spinner.
- @param options - If a string is provided, it is treated as a shortcut for `options.text`.
- @example
- ```
- import ora from 'ora';
- const spinner = ora('Loading unicorns').start();
- setTimeout(() => {
- spinner.color = 'yellow';
- spinner.text = 'Loading rainbows';
- }, 1000);
- ```
- */
- export default function ora(options?: string | Options): Ora;
- /**
- Starts a spinner for a promise or promise-returning function. The spinner is stopped with `.succeed()` if the promise fulfills or with `.fail()` if it rejects.
- @param action - The promise to start the spinner for or a promise-returning function.
- @param options - If a string is provided, it is treated as a shortcut for `options.text`.
- @returns The given promise.
- @example
- ```
- import {oraPromise} from 'ora';
- await oraPromise(somePromise);
- ```
- */
- export function oraPromise<T>(
- action: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),
- options?: string | PromiseOptions<T>
- ): Promise<T>;
- export {default as spinners} from 'cli-spinners';
|