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.
3573 lines
98 KiB
3573 lines
98 KiB
import 'picocolors';
|
|
|
|
const {
|
|
setTimeout: safeSetTimeout,
|
|
setInterval: safeSetInterval,
|
|
clearInterval: safeClearInterval,
|
|
clearTimeout: safeClearTimeout
|
|
} = globalThis;
|
|
|
|
function Diff() {}
|
|
Diff.prototype = {
|
|
diff: function diff(oldString, newString) {
|
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
var callback = options.callback;
|
|
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = {};
|
|
}
|
|
|
|
this.options = options;
|
|
var self = this;
|
|
|
|
function done(value) {
|
|
if (callback) {
|
|
setTimeout(function () {
|
|
callback(undefined, value);
|
|
}, 0);
|
|
return true;
|
|
} else {
|
|
return value;
|
|
}
|
|
} // Allow subclasses to massage the input prior to running
|
|
|
|
|
|
oldString = this.castInput(oldString);
|
|
newString = this.castInput(newString);
|
|
oldString = this.removeEmpty(this.tokenize(oldString));
|
|
newString = this.removeEmpty(this.tokenize(newString));
|
|
var newLen = newString.length,
|
|
oldLen = oldString.length;
|
|
var editLength = 1;
|
|
var maxEditLength = newLen + oldLen;
|
|
|
|
if (options.maxEditLength) {
|
|
maxEditLength = Math.min(maxEditLength, options.maxEditLength);
|
|
}
|
|
|
|
var bestPath = [{
|
|
newPos: -1,
|
|
components: []
|
|
}]; // Seed editLength = 0, i.e. the content starts with the same values
|
|
|
|
var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
|
|
|
|
if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
|
|
// Identity per the equality and tokenizer
|
|
return done([{
|
|
value: this.join(newString),
|
|
count: newString.length
|
|
}]);
|
|
} // Main worker method. checks all permutations of a given edit length for acceptance.
|
|
|
|
|
|
function execEditLength() {
|
|
for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
|
|
var basePath = void 0;
|
|
|
|
var addPath = bestPath[diagonalPath - 1],
|
|
removePath = bestPath[diagonalPath + 1],
|
|
_oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
|
|
|
|
if (addPath) {
|
|
// No one else is going to attempt to use this value, clear it
|
|
bestPath[diagonalPath - 1] = undefined;
|
|
}
|
|
|
|
var canAdd = addPath && addPath.newPos + 1 < newLen,
|
|
canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
|
|
|
|
if (!canAdd && !canRemove) {
|
|
// If this path is a terminal then prune
|
|
bestPath[diagonalPath] = undefined;
|
|
continue;
|
|
} // Select the diagonal that we want to branch from. We select the prior
|
|
// path whose position in the new string is the farthest from the origin
|
|
// and does not pass the bounds of the diff graph
|
|
|
|
|
|
if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
|
|
basePath = clonePath(removePath);
|
|
self.pushComponent(basePath.components, undefined, true);
|
|
} else {
|
|
basePath = addPath; // No need to clone, we've pulled it from the list
|
|
|
|
basePath.newPos++;
|
|
self.pushComponent(basePath.components, true, undefined);
|
|
}
|
|
|
|
_oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
|
|
|
|
if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
|
|
return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
|
|
} else {
|
|
// Otherwise track this path as a potential candidate and continue.
|
|
bestPath[diagonalPath] = basePath;
|
|
}
|
|
}
|
|
|
|
editLength++;
|
|
} // Performs the length of edit iteration. Is a bit fugly as this has to support the
|
|
// sync and async mode which is never fun. Loops over execEditLength until a value
|
|
// is produced, or until the edit length exceeds options.maxEditLength (if given),
|
|
// in which case it will return undefined.
|
|
|
|
|
|
if (callback) {
|
|
(function exec() {
|
|
setTimeout(function () {
|
|
if (editLength > maxEditLength) {
|
|
return callback();
|
|
}
|
|
|
|
if (!execEditLength()) {
|
|
exec();
|
|
}
|
|
}, 0);
|
|
})();
|
|
} else {
|
|
while (editLength <= maxEditLength) {
|
|
var ret = execEditLength();
|
|
|
|
if (ret) {
|
|
return ret;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
pushComponent: function pushComponent(components, added, removed) {
|
|
var last = components[components.length - 1];
|
|
|
|
if (last && last.added === added && last.removed === removed) {
|
|
// We need to clone here as the component clone operation is just
|
|
// as shallow array clone
|
|
components[components.length - 1] = {
|
|
count: last.count + 1,
|
|
added: added,
|
|
removed: removed
|
|
};
|
|
} else {
|
|
components.push({
|
|
count: 1,
|
|
added: added,
|
|
removed: removed
|
|
});
|
|
}
|
|
},
|
|
extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
|
|
var newLen = newString.length,
|
|
oldLen = oldString.length,
|
|
newPos = basePath.newPos,
|
|
oldPos = newPos - diagonalPath,
|
|
commonCount = 0;
|
|
|
|
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
|
|
newPos++;
|
|
oldPos++;
|
|
commonCount++;
|
|
}
|
|
|
|
if (commonCount) {
|
|
basePath.components.push({
|
|
count: commonCount
|
|
});
|
|
}
|
|
|
|
basePath.newPos = newPos;
|
|
return oldPos;
|
|
},
|
|
equals: function equals(left, right) {
|
|
if (this.options.comparator) {
|
|
return this.options.comparator(left, right);
|
|
} else {
|
|
return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
|
|
}
|
|
},
|
|
removeEmpty: function removeEmpty(array) {
|
|
var ret = [];
|
|
|
|
for (var i = 0; i < array.length; i++) {
|
|
if (array[i]) {
|
|
ret.push(array[i]);
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
},
|
|
castInput: function castInput(value) {
|
|
return value;
|
|
},
|
|
tokenize: function tokenize(value) {
|
|
return value.split('');
|
|
},
|
|
join: function join(chars) {
|
|
return chars.join('');
|
|
}
|
|
};
|
|
|
|
function buildValues(diff, components, newString, oldString, useLongestToken) {
|
|
var componentPos = 0,
|
|
componentLen = components.length,
|
|
newPos = 0,
|
|
oldPos = 0;
|
|
|
|
for (; componentPos < componentLen; componentPos++) {
|
|
var component = components[componentPos];
|
|
|
|
if (!component.removed) {
|
|
if (!component.added && useLongestToken) {
|
|
var value = newString.slice(newPos, newPos + component.count);
|
|
value = value.map(function (value, i) {
|
|
var oldValue = oldString[oldPos + i];
|
|
return oldValue.length > value.length ? oldValue : value;
|
|
});
|
|
component.value = diff.join(value);
|
|
} else {
|
|
component.value = diff.join(newString.slice(newPos, newPos + component.count));
|
|
}
|
|
|
|
newPos += component.count; // Common case
|
|
|
|
if (!component.added) {
|
|
oldPos += component.count;
|
|
}
|
|
} else {
|
|
component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
|
|
oldPos += component.count; // Reverse add and remove so removes are output first to match common convention
|
|
// The diffing algorithm is tied to add then remove output and this is the simplest
|
|
// route to get the desired output with minimal overhead.
|
|
|
|
if (componentPos && components[componentPos - 1].added) {
|
|
var tmp = components[componentPos - 1];
|
|
components[componentPos - 1] = components[componentPos];
|
|
components[componentPos] = tmp;
|
|
}
|
|
}
|
|
} // Special case handle for when one terminal is ignored (i.e. whitespace).
|
|
// For this case we merge the terminal into the prior string and drop the change.
|
|
// This is only available for string mode.
|
|
|
|
|
|
var lastComponent = components[componentLen - 1];
|
|
|
|
if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
|
|
components[componentLen - 2].value += lastComponent.value;
|
|
components.pop();
|
|
}
|
|
|
|
return components;
|
|
}
|
|
|
|
function clonePath(path) {
|
|
return {
|
|
newPos: path.newPos,
|
|
components: path.components.slice(0)
|
|
};
|
|
}
|
|
|
|
//
|
|
// Ranges and exceptions:
|
|
// Latin-1 Supplement, 0080–00FF
|
|
// - U+00D7 × Multiplication sign
|
|
// - U+00F7 ÷ Division sign
|
|
// Latin Extended-A, 0100–017F
|
|
// Latin Extended-B, 0180–024F
|
|
// IPA Extensions, 0250–02AF
|
|
// Spacing Modifier Letters, 02B0–02FF
|
|
// - U+02C7 ˇ ˇ Caron
|
|
// - U+02D8 ˘ ˘ Breve
|
|
// - U+02D9 ˙ ˙ Dot Above
|
|
// - U+02DA ˚ ˚ Ring Above
|
|
// - U+02DB ˛ ˛ Ogonek
|
|
// - U+02DC ˜ ˜ Small Tilde
|
|
// - U+02DD ˝ ˝ Double Acute Accent
|
|
// Latin Extended Additional, 1E00–1EFF
|
|
|
|
var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
|
|
var reWhitespace = /\S/;
|
|
var wordDiff = new Diff();
|
|
|
|
wordDiff.equals = function (left, right) {
|
|
if (this.options.ignoreCase) {
|
|
left = left.toLowerCase();
|
|
right = right.toLowerCase();
|
|
}
|
|
|
|
return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
|
|
};
|
|
|
|
wordDiff.tokenize = function (value) {
|
|
// All whitespace symbols except newline group into one token, each newline - in separate token
|
|
var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
|
|
|
|
for (var i = 0; i < tokens.length - 1; i++) {
|
|
// If we have an empty string in the next field and we have only word chars before and after, merge
|
|
if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
|
|
tokens[i] += tokens[i + 2];
|
|
tokens.splice(i + 1, 2);
|
|
i--;
|
|
}
|
|
}
|
|
|
|
return tokens;
|
|
};
|
|
|
|
var lineDiff = new Diff();
|
|
|
|
lineDiff.tokenize = function (value) {
|
|
var retLines = [],
|
|
linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
|
|
|
|
if (!linesAndNewlines[linesAndNewlines.length - 1]) {
|
|
linesAndNewlines.pop();
|
|
} // Merge the content and line separators into single tokens
|
|
|
|
|
|
for (var i = 0; i < linesAndNewlines.length; i++) {
|
|
var line = linesAndNewlines[i];
|
|
|
|
if (i % 2 && !this.options.newlineIsToken) {
|
|
retLines[retLines.length - 1] += line;
|
|
} else {
|
|
if (this.options.ignoreWhitespace) {
|
|
line = line.trim();
|
|
}
|
|
|
|
retLines.push(line);
|
|
}
|
|
}
|
|
|
|
return retLines;
|
|
};
|
|
|
|
function diffLines(oldStr, newStr, callback) {
|
|
return lineDiff.diff(oldStr, newStr, callback);
|
|
}
|
|
|
|
var sentenceDiff = new Diff();
|
|
|
|
sentenceDiff.tokenize = function (value) {
|
|
return value.split(/(\S.+?[.!?])(?=\s+|$)/);
|
|
};
|
|
|
|
var cssDiff = new Diff();
|
|
|
|
cssDiff.tokenize = function (value) {
|
|
return value.split(/([{}:;,]|\s+)/);
|
|
};
|
|
|
|
function _typeof(obj) {
|
|
"@babel/helpers - typeof";
|
|
|
|
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
_typeof = function (obj) {
|
|
return typeof obj;
|
|
};
|
|
} else {
|
|
_typeof = function (obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
};
|
|
}
|
|
|
|
return _typeof(obj);
|
|
}
|
|
|
|
function _toConsumableArray(arr) {
|
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
}
|
|
|
|
function _arrayWithoutHoles(arr) {
|
|
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
}
|
|
|
|
function _iterableToArray(iter) {
|
|
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
|
}
|
|
|
|
function _unsupportedIterableToArray(o, minLen) {
|
|
if (!o) return;
|
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
}
|
|
|
|
function _arrayLikeToArray(arr, len) {
|
|
if (len == null || len > arr.length) len = arr.length;
|
|
|
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
|
|
return arr2;
|
|
}
|
|
|
|
function _nonIterableSpread() {
|
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
}
|
|
|
|
var objectPrototypeToString = Object.prototype.toString;
|
|
var jsonDiff = new Diff(); // 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:
|
|
|
|
jsonDiff.useLongestToken = true;
|
|
jsonDiff.tokenize = lineDiff.tokenize;
|
|
|
|
jsonDiff.castInput = function (value) {
|
|
var _this$options = this.options,
|
|
undefinedReplacement = _this$options.undefinedReplacement,
|
|
_this$options$stringi = _this$options.stringifyReplacer,
|
|
stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {
|
|
return 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 Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'));
|
|
};
|
|
// 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 (_typeof(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;
|
|
}
|
|
|
|
var arrayDiff = new Diff();
|
|
|
|
arrayDiff.tokenize = function (value) {
|
|
return value.slice();
|
|
};
|
|
|
|
arrayDiff.join = arrayDiff.removeEmpty = function (value) {
|
|
return value;
|
|
};
|
|
|
|
function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
|
|
if (typeof options.context === 'undefined') {
|
|
options.context = 4;
|
|
}
|
|
|
|
var diff = diffLines(oldStr, newStr, options);
|
|
|
|
if (!diff) {
|
|
return;
|
|
}
|
|
|
|
diff.push({
|
|
value: '',
|
|
lines: []
|
|
}); // Append an empty value to make cleanup easier
|
|
|
|
function contextLines(lines) {
|
|
return lines.map(function (entry) {
|
|
return ' ' + entry;
|
|
});
|
|
}
|
|
|
|
var hunks = [];
|
|
var oldRangeStart = 0,
|
|
newRangeStart = 0,
|
|
curRange = [],
|
|
oldLine = 1,
|
|
newLine = 1;
|
|
|
|
var _loop = function _loop(i) {
|
|
var current = diff[i],
|
|
lines = current.lines || current.value.replace(/\n$/, '').split('\n');
|
|
current.lines = lines;
|
|
|
|
if (current.added || current.removed) {
|
|
var _curRange;
|
|
|
|
// If we have previous context, start with that
|
|
if (!oldRangeStart) {
|
|
var prev = diff[i - 1];
|
|
oldRangeStart = oldLine;
|
|
newRangeStart = newLine;
|
|
|
|
if (prev) {
|
|
curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
|
|
oldRangeStart -= curRange.length;
|
|
newRangeStart -= curRange.length;
|
|
}
|
|
} // Output our changes
|
|
|
|
|
|
(_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {
|
|
return (current.added ? '+' : '-') + entry;
|
|
}))); // Track the updated file position
|
|
|
|
|
|
if (current.added) {
|
|
newLine += lines.length;
|
|
} else {
|
|
oldLine += lines.length;
|
|
}
|
|
} else {
|
|
// Identical context lines. Track line changes
|
|
if (oldRangeStart) {
|
|
// Close out any changes that have been output (or join overlapping)
|
|
if (lines.length <= options.context * 2 && i < diff.length - 2) {
|
|
var _curRange2;
|
|
|
|
// Overlapping
|
|
(_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));
|
|
} else {
|
|
var _curRange3;
|
|
|
|
// end the range and output
|
|
var contextSize = Math.min(lines.length, options.context);
|
|
|
|
(_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));
|
|
|
|
var hunk = {
|
|
oldStart: oldRangeStart,
|
|
oldLines: oldLine - oldRangeStart + contextSize,
|
|
newStart: newRangeStart,
|
|
newLines: newLine - newRangeStart + contextSize,
|
|
lines: curRange
|
|
};
|
|
|
|
if (i >= diff.length - 2 && lines.length <= options.context) {
|
|
// EOF is inside this hunk
|
|
var oldEOFNewline = /\n$/.test(oldStr);
|
|
var newEOFNewline = /\n$/.test(newStr);
|
|
var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;
|
|
|
|
if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {
|
|
// special case: old has no eol and no trailing context; no-nl can end up before adds
|
|
// however, if the old file is empty, do not output the no-nl line
|
|
curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
|
|
}
|
|
|
|
if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {
|
|
curRange.push('\\ No newline at end of file');
|
|
}
|
|
}
|
|
|
|
hunks.push(hunk);
|
|
oldRangeStart = 0;
|
|
newRangeStart = 0;
|
|
curRange = [];
|
|
}
|
|
}
|
|
|
|
oldLine += lines.length;
|
|
newLine += lines.length;
|
|
}
|
|
};
|
|
|
|
for (var i = 0; i < diff.length; i++) {
|
|
_loop(i);
|
|
}
|
|
|
|
return {
|
|
oldFileName: oldFileName,
|
|
newFileName: newFileName,
|
|
oldHeader: oldHeader,
|
|
newHeader: newHeader,
|
|
hunks: hunks
|
|
};
|
|
}
|
|
function formatPatch(diff) {
|
|
var ret = [];
|
|
|
|
if (diff.oldFileName == diff.newFileName) {
|
|
ret.push('Index: ' + diff.oldFileName);
|
|
}
|
|
|
|
ret.push('===================================================================');
|
|
ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
|
|
ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
|
|
|
|
for (var i = 0; i < diff.hunks.length; i++) {
|
|
var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,
|
|
// the first number is one lower than one would expect.
|
|
// https://www.artima.com/weblogs/viewpost.jsp?thread=164293
|
|
|
|
if (hunk.oldLines === 0) {
|
|
hunk.oldStart -= 1;
|
|
}
|
|
|
|
if (hunk.newLines === 0) {
|
|
hunk.newStart -= 1;
|
|
}
|
|
|
|
ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
|
|
ret.push.apply(ret, hunk.lines);
|
|
}
|
|
|
|
return ret.join('\n') + '\n';
|
|
}
|
|
function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
|
|
return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));
|
|
}
|
|
function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
|
|
return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
|
|
}
|
|
|
|
const ANSI_BACKGROUND_OFFSET = 10;
|
|
|
|
const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`;
|
|
|
|
const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`;
|
|
|
|
const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
|
|
|
|
const styles = {
|
|
modifier: {
|
|
reset: [0, 0],
|
|
// 21 isn't widely supported and 22 does the same thing
|
|
bold: [1, 22],
|
|
dim: [2, 22],
|
|
italic: [3, 23],
|
|
underline: [4, 24],
|
|
overline: [53, 55],
|
|
inverse: [7, 27],
|
|
hidden: [8, 28],
|
|
strikethrough: [9, 29],
|
|
},
|
|
color: {
|
|
black: [30, 39],
|
|
red: [31, 39],
|
|
green: [32, 39],
|
|
yellow: [33, 39],
|
|
blue: [34, 39],
|
|
magenta: [35, 39],
|
|
cyan: [36, 39],
|
|
white: [37, 39],
|
|
|
|
// Bright color
|
|
blackBright: [90, 39],
|
|
gray: [90, 39], // Alias of `blackBright`
|
|
grey: [90, 39], // Alias of `blackBright`
|
|
redBright: [91, 39],
|
|
greenBright: [92, 39],
|
|
yellowBright: [93, 39],
|
|
blueBright: [94, 39],
|
|
magentaBright: [95, 39],
|
|
cyanBright: [96, 39],
|
|
whiteBright: [97, 39],
|
|
},
|
|
bgColor: {
|
|
bgBlack: [40, 49],
|
|
bgRed: [41, 49],
|
|
bgGreen: [42, 49],
|
|
bgYellow: [43, 49],
|
|
bgBlue: [44, 49],
|
|
bgMagenta: [45, 49],
|
|
bgCyan: [46, 49],
|
|
bgWhite: [47, 49],
|
|
|
|
// Bright color
|
|
bgBlackBright: [100, 49],
|
|
bgGray: [100, 49], // Alias of `bgBlackBright`
|
|
bgGrey: [100, 49], // Alias of `bgBlackBright`
|
|
bgRedBright: [101, 49],
|
|
bgGreenBright: [102, 49],
|
|
bgYellowBright: [103, 49],
|
|
bgBlueBright: [104, 49],
|
|
bgMagentaBright: [105, 49],
|
|
bgCyanBright: [106, 49],
|
|
bgWhiteBright: [107, 49],
|
|
},
|
|
};
|
|
|
|
Object.keys(styles.modifier);
|
|
const foregroundColorNames = Object.keys(styles.color);
|
|
const backgroundColorNames = Object.keys(styles.bgColor);
|
|
[...foregroundColorNames, ...backgroundColorNames];
|
|
|
|
function assembleStyles() {
|
|
const codes = new Map();
|
|
|
|
for (const [groupName, group] of Object.entries(styles)) {
|
|
for (const [styleName, style] of Object.entries(group)) {
|
|
styles[styleName] = {
|
|
open: `\u001B[${style[0]}m`,
|
|
close: `\u001B[${style[1]}m`,
|
|
};
|
|
|
|
group[styleName] = styles[styleName];
|
|
|
|
codes.set(style[0], style[1]);
|
|
}
|
|
|
|
Object.defineProperty(styles, groupName, {
|
|
value: group,
|
|
enumerable: false,
|
|
});
|
|
}
|
|
|
|
Object.defineProperty(styles, 'codes', {
|
|
value: codes,
|
|
enumerable: false,
|
|
});
|
|
|
|
styles.color.close = '\u001B[39m';
|
|
styles.bgColor.close = '\u001B[49m';
|
|
|
|
styles.color.ansi = wrapAnsi16();
|
|
styles.color.ansi256 = wrapAnsi256();
|
|
styles.color.ansi16m = wrapAnsi16m();
|
|
styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
|
|
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
|
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
|
|
|
// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
|
|
Object.defineProperties(styles, {
|
|
rgbToAnsi256: {
|
|
value: (red, green, blue) => {
|
|
// We use the extended greyscale palette here, with the exception of
|
|
// black and white. normal palette only has 4 greyscale shades.
|
|
if (red === green && green === blue) {
|
|
if (red < 8) {
|
|
return 16;
|
|
}
|
|
|
|
if (red > 248) {
|
|
return 231;
|
|
}
|
|
|
|
return Math.round(((red - 8) / 247) * 24) + 232;
|
|
}
|
|
|
|
return 16
|
|
+ (36 * Math.round(red / 255 * 5))
|
|
+ (6 * Math.round(green / 255 * 5))
|
|
+ Math.round(blue / 255 * 5);
|
|
},
|
|
enumerable: false,
|
|
},
|
|
hexToRgb: {
|
|
value: hex => {
|
|
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
|
|
if (!matches) {
|
|
return [0, 0, 0];
|
|
}
|
|
|
|
let [colorString] = matches;
|
|
|
|
if (colorString.length === 3) {
|
|
colorString = [...colorString].map(character => character + character).join('');
|
|
}
|
|
|
|
const integer = Number.parseInt(colorString, 16);
|
|
|
|
return [
|
|
/* eslint-disable no-bitwise */
|
|
(integer >> 16) & 0xFF,
|
|
(integer >> 8) & 0xFF,
|
|
integer & 0xFF,
|
|
/* eslint-enable no-bitwise */
|
|
];
|
|
},
|
|
enumerable: false,
|
|
},
|
|
hexToAnsi256: {
|
|
value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
|
|
enumerable: false,
|
|
},
|
|
ansi256ToAnsi: {
|
|
value: code => {
|
|
if (code < 8) {
|
|
return 30 + code;
|
|
}
|
|
|
|
if (code < 16) {
|
|
return 90 + (code - 8);
|
|
}
|
|
|
|
let red;
|
|
let green;
|
|
let blue;
|
|
|
|
if (code >= 232) {
|
|
red = (((code - 232) * 10) + 8) / 255;
|
|
green = red;
|
|
blue = red;
|
|
} else {
|
|
code -= 16;
|
|
|
|
const remainder = code % 36;
|
|
|
|
red = Math.floor(code / 36) / 5;
|
|
green = Math.floor(remainder / 6) / 5;
|
|
blue = (remainder % 6) / 5;
|
|
}
|
|
|
|
const value = Math.max(red, green, blue) * 2;
|
|
|
|
if (value === 0) {
|
|
return 30;
|
|
}
|
|
|
|
// eslint-disable-next-line no-bitwise
|
|
let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));
|
|
|
|
if (value === 2) {
|
|
result += 60;
|
|
}
|
|
|
|
return result;
|
|
},
|
|
enumerable: false,
|
|
},
|
|
rgbToAnsi: {
|
|
value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
|
|
enumerable: false,
|
|
},
|
|
hexToAnsi: {
|
|
value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
|
|
enumerable: false,
|
|
},
|
|
});
|
|
|
|
return styles;
|
|
}
|
|
|
|
const ansiStyles$1 = assembleStyles();
|
|
|
|
var eastasianwidth = {exports: {}};
|
|
|
|
(function (module) {
|
|
var eaw = {};
|
|
|
|
{
|
|
module.exports = eaw;
|
|
}
|
|
|
|
eaw.eastAsianWidth = function(character) {
|
|
var x = character.charCodeAt(0);
|
|
var y = (character.length == 2) ? character.charCodeAt(1) : 0;
|
|
var codePoint = x;
|
|
if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {
|
|
x &= 0x3FF;
|
|
y &= 0x3FF;
|
|
codePoint = (x << 10) | y;
|
|
codePoint += 0x10000;
|
|
}
|
|
|
|
if ((0x3000 == codePoint) ||
|
|
(0xFF01 <= codePoint && codePoint <= 0xFF60) ||
|
|
(0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {
|
|
return 'F';
|
|
}
|
|
if ((0x20A9 == codePoint) ||
|
|
(0xFF61 <= codePoint && codePoint <= 0xFFBE) ||
|
|
(0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||
|
|
(0xFFCA <= codePoint && codePoint <= 0xFFCF) ||
|
|
(0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||
|
|
(0xFFDA <= codePoint && codePoint <= 0xFFDC) ||
|
|
(0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {
|
|
return 'H';
|
|
}
|
|
if ((0x1100 <= codePoint && codePoint <= 0x115F) ||
|
|
(0x11A3 <= codePoint && codePoint <= 0x11A7) ||
|
|
(0x11FA <= codePoint && codePoint <= 0x11FF) ||
|
|
(0x2329 <= codePoint && codePoint <= 0x232A) ||
|
|
(0x2E80 <= codePoint && codePoint <= 0x2E99) ||
|
|
(0x2E9B <= codePoint && codePoint <= 0x2EF3) ||
|
|
(0x2F00 <= codePoint && codePoint <= 0x2FD5) ||
|
|
(0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||
|
|
(0x3001 <= codePoint && codePoint <= 0x303E) ||
|
|
(0x3041 <= codePoint && codePoint <= 0x3096) ||
|
|
(0x3099 <= codePoint && codePoint <= 0x30FF) ||
|
|
(0x3105 <= codePoint && codePoint <= 0x312D) ||
|
|
(0x3131 <= codePoint && codePoint <= 0x318E) ||
|
|
(0x3190 <= codePoint && codePoint <= 0x31BA) ||
|
|
(0x31C0 <= codePoint && codePoint <= 0x31E3) ||
|
|
(0x31F0 <= codePoint && codePoint <= 0x321E) ||
|
|
(0x3220 <= codePoint && codePoint <= 0x3247) ||
|
|
(0x3250 <= codePoint && codePoint <= 0x32FE) ||
|
|
(0x3300 <= codePoint && codePoint <= 0x4DBF) ||
|
|
(0x4E00 <= codePoint && codePoint <= 0xA48C) ||
|
|
(0xA490 <= codePoint && codePoint <= 0xA4C6) ||
|
|
(0xA960 <= codePoint && codePoint <= 0xA97C) ||
|
|
(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||
|
|
(0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||
|
|
(0xD7CB <= codePoint && codePoint <= 0xD7FB) ||
|
|
(0xF900 <= codePoint && codePoint <= 0xFAFF) ||
|
|
(0xFE10 <= codePoint && codePoint <= 0xFE19) ||
|
|
(0xFE30 <= codePoint && codePoint <= 0xFE52) ||
|
|
(0xFE54 <= codePoint && codePoint <= 0xFE66) ||
|
|
(0xFE68 <= codePoint && codePoint <= 0xFE6B) ||
|
|
(0x1B000 <= codePoint && codePoint <= 0x1B001) ||
|
|
(0x1F200 <= codePoint && codePoint <= 0x1F202) ||
|
|
(0x1F210 <= codePoint && codePoint <= 0x1F23A) ||
|
|
(0x1F240 <= codePoint && codePoint <= 0x1F248) ||
|
|
(0x1F250 <= codePoint && codePoint <= 0x1F251) ||
|
|
(0x20000 <= codePoint && codePoint <= 0x2F73F) ||
|
|
(0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||
|
|
(0x30000 <= codePoint && codePoint <= 0x3FFFD)) {
|
|
return 'W';
|
|
}
|
|
if ((0x0020 <= codePoint && codePoint <= 0x007E) ||
|
|
(0x00A2 <= codePoint && codePoint <= 0x00A3) ||
|
|
(0x00A5 <= codePoint && codePoint <= 0x00A6) ||
|
|
(0x00AC == codePoint) ||
|
|
(0x00AF == codePoint) ||
|
|
(0x27E6 <= codePoint && codePoint <= 0x27ED) ||
|
|
(0x2985 <= codePoint && codePoint <= 0x2986)) {
|
|
return 'Na';
|
|
}
|
|
if ((0x00A1 == codePoint) ||
|
|
(0x00A4 == codePoint) ||
|
|
(0x00A7 <= codePoint && codePoint <= 0x00A8) ||
|
|
(0x00AA == codePoint) ||
|
|
(0x00AD <= codePoint && codePoint <= 0x00AE) ||
|
|
(0x00B0 <= codePoint && codePoint <= 0x00B4) ||
|
|
(0x00B6 <= codePoint && codePoint <= 0x00BA) ||
|
|
(0x00BC <= codePoint && codePoint <= 0x00BF) ||
|
|
(0x00C6 == codePoint) ||
|
|
(0x00D0 == codePoint) ||
|
|
(0x00D7 <= codePoint && codePoint <= 0x00D8) ||
|
|
(0x00DE <= codePoint && codePoint <= 0x00E1) ||
|
|
(0x00E6 == codePoint) ||
|
|
(0x00E8 <= codePoint && codePoint <= 0x00EA) ||
|
|
(0x00EC <= codePoint && codePoint <= 0x00ED) ||
|
|
(0x00F0 == codePoint) ||
|
|
(0x00F2 <= codePoint && codePoint <= 0x00F3) ||
|
|
(0x00F7 <= codePoint && codePoint <= 0x00FA) ||
|
|
(0x00FC == codePoint) ||
|
|
(0x00FE == codePoint) ||
|
|
(0x0101 == codePoint) ||
|
|
(0x0111 == codePoint) ||
|
|
(0x0113 == codePoint) ||
|
|
(0x011B == codePoint) ||
|
|
(0x0126 <= codePoint && codePoint <= 0x0127) ||
|
|
(0x012B == codePoint) ||
|
|
(0x0131 <= codePoint && codePoint <= 0x0133) ||
|
|
(0x0138 == codePoint) ||
|
|
(0x013F <= codePoint && codePoint <= 0x0142) ||
|
|
(0x0144 == codePoint) ||
|
|
(0x0148 <= codePoint && codePoint <= 0x014B) ||
|
|
(0x014D == codePoint) ||
|
|
(0x0152 <= codePoint && codePoint <= 0x0153) ||
|
|
(0x0166 <= codePoint && codePoint <= 0x0167) ||
|
|
(0x016B == codePoint) ||
|
|
(0x01CE == codePoint) ||
|
|
(0x01D0 == codePoint) ||
|
|
(0x01D2 == codePoint) ||
|
|
(0x01D4 == codePoint) ||
|
|
(0x01D6 == codePoint) ||
|
|
(0x01D8 == codePoint) ||
|
|
(0x01DA == codePoint) ||
|
|
(0x01DC == codePoint) ||
|
|
(0x0251 == codePoint) ||
|
|
(0x0261 == codePoint) ||
|
|
(0x02C4 == codePoint) ||
|
|
(0x02C7 == codePoint) ||
|
|
(0x02C9 <= codePoint && codePoint <= 0x02CB) ||
|
|
(0x02CD == codePoint) ||
|
|
(0x02D0 == codePoint) ||
|
|
(0x02D8 <= codePoint && codePoint <= 0x02DB) ||
|
|
(0x02DD == codePoint) ||
|
|
(0x02DF == codePoint) ||
|
|
(0x0300 <= codePoint && codePoint <= 0x036F) ||
|
|
(0x0391 <= codePoint && codePoint <= 0x03A1) ||
|
|
(0x03A3 <= codePoint && codePoint <= 0x03A9) ||
|
|
(0x03B1 <= codePoint && codePoint <= 0x03C1) ||
|
|
(0x03C3 <= codePoint && codePoint <= 0x03C9) ||
|
|
(0x0401 == codePoint) ||
|
|
(0x0410 <= codePoint && codePoint <= 0x044F) ||
|
|
(0x0451 == codePoint) ||
|
|
(0x2010 == codePoint) ||
|
|
(0x2013 <= codePoint && codePoint <= 0x2016) ||
|
|
(0x2018 <= codePoint && codePoint <= 0x2019) ||
|
|
(0x201C <= codePoint && codePoint <= 0x201D) ||
|
|
(0x2020 <= codePoint && codePoint <= 0x2022) ||
|
|
(0x2024 <= codePoint && codePoint <= 0x2027) ||
|
|
(0x2030 == codePoint) ||
|
|
(0x2032 <= codePoint && codePoint <= 0x2033) ||
|
|
(0x2035 == codePoint) ||
|
|
(0x203B == codePoint) ||
|
|
(0x203E == codePoint) ||
|
|
(0x2074 == codePoint) ||
|
|
(0x207F == codePoint) ||
|
|
(0x2081 <= codePoint && codePoint <= 0x2084) ||
|
|
(0x20AC == codePoint) ||
|
|
(0x2103 == codePoint) ||
|
|
(0x2105 == codePoint) ||
|
|
(0x2109 == codePoint) ||
|
|
(0x2113 == codePoint) ||
|
|
(0x2116 == codePoint) ||
|
|
(0x2121 <= codePoint && codePoint <= 0x2122) ||
|
|
(0x2126 == codePoint) ||
|
|
(0x212B == codePoint) ||
|
|
(0x2153 <= codePoint && codePoint <= 0x2154) ||
|
|
(0x215B <= codePoint && codePoint <= 0x215E) ||
|
|
(0x2160 <= codePoint && codePoint <= 0x216B) ||
|
|
(0x2170 <= codePoint && codePoint <= 0x2179) ||
|
|
(0x2189 == codePoint) ||
|
|
(0x2190 <= codePoint && codePoint <= 0x2199) ||
|
|
(0x21B8 <= codePoint && codePoint <= 0x21B9) ||
|
|
(0x21D2 == codePoint) ||
|
|
(0x21D4 == codePoint) ||
|
|
(0x21E7 == codePoint) ||
|
|
(0x2200 == codePoint) ||
|
|
(0x2202 <= codePoint && codePoint <= 0x2203) ||
|
|
(0x2207 <= codePoint && codePoint <= 0x2208) ||
|
|
(0x220B == codePoint) ||
|
|
(0x220F == codePoint) ||
|
|
(0x2211 == codePoint) ||
|
|
(0x2215 == codePoint) ||
|
|
(0x221A == codePoint) ||
|
|
(0x221D <= codePoint && codePoint <= 0x2220) ||
|
|
(0x2223 == codePoint) ||
|
|
(0x2225 == codePoint) ||
|
|
(0x2227 <= codePoint && codePoint <= 0x222C) ||
|
|
(0x222E == codePoint) ||
|
|
(0x2234 <= codePoint && codePoint <= 0x2237) ||
|
|
(0x223C <= codePoint && codePoint <= 0x223D) ||
|
|
(0x2248 == codePoint) ||
|
|
(0x224C == codePoint) ||
|
|
(0x2252 == codePoint) ||
|
|
(0x2260 <= codePoint && codePoint <= 0x2261) ||
|
|
(0x2264 <= codePoint && codePoint <= 0x2267) ||
|
|
(0x226A <= codePoint && codePoint <= 0x226B) ||
|
|
(0x226E <= codePoint && codePoint <= 0x226F) ||
|
|
(0x2282 <= codePoint && codePoint <= 0x2283) ||
|
|
(0x2286 <= codePoint && codePoint <= 0x2287) ||
|
|
(0x2295 == codePoint) ||
|
|
(0x2299 == codePoint) ||
|
|
(0x22A5 == codePoint) ||
|
|
(0x22BF == codePoint) ||
|
|
(0x2312 == codePoint) ||
|
|
(0x2460 <= codePoint && codePoint <= 0x24E9) ||
|
|
(0x24EB <= codePoint && codePoint <= 0x254B) ||
|
|
(0x2550 <= codePoint && codePoint <= 0x2573) ||
|
|
(0x2580 <= codePoint && codePoint <= 0x258F) ||
|
|
(0x2592 <= codePoint && codePoint <= 0x2595) ||
|
|
(0x25A0 <= codePoint && codePoint <= 0x25A1) ||
|
|
(0x25A3 <= codePoint && codePoint <= 0x25A9) ||
|
|
(0x25B2 <= codePoint && codePoint <= 0x25B3) ||
|
|
(0x25B6 <= codePoint && codePoint <= 0x25B7) ||
|
|
(0x25BC <= codePoint && codePoint <= 0x25BD) ||
|
|
(0x25C0 <= codePoint && codePoint <= 0x25C1) ||
|
|
(0x25C6 <= codePoint && codePoint <= 0x25C8) ||
|
|
(0x25CB == codePoint) ||
|
|
(0x25CE <= codePoint && codePoint <= 0x25D1) ||
|
|
(0x25E2 <= codePoint && codePoint <= 0x25E5) ||
|
|
(0x25EF == codePoint) ||
|
|
(0x2605 <= codePoint && codePoint <= 0x2606) ||
|
|
(0x2609 == codePoint) ||
|
|
(0x260E <= codePoint && codePoint <= 0x260F) ||
|
|
(0x2614 <= codePoint && codePoint <= 0x2615) ||
|
|
(0x261C == codePoint) ||
|
|
(0x261E == codePoint) ||
|
|
(0x2640 == codePoint) ||
|
|
(0x2642 == codePoint) ||
|
|
(0x2660 <= codePoint && codePoint <= 0x2661) ||
|
|
(0x2663 <= codePoint && codePoint <= 0x2665) ||
|
|
(0x2667 <= codePoint && codePoint <= 0x266A) ||
|
|
(0x266C <= codePoint && codePoint <= 0x266D) ||
|
|
(0x266F == codePoint) ||
|
|
(0x269E <= codePoint && codePoint <= 0x269F) ||
|
|
(0x26BE <= codePoint && codePoint <= 0x26BF) ||
|
|
(0x26C4 <= codePoint && codePoint <= 0x26CD) ||
|
|
(0x26CF <= codePoint && codePoint <= 0x26E1) ||
|
|
(0x26E3 == codePoint) ||
|
|
(0x26E8 <= codePoint && codePoint <= 0x26FF) ||
|
|
(0x273D == codePoint) ||
|
|
(0x2757 == codePoint) ||
|
|
(0x2776 <= codePoint && codePoint <= 0x277F) ||
|
|
(0x2B55 <= codePoint && codePoint <= 0x2B59) ||
|
|
(0x3248 <= codePoint && codePoint <= 0x324F) ||
|
|
(0xE000 <= codePoint && codePoint <= 0xF8FF) ||
|
|
(0xFE00 <= codePoint && codePoint <= 0xFE0F) ||
|
|
(0xFFFD == codePoint) ||
|
|
(0x1F100 <= codePoint && codePoint <= 0x1F10A) ||
|
|
(0x1F110 <= codePoint && codePoint <= 0x1F12D) ||
|
|
(0x1F130 <= codePoint && codePoint <= 0x1F169) ||
|
|
(0x1F170 <= codePoint && codePoint <= 0x1F19A) ||
|
|
(0xE0100 <= codePoint && codePoint <= 0xE01EF) ||
|
|
(0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||
|
|
(0x100000 <= codePoint && codePoint <= 0x10FFFD)) {
|
|
return 'A';
|
|
}
|
|
|
|
return 'N';
|
|
};
|
|
|
|
eaw.characterLength = function(character) {
|
|
var code = this.eastAsianWidth(character);
|
|
if (code == 'F' || code == 'W' || code == 'A') {
|
|
return 2;
|
|
} else {
|
|
return 1;
|
|
}
|
|
};
|
|
|
|
// Split a string considering surrogate-pairs.
|
|
function stringToArray(string) {
|
|
return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
|
|
}
|
|
|
|
eaw.length = function(string) {
|
|
var characters = stringToArray(string);
|
|
var len = 0;
|
|
for (var i = 0; i < characters.length; i++) {
|
|
len = len + this.characterLength(characters[i]);
|
|
}
|
|
return len;
|
|
};
|
|
|
|
eaw.slice = function(text, start, end) {
|
|
textLen = eaw.length(text);
|
|
start = start ? start : 0;
|
|
end = end ? end : 1;
|
|
if (start < 0) {
|
|
start = textLen + start;
|
|
}
|
|
if (end < 0) {
|
|
end = textLen + end;
|
|
}
|
|
var result = '';
|
|
var eawLen = 0;
|
|
var chars = stringToArray(text);
|
|
for (var i = 0; i < chars.length; i++) {
|
|
var char = chars[i];
|
|
var charLen = eaw.length(char);
|
|
if (eawLen >= start - (charLen == 2 ? 1 : 0)) {
|
|
if (eawLen + charLen <= end) {
|
|
result += char;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
eawLen += charLen;
|
|
}
|
|
return result;
|
|
};
|
|
} (eastasianwidth));
|
|
|
|
var eastAsianWidth = eastasianwidth.exports;
|
|
|
|
var build = {};
|
|
|
|
var ansiStyles = {exports: {}};
|
|
|
|
(function (module) {
|
|
|
|
const ANSI_BACKGROUND_OFFSET = 10;
|
|
|
|
const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`;
|
|
|
|
const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
|
|
|
|
function assembleStyles() {
|
|
const codes = new Map();
|
|
const styles = {
|
|
modifier: {
|
|
reset: [0, 0],
|
|
// 21 isn't widely supported and 22 does the same thing
|
|
bold: [1, 22],
|
|
dim: [2, 22],
|
|
italic: [3, 23],
|
|
underline: [4, 24],
|
|
overline: [53, 55],
|
|
inverse: [7, 27],
|
|
hidden: [8, 28],
|
|
strikethrough: [9, 29]
|
|
},
|
|
color: {
|
|
black: [30, 39],
|
|
red: [31, 39],
|
|
green: [32, 39],
|
|
yellow: [33, 39],
|
|
blue: [34, 39],
|
|
magenta: [35, 39],
|
|
cyan: [36, 39],
|
|
white: [37, 39],
|
|
|
|
// Bright color
|
|
blackBright: [90, 39],
|
|
redBright: [91, 39],
|
|
greenBright: [92, 39],
|
|
yellowBright: [93, 39],
|
|
blueBright: [94, 39],
|
|
magentaBright: [95, 39],
|
|
cyanBright: [96, 39],
|
|
whiteBright: [97, 39]
|
|
},
|
|
bgColor: {
|
|
bgBlack: [40, 49],
|
|
bgRed: [41, 49],
|
|
bgGreen: [42, 49],
|
|
bgYellow: [43, 49],
|
|
bgBlue: [44, 49],
|
|
bgMagenta: [45, 49],
|
|
bgCyan: [46, 49],
|
|
bgWhite: [47, 49],
|
|
|
|
// Bright color
|
|
bgBlackBright: [100, 49],
|
|
bgRedBright: [101, 49],
|
|
bgGreenBright: [102, 49],
|
|
bgYellowBright: [103, 49],
|
|
bgBlueBright: [104, 49],
|
|
bgMagentaBright: [105, 49],
|
|
bgCyanBright: [106, 49],
|
|
bgWhiteBright: [107, 49]
|
|
}
|
|
};
|
|
|
|
// Alias bright black as gray (and grey)
|
|
styles.color.gray = styles.color.blackBright;
|
|
styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
|
|
styles.color.grey = styles.color.blackBright;
|
|
styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
|
|
|
|
for (const [groupName, group] of Object.entries(styles)) {
|
|
for (const [styleName, style] of Object.entries(group)) {
|
|
styles[styleName] = {
|
|
open: `\u001B[${style[0]}m`,
|
|
close: `\u001B[${style[1]}m`
|
|
};
|
|
|
|
group[styleName] = styles[styleName];
|
|
|
|
codes.set(style[0], style[1]);
|
|
}
|
|
|
|
Object.defineProperty(styles, groupName, {
|
|
value: group,
|
|
enumerable: false
|
|
});
|
|
}
|
|
|
|
Object.defineProperty(styles, 'codes', {
|
|
value: codes,
|
|
enumerable: false
|
|
});
|
|
|
|
styles.color.close = '\u001B[39m';
|
|
styles.bgColor.close = '\u001B[49m';
|
|
|
|
styles.color.ansi256 = wrapAnsi256();
|
|
styles.color.ansi16m = wrapAnsi16m();
|
|
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
|
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
|
|
|
// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
|
|
Object.defineProperties(styles, {
|
|
rgbToAnsi256: {
|
|
value: (red, green, blue) => {
|
|
// We use the extended greyscale palette here, with the exception of
|
|
// black and white. normal palette only has 4 greyscale shades.
|
|
if (red === green && green === blue) {
|
|
if (red < 8) {
|
|
return 16;
|
|
}
|
|
|
|
if (red > 248) {
|
|
return 231;
|
|
}
|
|
|
|
return Math.round(((red - 8) / 247) * 24) + 232;
|
|
}
|
|
|
|
return 16 +
|
|
(36 * Math.round(red / 255 * 5)) +
|
|
(6 * Math.round(green / 255 * 5)) +
|
|
Math.round(blue / 255 * 5);
|
|
},
|
|
enumerable: false
|
|
},
|
|
hexToRgb: {
|
|
value: hex => {
|
|
const matches = /(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i.exec(hex.toString(16));
|
|
if (!matches) {
|
|
return [0, 0, 0];
|
|
}
|
|
|
|
let {colorString} = matches.groups;
|
|
|
|
if (colorString.length === 3) {
|
|
colorString = colorString.split('').map(character => character + character).join('');
|
|
}
|
|
|
|
const integer = Number.parseInt(colorString, 16);
|
|
|
|
return [
|
|
(integer >> 16) & 0xFF,
|
|
(integer >> 8) & 0xFF,
|
|
integer & 0xFF
|
|
];
|
|
},
|
|
enumerable: false
|
|
},
|
|
hexToAnsi256: {
|
|
value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
|
|
enumerable: false
|
|
}
|
|
});
|
|
|
|
return styles;
|
|
}
|
|
|
|
// Make the export immutable
|
|
Object.defineProperty(module, 'exports', {
|
|
enumerable: true,
|
|
get: assembleStyles
|
|
});
|
|
} (ansiStyles));
|
|
|
|
var collections = {};
|
|
|
|
Object.defineProperty(collections, '__esModule', {
|
|
value: true
|
|
});
|
|
collections.printIteratorEntries = printIteratorEntries;
|
|
collections.printIteratorValues = printIteratorValues;
|
|
collections.printListItems = printListItems;
|
|
collections.printObjectProperties = printObjectProperties;
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
const getKeysOfEnumerableProperties = (object, compareKeys) => {
|
|
const keys = Object.keys(object).sort(compareKeys);
|
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
Object.getOwnPropertySymbols(object).forEach(symbol => {
|
|
if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) {
|
|
keys.push(symbol);
|
|
}
|
|
});
|
|
}
|
|
|
|
return keys;
|
|
};
|
|
/**
|
|
* Return entries (for example, of a map)
|
|
* with spacing, indentation, and comma
|
|
* without surrounding punctuation (for example, braces)
|
|
*/
|
|
|
|
function printIteratorEntries(
|
|
iterator,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer, // Too bad, so sad that separator for ECMAScript Map has been ' => '
|
|
// What a distracting diff if you change a data structure to/from
|
|
// ECMAScript Object or Immutable.Map/OrderedMap which use the default.
|
|
separator = ': '
|
|
) {
|
|
let result = '';
|
|
let current = iterator.next();
|
|
|
|
if (!current.done) {
|
|
result += config.spacingOuter;
|
|
const indentationNext = indentation + config.indent;
|
|
|
|
while (!current.done) {
|
|
const name = printer(
|
|
current.value[0],
|
|
config,
|
|
indentationNext,
|
|
depth,
|
|
refs
|
|
);
|
|
const value = printer(
|
|
current.value[1],
|
|
config,
|
|
indentationNext,
|
|
depth,
|
|
refs
|
|
);
|
|
result += indentationNext + name + separator + value;
|
|
current = iterator.next();
|
|
|
|
if (!current.done) {
|
|
result += ',' + config.spacingInner;
|
|
} else if (!config.min) {
|
|
result += ',';
|
|
}
|
|
}
|
|
|
|
result += config.spacingOuter + indentation;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
/**
|
|
* Return values (for example, of a set)
|
|
* with spacing, indentation, and comma
|
|
* without surrounding punctuation (braces or brackets)
|
|
*/
|
|
|
|
function printIteratorValues(
|
|
iterator,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) {
|
|
let result = '';
|
|
let current = iterator.next();
|
|
|
|
if (!current.done) {
|
|
result += config.spacingOuter;
|
|
const indentationNext = indentation + config.indent;
|
|
|
|
while (!current.done) {
|
|
result +=
|
|
indentationNext +
|
|
printer(current.value, config, indentationNext, depth, refs);
|
|
current = iterator.next();
|
|
|
|
if (!current.done) {
|
|
result += ',' + config.spacingInner;
|
|
} else if (!config.min) {
|
|
result += ',';
|
|
}
|
|
}
|
|
|
|
result += config.spacingOuter + indentation;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
/**
|
|
* Return items (for example, of an array)
|
|
* with spacing, indentation, and comma
|
|
* without surrounding punctuation (for example, brackets)
|
|
**/
|
|
|
|
function printListItems(list, config, indentation, depth, refs, printer) {
|
|
let result = '';
|
|
|
|
if (list.length) {
|
|
result += config.spacingOuter;
|
|
const indentationNext = indentation + config.indent;
|
|
|
|
for (let i = 0; i < list.length; i++) {
|
|
result += indentationNext;
|
|
|
|
if (i in list) {
|
|
result += printer(list[i], config, indentationNext, depth, refs);
|
|
}
|
|
|
|
if (i < list.length - 1) {
|
|
result += ',' + config.spacingInner;
|
|
} else if (!config.min) {
|
|
result += ',';
|
|
}
|
|
}
|
|
|
|
result += config.spacingOuter + indentation;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
/**
|
|
* Return properties of an object
|
|
* with spacing, indentation, and comma
|
|
* without surrounding punctuation (for example, braces)
|
|
*/
|
|
|
|
function printObjectProperties(val, config, indentation, depth, refs, printer) {
|
|
let result = '';
|
|
const keys = getKeysOfEnumerableProperties(val, config.compareKeys);
|
|
|
|
if (keys.length) {
|
|
result += config.spacingOuter;
|
|
const indentationNext = indentation + config.indent;
|
|
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const key = keys[i];
|
|
const name = printer(key, config, indentationNext, depth, refs);
|
|
const value = printer(val[key], config, indentationNext, depth, refs);
|
|
result += indentationNext + name + ': ' + value;
|
|
|
|
if (i < keys.length - 1) {
|
|
result += ',' + config.spacingInner;
|
|
} else if (!config.min) {
|
|
result += ',';
|
|
}
|
|
}
|
|
|
|
result += config.spacingOuter + indentation;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
var AsymmetricMatcher$1 = {};
|
|
|
|
Object.defineProperty(AsymmetricMatcher$1, '__esModule', {
|
|
value: true
|
|
});
|
|
AsymmetricMatcher$1.test = AsymmetricMatcher$1.serialize = AsymmetricMatcher$1.default = void 0;
|
|
|
|
var _collections$3 = collections;
|
|
|
|
var global$1 = (function () {
|
|
if (typeof globalThis !== 'undefined') {
|
|
return globalThis;
|
|
} else if (typeof global$1 !== 'undefined') {
|
|
return global$1;
|
|
} else if (typeof self !== 'undefined') {
|
|
return self;
|
|
} else if (typeof window !== 'undefined') {
|
|
return window;
|
|
} else {
|
|
return Function('return this')();
|
|
}
|
|
})();
|
|
|
|
var Symbol$2 = global$1['jest-symbol-do-not-touch'] || global$1.Symbol;
|
|
const asymmetricMatcher =
|
|
typeof Symbol$2 === 'function' && Symbol$2.for
|
|
? Symbol$2.for('jest.asymmetricMatcher')
|
|
: 0x1357a5;
|
|
const SPACE$2 = ' ';
|
|
|
|
const serialize$6 = (val, config, indentation, depth, refs, printer) => {
|
|
const stringedValue = val.toString();
|
|
|
|
if (
|
|
stringedValue === 'ArrayContaining' ||
|
|
stringedValue === 'ArrayNotContaining'
|
|
) {
|
|
if (++depth > config.maxDepth) {
|
|
return '[' + stringedValue + ']';
|
|
}
|
|
|
|
return (
|
|
stringedValue +
|
|
SPACE$2 +
|
|
'[' +
|
|
(0, _collections$3.printListItems)(
|
|
val.sample,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
']'
|
|
);
|
|
}
|
|
|
|
if (
|
|
stringedValue === 'ObjectContaining' ||
|
|
stringedValue === 'ObjectNotContaining'
|
|
) {
|
|
if (++depth > config.maxDepth) {
|
|
return '[' + stringedValue + ']';
|
|
}
|
|
|
|
return (
|
|
stringedValue +
|
|
SPACE$2 +
|
|
'{' +
|
|
(0, _collections$3.printObjectProperties)(
|
|
val.sample,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}'
|
|
);
|
|
}
|
|
|
|
if (
|
|
stringedValue === 'StringMatching' ||
|
|
stringedValue === 'StringNotMatching'
|
|
) {
|
|
return (
|
|
stringedValue +
|
|
SPACE$2 +
|
|
printer(val.sample, config, indentation, depth, refs)
|
|
);
|
|
}
|
|
|
|
if (
|
|
stringedValue === 'StringContaining' ||
|
|
stringedValue === 'StringNotContaining'
|
|
) {
|
|
return (
|
|
stringedValue +
|
|
SPACE$2 +
|
|
printer(val.sample, config, indentation, depth, refs)
|
|
);
|
|
}
|
|
|
|
return val.toAsymmetricMatcher();
|
|
};
|
|
|
|
AsymmetricMatcher$1.serialize = serialize$6;
|
|
|
|
const test$6 = val => val && val.$$typeof === asymmetricMatcher;
|
|
|
|
AsymmetricMatcher$1.test = test$6;
|
|
const plugin$6 = {
|
|
serialize: serialize$6,
|
|
test: test$6
|
|
};
|
|
var _default$7 = plugin$6;
|
|
AsymmetricMatcher$1.default = _default$7;
|
|
|
|
var ConvertAnsi = {};
|
|
|
|
var ansiRegex = ({onlyFirst = false} = {}) => {
|
|
const pattern = [
|
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
|
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|
].join('|');
|
|
|
|
return new RegExp(pattern, onlyFirst ? undefined : 'g');
|
|
};
|
|
|
|
Object.defineProperty(ConvertAnsi, '__esModule', {
|
|
value: true
|
|
});
|
|
ConvertAnsi.test = ConvertAnsi.serialize = ConvertAnsi.default = void 0;
|
|
|
|
var _ansiRegex = _interopRequireDefault$2(ansiRegex);
|
|
|
|
var _ansiStyles$1 = _interopRequireDefault$2(ansiStyles.exports);
|
|
|
|
function _interopRequireDefault$2(obj) {
|
|
return obj && obj.__esModule ? obj : {default: obj};
|
|
}
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
const toHumanReadableAnsi = text =>
|
|
text.replace((0, _ansiRegex.default)(), match => {
|
|
switch (match) {
|
|
case _ansiStyles$1.default.red.close:
|
|
case _ansiStyles$1.default.green.close:
|
|
case _ansiStyles$1.default.cyan.close:
|
|
case _ansiStyles$1.default.gray.close:
|
|
case _ansiStyles$1.default.white.close:
|
|
case _ansiStyles$1.default.yellow.close:
|
|
case _ansiStyles$1.default.bgRed.close:
|
|
case _ansiStyles$1.default.bgGreen.close:
|
|
case _ansiStyles$1.default.bgYellow.close:
|
|
case _ansiStyles$1.default.inverse.close:
|
|
case _ansiStyles$1.default.dim.close:
|
|
case _ansiStyles$1.default.bold.close:
|
|
case _ansiStyles$1.default.reset.open:
|
|
case _ansiStyles$1.default.reset.close:
|
|
return '</>';
|
|
|
|
case _ansiStyles$1.default.red.open:
|
|
return '<red>';
|
|
|
|
case _ansiStyles$1.default.green.open:
|
|
return '<green>';
|
|
|
|
case _ansiStyles$1.default.cyan.open:
|
|
return '<cyan>';
|
|
|
|
case _ansiStyles$1.default.gray.open:
|
|
return '<gray>';
|
|
|
|
case _ansiStyles$1.default.white.open:
|
|
return '<white>';
|
|
|
|
case _ansiStyles$1.default.yellow.open:
|
|
return '<yellow>';
|
|
|
|
case _ansiStyles$1.default.bgRed.open:
|
|
return '<bgRed>';
|
|
|
|
case _ansiStyles$1.default.bgGreen.open:
|
|
return '<bgGreen>';
|
|
|
|
case _ansiStyles$1.default.bgYellow.open:
|
|
return '<bgYellow>';
|
|
|
|
case _ansiStyles$1.default.inverse.open:
|
|
return '<inverse>';
|
|
|
|
case _ansiStyles$1.default.dim.open:
|
|
return '<dim>';
|
|
|
|
case _ansiStyles$1.default.bold.open:
|
|
return '<bold>';
|
|
|
|
default:
|
|
return '';
|
|
}
|
|
});
|
|
|
|
const test$5 = val =>
|
|
typeof val === 'string' && !!val.match((0, _ansiRegex.default)());
|
|
|
|
ConvertAnsi.test = test$5;
|
|
|
|
const serialize$5 = (val, config, indentation, depth, refs, printer) =>
|
|
printer(toHumanReadableAnsi(val), config, indentation, depth, refs);
|
|
|
|
ConvertAnsi.serialize = serialize$5;
|
|
const plugin$5 = {
|
|
serialize: serialize$5,
|
|
test: test$5
|
|
};
|
|
var _default$6 = plugin$5;
|
|
ConvertAnsi.default = _default$6;
|
|
|
|
var DOMCollection$1 = {};
|
|
|
|
Object.defineProperty(DOMCollection$1, '__esModule', {
|
|
value: true
|
|
});
|
|
DOMCollection$1.test = DOMCollection$1.serialize = DOMCollection$1.default = void 0;
|
|
|
|
var _collections$2 = collections;
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
/* eslint-disable local/ban-types-eventually */
|
|
const SPACE$1 = ' ';
|
|
const OBJECT_NAMES = ['DOMStringMap', 'NamedNodeMap'];
|
|
const ARRAY_REGEXP = /^(HTML\w*Collection|NodeList)$/;
|
|
|
|
const testName = name =>
|
|
OBJECT_NAMES.indexOf(name) !== -1 || ARRAY_REGEXP.test(name);
|
|
|
|
const test$4 = val =>
|
|
val &&
|
|
val.constructor &&
|
|
!!val.constructor.name &&
|
|
testName(val.constructor.name);
|
|
|
|
DOMCollection$1.test = test$4;
|
|
|
|
const isNamedNodeMap = collection =>
|
|
collection.constructor.name === 'NamedNodeMap';
|
|
|
|
const serialize$4 = (collection, config, indentation, depth, refs, printer) => {
|
|
const name = collection.constructor.name;
|
|
|
|
if (++depth > config.maxDepth) {
|
|
return '[' + name + ']';
|
|
}
|
|
|
|
return (
|
|
(config.min ? '' : name + SPACE$1) +
|
|
(OBJECT_NAMES.indexOf(name) !== -1
|
|
? '{' +
|
|
(0, _collections$2.printObjectProperties)(
|
|
isNamedNodeMap(collection)
|
|
? Array.from(collection).reduce((props, attribute) => {
|
|
props[attribute.name] = attribute.value;
|
|
return props;
|
|
}, {})
|
|
: {...collection},
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}'
|
|
: '[' +
|
|
(0, _collections$2.printListItems)(
|
|
Array.from(collection),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
']')
|
|
);
|
|
};
|
|
|
|
DOMCollection$1.serialize = serialize$4;
|
|
const plugin$4 = {
|
|
serialize: serialize$4,
|
|
test: test$4
|
|
};
|
|
var _default$5 = plugin$4;
|
|
DOMCollection$1.default = _default$5;
|
|
|
|
var DOMElement$1 = {};
|
|
|
|
var markup = {};
|
|
|
|
var escapeHTML$1 = {};
|
|
|
|
Object.defineProperty(escapeHTML$1, '__esModule', {
|
|
value: true
|
|
});
|
|
escapeHTML$1.default = escapeHTML;
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
function escapeHTML(str) {
|
|
return str.replace(/</g, '<').replace(/>/g, '>');
|
|
}
|
|
|
|
Object.defineProperty(markup, '__esModule', {
|
|
value: true
|
|
});
|
|
markup.printText =
|
|
markup.printProps =
|
|
markup.printElementAsLeaf =
|
|
markup.printElement =
|
|
markup.printComment =
|
|
markup.printChildren =
|
|
void 0;
|
|
|
|
var _escapeHTML = _interopRequireDefault$1(escapeHTML$1);
|
|
|
|
function _interopRequireDefault$1(obj) {
|
|
return obj && obj.__esModule ? obj : {default: obj};
|
|
}
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
// Return empty string if keys is empty.
|
|
const printProps = (keys, props, config, indentation, depth, refs, printer) => {
|
|
const indentationNext = indentation + config.indent;
|
|
const colors = config.colors;
|
|
return keys
|
|
.map(key => {
|
|
const value = props[key];
|
|
let printed = printer(value, config, indentationNext, depth, refs);
|
|
|
|
if (typeof value !== 'string') {
|
|
if (printed.indexOf('\n') !== -1) {
|
|
printed =
|
|
config.spacingOuter +
|
|
indentationNext +
|
|
printed +
|
|
config.spacingOuter +
|
|
indentation;
|
|
}
|
|
|
|
printed = '{' + printed + '}';
|
|
}
|
|
|
|
return (
|
|
config.spacingInner +
|
|
indentation +
|
|
colors.prop.open +
|
|
key +
|
|
colors.prop.close +
|
|
'=' +
|
|
colors.value.open +
|
|
printed +
|
|
colors.value.close
|
|
);
|
|
})
|
|
.join('');
|
|
}; // Return empty string if children is empty.
|
|
|
|
markup.printProps = printProps;
|
|
|
|
const printChildren = (children, config, indentation, depth, refs, printer) =>
|
|
children
|
|
.map(
|
|
child =>
|
|
config.spacingOuter +
|
|
indentation +
|
|
(typeof child === 'string'
|
|
? printText(child, config)
|
|
: printer(child, config, indentation, depth, refs))
|
|
)
|
|
.join('');
|
|
|
|
markup.printChildren = printChildren;
|
|
|
|
const printText = (text, config) => {
|
|
const contentColor = config.colors.content;
|
|
return (
|
|
contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close
|
|
);
|
|
};
|
|
|
|
markup.printText = printText;
|
|
|
|
const printComment = (comment, config) => {
|
|
const commentColor = config.colors.comment;
|
|
return (
|
|
commentColor.open +
|
|
'<!--' +
|
|
(0, _escapeHTML.default)(comment) +
|
|
'-->' +
|
|
commentColor.close
|
|
);
|
|
}; // Separate the functions to format props, children, and element,
|
|
// so a plugin could override a particular function, if needed.
|
|
// Too bad, so sad: the traditional (but unnecessary) space
|
|
// in a self-closing tagColor requires a second test of printedProps.
|
|
|
|
markup.printComment = printComment;
|
|
|
|
const printElement = (
|
|
type,
|
|
printedProps,
|
|
printedChildren,
|
|
config,
|
|
indentation
|
|
) => {
|
|
const tagColor = config.colors.tag;
|
|
return (
|
|
tagColor.open +
|
|
'<' +
|
|
type +
|
|
(printedProps &&
|
|
tagColor.close +
|
|
printedProps +
|
|
config.spacingOuter +
|
|
indentation +
|
|
tagColor.open) +
|
|
(printedChildren
|
|
? '>' +
|
|
tagColor.close +
|
|
printedChildren +
|
|
config.spacingOuter +
|
|
indentation +
|
|
tagColor.open +
|
|
'</' +
|
|
type
|
|
: (printedProps && !config.min ? '' : ' ') + '/') +
|
|
'>' +
|
|
tagColor.close
|
|
);
|
|
};
|
|
|
|
markup.printElement = printElement;
|
|
|
|
const printElementAsLeaf = (type, config) => {
|
|
const tagColor = config.colors.tag;
|
|
return (
|
|
tagColor.open +
|
|
'<' +
|
|
type +
|
|
tagColor.close +
|
|
' …' +
|
|
tagColor.open +
|
|
' />' +
|
|
tagColor.close
|
|
);
|
|
};
|
|
|
|
markup.printElementAsLeaf = printElementAsLeaf;
|
|
|
|
Object.defineProperty(DOMElement$1, '__esModule', {
|
|
value: true
|
|
});
|
|
DOMElement$1.test = DOMElement$1.serialize = DOMElement$1.default = void 0;
|
|
|
|
var _markup$2 = markup;
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
const ELEMENT_NODE = 1;
|
|
const TEXT_NODE = 3;
|
|
const COMMENT_NODE = 8;
|
|
const FRAGMENT_NODE = 11;
|
|
const ELEMENT_REGEXP = /^((HTML|SVG)\w*)?Element$/;
|
|
|
|
const testHasAttribute = val => {
|
|
try {
|
|
return typeof val.hasAttribute === 'function' && val.hasAttribute('is');
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
const testNode = val => {
|
|
const constructorName = val.constructor.name;
|
|
const {nodeType, tagName} = val;
|
|
const isCustomElement =
|
|
(typeof tagName === 'string' && tagName.includes('-')) ||
|
|
testHasAttribute(val);
|
|
return (
|
|
(nodeType === ELEMENT_NODE &&
|
|
(ELEMENT_REGEXP.test(constructorName) || isCustomElement)) ||
|
|
(nodeType === TEXT_NODE && constructorName === 'Text') ||
|
|
(nodeType === COMMENT_NODE && constructorName === 'Comment') ||
|
|
(nodeType === FRAGMENT_NODE && constructorName === 'DocumentFragment')
|
|
);
|
|
};
|
|
|
|
const test$3 = val => {
|
|
var _val$constructor;
|
|
|
|
return (
|
|
(val === null || val === void 0
|
|
? void 0
|
|
: (_val$constructor = val.constructor) === null ||
|
|
_val$constructor === void 0
|
|
? void 0
|
|
: _val$constructor.name) && testNode(val)
|
|
);
|
|
};
|
|
|
|
DOMElement$1.test = test$3;
|
|
|
|
function nodeIsText(node) {
|
|
return node.nodeType === TEXT_NODE;
|
|
}
|
|
|
|
function nodeIsComment(node) {
|
|
return node.nodeType === COMMENT_NODE;
|
|
}
|
|
|
|
function nodeIsFragment(node) {
|
|
return node.nodeType === FRAGMENT_NODE;
|
|
}
|
|
|
|
const serialize$3 = (node, config, indentation, depth, refs, printer) => {
|
|
if (nodeIsText(node)) {
|
|
return (0, _markup$2.printText)(node.data, config);
|
|
}
|
|
|
|
if (nodeIsComment(node)) {
|
|
return (0, _markup$2.printComment)(node.data, config);
|
|
}
|
|
|
|
const type = nodeIsFragment(node)
|
|
? 'DocumentFragment'
|
|
: node.tagName.toLowerCase();
|
|
|
|
if (++depth > config.maxDepth) {
|
|
return (0, _markup$2.printElementAsLeaf)(type, config);
|
|
}
|
|
|
|
return (0, _markup$2.printElement)(
|
|
type,
|
|
(0, _markup$2.printProps)(
|
|
nodeIsFragment(node)
|
|
? []
|
|
: Array.from(node.attributes)
|
|
.map(attr => attr.name)
|
|
.sort(),
|
|
nodeIsFragment(node)
|
|
? {}
|
|
: Array.from(node.attributes).reduce((props, attribute) => {
|
|
props[attribute.name] = attribute.value;
|
|
return props;
|
|
}, {}),
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
),
|
|
(0, _markup$2.printChildren)(
|
|
Array.prototype.slice.call(node.childNodes || node.children),
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
),
|
|
config,
|
|
indentation
|
|
);
|
|
};
|
|
|
|
DOMElement$1.serialize = serialize$3;
|
|
const plugin$3 = {
|
|
serialize: serialize$3,
|
|
test: test$3
|
|
};
|
|
var _default$4 = plugin$3;
|
|
DOMElement$1.default = _default$4;
|
|
|
|
var Immutable$1 = {};
|
|
|
|
Object.defineProperty(Immutable$1, '__esModule', {
|
|
value: true
|
|
});
|
|
Immutable$1.test = Immutable$1.serialize = Immutable$1.default = void 0;
|
|
|
|
var _collections$1 = collections;
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
// SENTINEL constants are from https://github.com/facebook/immutable-js
|
|
const IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';
|
|
const IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';
|
|
const IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';
|
|
const IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';
|
|
const IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';
|
|
const IS_RECORD_SENTINEL = '@@__IMMUTABLE_RECORD__@@'; // immutable v4
|
|
|
|
const IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';
|
|
const IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';
|
|
const IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';
|
|
|
|
const getImmutableName = name => 'Immutable.' + name;
|
|
|
|
const printAsLeaf = name => '[' + name + ']';
|
|
|
|
const SPACE = ' ';
|
|
const LAZY = '…'; // Seq is lazy if it calls a method like filter
|
|
|
|
const printImmutableEntries = (
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
type
|
|
) =>
|
|
++depth > config.maxDepth
|
|
? printAsLeaf(getImmutableName(type))
|
|
: getImmutableName(type) +
|
|
SPACE +
|
|
'{' +
|
|
(0, _collections$1.printIteratorEntries)(
|
|
val.entries(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}'; // Record has an entries method because it is a collection in immutable v3.
|
|
// Return an iterator for Immutable Record from version v3 or v4.
|
|
|
|
function getRecordEntries(val) {
|
|
let i = 0;
|
|
return {
|
|
next() {
|
|
if (i < val._keys.length) {
|
|
const key = val._keys[i++];
|
|
return {
|
|
done: false,
|
|
value: [key, val.get(key)]
|
|
};
|
|
}
|
|
|
|
return {
|
|
done: true,
|
|
value: undefined
|
|
};
|
|
}
|
|
};
|
|
}
|
|
|
|
const printImmutableRecord = (
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) => {
|
|
// _name property is defined only for an Immutable Record instance
|
|
// which was constructed with a second optional descriptive name arg
|
|
const name = getImmutableName(val._name || 'Record');
|
|
return ++depth > config.maxDepth
|
|
? printAsLeaf(name)
|
|
: name +
|
|
SPACE +
|
|
'{' +
|
|
(0, _collections$1.printIteratorEntries)(
|
|
getRecordEntries(val),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}';
|
|
};
|
|
|
|
const printImmutableSeq = (val, config, indentation, depth, refs, printer) => {
|
|
const name = getImmutableName('Seq');
|
|
|
|
if (++depth > config.maxDepth) {
|
|
return printAsLeaf(name);
|
|
}
|
|
|
|
if (val[IS_KEYED_SENTINEL]) {
|
|
return (
|
|
name +
|
|
SPACE +
|
|
'{' + // from Immutable collection of entries or from ECMAScript object
|
|
(val._iter || val._object
|
|
? (0, _collections$1.printIteratorEntries)(
|
|
val.entries(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
)
|
|
: LAZY) +
|
|
'}'
|
|
);
|
|
}
|
|
|
|
return (
|
|
name +
|
|
SPACE +
|
|
'[' +
|
|
(val._iter || // from Immutable collection of values
|
|
val._array || // from ECMAScript array
|
|
val._collection || // from ECMAScript collection in immutable v4
|
|
val._iterable // from ECMAScript collection in immutable v3
|
|
? (0, _collections$1.printIteratorValues)(
|
|
val.values(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
)
|
|
: LAZY) +
|
|
']'
|
|
);
|
|
};
|
|
|
|
const printImmutableValues = (
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
type
|
|
) =>
|
|
++depth > config.maxDepth
|
|
? printAsLeaf(getImmutableName(type))
|
|
: getImmutableName(type) +
|
|
SPACE +
|
|
'[' +
|
|
(0, _collections$1.printIteratorValues)(
|
|
val.values(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
']';
|
|
|
|
const serialize$2 = (val, config, indentation, depth, refs, printer) => {
|
|
if (val[IS_MAP_SENTINEL]) {
|
|
return printImmutableEntries(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
val[IS_ORDERED_SENTINEL] ? 'OrderedMap' : 'Map'
|
|
);
|
|
}
|
|
|
|
if (val[IS_LIST_SENTINEL]) {
|
|
return printImmutableValues(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
'List'
|
|
);
|
|
}
|
|
|
|
if (val[IS_SET_SENTINEL]) {
|
|
return printImmutableValues(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
val[IS_ORDERED_SENTINEL] ? 'OrderedSet' : 'Set'
|
|
);
|
|
}
|
|
|
|
if (val[IS_STACK_SENTINEL]) {
|
|
return printImmutableValues(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
'Stack'
|
|
);
|
|
}
|
|
|
|
if (val[IS_SEQ_SENTINEL]) {
|
|
return printImmutableSeq(val, config, indentation, depth, refs, printer);
|
|
} // For compatibility with immutable v3 and v4, let record be the default.
|
|
|
|
return printImmutableRecord(val, config, indentation, depth, refs, printer);
|
|
}; // Explicitly comparing sentinel properties to true avoids false positive
|
|
// when mock identity-obj-proxy returns the key as the value for any key.
|
|
|
|
Immutable$1.serialize = serialize$2;
|
|
|
|
const test$2 = val =>
|
|
val &&
|
|
(val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true);
|
|
|
|
Immutable$1.test = test$2;
|
|
const plugin$2 = {
|
|
serialize: serialize$2,
|
|
test: test$2
|
|
};
|
|
var _default$3 = plugin$2;
|
|
Immutable$1.default = _default$3;
|
|
|
|
var ReactElement$1 = {};
|
|
|
|
var reactIs = {exports: {}};
|
|
|
|
var reactIs_production_min = {};
|
|
|
|
/** @license React v17.0.2
|
|
* react-is.production.min.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
var hasRequiredReactIs_production_min;
|
|
|
|
function requireReactIs_production_min () {
|
|
if (hasRequiredReactIs_production_min) return reactIs_production_min;
|
|
hasRequiredReactIs_production_min = 1;
|
|
var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;
|
|
if("function"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x("react.element");c=x("react.portal");d=x("react.fragment");e=x("react.strict_mode");f=x("react.profiler");g=x("react.provider");h=x("react.context");k=x("react.forward_ref");l=x("react.suspense");m=x("react.suspense_list");n=x("react.memo");p=x("react.lazy");q=x("react.block");r=x("react.server.block");u=x("react.fundamental");v=x("react.debug_trace_mode");w=x("react.legacy_hidden");}
|
|
function y(a){if("object"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;reactIs_production_min.ContextConsumer=h;reactIs_production_min.ContextProvider=z;reactIs_production_min.Element=A;reactIs_production_min.ForwardRef=B;reactIs_production_min.Fragment=C;reactIs_production_min.Lazy=D;reactIs_production_min.Memo=E;reactIs_production_min.Portal=F;reactIs_production_min.Profiler=G;reactIs_production_min.StrictMode=H;
|
|
reactIs_production_min.Suspense=I;reactIs_production_min.isAsyncMode=function(){return !1};reactIs_production_min.isConcurrentMode=function(){return !1};reactIs_production_min.isContextConsumer=function(a){return y(a)===h};reactIs_production_min.isContextProvider=function(a){return y(a)===g};reactIs_production_min.isElement=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===b};reactIs_production_min.isForwardRef=function(a){return y(a)===k};reactIs_production_min.isFragment=function(a){return y(a)===d};reactIs_production_min.isLazy=function(a){return y(a)===p};reactIs_production_min.isMemo=function(a){return y(a)===n};
|
|
reactIs_production_min.isPortal=function(a){return y(a)===c};reactIs_production_min.isProfiler=function(a){return y(a)===f};reactIs_production_min.isStrictMode=function(a){return y(a)===e};reactIs_production_min.isSuspense=function(a){return y(a)===l};reactIs_production_min.isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||"object"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};
|
|
reactIs_production_min.typeOf=y;
|
|
return reactIs_production_min;
|
|
}
|
|
|
|
var reactIs_development = {};
|
|
|
|
/** @license React v17.0.2
|
|
* react-is.development.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
var hasRequiredReactIs_development;
|
|
|
|
function requireReactIs_development () {
|
|
if (hasRequiredReactIs_development) return reactIs_development;
|
|
hasRequiredReactIs_development = 1;
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
(function() {
|
|
|
|
// ATTENTION
|
|
// When adding new symbols to this file,
|
|
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
|
|
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
|
|
// nor polyfill, then a plain number is used for performance.
|
|
var REACT_ELEMENT_TYPE = 0xeac7;
|
|
var REACT_PORTAL_TYPE = 0xeaca;
|
|
var REACT_FRAGMENT_TYPE = 0xeacb;
|
|
var REACT_STRICT_MODE_TYPE = 0xeacc;
|
|
var REACT_PROFILER_TYPE = 0xead2;
|
|
var REACT_PROVIDER_TYPE = 0xeacd;
|
|
var REACT_CONTEXT_TYPE = 0xeace;
|
|
var REACT_FORWARD_REF_TYPE = 0xead0;
|
|
var REACT_SUSPENSE_TYPE = 0xead1;
|
|
var REACT_SUSPENSE_LIST_TYPE = 0xead8;
|
|
var REACT_MEMO_TYPE = 0xead3;
|
|
var REACT_LAZY_TYPE = 0xead4;
|
|
var REACT_BLOCK_TYPE = 0xead9;
|
|
var REACT_SERVER_BLOCK_TYPE = 0xeada;
|
|
var REACT_FUNDAMENTAL_TYPE = 0xead5;
|
|
var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
|
|
var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
|
|
|
|
if (typeof Symbol === 'function' && Symbol.for) {
|
|
var symbolFor = Symbol.for;
|
|
REACT_ELEMENT_TYPE = symbolFor('react.element');
|
|
REACT_PORTAL_TYPE = symbolFor('react.portal');
|
|
REACT_FRAGMENT_TYPE = symbolFor('react.fragment');
|
|
REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');
|
|
REACT_PROFILER_TYPE = symbolFor('react.profiler');
|
|
REACT_PROVIDER_TYPE = symbolFor('react.provider');
|
|
REACT_CONTEXT_TYPE = symbolFor('react.context');
|
|
REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
|
|
REACT_SUSPENSE_TYPE = symbolFor('react.suspense');
|
|
REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
|
|
REACT_MEMO_TYPE = symbolFor('react.memo');
|
|
REACT_LAZY_TYPE = symbolFor('react.lazy');
|
|
REACT_BLOCK_TYPE = symbolFor('react.block');
|
|
REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
|
|
REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
|
|
symbolFor('react.scope');
|
|
symbolFor('react.opaque.id');
|
|
REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
|
|
symbolFor('react.offscreen');
|
|
REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
|
|
}
|
|
|
|
// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
|
|
|
|
var enableScopeAPI = false; // Experimental Create Event Handle API.
|
|
|
|
function isValidElementType(type) {
|
|
if (typeof type === 'string' || typeof type === 'function') {
|
|
return true;
|
|
} // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
|
|
|
|
|
|
if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {
|
|
return true;
|
|
}
|
|
|
|
if (typeof type === 'object' && type !== null) {
|
|
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function typeOf(object) {
|
|
if (typeof object === 'object' && object !== null) {
|
|
var $$typeof = object.$$typeof;
|
|
|
|
switch ($$typeof) {
|
|
case REACT_ELEMENT_TYPE:
|
|
var type = object.type;
|
|
|
|
switch (type) {
|
|
case REACT_FRAGMENT_TYPE:
|
|
case REACT_PROFILER_TYPE:
|
|
case REACT_STRICT_MODE_TYPE:
|
|
case REACT_SUSPENSE_TYPE:
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
return type;
|
|
|
|
default:
|
|
var $$typeofType = type && type.$$typeof;
|
|
|
|
switch ($$typeofType) {
|
|
case REACT_CONTEXT_TYPE:
|
|
case REACT_FORWARD_REF_TYPE:
|
|
case REACT_LAZY_TYPE:
|
|
case REACT_MEMO_TYPE:
|
|
case REACT_PROVIDER_TYPE:
|
|
return $$typeofType;
|
|
|
|
default:
|
|
return $$typeof;
|
|
}
|
|
|
|
}
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
return $$typeof;
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
var ContextConsumer = REACT_CONTEXT_TYPE;
|
|
var ContextProvider = REACT_PROVIDER_TYPE;
|
|
var Element = REACT_ELEMENT_TYPE;
|
|
var ForwardRef = REACT_FORWARD_REF_TYPE;
|
|
var Fragment = REACT_FRAGMENT_TYPE;
|
|
var Lazy = REACT_LAZY_TYPE;
|
|
var Memo = REACT_MEMO_TYPE;
|
|
var Portal = REACT_PORTAL_TYPE;
|
|
var Profiler = REACT_PROFILER_TYPE;
|
|
var StrictMode = REACT_STRICT_MODE_TYPE;
|
|
var Suspense = REACT_SUSPENSE_TYPE;
|
|
var hasWarnedAboutDeprecatedIsAsyncMode = false;
|
|
var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated
|
|
|
|
function isAsyncMode(object) {
|
|
{
|
|
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
|
|
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
|
|
|
|
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
function isConcurrentMode(object) {
|
|
{
|
|
if (!hasWarnedAboutDeprecatedIsConcurrentMode) {
|
|
hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint
|
|
|
|
console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
function isContextConsumer(object) {
|
|
return typeOf(object) === REACT_CONTEXT_TYPE;
|
|
}
|
|
function isContextProvider(object) {
|
|
return typeOf(object) === REACT_PROVIDER_TYPE;
|
|
}
|
|
function isElement(object) {
|
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
}
|
|
function isForwardRef(object) {
|
|
return typeOf(object) === REACT_FORWARD_REF_TYPE;
|
|
}
|
|
function isFragment(object) {
|
|
return typeOf(object) === REACT_FRAGMENT_TYPE;
|
|
}
|
|
function isLazy(object) {
|
|
return typeOf(object) === REACT_LAZY_TYPE;
|
|
}
|
|
function isMemo(object) {
|
|
return typeOf(object) === REACT_MEMO_TYPE;
|
|
}
|
|
function isPortal(object) {
|
|
return typeOf(object) === REACT_PORTAL_TYPE;
|
|
}
|
|
function isProfiler(object) {
|
|
return typeOf(object) === REACT_PROFILER_TYPE;
|
|
}
|
|
function isStrictMode(object) {
|
|
return typeOf(object) === REACT_STRICT_MODE_TYPE;
|
|
}
|
|
function isSuspense(object) {
|
|
return typeOf(object) === REACT_SUSPENSE_TYPE;
|
|
}
|
|
|
|
reactIs_development.ContextConsumer = ContextConsumer;
|
|
reactIs_development.ContextProvider = ContextProvider;
|
|
reactIs_development.Element = Element;
|
|
reactIs_development.ForwardRef = ForwardRef;
|
|
reactIs_development.Fragment = Fragment;
|
|
reactIs_development.Lazy = Lazy;
|
|
reactIs_development.Memo = Memo;
|
|
reactIs_development.Portal = Portal;
|
|
reactIs_development.Profiler = Profiler;
|
|
reactIs_development.StrictMode = StrictMode;
|
|
reactIs_development.Suspense = Suspense;
|
|
reactIs_development.isAsyncMode = isAsyncMode;
|
|
reactIs_development.isConcurrentMode = isConcurrentMode;
|
|
reactIs_development.isContextConsumer = isContextConsumer;
|
|
reactIs_development.isContextProvider = isContextProvider;
|
|
reactIs_development.isElement = isElement;
|
|
reactIs_development.isForwardRef = isForwardRef;
|
|
reactIs_development.isFragment = isFragment;
|
|
reactIs_development.isLazy = isLazy;
|
|
reactIs_development.isMemo = isMemo;
|
|
reactIs_development.isPortal = isPortal;
|
|
reactIs_development.isProfiler = isProfiler;
|
|
reactIs_development.isStrictMode = isStrictMode;
|
|
reactIs_development.isSuspense = isSuspense;
|
|
reactIs_development.isValidElementType = isValidElementType;
|
|
reactIs_development.typeOf = typeOf;
|
|
})();
|
|
}
|
|
return reactIs_development;
|
|
}
|
|
|
|
(function (module) {
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
module.exports = requireReactIs_production_min();
|
|
} else {
|
|
module.exports = requireReactIs_development();
|
|
}
|
|
} (reactIs));
|
|
|
|
Object.defineProperty(ReactElement$1, '__esModule', {
|
|
value: true
|
|
});
|
|
ReactElement$1.test = ReactElement$1.serialize = ReactElement$1.default = void 0;
|
|
|
|
var ReactIs = _interopRequireWildcard(reactIs.exports);
|
|
|
|
var _markup$1 = markup;
|
|
|
|
function _getRequireWildcardCache(nodeInterop) {
|
|
if (typeof WeakMap !== 'function') return null;
|
|
var cacheBabelInterop = new WeakMap();
|
|
var cacheNodeInterop = new WeakMap();
|
|
return (_getRequireWildcardCache = function (nodeInterop) {
|
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
})(nodeInterop);
|
|
}
|
|
|
|
function _interopRequireWildcard(obj, nodeInterop) {
|
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
return obj;
|
|
}
|
|
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
|
return {default: obj};
|
|
}
|
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
if (cache && cache.has(obj)) {
|
|
return cache.get(obj);
|
|
}
|
|
var newObj = {};
|
|
var hasPropertyDescriptor =
|
|
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
for (var key in obj) {
|
|
if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
var desc = hasPropertyDescriptor
|
|
? Object.getOwnPropertyDescriptor(obj, key)
|
|
: null;
|
|
if (desc && (desc.get || desc.set)) {
|
|
Object.defineProperty(newObj, key, desc);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
}
|
|
newObj.default = obj;
|
|
if (cache) {
|
|
cache.set(obj, newObj);
|
|
}
|
|
return newObj;
|
|
}
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
// Given element.props.children, or subtree during recursive traversal,
|
|
// return flattened array of children.
|
|
const getChildren = (arg, children = []) => {
|
|
if (Array.isArray(arg)) {
|
|
arg.forEach(item => {
|
|
getChildren(item, children);
|
|
});
|
|
} else if (arg != null && arg !== false) {
|
|
children.push(arg);
|
|
}
|
|
|
|
return children;
|
|
};
|
|
|
|
const getType = element => {
|
|
const type = element.type;
|
|
|
|
if (typeof type === 'string') {
|
|
return type;
|
|
}
|
|
|
|
if (typeof type === 'function') {
|
|
return type.displayName || type.name || 'Unknown';
|
|
}
|
|
|
|
if (ReactIs.isFragment(element)) {
|
|
return 'React.Fragment';
|
|
}
|
|
|
|
if (ReactIs.isSuspense(element)) {
|
|
return 'React.Suspense';
|
|
}
|
|
|
|
if (typeof type === 'object' && type !== null) {
|
|
if (ReactIs.isContextProvider(element)) {
|
|
return 'Context.Provider';
|
|
}
|
|
|
|
if (ReactIs.isContextConsumer(element)) {
|
|
return 'Context.Consumer';
|
|
}
|
|
|
|
if (ReactIs.isForwardRef(element)) {
|
|
if (type.displayName) {
|
|
return type.displayName;
|
|
}
|
|
|
|
const functionName = type.render.displayName || type.render.name || '';
|
|
return functionName !== ''
|
|
? 'ForwardRef(' + functionName + ')'
|
|
: 'ForwardRef';
|
|
}
|
|
|
|
if (ReactIs.isMemo(element)) {
|
|
const functionName =
|
|
type.displayName || type.type.displayName || type.type.name || '';
|
|
return functionName !== '' ? 'Memo(' + functionName + ')' : 'Memo';
|
|
}
|
|
}
|
|
|
|
return 'UNDEFINED';
|
|
};
|
|
|
|
const getPropKeys$1 = element => {
|
|
const {props} = element;
|
|
return Object.keys(props)
|
|
.filter(key => key !== 'children' && props[key] !== undefined)
|
|
.sort();
|
|
};
|
|
|
|
const serialize$1 = (element, config, indentation, depth, refs, printer) =>
|
|
++depth > config.maxDepth
|
|
? (0, _markup$1.printElementAsLeaf)(getType(element), config)
|
|
: (0, _markup$1.printElement)(
|
|
getType(element),
|
|
(0, _markup$1.printProps)(
|
|
getPropKeys$1(element),
|
|
element.props,
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
),
|
|
(0, _markup$1.printChildren)(
|
|
getChildren(element.props.children),
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
),
|
|
config,
|
|
indentation
|
|
);
|
|
|
|
ReactElement$1.serialize = serialize$1;
|
|
|
|
const test$1 = val => val != null && ReactIs.isElement(val);
|
|
|
|
ReactElement$1.test = test$1;
|
|
const plugin$1 = {
|
|
serialize: serialize$1,
|
|
test: test$1
|
|
};
|
|
var _default$2 = plugin$1;
|
|
ReactElement$1.default = _default$2;
|
|
|
|
var ReactTestComponent$1 = {};
|
|
|
|
Object.defineProperty(ReactTestComponent$1, '__esModule', {
|
|
value: true
|
|
});
|
|
ReactTestComponent$1.test = ReactTestComponent$1.serialize = ReactTestComponent$1.default = void 0;
|
|
|
|
var _markup = markup;
|
|
|
|
var global = (function () {
|
|
if (typeof globalThis !== 'undefined') {
|
|
return globalThis;
|
|
} else if (typeof global !== 'undefined') {
|
|
return global;
|
|
} else if (typeof self !== 'undefined') {
|
|
return self;
|
|
} else if (typeof window !== 'undefined') {
|
|
return window;
|
|
} else {
|
|
return Function('return this')();
|
|
}
|
|
})();
|
|
|
|
var Symbol$1 = global['jest-symbol-do-not-touch'] || global.Symbol;
|
|
const testSymbol =
|
|
typeof Symbol$1 === 'function' && Symbol$1.for
|
|
? Symbol$1.for('react.test.json')
|
|
: 0xea71357;
|
|
|
|
const getPropKeys = object => {
|
|
const {props} = object;
|
|
return props
|
|
? Object.keys(props)
|
|
.filter(key => props[key] !== undefined)
|
|
.sort()
|
|
: [];
|
|
};
|
|
|
|
const serialize = (object, config, indentation, depth, refs, printer) =>
|
|
++depth > config.maxDepth
|
|
? (0, _markup.printElementAsLeaf)(object.type, config)
|
|
: (0, _markup.printElement)(
|
|
object.type,
|
|
object.props
|
|
? (0, _markup.printProps)(
|
|
getPropKeys(object),
|
|
object.props,
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
)
|
|
: '',
|
|
object.children
|
|
? (0, _markup.printChildren)(
|
|
object.children,
|
|
config,
|
|
indentation + config.indent,
|
|
depth,
|
|
refs,
|
|
printer
|
|
)
|
|
: '',
|
|
config,
|
|
indentation
|
|
);
|
|
|
|
ReactTestComponent$1.serialize = serialize;
|
|
|
|
const test = val => val && val.$$typeof === testSymbol;
|
|
|
|
ReactTestComponent$1.test = test;
|
|
const plugin = {
|
|
serialize,
|
|
test
|
|
};
|
|
var _default$1 = plugin;
|
|
ReactTestComponent$1.default = _default$1;
|
|
|
|
Object.defineProperty(build, '__esModule', {
|
|
value: true
|
|
});
|
|
build.default = build.DEFAULT_OPTIONS = void 0;
|
|
var format_1 = build.format = format;
|
|
var plugins_1 = build.plugins = void 0;
|
|
|
|
var _ansiStyles = _interopRequireDefault(ansiStyles.exports);
|
|
|
|
var _collections = collections;
|
|
|
|
var _AsymmetricMatcher = _interopRequireDefault(
|
|
AsymmetricMatcher$1
|
|
);
|
|
|
|
var _ConvertAnsi = _interopRequireDefault(ConvertAnsi);
|
|
|
|
var _DOMCollection = _interopRequireDefault(DOMCollection$1);
|
|
|
|
var _DOMElement = _interopRequireDefault(DOMElement$1);
|
|
|
|
var _Immutable = _interopRequireDefault(Immutable$1);
|
|
|
|
var _ReactElement = _interopRequireDefault(ReactElement$1);
|
|
|
|
var _ReactTestComponent = _interopRequireDefault(
|
|
ReactTestComponent$1
|
|
);
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {default: obj};
|
|
}
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
/* eslint-disable local/ban-types-eventually */
|
|
const toString = Object.prototype.toString;
|
|
const toISOString = Date.prototype.toISOString;
|
|
const errorToString = Error.prototype.toString;
|
|
const regExpToString = RegExp.prototype.toString;
|
|
/**
|
|
* Explicitly comparing typeof constructor to function avoids undefined as name
|
|
* when mock identity-obj-proxy returns the key as the value for any key.
|
|
*/
|
|
|
|
const getConstructorName = val =>
|
|
(typeof val.constructor === 'function' && val.constructor.name) || 'Object';
|
|
/* global window */
|
|
|
|
/** Is val is equal to global window object? Works even if it does not exist :) */
|
|
|
|
const isWindow = val => typeof window !== 'undefined' && val === window;
|
|
|
|
const SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/;
|
|
const NEWLINE_REGEXP = /\n/gi;
|
|
|
|
class PrettyFormatPluginError extends Error {
|
|
constructor(message, stack) {
|
|
super(message);
|
|
this.stack = stack;
|
|
this.name = this.constructor.name;
|
|
}
|
|
}
|
|
|
|
function isToStringedArrayType(toStringed) {
|
|
return (
|
|
toStringed === '[object Array]' ||
|
|
toStringed === '[object ArrayBuffer]' ||
|
|
toStringed === '[object DataView]' ||
|
|
toStringed === '[object Float32Array]' ||
|
|
toStringed === '[object Float64Array]' ||
|
|
toStringed === '[object Int8Array]' ||
|
|
toStringed === '[object Int16Array]' ||
|
|
toStringed === '[object Int32Array]' ||
|
|
toStringed === '[object Uint8Array]' ||
|
|
toStringed === '[object Uint8ClampedArray]' ||
|
|
toStringed === '[object Uint16Array]' ||
|
|
toStringed === '[object Uint32Array]'
|
|
);
|
|
}
|
|
|
|
function printNumber(val) {
|
|
return Object.is(val, -0) ? '-0' : String(val);
|
|
}
|
|
|
|
function printBigInt(val) {
|
|
return String(`${val}n`);
|
|
}
|
|
|
|
function printFunction(val, printFunctionName) {
|
|
if (!printFunctionName) {
|
|
return '[Function]';
|
|
}
|
|
|
|
return '[Function ' + (val.name || 'anonymous') + ']';
|
|
}
|
|
|
|
function printSymbol(val) {
|
|
return String(val).replace(SYMBOL_REGEXP, 'Symbol($1)');
|
|
}
|
|
|
|
function printError(val) {
|
|
return '[' + errorToString.call(val) + ']';
|
|
}
|
|
/**
|
|
* The first port of call for printing an object, handles most of the
|
|
* data-types in JS.
|
|
*/
|
|
|
|
function printBasicValue(val, printFunctionName, escapeRegex, escapeString) {
|
|
if (val === true || val === false) {
|
|
return '' + val;
|
|
}
|
|
|
|
if (val === undefined) {
|
|
return 'undefined';
|
|
}
|
|
|
|
if (val === null) {
|
|
return 'null';
|
|
}
|
|
|
|
const typeOf = typeof val;
|
|
|
|
if (typeOf === 'number') {
|
|
return printNumber(val);
|
|
}
|
|
|
|
if (typeOf === 'bigint') {
|
|
return printBigInt(val);
|
|
}
|
|
|
|
if (typeOf === 'string') {
|
|
if (escapeString) {
|
|
return '"' + val.replace(/"|\\/g, '\\$&') + '"';
|
|
}
|
|
|
|
return '"' + val + '"';
|
|
}
|
|
|
|
if (typeOf === 'function') {
|
|
return printFunction(val, printFunctionName);
|
|
}
|
|
|
|
if (typeOf === 'symbol') {
|
|
return printSymbol(val);
|
|
}
|
|
|
|
const toStringed = toString.call(val);
|
|
|
|
if (toStringed === '[object WeakMap]') {
|
|
return 'WeakMap {}';
|
|
}
|
|
|
|
if (toStringed === '[object WeakSet]') {
|
|
return 'WeakSet {}';
|
|
}
|
|
|
|
if (
|
|
toStringed === '[object Function]' ||
|
|
toStringed === '[object GeneratorFunction]'
|
|
) {
|
|
return printFunction(val, printFunctionName);
|
|
}
|
|
|
|
if (toStringed === '[object Symbol]') {
|
|
return printSymbol(val);
|
|
}
|
|
|
|
if (toStringed === '[object Date]') {
|
|
return isNaN(+val) ? 'Date { NaN }' : toISOString.call(val);
|
|
}
|
|
|
|
if (toStringed === '[object Error]') {
|
|
return printError(val);
|
|
}
|
|
|
|
if (toStringed === '[object RegExp]') {
|
|
if (escapeRegex) {
|
|
// https://github.com/benjamingr/RegExp.escape/blob/main/polyfill.js
|
|
return regExpToString.call(val).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
}
|
|
|
|
return regExpToString.call(val);
|
|
}
|
|
|
|
if (val instanceof Error) {
|
|
return printError(val);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
/**
|
|
* Handles more complex objects ( such as objects with circular references.
|
|
* maps and sets etc )
|
|
*/
|
|
|
|
function printComplexValue(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
hasCalledToJSON
|
|
) {
|
|
if (refs.indexOf(val) !== -1) {
|
|
return '[Circular]';
|
|
}
|
|
|
|
refs = refs.slice();
|
|
refs.push(val);
|
|
const hitMaxDepth = ++depth > config.maxDepth;
|
|
const min = config.min;
|
|
|
|
if (
|
|
config.callToJSON &&
|
|
!hitMaxDepth &&
|
|
val.toJSON &&
|
|
typeof val.toJSON === 'function' &&
|
|
!hasCalledToJSON
|
|
) {
|
|
return printer(val.toJSON(), config, indentation, depth, refs, true);
|
|
}
|
|
|
|
const toStringed = toString.call(val);
|
|
|
|
if (toStringed === '[object Arguments]') {
|
|
return hitMaxDepth
|
|
? '[Arguments]'
|
|
: (min ? '' : 'Arguments ') +
|
|
'[' +
|
|
(0, _collections.printListItems)(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
']';
|
|
}
|
|
|
|
if (isToStringedArrayType(toStringed)) {
|
|
return hitMaxDepth
|
|
? '[' + val.constructor.name + ']'
|
|
: (min
|
|
? ''
|
|
: !config.printBasicPrototype && val.constructor.name === 'Array'
|
|
? ''
|
|
: val.constructor.name + ' ') +
|
|
'[' +
|
|
(0, _collections.printListItems)(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
']';
|
|
}
|
|
|
|
if (toStringed === '[object Map]') {
|
|
return hitMaxDepth
|
|
? '[Map]'
|
|
: 'Map {' +
|
|
(0, _collections.printIteratorEntries)(
|
|
val.entries(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer,
|
|
' => '
|
|
) +
|
|
'}';
|
|
}
|
|
|
|
if (toStringed === '[object Set]') {
|
|
return hitMaxDepth
|
|
? '[Set]'
|
|
: 'Set {' +
|
|
(0, _collections.printIteratorValues)(
|
|
val.values(),
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}';
|
|
} // Avoid failure to serialize global window object in jsdom test environment.
|
|
// For example, not even relevant if window is prop of React element.
|
|
|
|
return hitMaxDepth || isWindow(val)
|
|
? '[' + getConstructorName(val) + ']'
|
|
: (min
|
|
? ''
|
|
: !config.printBasicPrototype && getConstructorName(val) === 'Object'
|
|
? ''
|
|
: getConstructorName(val) + ' ') +
|
|
'{' +
|
|
(0, _collections.printObjectProperties)(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
printer
|
|
) +
|
|
'}';
|
|
}
|
|
|
|
function isNewPlugin(plugin) {
|
|
return plugin.serialize != null;
|
|
}
|
|
|
|
function printPlugin(plugin, val, config, indentation, depth, refs) {
|
|
let printed;
|
|
|
|
try {
|
|
printed = isNewPlugin(plugin)
|
|
? plugin.serialize(val, config, indentation, depth, refs, printer)
|
|
: plugin.print(
|
|
val,
|
|
valChild => printer(valChild, config, indentation, depth, refs),
|
|
str => {
|
|
const indentationNext = indentation + config.indent;
|
|
return (
|
|
indentationNext +
|
|
str.replace(NEWLINE_REGEXP, '\n' + indentationNext)
|
|
);
|
|
},
|
|
{
|
|
edgeSpacing: config.spacingOuter,
|
|
min: config.min,
|
|
spacing: config.spacingInner
|
|
},
|
|
config.colors
|
|
);
|
|
} catch (error) {
|
|
throw new PrettyFormatPluginError(error.message, error.stack);
|
|
}
|
|
|
|
if (typeof printed !== 'string') {
|
|
throw new Error(
|
|
`pretty-format: Plugin must return type "string" but instead returned "${typeof printed}".`
|
|
);
|
|
}
|
|
|
|
return printed;
|
|
}
|
|
|
|
function findPlugin(plugins, val) {
|
|
for (let p = 0; p < plugins.length; p++) {
|
|
try {
|
|
if (plugins[p].test(val)) {
|
|
return plugins[p];
|
|
}
|
|
} catch (error) {
|
|
throw new PrettyFormatPluginError(error.message, error.stack);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function printer(val, config, indentation, depth, refs, hasCalledToJSON) {
|
|
const plugin = findPlugin(config.plugins, val);
|
|
|
|
if (plugin !== null) {
|
|
return printPlugin(plugin, val, config, indentation, depth, refs);
|
|
}
|
|
|
|
const basicResult = printBasicValue(
|
|
val,
|
|
config.printFunctionName,
|
|
config.escapeRegex,
|
|
config.escapeString
|
|
);
|
|
|
|
if (basicResult !== null) {
|
|
return basicResult;
|
|
}
|
|
|
|
return printComplexValue(
|
|
val,
|
|
config,
|
|
indentation,
|
|
depth,
|
|
refs,
|
|
hasCalledToJSON
|
|
);
|
|
}
|
|
|
|
const DEFAULT_THEME = {
|
|
comment: 'gray',
|
|
content: 'reset',
|
|
prop: 'yellow',
|
|
tag: 'cyan',
|
|
value: 'green'
|
|
};
|
|
const DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME);
|
|
const DEFAULT_OPTIONS = {
|
|
callToJSON: true,
|
|
compareKeys: undefined,
|
|
escapeRegex: false,
|
|
escapeString: true,
|
|
highlight: false,
|
|
indent: 2,
|
|
maxDepth: Infinity,
|
|
min: false,
|
|
plugins: [],
|
|
printBasicPrototype: true,
|
|
printFunctionName: true,
|
|
theme: DEFAULT_THEME
|
|
};
|
|
build.DEFAULT_OPTIONS = DEFAULT_OPTIONS;
|
|
|
|
function validateOptions(options) {
|
|
Object.keys(options).forEach(key => {
|
|
if (!DEFAULT_OPTIONS.hasOwnProperty(key)) {
|
|
throw new Error(`pretty-format: Unknown option "${key}".`);
|
|
}
|
|
});
|
|
|
|
if (options.min && options.indent !== undefined && options.indent !== 0) {
|
|
throw new Error(
|
|
'pretty-format: Options "min" and "indent" cannot be used together.'
|
|
);
|
|
}
|
|
|
|
if (options.theme !== undefined) {
|
|
if (options.theme === null) {
|
|
throw new Error('pretty-format: Option "theme" must not be null.');
|
|
}
|
|
|
|
if (typeof options.theme !== 'object') {
|
|
throw new Error(
|
|
`pretty-format: Option "theme" must be of type "object" but instead received "${typeof options.theme}".`
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
const getColorsHighlight = options =>
|
|
DEFAULT_THEME_KEYS.reduce((colors, key) => {
|
|
const value =
|
|
options.theme && options.theme[key] !== undefined
|
|
? options.theme[key]
|
|
: DEFAULT_THEME[key];
|
|
const color = value && _ansiStyles.default[value];
|
|
|
|
if (
|
|
color &&
|
|
typeof color.close === 'string' &&
|
|
typeof color.open === 'string'
|
|
) {
|
|
colors[key] = color;
|
|
} else {
|
|
throw new Error(
|
|
`pretty-format: Option "theme" has a key "${key}" whose value "${value}" is undefined in ansi-styles.`
|
|
);
|
|
}
|
|
|
|
return colors;
|
|
}, Object.create(null));
|
|
|
|
const getColorsEmpty = () =>
|
|
DEFAULT_THEME_KEYS.reduce((colors, key) => {
|
|
colors[key] = {
|
|
close: '',
|
|
open: ''
|
|
};
|
|
return colors;
|
|
}, Object.create(null));
|
|
|
|
const getPrintFunctionName = options =>
|
|
options && options.printFunctionName !== undefined
|
|
? options.printFunctionName
|
|
: DEFAULT_OPTIONS.printFunctionName;
|
|
|
|
const getEscapeRegex = options =>
|
|
options && options.escapeRegex !== undefined
|
|
? options.escapeRegex
|
|
: DEFAULT_OPTIONS.escapeRegex;
|
|
|
|
const getEscapeString = options =>
|
|
options && options.escapeString !== undefined
|
|
? options.escapeString
|
|
: DEFAULT_OPTIONS.escapeString;
|
|
|
|
const getConfig = options => {
|
|
var _options$printBasicPr;
|
|
|
|
return {
|
|
callToJSON:
|
|
options && options.callToJSON !== undefined
|
|
? options.callToJSON
|
|
: DEFAULT_OPTIONS.callToJSON,
|
|
colors:
|
|
options && options.highlight
|
|
? getColorsHighlight(options)
|
|
: getColorsEmpty(),
|
|
compareKeys:
|
|
options && typeof options.compareKeys === 'function'
|
|
? options.compareKeys
|
|
: DEFAULT_OPTIONS.compareKeys,
|
|
escapeRegex: getEscapeRegex(options),
|
|
escapeString: getEscapeString(options),
|
|
indent:
|
|
options && options.min
|
|
? ''
|
|
: createIndent(
|
|
options && options.indent !== undefined
|
|
? options.indent
|
|
: DEFAULT_OPTIONS.indent
|
|
),
|
|
maxDepth:
|
|
options && options.maxDepth !== undefined
|
|
? options.maxDepth
|
|
: DEFAULT_OPTIONS.maxDepth,
|
|
min:
|
|
options && options.min !== undefined ? options.min : DEFAULT_OPTIONS.min,
|
|
plugins:
|
|
options && options.plugins !== undefined
|
|
? options.plugins
|
|
: DEFAULT_OPTIONS.plugins,
|
|
printBasicPrototype:
|
|
(_options$printBasicPr =
|
|
options === null || options === void 0
|
|
? void 0
|
|
: options.printBasicPrototype) !== null &&
|
|
_options$printBasicPr !== void 0
|
|
? _options$printBasicPr
|
|
: true,
|
|
printFunctionName: getPrintFunctionName(options),
|
|
spacingInner: options && options.min ? ' ' : '\n',
|
|
spacingOuter: options && options.min ? '' : '\n'
|
|
};
|
|
};
|
|
|
|
function createIndent(indent) {
|
|
return new Array(indent + 1).join(' ');
|
|
}
|
|
/**
|
|
* Returns a presentation string of your `val` object
|
|
* @param val any potential JavaScript object
|
|
* @param options Custom settings
|
|
*/
|
|
|
|
function format(val, options) {
|
|
if (options) {
|
|
validateOptions(options);
|
|
|
|
if (options.plugins) {
|
|
const plugin = findPlugin(options.plugins, val);
|
|
|
|
if (plugin !== null) {
|
|
return printPlugin(plugin, val, getConfig(options), '', 0, []);
|
|
}
|
|
}
|
|
}
|
|
|
|
const basicResult = printBasicValue(
|
|
val,
|
|
getPrintFunctionName(options),
|
|
getEscapeRegex(options),
|
|
getEscapeString(options)
|
|
);
|
|
|
|
if (basicResult !== null) {
|
|
return basicResult;
|
|
}
|
|
|
|
return printComplexValue(val, getConfig(options), '', 0, []);
|
|
}
|
|
|
|
const plugins = {
|
|
AsymmetricMatcher: _AsymmetricMatcher.default,
|
|
ConvertAnsi: _ConvertAnsi.default,
|
|
DOMCollection: _DOMCollection.default,
|
|
DOMElement: _DOMElement.default,
|
|
Immutable: _Immutable.default,
|
|
ReactElement: _ReactElement.default,
|
|
ReactTestComponent: _ReactTestComponent.default
|
|
};
|
|
plugins_1 = build.plugins = plugins;
|
|
var _default = format;
|
|
build.default = _default;
|
|
|
|
const {
|
|
AsymmetricMatcher,
|
|
DOMCollection,
|
|
DOMElement,
|
|
Immutable,
|
|
ReactElement,
|
|
ReactTestComponent
|
|
} = plugins_1;
|
|
const PLUGINS = [
|
|
ReactTestComponent,
|
|
ReactElement,
|
|
DOMElement,
|
|
DOMCollection,
|
|
Immutable,
|
|
AsymmetricMatcher
|
|
];
|
|
function stringify(object, maxDepth = 10, { maxLength, ...options } = {}) {
|
|
const MAX_LENGTH = maxLength ?? 1e4;
|
|
let result;
|
|
try {
|
|
result = format_1(object, {
|
|
maxDepth,
|
|
escapeString: false,
|
|
plugins: PLUGINS,
|
|
...options
|
|
});
|
|
} catch {
|
|
result = format_1(object, {
|
|
callToJSON: false,
|
|
maxDepth,
|
|
escapeString: false,
|
|
plugins: PLUGINS,
|
|
...options
|
|
});
|
|
}
|
|
return result.length >= MAX_LENGTH && maxDepth > 1 ? stringify(object, Math.floor(maxDepth / 2)) : result;
|
|
}
|
|
|
|
export { stringify as a, safeClearTimeout as b, createPatch as c, ansiStyles$1 as d, eastAsianWidth as e, format_1 as f, safeSetInterval as g, safeClearInterval as h, plugins_1 as p, safeSetTimeout as s };
|
|
|