export const isNil = (val) => val === null || val === undefined; const waitForImage = (img:HTMLImageElement): Promise => new Promise((resolve) => img.addEventListener('load', () => resolve(img), {once: true})); export const waitForMedia = async (media:T):Promise => { if (media instanceof Image && !media.complete) { await waitForImage(media); } return media; } export const setImmediate = any>(fn:T):Promise> => Promise.resolve().then(fn); export const merge = (...objects) => { return objects.reduce((acc, nxt) => Object.assign(acc, nxt), {}); }