UNPKG

@vtbag/utensil-drawer

Version:

Pull out just what you need to craft seamless transitions. The Utensil Drawer holds reusable functions to help you build websites with view transitions. It is a bit sparse right now, but like the one in your kitchen, it is bound to fill up over time.

30 lines (29 loc) 1.01 kB
export function createPromiseSubstitute() { const saved = []; let delegate; const save = (kind, resolve, reject, callback) => { if (delegate) { return kind === 'then' ? delegate.then(resolve, reject) : delegate.finally(callback); } const promise = createPromiseSubstitute(); saved.push({ kind, resolve, reject, callback, promise }); return promise; }; return { then(resolve, reject) { return save('then', resolve, reject); }, catch(reject) { return save('then', undefined, reject); }, finally(callback) { return save('finally', undefined, undefined, callback); }, switch(to) { if (delegate) throw new Error('Already switched to another promise'); saved.forEach((e) => e.promise.switch(e.kind === 'then' ? to.then(e.resolve, e.reject) : to.finally(e.callback))); delegate = to; }, }; }