UNPKG

nope-js-node

Version:

NoPE Runtime for Nodejs. For Browser-Support please use nope-browser

98 lines (97 loc) 3.51 kB
"use strict"; /** * @author Martin Karkowski * @email m.karkowski@zema.de * @desc [description] */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MapBasedMergeData = exports.MergeData = void 0; const nopeEventEmitter_1 = require("../eventEmitter/nopeEventEmitter"); const setMethods_1 = require("../helpers/setMethods"); const nopeObservable_1 = require("../observables/nopeObservable"); const mapMethods_1 = require("./mapMethods"); class MergeData { constructor(originalData, _extractData) { this.originalData = originalData; this._extractData = _extractData; this.onChange = new nopeEventEmitter_1.NopeEventEmitter(); this.data = new nopeObservable_1.NopeObservable(); this.data.setContent([]); } /** * Update the underlying data. * * @author M.Karkowski * @param {*} [data=this.originalData] * @memberof MergeData */ update(data = null, force = false) { if (data !== null) { this.originalData = data; } const afterAdding = this._extractData(this.originalData); const diff = (0, setMethods_1.determineDifference)(new Set(this.data.getContent()), afterAdding); if (force || diff.removed.size > 0 || diff.added.size > 0) { // Update the currently used subscriptions this.data.setContent(Array.from(afterAdding)); // Now emit, that there is a new subscription. this.onChange.emit({ added: Array.from(diff.added), removed: Array.from(diff.removed), }); } } /** * Disposes the Element. * * @author M.Karkowski * @memberof MergeData */ dispose() { this.data.dispose(); this.onChange.dispose(); } } exports.MergeData = MergeData; class MapBasedMergeData extends MergeData { constructor(originalData, _path = "", _pathKey = null) { super(originalData, (m) => { return (0, mapMethods_1.extractUniqueValues)(m, _path, _pathKey); }); this._path = _path; this._pathKey = _pathKey; this.amountOf = new Map(); this.simplified = new Map(); this.keyMapping = new Map(); this.keyMappingReverse = new Map(); this.conflicts = new Map(); this.orgKeyToExtractedValue = new Map(); this.extractedKey = []; this.extractedValue = []; } /** * Update the underlying data. * * @author M.Karkowski * @param {*} [data=this.originalData] * @memberof MergeData */ update(data = null) { if (data !== null) { this.originalData = data; } // Now lets update the amount of the data: const result = (0, mapMethods_1.tranformMap)(this.originalData, this._path, this._pathKey); // Now assign the results to our items. this.simplified = result.extractedMap; this.amountOf = result.amountOf; this.keyMapping = result.keyMapping; this.keyMappingReverse = result.keyMappingReverse; this.conflicts = result.conflicts; this.orgKeyToExtractedValue = result.orgKeyToExtractedValue; this.extractedKey = [...this.simplified.keys()]; this.extractedValue = [...this.simplified.values()]; super.update(data); } } exports.MapBasedMergeData = MapBasedMergeData;