Skip to content

Commit da0438f

Browse files
committed
feat(cli): handle spinning states
1 parent 3b5c232 commit da0438f

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

lib/cli.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ function head(text, length = 11) {
2626
}
2727

2828
export default class CLI {
29-
constructor(stream) {
29+
constructor(stream, options = {}) {
30+
const spinnerOptions = options.spinner ?? {};
3031
this.stream = stream || process.stderr;
31-
this.spinner = ora({ stream: this.stream });
32+
this.spinner = ora({ stream: this.stream, ...spinnerOptions });
3233
this.SPINNER_STATUS = SPINNER_STATUS;
3334
this.QUESTION_TYPE = QUESTION_TYPE;
3435
this.figureIndent = ' ';
@@ -67,7 +68,17 @@ export default class CLI {
6768
'defaultAnswer must be provided for non-confirmation prompts');
6869
}
6970

71+
const { isSpinning, text: spinningMessage } = this.spinner;
72+
73+
console.log({ isSpinning, spinningMessage })
74+
if (isSpinning) {
75+
this.spinner.stop();
76+
}
77+
7078
if (this.assumeYes) {
79+
if (isSpinning) {
80+
this.spinner.start(spinningMessage);
81+
}
7182
return defaultAnswer;
7283
}
7384

@@ -78,6 +89,10 @@ export default class CLI {
7889
default: defaultAnswer
7990
}]);
8091

92+
if (isSpinning) {
93+
this.spinner.start(spinningMessage);
94+
}
95+
8196
return answer;
8297
}
8398

test/unit/cli.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,27 @@ describe('cli', () => {
165165
});
166166
});
167167

168+
describe('prompt cares about spinner', () => {
169+
beforeEach(() => {
170+
stream = new LogStream();
171+
cli = new CLI(stream, {
172+
spinner: { isEnabled: true }
173+
});
174+
cli.setAssumeYes();
175+
});
176+
177+
it('pauses when prompt a question', async () => {
178+
cli.startSpinner('foo');
179+
assert.deepEqual(cli.spinner.text, 'foo');
180+
assert.deepEqual(cli.spinner.isSpinning, true);
181+
await cli.prompt('So you think darkness is your ally?', {
182+
defaultAnswer: 'Yes, I was born in it. Molded by it.',
183+
questionType: cli.QUESTION_TYPE.INPUT
184+
});
185+
assert.strictEqual(cli.spinner.isSpinning, true);
186+
});
187+
});
188+
168189
describe('prompt assume yes', () => {
169190
beforeEach(() => {
170191
stream = new LogStream();

0 commit comments

Comments
 (0)