diff --git a/types/ora/index.d.ts b/types/ora/index.d.ts index a3099f6cd9..08a1946c5d 100644 --- a/types/ora/index.d.ts +++ b/types/ora/index.d.ts @@ -1,137 +1,275 @@ -// Type definitions for ora 1.3 +// Type definitions for ora 3.0 // Project: https://github.com/sindresorhus/ora // Definitions by: Basarat Ali Syed // Christian Rackerseder // BendingBender // Aleh Zasypkin // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.1 /// -type SpinnerName = - 'dots' - | 'dots2' - | 'dots3' - | 'dots4' - | 'dots5' - | 'dots6' - | 'dots7' - | 'dots8' - | 'dots9' - | 'dots10' - | 'dots11' - | 'dots12' - | 'line' - | 'line2' - | 'pipe' - | 'simpleDots' - | 'simpleDotsScrolling' - | 'star' - | 'star2' - | 'flip' - | 'hamburger' - | 'growVertical' - | 'growHorizontal' - | 'balloon' - | 'balloon2' - | 'noise' - | 'bounce' - | 'boxBounce' - | 'boxBounce2' - | 'triangle' - | 'arc' - | 'circle' - | 'squareCorners' - | 'circleQuarters' - | 'circleHalves' - | 'squish' - | 'toggle' - | 'toggle2' - | 'toggle3' - | 'toggle4' - | 'toggle5' - | 'toggle6' - | 'toggle7' - | 'toggle8' - | 'toggle9' - | 'toggle10' - | 'toggle11' - | 'toggle12' - | 'toggle13' - | 'arrow' - | 'arrow2' - | 'arrow3' - | 'bouncingBar' - | 'bouncingBall' - | 'smiley' - | 'monkey' - | 'hearts' - | 'clock' - | 'earth' - | 'moon' - | 'runner' - | 'pong' - | 'shark' - | 'dqpb'; - -type Color = 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'; - -interface Options { - text?: string; - spinner?: SpinnerName | Spinner; - color?: Color; - interval?: number; - stream?: NodeJS.WritableStream; - enabled?: boolean; - hideCursor?: boolean; -} - -interface PersistOptions { - symbol?: string; - text?: string; -} - -interface Spinner { - interval?: number; - frames: string[]; -} - -declare class Ora { - start(text?: string): Ora; - - stop(): Ora; - - succeed(text?: string): Ora; - - fail(text?: string): Ora; - - warn(text?: string): Ora; - - info(text?: string): Ora; - - stopAndPersist(options?: PersistOptions | string): Ora; - - clear(): Ora; - - render(): Ora; - - frame(): Ora; - - text: string; - - color: Color; - - frameIndex: number; -} - -interface oraFactory { - (options?: Options | string): Ora; - - new (options?: Options | string): Ora; - - promise(action: PromiseLike, options?: Options | string): Ora; -} - -declare const ora: oraFactory; - export = ora; + +/** + * Elegant terminal spinner. + * + * @param options If a string is provided, it is treated as a shortcut for `options.text`. + */ +declare function ora(options?: ora.Options | string): ora.Ora; + +declare namespace ora { + /** + * Starts a spinner for a promise. The spinner is stopped with `.succeed()` if the promise fulfills + * or with `.fail()` if it rejects. + * + * @param action + * @param options If a string is provided, it is treated as a shortcut for `options.text`. + * @returns The spinner instance. + */ + function promise(action: PromiseLike, options?: Options | string): Ora; + + interface Ora { + /** + * A boolean of whether the instance is currently spinning. + */ + readonly isSpinning: boolean; + + /** + * Change the text. + */ + text: string; + + /** + * Change the spinner color. + */ + color: Color; + + /** + * Start the spinner. + * + * @param text Set the current text. + * @returns The spinner instance. + */ + start(text?: string): Ora; + + /** + * Stop and clear the spinner. + * + * @returns The spinner instance. + */ + stop(): Ora; + + /** + * 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): Ora; + + /** + * 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): Ora; + + /** + * 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): Ora; + + /** + * 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): Ora; + + /** + * Stop the spinner and change the symbol or text. + * + * @param options + * @returns The spinner instance. + */ + stopAndPersist(options?: PersistOptions): Ora; + + /** + * Clear the spinner. + * @returns The spinner instance. + */ + clear(): Ora; + + /** + * Manually render a new frame. + * @returns The spinner instance. + */ + render(): Ora; + + /** + * Get a new frame. + * @returns The spinner instance. + */ + frame(): Ora; + } + + interface Options { + /** + * Text to display after the spinner. + */ + text?: string; + /** + * Name of one of the provided spinners. See `example.js` in this repo if you want to test out different spinners. + * On Windows, it will always use the line spinner as the Windows command-line doesn't have proper Unicode support. + * + * Or an object like: + * + * @example + * { + * interval: 80, // optional + * frames: ['-', '+', '-'] + * } + * + * @default 'dots' + */ + spinner?: SpinnerName | Spinner; + /** + * Color of the spinner. + * @default 'cyan' + */ + color?: Color; + /** + * Set to `false` to stop Ora from hiding the cursor. + * @default true + */ + hideCursor?: boolean; + /** + * 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 + */ + interval?: number; + /** + * Stream to write the output. + * + * You could for example set this to `process.stdout` instead. + * @default process.stderr + */ + 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. + */ + isEnabled?: boolean; + } + + interface PersistOptions { + /** + * Symbol to replace the spinner with. + * @default ' ' + */ + symbol?: string; + /** + * Text to be persisted. + * @default Current text + */ + text?: string; + } + + interface Spinner { + interval?: number; + frames: string[]; + } + + type SpinnerName = + | 'dots' + | 'dots2' + | 'dots3' + | 'dots4' + | 'dots5' + | 'dots6' + | 'dots7' + | 'dots8' + | 'dots9' + | 'dots10' + | 'dots11' + | 'dots12' + | 'line' + | 'line2' + | 'pipe' + | 'simpleDots' + | 'simpleDotsScrolling' + | 'star' + | 'star2' + | 'flip' + | 'hamburger' + | 'growVertical' + | 'growHorizontal' + | 'balloon' + | 'balloon2' + | 'noise' + | 'bounce' + | 'boxBounce' + | 'boxBounce2' + | 'triangle' + | 'arc' + | 'circle' + | 'squareCorners' + | 'circleQuarters' + | 'circleHalves' + | 'squish' + | 'toggle' + | 'toggle2' + | 'toggle3' + | 'toggle4' + | 'toggle5' + | 'toggle6' + | 'toggle7' + | 'toggle8' + | 'toggle9' + | 'toggle10' + | 'toggle11' + | 'toggle12' + | 'toggle13' + | 'arrow' + | 'arrow2' + | 'arrow3' + | 'bouncingBar' + | 'bouncingBall' + | 'smiley' + | 'monkey' + | 'hearts' + | 'clock' + | 'earth' + | 'moon' + | 'runner' + | 'pong' + | 'shark' + | 'dqpb' + | 'weather' + | 'christmas' + | 'grenade' + | 'point' + | 'layer'; + + type Color = + | 'black' + | 'red' + | 'green' + | 'yellow' + | 'blue' + | 'magenta' + | 'cyan' + | 'white' + | 'gray'; +} diff --git a/types/ora/ora-tests.ts b/types/ora/ora-tests.ts index 56a0d498c3..2c1b8ee82d 100644 --- a/types/ora/ora-tests.ts +++ b/types/ora/ora-tests.ts @@ -1,49 +1,46 @@ import { PassThrough } from 'stream'; -import Ora = require('ora'); +import ora = require('ora'); -const spinner = Ora('Loading unicorns').start(); +const spinner = ora('Loading unicorns'); +ora({ text: 'Loading unicorns' }); +ora({ spinner: 'squish' }); +ora({ spinner: { frames: ['-', '+', '-'] } }); +ora({ spinner: { interval: 80, frames: ['-', '+', '-'] } }); +ora({ color: 'cyan' }); +ora({ color: 'foo' }); // $ExpectError +ora({ hideCursor: true }); +ora({ interval: 80 }); +ora({ stream: new PassThrough() }); +ora({ isEnabled: true }); -const spinnerNothing = Ora().start(); - -const spinnerNew = new Ora({ - text: 'Loading unicorns', - spinner: 'squish' -}); - -const spinnerNew2 = new Ora({ - stream: new PassThrough(), - text: 'foo', - color: 'cyan', - enabled: true -}); +spinner.color = 'yellow'; +spinner.text = 'Loading rainbows'; +spinner.isSpinning; // $ExpectType boolean +spinner.isSpinning = true; // $ExpectError spinner.start(); spinner.start('Test text'); - -setTimeout(() => { - spinner.color = 'yellow'; - spinner.text = 'Loading rainbows'; -}, 1000); - -setTimeout(() => { - spinner.succeed(); -}, 2000); - +spinner.stop(); spinner.succeed(); spinner.succeed('fooed'); spinner.fail(); spinner.fail('failed to foo'); spinner.warn(); +spinner.warn('warn foo'); spinner.info(); +spinner.info('info foo'); spinner.stopAndPersist(); -spinner.stopAndPersist('@'); -spinner.stopAndPersist({text: 'all done'}); -spinner.stopAndPersist({symbol: '@', text: 'all done'}); +spinner.stopAndPersist({ text: 'all done' }); +spinner.stopAndPersist({ symbol: '@', text: 'all done' }); +spinner.clear(); +spinner.render(); +spinner.frame(); const resolves = Promise.resolve(1); -Ora.promise(resolves, { +ora.promise(resolves, 'foo'); +ora.promise(resolves, { stream: new PassThrough(), text: 'foo', color: 'blue', - enabled: true + isEnabled: true, }); diff --git a/types/ora/tsconfig.json b/types/ora/tsconfig.json index d283fa111a..302dc253cc 100644 --- a/types/ora/tsconfig.json +++ b/types/ora/tsconfig.json @@ -6,7 +6,7 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ diff --git a/types/ora/v1/index.d.ts b/types/ora/v1/index.d.ts new file mode 100644 index 0000000000..a3099f6cd9 --- /dev/null +++ b/types/ora/v1/index.d.ts @@ -0,0 +1,137 @@ +// Type definitions for ora 1.3 +// Project: https://github.com/sindresorhus/ora +// Definitions by: Basarat Ali Syed +// Christian Rackerseder +// BendingBender +// Aleh Zasypkin +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +type SpinnerName = + 'dots' + | 'dots2' + | 'dots3' + | 'dots4' + | 'dots5' + | 'dots6' + | 'dots7' + | 'dots8' + | 'dots9' + | 'dots10' + | 'dots11' + | 'dots12' + | 'line' + | 'line2' + | 'pipe' + | 'simpleDots' + | 'simpleDotsScrolling' + | 'star' + | 'star2' + | 'flip' + | 'hamburger' + | 'growVertical' + | 'growHorizontal' + | 'balloon' + | 'balloon2' + | 'noise' + | 'bounce' + | 'boxBounce' + | 'boxBounce2' + | 'triangle' + | 'arc' + | 'circle' + | 'squareCorners' + | 'circleQuarters' + | 'circleHalves' + | 'squish' + | 'toggle' + | 'toggle2' + | 'toggle3' + | 'toggle4' + | 'toggle5' + | 'toggle6' + | 'toggle7' + | 'toggle8' + | 'toggle9' + | 'toggle10' + | 'toggle11' + | 'toggle12' + | 'toggle13' + | 'arrow' + | 'arrow2' + | 'arrow3' + | 'bouncingBar' + | 'bouncingBall' + | 'smiley' + | 'monkey' + | 'hearts' + | 'clock' + | 'earth' + | 'moon' + | 'runner' + | 'pong' + | 'shark' + | 'dqpb'; + +type Color = 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'; + +interface Options { + text?: string; + spinner?: SpinnerName | Spinner; + color?: Color; + interval?: number; + stream?: NodeJS.WritableStream; + enabled?: boolean; + hideCursor?: boolean; +} + +interface PersistOptions { + symbol?: string; + text?: string; +} + +interface Spinner { + interval?: number; + frames: string[]; +} + +declare class Ora { + start(text?: string): Ora; + + stop(): Ora; + + succeed(text?: string): Ora; + + fail(text?: string): Ora; + + warn(text?: string): Ora; + + info(text?: string): Ora; + + stopAndPersist(options?: PersistOptions | string): Ora; + + clear(): Ora; + + render(): Ora; + + frame(): Ora; + + text: string; + + color: Color; + + frameIndex: number; +} + +interface oraFactory { + (options?: Options | string): Ora; + + new (options?: Options | string): Ora; + + promise(action: PromiseLike, options?: Options | string): Ora; +} + +declare const ora: oraFactory; + +export = ora; diff --git a/types/ora/v1/ora-tests.ts b/types/ora/v1/ora-tests.ts new file mode 100644 index 0000000000..56a0d498c3 --- /dev/null +++ b/types/ora/v1/ora-tests.ts @@ -0,0 +1,49 @@ +import { PassThrough } from 'stream'; +import Ora = require('ora'); + +const spinner = Ora('Loading unicorns').start(); + +const spinnerNothing = Ora().start(); + +const spinnerNew = new Ora({ + text: 'Loading unicorns', + spinner: 'squish' +}); + +const spinnerNew2 = new Ora({ + stream: new PassThrough(), + text: 'foo', + color: 'cyan', + enabled: true +}); + +spinner.start(); +spinner.start('Test text'); + +setTimeout(() => { + spinner.color = 'yellow'; + spinner.text = 'Loading rainbows'; +}, 1000); + +setTimeout(() => { + spinner.succeed(); +}, 2000); + +spinner.succeed(); +spinner.succeed('fooed'); +spinner.fail(); +spinner.fail('failed to foo'); +spinner.warn(); +spinner.info(); +spinner.stopAndPersist(); +spinner.stopAndPersist('@'); +spinner.stopAndPersist({text: 'all done'}); +spinner.stopAndPersist({symbol: '@', text: 'all done'}); + +const resolves = Promise.resolve(1); +Ora.promise(resolves, { + stream: new PassThrough(), + text: 'foo', + color: 'blue', + enabled: true +}); diff --git a/types/ora/v1/tsconfig.json b/types/ora/v1/tsconfig.json new file mode 100644 index 0000000000..ad30053dff --- /dev/null +++ b/types/ora/v1/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "paths": { + "ora": [ + "ora/v1" + ] + }, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true + }, + "files": [ + "index.d.ts", + "ora-tests.ts" + ] +} diff --git a/types/ora/v1/tslint.json b/types/ora/v1/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/ora/v1/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }