@inventivetalent/loading-cache
Version:
loading cache based on ben-manes/caffeine and node-cache
93 lines • 2.94 kB
JavaScript
;
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