Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

batchloader

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

batchloader - npm Package Compare versions

Comparing version
0.0.16
to
0.0.17
+23
dist/browser/batchloader.d.ts
import { CacheLoader, ICache } from './cacheloader';
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader } from './types';
export declare type BatchLoadFn<Key, Value> = (keys: Key[]) => Value[] | Promise<Value[]>;
export declare type KeyToUniqueId<Key> = (key: Key) => string;
export declare class BatchLoader<Key, Value> implements IBatchLoader<Key, Value> {
protected batchFn: BatchLoadFn<Key, Value>;
protected keyToUniqueId: KeyToUniqueId<Key> | null;
protected batchDelay: number;
protected batchSize: number;
protected queuedKeys: Key[];
protected batchPromise: Promise<Value[]> | null;
constructor(batchFn: BatchLoadFn<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number, batchSize?: number);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
cacheLoader(cache?: ICache<Key, Value>): CacheLoader<Key, Value>;
protected triggerBatch(): Promise<Value[]>;
protected runBatchNow(): Promise<Value[]>;
private maybeBatchInChunks;
private batchInChunks;
}
//# sourceMappingURL=batchloader.d.ts.map
{"version":3,"file":"batchloader.d.ts","sourceRoot":"","sources":["../../src/batchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW,CAAC,GAAG,EAAE,KAAK,IAAI,CACpC,IAAI,EAAE,GAAG,EAAE,KACR,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAEhC,oBAAY,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;AAOtD,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CAAE,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAKpE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAClD,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,SAAS;IAPrB,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,CAAM;IACjC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAQ;gBAG3C,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,EACxC,UAAU,SAAI,EACd,SAAS,SAA0B;IAGxC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAQ9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAcvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAIvE,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAY1C,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAiCzC,OAAO,CAAC,kBAAkB;YAOZ,aAAa;CAqB5B"}
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var cacheloader_1 = require("./cacheloader");
var mappedbatchloader_1 = require("./mappedbatchloader");
var sleep = function (ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
};
var BatchLoader = (function () {
function BatchLoader(batchFn, keyToUniqueId, batchDelay, batchSize) {
if (batchDelay === void 0) { batchDelay = 0; }
if (batchSize === void 0) { batchSize = Number.MAX_SAFE_INTEGER; }
this.batchFn = batchFn;
this.keyToUniqueId = keyToUniqueId;
this.batchDelay = batchDelay;
this.batchSize = batchSize;
this.queuedKeys = [];
this.batchPromise = null;
}
BatchLoader.prototype.load = function (key) {
var queuedKeys = this.queuedKeys;
var index = queuedKeys.length;
queuedKeys.push(key);
return this.triggerBatch().then(function (values) { return values[index]; });
};
BatchLoader.prototype.loadMany = function (keys) {
if (keys.length) {
var queuedKeys = this.queuedKeys;
var index_1 = queuedKeys.length;
queuedKeys.push.apply(queuedKeys, keys);
var length_1 = keys.length;
return this.triggerBatch().then(function (values) {
return values.slice(index_1, index_1 + length_1);
});
}
return Promise.resolve([]);
};
BatchLoader.prototype.mapLoader = function (mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
};
BatchLoader.prototype.cacheLoader = function (cache) {
return new cacheloader_1.CacheLoader(this, cache);
};
BatchLoader.prototype.triggerBatch = function () {
var _this = this;
return (this.batchPromise ||
(this.batchPromise = new Promise(function (resolve, reject) {
setTimeout(function () {
_this.batchPromise = null;
_this.runBatchNow().then(resolve, reject);
}, _this.batchDelay);
})));
};
BatchLoader.prototype.runBatchNow = function () {
var _a = this, queuedKeys = _a.queuedKeys, keyToUniqueId = _a.keyToUniqueId;
this.queuedKeys = [];
if (keyToUniqueId) {
var idMap = {};
var indexToId_1 = [];
var idToNewIndex_1 = {};
var newIndex = 0;
var uniqueKeys = [];
var len = queuedKeys.length;
for (var i = 0; i < len; i += 1) {
var key = queuedKeys[i];
var id = keyToUniqueId(key);
indexToId_1[i] = id;
if (idMap[id] !== true) {
idMap[id] = true;
idToNewIndex_1[id] = newIndex;
newIndex += 1;
uniqueKeys.push(key);
}
}
return this.maybeBatchInChunks(uniqueKeys).then(function (values) {
return queuedKeys.map(function (_key, i) { return values[idToNewIndex_1[indexToId_1[i]]]; });
});
}
return this.maybeBatchInChunks(queuedKeys);
};
BatchLoader.prototype.maybeBatchInChunks = function (keys) {
if (keys.length <= this.batchSize) {
return Promise.resolve(this.batchFn(keys));
}
return this.batchInChunks(keys);
};
BatchLoader.prototype.batchInChunks = function (keys) {
return __awaiter(this, void 0, void 0, function () {
var _a, batchSize, batchDelay, promises, kLen, i, results, rLen, values, i;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this, batchSize = _a.batchSize, batchDelay = _a.batchDelay;
promises = [];
kLen = keys.length;
i = 0;
_b.label = 1;
case 1:
if (!(i < kLen)) return [3, 4];
promises.push(this.batchFn(keys.slice(i, i + batchSize)));
if (!batchDelay) return [3, 3];
return [4, sleep(batchDelay)];
case 2:
_b.sent();
_b.label = 3;
case 3:
i += batchSize;
return [3, 1];
case 4: return [4, Promise.all(promises)];
case 5:
results = _b.sent();
rLen = results.length;
values = [];
for (i = 0; i < rLen; i += 1) {
values = values.concat(results[i]);
}
return [2, values];
}
});
});
};
return BatchLoader;
}());
exports.BatchLoader = BatchLoader;
//# sourceMappingURL=batchloader.js.map
{"version":3,"file":"batchloader.js","sourceRoot":"","sources":["../../src/batchloader.ts"],"names":[],"mappings":"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"}
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface ICache<Key, Value> {
clear(): void;
delete(key: Key): boolean;
get(key: Key): Value | undefined;
set(key: Key, value: Value): void;
}
export declare class CacheLoader<Key, Value> implements IBatchLoader<Key, Value>, ICache<Key, MaybePromise<Value>> {
protected loader: IBatchLoader<Key, Value>;
cache: ICache<Key, Value>;
promiseCache: Map<Key, Promise<Value>>;
constructor(loader: IBatchLoader<Key, Value>, cache?: ICache<Key, Value>);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
get(key: Key): Promise<Value> | undefined;
set(key: Key, value: Value): void;
delete(key: Key): boolean;
clear(): void;
}
//# sourceMappingURL=cacheloader.d.ts.map
{"version":3,"file":"cacheloader.d.ts","sourceRoot":"","sources":["../../src/cacheloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,MAAM,CAAC,GAAG,EAAE,KAAK;IAChC,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CACjC,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAJ3B,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAGlC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EACnC,KAAK,GAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAyB;IAKnD,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAkB9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;IAczC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAMzB,KAAK,IAAI,IAAI;CAIrB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var mappedbatchloader_1 = require("./mappedbatchloader");
var CacheLoader = (function () {
function CacheLoader(loader, cache) {
if (cache === void 0) { cache = new Map(); }
this.loader = loader;
this.cache = cache;
this.promiseCache = new Map();
}
CacheLoader.prototype.load = function (key) {
var _this = this;
var promiseCache = this.promiseCache;
var pv = promiseCache.get(key);
if (pv) {
return pv;
}
var value = this.cache.get(key);
pv =
value === undefined
? this.loader.load(key).then(function (val) {
_this.set(key, val);
return val;
})
: Promise.resolve(value);
promiseCache.set(key, pv);
return pv;
};
CacheLoader.prototype.loadMany = function (keys) {
var _this = this;
return Promise.all(keys.map(function (key) { return _this.load(key); }));
};
CacheLoader.prototype.mapLoader = function (mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
};
CacheLoader.prototype.get = function (key) {
var pv = this.promiseCache.get(key);
if (pv) {
return pv;
}
var v = this.cache.get(key);
if (v === undefined) {
return undefined;
}
pv = Promise.resolve(v);
this.promiseCache.set(key, pv);
return pv;
};
CacheLoader.prototype.set = function (key, value) {
this.promiseCache.delete(key);
this.cache.set(key, value);
};
CacheLoader.prototype.delete = function (key) {
var pDeleted = this.promiseCache.delete(key);
var deleted = this.cache.delete(key);
return pDeleted || deleted;
};
CacheLoader.prototype.clear = function () {
this.promiseCache.clear();
this.cache.clear();
};
return CacheLoader;
}());
exports.CacheLoader = CacheLoader;
//# sourceMappingURL=cacheloader.js.map
{"version":3,"file":"cacheloader.js","sourceRoot":"","sources":["../../src/cacheloader.ts"],"names":[],"mappings":";;AAAA,2DAA0D;AAU1D;IAIE,qBACY,MAAgC,EACnC,KAAiD;QAAjD,sBAAA,EAAA,YAAgC,GAAG,EAAc;QAD9C,WAAM,GAAN,MAAM,CAA0B;QACnC,UAAK,GAAL,KAAK,CAA4C;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,CAAC;IAEM,0BAAI,GAAX,UAAY,GAAQ;QAApB,iBAgBC;QAfS,IAAA,gCAAY,CAAU;QAC9B,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE;YACA,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;oBAC7B,KAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,8BAAQ,GAAf,UAAgB,IAAW;QAA3B,iBAEC;QADC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,+BAAS,GAAhB,UACE,KAA8C;QAE9C,OAAO,IAAI,qCAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,yBAAG,GAAV,UAAW,GAAQ;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,SAAS,CAAC;SAClB;QACD,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,yBAAG,GAAV,UAAW,GAAQ,EAAE,KAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,4BAAM,GAAb,UAAc,GAAQ;QACpB,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,QAAQ,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEM,2BAAK,GAAZ;QACE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACH,kBAAC;AAAD,CAAC,AApED,IAoEC;AApEY,kCAAW"}
import { BatchLoader, KeyToUniqueId } from './batchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface IBatchCache<Key, Value> {
mget: (keys: Key[]) => MaybePromise<Array<Value | undefined>>;
mset: (keyValues: Array<[Key, Value]>) => MaybePromise<void>;
}
export declare const proxyLoaderWithCache: <Key, Value>(cache: IBatchCache<Key, Value>, loader: IBatchLoader<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number | undefined, batchSize?: number | undefined) => BatchLoader<Key, Value>;
//# sourceMappingURL=cacheproxyloader.d.ts.map
{"version":3,"file":"cacheproxyloader.d.ts","sourceRoot":"","sources":["../../src/cacheproxyloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,GAAG,EAAE,KAAK;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,oBAAoB,sNAwC9B,CAAC"}
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var _this = this;
Object.defineProperty(exports, "__esModule", { value: true });
var batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = function (cache, loader, keyToUniqueId, batchDelay, batchSize) {
return new batchloader_1.BatchLoader(function (keys) { return __awaiter(_this, void 0, void 0, function () {
var values, len, missingKeys, missingIndexes, i, missingValues, mlen, missingKeyValues, i, value;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, cache.mget(keys)];
case 1:
values = _a.sent();
len = values.length;
missingKeys = [];
missingIndexes = [];
for (i = 0; i < len; i += 1) {
if (values[i] === undefined) {
missingKeys.push(keys[i]);
missingIndexes.push(i);
}
}
if (!missingKeys.length) return [3, 3];
return [4, loader.loadMany(missingKeys)];
case 2:
missingValues = _a.sent();
mlen = missingValues.length;
missingKeyValues = [];
for (i = 0; i < mlen; i += 1) {
value = missingValues[i];
values[missingIndexes[i]] = value;
missingKeyValues.push([missingKeys[i], value]);
}
cache.mset(missingKeyValues);
_a.label = 3;
case 3: return [2, values];
}
});
}); }, keyToUniqueId, batchDelay, batchSize);
};
//# sourceMappingURL=cacheproxyloader.js.map
{"version":3,"file":"cacheproxyloader.js","sourceRoot":"","sources":["../../src/cacheproxyloader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iBAiDA;;AAjDA,+CAA6D;AAQhD,QAAA,oBAAoB,GAAG,UAClC,KAA8B,EAC9B,MAAgC,EAChC,aAAwC,EACxC,UAAmB,EACnB,SAAkB;IAElB,OAAA,IAAI,yBAAW,CACb,UAAO,IAAI;;;;wBACM,WAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAA/B,MAAM,GAAG,SAAsB;oBAE/B,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;oBACpB,WAAW,GAAU,EAAE,CAAC;oBACxB,cAAc,GAAa,EAAE,CAAC;oBACpC,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;4BAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC1B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACxB;qBACF;yBAEG,WAAW,CAAC,MAAM,EAAlB,cAAkB;oBACE,WAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAA;;oBAAlD,aAAa,GAAG,SAAkC;oBAClD,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;oBAC5B,gBAAgB,GAAwB,EAAE,CAAC;oBACjD,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC1B,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;wBAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;qBAChD;oBAGD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;wBAG/B,WAAO,MAAiB,EAAC;;;SAC1B,EACD,aAAa,EACb,UAAU,EACV,SAAS,CACV;AAjCD,CAiCC,CAAC"}
export * from './batchloader';
export * from './mappedbatchloader';
export * from './cacheproxyloader';
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./batchloader"));
__export(require("./mappedbatchloader"));
__export(require("./cacheproxyloader"));
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,yCAAoC;AACpC,wCAAmC"}
import { IBatchLoader } from './types';
export declare class MappedBatchLoader<Key, Value, MappedValue> implements IBatchLoader<Key, MappedValue> {
protected loader: IBatchLoader<Key, Value>;
protected mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>;
constructor(loader: IBatchLoader<Key, Value>, mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>);
load(key: Key): Promise<MappedValue>;
loadMany(keys: Key[]): Promise<MappedValue[]>;
mapLoader<RemappedValue>(mapFn: (value: MappedValue, key: Key) => RemappedValue): MappedBatchLoader<Key, MappedValue, RemappedValue>;
}
//# sourceMappingURL=mappedbatchloader.d.ts.map
{"version":3,"file":"mappedbatchloader.d.ts","sourceRoot":"","sources":["../../src/mappedbatchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,qBAAa,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CACpD,YAAW,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;IAEvC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBAJ7B,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAGlC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB7C,SAAS,CAAC,aAAa,EAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,aAAa,GACrD,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC;CAGtD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MappedBatchLoader = (function () {
function MappedBatchLoader(loader, mapFn) {
this.loader = loader;
this.mapFn = mapFn;
}
MappedBatchLoader.prototype.load = function (key) {
var _this = this;
return this.loader.load(key).then(function (value) { return _this.mapFn(value, key); });
};
MappedBatchLoader.prototype.loadMany = function (keys) {
var _this = this;
return this.loader.loadMany(keys).then(function (values) {
var hasPromise = false;
var results = [];
var len = values.length;
for (var i = 0; i < len; i += 1) {
var res = _this.mapFn(values[i], keys[i]);
results.push(res);
hasPromise =
hasPromise ||
(res != null && typeof res.then === 'function');
}
return hasPromise ? Promise.all(results) : results;
});
};
MappedBatchLoader.prototype.mapLoader = function (mapFn) {
return new MappedBatchLoader(this, mapFn);
};
return MappedBatchLoader;
}());
exports.MappedBatchLoader = MappedBatchLoader;
//# sourceMappingURL=mappedbatchloader.js.map
{"version":3,"file":"mappedbatchloader.js","sourceRoot":"","sources":["../../src/mappedbatchloader.ts"],"names":[],"mappings":";;AAEA;IAEE,2BACY,MAAgC,EAChC,KAG6B;QAJ7B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAGwB;IACtC,CAAC;IAEG,gCAAI,GAAX,UAAY,GAAQ;QAApB,iBAEC;QADC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAtB,CAAsB,CAAC,CAAC;IACvE,CAAC;IAEM,oCAAQ,GAAf,UAAgB,IAAW;QAA3B,iBAcC;QAbC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,MAAM;YAC5C,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAM,OAAO,GAA8C,EAAE,CAAC;YAC9D,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,IAAM,GAAG,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU;oBACR,UAAU;wBACV,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,qCAAS,GAAhB,UACE,KAAsD;QAEtD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACH,wBAAC;AAAD,CAAC,AAnCD,IAmCC;AAnCY,8CAAiB"}
export interface IBatchLoader<Key, Value> {
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value) => MappedValue): IBatchLoader<Key, MappedValue>;
}
export declare type MaybePromise<T> = T | Promise<T>;
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,KAAK;IACtC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,WAAW,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,GACnC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACnC;AAED,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
import { CacheLoader, ICache } from './cacheloader';
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader } from './types';
export declare type BatchLoadFn<Key, Value> = (keys: Key[]) => Value[] | Promise<Value[]>;
export declare type KeyToUniqueId<Key> = (key: Key) => string;
export declare class BatchLoader<Key, Value> implements IBatchLoader<Key, Value> {
protected batchFn: BatchLoadFn<Key, Value>;
protected keyToUniqueId: KeyToUniqueId<Key> | null;
protected batchDelay: number;
protected batchSize: number;
protected queuedKeys: Key[];
protected batchPromise: Promise<Value[]> | null;
constructor(batchFn: BatchLoadFn<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number, batchSize?: number);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
cacheLoader(cache?: ICache<Key, Value>): CacheLoader<Key, Value>;
protected triggerBatch(): Promise<Value[]>;
protected runBatchNow(): Promise<Value[]>;
private maybeBatchInChunks;
private batchInChunks;
}
//# sourceMappingURL=batchloader.d.ts.map
{"version":3,"file":"batchloader.d.ts","sourceRoot":"","sources":["../../src/batchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW,CAAC,GAAG,EAAE,KAAK,IAAI,CACpC,IAAI,EAAE,GAAG,EAAE,KACR,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAEhC,oBAAY,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;AAOtD,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CAAE,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAKpE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAClD,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,SAAS;IAPrB,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,CAAM;IACjC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAQ;gBAG3C,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,EACxC,UAAU,SAAI,EACd,SAAS,SAA0B;IAGxC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAQ9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAcvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAIvE,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAY1C,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAiCzC,OAAO,CAAC,kBAAkB;YAOZ,aAAa;CAqB5B"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cacheloader_1 = require("./cacheloader");
const mappedbatchloader_1 = require("./mappedbatchloader");
const sleep = (ms) => new Promise((resolve) => {
setTimeout(resolve, ms);
});
class BatchLoader {
constructor(batchFn, keyToUniqueId, batchDelay = 0, batchSize = Number.MAX_SAFE_INTEGER) {
this.batchFn = batchFn;
this.keyToUniqueId = keyToUniqueId;
this.batchDelay = batchDelay;
this.batchSize = batchSize;
this.queuedKeys = [];
this.batchPromise = null;
}
load(key) {
const { queuedKeys } = this;
const index = queuedKeys.length;
queuedKeys.push(key);
return this.triggerBatch().then((values) => values[index]);
}
loadMany(keys) {
if (keys.length) {
const { queuedKeys } = this;
const index = queuedKeys.length;
queuedKeys.push(...keys);
const { length } = keys;
return this.triggerBatch().then((values) => values.slice(index, index + length));
}
return Promise.resolve([]);
}
mapLoader(mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
}
cacheLoader(cache) {
return new cacheloader_1.CacheLoader(this, cache);
}
triggerBatch() {
return (this.batchPromise ||
(this.batchPromise = new Promise((resolve, reject) => {
setTimeout(() => {
this.batchPromise = null;
this.runBatchNow().then(resolve, reject);
}, this.batchDelay);
})));
}
runBatchNow() {
const { queuedKeys, keyToUniqueId } = this;
this.queuedKeys = [];
if (keyToUniqueId) {
const idMap = {};
const indexToId = [];
const idToNewIndex = {};
let newIndex = 0;
const uniqueKeys = [];
const len = queuedKeys.length;
for (let i = 0; i < len; i += 1) {
const key = queuedKeys[i];
const id = keyToUniqueId(key);
indexToId[i] = id;
if (idMap[id] !== true) {
idMap[id] = true;
idToNewIndex[id] = newIndex;
newIndex += 1;
uniqueKeys.push(key);
}
}
return this.maybeBatchInChunks(uniqueKeys).then((values) => queuedKeys.map((_key, i) => values[idToNewIndex[indexToId[i]]]));
}
return this.maybeBatchInChunks(queuedKeys);
}
maybeBatchInChunks(keys) {
if (keys.length <= this.batchSize) {
return Promise.resolve(this.batchFn(keys));
}
return this.batchInChunks(keys);
}
async batchInChunks(keys) {
const { batchSize, batchDelay } = this;
const promises = [];
const kLen = keys.length;
for (let i = 0; i < kLen; i += batchSize) {
promises.push(this.batchFn(keys.slice(i, i + batchSize)));
if (batchDelay) {
await sleep(batchDelay);
}
}
const results = await Promise.all(promises);
const rLen = results.length;
let values = [];
for (let i = 0; i < rLen; i += 1) {
values = values.concat(results[i]);
}
return values;
}
}
exports.BatchLoader = BatchLoader;
//# sourceMappingURL=batchloader.js.map
{"version":3,"file":"batchloader.js","sourceRoot":"","sources":["../../src/batchloader.ts"],"names":[],"mappings":"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"}
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface ICache<Key, Value> {
clear(): void;
delete(key: Key): boolean;
get(key: Key): Value | undefined;
set(key: Key, value: Value): void;
}
export declare class CacheLoader<Key, Value> implements IBatchLoader<Key, Value>, ICache<Key, MaybePromise<Value>> {
protected loader: IBatchLoader<Key, Value>;
cache: ICache<Key, Value>;
promiseCache: Map<Key, Promise<Value>>;
constructor(loader: IBatchLoader<Key, Value>, cache?: ICache<Key, Value>);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
get(key: Key): Promise<Value> | undefined;
set(key: Key, value: Value): void;
delete(key: Key): boolean;
clear(): void;
}
//# sourceMappingURL=cacheloader.d.ts.map
{"version":3,"file":"cacheloader.d.ts","sourceRoot":"","sources":["../../src/cacheloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,MAAM,CAAC,GAAG,EAAE,KAAK;IAChC,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CACjC,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAJ3B,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAGlC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EACnC,KAAK,GAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAyB;IAKnD,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAkB9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;IAczC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAMzB,KAAK,IAAI,IAAI;CAIrB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mappedbatchloader_1 = require("./mappedbatchloader");
class CacheLoader {
constructor(loader, cache = new Map()) {
this.loader = loader;
this.cache = cache;
this.promiseCache = new Map();
}
load(key) {
const { promiseCache } = this;
let pv = promiseCache.get(key);
if (pv) {
return pv;
}
const value = this.cache.get(key);
pv =
value === undefined
? this.loader.load(key).then((val) => {
this.set(key, val);
return val;
})
: Promise.resolve(value);
promiseCache.set(key, pv);
return pv;
}
loadMany(keys) {
return Promise.all(keys.map((key) => this.load(key)));
}
mapLoader(mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
}
get(key) {
let pv = this.promiseCache.get(key);
if (pv) {
return pv;
}
const v = this.cache.get(key);
if (v === undefined) {
return undefined;
}
pv = Promise.resolve(v);
this.promiseCache.set(key, pv);
return pv;
}
set(key, value) {
this.promiseCache.delete(key);
this.cache.set(key, value);
}
delete(key) {
const pDeleted = this.promiseCache.delete(key);
const deleted = this.cache.delete(key);
return pDeleted || deleted;
}
clear() {
this.promiseCache.clear();
this.cache.clear();
}
}
exports.CacheLoader = CacheLoader;
//# sourceMappingURL=cacheloader.js.map
{"version":3,"file":"cacheloader.js","sourceRoot":"","sources":["../../src/cacheloader.ts"],"names":[],"mappings":";;AAAA,6DAA0D;AAU1D,MAAa,WAAW;IAItB,YACY,MAAgC,EACnC,QAA4B,IAAI,GAAG,EAAc;QAD9C,WAAM,GAAN,MAAM,CAA0B;QACnC,UAAK,GAAL,KAAK,CAA4C;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,CAAC;IAEM,IAAI,CAAC,GAAQ;QAClB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE;YACA,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,SAAS,CACd,KAA8C;QAE9C,OAAO,IAAI,qCAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,GAAG,CAAC,GAAQ;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,SAAS,CAAC;SAClB;QACD,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,GAAG,CAAC,GAAQ,EAAE,KAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,GAAQ;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,QAAQ,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AApED,kCAoEC"}
import { BatchLoader, KeyToUniqueId } from './batchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface IBatchCache<Key, Value> {
mget: (keys: Key[]) => MaybePromise<Array<Value | undefined>>;
mset: (keyValues: Array<[Key, Value]>) => MaybePromise<void>;
}
export declare const proxyLoaderWithCache: <Key, Value>(cache: IBatchCache<Key, Value>, loader: IBatchLoader<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number | undefined, batchSize?: number | undefined) => BatchLoader<Key, Value>;
//# sourceMappingURL=cacheproxyloader.d.ts.map
{"version":3,"file":"cacheproxyloader.d.ts","sourceRoot":"","sources":["../../src/cacheproxyloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,GAAG,EAAE,KAAK;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,oBAAoB,sNAwC9B,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = (cache, loader, keyToUniqueId, batchDelay, batchSize) => new batchloader_1.BatchLoader(async (keys) => {
const values = await cache.mget(keys);
const len = values.length;
const missingKeys = [];
const missingIndexes = [];
for (let i = 0; i < len; i += 1) {
if (values[i] === undefined) {
missingKeys.push(keys[i]);
missingIndexes.push(i);
}
}
if (missingKeys.length) {
const missingValues = await loader.loadMany(missingKeys);
const mlen = missingValues.length;
const missingKeyValues = [];
for (let i = 0; i < mlen; i += 1) {
const value = missingValues[i];
values[missingIndexes[i]] = value;
missingKeyValues.push([missingKeys[i], value]);
}
cache.mset(missingKeyValues);
}
return values;
}, keyToUniqueId, batchDelay, batchSize);
//# sourceMappingURL=cacheproxyloader.js.map
{"version":3,"file":"cacheproxyloader.js","sourceRoot":"","sources":["../../src/cacheproxyloader.ts"],"names":[],"mappings":";;AAAA,iDAA6D;AAQhD,QAAA,oBAAoB,GAAG,CAClC,KAA8B,EAC9B,MAAgC,EAChC,aAAwC,EACxC,UAAmB,EACnB,SAAkB,EACO,EAAE,CAC3B,IAAI,yBAAW,CACb,KAAK,EAAE,IAAI,EAAoB,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;KACF;IAED,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;QAClC,MAAM,gBAAgB,GAAwB,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SAChD;QAGD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9B;IAED,OAAO,MAAiB,CAAC;AAC3B,CAAC,EACD,aAAa,EACb,UAAU,EACV,SAAS,CACV,CAAC"}
export * from './batchloader';
export * from './mappedbatchloader';
export * from './cacheproxyloader';
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./batchloader"));
__export(require("./mappedbatchloader"));
__export(require("./cacheproxyloader"));
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,yCAAoC;AACpC,wCAAmC"}
import { IBatchLoader } from './types';
export declare class MappedBatchLoader<Key, Value, MappedValue> implements IBatchLoader<Key, MappedValue> {
protected loader: IBatchLoader<Key, Value>;
protected mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>;
constructor(loader: IBatchLoader<Key, Value>, mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>);
load(key: Key): Promise<MappedValue>;
loadMany(keys: Key[]): Promise<MappedValue[]>;
mapLoader<RemappedValue>(mapFn: (value: MappedValue, key: Key) => RemappedValue): MappedBatchLoader<Key, MappedValue, RemappedValue>;
}
//# sourceMappingURL=mappedbatchloader.d.ts.map
{"version":3,"file":"mappedbatchloader.d.ts","sourceRoot":"","sources":["../../src/mappedbatchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,qBAAa,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CACpD,YAAW,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;IAEvC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBAJ7B,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAGlC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB7C,SAAS,CAAC,aAAa,EAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,aAAa,GACrD,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC;CAGtD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class MappedBatchLoader {
constructor(loader, mapFn) {
this.loader = loader;
this.mapFn = mapFn;
}
load(key) {
return this.loader.load(key).then((value) => this.mapFn(value, key));
}
loadMany(keys) {
return this.loader.loadMany(keys).then((values) => {
let hasPromise = false;
const results = [];
const len = values.length;
for (let i = 0; i < len; i += 1) {
const res = this.mapFn(values[i], keys[i]);
results.push(res);
hasPromise =
hasPromise ||
(res != null && typeof res.then === 'function');
}
return hasPromise ? Promise.all(results) : results;
});
}
mapLoader(mapFn) {
return new MappedBatchLoader(this, mapFn);
}
}
exports.MappedBatchLoader = MappedBatchLoader;
//# sourceMappingURL=mappedbatchloader.js.map
{"version":3,"file":"mappedbatchloader.js","sourceRoot":"","sources":["../../src/mappedbatchloader.ts"],"names":[],"mappings":";;AAEA,MAAa,iBAAiB;IAE5B,YACY,MAAgC,EAChC,KAG6B;QAJ7B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAGwB;IACtC,CAAC;IAEG,IAAI,CAAC,GAAQ;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,OAAO,GAA8C,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU;oBACR,UAAU;wBACV,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CACd,KAAsD;QAEtD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AAnCD,8CAmCC"}
export interface IBatchLoader<Key, Value> {
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value) => MappedValue): IBatchLoader<Key, MappedValue>;
}
export declare type MaybePromise<T> = T | Promise<T>;
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,KAAK;IACtC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,WAAW,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,GACnC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACnC;AAED,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
{"version":3,"file":"batchloader.d.ts","sourceRoot":"","sources":["../src/batchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW,CAAC,GAAG,EAAE,KAAK,IAAI,CACpC,IAAI,EAAE,GAAG,EAAE,KACR,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAEhC,oBAAY,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;AAOtD,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CAAE,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAKpE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAClD,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,SAAS;IAPrB,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,CAAM;IACjC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAQ;gBAG3C,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,EACxC,UAAU,SAAI,EACd,SAAS,SAA0B;IAGxC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAQ9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAcvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAIvE,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAY1C,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAiCzC,OAAO,CAAC,kBAAkB;YAOZ,aAAa;CAqB5B"}
{"version":3,"file":"cacheloader.d.ts","sourceRoot":"","sources":["../src/cacheloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,MAAM,CAAC,GAAG,EAAE,KAAK;IAChC,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,WAAW,CAAC,GAAG,EAAE,KAAK,CACjC,YAAW,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAJ3B,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAGlC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EACnC,KAAK,GAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAyB;IAKnD,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAkB9B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIvC,SAAS,CAAC,WAAW,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,WAAW,GAC7C,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;IAItC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;IAczC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAMzB,KAAK,IAAI,IAAI;CAIrB"}
{"version":3,"file":"cacheproxyloader.d.ts","sourceRoot":"","sources":["../src/cacheproxyloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,GAAG,EAAE,KAAK;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,oBAAoB,sNAwC9B,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
{"version":3,"file":"mappedbatchloader.d.ts","sourceRoot":"","sources":["../src/mappedbatchloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,qBAAa,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CACpD,YAAW,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;IAEvC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1C,SAAS,CAAC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBAJ7B,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAChC,KAAK,EAAE,CACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAGlC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB7C,SAAS,CAAC,aAAa,EAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,aAAa,GACrD,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC;CAGtD"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,KAAK;IACtC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,WAAW,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,GACnC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACnC;AAED,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
+1
-0

@@ -23,1 +23,2 @@ import { CacheLoader, ICache } from './cacheloader';

}
//# sourceMappingURL=batchloader.d.ts.map
+21
-34

@@ -1,17 +0,7 @@

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const cacheloader_1 = require("./cacheloader");
const mappedbatchloader_1 = require("./mappedbatchloader");
import { CacheLoader } from './cacheloader';
import { MappedBatchLoader } from './mappedbatchloader';
const sleep = (ms) => new Promise((resolve) => {
setTimeout(resolve, ms);
});
class BatchLoader {
export class BatchLoader {
constructor(batchFn, keyToUniqueId, batchDelay = 0, batchSize = Number.MAX_SAFE_INTEGER) {

@@ -42,6 +32,6 @@ this.batchFn = batchFn;

mapLoader(mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
return new MappedBatchLoader(this, mapFn);
}
cacheLoader(cache) {
return new cacheloader_1.CacheLoader(this, cache);
return new CacheLoader(this, cache);
}

@@ -88,24 +78,21 @@ triggerBatch() {

}
batchInChunks(keys) {
return __awaiter(this, void 0, void 0, function* () {
const { batchSize, batchDelay } = this;
const promises = [];
const kLen = keys.length;
for (let i = 0; i < kLen; i += batchSize) {
promises.push(this.batchFn(keys.slice(i, i + batchSize)));
if (batchDelay) {
yield sleep(batchDelay);
}
async batchInChunks(keys) {
const { batchSize, batchDelay } = this;
const promises = [];
const kLen = keys.length;
for (let i = 0; i < kLen; i += batchSize) {
promises.push(this.batchFn(keys.slice(i, i + batchSize)));
if (batchDelay) {
await sleep(batchDelay);
}
const results = yield Promise.all(promises);
const rLen = results.length;
let values = [];
for (let i = 0; i < rLen; i += 1) {
values = values.concat(results[i]);
}
return values;
});
}
const results = await Promise.all(promises);
const rLen = results.length;
let values = [];
for (let i = 0; i < rLen; i += 1) {
values = values.concat(results[i]);
}
return values;
}
}
exports.BatchLoader = BatchLoader;
//# sourceMappingURL=batchloader.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"batchloader.js","sourceRoot":"","sources":["../src/batchloader.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"batchloader.js","sourceRoot":"","sources":["../src/batchloader.ts"],"names":[],"mappings":"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"}

@@ -22,1 +22,2 @@ import { MappedBatchLoader } from './mappedbatchloader';

}
//# sourceMappingURL=cacheloader.d.ts.map

@@ -1,5 +0,3 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mappedbatchloader_1 = require("./mappedbatchloader");
class CacheLoader {
import { MappedBatchLoader } from './mappedbatchloader';
export class CacheLoader {
constructor(loader, cache = new Map()) {

@@ -31,3 +29,3 @@ this.loader = loader;

mapLoader(mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
return new MappedBatchLoader(this, mapFn);
}

@@ -61,3 +59,2 @@ get(key) {

}
exports.CacheLoader = CacheLoader;
//# sourceMappingURL=cacheloader.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cacheloader.js","sourceRoot":"","sources":["../src/cacheloader.ts"],"names":[],"mappings":";;AAAA,6DAA0D;AAU1D,MAAa,WAAW;IAItB,YACY,MAAgC,EACnC,QAA4B,IAAI,GAAG,EAAc;QAD9C,WAAM,GAAN,MAAM,CAA0B;QACnC,UAAK,GAAL,KAAK,CAA4C;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,CAAC;IAEM,IAAI,CAAC,GAAQ;QAClB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE;YACA,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,SAAS,CACd,KAA8C;QAE9C,OAAO,IAAI,qCAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,GAAG,CAAC,GAAQ;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,SAAS,CAAC;SAClB;QACD,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,GAAG,CAAC,GAAQ,EAAE,KAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,GAAQ;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,QAAQ,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AApED,kCAoEC"}
{"version":3,"file":"cacheloader.js","sourceRoot":"","sources":["../src/cacheloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAU1D,MAAM,OAAO,WAAW;IAItB,YACY,MAAgC,EACnC,QAA4B,IAAI,GAAG,EAAc;QAD9C,WAAM,GAAN,MAAM,CAA0B;QACnC,UAAK,GAAL,KAAK,CAA4C;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,CAAC;IAEM,IAAI,CAAC,GAAQ;QAClB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE;YACA,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,SAAS,CACd,KAA8C;QAE9C,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,GAAG,CAAC,GAAQ;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,SAAS,CAAC;SAClB;QACD,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,GAAG,CAAC,GAAQ,EAAE,KAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,GAAQ;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,QAAQ,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}

@@ -8,1 +8,2 @@ import { BatchLoader, KeyToUniqueId } from './batchloader';

export declare const proxyLoaderWithCache: <Key, Value>(cache: IBatchCache<Key, Value>, loader: IBatchLoader<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number | undefined, batchSize?: number | undefined) => BatchLoader<Key, Value>;
//# sourceMappingURL=cacheproxyloader.d.ts.map

@@ -1,14 +0,4 @@

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = (cache, loader, keyToUniqueId, batchDelay, batchSize) => new batchloader_1.BatchLoader((keys) => __awaiter(this, void 0, void 0, function* () {
const values = yield cache.mget(keys);
import { BatchLoader } from './batchloader';
export const proxyLoaderWithCache = (cache, loader, keyToUniqueId, batchDelay, batchSize) => new BatchLoader(async (keys) => {
const values = await cache.mget(keys);
const len = values.length;

@@ -24,3 +14,3 @@ const missingKeys = [];

if (missingKeys.length) {
const missingValues = yield loader.loadMany(missingKeys);
const missingValues = await loader.loadMany(missingKeys);
const mlen = missingValues.length;

@@ -36,3 +26,3 @@ const missingKeyValues = [];

return values;
}), keyToUniqueId, batchDelay, batchSize);
}, keyToUniqueId, batchDelay, batchSize);
//# sourceMappingURL=cacheproxyloader.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cacheproxyloader.js","sourceRoot":"","sources":["../src/cacheproxyloader.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,iDAA6D;AAQhD,QAAA,oBAAoB,GAAG,CAClC,KAA8B,EAC9B,MAAgC,EAChC,aAAwC,EACxC,UAAmB,EACnB,SAAkB,EACO,EAAE,CAC3B,IAAI,yBAAW,CACb,CAAO,IAAI,EAAoB,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;KACF;IAED,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;QAClC,MAAM,gBAAgB,GAAwB,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SAChD;QAGD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9B;IAED,OAAO,MAAiB,CAAC;AAC3B,CAAC,CAAA,EACD,aAAa,EACb,UAAU,EACV,SAAS,CACV,CAAC"}
{"version":3,"file":"cacheproxyloader.js","sourceRoot":"","sources":["../src/cacheproxyloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,iBAAiB,CAAC;AAQ7D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAA8B,EAC9B,MAAgC,EAChC,aAAwC,EACxC,UAAmB,EACnB,SAAkB,EACO,EAAE,CAC3B,IAAI,WAAW,CACb,KAAK,EAAE,IAAI,EAAoB,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;KACF;IAED,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;QAClC,MAAM,gBAAgB,GAAwB,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SAChD;QAGD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9B;IAED,OAAO,MAAiB,CAAC;AAC3B,CAAC,EACD,aAAa,EACb,UAAU,EACV,SAAS,CACV,CAAC"}
export * from './batchloader';
export * from './mappedbatchloader';
export * from './cacheproxyloader';
//# sourceMappingURL=index.d.ts.map

@@ -1,9 +0,4 @@

"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./batchloader"));
__export(require("./mappedbatchloader"));
__export(require("./cacheproxyloader"));
export * from './batchloader';
export * from './mappedbatchloader';
export * from './cacheproxyloader';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,yCAAoC;AACpC,wCAAmC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}

@@ -10,1 +10,2 @@ import { IBatchLoader } from './types';

}
//# sourceMappingURL=mappedbatchloader.d.ts.map

@@ -1,4 +0,2 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class MappedBatchLoader {
export class MappedBatchLoader {
constructor(loader, mapFn) {

@@ -30,3 +28,2 @@ this.loader = loader;

}
exports.MappedBatchLoader = MappedBatchLoader;
//# sourceMappingURL=mappedbatchloader.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"mappedbatchloader.js","sourceRoot":"","sources":["../src/mappedbatchloader.ts"],"names":[],"mappings":";;AAEA,MAAa,iBAAiB;IAE5B,YACY,MAAgC,EAChC,KAG6B;QAJ7B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAGwB;IACtC,CAAC;IAEG,IAAI,CAAC,GAAQ;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,OAAO,GAA8C,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU;oBACR,UAAU;wBACV,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CACd,KAAsD;QAEtD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AAnCD,8CAmCC"}
{"version":3,"file":"mappedbatchloader.js","sourceRoot":"","sources":["../src/mappedbatchloader.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IAE5B,YACY,MAAgC,EAChC,KAG6B;QAJ7B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAGwB;IACtC,CAAC;IAEG,IAAI,CAAC,GAAQ;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAEM,QAAQ,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,OAAO,GAA8C,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU;oBACR,UAAU;wBACV,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CACd,KAAsD;QAEtD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF"}

@@ -7,1 +7,2 @@ export interface IBatchLoader<Key, Value> {

export declare type MaybePromise<T> = T | Promise<T>;
//# sourceMappingURL=types.d.ts.map

@@ -1,3 +0,1 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{
"name": "batchloader",
"version": "0.0.16",
"version": "0.0.17",
"description": "BatchLoader is a utility for data fetching layer to reduce requests via batching written in TypeScript. Inspired by Facebook's DataLoader",
"main": "lib/index.js",
"module": "lib/index.js",
"main": "dist/node/index.js",
"browser": "dist/browser/index.js",
"types": "lib/index.d.ts",
"scripts": {
"all": "npm run clean && npm run format && npm run lint:fix && npm run test && npm run build && npm run build:es5",
"build": "tsc -p ./tsconfig.json && tscpaths -p ./tsconfig.json -s ./src -o ./lib",
"build:es5": "tsc -p ./tsconfig.es5.json && tscpaths -p ./tsconfig.es5.json -s ./src -o ./es5",
"clean": "rm -rf ./lib ./es5 ./es6 ./coverage",
"all": "npm run clean && npm run format && npm run lint:fix && npm run build:all && npm run test",
"build:all": "npm run build:module && npm run build:node && npm run build:browser",
"build:browser": "tsc -p ./tsconfig.browser.json && tscpaths -p ./tsconfig.browser.json -s ./src -o ./dist/browser",
"build:module": "tsc -p ./tsconfig.module.json && tscpaths -p ./tsconfig.module.json -s ./src -o ./lib",
"build:node": "tsc -p ./tsconfig.node.json && tscpaths -p ./tsconfig.node.json -s ./src -o ./dist/node",
"clean": "rm -rf ./lib ./dist ./coverage",
"format": "prettier --write \"./*.{js,jsx,ts,tsx}\" \"./src/**/*.{js,jsx,ts,tsx}\"",
"lint": "tslint -c ./tslint.json \"src/**/*\"",
"lint:fix": "tslint --fix -c ./tslint.json \"src/**/*\"",
"lint": "tslint -c ./tslint.json \"src/**/*.ts\"",
"lint:fix": "tslint --fix -c ./tslint.json \"src/**/*.ts\"",
"precommit": "npm run all",
"prepublish": "npm run all",
"reinstall": "rm -rf ./node_modules ./package-lock.json ./yarn.lock && npm i",
"reinstall": "rm -rf ./node_modules ./package-lock.json ./yarn.lock && yarn",
"start": "npm run test",

@@ -43,3 +47,3 @@ "test": "jest",

"@types/jest": "^24.0.15",
"@types/node": "^12.0.12",
"@types/node": "^12.6.2",
"coveralls": "^3.0.4",

@@ -54,4 +58,4 @@ "jest": "^24.8.0",

"tslint-config-prettier": "^1.18.0",
"typescript": "^3.5.2"
"typescript": "^3.5.3"
}
}

Sorry, the diff of this file is not supported yet

import { CacheLoader, ICache } from './cacheloader';
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader } from './types';
export declare type BatchLoadFn<Key, Value> = (keys: Key[]) => Value[] | Promise<Value[]>;
export declare type KeyToUniqueId<Key> = (key: Key) => string;
export declare class BatchLoader<Key, Value> implements IBatchLoader<Key, Value> {
protected batchFn: BatchLoadFn<Key, Value>;
protected keyToUniqueId: KeyToUniqueId<Key> | null;
protected batchDelay: number;
protected batchSize: number;
protected queuedKeys: Key[];
protected batchPromise: Promise<Value[]> | null;
constructor(batchFn: BatchLoadFn<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number, batchSize?: number);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
cacheLoader(cache?: ICache<Key, Value>): CacheLoader<Key, Value>;
protected triggerBatch(): Promise<Value[]>;
protected runBatchNow(): Promise<Value[]>;
private maybeBatchInChunks;
private batchInChunks;
}
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var cacheloader_1 = require("./cacheloader");
var mappedbatchloader_1 = require("./mappedbatchloader");
var sleep = function (ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
};
var BatchLoader = (function () {
function BatchLoader(batchFn, keyToUniqueId, batchDelay, batchSize) {
if (batchDelay === void 0) { batchDelay = 0; }
if (batchSize === void 0) { batchSize = Number.MAX_SAFE_INTEGER; }
this.batchFn = batchFn;
this.keyToUniqueId = keyToUniqueId;
this.batchDelay = batchDelay;
this.batchSize = batchSize;
this.queuedKeys = [];
this.batchPromise = null;
}
BatchLoader.prototype.load = function (key) {
var queuedKeys = this.queuedKeys;
var index = queuedKeys.length;
queuedKeys.push(key);
return this.triggerBatch().then(function (values) { return values[index]; });
};
BatchLoader.prototype.loadMany = function (keys) {
if (keys.length) {
var queuedKeys = this.queuedKeys;
var index_1 = queuedKeys.length;
queuedKeys.push.apply(queuedKeys, keys);
var length_1 = keys.length;
return this.triggerBatch().then(function (values) {
return values.slice(index_1, index_1 + length_1);
});
}
return Promise.resolve([]);
};
BatchLoader.prototype.mapLoader = function (mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
};
BatchLoader.prototype.cacheLoader = function (cache) {
return new cacheloader_1.CacheLoader(this, cache);
};
BatchLoader.prototype.triggerBatch = function () {
var _this = this;
return (this.batchPromise ||
(this.batchPromise = new Promise(function (resolve, reject) {
setTimeout(function () {
_this.batchPromise = null;
_this.runBatchNow().then(resolve, reject);
}, _this.batchDelay);
})));
};
BatchLoader.prototype.runBatchNow = function () {
var _a = this, queuedKeys = _a.queuedKeys, keyToUniqueId = _a.keyToUniqueId;
this.queuedKeys = [];
if (keyToUniqueId) {
var idMap = {};
var indexToId_1 = [];
var idToNewIndex_1 = {};
var newIndex = 0;
var uniqueKeys = [];
var len = queuedKeys.length;
for (var i = 0; i < len; i += 1) {
var key = queuedKeys[i];
var id = keyToUniqueId(key);
indexToId_1[i] = id;
if (idMap[id] !== true) {
idMap[id] = true;
idToNewIndex_1[id] = newIndex;
newIndex += 1;
uniqueKeys.push(key);
}
}
return this.maybeBatchInChunks(uniqueKeys).then(function (values) {
return queuedKeys.map(function (_key, i) { return values[idToNewIndex_1[indexToId_1[i]]]; });
});
}
return this.maybeBatchInChunks(queuedKeys);
};
BatchLoader.prototype.maybeBatchInChunks = function (keys) {
if (keys.length <= this.batchSize) {
return Promise.resolve(this.batchFn(keys));
}
return this.batchInChunks(keys);
};
BatchLoader.prototype.batchInChunks = function (keys) {
return __awaiter(this, void 0, void 0, function () {
var _a, batchSize, batchDelay, promises, kLen, i, results, rLen, values, i;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this, batchSize = _a.batchSize, batchDelay = _a.batchDelay;
promises = [];
kLen = keys.length;
i = 0;
_b.label = 1;
case 1:
if (!(i < kLen)) return [3, 4];
promises.push(this.batchFn(keys.slice(i, i + batchSize)));
if (!batchDelay) return [3, 3];
return [4, sleep(batchDelay)];
case 2:
_b.sent();
_b.label = 3;
case 3:
i += batchSize;
return [3, 1];
case 4: return [4, Promise.all(promises)];
case 5:
results = _b.sent();
rLen = results.length;
values = [];
for (i = 0; i < rLen; i += 1) {
values = values.concat(results[i]);
}
return [2, values];
}
});
});
};
return BatchLoader;
}());
exports.BatchLoader = BatchLoader;
//# sourceMappingURL=batchloader.js.map
{"version":3,"file":"batchloader.js","sourceRoot":"","sources":["../src/batchloader.ts"],"names":[],"mappings":"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"}
import { MappedBatchLoader } from './mappedbatchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface ICache<Key, Value> {
clear(): void;
delete(key: Key): boolean;
get(key: Key): Value | undefined;
set(key: Key, value: Value): void;
}
export declare class CacheLoader<Key, Value> implements IBatchLoader<Key, Value>, ICache<Key, MaybePromise<Value>> {
protected loader: IBatchLoader<Key, Value>;
cache: ICache<Key, Value>;
promiseCache: Map<Key, Promise<Value>>;
constructor(loader: IBatchLoader<Key, Value>, cache?: ICache<Key, Value>);
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value, key: Key) => MappedValue): MappedBatchLoader<Key, Value, MappedValue>;
get(key: Key): Promise<Value> | undefined;
set(key: Key, value: Value): void;
delete(key: Key): boolean;
clear(): void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var mappedbatchloader_1 = require("./mappedbatchloader");
var CacheLoader = (function () {
function CacheLoader(loader, cache) {
if (cache === void 0) { cache = new Map(); }
this.loader = loader;
this.cache = cache;
this.promiseCache = new Map();
}
CacheLoader.prototype.load = function (key) {
var _this = this;
var promiseCache = this.promiseCache;
var pv = promiseCache.get(key);
if (pv) {
return pv;
}
var value = this.cache.get(key);
pv =
value === undefined
? this.loader.load(key).then(function (val) {
_this.set(key, val);
return val;
})
: Promise.resolve(value);
promiseCache.set(key, pv);
return pv;
};
CacheLoader.prototype.loadMany = function (keys) {
var _this = this;
return Promise.all(keys.map(function (key) { return _this.load(key); }));
};
CacheLoader.prototype.mapLoader = function (mapFn) {
return new mappedbatchloader_1.MappedBatchLoader(this, mapFn);
};
CacheLoader.prototype.get = function (key) {
var pv = this.promiseCache.get(key);
if (pv) {
return pv;
}
var v = this.cache.get(key);
if (v === undefined) {
return undefined;
}
pv = Promise.resolve(v);
this.promiseCache.set(key, pv);
return pv;
};
CacheLoader.prototype.set = function (key, value) {
this.promiseCache.delete(key);
this.cache.set(key, value);
};
CacheLoader.prototype.delete = function (key) {
var pDeleted = this.promiseCache.delete(key);
var deleted = this.cache.delete(key);
return pDeleted || deleted;
};
CacheLoader.prototype.clear = function () {
this.promiseCache.clear();
this.cache.clear();
};
return CacheLoader;
}());
exports.CacheLoader = CacheLoader;
//# sourceMappingURL=cacheloader.js.map
{"version":3,"file":"cacheloader.js","sourceRoot":"","sources":["../src/cacheloader.ts"],"names":[],"mappings":";;AAAA,2DAA0D;AAU1D;IAIE,qBACY,MAAgC,EACnC,KAAiD;QAAjD,sBAAA,EAAA,YAAgC,GAAG,EAAc;QAD9C,WAAM,GAAN,MAAM,CAA0B;QACnC,UAAK,GAAL,KAAK,CAA4C;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,CAAC;IAEM,0BAAI,GAAX,UAAY,GAAQ;QAApB,iBAgBC;QAfS,IAAA,gCAAY,CAAU;QAC9B,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE;YACA,KAAK,KAAK,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;oBAC7B,KAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,8BAAQ,GAAf,UAAgB,IAAW;QAA3B,iBAEC;QADC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,+BAAS,GAAhB,UACE,KAA8C;QAE9C,OAAO,IAAI,qCAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,yBAAG,GAAV,UAAW,GAAQ;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QACD,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,SAAS,CAAC;SAClB;QACD,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,yBAAG,GAAV,UAAW,GAAQ,EAAE,KAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,4BAAM,GAAb,UAAc,GAAQ;QACpB,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,QAAQ,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEM,2BAAK,GAAZ;QACE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACH,kBAAC;AAAD,CAAC,AApED,IAoEC;AApEY,kCAAW"}
import { BatchLoader, KeyToUniqueId } from './batchloader';
import { IBatchLoader, MaybePromise } from './types';
export interface IBatchCache<Key, Value> {
mget: (keys: Key[]) => MaybePromise<Array<Value | undefined>>;
mset: (keyValues: Array<[Key, Value]>) => MaybePromise<void>;
}
export declare const proxyLoaderWithCache: <Key, Value>(cache: IBatchCache<Key, Value>, loader: IBatchLoader<Key, Value>, keyToUniqueId: KeyToUniqueId<Key> | null, batchDelay?: number | undefined, batchSize?: number | undefined) => BatchLoader<Key, Value>;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var _this = this;
Object.defineProperty(exports, "__esModule", { value: true });
var batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = function (cache, loader, keyToUniqueId, batchDelay, batchSize) {
return new batchloader_1.BatchLoader(function (keys) { return __awaiter(_this, void 0, void 0, function () {
var values, len, missingKeys, missingIndexes, i, missingValues, mlen, missingKeyValues, i, value;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, cache.mget(keys)];
case 1:
values = _a.sent();
len = values.length;
missingKeys = [];
missingIndexes = [];
for (i = 0; i < len; i += 1) {
if (values[i] === undefined) {
missingKeys.push(keys[i]);
missingIndexes.push(i);
}
}
if (!missingKeys.length) return [3, 3];
return [4, loader.loadMany(missingKeys)];
case 2:
missingValues = _a.sent();
mlen = missingValues.length;
missingKeyValues = [];
for (i = 0; i < mlen; i += 1) {
value = missingValues[i];
values[missingIndexes[i]] = value;
missingKeyValues.push([missingKeys[i], value]);
}
cache.mset(missingKeyValues);
_a.label = 3;
case 3: return [2, values];
}
});
}); }, keyToUniqueId, batchDelay, batchSize);
};
//# sourceMappingURL=cacheproxyloader.js.map
{"version":3,"file":"cacheproxyloader.js","sourceRoot":"","sources":["../src/cacheproxyloader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iBAiDA;;AAjDA,+CAA6D;AAQhD,QAAA,oBAAoB,GAAG,UAClC,KAA8B,EAC9B,MAAgC,EAChC,aAAwC,EACxC,UAAmB,EACnB,SAAkB;IAElB,OAAA,IAAI,yBAAW,CACb,UAAO,IAAI;;;;wBACM,WAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAA/B,MAAM,GAAG,SAAsB;oBAE/B,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;oBACpB,WAAW,GAAU,EAAE,CAAC;oBACxB,cAAc,GAAa,EAAE,CAAC;oBACpC,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;4BAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC1B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACxB;qBACF;yBAEG,WAAW,CAAC,MAAM,EAAlB,cAAkB;oBACE,WAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAA;;oBAAlD,aAAa,GAAG,SAAkC;oBAClD,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;oBAC5B,gBAAgB,GAAwB,EAAE,CAAC;oBACjD,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC1B,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;wBAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;qBAChD;oBAGD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;wBAG/B,WAAO,MAAiB,EAAC;;;SAC1B,EACD,aAAa,EACb,UAAU,EACV,SAAS,CACV;AAjCD,CAiCC,CAAC"}
export * from './batchloader';
export * from './mappedbatchloader';
export * from './cacheproxyloader';
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./batchloader"));
__export(require("./mappedbatchloader"));
__export(require("./cacheproxyloader"));
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,yCAAoC;AACpC,wCAAmC"}
import { IBatchLoader } from './types';
export declare class MappedBatchLoader<Key, Value, MappedValue> implements IBatchLoader<Key, MappedValue> {
protected loader: IBatchLoader<Key, Value>;
protected mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>;
constructor(loader: IBatchLoader<Key, Value>, mapFn: (value: Value, key: Key) => MappedValue | Promise<MappedValue>);
load(key: Key): Promise<MappedValue>;
loadMany(keys: Key[]): Promise<MappedValue[]>;
mapLoader<RemappedValue>(mapFn: (value: MappedValue, key: Key) => RemappedValue): MappedBatchLoader<Key, MappedValue, RemappedValue>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MappedBatchLoader = (function () {
function MappedBatchLoader(loader, mapFn) {
this.loader = loader;
this.mapFn = mapFn;
}
MappedBatchLoader.prototype.load = function (key) {
var _this = this;
return this.loader.load(key).then(function (value) { return _this.mapFn(value, key); });
};
MappedBatchLoader.prototype.loadMany = function (keys) {
var _this = this;
return this.loader.loadMany(keys).then(function (values) {
var hasPromise = false;
var results = [];
var len = values.length;
for (var i = 0; i < len; i += 1) {
var res = _this.mapFn(values[i], keys[i]);
results.push(res);
hasPromise =
hasPromise ||
(res != null && typeof res.then === 'function');
}
return hasPromise ? Promise.all(results) : results;
});
};
MappedBatchLoader.prototype.mapLoader = function (mapFn) {
return new MappedBatchLoader(this, mapFn);
};
return MappedBatchLoader;
}());
exports.MappedBatchLoader = MappedBatchLoader;
//# sourceMappingURL=mappedbatchloader.js.map
{"version":3,"file":"mappedbatchloader.js","sourceRoot":"","sources":["../src/mappedbatchloader.ts"],"names":[],"mappings":";;AAEA;IAEE,2BACY,MAAgC,EAChC,KAG6B;QAJ7B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAGwB;IACtC,CAAC;IAEG,gCAAI,GAAX,UAAY,GAAQ;QAApB,iBAEC;QADC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAtB,CAAsB,CAAC,CAAC;IACvE,CAAC;IAEM,oCAAQ,GAAf,UAAgB,IAAW;QAA3B,iBAcC;QAbC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,MAAM;YAC5C,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAM,OAAO,GAA8C,EAAE,CAAC;YAC9D,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,IAAM,GAAG,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU;oBACR,UAAU;wBACV,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,qCAAS,GAAhB,UACE,KAAsD;QAEtD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACH,wBAAC;AAAD,CAAC,AAnCD,IAmCC;AAnCY,8CAAiB"}
export interface IBatchLoader<Key, Value> {
load(key: Key): Promise<Value>;
loadMany(keys: Key[]): Promise<Value[]>;
mapLoader<MappedValue>(mapFn: (value: Value) => MappedValue): IBatchLoader<Key, MappedValue>;
}
export declare type MaybePromise<T> = T | Promise<T>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}