You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
13 KiB
164 lines
13 KiB
|
2 years ago
|
/*istanbul ignore start*/
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
exports.diffJson = diffJson;
|
||
|
|
exports.canonicalize = canonicalize;
|
||
|
|
exports.jsonDiff = void 0;
|
||
|
|
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
var
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_base = _interopRequireDefault(require("./base"))
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
;
|
||
|
|
|
||
|
|
var
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_line = require("./line")
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
;
|
||
|
|
|
||
|
|
/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
|
||
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||
|
|
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
var objectPrototypeToString = Object.prototype.toString;
|
||
|
|
var jsonDiff = new
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_base
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
.
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
default
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
|
||
|
|
// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
|
||
|
|
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
exports.jsonDiff = jsonDiff;
|
||
|
|
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
jsonDiff.useLongestToken = true;
|
||
|
|
jsonDiff.tokenize =
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_line
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
.
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
lineDiff
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
.tokenize;
|
||
|
|
|
||
|
|
jsonDiff.castInput = function (value) {
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
var _this$options =
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
this.options,
|
||
|
|
undefinedReplacement = _this$options.undefinedReplacement,
|
||
|
|
_this$options$stringi = _this$options.stringifyReplacer,
|
||
|
|
stringifyReplacer = _this$options$stringi === void 0 ? function (k, v)
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
{
|
||
|
|
return (
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
typeof v === 'undefined' ? undefinedReplacement : v
|
||
|
|
);
|
||
|
|
} : _this$options$stringi;
|
||
|
|
return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');
|
||
|
|
};
|
||
|
|
|
||
|
|
jsonDiff.equals = function (left, right) {
|
||
|
|
return (
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_base
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
.
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
default
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
|
||
|
|
);
|
||
|
|
};
|
||
|
|
|
||
|
|
function diffJson(oldObj, newObj, options) {
|
||
|
|
return jsonDiff.diff(oldObj, newObj, options);
|
||
|
|
} // This function handles the presence of circular references by bailing out when encountering an
|
||
|
|
// object that is already on the "stack" of items being processed. Accepts an optional replacer
|
||
|
|
|
||
|
|
|
||
|
|
function canonicalize(obj, stack, replacementStack, replacer, key) {
|
||
|
|
stack = stack || [];
|
||
|
|
replacementStack = replacementStack || [];
|
||
|
|
|
||
|
|
if (replacer) {
|
||
|
|
obj = replacer(key, obj);
|
||
|
|
}
|
||
|
|
|
||
|
|
var i;
|
||
|
|
|
||
|
|
for (i = 0; i < stack.length; i += 1) {
|
||
|
|
if (stack[i] === obj) {
|
||
|
|
return replacementStack[i];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var canonicalizedObj;
|
||
|
|
|
||
|
|
if ('[object Array]' === objectPrototypeToString.call(obj)) {
|
||
|
|
stack.push(obj);
|
||
|
|
canonicalizedObj = new Array(obj.length);
|
||
|
|
replacementStack.push(canonicalizedObj);
|
||
|
|
|
||
|
|
for (i = 0; i < obj.length; i += 1) {
|
||
|
|
canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
|
||
|
|
}
|
||
|
|
|
||
|
|
stack.pop();
|
||
|
|
replacementStack.pop();
|
||
|
|
return canonicalizedObj;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (obj && obj.toJSON) {
|
||
|
|
obj = obj.toJSON();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (
|
||
|
|
/*istanbul ignore start*/
|
||
|
|
_typeof(
|
||
|
|
/*istanbul ignore end*/
|
||
|
|
obj) === 'object' && obj !== null) {
|
||
|
|
stack.push(obj);
|
||
|
|
canonicalizedObj = {};
|
||
|
|
replacementStack.push(canonicalizedObj);
|
||
|
|
|
||
|
|
var sortedKeys = [],
|
||
|
|
_key;
|
||
|
|
|
||
|
|
for (_key in obj) {
|
||
|
|
/* istanbul ignore else */
|
||
|
|
if (obj.hasOwnProperty(_key)) {
|
||
|
|
sortedKeys.push(_key);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
sortedKeys.sort();
|
||
|
|
|
||
|
|
for (i = 0; i < sortedKeys.length; i += 1) {
|
||
|
|
_key = sortedKeys[i];
|
||
|
|
canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
|
||
|
|
}
|
||
|
|
|
||
|
|
stack.pop();
|
||
|
|
replacementStack.pop();
|
||
|
|
} else {
|
||
|
|
canonicalizedObj = obj;
|
||
|
|
}
|
||
|
|
|
||
|
|
return canonicalizedObj;
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsib2JqZWN0UHJvdG90eXBlVG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImpzb25EaWZmIiwiRGlmZiIsInVzZUxvbmdlc3RUb2tlbiIsInRva2VuaXplIiwibGluZURpZmYiLCJjYXN0SW5wdXQiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWRSZXBsYWNlbWVudCIsInN0cmluZ2lmeVJlcGxhY2VyIiwiayIsInYiLCJKU09OIiwic3RyaW5naWZ5IiwiY2Fub25pY2FsaXplIiwiZXF1YWxzIiwibGVmdCIsInJpZ2h0IiwiY2FsbCIsInJlcGxhY2UiLCJkaWZmSnNvbiIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqRDtBQUdPLElBQU1DLFFBQVEsR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFKO0FBQUEsRUFBakIsQyxDQUNQO0FBQ0E7Ozs7OztBQUNBRCxRQUFRLENBQUNFLGVBQVQsR0FBMkIsSUFBM0I7QUFFQUYsUUFBUSxDQUFDRyxRQUFUO0FBQW9CQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBO0FBQUEsQ0FBU0QsUUFBN0I7O0FBQ0FILFFBQVEsQ0FBQ0ssU0FBVCxHQUFxQixVQUFTQyxLQUFULEVBQWdC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
|