Skip to content

Commit 1c61e1a

Browse files
authored
feat(@clack/prompts): new method spinner.message(msg: string) (#112)
2 parents 9d9828b + 4adaad9 commit 1c61e1a

File tree

4 files changed

+37
-3
lines changed

4 files changed

+37
-3
lines changed

.changeset/loud-bugs-move.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clack/prompts': minor
3+
---
4+
5+
added a new method called `spinner.message(msg: string)`

examples/basic/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"picocolors": "^1.0.0"
1010
},
1111
"scripts": {
12-
"start": "jiti ./index.ts"
12+
"start": "jiti ./index.ts",
13+
"spinner": "jiti ./spinner.ts"
1314
},
1415
"devDependencies": {
1516
"jiti": "^1.17.0"

examples/basic/spinner.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import * as p from '@clack/prompts';
2+
3+
p.intro('spinner start...');
4+
5+
const spin = p.spinner();
6+
const total = 10000;
7+
let progress = 0;
8+
spin.start();
9+
10+
new Promise((resolve) => {
11+
const timer = setInterval(() => {
12+
progress = Math.min(total, progress + 100);
13+
if (progress >= total) {
14+
clearInterval(timer);
15+
resolve(true);
16+
}
17+
spin.message(`Loading packages [${progress}/${total}]`); // <===
18+
}, 100);
19+
}).then(() => {
20+
spin.stop(`Done`);
21+
p.outro('spinner stop...');
22+
});

packages/prompts/src/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -640,9 +640,11 @@ const frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];
640640
export const spinner = () => {
641641
let unblock: () => void;
642642
let loop: NodeJS.Timer;
643+
let message = '';
643644
const delay = unicode ? 80 : 120;
644645
return {
645-
start(message = '') {
646+
start(msg = '') {
647+
this.message(msg);
646648
message = message.replace(/\.?\.?\.$/, '');
647649
unblock = block();
648650
process.stdout.write(`${color.gray(S_BAR)}\n${color.magenta('○')} ${message}\n`);
@@ -660,7 +662,11 @@ export const spinner = () => {
660662
dot = dot === frames.length ? 0 : dot + 0.125;
661663
}, delay);
662664
},
663-
stop(message = '') {
665+
message(msg = '') {
666+
message = msg ?? message;
667+
},
668+
stop(msg = '') {
669+
this.message(msg);
664670
process.stdout.write(cursor.move(-999, -2));
665671
process.stdout.write(erase.down(2));
666672
clearInterval(loop);

0 commit comments

Comments
 (0)