All files / cli/src utils.ts

100% Statements 3/3
100% Branches 0/0
100% Functions 3/3
100% Lines 3/3

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                      1x     1x   1x                    
/**
 * Wrap a promise with a timeout rejection.
 *
 * @param promise - The promise to wrap with a timeout.
 * @param timeout - How many ms to wait before rejecting.
 * @returns A wrapped promise which rejects after timeout miliseconds.
 */
export async function withTimeout<Return>(
  promise: Promise<Return>,
  timeout: number,
): Promise<Return> {
  return Promise.race([
    promise,
    new Promise((_resolve, reject) =>
      setTimeout(
        () =>
          reject(
            new Error(`promise timed out after ${timeout}ms`, {
              cause: promise,
            }),
          ),
        timeout,
      ),
    ),
  ]) as Promise<Return>;
}