UNPKG

@spartacus/core

Version:

Spartacus - the core framework

76 lines 8.73 kB
export function shallowEqualObjects(objA, objB) { if (objA === objB) { return true; } if (!objA || !objB) { return false; } const aKeys = Object.keys(objA); const bKeys = Object.keys(objB); const aKeysLen = aKeys.length; const bKeysLen = bKeys.length; if (aKeysLen !== bKeysLen) { return false; } for (let i = 0; i < aKeysLen; i++) { const key = aKeys[i]; if (objA[key] !== objB[key]) { return false; } } return true; } export function deepEqualObjects(objA, objB) { if (objA === objB) { return true; // if both objA and objB are null or undefined and exactly the same } else if (!(objA instanceof Object) || !(objB instanceof Object)) { return false; // if they are not strictly equal, they both need to be Objects } else if (objA.constructor !== objB.constructor) { // they must have the exact same prototype chain, the closest we can do is // test their constructor. return false; } else { for (const key in objA) { if (!objA.hasOwnProperty(key)) { continue; // other properties were tested using objA.constructor === y.constructor } if (!objB.hasOwnProperty(key)) { return false; // allows to compare objA[ key ] and objB[ key ] when set to undefined } if (objA[key] === objB[key]) { continue; // if they have the same strict value or identity then they are equal } if (typeof objA[key] !== 'object') { return false; // Numbers, Strings, Functions, Booleans must be strictly equal } if (!deepEqualObjects(objA[key], objB[key])) { return false; } } for (const key in objB) { if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) { return false; } } return true; } } export function countOfDeepEqualObjects(obj, arr) { return arr.reduce((acc, curr) => { if (deepEqualObjects(obj, curr)) { acc++; } return acc; }, 0); } export function indexOfFirstOccurrence(obj, arr) { for (let index = 0; index < arr.length; index++) { if (deepEqualObjects(arr[index], obj)) { return index; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1lcXVhbC1vYmplY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvdXRpbC9jb21wYXJlLWVxdWFsLW9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVksRUFBRSxJQUFZO0lBQzVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU5QixJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDekIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDekQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLENBQUMsbUVBQW1FO0tBQ2pGO1NBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLEVBQUU7UUFDakUsT0FBTyxLQUFLLENBQUMsQ0FBQywrREFBK0Q7S0FDOUU7U0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoRCwwRUFBMEU7UUFDMUUsMEJBQTBCO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTTtRQUNMLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixTQUFTLENBQUMsd0VBQXdFO2FBQ25GO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUMsc0VBQXNFO2FBQ3JGO1lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixTQUFTLENBQUMscUVBQXFFO2FBQ2hGO1lBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxDQUFDLENBQUMsK0RBQStEO2FBQzlFO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDM0MsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekQsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBUSxFQUFFLEdBQWU7SUFDL0QsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzlCLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxDQUFDO1NBQ1A7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEdBQVEsRUFDUixHQUFlO0lBRWYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKG9iakE6IG9iamVjdCwgb2JqQjogb2JqZWN0KTogYm9vbGVhbiB7XG4gIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFvYmpBIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMob2JqQik7XG4gIGNvbnN0IGFLZXlzTGVuID0gYUtleXMubGVuZ3RoO1xuICBjb25zdCBiS2V5c0xlbiA9IGJLZXlzLmxlbmd0aDtcblxuICBpZiAoYUtleXNMZW4gIT09IGJLZXlzTGVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYUtleXNMZW47IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGFLZXlzW2ldO1xuICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbE9iamVjdHMob2JqQTogb2JqZWN0LCBvYmpCOiBvYmplY3QpOiBib29sZWFuIHtcbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gaWYgYm90aCBvYmpBIGFuZCBvYmpCIGFyZSBudWxsIG9yIHVuZGVmaW5lZCBhbmQgZXhhY3RseSB0aGUgc2FtZVxuICB9IGVsc2UgaWYgKCEob2JqQSBpbnN0YW5jZW9mIE9iamVjdCkgfHwgIShvYmpCIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gaWYgdGhleSBhcmUgbm90IHN0cmljdGx5IGVxdWFsLCB0aGV5IGJvdGggbmVlZCB0byBiZSBPYmplY3RzXG4gIH0gZWxzZSBpZiAob2JqQS5jb25zdHJ1Y3RvciAhPT0gb2JqQi5jb25zdHJ1Y3Rvcikge1xuICAgIC8vIHRoZXkgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIHByb3RvdHlwZSBjaGFpbiwgdGhlIGNsb3Nlc3Qgd2UgY2FuIGRvIGlzXG4gICAgLy8gdGVzdCB0aGVpciBjb25zdHJ1Y3Rvci5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqQSkge1xuICAgICAgaWYgKCFvYmpBLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29udGludWU7IC8vIG90aGVyIHByb3BlcnRpZXMgd2VyZSB0ZXN0ZWQgdXNpbmcgb2JqQS5jb25zdHJ1Y3RvciA9PT0geS5jb25zdHJ1Y3RvclxuICAgICAgfVxuICAgICAgaWYgKCFvYmpCLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhbGxvd3MgdG8gY29tcGFyZSBvYmpBWyBrZXkgXSBhbmQgb2JqQlsga2V5IF0gd2hlbiBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAob2JqQVtrZXldID09PSBvYmpCW2tleV0pIHtcbiAgICAgICAgY29udGludWU7IC8vIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzdHJpY3QgdmFsdWUgb3IgaWRlbnRpdHkgdGhlbiB0aGV5IGFyZSBlcXVhbFxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvYmpBW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTnVtYmVycywgU3RyaW5ncywgRnVuY3Rpb25zLCBCb29sZWFucyBtdXN0IGJlIHN0cmljdGx5IGVxdWFsXG4gICAgICB9XG4gICAgICBpZiAoIWRlZXBFcXVhbE9iamVjdHMob2JqQVtrZXldLCBvYmpCW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqQikge1xuICAgICAgaWYgKG9iakIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhb2JqQS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50T2ZEZWVwRXF1YWxPYmplY3RzKG9iajogYW55LCBhcnI6IEFycmF5PGFueT4pOiBudW1iZXIge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgaWYgKGRlZXBFcXVhbE9iamVjdHMob2JqLCBjdXJyKSkge1xuICAgICAgYWNjKys7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZkZpcnN0T2NjdXJyZW5jZShcbiAgb2JqOiBhbnksXG4gIGFycjogQXJyYXk8YW55PlxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoZGVlcEVxdWFsT2JqZWN0cyhhcnJbaW5kZXhdLCBvYmopKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG59XG4iXX0=