UNPKG

@inventivetalent/loading-cache

Version:

loading cache based on ben-manes/caffeine and node-cache

93 lines 2.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompletablePromise = void 0; exports.asArray = asArray; exports.keyCompletablePromiseMapToPromiseContainingMap = keyCompletablePromiseMapToPromiseContainingMap; exports.keyPromiseMapToPromiseContainingMap = keyPromiseMapToPromiseContainingMap; function asArray(iterable) { if (iterable instanceof Array) { return iterable; } return Array.from(iterable); } function keyCompletablePromiseMapToPromiseContainingMap(keyToPromiseMap) { return new Promise(resolve => { const keys = keyToPromiseMap.keys(); const values = asArray(keyToPromiseMap.values()); Promise.all(values.map(p => p.promise)).then(resolvedValues => { const valueMap = new Map(); let i = 0; // The promises *should* be in the original order of the map for (let key of keys) { let promise = resolvedValues[i++]; valueMap.set(key, promise); } resolve(valueMap); }); }); } function keyPromiseMapToPromiseContainingMap(keyToPromiseMap) { return new Promise(resolve => { const keys = keyToPromiseMap.keys(); const values = keyToPromiseMap.values(); Promise.all(values).then(resolvedValues => { const valueMap = new Map(); let i = 0; // The promises *should* be in the original order of the map for (let key of keys) { let promise = resolvedValues[i++]; valueMap.set(key, promise); } resolve(valueMap); }); }); } class CompletablePromise { constructor() { this._resolved = false; this._promise = new Promise((resolve, reject) => { this._resolve = resolve; this._reject = reject; }); } static of(value) { const promise = new CompletablePromise(); value .then(v => promise.resolve(v)) .catch(e => promise.reject(e)); return promise; } static completedPromise(value) { const completable = new CompletablePromise(); completable.resolve(value); return completable; } get promise() { return this._promise; } get resolved() { return this._resolved; } resolve(value) { if (this._resolved) { return; } this._resolve(value); this._resolved = true; } reject(reason) { if (this._resolved) { return; } this._reject(reason); this._resolved = true; } then(fulfilled, rejected) { return this._promise.then(v => fulfilled(v), e => rejected(e)); } catch(rejected) { return this._promise.catch(e => rejected(e)); } } exports.CompletablePromise = CompletablePromise; //# sourceMappingURL=util.js.map