UNPKG

@push.rocks/lik

Version:

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

102 lines (101 loc) 6.9 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 './lik.plugins.js'; import { ObjectMap } from './lik.objectmap.js'; import { Interest } from './lik.interestmap.interest.js'; export class InterestMap { constructor(comparisonFuncArg, optionsArg = {}) { /** * stores interests that are currently fullfilled by the cache */ this.interestObjectMap = new ObjectMap(); this.interestObservable = new plugins.smartrx.ObservableIntake(); 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 newInterest = new Interest(this, interestId, this.comparisonFunc, { markLostAfterDefault: this.options.markLostAfterDefault, defaultFullfillment: defaultFullfillmentArg, }); let interestExists = false; await this.interestObjectMap.forEach((interestArg) => { if (!interestExists && interestArg.comparisonString === newInterest.comparisonString) { console.log('info', `interest already exists for ${newInterest.comparisonString}`); interestExists = true; returnInterest = interestArg; returnInterest.renew(); } }); if (!returnInterest) { returnInterest = newInterest; this.interestObjectMap.add(returnInterest); } this.interestObservable.push(returnInterest); return returnInterest; } /** * removes an interest from the interest map */ removeInterest(interestArg) { const interestToRemove = this.interestObjectMap.findOneAndRemoveSync((interestArg2) => { return interestArg.comparisonString === interestArg2.comparisonString; }); } /** * check interest */ checkInterest(objectArg) { const comparisonString = this.comparisonFunc(objectArg); return this.checkInterestByString(comparisonString); } /** * checks an interest * @param comparisonStringArg */ checkInterestByString(comparisonStringArg) { const foundInterest = this.interestObjectMap.findSync((interest) => { return interest.comparisonString === comparisonStringArg; }); if (foundInterest) { return true; } else { return false; } } /** * 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); const interest = this.interestObjectMap.findSync((interestArg) => { return interestArg.comparisonString === comparableString; }); return interest; // if an interest is found, the interest is returned, otherwise interest is null } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlrLmludGVyZXN0bWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbGlrLmludGVyZXN0bWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztjQVFjO0FBRWQsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBUXpELE1BQU0sT0FBTyxXQUFXO0lBYXRCLFlBQ0UsaUJBQXdELEVBQ3hELGFBQWtDLEVBQUU7UUFadEM7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxJQUFJLFNBQVMsRUFBa0QsQ0FBQztRQW1EckYsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUErQixDQUFDO1FBeEM5RixJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUN0QixVQUF3QixFQUN4QixzQkFBK0M7UUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksY0FBOEQsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLFFBQVEsQ0FDOUIsSUFBSSxFQUNKLFVBQVUsRUFDVixJQUFJLENBQUMsY0FBYyxFQUNuQjtZQUNFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CO1lBQ3ZELG1CQUFtQixFQUFFLHNCQUFzQjtTQUM1QyxDQUNGLENBQUM7UUFDRixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFF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