diff --git a/.changeset/short-squids-battle.md b/.changeset/short-squids-battle.md new file mode 100644 index 00000000..c9ccf73d --- /dev/null +++ b/.changeset/short-squids-battle.md @@ -0,0 +1,5 @@ +--- +"@clack/prompts": patch +--- + +Handle `stop` calls on spinners which have not yet been started. diff --git a/packages/prompts/src/spinner.ts b/packages/prompts/src/spinner.ts index 2a9cfd63..7b4c8cec 100644 --- a/packages/prompts/src/spinner.ts +++ b/packages/prompts/src/spinner.ts @@ -159,6 +159,7 @@ export const spinner = ({ }; const stop = (msg = '', code = 0): void => { + if (!isSpinnerActive) return; isSpinnerActive = false; clearInterval(loop); clearPrevMessage(); diff --git a/packages/prompts/test/spinner.test.ts b/packages/prompts/test/spinner.test.ts index b3ba9f06..3db54cde 100644 --- a/packages/prompts/test/spinner.test.ts +++ b/packages/prompts/test/spinner.test.ts @@ -163,6 +163,12 @@ describe.each(['true', 'false'])('spinner (isCI = %s)', (isCI) => { expect(output.buffer).toMatchSnapshot(); }); + + test('does not throw if called before start', () => { + const result = prompts.spinner({ output }); + + expect(() => result.stop()).not.toThrow(); + }); }); describe('message', () => {