All files / Rindu/utils within.ts

80% Statements 8/10
100% Branches 0/0
80% Functions 4/5
80% Lines 8/10

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 28 29 3044x               4x         2x 2x 1x     2x   1x 1x                
import { TimeOutError } from "./errors";
 
export type WithinResult<T> = {
  error: Error | null;
  data: T | null;
  id?: string;
};
 
export function within<T>(
  promise: Promise<T | null>,
  duration: number,
  id?: string
): Promise<WithinResult<T>> {
  return new Promise((resolve) => {
    const timeout = setTimeout(() => {
      resolve({ error: new TimeOutError(duration), data: null, id });
    }, duration);
 
    promise
      .then((data) => {
        clearTimeout(timeout);
        resolve({ error: null, data, id });
      })
      .catch((error: Error) => {
        clearTimeout(timeout);
        resolve({ error: error, data: null, id });
      });
  });
}