import { AnyVoidFn, PromiseFn, IDictionary } from './common'; import { ArgumentNullError } from './ArgumentNullError'; export const sleep = (time: number) => new Promise(resolve => setTimeout(resolve, time)); const startTimer = (fn: AnyVoidFn, time: number) => { const id = setTimeout(fn, time); return () => clearTimeout(id); }; export const timeout = (fn: PromiseFn, time: number): PromiseFn => (a) => { return new Promise((resolve, reject) => { const stopTimer = startTimer(() => { reject(new Error(`Timeout has exceeded ${time}`)); }, time); fn(a).then(value => { resolve(value); stopTimer(); }).catch(reject); }); }; export const validateForNull = (props: IDictionary) => { for (const key of Object.keys(props)) { const value = props[key]; if (!value || Number.isNaN(value)) { throw new ArgumentNullError(key, value); } } };