Skip to content

Commit

Permalink
Require Node.js 6, add TypeScript definition (#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
BendingBender authored and sindresorhus committed Feb 28, 2019
1 parent 5aa9158 commit 143863e
Show file tree
Hide file tree
Showing 9 changed files with 122 additions and 13 deletions.
3 changes: 1 addition & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
* text=auto
*.js text eol=lf
* text=auto eol=lf
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
language: node_js
node_js:
- '10'
- '8'
- '6'
- '4'
5 changes: 3 additions & 2 deletions example-all.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
'use strict';
/* eslint-disable unicorn/no-process-exit */
const readline = require('readline');
const logUpdate = require('log-update');
const cliSpinners = require('.');
Expand All @@ -11,7 +10,7 @@ let next;
let scrutator;

const showNextFrame = () => {
const frames = cliSpinners[spinners[spinner]].frames;
const {frames} = cliSpinners[spinners[spinner]];
logUpdate(frames[frame++ % frames.length] + ' ' + spinners[spinner]);
};

Expand All @@ -26,6 +25,7 @@ const showNextSpinner = () => {
next = setInterval(showNextFrame, s.interval);
scrutator = setTimeout(showNextSpinner, Math.max(s.interval * s.frames.length, 1000));
} else {
// eslint-disable-next-line unicorn/no-process-exit
process.exit(0);
}
};
Expand All @@ -36,6 +36,7 @@ process.stdin.setRawMode(true);

process.stdin.on('keypress', (str, key) => {
if (key.ctrl && key.name === 'c') {
// eslint-disable-next-line unicorn/no-process-exit
process.exit(130);
}

Expand Down
2 changes: 1 addition & 1 deletion example.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const spinner = cliSpinners[process.argv[2] || 'dots'];
let i = 0;

setInterval(() => {
const frames = spinner.frames;
const {frames} = spinner;
logUpdate(frames[i = ++i % frames.length] + ' Unicorns');
}, spinner.interval);

Expand Down
99 changes: 99 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
export 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';

export interface Spinner {
/**
* Recommended interval.
*/
readonly interval: number;

/**
* A list of frames to show for the spinner.
*/
readonly frames: string[];
}

/**
* 60+ spinners for use in the terminal.
*
* @example
*
* const cliSpinners = require('cli-spinners');
* console.log(cliSpinners.dots);
*
* // {
* // interval: 80,
* // frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
* // }
*/
declare const cliSpinners: {readonly [spinnerName in SpinnerName]: Spinner};

export default cliSpinners;
6 changes: 5 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
'use strict';
module.exports = require('./spinners.json');

const spinners = Object.assign({}, require('./spinners.json'));

module.exports = spinners;
module.exports.default = spinners;
4 changes: 4 additions & 0 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import {expectType} from 'tsd-check';
import cliSpinners, {Spinner} from '.';

expectType<Spinner>(cliSpinners.dots);
12 changes: 7 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@
"node": ">=4"
},
"scripts": {
"test": "xo && ava",
"test": "xo && ava && tsd-check",
"asciicast": "asciinema rec --command='node example-all.js' --title='cli-spinner' --quiet"
},
"files": [
"index.js",
"spinners.json"
"index.js",
"index.d.ts",
"spinners.json"
],
"keywords": [
"cli",
Expand All @@ -38,8 +39,9 @@
"json"
],
"devDependencies": {
"ava": "*",
"ava": "^1.2.1",
"log-update": "^2.1.0",
"xo": "*"
"tsd-check": "^0.3.0",
"xo": "^0.24.0"
}
}
2 changes: 1 addition & 1 deletion test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import test from 'ava';
import m from '.';

test(t => {
test('api', t => {
t.is(typeof m, 'object');
t.is(m.dots.interval, 80);
t.true(Array.isArray(m.dots.frames));
Expand Down

0 comments on commit 143863e

Please sign in to comment.