UNPKG

ngrx-forms

Version:

Proper integration of forms in Angular 4 applications using ngrx

92 lines 12.1 kB
export function isEmpty(obj) { return Object.keys(obj).length === 0; } const defaultOptions = { treatUndefinedAndMissingKeyAsSame: false, }; export function deepEquals(_1, _2, options = {}) { const { treatUndefinedAndMissingKeyAsSame } = Object.assign({}, defaultOptions, options); const leftChain = []; const rightChain = []; function compare2Objects(x, y) { let p; // remember that NaN === NaN returns false // and isNaN(undefined) returns true if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { return true; } // Compare primitives and functions. // Check if both arguments link to the same object. // Especially useful on the step where we compare prototypes if (x === y) { return true; } // Works in case when functions are created in constructor. // Comparing dates is a common scenario. Another built-ins? // We can even handle functions passed across iframes if ((typeof x === 'function' && typeof y === 'function') || (x instanceof Date && y instanceof Date) || (x instanceof RegExp && y instanceof RegExp) || (x instanceof String && y instanceof String) || (x instanceof Number && y instanceof Number)) { return x.toString() === y.toString(); } // At last checking prototypes as good as we can if (!(x instanceof Object && y instanceof Object)) { return false; } if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) { return false; } if (x.constructor !== y.constructor) { return false; } // Check for infinitive linking loops if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) { return false; } // Quick checking of one object being a subset of another. for (p in y) { if (treatUndefinedAndMissingKeyAsSame && y.hasOwnProperty(p) && !x.hasOwnProperty(p) && y[p] === undefined) { continue; } if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { return false; } else if (typeof y[p] !== typeof x[p]) { return false; } } // tslint:disable:forin for (p in x) { if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { if (!treatUndefinedAndMissingKeyAsSame || !x.hasOwnProperty(p) || y.hasOwnProperty(p) || x[p] !== undefined) { return false; } } switch (typeof (x[p])) { case 'object': case 'function': leftChain.push(x); rightChain.push(y); if (!compare2Objects(x[p], y[p])) { return false; } leftChain.pop(); rightChain.pop(); break; default: if (x[p] !== y[p]) { return false; } break; } } return true; } if (arguments.length <= 1) { throw new Error('Need two or more arguments to compare'); } return compare2Objects(_1, _2); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBVztJQUNqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBTUQsTUFBTSxjQUFjLEdBQWdDO0lBQ2xELGlDQUFpQyxFQUFFLEtBQUs7Q0FDekMsQ0FBQztBQUVGLE1BQU0sVUFBVSxVQUFVLENBQUksRUFBSyxFQUFFLEVBQUssRUFBRSxVQUE2QixFQUFFO0lBQ3pFLE1BQU0sRUFBRSxpQ0FBaUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV6RixNQUFNLFNBQVMsR0FBVSxFQUFFLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQVUsRUFBRSxDQUFDO0lBRTdCLFNBQVMsZUFBZSxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ3JDLElBQUksQ0FBQyxDQUFDO1FBRU4sMENBQTBDO1FBQzFDLG9DQUFvQztRQUNwQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUMxRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsb0NBQW9DO1FBQ3BDLG1EQUFtRDtRQUNuRCw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDJEQUEyRDtRQUMzRCwyREFBMkQ7UUFDM0QscURBQXFEO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDO1lBQ3RELENBQUMs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Q0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDakIsT0FBTyxLQUFLLENBQUM7cUJBQ2Q7b0JBQ0QsTUFBTTthQUNUO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUMxRDtJQUVELE9BQU8sZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkob2JqOiBvYmplY3QpIHtcclxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVlcEVxdWFsc09wdGlvbnMge1xyXG4gIHRyZWF0VW5kZWZpbmVkQW5kTWlzc2luZ0tleUFzU2FtZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1aXJlZDxEZWVwRXF1YWxzT3B0aW9ucz4gPSB7XHJcbiAgdHJlYXRVbmRlZmluZWRBbmRNaXNzaW5nS2V5QXNTYW1lOiBmYWxzZSxcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWxzPFQ+KF8xOiBULCBfMjogVCwgb3B0aW9uczogRGVlcEVxdWFsc09wdGlvbnMgPSB7fSkge1xyXG4gIGNvbnN0IHsgdHJlYXRVbmRlZmluZWRBbmRNaXNzaW5nS2V5QXNTYW1lIH0gPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XHJcblxyXG4gIGNvbnN0IGxlZnRDaGFpbjogYW55W10gPSBbXTtcclxuICBjb25zdCByaWdodENoYWluOiBhbnlbXSA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiBjb21wYXJlMk9iamVjdHMoeDogYW55LCB5OiBhbnkpIHtcclxuICAgIGxldCBwO1xyXG5cclxuICAgIC8vIHJlbWVtYmVyIHRoYXQgTmFOID09PSBOYU4gcmV0dXJucyBmYWxzZVxyXG4gICAgLy8gYW5kIGlzTmFOKHVuZGVmaW5lZCkgcmV0dXJucyB0cnVlXHJcbiAgICBpZiAoaXNOYU4oeCkgJiYgaXNOYU4oeSkgJiYgdHlwZW9mIHggPT09ICdudW1iZXInICYmIHR5cGVvZiB5ID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb21wYXJlIHByaW1pdGl2ZXMgYW5kIGZ1bmN0aW9ucy5cclxuICAgIC8vIENoZWNrIGlmIGJvdGggYXJndW1lbnRzIGxpbmsgdG8gdGhlIHNhbWUgb2JqZWN0LlxyXG4gICAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIHN0ZXAgd2hlcmUgd2UgY29tcGFyZSBwcm90b3R5cGVzXHJcbiAgICBpZiAoeCA9PT0geSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXb3JrcyBpbiBjYXNlIHdoZW4gZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGluIGNvbnN0cnVjdG9yLlxyXG4gICAgLy8gQ29tcGFyaW5nIGRhdGVzIGlzIGEgY29tbW9uIHNjZW5hcmlvLiBBbm90aGVyIGJ1aWx0LWlucz9cclxuICAgIC8vIFdlIGNhbiBldmVuIGhhbmRsZSBmdW5jdGlvbnMgcGFzc2VkIGFjcm9zcyBpZnJhbWVzXHJcbiAgICBpZiAoKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB5ID09PSAnZnVuY3Rpb24nKSB8fFxyXG4gICAgICAoeCBpbnN0YW5jZW9mIERhdGUgJiYgeSBpbnN0YW5jZW9mIERhdGUpIHx8XHJcbiAgICAgICh4IGluc3RhbmNlb2YgUmVnRXhwICYmIHkgaW5zdGFuY2VvZiBSZWdFeHApIHx8XHJcbiAgICAgICh4IGluc3RhbmNlb2YgU3RyaW5nICYmIHkgaW5zdGFuY2VvZiBTdHJpbmcpIHx8XHJcbiAgICAgICh4IGluc3RhbmNlb2YgTnVtYmVyICYmIHkgaW5zdGFuY2VvZiBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiB4LnRvU3RyaW5nKCkgPT09IHkudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBdCBsYXN0IGNoZWNraW5nIHByb3RvdHlwZXMgYXMgZ29vZCBhcyB3ZSBjYW5cclxuICAgIGlmICghKHggaW5zdGFuY2VvZiBPYmplY3QgJiYgeSBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh4LmlzUHJvdG90eXBlT2YoeSkgfHwgeS5pc1Byb3RvdHlwZU9mKHgpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5jb25zdHJ1Y3RvciAhPT0geS5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGluZmluaXRpdmUgbGlua2luZyBsb29wc1xyXG4gICAgaWYgKGxlZnRDaGFpbi5pbmRleE9mKHgpID4gLTEgfHwgcmlnaHRDaGFpbi5pbmRleE9mKHkpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFF1aWNrIGNoZWNraW5nIG9mIG9uZSBvYmplY3QgYmVpbmcgYSBzdWJzZXQgb2YgYW5vdGhlci5cclxuICAgIGZvciAocCBpbiB5KSB7XHJcbiAgICAgIGlmICh0cmVhdFVuZGVmaW5lZEFuZE1pc3NpbmdLZXlBc1NhbWUgJiYgeS5oYXNPd25Qcm9wZXJ0eShwKSAmJiAheC5oYXNPd25Qcm9wZXJ0eShwKSAmJiB5W3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHkuaGFzT3duUHJvcGVydHkocCkgIT09IHguaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHlbcF0gIT09IHR5cGVvZiB4W3BdKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGU6Zm9yaW5cclxuICAgIGZvciAocCBpbiB4KSB7XHJcbiAgICAgIGlmICh5Lmhhc093blByb3BlcnR5KHApICE9PSB4Lmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgaWYgKCF0cmVhdFVuZGVmaW5lZEFuZE1pc3NpbmdLZXlBc1NhbWUgfHwgIXguaGFzT3duUHJvcGVydHkocCkgfHwgeS5oYXNPd25Qcm9wZXJ0eShwKSB8fCB4W3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAodHlwZW9mICh4W3BdKSkge1xyXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XHJcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxyXG5cclxuICAgICAgICAgIGxlZnRDaGFpbi5wdXNoKHgpO1xyXG4gICAgICAgICAgcmlnaHRDaGFpbi5wdXNoKHkpO1xyXG5cclxuICAgICAgICAgIGlmICghY29tcGFyZTJPYmplY3RzKHhbcF0sIHlbcF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZWZ0Q2hhaW4ucG9wKCk7XHJcbiAgICAgICAgICByaWdodENoYWluLnBvcCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoeFtwXSAhPT0geVtwXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIHR3byBvciBtb3JlIGFyZ3VtZW50cyB0byBjb21wYXJlJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29tcGFyZTJPYmplY3RzKF8xLCBfMik7XHJcbn1cclxuIl19