diff --git a/packages/cli-kit/src/public/node/system.test.ts b/packages/cli-kit/src/public/node/system.test.ts index ed12516ba40..eceeff91564 100644 --- a/packages/cli-kit/src/public/node/system.test.ts +++ b/packages/cli-kit/src/public/node/system.test.ts @@ -393,3 +393,19 @@ describe('readStdinString', () => { await expect(got).rejects.toThrow('Stdin input exceeded the maximum allowed size.') }) }) + +describe('sleep', () => { + test('waits for the given number of seconds', async () => { + // Given + vi.useFakeTimers() + const seconds = 0.1 + + // When + const sleepPromise = system.sleep(seconds) + await vi.advanceTimersByTimeAsync(seconds * 1000) + await sleepPromise + + // Then + vi.useRealTimers() + }) +}) diff --git a/packages/cli-kit/src/public/node/system.ts b/packages/cli-kit/src/public/node/system.ts index 3f449f8ff34..aa997f8c5d8 100644 --- a/packages/cli-kit/src/public/node/system.ts +++ b/packages/cli-kit/src/public/node/system.ts @@ -13,6 +13,7 @@ import which from 'which' import {delimiter} from 'pathe' import {fstatSync} from 'fs' +import {setTimeout} from 'timers/promises' import type {Writable, Readable} from 'stream' /** @@ -319,9 +320,7 @@ function checkCommandSafety(command: string, _options: {cwd: string}): void { * @returns A Promise resolving after the number of seconds. */ export async function sleep(seconds: number): Promise { - return new Promise((resolve) => { - setTimeout(resolve, 1000 * seconds) - }) + await setTimeout(1000 * seconds) } /**