From ba2b84f6ebce3502cd8bc5d80d67a2097d690030 Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Sun, 23 Dec 2018 23:51:55 +0100 Subject: [PATCH 1/2] [ora] move v1 types to sub-dir --- types/ora/{ => v1}/index.d.ts | 0 types/ora/{ => v1}/ora-tests.ts | 0 types/ora/{ => v1}/tsconfig.json | 11 ++++++++--- types/ora/{ => v1}/tslint.json | 0 4 files changed, 8 insertions(+), 3 deletions(-) rename types/ora/{ => v1}/index.d.ts (100%) rename types/ora/{ => v1}/ora-tests.ts (100%) rename types/ora/{ => v1}/tsconfig.json (71%) rename types/ora/{ => v1}/tslint.json (100%) diff --git a/types/ora/index.d.ts b/types/ora/v1/index.d.ts similarity index 100% rename from types/ora/index.d.ts rename to types/ora/v1/index.d.ts diff --git a/types/ora/ora-tests.ts b/types/ora/v1/ora-tests.ts similarity index 100% rename from types/ora/ora-tests.ts rename to types/ora/v1/ora-tests.ts diff --git a/types/ora/tsconfig.json b/types/ora/v1/tsconfig.json similarity index 71% rename from types/ora/tsconfig.json rename to types/ora/v1/tsconfig.json index d283fa111a..ad30053dff 100644 --- a/types/ora/tsconfig.json +++ b/types/ora/v1/tsconfig.json @@ -6,12 +6,17 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "strictFunctionTypes": true, - "baseUrl": "../", + "baseUrl": "../../", "typeRoots": [ - "../" + "../../" ], + "paths": { + "ora": [ + "ora/v1" + ] + }, "types": [], "noEmit": true, "forceConsistentCasingInFileNames": true, diff --git a/types/ora/tslint.json b/types/ora/v1/tslint.json similarity index 100% rename from types/ora/tslint.json rename to types/ora/v1/tslint.json From e72661d0fff2b1467076696f170bde0445838c72 Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Mon, 24 Dec 2018 00:46:12 +0100 Subject: [PATCH 2/2] [ora] Add types for v3 --- types/ora/index.d.ts | 275 ++++++++++++++++++++++++++++++++++++++++ types/ora/ora-tests.ts | 46 +++++++ types/ora/tsconfig.json | 24 ++++ types/ora/tslint.json | 1 + 4 files changed, 346 insertions(+) create mode 100644 types/ora/index.d.ts create mode 100644 types/ora/ora-tests.ts create mode 100644 types/ora/tsconfig.json create mode 100644 types/ora/tslint.json diff --git a/types/ora/index.d.ts b/types/ora/index.d.ts new file mode 100644 index 0000000000..08a1946c5d --- /dev/null +++ b/types/ora/index.d.ts @@ -0,0 +1,275 @@ +// 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 + +/// + +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 new file mode 100644 index 0000000000..2c1b8ee82d --- /dev/null +++ b/types/ora/ora-tests.ts @@ -0,0 +1,46 @@ +import { PassThrough } from 'stream'; +import ora = require('ora'); + +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 }); + +spinner.color = 'yellow'; +spinner.text = 'Loading rainbows'; +spinner.isSpinning; // $ExpectType boolean +spinner.isSpinning = true; // $ExpectError + +spinner.start(); +spinner.start('Test text'); +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({ text: 'all done' }); +spinner.stopAndPersist({ symbol: '@', text: 'all done' }); +spinner.clear(); +spinner.render(); +spinner.frame(); + +const resolves = Promise.resolve(1); +ora.promise(resolves, 'foo'); +ora.promise(resolves, { + stream: new PassThrough(), + text: 'foo', + color: 'blue', + isEnabled: true, +}); diff --git a/types/ora/tsconfig.json b/types/ora/tsconfig.json new file mode 100644 index 0000000000..302dc253cc --- /dev/null +++ b/types/ora/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true + }, + "files": [ + "index.d.ts", + "ora-tests.ts" + ] +} diff --git a/types/ora/tslint.json b/types/ora/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/ora/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }