UNPKG

@push.rocks/lik

Version:

Provides a collection of lightweight helpers and utilities for Node.js projects.

109 lines (108 loc) 7.01 kB
/* =========== The InterestMap is an mechanism that collects interests into something An interest is expressed by an object, string or number. A comparison func can be specified to make interests comparable For every unique interestId an interest is created. Subssequent interests will be mapped to the same interest which is then is only fullfilled once. =========== */ import * as plugins from './classes.plugins.js'; import { ObjectMap } from './classes.objectmap.js'; import { Interest } from './classes.interestmap.interest.js'; export class InterestMap { options; /** * stores interests that are currently fullfilled by the cache */ interestObjectMap = new ObjectMap(); /** * O(1) lookup of interests by their comparison string */ interestsByComparisonString = new Map(); /** * a function to compare interests */ comparisonFunc; constructor(comparisonFuncArg, optionsArg = {}) { this.comparisonFunc = comparisonFuncArg; this.options = optionsArg; } /** * adds an interest to the InterestMap * @param interestId */ async addInterest(interestId, defaultFullfillmentArg) { const comparisonString = this.comparisonFunc(interestId); let returnInterest; const existingInterest = this.interestsByComparisonString.get(comparisonString); if (existingInterest) { returnInterest = existingInterest; returnInterest.renew(); } else { returnInterest = new Interest(this, interestId, this.comparisonFunc, { markLostAfterDefault: this.options.markLostAfterDefault, defaultFullfillment: defaultFullfillmentArg, }); this.interestObjectMap.add(returnInterest); this.interestsByComparisonString.set(comparisonString, returnInterest); } this.interestObservable.push(returnInterest); return returnInterest; } interestObservable = new plugins.smartrx.ObservableIntake(); /** * removes an interest from the interest map */ removeInterest(interestArg) { this.interestObjectMap.findOneAndRemoveSync((interestArg2) => { return interestArg.comparisonString === interestArg2.comparisonString; }); this.interestsByComparisonString.delete(interestArg.comparisonString); } /** * check interest */ checkInterest(objectArg) { const comparisonString = this.comparisonFunc(objectArg); return this.checkInterestByString(comparisonString); } /** * checks an interest * @param comparisonStringArg */ checkInterestByString(comparisonStringArg) { return this.interestsByComparisonString.has(comparisonStringArg); } /** * inform lost interest * @param interestId */ informLostInterest(interestId) { const wantedInterest = this.findInterest(interestId); if (wantedInterest) { wantedInterest.markLost(); } } /** * finds an interest * @param interestId */ findInterest(interestId) { const comparableString = this.comparisonFunc(interestId); return this.interestsByComparisonString.get(comparableString) ?? null; } /** * destroys the InterestMap and cleans up all resources */ destroy() { const interests = this.interestObjectMap.getArray(); for (const interest of interests) { interest.destroy(); } this.interestObjectMap.wipe(); this.interestsByComparisonString.clear(); this.interestObservable.signalComplete(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pbnRlcmVzdG1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O2NBUWM7QUFFZCxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFRN0QsTUFBTSxPQUFPLFdBQVc7SUFDZixPQUFPLENBQXNCO0lBRXBDOztPQUVHO0lBQ0ssaUJBQWlCLEdBQUcsSUFBSSxTQUFTLEVBQWtELENBQUM7SUFFNUY7O09BRUc7SUFDSywyQkFBMkIsR0FBRyxJQUFJLEdBQUcsRUFBMEQsQ0FBQztJQUV4Rzs7T0FFRztJQUNLLGNBQWMsQ0FBd0M7SUFFOUQsWUFDRSxpQkFBd0QsRUFDeEQsYUFBa0MsRUFBRTtRQUVwQyxJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUN0QixVQUF3QixFQUN4QixzQkFBK0M7UUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksY0FBOEQsQ0FBQztRQUVuRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRixJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1lBQ2xDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsR0FBRyxJQUFJLFFBQVEsQ0FDM0Is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