@grnsft/if
Version:
Impact Framework
56 lines • 6.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compare = void 0;
const helpers_1 = require("../util/helpers");
/**
* 1. If objects are not of the same type or are primitive types, compares directly.
* 2. Gets the keys from both objects.
* 3. If both are arrays, checks their elements.
* 4. Checks for keys present in both objects.
* If key is `execution`, omit unnecessary params.
* 5. If all keys are checked and no differences are found, return empty object.
*/
const compare = (source, target, path = '') => {
if ((0, helpers_1.oneIsPrimitive)(source, target)) {
return (0, helpers_1.checkIfEqual)(source, target)
? {}
: {
path,
source,
target,
};
}
const keys1 = Object.keys(source);
const keys2 = Object.keys(target);
const allKeys = new Set([...keys1, ...keys2]);
if (path === '') {
allKeys.delete('name');
allKeys.delete('description');
allKeys.delete('tags');
}
if (path === 'initialize') {
allKeys.delete('outputs');
}
if (path === 'execution') {
const whitelist = ['status', 'error'];
allKeys.forEach(value => {
if (!whitelist.includes(value)) {
allKeys.delete(value);
}
});
}
if (Array.isArray(source) && Array.isArray(target)) {
source.forEach((_record, i) => {
(0, exports.compare)(source[i], target[i], path ? `${path}[${i}]` : `${i}`);
});
}
for (const key of allKeys) {
const result = (0, exports.compare)(source[key], target[key], path ? `${path}.${key}` : key);
if (Object.keys(result).length) {
return result;
}
}
return {};
};
exports.compare = compare;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1kaWZmL2xpYi9jb21wYXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2RDtBQUk3RDs7Ozs7OztHQU9HO0FBQ0ksTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQWMsRUFBRTtJQUN6RSxJQUFJLElBQUEsd0JBQWMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDbEMsT0FBTyxJQUFBLHNCQUFZLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNqQyxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDRSxJQUFJO2dCQUNKLE1BQU07Z0JBQ04sTUFBTTthQUNQLENBQUM7S0FDUDtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU5QyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7UUFDZixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QjtJQUVELElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtRQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNCO0lBRUQsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFBLGVBQU8sRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFPLEVBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM5QixDQUFDO1FBRUYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO0tBQ0Y7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQXREVyxRQUFBLE9BQU8sV0FzRGxCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjaGVja0lmRXF1YWwsIG9uZUlzUHJpbWl0aXZlfSBmcm9tICcuLi91dGlsL2hlbHBlcnMnO1xuXG5pbXBvcnQge0RpZmZlcmVuY2V9IGZyb20gJy4uL3R5cGVzL2NvbXBhcmUnO1xuXG4vKipcbiAqIDEuIElmIG9iamVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIG9yIGFyZSBwcmltaXRpdmUgdHlwZXMsIGNvbXBhcmVzIGRpcmVjdGx5LlxuICogMi4gR2V0cyB0aGUga2V5cyBmcm9tIGJvdGggb2JqZWN0cy5cbiAqIDMuIElmIGJvdGggYXJlIGFycmF5cywgY2hlY2tzIHRoZWlyIGVsZW1lbnRzLlxuICogNC4gQ2hlY2tzIGZvciBrZXlzIHByZXNlbnQgaW4gYm90aCBvYmplY3RzLlxuICogICAgSWYga2V5IGlzIGBleGVjdXRpb25gLCBvbWl0IHVubmVjZXNzYXJ5IHBhcmFtcy5cbiAqIDUuIElmIGFsbCBrZXlzIGFyZSBjaGVja2VkIGFuZCBubyBkaWZmZXJlbmNlcyBhcmUgZm91bmQsIHJldHVybiBlbXB0eSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wYXJlID0gKHNvdXJjZTogYW55LCB0YXJnZXQ6IGFueSwgcGF0aCA9ICcnKTogRGlmZmVyZW5jZSA9PiB7XG4gIGlmIChvbmVJc1ByaW1pdGl2ZShzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gY2hlY2tJZkVxdWFsKHNvdXJjZSwgdGFyZ2V0KVxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICB9O1xuICB9XG5cbiAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG5cbiAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoWy4uLmtleXMxLCAuLi5rZXlzMl0pO1xuXG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIGFsbEtleXMuZGVsZXRlKCduYW1lJyk7XG4gICAgYWxsS2V5cy5kZWxldGUoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgYWxsS2V5cy5kZWxldGUoJ3RhZ3MnKTtcbiAgfVxuXG4gIGlmIChwYXRoID09PSAnaW5pdGlhbGl6ZScpIHtcbiAgICBhbGxLZXlzLmRlbGV0ZSgnb3V0cHV0cycpO1xuICB9XG5cbiAgaWYgKHBhdGggPT09ICdleGVjdXRpb24nKSB7XG4gICAgY29uc3Qgd2hpdGVsaXN0ID0gWydzdGF0dXMnLCAnZXJyb3InXTtcbiAgICBhbGxLZXlzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgaWYgKCF3aGl0ZWxpc3QuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGFsbEtleXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgJiYgQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgc291cmNlLmZvckVhY2goKF9yZWNvcmQsIGkpID0+IHtcbiAgICAgIGNvbXBhcmUoc291cmNlW2ldLCB0YXJnZXRbaV0sIHBhdGggPyBgJHtwYXRofVske2l9XWAgOiBgJHtpfWApO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmUoXG4gICAgICBzb3VyY2Vba2V5XSxcbiAgICAgIHRhcmdldFtrZXldLFxuICAgICAgcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXlcbiAgICApO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7fTtcbn07XG4iXX0=