UNPKG

@lcdp/offline-plugin

Version:
42 lines (35 loc) 1.26 kB
"use strict"; (function () { var waitUntil = ExtendableEvent.prototype.waitUntil; var respondWith = FetchEvent.prototype.respondWith; var promisesMap = new WeakMap(); ExtendableEvent.prototype.waitUntil = function (promise) { var extendableEvent = this; var promises = promisesMap.get(extendableEvent); if (promises) { promises.push(Promise.resolve(promise)); return; } promises = [Promise.resolve(promise)]; promisesMap.set(extendableEvent, promises); // call original method return waitUntil.call(extendableEvent, Promise.resolve().then(function processPromises() { var len = promises.length; // wait for all to settle return Promise.all(promises.map(function (p) { return p["catch"](function () {}); })).then(function () { // have new items been added? If so, wait again if (promises.length != len) return processPromises(); // we're done! promisesMap["delete"](extendableEvent); // reject if one of the promises rejected return Promise.all(promises); }); })); }; FetchEvent.prototype.respondWith = function (promise) { this.waitUntil(promise); return respondWith.call(this, promise); }; })();