164 lines
13 KiB
Plaintext
164 lines
13 KiB
Plaintext
|
/*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) { "@babel/helpers - typeof"; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsib2JqZWN0UHJvdG90eXBlVG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImpzb25EaWZmIiwiRGlmZiIsInVzZUxvbmdlc3RUb2tlbiIsInRva2VuaXplIiwibGluZURpZmYiLCJjYXN0SW5wdXQiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWRSZXBsYWNlbWVudCIsInN0cmluZ2lmeVJlcGxhY2VyIiwiayIsInYiLCJKU09OIiwic3RyaW5naWZ5IiwiY2Fub25pY2FsaXplIiwiZXF1YWxzIiwibGVmdCIsInJpZ2h0IiwiY2FsbCIsInJlcGxhY2UiLCJkaWZmSnNvbiIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqRDtBQUdPLElBQU1DLFFBQVEsR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWpCLEMsQ0FDUDtBQUNBOzs7Ozs7QUFDQUQsUUFBUSxDQUFDRSxlQUFULEdBQTJCLElBQTNCO0FBRUFGLFFBQVEsQ0FBQ0csUUFBVDtBQUFvQkM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLENBQVNELFFBQTdCOztBQUNBSCxRQUFRLENBQUNLLFNBQVQsR0FBcUIsVUFBU0MsS0FB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
|