Add node modules and compiled JavaScript from main
This commit is contained in:
parent
1021f818b9
commit
feeb5f7b58
7748 changed files with 1825934 additions and 2 deletions
21
node_modules/jest-matcher-utils/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
17
node_modules/jest-matcher-utils/build/Replaceable.d.ts
generated
vendored
Normal file
17
node_modules/jest-matcher-utils/build/Replaceable.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
declare type ReplaceableForEachCallBack = (value: any, key: any, object: any) => void;
|
||||
export default class Replaceable {
|
||||
object: any;
|
||||
type: string;
|
||||
constructor(object: any);
|
||||
static isReplaceable(obj1: any, obj2: any): boolean;
|
||||
forEach(cb: ReplaceableForEachCallBack): void;
|
||||
get(key: any): any;
|
||||
set(key: any, value: any): void;
|
||||
}
|
||||
export {};
|
86
node_modules/jest-matcher-utils/build/Replaceable.js
generated
vendored
Normal file
86
node_modules/jest-matcher-utils/build/Replaceable.js
generated
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _jestGetType = _interopRequireDefault(require('jest-get-type'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
const supportTypes = ['map', 'array', 'object'];
|
||||
|
||||
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
||||
class Replaceable {
|
||||
constructor(object) {
|
||||
_defineProperty(this, 'object', void 0);
|
||||
|
||||
_defineProperty(this, 'type', void 0);
|
||||
|
||||
this.object = object;
|
||||
this.type = (0, _jestGetType.default)(object);
|
||||
|
||||
if (!supportTypes.includes(this.type)) {
|
||||
throw new Error(`Type ${this.type} is not support in Replaceable!`);
|
||||
}
|
||||
}
|
||||
|
||||
static isReplaceable(obj1, obj2) {
|
||||
const obj1Type = (0, _jestGetType.default)(obj1);
|
||||
const obj2Type = (0, _jestGetType.default)(obj2);
|
||||
return obj1Type === obj2Type && supportTypes.includes(obj1Type);
|
||||
}
|
||||
|
||||
forEach(cb) {
|
||||
if (this.type === 'object') {
|
||||
const descriptors = Object.getOwnPropertyDescriptors(this.object);
|
||||
[
|
||||
...Object.keys(descriptors),
|
||||
...Object.getOwnPropertySymbols(descriptors)
|
||||
] //@ts-expect-error because typescript do not support symbol key in object
|
||||
//https://github.com/microsoft/TypeScript/issues/1863
|
||||
.filter(key => descriptors[key].enumerable)
|
||||
.forEach(key => {
|
||||
cb(this.object[key], key, this.object);
|
||||
});
|
||||
} else {
|
||||
this.object.forEach(cb);
|
||||
}
|
||||
}
|
||||
|
||||
get(key) {
|
||||
if (this.type === 'map') {
|
||||
return this.object.get(key);
|
||||
}
|
||||
|
||||
return this.object[key];
|
||||
}
|
||||
|
||||
set(key, value) {
|
||||
if (this.type === 'map') {
|
||||
this.object.set(key, value);
|
||||
} else {
|
||||
this.object[key] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* eslint-enable */
|
||||
|
||||
exports.default = Replaceable;
|
7
node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.d.ts
generated
vendored
Normal file
7
node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export default function deepCyclicCopyReplaceable<T>(value: T, cycles?: WeakMap<any, any>): T;
|
107
node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js
generated
vendored
Normal file
107
node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js
generated
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = deepCyclicCopyReplaceable;
|
||||
|
||||
var _prettyFormat = require('pretty-format');
|
||||
|
||||
/**
|
||||
* 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 builtInObject = [
|
||||
Array,
|
||||
Buffer,
|
||||
Date,
|
||||
Float32Array,
|
||||
Float64Array,
|
||||
Int16Array,
|
||||
Int32Array,
|
||||
Int8Array,
|
||||
Map,
|
||||
Set,
|
||||
RegExp,
|
||||
Uint16Array,
|
||||
Uint32Array,
|
||||
Uint8Array,
|
||||
Uint8ClampedArray
|
||||
];
|
||||
|
||||
const isBuiltInObject = object => builtInObject.includes(object.constructor);
|
||||
|
||||
const isMap = value => value.constructor === Map;
|
||||
|
||||
function deepCyclicCopyReplaceable(value, cycles = new WeakMap()) {
|
||||
if (typeof value !== 'object' || value === null) {
|
||||
return value;
|
||||
} else if (cycles.has(value)) {
|
||||
return cycles.get(value);
|
||||
} else if (Array.isArray(value)) {
|
||||
return deepCyclicCopyArray(value, cycles);
|
||||
} else if (isMap(value)) {
|
||||
return deepCyclicCopyMap(value, cycles);
|
||||
} else if (isBuiltInObject(value)) {
|
||||
return value;
|
||||
} else if (_prettyFormat.plugins.DOMElement.test(value)) {
|
||||
return value.cloneNode(true);
|
||||
} else {
|
||||
return deepCyclicCopyObject(value, cycles);
|
||||
}
|
||||
}
|
||||
|
||||
function deepCyclicCopyObject(object, cycles) {
|
||||
const newObject = Object.create(Object.getPrototypeOf(object));
|
||||
const descriptors = Object.getOwnPropertyDescriptors(object);
|
||||
cycles.set(object, newObject);
|
||||
const newDescriptors = [
|
||||
...Object.keys(descriptors),
|
||||
...Object.getOwnPropertySymbols(descriptors)
|
||||
].reduce(
|
||||
//@ts-expect-error because typescript do not support symbol key in object
|
||||
//https://github.com/microsoft/TypeScript/issues/1863
|
||||
(newDescriptors, key) => {
|
||||
const enumerable = descriptors[key].enumerable;
|
||||
newDescriptors[key] = {
|
||||
configurable: true,
|
||||
enumerable,
|
||||
value: deepCyclicCopyReplaceable(
|
||||
// this accesses the value or getter, depending. We just care about the value anyways, and this allows us to not mess with accessors
|
||||
// it has the side effect of invoking the getter here though, rather than copying it over
|
||||
object[key],
|
||||
cycles
|
||||
),
|
||||
writable: true
|
||||
};
|
||||
return newDescriptors;
|
||||
},
|
||||
{}
|
||||
); //@ts-expect-error because typescript do not support symbol key in object
|
||||
//https://github.com/microsoft/TypeScript/issues/1863
|
||||
|
||||
return Object.defineProperties(newObject, newDescriptors);
|
||||
}
|
||||
|
||||
function deepCyclicCopyArray(array, cycles) {
|
||||
const newArray = new (Object.getPrototypeOf(array).constructor)(array.length);
|
||||
const length = array.length;
|
||||
cycles.set(array, newArray);
|
||||
|
||||
for (let i = 0; i < length; i++) {
|
||||
newArray[i] = deepCyclicCopyReplaceable(array[i], cycles);
|
||||
}
|
||||
|
||||
return newArray;
|
||||
}
|
||||
|
||||
function deepCyclicCopyMap(map, cycles) {
|
||||
const newMap = new Map();
|
||||
cycles.set(map, newMap);
|
||||
map.forEach((value, key) => {
|
||||
newMap.set(key, deepCyclicCopyReplaceable(value, cycles));
|
||||
});
|
||||
return newMap;
|
||||
}
|
53
node_modules/jest-matcher-utils/build/index.d.ts
generated
vendored
Normal file
53
node_modules/jest-matcher-utils/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import chalk = require('chalk');
|
||||
import { DiffOptions as ImportDiffOptions } from 'jest-diff';
|
||||
declare type MatcherHintColor = (arg: string) => string;
|
||||
export declare type MatcherHintOptions = {
|
||||
comment?: string;
|
||||
expectedColor?: MatcherHintColor;
|
||||
isDirectExpectCall?: boolean;
|
||||
isNot?: boolean;
|
||||
promise?: string;
|
||||
receivedColor?: MatcherHintColor;
|
||||
secondArgument?: string;
|
||||
secondArgumentColor?: MatcherHintColor;
|
||||
};
|
||||
export declare type DiffOptions = ImportDiffOptions;
|
||||
export declare const EXPECTED_COLOR: chalk.Chalk;
|
||||
export declare const RECEIVED_COLOR: chalk.Chalk;
|
||||
export declare const INVERTED_COLOR: chalk.Chalk;
|
||||
export declare const BOLD_WEIGHT: chalk.Chalk;
|
||||
export declare const DIM_COLOR: chalk.Chalk;
|
||||
export declare const SUGGEST_TO_CONTAIN_EQUAL: string;
|
||||
export declare const stringify: (object: unknown, maxDepth?: number) => string;
|
||||
export declare const highlightTrailingWhitespace: (text: string) => string;
|
||||
export declare const printReceived: (object: unknown) => string;
|
||||
export declare const printExpected: (value: unknown) => string;
|
||||
export declare const printWithType: (name: string, value: unknown, print: (value: unknown) => string) => string;
|
||||
export declare const ensureNoExpected: (expected: unknown, matcherName: string, options?: MatcherHintOptions | undefined) => void;
|
||||
/**
|
||||
* Ensures that `actual` is of type `number | bigint`
|
||||
*/
|
||||
export declare const ensureActualIsNumber: (actual: unknown, matcherName: string, options?: MatcherHintOptions | undefined) => void;
|
||||
/**
|
||||
* Ensures that `expected` is of type `number | bigint`
|
||||
*/
|
||||
export declare const ensureExpectedIsNumber: (expected: unknown, matcherName: string, options?: MatcherHintOptions | undefined) => void;
|
||||
/**
|
||||
* Ensures that `actual` & `expected` are of type `number | bigint`
|
||||
*/
|
||||
export declare const ensureNumbers: (actual: unknown, expected: unknown, matcherName: string, options?: MatcherHintOptions | undefined) => void;
|
||||
export declare const ensureExpectedIsNonNegativeInteger: (expected: unknown, matcherName: string, options?: MatcherHintOptions | undefined) => void;
|
||||
export declare const printDiffOrStringify: (expected: unknown, received: unknown, expectedLabel: string, receivedLabel: string, expand: boolean) => string;
|
||||
export declare const diff: (a: unknown, b: unknown, options?: ImportDiffOptions | undefined) => string | null;
|
||||
export declare const pluralize: (word: string, count: number) => string;
|
||||
declare type PrintLabel = (string: string) => string;
|
||||
export declare const getLabelPrinter: (...strings: Array<string>) => PrintLabel;
|
||||
export declare const matcherErrorMessage: (hint: string, generic: string, specific?: string | undefined) => string;
|
||||
export declare const matcherHint: (matcherName: string, received?: string, expected?: string, options?: MatcherHintOptions) => string;
|
||||
export {};
|
613
node_modules/jest-matcher-utils/build/index.js
generated
vendored
Normal file
613
node_modules/jest-matcher-utils/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,613 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.matcherHint = exports.matcherErrorMessage = exports.getLabelPrinter = exports.pluralize = exports.diff = exports.printDiffOrStringify = exports.ensureExpectedIsNonNegativeInteger = exports.ensureNumbers = exports.ensureExpectedIsNumber = exports.ensureActualIsNumber = exports.ensureNoExpected = exports.printWithType = exports.printExpected = exports.printReceived = exports.highlightTrailingWhitespace = exports.stringify = exports.SUGGEST_TO_CONTAIN_EQUAL = exports.DIM_COLOR = exports.BOLD_WEIGHT = exports.INVERTED_COLOR = exports.RECEIVED_COLOR = exports.EXPECTED_COLOR = void 0;
|
||||
|
||||
var _chalk = _interopRequireDefault(require('chalk'));
|
||||
|
||||
var _jestDiff = _interopRequireWildcard(require('jest-diff'));
|
||||
|
||||
var _jestGetType = _interopRequireDefault(require('jest-get-type'));
|
||||
|
||||
var _prettyFormat = _interopRequireDefault(require('pretty-format'));
|
||||
|
||||
var _Replaceable = _interopRequireDefault(require('./Replaceable'));
|
||||
|
||||
var _deepCyclicCopyReplaceable = _interopRequireDefault(
|
||||
require('./deepCyclicCopyReplaceable')
|
||||
);
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (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;
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
const {
|
||||
AsymmetricMatcher,
|
||||
DOMCollection,
|
||||
DOMElement,
|
||||
Immutable,
|
||||
ReactElement,
|
||||
ReactTestComponent
|
||||
} = _prettyFormat.default.plugins;
|
||||
const PLUGINS = [
|
||||
ReactTestComponent,
|
||||
ReactElement,
|
||||
DOMElement,
|
||||
DOMCollection,
|
||||
Immutable,
|
||||
AsymmetricMatcher
|
||||
];
|
||||
const EXPECTED_COLOR = _chalk.default.green;
|
||||
exports.EXPECTED_COLOR = EXPECTED_COLOR;
|
||||
const RECEIVED_COLOR = _chalk.default.red;
|
||||
exports.RECEIVED_COLOR = RECEIVED_COLOR;
|
||||
const INVERTED_COLOR = _chalk.default.inverse;
|
||||
exports.INVERTED_COLOR = INVERTED_COLOR;
|
||||
const BOLD_WEIGHT = _chalk.default.bold;
|
||||
exports.BOLD_WEIGHT = BOLD_WEIGHT;
|
||||
const DIM_COLOR = _chalk.default.dim;
|
||||
exports.DIM_COLOR = DIM_COLOR;
|
||||
const MULTILINE_REGEXP = /\n/;
|
||||
const SPACE_SYMBOL = '\u{00B7}'; // middle dot
|
||||
|
||||
const NUMBERS = [
|
||||
'zero',
|
||||
'one',
|
||||
'two',
|
||||
'three',
|
||||
'four',
|
||||
'five',
|
||||
'six',
|
||||
'seven',
|
||||
'eight',
|
||||
'nine',
|
||||
'ten',
|
||||
'eleven',
|
||||
'twelve',
|
||||
'thirteen'
|
||||
];
|
||||
|
||||
const SUGGEST_TO_CONTAIN_EQUAL = _chalk.default.dim(
|
||||
'Looks like you wanted to test for object/array equality with the stricter `toContain` matcher. You probably need to use `toContainEqual` instead.'
|
||||
);
|
||||
|
||||
exports.SUGGEST_TO_CONTAIN_EQUAL = SUGGEST_TO_CONTAIN_EQUAL;
|
||||
|
||||
const stringify = (object, maxDepth = 10) => {
|
||||
const MAX_LENGTH = 10000;
|
||||
let result;
|
||||
|
||||
try {
|
||||
result = (0, _prettyFormat.default)(object, {
|
||||
maxDepth,
|
||||
min: true,
|
||||
plugins: PLUGINS
|
||||
});
|
||||
} catch {
|
||||
result = (0, _prettyFormat.default)(object, {
|
||||
callToJSON: false,
|
||||
maxDepth,
|
||||
min: true,
|
||||
plugins: PLUGINS
|
||||
});
|
||||
}
|
||||
|
||||
return result.length >= MAX_LENGTH && maxDepth > 1
|
||||
? stringify(object, Math.floor(maxDepth / 2))
|
||||
: result;
|
||||
};
|
||||
|
||||
exports.stringify = stringify;
|
||||
|
||||
const highlightTrailingWhitespace = text =>
|
||||
text.replace(/\s+$/gm, _chalk.default.inverse('$&')); // Instead of inverse highlight which now implies a change,
|
||||
// replace common spaces with middle dot at the end of any line.
|
||||
|
||||
exports.highlightTrailingWhitespace = highlightTrailingWhitespace;
|
||||
|
||||
const replaceTrailingSpaces = text =>
|
||||
text.replace(/\s+$/gm, spaces => SPACE_SYMBOL.repeat(spaces.length));
|
||||
|
||||
const printReceived = object =>
|
||||
RECEIVED_COLOR(replaceTrailingSpaces(stringify(object)));
|
||||
|
||||
exports.printReceived = printReceived;
|
||||
|
||||
const printExpected = value =>
|
||||
EXPECTED_COLOR(replaceTrailingSpaces(stringify(value)));
|
||||
|
||||
exports.printExpected = printExpected;
|
||||
|
||||
const printWithType = (name, value, print) => {
|
||||
const type = (0, _jestGetType.default)(value);
|
||||
const hasType =
|
||||
type !== 'null' && type !== 'undefined'
|
||||
? `${name} has type: ${type}\n`
|
||||
: '';
|
||||
const hasValue = `${name} has value: ${print(value)}`;
|
||||
return hasType + hasValue;
|
||||
};
|
||||
|
||||
exports.printWithType = printWithType;
|
||||
|
||||
const ensureNoExpected = (expected, matcherName, options) => {
|
||||
if (typeof expected !== 'undefined') {
|
||||
// Prepend maybe not only for backward compatibility.
|
||||
const matcherString = (options ? '' : '[.not]') + matcherName;
|
||||
throw new Error(
|
||||
matcherErrorMessage(
|
||||
matcherHint(matcherString, undefined, '', options), // Because expected is omitted in hint above,
|
||||
// expected is black instead of green in message below.
|
||||
'this matcher must not have an expected argument',
|
||||
printWithType('Expected', expected, printExpected)
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Ensures that `actual` is of type `number | bigint`
|
||||
*/
|
||||
|
||||
exports.ensureNoExpected = ensureNoExpected;
|
||||
|
||||
const ensureActualIsNumber = (actual, matcherName, options) => {
|
||||
if (typeof actual !== 'number' && typeof actual !== 'bigint') {
|
||||
// Prepend maybe not only for backward compatibility.
|
||||
const matcherString = (options ? '' : '[.not]') + matcherName;
|
||||
throw new Error(
|
||||
matcherErrorMessage(
|
||||
matcherHint(matcherString, undefined, undefined, options),
|
||||
`${RECEIVED_COLOR('received')} value must be a number or bigint`,
|
||||
printWithType('Received', actual, printReceived)
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Ensures that `expected` is of type `number | bigint`
|
||||
*/
|
||||
|
||||
exports.ensureActualIsNumber = ensureActualIsNumber;
|
||||
|
||||
const ensureExpectedIsNumber = (expected, matcherName, options) => {
|
||||
if (typeof expected !== 'number' && typeof expected !== 'bigint') {
|
||||
// Prepend maybe not only for backward compatibility.
|
||||
const matcherString = (options ? '' : '[.not]') + matcherName;
|
||||
throw new Error(
|
||||
matcherErrorMessage(
|
||||
matcherHint(matcherString, undefined, undefined, options),
|
||||
`${EXPECTED_COLOR('expected')} value must be a number or bigint`,
|
||||
printWithType('Expected', expected, printExpected)
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Ensures that `actual` & `expected` are of type `number | bigint`
|
||||
*/
|
||||
|
||||
exports.ensureExpectedIsNumber = ensureExpectedIsNumber;
|
||||
|
||||
const ensureNumbers = (actual, expected, matcherName, options) => {
|
||||
ensureActualIsNumber(actual, matcherName, options);
|
||||
ensureExpectedIsNumber(expected, matcherName, options);
|
||||
};
|
||||
|
||||
exports.ensureNumbers = ensureNumbers;
|
||||
|
||||
const ensureExpectedIsNonNegativeInteger = (expected, matcherName, options) => {
|
||||
if (
|
||||
typeof expected !== 'number' ||
|
||||
!Number.isSafeInteger(expected) ||
|
||||
expected < 0
|
||||
) {
|
||||
// Prepend maybe not only for backward compatibility.
|
||||
const matcherString = (options ? '' : '[.not]') + matcherName;
|
||||
throw new Error(
|
||||
matcherErrorMessage(
|
||||
matcherHint(matcherString, undefined, undefined, options),
|
||||
`${EXPECTED_COLOR('expected')} value must be a non-negative integer`,
|
||||
printWithType('Expected', expected, printExpected)
|
||||
)
|
||||
);
|
||||
}
|
||||
}; // Given array of diffs, return concatenated string:
|
||||
// * include common substrings
|
||||
// * exclude change substrings which have opposite op
|
||||
// * include change substrings which have argument op
|
||||
// with inverse highlight only if there is a common substring
|
||||
|
||||
exports.ensureExpectedIsNonNegativeInteger = ensureExpectedIsNonNegativeInteger;
|
||||
|
||||
const getCommonAndChangedSubstrings = (diffs, op, hasCommonDiff) =>
|
||||
diffs.reduce(
|
||||
(reduced, diff) =>
|
||||
reduced +
|
||||
(diff[0] === _jestDiff.DIFF_EQUAL
|
||||
? diff[1]
|
||||
: diff[0] !== op
|
||||
? ''
|
||||
: hasCommonDiff
|
||||
? INVERTED_COLOR(diff[1])
|
||||
: diff[1]),
|
||||
''
|
||||
);
|
||||
|
||||
const isLineDiffable = (expected, received) => {
|
||||
const expectedType = (0, _jestGetType.default)(expected);
|
||||
const receivedType = (0, _jestGetType.default)(received);
|
||||
|
||||
if (expectedType !== receivedType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_jestGetType.default.isPrimitive(expected)) {
|
||||
// Print generic line diff for strings only:
|
||||
// * if neither string is empty
|
||||
// * if either string has more than one line
|
||||
return (
|
||||
typeof expected === 'string' &&
|
||||
typeof received === 'string' &&
|
||||
expected.length !== 0 &&
|
||||
received.length !== 0 &&
|
||||
(MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received))
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
expectedType === 'date' ||
|
||||
expectedType === 'function' ||
|
||||
expectedType === 'regexp'
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (expected instanceof Error && received instanceof Error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
expectedType === 'object' &&
|
||||
typeof expected.asymmetricMatch === 'function'
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
receivedType === 'object' &&
|
||||
typeof received.asymmetricMatch === 'function'
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const MAX_DIFF_STRING_LENGTH = 20000;
|
||||
|
||||
const printDiffOrStringify = (
|
||||
expected,
|
||||
received,
|
||||
expectedLabel,
|
||||
receivedLabel,
|
||||
expand
|
||||
) => {
|
||||
if (
|
||||
typeof expected === 'string' &&
|
||||
typeof received === 'string' &&
|
||||
expected.length !== 0 &&
|
||||
received.length !== 0 &&
|
||||
expected.length <= MAX_DIFF_STRING_LENGTH &&
|
||||
received.length <= MAX_DIFF_STRING_LENGTH &&
|
||||
expected !== received
|
||||
) {
|
||||
if (expected.includes('\n') || received.includes('\n')) {
|
||||
return (0, _jestDiff.diffStringsUnified)(expected, received, {
|
||||
aAnnotation: expectedLabel,
|
||||
bAnnotation: receivedLabel,
|
||||
changeLineTrailingSpaceColor: _chalk.default.bgYellow,
|
||||
commonLineTrailingSpaceColor: _chalk.default.bgYellow,
|
||||
emptyFirstOrLastLinePlaceholder: '↵',
|
||||
// U+21B5
|
||||
expand,
|
||||
includeChangeCounts: true
|
||||
});
|
||||
}
|
||||
|
||||
const diffs = (0, _jestDiff.diffStringsRaw)(expected, received, true);
|
||||
const hasCommonDiff = diffs.some(diff => diff[0] === _jestDiff.DIFF_EQUAL);
|
||||
const printLabel = getLabelPrinter(expectedLabel, receivedLabel);
|
||||
const expectedLine =
|
||||
printLabel(expectedLabel) +
|
||||
printExpected(
|
||||
getCommonAndChangedSubstrings(
|
||||
diffs,
|
||||
_jestDiff.DIFF_DELETE,
|
||||
hasCommonDiff
|
||||
)
|
||||
);
|
||||
const receivedLine =
|
||||
printLabel(receivedLabel) +
|
||||
printReceived(
|
||||
getCommonAndChangedSubstrings(
|
||||
diffs,
|
||||
_jestDiff.DIFF_INSERT,
|
||||
hasCommonDiff
|
||||
)
|
||||
);
|
||||
return expectedLine + '\n' + receivedLine;
|
||||
}
|
||||
|
||||
if (isLineDiffable(expected, received)) {
|
||||
const {
|
||||
replacedExpected,
|
||||
replacedReceived
|
||||
} = replaceMatchedToAsymmetricMatcher(
|
||||
(0, _deepCyclicCopyReplaceable.default)(expected),
|
||||
(0, _deepCyclicCopyReplaceable.default)(received),
|
||||
[],
|
||||
[]
|
||||
);
|
||||
const difference = (0, _jestDiff.default)(
|
||||
replacedExpected,
|
||||
replacedReceived,
|
||||
{
|
||||
aAnnotation: expectedLabel,
|
||||
bAnnotation: receivedLabel,
|
||||
expand,
|
||||
includeChangeCounts: true
|
||||
}
|
||||
);
|
||||
|
||||
if (
|
||||
typeof difference === 'string' &&
|
||||
difference.includes('- ' + expectedLabel) &&
|
||||
difference.includes('+ ' + receivedLabel)
|
||||
) {
|
||||
return difference;
|
||||
}
|
||||
}
|
||||
|
||||
const printLabel = getLabelPrinter(expectedLabel, receivedLabel);
|
||||
const expectedLine = printLabel(expectedLabel) + printExpected(expected);
|
||||
const receivedLine =
|
||||
printLabel(receivedLabel) +
|
||||
(stringify(expected) === stringify(received)
|
||||
? 'serializes to the same string'
|
||||
: printReceived(received));
|
||||
return expectedLine + '\n' + receivedLine;
|
||||
}; // Sometimes, e.g. when comparing two numbers, the output from jest-diff
|
||||
// does not contain more information than the `Expected:` / `Received:` already gives.
|
||||
// In those cases, we do not print a diff to make the output shorter and not redundant.
|
||||
|
||||
exports.printDiffOrStringify = printDiffOrStringify;
|
||||
|
||||
const shouldPrintDiff = (actual, expected) => {
|
||||
if (typeof actual === 'number' && typeof expected === 'number') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof actual === 'bigint' && typeof expected === 'bigint') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof actual === 'boolean' && typeof expected === 'boolean') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
function replaceMatchedToAsymmetricMatcher(
|
||||
replacedExpected,
|
||||
replacedReceived,
|
||||
expectedCycles,
|
||||
receivedCycles
|
||||
) {
|
||||
if (!_Replaceable.default.isReplaceable(replacedExpected, replacedReceived)) {
|
||||
return {
|
||||
replacedExpected,
|
||||
replacedReceived
|
||||
};
|
||||
}
|
||||
|
||||
if (
|
||||
expectedCycles.includes(replacedExpected) ||
|
||||
receivedCycles.includes(replacedReceived)
|
||||
) {
|
||||
return {
|
||||
replacedExpected,
|
||||
replacedReceived
|
||||
};
|
||||
}
|
||||
|
||||
expectedCycles.push(replacedExpected);
|
||||
receivedCycles.push(replacedReceived);
|
||||
const expectedReplaceable = new _Replaceable.default(replacedExpected);
|
||||
const receivedReplaceable = new _Replaceable.default(replacedReceived);
|
||||
expectedReplaceable.forEach((expectedValue, key) => {
|
||||
const receivedValue = receivedReplaceable.get(key);
|
||||
|
||||
if (isAsymmetricMatcher(expectedValue)) {
|
||||
if (expectedValue.asymmetricMatch(receivedValue)) {
|
||||
receivedReplaceable.set(key, expectedValue);
|
||||
}
|
||||
} else if (isAsymmetricMatcher(receivedValue)) {
|
||||
if (receivedValue.asymmetricMatch(expectedValue)) {
|
||||
expectedReplaceable.set(key, receivedValue);
|
||||
}
|
||||
} else if (
|
||||
_Replaceable.default.isReplaceable(expectedValue, receivedValue)
|
||||
) {
|
||||
const replaced = replaceMatchedToAsymmetricMatcher(
|
||||
expectedValue,
|
||||
receivedValue,
|
||||
expectedCycles,
|
||||
receivedCycles
|
||||
);
|
||||
expectedReplaceable.set(key, replaced.replacedExpected);
|
||||
receivedReplaceable.set(key, replaced.replacedReceived);
|
||||
}
|
||||
});
|
||||
return {
|
||||
replacedExpected: expectedReplaceable.object,
|
||||
replacedReceived: receivedReplaceable.object
|
||||
};
|
||||
}
|
||||
|
||||
function isAsymmetricMatcher(data) {
|
||||
const type = (0, _jestGetType.default)(data);
|
||||
return type === 'object' && typeof data.asymmetricMatch === 'function';
|
||||
}
|
||||
|
||||
const diff = (a, b, options) =>
|
||||
shouldPrintDiff(a, b) ? (0, _jestDiff.default)(a, b, options) : null;
|
||||
|
||||
exports.diff = diff;
|
||||
|
||||
const pluralize = (word, count) =>
|
||||
(NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); // To display lines of labeled values as two columns with monospace alignment:
|
||||
// given the strings which will describe the values,
|
||||
// return function which given each string, returns the label:
|
||||
// string, colon, space, and enough padding spaces to align the value.
|
||||
|
||||
exports.pluralize = pluralize;
|
||||
|
||||
const getLabelPrinter = (...strings) => {
|
||||
const maxLength = strings.reduce(
|
||||
(max, string) => (string.length > max ? string.length : max),
|
||||
0
|
||||
);
|
||||
return string => `${string}: ${' '.repeat(maxLength - string.length)}`;
|
||||
};
|
||||
|
||||
exports.getLabelPrinter = getLabelPrinter;
|
||||
|
||||
const matcherErrorMessage = (hint, generic, specific) =>
|
||||
`${hint}\n\n${_chalk.default.bold('Matcher error')}: ${generic}${
|
||||
typeof specific === 'string' ? '\n\n' + specific : ''
|
||||
}`; // Display assertion for the report when a test fails.
|
||||
// New format: rejects/resolves, not, and matcher name have black color
|
||||
// Old format: matcher name has dim color
|
||||
|
||||
exports.matcherErrorMessage = matcherErrorMessage;
|
||||
|
||||
const matcherHint = (
|
||||
matcherName,
|
||||
received = 'received',
|
||||
expected = 'expected',
|
||||
options = {}
|
||||
) => {
|
||||
const {
|
||||
comment = '',
|
||||
expectedColor = EXPECTED_COLOR,
|
||||
isDirectExpectCall = false,
|
||||
// seems redundant with received === ''
|
||||
isNot = false,
|
||||
promise = '',
|
||||
receivedColor = RECEIVED_COLOR,
|
||||
secondArgument = '',
|
||||
secondArgumentColor = EXPECTED_COLOR
|
||||
} = options;
|
||||
let hint = '';
|
||||
let dimString = 'expect'; // concatenate adjacent dim substrings
|
||||
|
||||
if (!isDirectExpectCall && received !== '') {
|
||||
hint += DIM_COLOR(dimString + '(') + receivedColor(received);
|
||||
dimString = ')';
|
||||
}
|
||||
|
||||
if (promise !== '') {
|
||||
hint += DIM_COLOR(dimString + '.') + promise;
|
||||
dimString = '';
|
||||
}
|
||||
|
||||
if (isNot) {
|
||||
hint += DIM_COLOR(dimString + '.') + 'not';
|
||||
dimString = '';
|
||||
}
|
||||
|
||||
if (matcherName.includes('.')) {
|
||||
// Old format: for backward compatibility,
|
||||
// especially without promise or isNot options
|
||||
dimString += matcherName;
|
||||
} else {
|
||||
// New format: omit period from matcherName arg
|
||||
hint += DIM_COLOR(dimString + '.') + matcherName;
|
||||
dimString = '';
|
||||
}
|
||||
|
||||
if (expected === '') {
|
||||
dimString += '()';
|
||||
} else {
|
||||
hint += DIM_COLOR(dimString + '(') + expectedColor(expected);
|
||||
|
||||
if (secondArgument) {
|
||||
hint += DIM_COLOR(', ') + secondArgumentColor(secondArgument);
|
||||
}
|
||||
|
||||
dimString = ')';
|
||||
}
|
||||
|
||||
if (comment !== '') {
|
||||
dimString += ' // ' + comment;
|
||||
}
|
||||
|
||||
if (dimString !== '') {
|
||||
hint += DIM_COLOR(dimString);
|
||||
}
|
||||
|
||||
return hint;
|
||||
};
|
||||
|
||||
exports.matcherHint = matcherHint;
|
21
node_modules/jest-matcher-utils/node_modules/@jest/types/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/@jest/types/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
187
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Circus.d.ts
generated
vendored
Normal file
187
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Circus.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,187 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
/// <reference types="node" />
|
||||
import type * as Global from './Global';
|
||||
declare type Process = NodeJS.Process;
|
||||
export declare type DoneFn = Global.DoneFn;
|
||||
export declare type BlockFn = Global.BlockFn;
|
||||
export declare type BlockName = Global.BlockName;
|
||||
export declare type BlockMode = void | 'skip' | 'only' | 'todo';
|
||||
export declare type TestMode = BlockMode;
|
||||
export declare type TestName = Global.TestName;
|
||||
export declare type TestFn = Global.TestFn;
|
||||
export declare type HookFn = Global.HookFn;
|
||||
export declare type AsyncFn = TestFn | HookFn;
|
||||
export declare type SharedHookType = 'afterAll' | 'beforeAll';
|
||||
export declare type HookType = SharedHookType | 'afterEach' | 'beforeEach';
|
||||
export declare type TestContext = Record<string, any>;
|
||||
export declare type Exception = any;
|
||||
export declare type FormattedError = string;
|
||||
export declare type Hook = {
|
||||
asyncError: Error;
|
||||
fn: HookFn;
|
||||
type: HookType;
|
||||
parent: DescribeBlock;
|
||||
timeout: number | undefined | null;
|
||||
};
|
||||
export interface EventHandler {
|
||||
(event: AsyncEvent, state: State): void | Promise<void>;
|
||||
(event: SyncEvent, state: State): void;
|
||||
}
|
||||
export declare type Event = SyncEvent | AsyncEvent;
|
||||
export declare type SyncEvent = {
|
||||
asyncError: Error;
|
||||
mode: BlockMode;
|
||||
name: 'start_describe_definition';
|
||||
blockName: BlockName;
|
||||
} | {
|
||||
mode: BlockMode;
|
||||
name: 'finish_describe_definition';
|
||||
blockName: BlockName;
|
||||
} | {
|
||||
asyncError: Error;
|
||||
name: 'add_hook';
|
||||
hookType: HookType;
|
||||
fn: HookFn;
|
||||
timeout: number | undefined;
|
||||
} | {
|
||||
asyncError: Error;
|
||||
name: 'add_test';
|
||||
testName: TestName;
|
||||
fn?: TestFn;
|
||||
mode?: TestMode;
|
||||
timeout: number | undefined;
|
||||
} | {
|
||||
name: 'error';
|
||||
error: Exception;
|
||||
};
|
||||
export declare type AsyncEvent = {
|
||||
name: 'setup';
|
||||
testNamePattern?: string;
|
||||
parentProcess: Process;
|
||||
} | {
|
||||
name: 'include_test_location_in_result';
|
||||
} | {
|
||||
name: 'hook_start';
|
||||
hook: Hook;
|
||||
} | {
|
||||
name: 'hook_success';
|
||||
describeBlock?: DescribeBlock;
|
||||
test?: TestEntry;
|
||||
hook: Hook;
|
||||
} | {
|
||||
name: 'hook_failure';
|
||||
error: string | Exception;
|
||||
describeBlock?: DescribeBlock;
|
||||
test?: TestEntry;
|
||||
hook: Hook;
|
||||
} | {
|
||||
name: 'test_fn_start';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_fn_success';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_fn_failure';
|
||||
error: Exception;
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_retry';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_start';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_skip';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_todo';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'test_done';
|
||||
test: TestEntry;
|
||||
} | {
|
||||
name: 'run_describe_start';
|
||||
describeBlock: DescribeBlock;
|
||||
} | {
|
||||
name: 'run_describe_finish';
|
||||
describeBlock: DescribeBlock;
|
||||
} | {
|
||||
name: 'run_start';
|
||||
} | {
|
||||
name: 'run_finish';
|
||||
} | {
|
||||
name: 'teardown';
|
||||
};
|
||||
export declare type MatcherResults = {
|
||||
actual: unknown;
|
||||
expected: unknown;
|
||||
name: string;
|
||||
pass: boolean;
|
||||
};
|
||||
export declare type TestStatus = 'skip' | 'done' | 'todo';
|
||||
export declare type TestResult = {
|
||||
duration?: number | null;
|
||||
errors: Array<FormattedError>;
|
||||
errorsDetailed: Array<MatcherResults | unknown>;
|
||||
invocations: number;
|
||||
status: TestStatus;
|
||||
location?: {
|
||||
column: number;
|
||||
line: number;
|
||||
} | null;
|
||||
testPath: Array<TestName | BlockName>;
|
||||
};
|
||||
export declare type RunResult = {
|
||||
unhandledErrors: Array<FormattedError>;
|
||||
testResults: TestResults;
|
||||
};
|
||||
export declare type TestResults = Array<TestResult>;
|
||||
export declare type GlobalErrorHandlers = {
|
||||
uncaughtException: Array<(exception: Exception) => void>;
|
||||
unhandledRejection: Array<(exception: Exception, promise: Promise<any>) => void>;
|
||||
};
|
||||
export declare type State = {
|
||||
currentDescribeBlock: DescribeBlock;
|
||||
currentlyRunningTest?: TestEntry | null;
|
||||
expand?: boolean;
|
||||
hasFocusedTests: boolean;
|
||||
hasStarted: boolean;
|
||||
originalGlobalErrorHandlers?: GlobalErrorHandlers;
|
||||
parentProcess: Process | null;
|
||||
rootDescribeBlock: DescribeBlock;
|
||||
testNamePattern?: RegExp | null;
|
||||
testTimeout: number;
|
||||
unhandledErrors: Array<Exception>;
|
||||
includeTestLocationInResult: boolean;
|
||||
};
|
||||
export declare type DescribeBlock = {
|
||||
type: 'describeBlock';
|
||||
children: Array<DescribeBlock | TestEntry>;
|
||||
hooks: Array<Hook>;
|
||||
mode: BlockMode;
|
||||
name: BlockName;
|
||||
parent?: DescribeBlock;
|
||||
/** @deprecated Please get from `children` array instead */
|
||||
tests: Array<TestEntry>;
|
||||
};
|
||||
export declare type TestError = Exception | [Exception | undefined, Exception];
|
||||
export declare type TestEntry = {
|
||||
type: 'test';
|
||||
asyncError: Exception;
|
||||
errors: Array<TestError>;
|
||||
fn?: TestFn;
|
||||
invocations: number;
|
||||
mode: TestMode;
|
||||
name: TestName;
|
||||
parent: DescribeBlock;
|
||||
startedAt?: number | null;
|
||||
duration?: number | null;
|
||||
status?: TestStatus | null;
|
||||
timeout?: number;
|
||||
};
|
||||
export {};
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Circus.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Circus.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
421
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Config.d.ts
generated
vendored
Normal file
421
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Config.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,421 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
/// <reference types="node" />
|
||||
import type { Arguments } from 'yargs';
|
||||
import type { ReportOptions } from 'istanbul-reports';
|
||||
import type { ForegroundColor } from 'chalk';
|
||||
declare type CoverageProvider = 'babel' | 'v8';
|
||||
export declare type Path = string;
|
||||
export declare type Glob = string;
|
||||
export declare type HasteConfig = {
|
||||
computeSha1?: boolean;
|
||||
defaultPlatform?: string | null;
|
||||
hasteImplModulePath?: string;
|
||||
platforms?: Array<string>;
|
||||
throwOnModuleCollision?: boolean;
|
||||
};
|
||||
export declare type CoverageReporterName = keyof ReportOptions;
|
||||
export declare type CoverageReporterWithOptions<K = CoverageReporterName> = K extends CoverageReporterName ? ReportOptions[K] extends never ? never : [K, Partial<ReportOptions[K]>] : never;
|
||||
export declare type CoverageReporters = Array<CoverageReporterName | CoverageReporterWithOptions>;
|
||||
export declare type ReporterConfig = [string, Record<string, unknown>];
|
||||
export declare type TransformerConfig = [string, Record<string, unknown>];
|
||||
export interface ConfigGlobals {
|
||||
[K: string]: unknown;
|
||||
}
|
||||
export declare type DefaultOptions = {
|
||||
automock: boolean;
|
||||
bail: number;
|
||||
cache: boolean;
|
||||
cacheDirectory: Path;
|
||||
changedFilesWithAncestor: boolean;
|
||||
clearMocks: boolean;
|
||||
collectCoverage: boolean;
|
||||
coveragePathIgnorePatterns: Array<string>;
|
||||
coverageReporters: Array<CoverageReporterName>;
|
||||
coverageProvider: CoverageProvider;
|
||||
errorOnDeprecated: boolean;
|
||||
expand: boolean;
|
||||
forceCoverageMatch: Array<Glob>;
|
||||
globals: ConfigGlobals;
|
||||
haste: HasteConfig;
|
||||
maxConcurrency: number;
|
||||
maxWorkers: number | string;
|
||||
moduleDirectories: Array<string>;
|
||||
moduleFileExtensions: Array<string>;
|
||||
moduleNameMapper: Record<string, string | Array<string>>;
|
||||
modulePathIgnorePatterns: Array<string>;
|
||||
noStackTrace: boolean;
|
||||
notify: boolean;
|
||||
notifyMode: NotifyMode;
|
||||
prettierPath: string;
|
||||
resetMocks: boolean;
|
||||
resetModules: boolean;
|
||||
restoreMocks: boolean;
|
||||
roots: Array<Path>;
|
||||
runTestsByPath: boolean;
|
||||
runner: 'jest-runner';
|
||||
setupFiles: Array<Path>;
|
||||
setupFilesAfterEnv: Array<Path>;
|
||||
skipFilter: boolean;
|
||||
slowTestThreshold: number;
|
||||
snapshotSerializers: Array<Path>;
|
||||
testEnvironment: string;
|
||||
testEnvironmentOptions: Record<string, any>;
|
||||
testFailureExitCode: string | number;
|
||||
testLocationInResults: boolean;
|
||||
testMatch: Array<Glob>;
|
||||
testPathIgnorePatterns: Array<string>;
|
||||
testRegex: Array<string>;
|
||||
testRunner: string;
|
||||
testSequencer: string;
|
||||
testURL: string;
|
||||
timers: 'real' | 'fake';
|
||||
transformIgnorePatterns: Array<Glob>;
|
||||
useStderr: boolean;
|
||||
watch: boolean;
|
||||
watchPathIgnorePatterns: Array<string>;
|
||||
watchman: boolean;
|
||||
};
|
||||
export declare type DisplayName = {
|
||||
name: string;
|
||||
color: typeof ForegroundColor;
|
||||
};
|
||||
export declare type InitialOptionsWithRootDir = InitialOptions & Required<Pick<InitialOptions, 'rootDir'>>;
|
||||
export declare type InitialOptions = Partial<{
|
||||
automock: boolean;
|
||||
bail: boolean | number;
|
||||
cache: boolean;
|
||||
cacheDirectory: Path;
|
||||
clearMocks: boolean;
|
||||
changedFilesWithAncestor: boolean;
|
||||
changedSince: string;
|
||||
collectCoverage: boolean;
|
||||
collectCoverageFrom: Array<Glob>;
|
||||
collectCoverageOnlyFrom: {
|
||||
[key: string]: boolean;
|
||||
};
|
||||
coverageDirectory: string;
|
||||
coveragePathIgnorePatterns: Array<string>;
|
||||
coverageProvider: CoverageProvider;
|
||||
coverageReporters: CoverageReporters;
|
||||
coverageThreshold: {
|
||||
global: {
|
||||
[key: string]: number;
|
||||
};
|
||||
};
|
||||
dependencyExtractor: string;
|
||||
detectLeaks: boolean;
|
||||
detectOpenHandles: boolean;
|
||||
displayName: string | DisplayName;
|
||||
expand: boolean;
|
||||
extraGlobals: Array<string>;
|
||||
filter: Path;
|
||||
findRelatedTests: boolean;
|
||||
forceCoverageMatch: Array<Glob>;
|
||||
forceExit: boolean;
|
||||
json: boolean;
|
||||
globals: ConfigGlobals;
|
||||
globalSetup: string | null | undefined;
|
||||
globalTeardown: string | null | undefined;
|
||||
haste: HasteConfig;
|
||||
reporters: Array<string | ReporterConfig>;
|
||||
logHeapUsage: boolean;
|
||||
lastCommit: boolean;
|
||||
listTests: boolean;
|
||||
mapCoverage: boolean;
|
||||
maxConcurrency: number;
|
||||
maxWorkers: number | string;
|
||||
moduleDirectories: Array<string>;
|
||||
moduleFileExtensions: Array<string>;
|
||||
moduleLoader: Path;
|
||||
moduleNameMapper: {
|
||||
[key: string]: string | Array<string>;
|
||||
};
|
||||
modulePathIgnorePatterns: Array<string>;
|
||||
modulePaths: Array<string>;
|
||||
name: string;
|
||||
noStackTrace: boolean;
|
||||
notify: boolean;
|
||||
notifyMode: string;
|
||||
onlyChanged: boolean;
|
||||
outputFile: Path;
|
||||
passWithNoTests: boolean;
|
||||
preprocessorIgnorePatterns: Array<Glob>;
|
||||
preset: string | null | undefined;
|
||||
prettierPath: string | null | undefined;
|
||||
projects: Array<Glob>;
|
||||
replname: string | null | undefined;
|
||||
resetMocks: boolean;
|
||||
resetModules: boolean;
|
||||
resolver: Path | null | undefined;
|
||||
restoreMocks: boolean;
|
||||
rootDir: Path;
|
||||
roots: Array<Path>;
|
||||
runner: string;
|
||||
runTestsByPath: boolean;
|
||||
scriptPreprocessor: string;
|
||||
setupFiles: Array<Path>;
|
||||
setupTestFrameworkScriptFile: Path;
|
||||
setupFilesAfterEnv: Array<Path>;
|
||||
silent: boolean;
|
||||
skipFilter: boolean;
|
||||
skipNodeResolution: boolean;
|
||||
slowTestThreshold: number;
|
||||
snapshotResolver: Path;
|
||||
snapshotSerializers: Array<Path>;
|
||||
errorOnDeprecated: boolean;
|
||||
testEnvironment: string;
|
||||
testEnvironmentOptions: Record<string, any>;
|
||||
testFailureExitCode: string | number;
|
||||
testLocationInResults: boolean;
|
||||
testMatch: Array<Glob>;
|
||||
testNamePattern: string;
|
||||
testPathDirs: Array<Path>;
|
||||
testPathIgnorePatterns: Array<string>;
|
||||
testRegex: string | Array<string>;
|
||||
testResultsProcessor: string;
|
||||
testRunner: string;
|
||||
testSequencer: string;
|
||||
testURL: string;
|
||||
testTimeout: number;
|
||||
timers: 'real' | 'fake';
|
||||
transform: {
|
||||
[regex: string]: Path | TransformerConfig;
|
||||
};
|
||||
transformIgnorePatterns: Array<Glob>;
|
||||
watchPathIgnorePatterns: Array<string>;
|
||||
unmockedModulePathPatterns: Array<string>;
|
||||
updateSnapshot: boolean;
|
||||
useStderr: boolean;
|
||||
verbose?: boolean;
|
||||
watch: boolean;
|
||||
watchAll: boolean;
|
||||
watchman: boolean;
|
||||
watchPlugins: Array<string | [string, Record<string, any>]>;
|
||||
}>;
|
||||
export declare type SnapshotUpdateState = 'all' | 'new' | 'none';
|
||||
declare type NotifyMode = 'always' | 'failure' | 'success' | 'change' | 'success-change' | 'failure-change';
|
||||
export declare type CoverageThresholdValue = {
|
||||
branches?: number;
|
||||
functions?: number;
|
||||
lines?: number;
|
||||
statements?: number;
|
||||
};
|
||||
declare type CoverageThreshold = {
|
||||
[path: string]: CoverageThresholdValue;
|
||||
global: CoverageThresholdValue;
|
||||
};
|
||||
export declare type GlobalConfig = {
|
||||
bail: number;
|
||||
changedSince?: string;
|
||||
changedFilesWithAncestor: boolean;
|
||||
collectCoverage: boolean;
|
||||
collectCoverageFrom: Array<Glob>;
|
||||
collectCoverageOnlyFrom?: {
|
||||
[key: string]: boolean;
|
||||
};
|
||||
coverageDirectory: string;
|
||||
coveragePathIgnorePatterns?: Array<string>;
|
||||
coverageProvider: CoverageProvider;
|
||||
coverageReporters: CoverageReporters;
|
||||
coverageThreshold?: CoverageThreshold;
|
||||
detectLeaks: boolean;
|
||||
detectOpenHandles: boolean;
|
||||
enabledTestsMap?: {
|
||||
[key: string]: {
|
||||
[key: string]: boolean;
|
||||
};
|
||||
};
|
||||
expand: boolean;
|
||||
filter?: Path;
|
||||
findRelatedTests: boolean;
|
||||
forceExit: boolean;
|
||||
json: boolean;
|
||||
globalSetup?: string;
|
||||
globalTeardown?: string;
|
||||
lastCommit: boolean;
|
||||
logHeapUsage: boolean;
|
||||
listTests: boolean;
|
||||
maxConcurrency: number;
|
||||
maxWorkers: number;
|
||||
noStackTrace: boolean;
|
||||
nonFlagArgs: Array<string>;
|
||||
noSCM?: boolean;
|
||||
notify: boolean;
|
||||
notifyMode: NotifyMode;
|
||||
outputFile?: Path;
|
||||
onlyChanged: boolean;
|
||||
onlyFailures: boolean;
|
||||
passWithNoTests: boolean;
|
||||
projects: Array<Glob>;
|
||||
replname?: string;
|
||||
reporters?: Array<string | ReporterConfig>;
|
||||
runTestsByPath: boolean;
|
||||
rootDir: Path;
|
||||
silent?: boolean;
|
||||
skipFilter: boolean;
|
||||
errorOnDeprecated: boolean;
|
||||
testFailureExitCode: number;
|
||||
testNamePattern?: string;
|
||||
testPathPattern: string;
|
||||
testResultsProcessor?: string;
|
||||
testSequencer: string;
|
||||
testTimeout?: number;
|
||||
updateSnapshot: SnapshotUpdateState;
|
||||
useStderr: boolean;
|
||||
verbose?: boolean;
|
||||
watch: boolean;
|
||||
watchAll: boolean;
|
||||
watchman: boolean;
|
||||
watchPlugins?: Array<{
|
||||
path: string;
|
||||
config: Record<string, any>;
|
||||
}> | null;
|
||||
};
|
||||
export declare type ProjectConfig = {
|
||||
automock: boolean;
|
||||
cache: boolean;
|
||||
cacheDirectory: Path;
|
||||
clearMocks: boolean;
|
||||
coveragePathIgnorePatterns: Array<string>;
|
||||
cwd: Path;
|
||||
dependencyExtractor?: string;
|
||||
detectLeaks: boolean;
|
||||
detectOpenHandles: boolean;
|
||||
displayName?: DisplayName;
|
||||
errorOnDeprecated: boolean;
|
||||
extraGlobals: Array<keyof NodeJS.Global>;
|
||||
filter?: Path;
|
||||
forceCoverageMatch: Array<Glob>;
|
||||
globalSetup?: string;
|
||||
globalTeardown?: string;
|
||||
globals: ConfigGlobals;
|
||||
haste: HasteConfig;
|
||||
moduleDirectories: Array<string>;
|
||||
moduleFileExtensions: Array<string>;
|
||||
moduleLoader?: Path;
|
||||
moduleNameMapper: Array<[string, string]>;
|
||||
modulePathIgnorePatterns: Array<string>;
|
||||
modulePaths?: Array<string>;
|
||||
name: string;
|
||||
prettierPath: string;
|
||||
resetMocks: boolean;
|
||||
resetModules: boolean;
|
||||
resolver?: Path;
|
||||
restoreMocks: boolean;
|
||||
rootDir: Path;
|
||||
roots: Array<Path>;
|
||||
runner: string;
|
||||
setupFiles: Array<Path>;
|
||||
setupFilesAfterEnv: Array<Path>;
|
||||
skipFilter: boolean;
|
||||
skipNodeResolution?: boolean;
|
||||
slowTestThreshold: number;
|
||||
snapshotResolver?: Path;
|
||||
snapshotSerializers: Array<Path>;
|
||||
testEnvironment: string;
|
||||
testEnvironmentOptions: Record<string, any>;
|
||||
testMatch: Array<Glob>;
|
||||
testLocationInResults: boolean;
|
||||
testPathIgnorePatterns: Array<string>;
|
||||
testRegex: Array<string | RegExp>;
|
||||
testRunner: string;
|
||||
testURL: string;
|
||||
timers: 'real' | 'fake' | 'modern' | 'legacy';
|
||||
transform: Array<[string, Path, Record<string, unknown>]>;
|
||||
transformIgnorePatterns: Array<Glob>;
|
||||
watchPathIgnorePatterns: Array<string>;
|
||||
unmockedModulePathPatterns?: Array<string>;
|
||||
};
|
||||
export declare type Argv = Arguments<Partial<{
|
||||
all: boolean;
|
||||
automock: boolean;
|
||||
bail: boolean | number;
|
||||
cache: boolean;
|
||||
cacheDirectory: string;
|
||||
changedFilesWithAncestor: boolean;
|
||||
changedSince: string;
|
||||
ci: boolean;
|
||||
clearCache: boolean;
|
||||
clearMocks: boolean;
|
||||
collectCoverage: boolean;
|
||||
collectCoverageFrom: string;
|
||||
collectCoverageOnlyFrom: Array<string>;
|
||||
color: boolean;
|
||||
colors: boolean;
|
||||
config: string;
|
||||
coverage: boolean;
|
||||
coverageDirectory: string;
|
||||
coveragePathIgnorePatterns: Array<string>;
|
||||
coverageReporters: Array<string>;
|
||||
coverageThreshold: string;
|
||||
debug: boolean;
|
||||
env: string;
|
||||
expand: boolean;
|
||||
findRelatedTests: boolean;
|
||||
forceExit: boolean;
|
||||
globals: string;
|
||||
globalSetup: string | null | undefined;
|
||||
globalTeardown: string | null | undefined;
|
||||
haste: string;
|
||||
init: boolean;
|
||||
json: boolean;
|
||||
lastCommit: boolean;
|
||||
logHeapUsage: boolean;
|
||||
maxWorkers: number | string;
|
||||
moduleDirectories: Array<string>;
|
||||
moduleFileExtensions: Array<string>;
|
||||
moduleNameMapper: string;
|
||||
modulePathIgnorePatterns: Array<string>;
|
||||
modulePaths: Array<string>;
|
||||
noStackTrace: boolean;
|
||||
notify: boolean;
|
||||
notifyMode: string;
|
||||
onlyChanged: boolean;
|
||||
outputFile: string;
|
||||
preset: string | null | undefined;
|
||||
projects: Array<string>;
|
||||
prettierPath: string | null | undefined;
|
||||
resetMocks: boolean;
|
||||
resetModules: boolean;
|
||||
resolver: string | null | undefined;
|
||||
restoreMocks: boolean;
|
||||
rootDir: string;
|
||||
roots: Array<string>;
|
||||
runInBand: boolean;
|
||||
selectProjects: Array<string>;
|
||||
setupFiles: Array<string>;
|
||||
setupFilesAfterEnv: Array<string>;
|
||||
showConfig: boolean;
|
||||
silent: boolean;
|
||||
snapshotSerializers: Array<string>;
|
||||
testEnvironment: string;
|
||||
testFailureExitCode: string | null | undefined;
|
||||
testMatch: Array<string>;
|
||||
testNamePattern: string;
|
||||
testPathIgnorePatterns: Array<string>;
|
||||
testPathPattern: Array<string>;
|
||||
testRegex: string | Array<string>;
|
||||
testResultsProcessor: string;
|
||||
testRunner: string;
|
||||
testSequencer: string;
|
||||
testURL: string;
|
||||
testTimeout: number | null | undefined;
|
||||
timers: string;
|
||||
transform: string;
|
||||
transformIgnorePatterns: Array<string>;
|
||||
unmockedModulePathPatterns: Array<string> | null | undefined;
|
||||
updateSnapshot: boolean;
|
||||
useStderr: boolean;
|
||||
verbose: boolean;
|
||||
version: boolean;
|
||||
watch: boolean;
|
||||
watchAll: boolean;
|
||||
watchman: boolean;
|
||||
watchPathIgnorePatterns: Array<string>;
|
||||
}>>;
|
||||
export {};
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Config.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Config.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
85
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Global.d.ts
generated
vendored
Normal file
85
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Global.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
/// <reference types="node" />
|
||||
import type { CoverageMapData } from 'istanbul-lib-coverage';
|
||||
export declare type DoneFn = (reason?: string | Error) => void;
|
||||
export declare type TestName = string;
|
||||
export declare type TestFn = (done?: DoneFn) => Promise<void | undefined | unknown> | void | undefined;
|
||||
export declare type ConcurrentTestFn = (done?: DoneFn) => Promise<void | undefined | unknown>;
|
||||
export declare type BlockFn = () => void;
|
||||
export declare type BlockName = string;
|
||||
export declare type HookFn = TestFn;
|
||||
export declare type Col = unknown;
|
||||
export declare type Row = Array<Col>;
|
||||
export declare type Table = Array<Row>;
|
||||
export declare type ArrayTable = Table | Row;
|
||||
export declare type TemplateTable = TemplateStringsArray;
|
||||
export declare type TemplateData = Array<unknown>;
|
||||
export declare type EachTable = ArrayTable | TemplateTable;
|
||||
export declare type TestCallback = BlockFn | TestFn | ConcurrentTestFn;
|
||||
export declare type EachTestFn<EachCallback extends TestCallback> = (...args: Array<any>) => ReturnType<EachCallback>;
|
||||
declare type Jasmine = {
|
||||
_DEFAULT_TIMEOUT_INTERVAL?: number;
|
||||
addMatchers: Function;
|
||||
};
|
||||
declare type Each<EachCallback extends TestCallback> = ((table: EachTable, ...taggedTemplateData: Array<unknown>) => (title: string, test: EachTestFn<EachCallback>, timeout?: number) => void) | (() => void);
|
||||
export interface ItBase {
|
||||
(testName: TestName, fn: TestFn, timeout?: number): void;
|
||||
each: Each<TestFn>;
|
||||
}
|
||||
export interface It extends ItBase {
|
||||
only: ItBase;
|
||||
skip: ItBase;
|
||||
todo: (testName: TestName, ...rest: Array<any>) => void;
|
||||
}
|
||||
export interface ItConcurrentBase {
|
||||
(testName: string, testFn: ConcurrentTestFn, timeout?: number): void;
|
||||
each: Each<ConcurrentTestFn>;
|
||||
}
|
||||
export interface ItConcurrentExtended extends ItConcurrentBase {
|
||||
only: ItConcurrentBase;
|
||||
skip: ItConcurrentBase;
|
||||
}
|
||||
export interface ItConcurrent extends It {
|
||||
concurrent: ItConcurrentExtended;
|
||||
}
|
||||
export interface DescribeBase {
|
||||
(blockName: BlockName, blockFn: BlockFn): void;
|
||||
each: Each<BlockFn>;
|
||||
}
|
||||
export interface Describe extends DescribeBase {
|
||||
only: DescribeBase;
|
||||
skip: DescribeBase;
|
||||
}
|
||||
export interface TestFrameworkGlobals {
|
||||
it: ItConcurrent;
|
||||
test: ItConcurrent;
|
||||
fit: ItBase & {
|
||||
concurrent?: ItConcurrentBase;
|
||||
};
|
||||
xit: ItBase;
|
||||
xtest: ItBase;
|
||||
describe: Describe;
|
||||
xdescribe: DescribeBase;
|
||||
fdescribe: DescribeBase;
|
||||
beforeAll: HookFn;
|
||||
beforeEach: HookFn;
|
||||
afterEach: HookFn;
|
||||
afterAll: HookFn;
|
||||
}
|
||||
export interface GlobalAdditions extends TestFrameworkGlobals {
|
||||
__coverage__: CoverageMapData;
|
||||
jasmine: Jasmine;
|
||||
fail: () => void;
|
||||
pending: () => void;
|
||||
spyOn: () => void;
|
||||
spyOnProperty: () => void;
|
||||
}
|
||||
export interface Global extends GlobalAdditions, Omit<NodeJS.Global, keyof GlobalAdditions> {
|
||||
[extras: string]: any;
|
||||
}
|
||||
export {};
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Global.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Global.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
31
node_modules/jest-matcher-utils/node_modules/@jest/types/build/TestResult.d.ts
generated
vendored
Normal file
31
node_modules/jest-matcher-utils/node_modules/@jest/types/build/TestResult.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export declare type Milliseconds = number;
|
||||
declare type Status = 'passed' | 'failed' | 'skipped' | 'pending' | 'todo' | 'disabled';
|
||||
declare type Callsite = {
|
||||
column: number;
|
||||
line: number;
|
||||
};
|
||||
export declare type AssertionResult = {
|
||||
ancestorTitles: Array<string>;
|
||||
duration?: Milliseconds | null;
|
||||
failureDetails: Array<unknown>;
|
||||
failureMessages: Array<string>;
|
||||
fullName: string;
|
||||
invocations?: number;
|
||||
location?: Callsite | null;
|
||||
numPassingAsserts: number;
|
||||
status: Status;
|
||||
title: string;
|
||||
};
|
||||
export declare type SerializableError = {
|
||||
code?: unknown;
|
||||
message: string;
|
||||
stack: string | null | undefined;
|
||||
type?: string;
|
||||
};
|
||||
export {};
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/TestResult.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/TestResult.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
12
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Transform.d.ts
generated
vendored
Normal file
12
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Transform.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export declare type TransformResult = {
|
||||
code: string;
|
||||
originalCode: string;
|
||||
mapCoverage?: boolean;
|
||||
sourceMapPath: string | null;
|
||||
};
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Transform.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/Transform.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
12
node_modules/jest-matcher-utils/node_modules/@jest/types/build/index.d.ts
generated
vendored
Normal file
12
node_modules/jest-matcher-utils/node_modules/@jest/types/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type * as Circus from './Circus';
|
||||
import type * as Config from './Config';
|
||||
import type * as Global from './Global';
|
||||
import type * as TestResult from './TestResult';
|
||||
import type * as TransformTypes from './Transform';
|
||||
export type { Circus, Config, Global, TestResult, TransformTypes };
|
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/index.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/@jest/types/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
26
node_modules/jest-matcher-utils/node_modules/@jest/types/package.json
generated
vendored
Normal file
26
node_modules/jest-matcher-utils/node_modules/@jest/types/package.json
generated
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"name": "@jest/types",
|
||||
"version": "26.3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/jest-types"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"license": "MIT",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"dependencies": {
|
||||
"@types/istanbul-lib-coverage": "^2.0.0",
|
||||
"@types/istanbul-reports": "^3.0.0",
|
||||
"@types/node": "*",
|
||||
"@types/yargs": "^15.0.0",
|
||||
"chalk": "^4.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "3a7e06fe855515a848241bb06a6f6e117847443d"
|
||||
}
|
21
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
16
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/README.md
generated
vendored
Normal file
16
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/README.md
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Installation
|
||||
> `npm install --save @types/istanbul-reports`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for istanbul-reports (https://github.com/istanbuljs/istanbuljs).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-reports.
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Mon, 20 Jul 2020 21:55:27 GMT
|
||||
* Dependencies: [@types/istanbul-lib-report](https://npmjs.com/package/@types/istanbul-lib-report)
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Jason Cheatham](https://github.com/jason0x43), and [Elena Shcherbakova](https://github.com/not-a-doctor).
|
74
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/index.d.ts
generated
vendored
Normal file
74
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
// Type definitions for istanbul-reports 3.0
|
||||
// Project: https://github.com/istanbuljs/istanbuljs, https://istanbul.js.org
|
||||
// Definitions by: Jason Cheatham <https://github.com/jason0x43>
|
||||
// Elena Shcherbakova <https://github.com/not-a-doctor>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.4
|
||||
|
||||
import { Node, Visitor } from 'istanbul-lib-report';
|
||||
|
||||
export function create<T extends keyof ReportOptions>(name: T, options?: Partial<ReportOptions[T]>): Visitor;
|
||||
|
||||
export interface FileOptions {
|
||||
file: string;
|
||||
}
|
||||
|
||||
export interface ProjectOptions {
|
||||
projectRoot: string;
|
||||
}
|
||||
|
||||
export interface ReportOptions {
|
||||
clover: CloverOptions;
|
||||
cobertura: CoberturaOptions;
|
||||
'html-spa': HtmlSpaOptions;
|
||||
html: HtmlOptions;
|
||||
json: JsonOptions;
|
||||
'json-summary': JsonSummaryOptions;
|
||||
lcov: LcovOptions;
|
||||
lcovonly: LcovOnlyOptions;
|
||||
none: never;
|
||||
teamcity: TeamcityOptions;
|
||||
text: TextOptions;
|
||||
'text-lcov': TextLcovOptions;
|
||||
'text-summary': TextSummaryOptions;
|
||||
}
|
||||
|
||||
export type ReportType = keyof ReportOptions;
|
||||
|
||||
export interface CloverOptions extends FileOptions, ProjectOptions {}
|
||||
|
||||
export interface CoberturaOptions extends FileOptions, ProjectOptions {}
|
||||
|
||||
export interface HtmlSpaOptions extends HtmlOptions {
|
||||
metricsToShow: Array<'lines' | 'branches' | 'functions' | 'statements'>;
|
||||
}
|
||||
export interface HtmlOptions {
|
||||
verbose: boolean;
|
||||
skipEmpty: boolean;
|
||||
subdir: string;
|
||||
linkMapper: LinkMapper;
|
||||
}
|
||||
|
||||
export type JsonOptions = FileOptions;
|
||||
export type JsonSummaryOptions = FileOptions;
|
||||
|
||||
export interface LcovOptions extends FileOptions, ProjectOptions {}
|
||||
export interface LcovOnlyOptions extends FileOptions, ProjectOptions {}
|
||||
|
||||
export interface TeamcityOptions extends FileOptions {
|
||||
blockName: string;
|
||||
}
|
||||
|
||||
export interface TextOptions extends FileOptions {
|
||||
maxCols: number;
|
||||
skipEmpty: boolean;
|
||||
skipFull: boolean;
|
||||
}
|
||||
export type TextLcovOptions = ProjectOptions;
|
||||
export type TextSummaryOptions = FileOptions;
|
||||
|
||||
export interface LinkMapper {
|
||||
getPath(node: string | Node): string;
|
||||
relativePath(source: string | Node, target: string | Node): string;
|
||||
assetPath(node: Node, name: string): string;
|
||||
}
|
31
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/package.json
generated
vendored
Normal file
31
node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports/package.json
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"name": "@types/istanbul-reports",
|
||||
"version": "3.0.0",
|
||||
"description": "TypeScript definitions for istanbul-reports",
|
||||
"license": "MIT",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Jason Cheatham",
|
||||
"url": "https://github.com/jason0x43",
|
||||
"githubUsername": "jason0x43"
|
||||
},
|
||||
{
|
||||
"name": "Elena Shcherbakova",
|
||||
"url": "https://github.com/not-a-doctor",
|
||||
"githubUsername": "not-a-doctor"
|
||||
}
|
||||
],
|
||||
"main": "",
|
||||
"types": "index.d.ts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||
"directory": "types/istanbul-reports"
|
||||
},
|
||||
"scripts": {},
|
||||
"dependencies": {
|
||||
"@types/istanbul-lib-report": "*"
|
||||
},
|
||||
"typesPublisherContentHash": "71342edcc57e7212d17e794fa519955e496dd3b6696e2738904679ef3aa59d70",
|
||||
"typeScriptVersion": "3.0"
|
||||
}
|
415
node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts
generated
vendored
Normal file
415
node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,415 @@
|
|||
/**
|
||||
Basic foreground colors.
|
||||
|
||||
[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)
|
||||
*/
|
||||
declare type ForegroundColor =
|
||||
| 'black'
|
||||
| 'red'
|
||||
| 'green'
|
||||
| 'yellow'
|
||||
| 'blue'
|
||||
| 'magenta'
|
||||
| 'cyan'
|
||||
| 'white'
|
||||
| 'gray'
|
||||
| 'grey'
|
||||
| 'blackBright'
|
||||
| 'redBright'
|
||||
| 'greenBright'
|
||||
| 'yellowBright'
|
||||
| 'blueBright'
|
||||
| 'magentaBright'
|
||||
| 'cyanBright'
|
||||
| 'whiteBright';
|
||||
|
||||
/**
|
||||
Basic background colors.
|
||||
|
||||
[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)
|
||||
*/
|
||||
declare type BackgroundColor =
|
||||
| 'bgBlack'
|
||||
| 'bgRed'
|
||||
| 'bgGreen'
|
||||
| 'bgYellow'
|
||||
| 'bgBlue'
|
||||
| 'bgMagenta'
|
||||
| 'bgCyan'
|
||||
| 'bgWhite'
|
||||
| 'bgGray'
|
||||
| 'bgGrey'
|
||||
| 'bgBlackBright'
|
||||
| 'bgRedBright'
|
||||
| 'bgGreenBright'
|
||||
| 'bgYellowBright'
|
||||
| 'bgBlueBright'
|
||||
| 'bgMagentaBright'
|
||||
| 'bgCyanBright'
|
||||
| 'bgWhiteBright';
|
||||
|
||||
/**
|
||||
Basic colors.
|
||||
|
||||
[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)
|
||||
*/
|
||||
declare type Color = ForegroundColor | BackgroundColor;
|
||||
|
||||
declare type Modifiers =
|
||||
| 'reset'
|
||||
| 'bold'
|
||||
| 'dim'
|
||||
| 'italic'
|
||||
| 'underline'
|
||||
| 'inverse'
|
||||
| 'hidden'
|
||||
| 'strikethrough'
|
||||
| 'visible';
|
||||
|
||||
declare namespace chalk {
|
||||
/**
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
type Level = 0 | 1 | 2 | 3;
|
||||
|
||||
interface Options {
|
||||
/**
|
||||
Specify the color support for Chalk.
|
||||
|
||||
By default, color support is automatically detected based on the environment.
|
||||
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
level?: Level;
|
||||
}
|
||||
|
||||
/**
|
||||
Return a new Chalk instance.
|
||||
*/
|
||||
type Instance = new (options?: Options) => Chalk;
|
||||
|
||||
/**
|
||||
Detect whether the terminal supports color.
|
||||
*/
|
||||
interface ColorSupport {
|
||||
/**
|
||||
The color level used by Chalk.
|
||||
*/
|
||||
level: Level;
|
||||
|
||||
/**
|
||||
Return whether Chalk supports basic 16 colors.
|
||||
*/
|
||||
hasBasic: boolean;
|
||||
|
||||
/**
|
||||
Return whether Chalk supports ANSI 256 colors.
|
||||
*/
|
||||
has256: boolean;
|
||||
|
||||
/**
|
||||
Return whether Chalk supports Truecolor 16 million colors.
|
||||
*/
|
||||
has16m: boolean;
|
||||
}
|
||||
|
||||
interface ChalkFunction {
|
||||
/**
|
||||
Use a template string.
|
||||
|
||||
@remarks Template literals are unsupported for nested calls (see [issue #341](https://github.com/chalk/chalk/issues/341))
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
log(chalk`
|
||||
CPU: {red ${cpu.totalPercent}%}
|
||||
RAM: {green ${ram.used / ram.total * 100}%}
|
||||
DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}
|
||||
`);
|
||||
```
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
log(chalk.red.bgBlack`2 + 3 = {bold ${2 + 3}}`)
|
||||
```
|
||||
*/
|
||||
(text: TemplateStringsArray, ...placeholders: unknown[]): string;
|
||||
|
||||
(...text: unknown[]): string;
|
||||
}
|
||||
|
||||
interface Chalk extends ChalkFunction {
|
||||
/**
|
||||
Return a new Chalk instance.
|
||||
*/
|
||||
Instance: Instance;
|
||||
|
||||
/**
|
||||
The color support for Chalk.
|
||||
|
||||
By default, color support is automatically detected based on the environment.
|
||||
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
level: Level;
|
||||
|
||||
/**
|
||||
Use HEX value to set text color.
|
||||
|
||||
@param color - Hexadecimal value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
chalk.hex('#DEADED');
|
||||
```
|
||||
*/
|
||||
hex(color: string): Chalk;
|
||||
|
||||
/**
|
||||
Use keyword color value to set text color.
|
||||
|
||||
@param color - Keyword value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
chalk.keyword('orange');
|
||||
```
|
||||
*/
|
||||
keyword(color: string): Chalk;
|
||||
|
||||
/**
|
||||
Use RGB values to set text color.
|
||||
*/
|
||||
rgb(red: number, green: number, blue: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HSL values to set text color.
|
||||
*/
|
||||
hsl(hue: number, saturation: number, lightness: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HSV values to set text color.
|
||||
*/
|
||||
hsv(hue: number, saturation: number, value: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HWB values to set text color.
|
||||
*/
|
||||
hwb(hue: number, whiteness: number, blackness: number): Chalk;
|
||||
|
||||
/**
|
||||
Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set text color.
|
||||
|
||||
30 <= code && code < 38 || 90 <= code && code < 98
|
||||
For example, 31 for red, 91 for redBright.
|
||||
*/
|
||||
ansi(code: number): Chalk;
|
||||
|
||||
/**
|
||||
Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.
|
||||
*/
|
||||
ansi256(index: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HEX value to set background color.
|
||||
|
||||
@param color - Hexadecimal value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
chalk.bgHex('#DEADED');
|
||||
```
|
||||
*/
|
||||
bgHex(color: string): Chalk;
|
||||
|
||||
/**
|
||||
Use keyword color value to set background color.
|
||||
|
||||
@param color - Keyword value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk = require('chalk');
|
||||
|
||||
chalk.bgKeyword('orange');
|
||||
```
|
||||
*/
|
||||
bgKeyword(color: string): Chalk;
|
||||
|
||||
/**
|
||||
Use RGB values to set background color.
|
||||
*/
|
||||
bgRgb(red: number, green: number, blue: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HSL values to set background color.
|
||||
*/
|
||||
bgHsl(hue: number, saturation: number, lightness: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HSV values to set background color.
|
||||
*/
|
||||
bgHsv(hue: number, saturation: number, value: number): Chalk;
|
||||
|
||||
/**
|
||||
Use HWB values to set background color.
|
||||
*/
|
||||
bgHwb(hue: number, whiteness: number, blackness: number): Chalk;
|
||||
|
||||
/**
|
||||
Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set background color.
|
||||
|
||||
30 <= code && code < 38 || 90 <= code && code < 98
|
||||
For example, 31 for red, 91 for redBright.
|
||||
Use the foreground code, not the background code (for example, not 41, nor 101).
|
||||
*/
|
||||
bgAnsi(code: number): Chalk;
|
||||
|
||||
/**
|
||||
Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color.
|
||||
*/
|
||||
bgAnsi256(index: number): Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Resets the current color chain.
|
||||
*/
|
||||
readonly reset: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Make text bold.
|
||||
*/
|
||||
readonly bold: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Emitting only a small amount of light.
|
||||
*/
|
||||
readonly dim: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Make text italic. (Not widely supported)
|
||||
*/
|
||||
readonly italic: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Make text underline. (Not widely supported)
|
||||
*/
|
||||
readonly underline: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Inverse background and foreground colors.
|
||||
*/
|
||||
readonly inverse: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Prints the text, but makes it invisible.
|
||||
*/
|
||||
readonly hidden: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Puts a horizontal line through the center of the text. (Not widely supported)
|
||||
*/
|
||||
readonly strikethrough: Chalk;
|
||||
|
||||
/**
|
||||
Modifier: Prints the text only when Chalk has a color support level > 0.
|
||||
Can be useful for things that are purely cosmetic.
|
||||
*/
|
||||
readonly visible: Chalk;
|
||||
|
||||
readonly black: Chalk;
|
||||
readonly red: Chalk;
|
||||
readonly green: Chalk;
|
||||
readonly yellow: Chalk;
|
||||
readonly blue: Chalk;
|
||||
readonly magenta: Chalk;
|
||||
readonly cyan: Chalk;
|
||||
readonly white: Chalk;
|
||||
|
||||
/*
|
||||
Alias for `blackBright`.
|
||||
*/
|
||||
readonly gray: Chalk;
|
||||
|
||||
/*
|
||||
Alias for `blackBright`.
|
||||
*/
|
||||
readonly grey: Chalk;
|
||||
|
||||
readonly blackBright: Chalk;
|
||||
readonly redBright: Chalk;
|
||||
readonly greenBright: Chalk;
|
||||
readonly yellowBright: Chalk;
|
||||
readonly blueBright: Chalk;
|
||||
readonly magentaBright: Chalk;
|
||||
readonly cyanBright: Chalk;
|
||||
readonly whiteBright: Chalk;
|
||||
|
||||
readonly bgBlack: Chalk;
|
||||
readonly bgRed: Chalk;
|
||||
readonly bgGreen: Chalk;
|
||||
readonly bgYellow: Chalk;
|
||||
readonly bgBlue: Chalk;
|
||||
readonly bgMagenta: Chalk;
|
||||
readonly bgCyan: Chalk;
|
||||
readonly bgWhite: Chalk;
|
||||
|
||||
/*
|
||||
Alias for `bgBlackBright`.
|
||||
*/
|
||||
readonly bgGray: Chalk;
|
||||
|
||||
/*
|
||||
Alias for `bgBlackBright`.
|
||||
*/
|
||||
readonly bgGrey: Chalk;
|
||||
|
||||
readonly bgBlackBright: Chalk;
|
||||
readonly bgRedBright: Chalk;
|
||||
readonly bgGreenBright: Chalk;
|
||||
readonly bgYellowBright: Chalk;
|
||||
readonly bgBlueBright: Chalk;
|
||||
readonly bgMagentaBright: Chalk;
|
||||
readonly bgCyanBright: Chalk;
|
||||
readonly bgWhiteBright: Chalk;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Main Chalk object that allows to chain styles together.
|
||||
Call the last one as a method with a string argument.
|
||||
Order doesn't matter, and later styles take precedent in case of a conflict.
|
||||
This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.
|
||||
*/
|
||||
declare const chalk: chalk.Chalk & chalk.ChalkFunction & {
|
||||
supportsColor: chalk.ColorSupport | false;
|
||||
Level: chalk.Level;
|
||||
Color: Color;
|
||||
ForegroundColor: ForegroundColor;
|
||||
BackgroundColor: BackgroundColor;
|
||||
Modifiers: Modifiers;
|
||||
stderr: chalk.Chalk & {supportsColor: chalk.ColorSupport | false};
|
||||
};
|
||||
|
||||
export = chalk;
|
9
node_modules/jest-matcher-utils/node_modules/chalk/license
generated
vendored
Normal file
9
node_modules/jest-matcher-utils/node_modules/chalk/license
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
68
node_modules/jest-matcher-utils/node_modules/chalk/package.json
generated
vendored
Normal file
68
node_modules/jest-matcher-utils/node_modules/chalk/package.json
generated
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"name": "chalk",
|
||||
"version": "4.1.0",
|
||||
"description": "Terminal string styling done right",
|
||||
"license": "MIT",
|
||||
"repository": "chalk/chalk",
|
||||
"funding": "https://github.com/chalk/chalk?sponsor=1",
|
||||
"main": "source",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && nyc ava && tsd",
|
||||
"bench": "matcha benchmark.js"
|
||||
},
|
||||
"files": [
|
||||
"source",
|
||||
"index.d.ts"
|
||||
],
|
||||
"keywords": [
|
||||
"color",
|
||||
"colour",
|
||||
"colors",
|
||||
"terminal",
|
||||
"console",
|
||||
"cli",
|
||||
"string",
|
||||
"str",
|
||||
"ansi",
|
||||
"style",
|
||||
"styles",
|
||||
"tty",
|
||||
"formatting",
|
||||
"rgb",
|
||||
"256",
|
||||
"shell",
|
||||
"xterm",
|
||||
"log",
|
||||
"logging",
|
||||
"command-line",
|
||||
"text"
|
||||
],
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "^2.4.0",
|
||||
"coveralls": "^3.0.7",
|
||||
"execa": "^4.0.0",
|
||||
"import-fresh": "^3.1.0",
|
||||
"matcha": "^0.7.0",
|
||||
"nyc": "^15.0.0",
|
||||
"resolve-from": "^5.0.0",
|
||||
"tsd": "^0.7.4",
|
||||
"xo": "^0.28.2"
|
||||
},
|
||||
"xo": {
|
||||
"rules": {
|
||||
"unicorn/prefer-string-slice": "off",
|
||||
"unicorn/prefer-includes": "off",
|
||||
"@typescript-eslint/member-ordering": "off",
|
||||
"no-redeclare": "off",
|
||||
"unicorn/string-content": "off",
|
||||
"unicorn/better-regex": "off"
|
||||
}
|
||||
}
|
||||
}
|
293
node_modules/jest-matcher-utils/node_modules/chalk/readme.md
generated
vendored
Normal file
293
node_modules/jest-matcher-utils/node_modules/chalk/readme.md
generated
vendored
Normal file
|
@ -0,0 +1,293 @@
|
|||
<h1 align="center">
|
||||
<br>
|
||||
<br>
|
||||
<img width="320" src="media/logo.svg" alt="Chalk">
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
</h1>
|
||||
|
||||
> Terminal string styling done right
|
||||
|
||||
[](https://travis-ci.org/chalk/chalk) [](https://coveralls.io/github/chalk/chalk?branch=master) [](https://www.npmjs.com/package/chalk?activeTab=dependents) [](https://www.npmjs.com/package/chalk) [](https://www.youtube.com/watch?v=9auOCbH5Ns4) [](https://github.com/xojs/xo)  [](https://repl.it/github/chalk/chalk)
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/chalk/ansi-styles@8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
|
||||
|
||||
## Highlights
|
||||
|
||||
- Expressive API
|
||||
- Highly performant
|
||||
- Ability to nest styles
|
||||
- [256/Truecolor color support](#256-and-truecolor-color-support)
|
||||
- Auto-detects color support
|
||||
- Doesn't extend `String.prototype`
|
||||
- Clean and focused
|
||||
- Actively maintained
|
||||
- [Used by ~50,000 packages](https://www.npmjs.com/browse/depended/chalk) as of January 1, 2020
|
||||
|
||||
## Install
|
||||
|
||||
```console
|
||||
$ npm install chalk
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const chalk = require('chalk');
|
||||
|
||||
console.log(chalk.blue('Hello world!'));
|
||||
```
|
||||
|
||||
Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
|
||||
|
||||
```js
|
||||
const chalk = require('chalk');
|
||||
const log = console.log;
|
||||
|
||||
// Combine styled and normal strings
|
||||
log(chalk.blue('Hello') + ' World' + chalk.red('!'));
|
||||
|
||||
// Compose multiple styles using the chainable API
|
||||
log(chalk.blue.bgRed.bold('Hello world!'));
|
||||
|
||||
// Pass in multiple arguments
|
||||
log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
|
||||
|
||||
// Nest styles
|
||||
log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));
|
||||
|
||||
// Nest styles of the same type even (color, underline, background)
|
||||
log(chalk.green(
|
||||
'I am a green line ' +
|
||||
chalk.blue.underline.bold('with a blue substring') +
|
||||
' that becomes green again!'
|
||||
));
|
||||
|
||||
// ES2015 template literal
|
||||
log(`
|
||||
CPU: ${chalk.red('90%')}
|
||||
RAM: ${chalk.green('40%')}
|
||||
DISK: ${chalk.yellow('70%')}
|
||||
`);
|
||||
|
||||
// ES2015 tagged template literal
|
||||
log(chalk`
|
||||
CPU: {red ${cpu.totalPercent}%}
|
||||
RAM: {green ${ram.used / ram.total * 100}%}
|
||||
DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}
|
||||
`);
|
||||
|
||||
// Use RGB colors in terminal emulators that support it.
|
||||
log(chalk.keyword('orange')('Yay for orange colored text!'));
|
||||
log(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
|
||||
log(chalk.hex('#DEADED').bold('Bold gray!'));
|
||||
```
|
||||
|
||||
Easily define your own themes:
|
||||
|
||||
```js
|
||||
const chalk = require('chalk');
|
||||
|
||||
const error = chalk.bold.red;
|
||||
const warning = chalk.keyword('orange');
|
||||
|
||||
console.log(error('Error!'));
|
||||
console.log(warning('Warning!'));
|
||||
```
|
||||
|
||||
Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):
|
||||
|
||||
```js
|
||||
const name = 'Sindre';
|
||||
console.log(chalk.green('Hello %s'), name);
|
||||
//=> 'Hello Sindre'
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### chalk.`<style>[.<style>...](string, [string...])`
|
||||
|
||||
Example: `chalk.red.bold.underline('Hello', 'world');`
|
||||
|
||||
Chain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.
|
||||
|
||||
Multiple arguments will be separated by space.
|
||||
|
||||
### chalk.level
|
||||
|
||||
Specifies the level of color support.
|
||||
|
||||
Color support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.
|
||||
|
||||
If you need to change this in a reusable module, create a new instance:
|
||||
|
||||
```js
|
||||
const ctx = new chalk.Instance({level: 0});
|
||||
```
|
||||
|
||||
| Level | Description |
|
||||
| :---: | :--- |
|
||||
| `0` | All colors disabled |
|
||||
| `1` | Basic color support (16 colors) |
|
||||
| `2` | 256 color support |
|
||||
| `3` | Truecolor support (16 million colors) |
|
||||
|
||||
### chalk.supportsColor
|
||||
|
||||
Detect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.
|
||||
|
||||
Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.
|
||||
|
||||
Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.
|
||||
|
||||
### chalk.stderr and chalk.stderr.supportsColor
|
||||
|
||||
`chalk.stderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `chalk.supportsColor` apply to this too. `chalk.stderr.supportsColor` is exposed for convenience.
|
||||
|
||||
## Styles
|
||||
|
||||
### Modifiers
|
||||
|
||||
- `reset` - Resets the current color chain.
|
||||
- `bold` - Make text bold.
|
||||
- `dim` - Emitting only a small amount of light.
|
||||
- `italic` - Make text italic. *(Not widely supported)*
|
||||
- `underline` - Make text underline. *(Not widely supported)*
|
||||
- `inverse`- Inverse background and foreground colors.
|
||||
- `hidden` - Prints the text, but makes it invisible.
|
||||
- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*
|
||||
- `visible`- Prints the text only when Chalk has a color level > 0. Can be useful for things that are purely cosmetic.
|
||||
|
||||
### Colors
|
||||
|
||||
- `black`
|
||||
- `red`
|
||||
- `green`
|
||||
- `yellow`
|
||||
- `blue`
|
||||
- `magenta`
|
||||
- `cyan`
|
||||
- `white`
|
||||
- `blackBright` (alias: `gray`, `grey`)
|
||||
- `redBright`
|
||||
- `greenBright`
|
||||
- `yellowBright`
|
||||
- `blueBright`
|
||||
- `magentaBright`
|
||||
- `cyanBright`
|
||||
- `whiteBright`
|
||||
|
||||
### Background colors
|
||||
|
||||
- `bgBlack`
|
||||
- `bgRed`
|
||||
- `bgGreen`
|
||||
- `bgYellow`
|
||||
- `bgBlue`
|
||||
- `bgMagenta`
|
||||
- `bgCyan`
|
||||
- `bgWhite`
|
||||
- `bgBlackBright` (alias: `bgGray`, `bgGrey`)
|
||||
- `bgRedBright`
|
||||
- `bgGreenBright`
|
||||
- `bgYellowBright`
|
||||
- `bgBlueBright`
|
||||
- `bgMagentaBright`
|
||||
- `bgCyanBright`
|
||||
- `bgWhiteBright`
|
||||
|
||||
## Tagged template literal
|
||||
|
||||
Chalk can be used as a [tagged template literal](https://exploringjs.com/es6/ch_template-literals.html#_tagged-template-literals).
|
||||
|
||||
```js
|
||||
const chalk = require('chalk');
|
||||
|
||||
const miles = 18;
|
||||
const calculateFeet = miles => miles * 5280;
|
||||
|
||||
console.log(chalk`
|
||||
There are {bold 5280 feet} in a mile.
|
||||
In {bold ${miles} miles}, there are {green.bold ${calculateFeet(miles)} feet}.
|
||||
`);
|
||||
```
|
||||
|
||||
Blocks are delimited by an opening curly brace (`{`), a style, some content, and a closing curly brace (`}`).
|
||||
|
||||
Template styles are chained exactly like normal Chalk styles. The following three statements are equivalent:
|
||||
|
||||
```js
|
||||
console.log(chalk.bold.rgb(10, 100, 200)('Hello!'));
|
||||
console.log(chalk.bold.rgb(10, 100, 200)`Hello!`);
|
||||
console.log(chalk`{bold.rgb(10,100,200) Hello!}`);
|
||||
```
|
||||
|
||||
Note that function styles (`rgb()`, `hsl()`, `keyword()`, etc.) may not contain spaces between parameters.
|
||||
|
||||
All interpolated values (`` chalk`${foo}` ``) are converted to strings via the `.toString()` method. All curly braces (`{` and `}`) in interpolated value strings are escaped.
|
||||
|
||||
## 256 and Truecolor color support
|
||||
|
||||
Chalk supports 256 colors and [Truecolor](https://gist.github.com/XVilka/8346728) (16 million colors) on supported terminal apps.
|
||||
|
||||
Colors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).
|
||||
|
||||
Examples:
|
||||
|
||||
- `chalk.hex('#DEADED').underline('Hello, world!')`
|
||||
- `chalk.keyword('orange')('Some orange text')`
|
||||
- `chalk.rgb(15, 100, 204).inverse('Hello!')`
|
||||
|
||||
Background versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `keyword` for foreground colors and `bgKeyword` for background colors).
|
||||
|
||||
- `chalk.bgHex('#DEADED').underline('Hello, world!')`
|
||||
- `chalk.bgKeyword('orange')('Some orange text')`
|
||||
- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`
|
||||
|
||||
The following color models can be used:
|
||||
|
||||
- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`
|
||||
- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`
|
||||
- [`keyword`](https://www.w3.org/wiki/CSS/Properties/color/keywords) (CSS keywords) - Example: `chalk.keyword('orange').bold('Orange!')`
|
||||
- [`hsl`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsl(32, 100, 50).bold('Orange!')`
|
||||
- [`hsv`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsv(32, 100, 100).bold('Orange!')`
|
||||
- [`hwb`](https://en.wikipedia.org/wiki/HWB_color_model) - Example: `chalk.hwb(32, 0, 50).bold('Orange!')`
|
||||
- [`ansi`](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) - Example: `chalk.ansi(31).bgAnsi(93)('red on yellowBright')`
|
||||
- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`
|
||||
|
||||
## Windows
|
||||
|
||||
If you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.
|
||||
|
||||
## Origin story
|
||||
|
||||
[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.
|
||||
|
||||
## chalk for enterprise
|
||||
|
||||
Available as part of the Tidelift Subscription.
|
||||
|
||||
The maintainers of chalk and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-chalk?utm_source=npm-chalk&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
|
||||
|
||||
## Related
|
||||
|
||||
- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module
|
||||
- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal
|
||||
- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color
|
||||
- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes
|
||||
- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream
|
||||
- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
|
||||
- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
|
||||
- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes
|
||||
- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
|
||||
- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models
|
||||
- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal
|
||||
- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings
|
||||
- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings
|
||||
- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal
|
||||
|
||||
## Maintainers
|
||||
|
||||
- [Sindre Sorhus](https://github.com/sindresorhus)
|
||||
- [Josh Junon](https://github.com/qix-)
|
229
node_modules/jest-matcher-utils/node_modules/chalk/source/index.js
generated
vendored
Normal file
229
node_modules/jest-matcher-utils/node_modules/chalk/source/index.js
generated
vendored
Normal file
|
@ -0,0 +1,229 @@
|
|||
'use strict';
|
||||
const ansiStyles = require('ansi-styles');
|
||||
const {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');
|
||||
const {
|
||||
stringReplaceAll,
|
||||
stringEncaseCRLFWithFirstIndex
|
||||
} = require('./util');
|
||||
|
||||
const {isArray} = Array;
|
||||
|
||||
// `supportsColor.level` → `ansiStyles.color[name]` mapping
|
||||
const levelMapping = [
|
||||
'ansi',
|
||||
'ansi',
|
||||
'ansi256',
|
||||
'ansi16m'
|
||||
];
|
||||
|
||||
const styles = Object.create(null);
|
||||
|
||||
const applyOptions = (object, options = {}) => {
|
||||
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
||||
throw new Error('The `level` option should be an integer from 0 to 3');
|
||||
}
|
||||
|
||||
// Detect level if not set manually
|
||||
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
||||
object.level = options.level === undefined ? colorLevel : options.level;
|
||||
};
|
||||
|
||||
class ChalkClass {
|
||||
constructor(options) {
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return chalkFactory(options);
|
||||
}
|
||||
}
|
||||
|
||||
const chalkFactory = options => {
|
||||
const chalk = {};
|
||||
applyOptions(chalk, options);
|
||||
|
||||
chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
|
||||
|
||||
Object.setPrototypeOf(chalk, Chalk.prototype);
|
||||
Object.setPrototypeOf(chalk.template, chalk);
|
||||
|
||||
chalk.template.constructor = () => {
|
||||
throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
|
||||
};
|
||||
|
||||
chalk.template.Instance = ChalkClass;
|
||||
|
||||
return chalk.template;
|
||||
};
|
||||
|
||||
function Chalk(options) {
|
||||
return chalkFactory(options);
|
||||
}
|
||||
|
||||
for (const [styleName, style] of Object.entries(ansiStyles)) {
|
||||
styles[styleName] = {
|
||||
get() {
|
||||
const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
|
||||
Object.defineProperty(this, styleName, {value: builder});
|
||||
return builder;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
styles.visible = {
|
||||
get() {
|
||||
const builder = createBuilder(this, this._styler, true);
|
||||
Object.defineProperty(this, 'visible', {value: builder});
|
||||
return builder;
|
||||
}
|
||||
};
|
||||
|
||||
const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
|
||||
|
||||
for (const model of usedModels) {
|
||||
styles[model] = {
|
||||
get() {
|
||||
const {level} = this;
|
||||
return function (...arguments_) {
|
||||
const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
|
||||
return createBuilder(this, styler, this._isEmpty);
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
for (const model of usedModels) {
|
||||
const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
|
||||
styles[bgModel] = {
|
||||
get() {
|
||||
const {level} = this;
|
||||
return function (...arguments_) {
|
||||
const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
|
||||
return createBuilder(this, styler, this._isEmpty);
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const proto = Object.defineProperties(() => {}, {
|
||||
...styles,
|
||||
level: {
|
||||
enumerable: true,
|
||||
get() {
|
||||
return this._generator.level;
|
||||
},
|
||||
set(level) {
|
||||
this._generator.level = level;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const createStyler = (open, close, parent) => {
|
||||
let openAll;
|
||||
let closeAll;
|
||||
if (parent === undefined) {
|
||||
openAll = open;
|
||||
closeAll = close;
|
||||
} else {
|
||||
openAll = parent.openAll + open;
|
||||
closeAll = close + parent.closeAll;
|
||||
}
|
||||
|
||||
return {
|
||||
open,
|
||||
close,
|
||||
openAll,
|
||||
closeAll,
|
||||
parent
|
||||
};
|
||||
};
|
||||
|
||||
const createBuilder = (self, _styler, _isEmpty) => {
|
||||
const builder = (...arguments_) => {
|
||||
if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
|
||||
// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
|
||||
return applyStyle(builder, chalkTag(builder, ...arguments_));
|
||||
}
|
||||
|
||||
// Single argument is hot path, implicit coercion is faster than anything
|
||||
// eslint-disable-next-line no-implicit-coercion
|
||||
return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
|
||||
};
|
||||
|
||||
// We alter the prototype because we must return a function, but there is
|
||||
// no way to create a function with a different prototype
|
||||
Object.setPrototypeOf(builder, proto);
|
||||
|
||||
builder._generator = self;
|
||||
builder._styler = _styler;
|
||||
builder._isEmpty = _isEmpty;
|
||||
|
||||
return builder;
|
||||
};
|
||||
|
||||
const applyStyle = (self, string) => {
|
||||
if (self.level <= 0 || !string) {
|
||||
return self._isEmpty ? '' : string;
|
||||
}
|
||||
|
||||
let styler = self._styler;
|
||||
|
||||
if (styler === undefined) {
|
||||
return string;
|
||||
}
|
||||
|
||||
const {openAll, closeAll} = styler;
|
||||
if (string.indexOf('\u001B') !== -1) {
|
||||
while (styler !== undefined) {
|
||||
// Replace any instances already present with a re-opening code
|
||||
// otherwise only the part of the string until said closing code
|
||||
// will be colored, and the rest will simply be 'plain'.
|
||||
string = stringReplaceAll(string, styler.close, styler.open);
|
||||
|
||||
styler = styler.parent;
|
||||
}
|
||||
}
|
||||
|
||||
// We can move both next actions out of loop, because remaining actions in loop won't have
|
||||
// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
|
||||
// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
|
||||
const lfIndex = string.indexOf('\n');
|
||||
if (lfIndex !== -1) {
|
||||
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
||||
}
|
||||
|
||||
return openAll + string + closeAll;
|
||||
};
|
||||
|
||||
let template;
|
||||
const chalkTag = (chalk, ...strings) => {
|
||||
const [firstString] = strings;
|
||||
|
||||
if (!isArray(firstString) || !isArray(firstString.raw)) {
|
||||
// If chalk() was called by itself or with a string,
|
||||
// return the string itself as a string.
|
||||
return strings.join(' ');
|
||||
}
|
||||
|
||||
const arguments_ = strings.slice(1);
|
||||
const parts = [firstString.raw[0]];
|
||||
|
||||
for (let i = 1; i < firstString.length; i++) {
|
||||
parts.push(
|
||||
String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
|
||||
String(firstString.raw[i])
|
||||
);
|
||||
}
|
||||
|
||||
if (template === undefined) {
|
||||
template = require('./templates');
|
||||
}
|
||||
|
||||
return template(chalk, parts.join(''));
|
||||
};
|
||||
|
||||
Object.defineProperties(Chalk.prototype, styles);
|
||||
|
||||
const chalk = Chalk(); // eslint-disable-line new-cap
|
||||
chalk.supportsColor = stdoutColor;
|
||||
chalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
|
||||
chalk.stderr.supportsColor = stderrColor;
|
||||
|
||||
module.exports = chalk;
|
134
node_modules/jest-matcher-utils/node_modules/chalk/source/templates.js
generated
vendored
Normal file
134
node_modules/jest-matcher-utils/node_modules/chalk/source/templates.js
generated
vendored
Normal file
|
@ -0,0 +1,134 @@
|
|||
'use strict';
|
||||
const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
|
||||
const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
|
||||
const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
|
||||
const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
|
||||
|
||||
const ESCAPES = new Map([
|
||||
['n', '\n'],
|
||||
['r', '\r'],
|
||||
['t', '\t'],
|
||||
['b', '\b'],
|
||||
['f', '\f'],
|
||||
['v', '\v'],
|
||||
['0', '\0'],
|
||||
['\\', '\\'],
|
||||
['e', '\u001B'],
|
||||
['a', '\u0007']
|
||||
]);
|
||||
|
||||
function unescape(c) {
|
||||
const u = c[0] === 'u';
|
||||
const bracket = c[1] === '{';
|
||||
|
||||
if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
|
||||
return String.fromCharCode(parseInt(c.slice(1), 16));
|
||||
}
|
||||
|
||||
if (u && bracket) {
|
||||
return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
|
||||
}
|
||||
|
||||
return ESCAPES.get(c) || c;
|
||||
}
|
||||
|
||||
function parseArguments(name, arguments_) {
|
||||
const results = [];
|
||||
const chunks = arguments_.trim().split(/\s*,\s*/g);
|
||||
let matches;
|
||||
|
||||
for (const chunk of chunks) {
|
||||
const number = Number(chunk);
|
||||
if (!Number.isNaN(number)) {
|
||||
results.push(number);
|
||||
} else if ((matches = chunk.match(STRING_REGEX))) {
|
||||
results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
|
||||
} else {
|
||||
throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function parseStyle(style) {
|
||||
STYLE_REGEX.lastIndex = 0;
|
||||
|
||||
const results = [];
|
||||
let matches;
|
||||
|
||||
while ((matches = STYLE_REGEX.exec(style)) !== null) {
|
||||
const name = matches[1];
|
||||
|
||||
if (matches[2]) {
|
||||
const args = parseArguments(name, matches[2]);
|
||||
results.push([name].concat(args));
|
||||
} else {
|
||||
results.push([name]);
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function buildStyle(chalk, styles) {
|
||||
const enabled = {};
|
||||
|
||||
for (const layer of styles) {
|
||||
for (const style of layer.styles) {
|
||||
enabled[style[0]] = layer.inverse ? null : style.slice(1);
|
||||
}
|
||||
}
|
||||
|
||||
let current = chalk;
|
||||
for (const [styleName, styles] of Object.entries(enabled)) {
|
||||
if (!Array.isArray(styles)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(styleName in current)) {
|
||||
throw new Error(`Unknown Chalk style: ${styleName}`);
|
||||
}
|
||||
|
||||
current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
|
||||
}
|
||||
|
||||
return current;
|
||||
}
|
||||
|
||||
module.exports = (chalk, temporary) => {
|
||||
const styles = [];
|
||||
const chunks = [];
|
||||
let chunk = [];
|
||||
|
||||
// eslint-disable-next-line max-params
|
||||
temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
|
||||
if (escapeCharacter) {
|
||||
chunk.push(unescape(escapeCharacter));
|
||||
} else if (style) {
|
||||
const string = chunk.join('');
|
||||
chunk = [];
|
||||
chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));
|
||||
styles.push({inverse, styles: parseStyle(style)});
|
||||
} else if (close) {
|
||||
if (styles.length === 0) {
|
||||
throw new Error('Found extraneous } in Chalk template literal');
|
||||
}
|
||||
|
||||
chunks.push(buildStyle(chalk, styles)(chunk.join('')));
|
||||
chunk = [];
|
||||
styles.pop();
|
||||
} else {
|
||||
chunk.push(character);
|
||||
}
|
||||
});
|
||||
|
||||
chunks.push(chunk.join(''));
|
||||
|
||||
if (styles.length > 0) {
|
||||
const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
|
||||
throw new Error(errMessage);
|
||||
}
|
||||
|
||||
return chunks.join('');
|
||||
};
|
39
node_modules/jest-matcher-utils/node_modules/chalk/source/util.js
generated
vendored
Normal file
39
node_modules/jest-matcher-utils/node_modules/chalk/source/util.js
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
'use strict';
|
||||
|
||||
const stringReplaceAll = (string, substring, replacer) => {
|
||||
let index = string.indexOf(substring);
|
||||
if (index === -1) {
|
||||
return string;
|
||||
}
|
||||
|
||||
const substringLength = substring.length;
|
||||
let endIndex = 0;
|
||||
let returnValue = '';
|
||||
do {
|
||||
returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
|
||||
endIndex = index + substringLength;
|
||||
index = string.indexOf(substring, endIndex);
|
||||
} while (index !== -1);
|
||||
|
||||
returnValue += string.substr(endIndex);
|
||||
return returnValue;
|
||||
};
|
||||
|
||||
const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
|
||||
let endIndex = 0;
|
||||
let returnValue = '';
|
||||
do {
|
||||
const gotCR = string[index - 1] === '\r';
|
||||
returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
|
||||
endIndex = index + 1;
|
||||
index = string.indexOf('\n', endIndex);
|
||||
} while (index !== -1);
|
||||
|
||||
returnValue += string.substr(endIndex);
|
||||
return returnValue;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
stringReplaceAll,
|
||||
stringEncaseCRLFWithFirstIndex
|
||||
};
|
21
node_modules/jest-matcher-utils/node_modules/diff-sequences/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/diff-sequences/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
404
node_modules/jest-matcher-utils/node_modules/diff-sequences/README.md
generated
vendored
Normal file
404
node_modules/jest-matcher-utils/node_modules/diff-sequences/README.md
generated
vendored
Normal file
|
@ -0,0 +1,404 @@
|
|||
# diff-sequences
|
||||
|
||||
Compare items in two sequences to find a **longest common subsequence**.
|
||||
|
||||
The items not in common are the items to delete or insert in a **shortest edit script**.
|
||||
|
||||
To maximize flexibility and minimize memory, you write **callback** functions as configuration:
|
||||
|
||||
**Input** function `isCommon(aIndex, bIndex)` compares items at indexes in the sequences and returns a truthy/falsey value. This package might call your function more than once for some pairs of indexes.
|
||||
|
||||
- Because your function encapsulates **comparison**, this package can compare items according to `===` operator, `Object.is` method, or other criterion.
|
||||
- Because your function encapsulates **sequences**, this package can find differences in arrays, strings, or other data.
|
||||
|
||||
**Output** function `foundSubsequence(nCommon, aCommon, bCommon)` receives the number of adjacent items and starting indexes of each common subsequence. If sequences do not have common items, then this package does not call your function.
|
||||
|
||||
If N is the sum of lengths of sequences and L is length of a longest common subsequence, then D = N – 2L is the number of **differences** in the corresponding shortest edit script.
|
||||
|
||||
[_An O(ND) Difference Algorithm and Its Variations_](http://xmailserver.org/diff2.pdf) by Eugene W. Myers is fast when sequences have **few** differences.
|
||||
|
||||
This package implements the **linear space** variation with optimizations so it is fast even when sequences have **many** differences.
|
||||
|
||||
## Usage
|
||||
|
||||
To add this package as a dependency of a project, do either of the following:
|
||||
|
||||
- `npm install diff-sequences`
|
||||
- `yarn add diff-sequences`
|
||||
|
||||
To use `diff` as the name of the default export from this package, do either of the following:
|
||||
|
||||
- `var diff = require('diff-sequences').default; // CommonJS modules`
|
||||
- `import diff from 'diff-sequences'; // ECMAScript modules`
|
||||
|
||||
Call `diff` with the **lengths** of sequences and your **callback** functions:
|
||||
|
||||
```js
|
||||
const a = ['a', 'b', 'c', 'a', 'b', 'b', 'a'];
|
||||
const b = ['c', 'b', 'a', 'b', 'a', 'c'];
|
||||
|
||||
function isCommon(aIndex, bIndex) {
|
||||
return a[aIndex] === b[bIndex];
|
||||
}
|
||||
function foundSubsequence(nCommon, aCommon, bCommon) {
|
||||
// see examples
|
||||
}
|
||||
|
||||
diff(a.length, b.length, isCommon, foundSubsequence);
|
||||
```
|
||||
|
||||
## Example of longest common subsequence
|
||||
|
||||
Some sequences (for example, `a` and `b` in the example of usage) have more than one longest common subsequence.
|
||||
|
||||
This package finds the following common items:
|
||||
|
||||
| comparisons of common items | values | output arguments |
|
||||
| :------------------------------- | :--------- | --------------------------: |
|
||||
| `a[2] === b[0]` | `'c'` | `foundSubsequence(1, 2, 0)` |
|
||||
| `a[4] === b[1]` | `'b'` | `foundSubsequence(1, 4, 1)` |
|
||||
| `a[5] === b[3] && a[6] === b[4]` | `'b', 'a'` | `foundSubsequence(2, 5, 3)` |
|
||||
|
||||
The “edit graph” analogy in the Myers paper shows the following common items:
|
||||
|
||||
| comparisons of common items | values |
|
||||
| :------------------------------- | :--------- |
|
||||
| `a[2] === b[0]` | `'c'` |
|
||||
| `a[3] === b[2] && a[4] === b[3]` | `'a', 'b'` |
|
||||
| `a[6] === b[4]` | `'a'` |
|
||||
|
||||
Various packages which implement the Myers algorithm will **always agree** on the **length** of a longest common subsequence, but might **sometimes disagree** on which **items** are in it.
|
||||
|
||||
## Example of callback functions to count common items
|
||||
|
||||
```js
|
||||
// Return length of longest common subsequence according to === operator.
|
||||
function countCommonItems(a, b) {
|
||||
let n = 0;
|
||||
function isCommon(aIndex, bIndex) {
|
||||
return a[aIndex] === b[bIndex];
|
||||
}
|
||||
function foundSubsequence(nCommon) {
|
||||
n += nCommon;
|
||||
}
|
||||
|
||||
diff(a.length, b.length, isCommon, foundSubsequence);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
const commonLength = countCommonItems(
|
||||
['a', 'b', 'c', 'a', 'b', 'b', 'a'],
|
||||
['c', 'b', 'a', 'b', 'a', 'c'],
|
||||
);
|
||||
```
|
||||
|
||||
| category of items | expression | value |
|
||||
| :----------------- | ------------------------: | ----: |
|
||||
| in common | `commonLength` | `4` |
|
||||
| to delete from `a` | `a.length - commonLength` | `3` |
|
||||
| to insert from `b` | `b.length - commonLength` | `2` |
|
||||
|
||||
If the length difference `b.length - a.length` is:
|
||||
|
||||
- negative: its absolute value is the minimum number of items to **delete** from `a`
|
||||
- positive: it is the minimum number of items to **insert** from `b`
|
||||
- zero: there is an **equal** number of items to delete from `a` and insert from `b`
|
||||
- non-zero: there is an equal number of **additional** items to delete from `a` and insert from `b`
|
||||
|
||||
In this example, `6 - 7` is:
|
||||
|
||||
- negative: `1` is the minimum number of items to **delete** from `a`
|
||||
- non-zero: `2` is the number of **additional** items to delete from `a` and insert from `b`
|
||||
|
||||
## Example of callback functions to find common items
|
||||
|
||||
```js
|
||||
// Return array of items in longest common subsequence according to Object.is method.
|
||||
const findCommonItems = (a, b) => {
|
||||
const array = [];
|
||||
diff(
|
||||
a.length,
|
||||
b.length,
|
||||
(aIndex, bIndex) => Object.is(a[aIndex], b[bIndex]),
|
||||
(nCommon, aCommon) => {
|
||||
for (; nCommon !== 0; nCommon -= 1, aCommon += 1) {
|
||||
array.push(a[aCommon]);
|
||||
}
|
||||
},
|
||||
);
|
||||
return array;
|
||||
};
|
||||
|
||||
const commonItems = findCommonItems(
|
||||
['a', 'b', 'c', 'a', 'b', 'b', 'a'],
|
||||
['c', 'b', 'a', 'b', 'a', 'c'],
|
||||
);
|
||||
```
|
||||
|
||||
| `i` | `commonItems[i]` | `aIndex` |
|
||||
| --: | :--------------- | -------: |
|
||||
| `0` | `'c'` | `2` |
|
||||
| `1` | `'b'` | `4` |
|
||||
| `2` | `'b'` | `5` |
|
||||
| `3` | `'a'` | `6` |
|
||||
|
||||
## Example of callback functions to diff index intervals
|
||||
|
||||
Instead of slicing array-like objects, you can adjust indexes in your callback functions.
|
||||
|
||||
```js
|
||||
// Diff index intervals that are half open [start, end) like array slice method.
|
||||
const diffIndexIntervals = (a, aStart, aEnd, b, bStart, bEnd) => {
|
||||
// Validate: 0 <= aStart and aStart <= aEnd and aEnd <= a.length
|
||||
// Validate: 0 <= bStart and bStart <= bEnd and bEnd <= b.length
|
||||
|
||||
diff(
|
||||
aEnd - aStart,
|
||||
bEnd - bStart,
|
||||
(aIndex, bIndex) => Object.is(a[aStart + aIndex], b[bStart + bIndex]),
|
||||
(nCommon, aCommon, bCommon) => {
|
||||
// aStart + aCommon, bStart + bCommon
|
||||
},
|
||||
);
|
||||
|
||||
// After the last common subsequence, do any remaining work.
|
||||
};
|
||||
```
|
||||
|
||||
## Example of callback functions to emulate diff command
|
||||
|
||||
Linux or Unix has a `diff` command to compare files line by line. Its output is a **shortest edit script**:
|
||||
|
||||
- **c**hange adjacent lines from the first file to lines from the second file
|
||||
- **d**elete lines from the first file
|
||||
- **a**ppend or insert lines from the second file
|
||||
|
||||
```js
|
||||
// Given zero-based half-open range [start, end) of array indexes,
|
||||
// return one-based closed range [start + 1, end] as string.
|
||||
const getRange = (start, end) =>
|
||||
start + 1 === end ? `${start + 1}` : `${start + 1},${end}`;
|
||||
|
||||
// Given index intervals of lines to delete or insert, or both, or neither,
|
||||
// push formatted diff lines onto array.
|
||||
const pushDelIns = (aLines, aIndex, aEnd, bLines, bIndex, bEnd, array) => {
|
||||
const deleteLines = aIndex !== aEnd;
|
||||
const insertLines = bIndex !== bEnd;
|
||||
const changeLines = deleteLines && insertLines;
|
||||
if (changeLines) {
|
||||
array.push(getRange(aIndex, aEnd) + 'c' + getRange(bIndex, bEnd));
|
||||
} else if (deleteLines) {
|
||||
array.push(getRange(aIndex, aEnd) + 'd' + String(bIndex));
|
||||
} else if (insertLines) {
|
||||
array.push(String(aIndex) + 'a' + getRange(bIndex, bEnd));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
for (; aIndex !== aEnd; aIndex += 1) {
|
||||
array.push('< ' + aLines[aIndex]); // delete is less than
|
||||
}
|
||||
|
||||
if (changeLines) {
|
||||
array.push('---');
|
||||
}
|
||||
|
||||
for (; bIndex !== bEnd; bIndex += 1) {
|
||||
array.push('> ' + bLines[bIndex]); // insert is greater than
|
||||
}
|
||||
};
|
||||
|
||||
// Given content of two files, return emulated output of diff utility.
|
||||
const findShortestEditScript = (a, b) => {
|
||||
const aLines = a.split('\n');
|
||||
const bLines = b.split('\n');
|
||||
const aLength = aLines.length;
|
||||
const bLength = bLines.length;
|
||||
|
||||
const isCommon = (aIndex, bIndex) => aLines[aIndex] === bLines[bIndex];
|
||||
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
const array = [];
|
||||
const foundSubsequence = (nCommon, aCommon, bCommon) => {
|
||||
pushDelIns(aLines, aIndex, aCommon, bLines, bIndex, bCommon, array);
|
||||
aIndex = aCommon + nCommon; // number of lines compared in a
|
||||
bIndex = bCommon + nCommon; // number of lines compared in b
|
||||
};
|
||||
|
||||
diff(aLength, bLength, isCommon, foundSubsequence);
|
||||
|
||||
// After the last common subsequence, push remaining change lines.
|
||||
pushDelIns(aLines, aIndex, aLength, bLines, bIndex, bLength, array);
|
||||
|
||||
return array.length === 0 ? '' : array.join('\n') + '\n';
|
||||
};
|
||||
```
|
||||
|
||||
## Example of callback functions to format diff lines
|
||||
|
||||
Here is simplified code to format **changed and unchanged lines** in expected and received values after a test fails in Jest:
|
||||
|
||||
```js
|
||||
// Format diff with minus or plus for change lines and space for common lines.
|
||||
const formatDiffLines = (a, b) => {
|
||||
// Jest depends on pretty-format package to serialize objects as strings.
|
||||
// Unindented for comparison to avoid distracting differences:
|
||||
const aLinesUn = format(a, {indent: 0 /*, other options*/}).split('\n');
|
||||
const bLinesUn = format(b, {indent: 0 /*, other options*/}).split('\n');
|
||||
// Indented to display changed and unchanged lines:
|
||||
const aLinesIn = format(a, {indent: 2 /*, other options*/}).split('\n');
|
||||
const bLinesIn = format(b, {indent: 2 /*, other options*/}).split('\n');
|
||||
|
||||
const aLength = aLinesIn.length; // Validate: aLinesUn.length === aLength
|
||||
const bLength = bLinesIn.length; // Validate: bLinesUn.length === bLength
|
||||
|
||||
const isCommon = (aIndex, bIndex) => aLinesUn[aIndex] === bLinesUn[bIndex];
|
||||
|
||||
// Only because the GitHub Flavored Markdown doc collapses adjacent spaces,
|
||||
// this example code and the following table represent spaces as middle dots.
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
const array = [];
|
||||
const foundSubsequence = (nCommon, aCommon, bCommon) => {
|
||||
for (; aIndex !== aCommon; aIndex += 1) {
|
||||
array.push('-·' + aLinesIn[aIndex]); // delete is minus
|
||||
}
|
||||
for (; bIndex !== bCommon; bIndex += 1) {
|
||||
array.push('+·' + bLinesIn[bIndex]); // insert is plus
|
||||
}
|
||||
for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) {
|
||||
// For common lines, received indentation seems more intuitive.
|
||||
array.push('··' + bLinesIn[bIndex]); // common is space
|
||||
}
|
||||
};
|
||||
|
||||
diff(aLength, bLength, isCommon, foundSubsequence);
|
||||
|
||||
// After the last common subsequence, push remaining change lines.
|
||||
for (; aIndex !== aLength; aIndex += 1) {
|
||||
array.push('-·' + aLinesIn[aIndex]);
|
||||
}
|
||||
for (; bIndex !== bLength; bIndex += 1) {
|
||||
array.push('+·' + bLinesIn[bIndex]);
|
||||
}
|
||||
|
||||
return array;
|
||||
};
|
||||
|
||||
const expected = {
|
||||
searching: '',
|
||||
sorting: {
|
||||
ascending: true,
|
||||
fieldKey: 'what',
|
||||
},
|
||||
};
|
||||
const received = {
|
||||
searching: '',
|
||||
sorting: [
|
||||
{
|
||||
descending: false,
|
||||
fieldKey: 'what',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const diffLines = formatDiffLines(expected, received);
|
||||
```
|
||||
|
||||
If N is the sum of lengths of sequences and L is length of a longest common subsequence, then N – L is length of an array of diff lines. In this example, N is 7 + 9, L is 5, and N – L is 11.
|
||||
|
||||
| `i` | `diffLines[i]` | `aIndex` | `bIndex` |
|
||||
| ---: | :--------------------------------- | -------: | -------: |
|
||||
| `0` | `'··Object {'` | `0` | `0` |
|
||||
| `1` | `'····"searching": "",'` | `1` | `1` |
|
||||
| `2` | `'-···"sorting": Object {'` | `2` | |
|
||||
| `3` | `'-·····"ascending": true,'` | `3` | |
|
||||
| `4` | `'+·····"sorting": Array ['` | | `2` |
|
||||
| `5` | `'+·······Object {'` | | `3` |
|
||||
| `6` | `'+·········"descending": false,'` | | `4` |
|
||||
| `7` | `'··········"fieldKey": "what",'` | `4` | `5` |
|
||||
| `8` | `'········},'` | `5` | `6` |
|
||||
| `9` | `'+·····],'` | | `7` |
|
||||
| `10` | `'··}'` | `6` | `8` |
|
||||
|
||||
## Example of callback functions to find diff items
|
||||
|
||||
Here is simplified code to find changed and unchanged substrings **within adjacent changed lines** in expected and received values after a test fails in Jest:
|
||||
|
||||
```js
|
||||
// Return diff items for strings (compatible with diff-match-patch package).
|
||||
const findDiffItems = (a, b) => {
|
||||
const isCommon = (aIndex, bIndex) => a[aIndex] === b[bIndex];
|
||||
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
const array = [];
|
||||
const foundSubsequence = (nCommon, aCommon, bCommon) => {
|
||||
if (aIndex !== aCommon) {
|
||||
array.push([-1, a.slice(aIndex, aCommon)]); // delete is -1
|
||||
}
|
||||
if (bIndex !== bCommon) {
|
||||
array.push([1, b.slice(bIndex, bCommon)]); // insert is 1
|
||||
}
|
||||
|
||||
aIndex = aCommon + nCommon; // number of characters compared in a
|
||||
bIndex = bCommon + nCommon; // number of characters compared in b
|
||||
array.push([0, a.slice(aCommon, aIndex)]); // common is 0
|
||||
};
|
||||
|
||||
diff(a.length, b.length, isCommon, foundSubsequence);
|
||||
|
||||
// After the last common subsequence, push remaining change items.
|
||||
if (aIndex !== a.length) {
|
||||
array.push([-1, a.slice(aIndex)]);
|
||||
}
|
||||
if (bIndex !== b.length) {
|
||||
array.push([1, b.slice(bIndex)]);
|
||||
}
|
||||
|
||||
return array;
|
||||
};
|
||||
|
||||
const expectedDeleted = ['"sorting": Object {', '"ascending": true,'].join(
|
||||
'\n',
|
||||
);
|
||||
const receivedInserted = [
|
||||
'"sorting": Array [',
|
||||
'Object {',
|
||||
'"descending": false,',
|
||||
].join('\n');
|
||||
|
||||
const diffItems = findDiffItems(expectedDeleted, receivedInserted);
|
||||
```
|
||||
|
||||
| `i` | `diffItems[i][0]` | `diffItems[i][1]` |
|
||||
| --: | ----------------: | :---------------- |
|
||||
| `0` | `0` | `'"sorting": '` |
|
||||
| `1` | `1` | `'Array [\n'` |
|
||||
| `2` | `0` | `'Object {\n"'` |
|
||||
| `3` | `-1` | `'a'` |
|
||||
| `4` | `1` | `'de'` |
|
||||
| `5` | `0` | `'scending": '` |
|
||||
| `6` | `-1` | `'tru'` |
|
||||
| `7` | `1` | `'fals'` |
|
||||
| `8` | `0` | `'e,'` |
|
||||
|
||||
The length difference `b.length - a.length` is equal to the sum of `diffItems[i][0]` values times `diffItems[i][1]` lengths. In this example, the difference `48 - 38` is equal to the sum `10`.
|
||||
|
||||
| category of diff item | `[0]` | `[1]` lengths | subtotal |
|
||||
| :-------------------- | ----: | -----------------: | -------: |
|
||||
| in common | `0` | `11 + 10 + 11 + 2` | `0` |
|
||||
| to delete from `a` | `–1` | `1 + 3` | `-4` |
|
||||
| to insert from `b` | `1` | `8 + 2 + 4` | `14` |
|
||||
|
||||
Instead of formatting the changed substrings with escape codes for colors in the `foundSubsequence` function to save memory, this example spends memory to **gain flexibility** before formatting, so a separate heuristic algorithm might modify the generic array of diff items to show changes more clearly:
|
||||
|
||||
| `i` | `diffItems[i][0]` | `diffItems[i][1]` |
|
||||
| --: | ----------------: | :---------------- |
|
||||
| `6` | `-1` | `'true'` |
|
||||
| `7` | `1` | `'false'` |
|
||||
| `8` | `0` | `','` |
|
||||
|
||||
For expected and received strings of serialized data, the result of finding changed **lines**, and then finding changed **substrings** within adjacent changed lines (as in the preceding two examples) sometimes displays the changes in a more intuitive way than the result of finding changed substrings, and then splitting them into changed and unchanged lines.
|
18
node_modules/jest-matcher-utils/node_modules/diff-sequences/build/index.d.ts
generated
vendored
Normal file
18
node_modules/jest-matcher-utils/node_modules/diff-sequences/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
declare type IsCommon = (aIndex: number, // caller can assume: 0 <= aIndex && aIndex < aLength
|
||||
bIndex: number) => boolean;
|
||||
declare type FoundSubsequence = (nCommon: number, // caller can assume: 0 < nCommon
|
||||
aCommon: number, // caller can assume: 0 <= aCommon && aCommon < aLength
|
||||
bCommon: number) => void;
|
||||
export declare type Callbacks = {
|
||||
foundSubsequence: FoundSubsequence;
|
||||
isCommon: IsCommon;
|
||||
};
|
||||
declare const _default: (aLength: number, bLength: number, isCommon: IsCommon, foundSubsequence: FoundSubsequence) => void;
|
||||
export default _default;
|
804
node_modules/jest-matcher-utils/node_modules/diff-sequences/build/index.js
generated
vendored
Normal file
804
node_modules/jest-matcher-utils/node_modules/diff-sequences/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,804 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
// This diff-sequences package implements the linear space variation in
|
||||
// An O(ND) Difference Algorithm and Its Variations by Eugene W. Myers
|
||||
// Relationship in notation between Myers paper and this package:
|
||||
// A is a
|
||||
// N is aLength, aEnd - aStart, and so on
|
||||
// x is aIndex, aFirst, aLast, and so on
|
||||
// B is b
|
||||
// M is bLength, bEnd - bStart, and so on
|
||||
// y is bIndex, bFirst, bLast, and so on
|
||||
// Δ = N - M is negative of baDeltaLength = bLength - aLength
|
||||
// D is d
|
||||
// k is kF
|
||||
// k + Δ is kF = kR - baDeltaLength
|
||||
// V is aIndexesF or aIndexesR (see comment below about Indexes type)
|
||||
// index intervals [1, N] and [1, M] are [0, aLength) and [0, bLength)
|
||||
// starting point in forward direction (0, 0) is (-1, -1)
|
||||
// starting point in reverse direction (N + 1, M + 1) is (aLength, bLength)
|
||||
// The “edit graph” for sequences a and b corresponds to items:
|
||||
// in a on the horizontal axis
|
||||
// in b on the vertical axis
|
||||
//
|
||||
// Given a-coordinate of a point in a diagonal, you can compute b-coordinate.
|
||||
//
|
||||
// Forward diagonals kF:
|
||||
// zero diagonal intersects top left corner
|
||||
// positive diagonals intersect top edge
|
||||
// negative diagonals insersect left edge
|
||||
//
|
||||
// Reverse diagonals kR:
|
||||
// zero diagonal intersects bottom right corner
|
||||
// positive diagonals intersect right edge
|
||||
// negative diagonals intersect bottom edge
|
||||
// The graph contains a directed acyclic graph of edges:
|
||||
// horizontal: delete an item from a
|
||||
// vertical: insert an item from b
|
||||
// diagonal: common item in a and b
|
||||
//
|
||||
// The algorithm solves dual problems in the graph analogy:
|
||||
// Find longest common subsequence: path with maximum number of diagonal edges
|
||||
// Find shortest edit script: path with minimum number of non-diagonal edges
|
||||
// Input callback function compares items at indexes in the sequences.
|
||||
// Output callback function receives the number of adjacent items
|
||||
// and starting indexes of each common subsequence.
|
||||
// Either original functions or wrapped to swap indexes if graph is transposed.
|
||||
// Indexes in sequence a of last point of forward or reverse paths in graph.
|
||||
// Myers algorithm indexes by diagonal k which for negative is bad deopt in V8.
|
||||
// This package indexes by iF and iR which are greater than or equal to zero.
|
||||
// and also updates the index arrays in place to cut memory in half.
|
||||
// kF = 2 * iF - d
|
||||
// kR = d - 2 * iR
|
||||
// Division of index intervals in sequences a and b at the middle change.
|
||||
// Invariant: intervals do not have common items at the start or end.
|
||||
const pkg = 'diff-sequences'; // for error messages
|
||||
|
||||
const NOT_YET_SET = 0; // small int instead of undefined to avoid deopt in V8
|
||||
// Return the number of common items that follow in forward direction.
|
||||
// The length of what Myers paper calls a “snake” in a forward path.
|
||||
|
||||
const countCommonItemsF = (aIndex, aEnd, bIndex, bEnd, isCommon) => {
|
||||
let nCommon = 0;
|
||||
|
||||
while (aIndex < aEnd && bIndex < bEnd && isCommon(aIndex, bIndex)) {
|
||||
aIndex += 1;
|
||||
bIndex += 1;
|
||||
nCommon += 1;
|
||||
}
|
||||
|
||||
return nCommon;
|
||||
}; // Return the number of common items that precede in reverse direction.
|
||||
// The length of what Myers paper calls a “snake” in a reverse path.
|
||||
|
||||
const countCommonItemsR = (aStart, aIndex, bStart, bIndex, isCommon) => {
|
||||
let nCommon = 0;
|
||||
|
||||
while (aStart <= aIndex && bStart <= bIndex && isCommon(aIndex, bIndex)) {
|
||||
aIndex -= 1;
|
||||
bIndex -= 1;
|
||||
nCommon += 1;
|
||||
}
|
||||
|
||||
return nCommon;
|
||||
}; // A simple function to extend forward paths from (d - 1) to d changes
|
||||
// when forward and reverse paths cannot yet overlap.
|
||||
|
||||
const extendPathsF = (d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF) => {
|
||||
// Unroll the first iteration.
|
||||
let iF = 0;
|
||||
let kF = -d; // kF = 2 * iF - d
|
||||
|
||||
let aFirst = aIndexesF[iF]; // in first iteration always insert
|
||||
|
||||
let aIndexPrev1 = aFirst; // prev value of [iF - 1] in next iteration
|
||||
|
||||
aIndexesF[iF] += countCommonItemsF(
|
||||
aFirst + 1,
|
||||
aEnd,
|
||||
bF + aFirst - kF + 1,
|
||||
bEnd,
|
||||
isCommon
|
||||
); // Optimization: skip diagonals in which paths cannot ever overlap.
|
||||
|
||||
const nF = d < iMaxF ? d : iMaxF; // The diagonals kF are odd when d is odd and even when d is even.
|
||||
|
||||
for (iF += 1, kF += 2; iF <= nF; iF += 1, kF += 2) {
|
||||
// To get first point of path segment, move one change in forward direction
|
||||
// from last point of previous path segment in an adjacent diagonal.
|
||||
// In last possible iteration when iF === d and kF === d always delete.
|
||||
if (iF !== d && aIndexPrev1 < aIndexesF[iF]) {
|
||||
aFirst = aIndexesF[iF]; // vertical to insert from b
|
||||
} else {
|
||||
aFirst = aIndexPrev1 + 1; // horizontal to delete from a
|
||||
|
||||
if (aEnd <= aFirst) {
|
||||
// Optimization: delete moved past right of graph.
|
||||
return iF - 1;
|
||||
}
|
||||
} // To get last point of path segment, move along diagonal of common items.
|
||||
|
||||
aIndexPrev1 = aIndexesF[iF];
|
||||
aIndexesF[iF] =
|
||||
aFirst +
|
||||
countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon);
|
||||
}
|
||||
|
||||
return iMaxF;
|
||||
}; // A simple function to extend reverse paths from (d - 1) to d changes
|
||||
// when reverse and forward paths cannot yet overlap.
|
||||
|
||||
const extendPathsR = (d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR) => {
|
||||
// Unroll the first iteration.
|
||||
let iR = 0;
|
||||
let kR = d; // kR = d - 2 * iR
|
||||
|
||||
let aFirst = aIndexesR[iR]; // in first iteration always insert
|
||||
|
||||
let aIndexPrev1 = aFirst; // prev value of [iR - 1] in next iteration
|
||||
|
||||
aIndexesR[iR] -= countCommonItemsR(
|
||||
aStart,
|
||||
aFirst - 1,
|
||||
bStart,
|
||||
bR + aFirst - kR - 1,
|
||||
isCommon
|
||||
); // Optimization: skip diagonals in which paths cannot ever overlap.
|
||||
|
||||
const nR = d < iMaxR ? d : iMaxR; // The diagonals kR are odd when d is odd and even when d is even.
|
||||
|
||||
for (iR += 1, kR -= 2; iR <= nR; iR += 1, kR -= 2) {
|
||||
// To get first point of path segment, move one change in reverse direction
|
||||
// from last point of previous path segment in an adjacent diagonal.
|
||||
// In last possible iteration when iR === d and kR === -d always delete.
|
||||
if (iR !== d && aIndexesR[iR] < aIndexPrev1) {
|
||||
aFirst = aIndexesR[iR]; // vertical to insert from b
|
||||
} else {
|
||||
aFirst = aIndexPrev1 - 1; // horizontal to delete from a
|
||||
|
||||
if (aFirst < aStart) {
|
||||
// Optimization: delete moved past left of graph.
|
||||
return iR - 1;
|
||||
}
|
||||
} // To get last point of path segment, move along diagonal of common items.
|
||||
|
||||
aIndexPrev1 = aIndexesR[iR];
|
||||
aIndexesR[iR] =
|
||||
aFirst -
|
||||
countCommonItemsR(
|
||||
aStart,
|
||||
aFirst - 1,
|
||||
bStart,
|
||||
bR + aFirst - kR - 1,
|
||||
isCommon
|
||||
);
|
||||
}
|
||||
|
||||
return iMaxR;
|
||||
}; // A complete function to extend forward paths from (d - 1) to d changes.
|
||||
// Return true if a path overlaps reverse path of (d - 1) changes in its diagonal.
|
||||
|
||||
const extendOverlappablePathsF = (
|
||||
d,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
iMaxF,
|
||||
aIndexesR,
|
||||
iMaxR,
|
||||
division
|
||||
) => {
|
||||
const bF = bStart - aStart; // bIndex = bF + aIndex - kF
|
||||
|
||||
const aLength = aEnd - aStart;
|
||||
const bLength = bEnd - bStart;
|
||||
const baDeltaLength = bLength - aLength; // kF = kR - baDeltaLength
|
||||
// Range of diagonals in which forward and reverse paths might overlap.
|
||||
|
||||
const kMinOverlapF = -baDeltaLength - (d - 1); // -(d - 1) <= kR
|
||||
|
||||
const kMaxOverlapF = -baDeltaLength + (d - 1); // kR <= (d - 1)
|
||||
|
||||
let aIndexPrev1 = NOT_YET_SET; // prev value of [iF - 1] in next iteration
|
||||
// Optimization: skip diagonals in which paths cannot ever overlap.
|
||||
|
||||
const nF = d < iMaxF ? d : iMaxF; // The diagonals kF = 2 * iF - d are odd when d is odd and even when d is even.
|
||||
|
||||
for (let iF = 0, kF = -d; iF <= nF; iF += 1, kF += 2) {
|
||||
// To get first point of path segment, move one change in forward direction
|
||||
// from last point of previous path segment in an adjacent diagonal.
|
||||
// In first iteration when iF === 0 and kF === -d always insert.
|
||||
// In last possible iteration when iF === d and kF === d always delete.
|
||||
const insert = iF === 0 || (iF !== d && aIndexPrev1 < aIndexesF[iF]);
|
||||
const aLastPrev = insert ? aIndexesF[iF] : aIndexPrev1;
|
||||
const aFirst = insert
|
||||
? aLastPrev // vertical to insert from b
|
||||
: aLastPrev + 1; // horizontal to delete from a
|
||||
// To get last point of path segment, move along diagonal of common items.
|
||||
|
||||
const bFirst = bF + aFirst - kF;
|
||||
const nCommonF = countCommonItemsF(
|
||||
aFirst + 1,
|
||||
aEnd,
|
||||
bFirst + 1,
|
||||
bEnd,
|
||||
isCommon
|
||||
);
|
||||
const aLast = aFirst + nCommonF;
|
||||
aIndexPrev1 = aIndexesF[iF];
|
||||
aIndexesF[iF] = aLast;
|
||||
|
||||
if (kMinOverlapF <= kF && kF <= kMaxOverlapF) {
|
||||
// Solve for iR of reverse path with (d - 1) changes in diagonal kF:
|
||||
// kR = kF + baDeltaLength
|
||||
// kR = (d - 1) - 2 * iR
|
||||
const iR = (d - 1 - (kF + baDeltaLength)) / 2; // If this forward path overlaps the reverse path in this diagonal,
|
||||
// then this is the middle change of the index intervals.
|
||||
|
||||
if (iR <= iMaxR && aIndexesR[iR] - 1 <= aLast) {
|
||||
// Unlike the Myers algorithm which finds only the middle “snake”
|
||||
// this package can find two common subsequences per division.
|
||||
// Last point of previous path segment is on an adjacent diagonal.
|
||||
const bLastPrev = bF + aLastPrev - (insert ? kF + 1 : kF - 1); // Because of invariant that intervals preceding the middle change
|
||||
// cannot have common items at the end,
|
||||
// move in reverse direction along a diagonal of common items.
|
||||
|
||||
const nCommonR = countCommonItemsR(
|
||||
aStart,
|
||||
aLastPrev,
|
||||
bStart,
|
||||
bLastPrev,
|
||||
isCommon
|
||||
);
|
||||
const aIndexPrevFirst = aLastPrev - nCommonR;
|
||||
const bIndexPrevFirst = bLastPrev - nCommonR;
|
||||
const aEndPreceding = aIndexPrevFirst + 1;
|
||||
const bEndPreceding = bIndexPrevFirst + 1;
|
||||
division.nChangePreceding = d - 1;
|
||||
|
||||
if (d - 1 === aEndPreceding + bEndPreceding - aStart - bStart) {
|
||||
// Optimization: number of preceding changes in forward direction
|
||||
// is equal to number of items in preceding interval,
|
||||
// therefore it cannot contain any common items.
|
||||
division.aEndPreceding = aStart;
|
||||
division.bEndPreceding = bStart;
|
||||
} else {
|
||||
division.aEndPreceding = aEndPreceding;
|
||||
division.bEndPreceding = bEndPreceding;
|
||||
}
|
||||
|
||||
division.nCommonPreceding = nCommonR;
|
||||
|
||||
if (nCommonR !== 0) {
|
||||
division.aCommonPreceding = aEndPreceding;
|
||||
division.bCommonPreceding = bEndPreceding;
|
||||
}
|
||||
|
||||
division.nCommonFollowing = nCommonF;
|
||||
|
||||
if (nCommonF !== 0) {
|
||||
division.aCommonFollowing = aFirst + 1;
|
||||
division.bCommonFollowing = bFirst + 1;
|
||||
}
|
||||
|
||||
const aStartFollowing = aLast + 1;
|
||||
const bStartFollowing = bFirst + nCommonF + 1;
|
||||
division.nChangeFollowing = d - 1;
|
||||
|
||||
if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {
|
||||
// Optimization: number of changes in reverse direction
|
||||
// is equal to number of items in following interval,
|
||||
// therefore it cannot contain any common items.
|
||||
division.aStartFollowing = aEnd;
|
||||
division.bStartFollowing = bEnd;
|
||||
} else {
|
||||
division.aStartFollowing = aStartFollowing;
|
||||
division.bStartFollowing = bStartFollowing;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}; // A complete function to extend reverse paths from (d - 1) to d changes.
|
||||
// Return true if a path overlaps forward path of d changes in its diagonal.
|
||||
|
||||
const extendOverlappablePathsR = (
|
||||
d,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
iMaxF,
|
||||
aIndexesR,
|
||||
iMaxR,
|
||||
division
|
||||
) => {
|
||||
const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR
|
||||
|
||||
const aLength = aEnd - aStart;
|
||||
const bLength = bEnd - bStart;
|
||||
const baDeltaLength = bLength - aLength; // kR = kF + baDeltaLength
|
||||
// Range of diagonals in which forward and reverse paths might overlap.
|
||||
|
||||
const kMinOverlapR = baDeltaLength - d; // -d <= kF
|
||||
|
||||
const kMaxOverlapR = baDeltaLength + d; // kF <= d
|
||||
|
||||
let aIndexPrev1 = NOT_YET_SET; // prev value of [iR - 1] in next iteration
|
||||
// Optimization: skip diagonals in which paths cannot ever overlap.
|
||||
|
||||
const nR = d < iMaxR ? d : iMaxR; // The diagonals kR = d - 2 * iR are odd when d is odd and even when d is even.
|
||||
|
||||
for (let iR = 0, kR = d; iR <= nR; iR += 1, kR -= 2) {
|
||||
// To get first point of path segment, move one change in reverse direction
|
||||
// from last point of previous path segment in an adjacent diagonal.
|
||||
// In first iteration when iR === 0 and kR === d always insert.
|
||||
// In last possible iteration when iR === d and kR === -d always delete.
|
||||
const insert = iR === 0 || (iR !== d && aIndexesR[iR] < aIndexPrev1);
|
||||
const aLastPrev = insert ? aIndexesR[iR] : aIndexPrev1;
|
||||
const aFirst = insert
|
||||
? aLastPrev // vertical to insert from b
|
||||
: aLastPrev - 1; // horizontal to delete from a
|
||||
// To get last point of path segment, move along diagonal of common items.
|
||||
|
||||
const bFirst = bR + aFirst - kR;
|
||||
const nCommonR = countCommonItemsR(
|
||||
aStart,
|
||||
aFirst - 1,
|
||||
bStart,
|
||||
bFirst - 1,
|
||||
isCommon
|
||||
);
|
||||
const aLast = aFirst - nCommonR;
|
||||
aIndexPrev1 = aIndexesR[iR];
|
||||
aIndexesR[iR] = aLast;
|
||||
|
||||
if (kMinOverlapR <= kR && kR <= kMaxOverlapR) {
|
||||
// Solve for iF of forward path with d changes in diagonal kR:
|
||||
// kF = kR - baDeltaLength
|
||||
// kF = 2 * iF - d
|
||||
const iF = (d + (kR - baDeltaLength)) / 2; // If this reverse path overlaps the forward path in this diagonal,
|
||||
// then this is a middle change of the index intervals.
|
||||
|
||||
if (iF <= iMaxF && aLast - 1 <= aIndexesF[iF]) {
|
||||
const bLast = bFirst - nCommonR;
|
||||
division.nChangePreceding = d;
|
||||
|
||||
if (d === aLast + bLast - aStart - bStart) {
|
||||
// Optimization: number of changes in reverse direction
|
||||
// is equal to number of items in preceding interval,
|
||||
// therefore it cannot contain any common items.
|
||||
division.aEndPreceding = aStart;
|
||||
division.bEndPreceding = bStart;
|
||||
} else {
|
||||
division.aEndPreceding = aLast;
|
||||
division.bEndPreceding = bLast;
|
||||
}
|
||||
|
||||
division.nCommonPreceding = nCommonR;
|
||||
|
||||
if (nCommonR !== 0) {
|
||||
// The last point of reverse path segment is start of common subsequence.
|
||||
division.aCommonPreceding = aLast;
|
||||
division.bCommonPreceding = bLast;
|
||||
}
|
||||
|
||||
division.nChangeFollowing = d - 1;
|
||||
|
||||
if (d === 1) {
|
||||
// There is no previous path segment.
|
||||
division.nCommonFollowing = 0;
|
||||
division.aStartFollowing = aEnd;
|
||||
division.bStartFollowing = bEnd;
|
||||
} else {
|
||||
// Unlike the Myers algorithm which finds only the middle “snake”
|
||||
// this package can find two common subsequences per division.
|
||||
// Last point of previous path segment is on an adjacent diagonal.
|
||||
const bLastPrev = bR + aLastPrev - (insert ? kR - 1 : kR + 1); // Because of invariant that intervals following the middle change
|
||||
// cannot have common items at the start,
|
||||
// move in forward direction along a diagonal of common items.
|
||||
|
||||
const nCommonF = countCommonItemsF(
|
||||
aLastPrev,
|
||||
aEnd,
|
||||
bLastPrev,
|
||||
bEnd,
|
||||
isCommon
|
||||
);
|
||||
division.nCommonFollowing = nCommonF;
|
||||
|
||||
if (nCommonF !== 0) {
|
||||
// The last point of reverse path segment is start of common subsequence.
|
||||
division.aCommonFollowing = aLastPrev;
|
||||
division.bCommonFollowing = bLastPrev;
|
||||
}
|
||||
|
||||
const aStartFollowing = aLastPrev + nCommonF; // aFirstPrev
|
||||
|
||||
const bStartFollowing = bLastPrev + nCommonF; // bFirstPrev
|
||||
|
||||
if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {
|
||||
// Optimization: number of changes in forward direction
|
||||
// is equal to number of items in following interval,
|
||||
// therefore it cannot contain any common items.
|
||||
division.aStartFollowing = aEnd;
|
||||
division.bStartFollowing = bEnd;
|
||||
} else {
|
||||
division.aStartFollowing = aStartFollowing;
|
||||
division.bStartFollowing = bStartFollowing;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}; // Given index intervals and input function to compare items at indexes,
|
||||
// divide at the middle change.
|
||||
//
|
||||
// DO NOT CALL if start === end, because interval cannot contain common items
|
||||
// and because this function will throw the “no overlap” error.
|
||||
|
||||
const divide = (
|
||||
nChange,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division // output
|
||||
) => {
|
||||
const bF = bStart - aStart; // bIndex = bF + aIndex - kF
|
||||
|
||||
const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR
|
||||
|
||||
const aLength = aEnd - aStart;
|
||||
const bLength = bEnd - bStart; // Because graph has square or portrait orientation,
|
||||
// length difference is minimum number of items to insert from b.
|
||||
// Corresponding forward and reverse diagonals in graph
|
||||
// depend on length difference of the sequences:
|
||||
// kF = kR - baDeltaLength
|
||||
// kR = kF + baDeltaLength
|
||||
|
||||
const baDeltaLength = bLength - aLength; // Optimization: max diagonal in graph intersects corner of shorter side.
|
||||
|
||||
let iMaxF = aLength;
|
||||
let iMaxR = aLength; // Initialize no changes yet in forward or reverse direction:
|
||||
|
||||
aIndexesF[0] = aStart - 1; // at open start of interval, outside closed start
|
||||
|
||||
aIndexesR[0] = aEnd; // at open end of interval
|
||||
|
||||
if (baDeltaLength % 2 === 0) {
|
||||
// The number of changes in paths is 2 * d if length difference is even.
|
||||
const dMin = (nChange || baDeltaLength) / 2;
|
||||
const dMax = (aLength + bLength) / 2;
|
||||
|
||||
for (let d = 1; d <= dMax; d += 1) {
|
||||
iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);
|
||||
|
||||
if (d < dMin) {
|
||||
iMaxR = extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR);
|
||||
} else if (
|
||||
// If a reverse path overlaps a forward path in the same diagonal,
|
||||
// return a division of the index intervals at the middle change.
|
||||
extendOverlappablePathsR(
|
||||
d,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
iMaxF,
|
||||
aIndexesR,
|
||||
iMaxR,
|
||||
division
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// The number of changes in paths is 2 * d - 1 if length difference is odd.
|
||||
const dMin = ((nChange || baDeltaLength) + 1) / 2;
|
||||
const dMax = (aLength + bLength + 1) / 2; // Unroll first half iteration so loop extends the relevant pairs of paths.
|
||||
// Because of invariant that intervals have no common items at start or end,
|
||||
// and limitation not to call divide with empty intervals,
|
||||
// therefore it cannot be called if a forward path with one change
|
||||
// would overlap a reverse path with no changes, even if dMin === 1.
|
||||
|
||||
let d = 1;
|
||||
iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);
|
||||
|
||||
for (d += 1; d <= dMax; d += 1) {
|
||||
iMaxR = extendPathsR(
|
||||
d - 1,
|
||||
aStart,
|
||||
bStart,
|
||||
bR,
|
||||
isCommon,
|
||||
aIndexesR,
|
||||
iMaxR
|
||||
);
|
||||
|
||||
if (d < dMin) {
|
||||
iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);
|
||||
} else if (
|
||||
// If a forward path overlaps a reverse path in the same diagonal,
|
||||
// return a division of the index intervals at the middle change.
|
||||
extendOverlappablePathsF(
|
||||
d,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
iMaxF,
|
||||
aIndexesR,
|
||||
iMaxR,
|
||||
division
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
|
||||
throw new Error(
|
||||
`${pkg}: no overlap aStart=${aStart} aEnd=${aEnd} bStart=${bStart} bEnd=${bEnd}`
|
||||
);
|
||||
}; // Given index intervals and input function to compare items at indexes,
|
||||
// return by output function the number of adjacent items and starting indexes
|
||||
// of each common subsequence. Divide and conquer with only linear space.
|
||||
//
|
||||
// The index intervals are half open [start, end) like array slice method.
|
||||
// DO NOT CALL if start === end, because interval cannot contain common items
|
||||
// and because divide function will throw the “no overlap” error.
|
||||
|
||||
const findSubsequences = (
|
||||
nChange,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
transposed,
|
||||
callbacks,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division // temporary memory, not input nor output
|
||||
) => {
|
||||
if (bEnd - bStart < aEnd - aStart) {
|
||||
// Transpose graph so it has portrait instead of landscape orientation.
|
||||
// Always compare shorter to longer sequence for consistency and optimization.
|
||||
transposed = !transposed;
|
||||
|
||||
if (transposed && callbacks.length === 1) {
|
||||
// Lazily wrap callback functions to swap args if graph is transposed.
|
||||
const {foundSubsequence, isCommon} = callbacks[0];
|
||||
callbacks[1] = {
|
||||
foundSubsequence: (nCommon, bCommon, aCommon) => {
|
||||
foundSubsequence(nCommon, aCommon, bCommon);
|
||||
},
|
||||
isCommon: (bIndex, aIndex) => isCommon(aIndex, bIndex)
|
||||
};
|
||||
}
|
||||
|
||||
const tStart = aStart;
|
||||
const tEnd = aEnd;
|
||||
aStart = bStart;
|
||||
aEnd = bEnd;
|
||||
bStart = tStart;
|
||||
bEnd = tEnd;
|
||||
}
|
||||
|
||||
const {foundSubsequence, isCommon} = callbacks[transposed ? 1 : 0]; // Divide the index intervals at the middle change.
|
||||
|
||||
divide(
|
||||
nChange,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
isCommon,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division
|
||||
);
|
||||
const {
|
||||
nChangePreceding,
|
||||
aEndPreceding,
|
||||
bEndPreceding,
|
||||
nCommonPreceding,
|
||||
aCommonPreceding,
|
||||
bCommonPreceding,
|
||||
nCommonFollowing,
|
||||
aCommonFollowing,
|
||||
bCommonFollowing,
|
||||
nChangeFollowing,
|
||||
aStartFollowing,
|
||||
bStartFollowing
|
||||
} = division; // Unless either index interval is empty, they might contain common items.
|
||||
|
||||
if (aStart < aEndPreceding && bStart < bEndPreceding) {
|
||||
// Recursely find and return common subsequences preceding the division.
|
||||
findSubsequences(
|
||||
nChangePreceding,
|
||||
aStart,
|
||||
aEndPreceding,
|
||||
bStart,
|
||||
bEndPreceding,
|
||||
transposed,
|
||||
callbacks,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division
|
||||
);
|
||||
} // Return common subsequences that are adjacent to the middle change.
|
||||
|
||||
if (nCommonPreceding !== 0) {
|
||||
foundSubsequence(nCommonPreceding, aCommonPreceding, bCommonPreceding);
|
||||
}
|
||||
|
||||
if (nCommonFollowing !== 0) {
|
||||
foundSubsequence(nCommonFollowing, aCommonFollowing, bCommonFollowing);
|
||||
} // Unless either index interval is empty, they might contain common items.
|
||||
|
||||
if (aStartFollowing < aEnd && bStartFollowing < bEnd) {
|
||||
// Recursely find and return common subsequences following the division.
|
||||
findSubsequences(
|
||||
nChangeFollowing,
|
||||
aStartFollowing,
|
||||
aEnd,
|
||||
bStartFollowing,
|
||||
bEnd,
|
||||
transposed,
|
||||
callbacks,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const validateLength = (name, arg) => {
|
||||
const type = typeof arg;
|
||||
|
||||
if (type !== 'number') {
|
||||
throw new TypeError(`${pkg}: ${name} typeof ${type} is not a number`);
|
||||
}
|
||||
|
||||
if (!Number.isSafeInteger(arg)) {
|
||||
throw new RangeError(`${pkg}: ${name} value ${arg} is not a safe integer`);
|
||||
}
|
||||
|
||||
if (arg < 0) {
|
||||
throw new RangeError(`${pkg}: ${name} value ${arg} is a negative integer`);
|
||||
}
|
||||
};
|
||||
|
||||
const validateCallback = (name, arg) => {
|
||||
const type = typeof arg;
|
||||
|
||||
if (type !== 'function') {
|
||||
throw new TypeError(`${pkg}: ${name} typeof ${type} is not a function`);
|
||||
}
|
||||
}; // Compare items in two sequences to find a longest common subsequence.
|
||||
// Given lengths of sequences and input function to compare items at indexes,
|
||||
// return by output function the number of adjacent items and starting indexes
|
||||
// of each common subsequence.
|
||||
|
||||
var _default = (aLength, bLength, isCommon, foundSubsequence) => {
|
||||
validateLength('aLength', aLength);
|
||||
validateLength('bLength', bLength);
|
||||
validateCallback('isCommon', isCommon);
|
||||
validateCallback('foundSubsequence', foundSubsequence); // Count common items from the start in the forward direction.
|
||||
|
||||
const nCommonF = countCommonItemsF(0, aLength, 0, bLength, isCommon);
|
||||
|
||||
if (nCommonF !== 0) {
|
||||
foundSubsequence(nCommonF, 0, 0);
|
||||
} // Unless both sequences consist of common items only,
|
||||
// find common items in the half-trimmed index intervals.
|
||||
|
||||
if (aLength !== nCommonF || bLength !== nCommonF) {
|
||||
// Invariant: intervals do not have common items at the start.
|
||||
// The start of an index interval is closed like array slice method.
|
||||
const aStart = nCommonF;
|
||||
const bStart = nCommonF; // Count common items from the end in the reverse direction.
|
||||
|
||||
const nCommonR = countCommonItemsR(
|
||||
aStart,
|
||||
aLength - 1,
|
||||
bStart,
|
||||
bLength - 1,
|
||||
isCommon
|
||||
); // Invariant: intervals do not have common items at the end.
|
||||
// The end of an index interval is open like array slice method.
|
||||
|
||||
const aEnd = aLength - nCommonR;
|
||||
const bEnd = bLength - nCommonR; // Unless one sequence consists of common items only,
|
||||
// therefore the other trimmed index interval consists of changes only,
|
||||
// find common items in the trimmed index intervals.
|
||||
|
||||
const nCommonFR = nCommonF + nCommonR;
|
||||
|
||||
if (aLength !== nCommonFR && bLength !== nCommonFR) {
|
||||
const nChange = 0; // number of change items is not yet known
|
||||
|
||||
const transposed = false; // call the original unwrapped functions
|
||||
|
||||
const callbacks = [
|
||||
{
|
||||
foundSubsequence,
|
||||
isCommon
|
||||
}
|
||||
]; // Indexes in sequence a of last points in furthest reaching paths
|
||||
// from outside the start at top left in the forward direction:
|
||||
|
||||
const aIndexesF = [NOT_YET_SET]; // from the end at bottom right in the reverse direction:
|
||||
|
||||
const aIndexesR = [NOT_YET_SET]; // Initialize one object as output of all calls to divide function.
|
||||
|
||||
const division = {
|
||||
aCommonFollowing: NOT_YET_SET,
|
||||
aCommonPreceding: NOT_YET_SET,
|
||||
aEndPreceding: NOT_YET_SET,
|
||||
aStartFollowing: NOT_YET_SET,
|
||||
bCommonFollowing: NOT_YET_SET,
|
||||
bCommonPreceding: NOT_YET_SET,
|
||||
bEndPreceding: NOT_YET_SET,
|
||||
bStartFollowing: NOT_YET_SET,
|
||||
nChangeFollowing: NOT_YET_SET,
|
||||
nChangePreceding: NOT_YET_SET,
|
||||
nCommonFollowing: NOT_YET_SET,
|
||||
nCommonPreceding: NOT_YET_SET
|
||||
}; // Find and return common subsequences in the trimmed index intervals.
|
||||
|
||||
findSubsequences(
|
||||
nChange,
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
transposed,
|
||||
callbacks,
|
||||
aIndexesF,
|
||||
aIndexesR,
|
||||
division
|
||||
);
|
||||
}
|
||||
|
||||
if (nCommonR !== 0) {
|
||||
foundSubsequence(nCommonR, aEnd, bEnd);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
exports.default = _default;
|
35
node_modules/jest-matcher-utils/node_modules/diff-sequences/package.json
generated
vendored
Normal file
35
node_modules/jest-matcher-utils/node_modules/diff-sequences/package.json
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"name": "diff-sequences",
|
||||
"version": "26.3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/diff-sequences"
|
||||
},
|
||||
"license": "MIT",
|
||||
"description": "Compare items in two sequences to find a longest common subsequence",
|
||||
"keywords": [
|
||||
"fast",
|
||||
"linear",
|
||||
"space",
|
||||
"callback",
|
||||
"diff"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"scripts": {
|
||||
"perf": "node --expose-gc perf/index.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"benchmark": "^2.1.4",
|
||||
"diff": "^4.0.1",
|
||||
"fast-check": "^2.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "3a7e06fe855515a848241bb06a6f6e117847443d"
|
||||
}
|
48
node_modules/jest-matcher-utils/node_modules/diff-sequences/perf/example.md
generated
vendored
Normal file
48
node_modules/jest-matcher-utils/node_modules/diff-sequences/perf/example.md
generated
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
## Benchmark time for `diff-sequences` versus `diff`
|
||||
|
||||
A ratio less than 1.0 means `diff-sequences` is faster.
|
||||
|
||||
### n = 20
|
||||
|
||||
| name | % | ratio | improved | rme | baseline | rme |
|
||||
| :----- | ---: | :----- | :-------- | ----: | :-------- | ----: |
|
||||
| delete | 20% | 0.1824 | 3.0639e-6 | 1.11% | 1.6795e-5 | 0.78% |
|
||||
| insert | 20% | 0.1367 | 2.5786e-6 | 0.75% | 1.8866e-5 | 0.85% |
|
||||
| delete | 40% | 0.1015 | 3.0534e-6 | 1.00% | 3.0090e-5 | 0.70% |
|
||||
| insert | 40% | 0.0791 | 2.6722e-6 | 0.61% | 3.3791e-5 | 0.56% |
|
||||
| delete | 80% | 0.0410 | 2.8870e-6 | 0.93% | 7.0411e-5 | 0.72% |
|
||||
| insert | 80% | 0.0371 | 2.5786e-6 | 0.83% | 6.9431e-5 | 0.62% |
|
||||
| change | 10% | 0.1504 | 2.8703e-6 | 0.71% | 1.9087e-5 | 0.83% |
|
||||
| change | 20% | 0.1706 | 3.2637e-6 | 0.78% | 1.9127e-5 | 0.62% |
|
||||
| change | 50% | 0.0944 | 1.2012e-5 | 0.55% | 1.2724e-4 | 0.76% |
|
||||
| change | 100% | 0.0522 | 1.5422e-5 | 0.61% | 2.9566e-4 | 0.66% |
|
||||
|
||||
### n = 200
|
||||
|
||||
| name | % | ratio | improved | rme | baseline | rme |
|
||||
| :----- | ---: | :----- | :-------- | ----: | :-------- | ----: |
|
||||
| delete | 20% | 0.1524 | 7.2866e-5 | 0.75% | 4.7797e-4 | 0.80% |
|
||||
| insert | 20% | 0.1226 | 6.1561e-5 | 0.58% | 5.0198e-4 | 0.66% |
|
||||
| delete | 40% | 0.1118 | 1.5674e-4 | 0.67% | 1.4020e-3 | 0.58% |
|
||||
| insert | 40% | 0.0894 | 1.2906e-4 | 0.64% | 1.4435e-3 | 0.53% |
|
||||
| delete | 80% | 0.0796 | 3.0119e-4 | 0.58% | 3.7852e-3 | 0.52% |
|
||||
| insert | 80% | 0.0734 | 2.4713e-4 | 0.67% | 3.3653e-3 | 0.54% |
|
||||
| change | 10% | 0.1572 | 7.2965e-5 | 0.48% | 4.6426e-4 | 0.73% |
|
||||
| change | 20% | 0.1446 | 7.0056e-5 | 0.69% | 4.8456e-4 | 0.53% |
|
||||
| change | 50% | 0.0764 | 6.5638e-4 | 0.67% | 8.5946e-3 | 0.70% |
|
||||
| change | 100% | 0.0525 | 1.1160e-3 | 0.51% | 2.1249e-2 | 0.63% |
|
||||
|
||||
### n = 2000
|
||||
|
||||
| name | % | ratio | improved | rme | baseline | rme |
|
||||
| :----- | ---: | :----- | :-------- | ----: | :-------- | ----: |
|
||||
| delete | 20% | 0.0669 | 3.4073e-3 | 0.54% | 5.0922e-2 | 0.54% |
|
||||
| insert | 20% | 0.0588 | 2.8273e-3 | 0.51% | 4.8111e-2 | 0.46% |
|
||||
| delete | 40% | 0.0517 | 1.1048e-2 | 0.52% | 2.1367e-1 | 0.47% |
|
||||
| insert | 40% | 0.0460 | 9.1469e-3 | 0.37% | 1.9878e-1 | 0.26% |
|
||||
| delete | 80% | 0.0563 | 2.7426e-2 | 0.56% | 4.8674e-1 | 0.36% |
|
||||
| insert | 80% | 0.0506 | 2.2208e-2 | 0.35% | 4.3888e-1 | 0.47% |
|
||||
| change | 10% | 0.0716 | 3.1267e-3 | 1.21% | 4.3652e-2 | 0.56% |
|
||||
| change | 20% | 0.0621 | 3.0197e-3 | 0.72% | 4.8652e-2 | 0.45% |
|
||||
| change | 50% | 0.0083 | 5.4250e-2 | 0.62% | 6.5595e+0 | 3.60% |
|
||||
| change | 100% | 0.0493 | 1.0534e-1 | 0.71% | 2.1362e+0 | 0.21% |
|
171
node_modules/jest-matcher-utils/node_modules/diff-sequences/perf/index.js
generated
vendored
Normal file
171
node_modules/jest-matcher-utils/node_modules/diff-sequences/perf/index.js
generated
vendored
Normal file
|
@ -0,0 +1,171 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Make sure to run node with --expose-gc option!
|
||||
|
||||
// The times are reliable if about 1% relative mean error if you run it:
|
||||
|
||||
// * immediately after restart
|
||||
// * with 100% battery charge
|
||||
// * not connected to network
|
||||
|
||||
/* eslint import/no-extraneous-dependencies: "off" */
|
||||
|
||||
const Benchmark = require('benchmark');
|
||||
|
||||
const diffBaseline = require('diff').diffLines;
|
||||
const diffImproved = require('../build/index.js').default;
|
||||
|
||||
const testBaseline = (a, b) => {
|
||||
const benchmark = new Benchmark({
|
||||
fn() {
|
||||
diffBaseline(a, b);
|
||||
},
|
||||
name: 'baseline',
|
||||
onCycle() {
|
||||
global.gc(); // after run cycle
|
||||
},
|
||||
onStart() {
|
||||
global.gc(); // when benchmark starts
|
||||
},
|
||||
});
|
||||
|
||||
benchmark.run({async: false});
|
||||
|
||||
return benchmark.stats;
|
||||
};
|
||||
|
||||
const testImproved = function (a, b) {
|
||||
const benchmark = new Benchmark({
|
||||
fn() {
|
||||
// Split string arguments to make fair comparison with baseline.
|
||||
const aItems = a.split('\n');
|
||||
const bItems = b.split('\n');
|
||||
|
||||
const isCommon = (aIndex, bIndex) => aItems[aIndex] === bItems[bIndex];
|
||||
|
||||
// This callback obviously does less than baseline `diff` package,
|
||||
// but avoiding double work and memory churn is the goal.
|
||||
// For example, `jest-diff` has had to split strings that `diff` joins.
|
||||
const foundSubsequence = () => {};
|
||||
|
||||
diffImproved(aItems.length, bItems.length, isCommon, foundSubsequence);
|
||||
},
|
||||
name: 'improved',
|
||||
onCycle() {
|
||||
global.gc(); // after run cycle
|
||||
},
|
||||
onStart() {
|
||||
global.gc(); // when benchmark starts
|
||||
},
|
||||
});
|
||||
|
||||
benchmark.run({async: false});
|
||||
|
||||
return benchmark.stats;
|
||||
};
|
||||
|
||||
const writeHeading2 = () => {
|
||||
console.log('## Benchmark time for `diff-sequences` versus `diff`\n');
|
||||
console.log('A ratio less than 1.0 means `diff-sequences` is faster.');
|
||||
};
|
||||
|
||||
const writeHeading3 = n => {
|
||||
console.log(`\n### n = ${n}\n`);
|
||||
console.log('| name | % | ratio | improved | rme | baseline | rme |');
|
||||
console.log('| :--- | ---: | :--- | :--- | ---: | :--- | ---: |');
|
||||
};
|
||||
|
||||
const writeRow = (name, percent, statsImproved, statsBaseline) => {
|
||||
const {mean: meanImproved, rme: rmeImproved} = statsImproved;
|
||||
const {mean: meanBaseline, rme: rmeBaseline} = statsBaseline;
|
||||
const ratio = meanImproved / meanBaseline;
|
||||
|
||||
console.log(
|
||||
`| ${name} | ${percent}% | ${ratio.toFixed(
|
||||
4,
|
||||
)} | ${meanImproved.toExponential(4)} | ${rmeImproved.toFixed(
|
||||
2,
|
||||
)}% | ${meanBaseline.toExponential(4)} | ${rmeBaseline.toFixed(2)}% |`,
|
||||
);
|
||||
};
|
||||
|
||||
const testDeleteInsert = (tenths, more, less) => {
|
||||
// For improved `diff-sequences` package, delete is often slower than insert.
|
||||
const statsDeleteImproved = testImproved(more, less);
|
||||
const statsDeleteBaseline = testBaseline(more, less);
|
||||
writeRow('delete', tenths * 10, statsDeleteImproved, statsDeleteBaseline);
|
||||
|
||||
// For baseline `diff` package, many insertions is serious perf problem.
|
||||
// However, the benchmark package cannot accurately measure for large n.
|
||||
const statsInsertBaseline = testBaseline(less, more);
|
||||
const statsInsertImproved = testImproved(less, more);
|
||||
writeRow('insert', tenths * 10, statsInsertImproved, statsInsertBaseline);
|
||||
};
|
||||
|
||||
const testChange = (tenths, expected, received) => {
|
||||
const statsImproved = testImproved(expected, received);
|
||||
const statsBaseline = testBaseline(expected, received);
|
||||
writeRow('change', tenths * 10, statsImproved, statsBaseline);
|
||||
};
|
||||
|
||||
const getItems = (n, callback) => {
|
||||
const items = [];
|
||||
|
||||
for (let i = 0; i !== n; i += 1) {
|
||||
const item = callback(i);
|
||||
if (typeof item === 'string') {
|
||||
items.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
return items.join('\n');
|
||||
};
|
||||
|
||||
// Simulate change of property name which is usually not same line.
|
||||
// Expected: 0 1 2 3 4 5 6 7 8 9 and so on
|
||||
// Received: 1 2 3 4 x0 5 6 7 8 9 and so on
|
||||
const change2 = i => {
|
||||
const j = i % 10;
|
||||
return j === 4 ? `x${i - 4}` : j < 4 ? `${i + 1}` : `${i}`;
|
||||
};
|
||||
|
||||
const testLength = n => {
|
||||
const all = getItems(n, i => `${i}`);
|
||||
|
||||
writeHeading3(n);
|
||||
|
||||
[2, 4, 8].forEach(tenth => {
|
||||
testDeleteInsert(
|
||||
tenth,
|
||||
all,
|
||||
getItems(n, i => i % 10 >= tenth && `${i}`),
|
||||
);
|
||||
});
|
||||
testChange(
|
||||
1,
|
||||
all,
|
||||
getItems(n, i => (i % 10 === 0 ? `x${i}` : `${i}`)),
|
||||
);
|
||||
testChange(2, all, getItems(n, change2));
|
||||
testChange(
|
||||
5,
|
||||
all,
|
||||
getItems(n, i => (i % 2 === 0 ? `x${i}` : `${i}`)),
|
||||
);
|
||||
testChange(
|
||||
10,
|
||||
all,
|
||||
getItems(n, i => `x${i}`),
|
||||
); // simulate TDD
|
||||
};
|
||||
|
||||
writeHeading2();
|
||||
|
||||
testLength(20);
|
||||
testLength(200);
|
||||
testLength(2000);
|
21
node_modules/jest-matcher-utils/node_modules/jest-diff/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/jest-diff/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
614
node_modules/jest-matcher-utils/node_modules/jest-diff/README.md
generated
vendored
Normal file
614
node_modules/jest-matcher-utils/node_modules/jest-diff/README.md
generated
vendored
Normal file
|
@ -0,0 +1,614 @@
|
|||
# jest-diff
|
||||
|
||||
Display differences clearly so people can review changes confidently.
|
||||
|
||||
The default export serializes JavaScript **values**, compares them line-by-line, and returns a string which includes comparison lines.
|
||||
|
||||
Two named exports compare **strings** character-by-character:
|
||||
|
||||
- `diffStringsUnified` returns a string.
|
||||
- `diffStringsRaw` returns an array of `Diff` objects.
|
||||
|
||||
Three named exports compare **arrays of strings** line-by-line:
|
||||
|
||||
- `diffLinesUnified` and `diffLinesUnified2` return a string.
|
||||
- `diffLinesRaw` returns an array of `Diff` objects.
|
||||
|
||||
## Installation
|
||||
|
||||
To add this package as a dependency of a project, run either of the following commands:
|
||||
|
||||
- `npm install jest-diff`
|
||||
- `yarn add jest-diff`
|
||||
|
||||
## Usage of default export
|
||||
|
||||
Given JavaScript **values**, `diffDefault(a, b, options?)` does the following:
|
||||
|
||||
1. **serialize** the values as strings using the `pretty-format` package
|
||||
2. **compare** the strings line-by-line using the `diff-sequences` package
|
||||
3. **format** the changed or common lines using the `chalk` package
|
||||
|
||||
To use this function, write either of the following:
|
||||
|
||||
- `const diffDefault = require('jest-diff').default;` in CommonJS modules
|
||||
- `import diffDefault from 'jest-diff';` in ECMAScript modules
|
||||
|
||||
### Example of default export
|
||||
|
||||
```js
|
||||
const a = ['delete', 'common', 'changed from'];
|
||||
const b = ['common', 'changed to', 'insert'];
|
||||
|
||||
const difference = diffDefault(a, b);
|
||||
```
|
||||
|
||||
The returned **string** consists of:
|
||||
|
||||
- annotation lines: describe the two change indicators with labels, and a blank line
|
||||
- comparison lines: similar to “unified” view on GitHub, but `Expected` lines are green, `Received` lines are red, and common lines are dim (by default, see Options)
|
||||
|
||||
```diff
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
Array [
|
||||
- "delete",
|
||||
"common",
|
||||
- "changed from",
|
||||
+ "changed to",
|
||||
+ "insert",
|
||||
]
|
||||
```
|
||||
|
||||
### Edge cases of default export
|
||||
|
||||
Here are edge cases for the return value:
|
||||
|
||||
- `' Comparing two different types of values. …'` if the arguments have **different types** according to the `jest-get-type` package (instances of different classes have the same `'object'` type)
|
||||
- `'Compared values have no visual difference.'` if the arguments have either **referential identity** according to `Object.is` method or **same serialization** according to the `pretty-format` package
|
||||
- `null` if either argument is a so-called **asymmetric matcher** in Jasmine or Jest
|
||||
|
||||
## Usage of diffStringsUnified
|
||||
|
||||
Given **strings**, `diffStringsUnified(a, b, options?)` does the following:
|
||||
|
||||
1. **compare** the strings character-by-character using the `diff-sequences` package
|
||||
2. **clean up** small (often coincidental) common substrings, also known as chaff
|
||||
3. **format** the changed or common lines using the `chalk` package
|
||||
|
||||
Although the function is mainly for **multiline** strings, it compares any strings.
|
||||
|
||||
Write either of the following:
|
||||
|
||||
- `const {diffStringsUnified} = require('jest-diff');` in CommonJS modules
|
||||
- `import {diffStringsUnified} from 'jest-diff';` in ECMAScript modules
|
||||
|
||||
### Example of diffStringsUnified
|
||||
|
||||
```js
|
||||
const a = 'common\nchanged from';
|
||||
const b = 'common\nchanged to';
|
||||
|
||||
const difference = diffStringsUnified(a, b);
|
||||
```
|
||||
|
||||
The returned **string** consists of:
|
||||
|
||||
- annotation lines: describe the two change indicators with labels, and a blank line
|
||||
- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverse** foreground and background colors (that is, `from` has white-on-green and `to` has white-on-red, which the following example does not show)
|
||||
|
||||
```diff
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
common
|
||||
- changed from
|
||||
+ changed to
|
||||
```
|
||||
|
||||
### Performance of diffStringsUnified
|
||||
|
||||
To get the benefit of **changed substrings** within the comparison lines, a character-by-character comparison has a higher computational cost (in time and space) than a line-by-line comparison.
|
||||
|
||||
If the input strings can have **arbitrary length**, we recommend that the calling code set a limit, beyond which splits the strings, and then calls `diffLinesUnified` instead. For example, Jest falls back to line-by-line comparison if either string has length greater than 20K characters.
|
||||
|
||||
## Usage of diffLinesUnified
|
||||
|
||||
Given **arrays of strings**, `diffLinesUnified(aLines, bLines, options?)` does the following:
|
||||
|
||||
1. **compare** the arrays line-by-line using the `diff-sequences` package
|
||||
2. **format** the changed or common lines using the `chalk` package
|
||||
|
||||
You might call this function when strings have been split into lines and you do not need to see changed substrings within lines.
|
||||
|
||||
### Example of diffLinesUnified
|
||||
|
||||
```js
|
||||
const aLines = ['delete', 'common', 'changed from'];
|
||||
const bLines = ['common', 'changed to', 'insert'];
|
||||
|
||||
const difference = diffLinesUnified(aLines, bLines);
|
||||
```
|
||||
|
||||
```diff
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
- delete
|
||||
common
|
||||
- changed from
|
||||
+ changed to
|
||||
+ insert
|
||||
```
|
||||
|
||||
### Edge cases of diffLinesUnified or diffStringsUnified
|
||||
|
||||
Here are edge cases for arguments and return values:
|
||||
|
||||
- both `a` and `b` are empty strings: no comparison lines
|
||||
- only `a` is empty string: all comparison lines have `bColor` and `bIndicator` (see Options)
|
||||
- only `b` is empty string: all comparison lines have `aColor` and `aIndicator` (see Options)
|
||||
- `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonIndicator` (see Options)
|
||||
|
||||
## Usage of diffLinesUnified2
|
||||
|
||||
Given two **pairs** of arrays of strings, `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options?)` does the following:
|
||||
|
||||
1. **compare** the pair of `Compare` arrays line-by-line using the `diff-sequences` package
|
||||
2. **format** the corresponding lines in the pair of `Display` arrays using the `chalk` package
|
||||
|
||||
Jest calls this function to consider lines as common instead of changed if the only difference is indentation.
|
||||
|
||||
You might call this function for case insensitive or Unicode equivalence comparison of lines.
|
||||
|
||||
### Example of diffLinesUnified2
|
||||
|
||||
```js
|
||||
import format from 'pretty-format';
|
||||
|
||||
const a = {
|
||||
text: 'Ignore indentation in serialized object',
|
||||
time: '2019-09-19T12:34:56.000Z',
|
||||
type: 'CREATE_ITEM',
|
||||
};
|
||||
const b = {
|
||||
payload: {
|
||||
text: 'Ignore indentation in serialized object',
|
||||
time: '2019-09-19T12:34:56.000Z',
|
||||
},
|
||||
type: 'CREATE_ITEM',
|
||||
};
|
||||
|
||||
const difference = diffLinesUnified2(
|
||||
// serialize with indentation to display lines
|
||||
format(a).split('\n'),
|
||||
format(b).split('\n'),
|
||||
// serialize without indentation to compare lines
|
||||
format(a, {indent: 0}).split('\n'),
|
||||
format(b, {indent: 0}).split('\n'),
|
||||
);
|
||||
```
|
||||
|
||||
The `text` and `time` properties are common, because their only difference is indentation:
|
||||
|
||||
```diff
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
Object {
|
||||
+ payload: Object {
|
||||
text: 'Ignore indentation in serialized object',
|
||||
time: '2019-09-19T12:34:56.000Z',
|
||||
+ },
|
||||
type: 'CREATE_ITEM',
|
||||
}
|
||||
```
|
||||
|
||||
The preceding example illustrates why (at least for indentation) it seems more intuitive that the function returns the common line from the `bLinesDisplay` array instead of from the `aLinesDisplay` array.
|
||||
|
||||
## Usage of diffStringsRaw
|
||||
|
||||
Given **strings** and a boolean option, `diffStringsRaw(a, b, cleanup)` does the following:
|
||||
|
||||
1. **compare** the strings character-by-character using the `diff-sequences` package
|
||||
2. optionally **clean up** small (often coincidental) common substrings, also known as chaff
|
||||
|
||||
Because `diffStringsRaw` returns the difference as **data** instead of a string, you can format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console).
|
||||
|
||||
The returned **array** describes substrings as instances of the `Diff` class, which calling code can access like array tuples:
|
||||
|
||||
The value at index `0` is one of the following:
|
||||
|
||||
| value | named export | description |
|
||||
| ----: | :------------ | :-------------------- |
|
||||
| `0` | `DIFF_EQUAL` | in `a` and in `b` |
|
||||
| `-1` | `DIFF_DELETE` | in `a` but not in `b` |
|
||||
| `1` | `DIFF_INSERT` | in `b` but not in `a` |
|
||||
|
||||
The value at index `1` is a substring of `a` or `b` or both.
|
||||
|
||||
### Example of diffStringsRaw with cleanup
|
||||
|
||||
```js
|
||||
const diffs = diffStringsRaw('changed from', 'changed to', true);
|
||||
```
|
||||
|
||||
| `i` | `diffs[i][0]` | `diffs[i][1]` |
|
||||
| --: | ------------: | :------------ |
|
||||
| `0` | `0` | `'changed '` |
|
||||
| `1` | `-1` | `'from'` |
|
||||
| `2` | `1` | `'to'` |
|
||||
|
||||
### Example of diffStringsRaw without cleanup
|
||||
|
||||
```js
|
||||
const diffs = diffStringsRaw('changed from', 'changed to', false);
|
||||
```
|
||||
|
||||
| `i` | `diffs[i][0]` | `diffs[i][1]` |
|
||||
| --: | ------------: | :------------ |
|
||||
| `0` | `0` | `'changed '` |
|
||||
| `1` | `-1` | `'fr'` |
|
||||
| `2` | `1` | `'t'` |
|
||||
| `3` | `0` | `'o'` |
|
||||
| `4` | `-1` | `'m'` |
|
||||
|
||||
### Advanced import for diffStringsRaw
|
||||
|
||||
Here are all the named imports that you might need for the `diffStringsRaw` function:
|
||||
|
||||
- `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} = require('jest-diff');` in CommonJS modules
|
||||
- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in ECMAScript modules
|
||||
|
||||
To write a **formatting** function, you might need the named constants (and `Diff` in TypeScript annotations).
|
||||
|
||||
If you write an application-specific **cleanup** algorithm, then you might need to call the `Diff` constructor:
|
||||
|
||||
```js
|
||||
const diffCommon = new Diff(DIFF_EQUAL, 'changed ');
|
||||
const diffDelete = new Diff(DIFF_DELETE, 'from');
|
||||
const diffInsert = new Diff(DIFF_INSERT, 'to');
|
||||
```
|
||||
|
||||
## Usage of diffLinesRaw
|
||||
|
||||
Given **arrays of strings**, `diffLinesRaw(aLines, bLines)` does the following:
|
||||
|
||||
- **compare** the arrays line-by-line using the `diff-sequences` package
|
||||
|
||||
Because `diffLinesRaw` returns the difference as **data** instead of a string, you can format it as your application requires.
|
||||
|
||||
### Example of diffLinesRaw
|
||||
|
||||
```js
|
||||
const aLines = ['delete', 'common', 'changed from'];
|
||||
const bLines = ['common', 'changed to', 'insert'];
|
||||
|
||||
const diffs = diffLinesRaw(aLines, bLines);
|
||||
```
|
||||
|
||||
| `i` | `diffs[i][0]` | `diffs[i][1]` |
|
||||
| --: | ------------: | :--------------- |
|
||||
| `0` | `-1` | `'delete'` |
|
||||
| `1` | `0` | `'common'` |
|
||||
| `2` | `-1` | `'changed from'` |
|
||||
| `3` | `1` | `'changed to'` |
|
||||
| `4` | `1` | `'insert'` |
|
||||
|
||||
### Edge case of diffLinesRaw
|
||||
|
||||
If you call `string.split('\n')` for an empty string:
|
||||
|
||||
- the result is `['']` an array which contains an empty string
|
||||
- instead of `[]` an empty array
|
||||
|
||||
Depending of your application, you might call `diffLinesRaw` with either array.
|
||||
|
||||
### Example of split method
|
||||
|
||||
```js
|
||||
import {diffLinesRaw} from 'jest-diff';
|
||||
|
||||
const a = 'non-empty string';
|
||||
const b = '';
|
||||
|
||||
const diffs = diffLinesRaw(a.split('\n'), b.split('\n'));
|
||||
```
|
||||
|
||||
| `i` | `diffs[i][0]` | `diffs[i][1]` |
|
||||
| --: | ------------: | :------------------- |
|
||||
| `0` | `-1` | `'non-empty string'` |
|
||||
| `1` | `1` | `''` |
|
||||
|
||||
Which you might format as follows:
|
||||
|
||||
```diff
|
||||
- Expected - 1
|
||||
+ Received + 1
|
||||
|
||||
- non-empty string
|
||||
+
|
||||
```
|
||||
|
||||
### Example of splitLines0 function
|
||||
|
||||
For edge case behavior like the `diffLinesUnified` function, you might define a `splitLines0` function, which given an empty string, returns `[]` an empty array:
|
||||
|
||||
```js
|
||||
export const splitLines0 = string =>
|
||||
string.length === 0 ? [] : string.split('\n');
|
||||
```
|
||||
|
||||
```js
|
||||
import {diffLinesRaw} from 'jest-diff';
|
||||
|
||||
const a = '';
|
||||
const b = 'line 1\nline 2\nline 3';
|
||||
|
||||
const diffs = diffLinesRaw(a.split('\n'), b.split('\n'));
|
||||
```
|
||||
|
||||
| `i` | `diffs[i][0]` | `diffs[i][1]` |
|
||||
| --: | ------------: | :------------ |
|
||||
| `0` | `1` | `'line 1'` |
|
||||
| `1` | `1` | `'line 2'` |
|
||||
| `2` | `1` | `'line 3'` |
|
||||
|
||||
Which you might format as follows:
|
||||
|
||||
```diff
|
||||
- Expected - 0
|
||||
+ Received + 3
|
||||
|
||||
+ line 1
|
||||
+ line 2
|
||||
+ line 3
|
||||
```
|
||||
|
||||
In contrast to the `diffLinesRaw` function, the `diffLinesUnified` and `diffLinesUnified2` functions **automatically** convert array arguments computed by string `split` method, so callers do **not** need a `splitLine0` function.
|
||||
|
||||
## Options
|
||||
|
||||
The default options are for the report when an assertion fails from the `expect` package used by Jest.
|
||||
|
||||
For other applications, you can provide an options object as a third argument:
|
||||
|
||||
- `diffDefault(a, b, options)`
|
||||
- `diffStringsUnified(a, b, options)`
|
||||
- `diffLinesUnified(aLines, bLines, options)`
|
||||
- `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options)`
|
||||
|
||||
### Properties of options object
|
||||
|
||||
| name | default |
|
||||
| :-------------------------------- | :----------------- |
|
||||
| `aAnnotation` | `'Expected'` |
|
||||
| `aColor` | `chalk.green` |
|
||||
| `aIndicator` | `'-'` |
|
||||
| `bAnnotation` | `'Received'` |
|
||||
| `bColor` | `chalk.red` |
|
||||
| `bIndicator` | `'+'` |
|
||||
| `changeColor` | `chalk.inverse` |
|
||||
| `changeLineTrailingSpaceColor` | `string => string` |
|
||||
| `commonColor` | `chalk.dim` |
|
||||
| `commonIndicator` | `' '` |
|
||||
| `commonLineTrailingSpaceColor` | `string => string` |
|
||||
| `contextLines` | `5` |
|
||||
| `emptyFirstOrLastLinePlaceholder` | `''` |
|
||||
| `expand` | `true` |
|
||||
| `includeChangeCounts` | `false` |
|
||||
| `omitAnnotationLines` | `false` |
|
||||
| `patchColor` | `chalk.yellow` |
|
||||
|
||||
For more information about the options, see the following examples.
|
||||
|
||||
### Example of options for labels
|
||||
|
||||
If the application is code modification, you might replace the labels:
|
||||
|
||||
```js
|
||||
const options = {
|
||||
aAnnotation: 'Original',
|
||||
bAnnotation: 'Modified',
|
||||
};
|
||||
```
|
||||
|
||||
```diff
|
||||
- Original
|
||||
+ Modified
|
||||
|
||||
common
|
||||
- changed from
|
||||
+ changed to
|
||||
```
|
||||
|
||||
The `jest-diff` package does not assume that the 2 labels have equal length.
|
||||
|
||||
### Example of options for colors of changed lines
|
||||
|
||||
For consistency with most diff tools, you might exchange the colors:
|
||||
|
||||
```ts
|
||||
import chalk = require('chalk');
|
||||
|
||||
const options = {
|
||||
aColor: chalk.red,
|
||||
bColor: chalk.green,
|
||||
};
|
||||
```
|
||||
|
||||
### Example of option for color of changed substrings
|
||||
|
||||
Although the default inverse of foreground and background colors is hard to beat for changed substrings **within lines**, especially because it highlights spaces, if you want bold font weight on yellow background color:
|
||||
|
||||
```ts
|
||||
import chalk = require('chalk');
|
||||
|
||||
const options = {
|
||||
changeColor: chalk.bold.bgYellowBright,
|
||||
};
|
||||
```
|
||||
|
||||
### Example of option to format trailing spaces
|
||||
|
||||
Because the default export does not display substring differences within lines, formatting can help you see when lines differ by the presence or absence of trailing spaces found by `/\s+$/` regular expression.
|
||||
|
||||
- If change lines have a background color, then you can see trailing spaces.
|
||||
- If common lines have default dim color, then you cannot see trailing spaces. You might want yellowish background color to see them.
|
||||
|
||||
```js
|
||||
const options = {
|
||||
aColor: chalk.rgb(128, 0, 128).bgRgb(255, 215, 255), // magenta
|
||||
bColor: chalk.rgb(0, 95, 0).bgRgb(215, 255, 215), // green
|
||||
commonLineTrailingSpaceColor: chalk.bgYellow,
|
||||
};
|
||||
```
|
||||
|
||||
The value of a Color option is a function, which given a string, returns a string.
|
||||
|
||||
If you want to replace trailing spaces with middle dot characters:
|
||||
|
||||
```js
|
||||
const replaceSpacesWithMiddleDot = string => '·'.repeat(string.length);
|
||||
|
||||
const options = {
|
||||
changeLineTrailingSpaceColor: replaceSpacesWithMiddleDot,
|
||||
commonLineTrailingSpaceColor: replaceSpacesWithMiddleDot,
|
||||
};
|
||||
```
|
||||
|
||||
If you need the TypeScript type of a Color option:
|
||||
|
||||
```ts
|
||||
import {DiffOptionsColor} from 'jest-diff';
|
||||
```
|
||||
|
||||
### Example of options for no colors
|
||||
|
||||
To store the difference in a file without escape codes for colors, provide an identity function:
|
||||
|
||||
```js
|
||||
const noColor = string => string;
|
||||
|
||||
const options = {
|
||||
aColor: noColor,
|
||||
bColor: noColor,
|
||||
changeColor: noColor,
|
||||
commonColor: noColor,
|
||||
patchColor: noColor,
|
||||
};
|
||||
```
|
||||
|
||||
### Example of options for indicators
|
||||
|
||||
For consistency with the `diff` command, you might replace the indicators:
|
||||
|
||||
```js
|
||||
const options = {
|
||||
aIndicator: '<',
|
||||
bIndicator: '>',
|
||||
};
|
||||
```
|
||||
|
||||
The `jest-diff` package assumes (but does not enforce) that the 3 indicators have equal length.
|
||||
|
||||
### Example of options to limit common lines
|
||||
|
||||
By default, the output includes all common lines.
|
||||
|
||||
To emphasize the changes, you might limit the number of common “context” lines:
|
||||
|
||||
```js
|
||||
const options = {
|
||||
contextLines: 1,
|
||||
expand: false,
|
||||
};
|
||||
```
|
||||
|
||||
A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines.
|
||||
|
||||
### Example of option for color of patch marks
|
||||
|
||||
If you want patch marks to have the same dim color as common lines:
|
||||
|
||||
```ts
|
||||
import chalk = require('chalk');
|
||||
|
||||
const options = {
|
||||
expand: false,
|
||||
patchColor: chalk.dim,
|
||||
};
|
||||
```
|
||||
|
||||
### Example of option to include change counts
|
||||
|
||||
To display the number of changed lines at the right of annotation lines:
|
||||
|
||||
```js
|
||||
const a = ['common', 'changed from'];
|
||||
const b = ['common', 'changed to', 'insert'];
|
||||
|
||||
const options = {
|
||||
includeChangeCounts: true,
|
||||
};
|
||||
|
||||
const difference = diffDefault(a, b, options);
|
||||
```
|
||||
|
||||
```diff
|
||||
- Expected - 1
|
||||
+ Received + 2
|
||||
|
||||
Array [
|
||||
"common",
|
||||
- "changed from",
|
||||
+ "changed to",
|
||||
+ "insert",
|
||||
]
|
||||
```
|
||||
|
||||
### Example of option to omit annotation lines
|
||||
|
||||
To display only the comparison lines:
|
||||
|
||||
```js
|
||||
const a = 'common\nchanged from';
|
||||
const b = 'common\nchanged to';
|
||||
|
||||
const options = {
|
||||
omitAnnotationLines: true,
|
||||
};
|
||||
|
||||
const difference = diffStringsUnified(a, b, options);
|
||||
```
|
||||
|
||||
```diff
|
||||
common
|
||||
- changed from
|
||||
+ changed to
|
||||
```
|
||||
|
||||
### Example of option for empty first or last lines
|
||||
|
||||
If the **first** or **last** comparison line is **empty**, because the content is empty and the indicator is a space, you might not notice it.
|
||||
|
||||
The replacement option is a string whose default value is `''` empty string.
|
||||
|
||||
Because Jest trims the report when a matcher fails, it deletes an empty last line.
|
||||
|
||||
Therefore, Jest uses as placeholder the downwards arrow with corner leftwards:
|
||||
|
||||
```js
|
||||
const options = {
|
||||
emptyFirstOrLastLinePlaceholder: '↵', // U+21B5
|
||||
};
|
||||
```
|
||||
|
||||
If a content line is empty, then the corresponding comparison line is automatically trimmed to remove the margin space (represented as a middle dot below) for the default indicators:
|
||||
|
||||
| Indicator | untrimmed | trimmed |
|
||||
| ----------------: | :-------- | :------ |
|
||||
| `aIndicator` | `'-·'` | `'-'` |
|
||||
| `bIndicator` | `'+·'` | `'+'` |
|
||||
| `commonIndicator` | `' ·'` | `''` |
|
57
node_modules/jest-matcher-utils/node_modules/jest-diff/build/cleanupSemantic.d.ts
generated
vendored
Normal file
57
node_modules/jest-matcher-utils/node_modules/jest-diff/build/cleanupSemantic.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
/**
|
||||
* Diff Match and Patch
|
||||
* Copyright 2018 The diff-match-patch Authors.
|
||||
* https://github.com/google/diff-match-patch
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/**
|
||||
* @fileoverview Computes the difference between two texts to create a patch.
|
||||
* Applies the patch onto another text, allowing for errors.
|
||||
* @author fraser@google.com (Neil Fraser)
|
||||
*/
|
||||
/**
|
||||
* CHANGES by pedrottimark to diff_match_patch_uncompressed.ts file:
|
||||
*
|
||||
* 1. Delete anything not needed to use diff_cleanupSemantic method
|
||||
* 2. Convert from prototype properties to var declarations
|
||||
* 3. Convert Diff to class from constructor and prototype
|
||||
* 4. Add type annotations for arguments and return values
|
||||
* 5. Add exports
|
||||
*/
|
||||
/**
|
||||
* The data structure representing a diff is an array of tuples:
|
||||
* [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
|
||||
* which means: delete 'Hello', add 'Goodbye' and keep ' world.'
|
||||
*/
|
||||
declare var DIFF_DELETE: number;
|
||||
declare var DIFF_INSERT: number;
|
||||
declare var DIFF_EQUAL: number;
|
||||
/**
|
||||
* Class representing one diff tuple.
|
||||
* Attempts to look like a two-element array (which is what this used to be).
|
||||
* @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.
|
||||
* @param {string} text Text to be deleted, inserted, or retained.
|
||||
* @constructor
|
||||
*/
|
||||
declare class Diff {
|
||||
0: number;
|
||||
1: string;
|
||||
constructor(op: number, text: string);
|
||||
}
|
||||
/**
|
||||
* Reduce the number of edits by eliminating semantically trivial equalities.
|
||||
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
|
||||
*/
|
||||
declare var diff_cleanupSemantic: (diffs: Array<Diff>) => void;
|
||||
export { Diff, DIFF_EQUAL, DIFF_DELETE, DIFF_INSERT, diff_cleanupSemantic as cleanupSemantic, };
|
651
node_modules/jest-matcher-utils/node_modules/jest-diff/build/cleanupSemantic.js
generated
vendored
Normal file
651
node_modules/jest-matcher-utils/node_modules/jest-diff/build/cleanupSemantic.js
generated
vendored
Normal file
|
@ -0,0 +1,651 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.cleanupSemantic = exports.DIFF_INSERT = exports.DIFF_DELETE = exports.DIFF_EQUAL = exports.Diff = void 0;
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Diff Match and Patch
|
||||
* Copyright 2018 The diff-match-patch Authors.
|
||||
* https://github.com/google/diff-match-patch
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview Computes the difference between two texts to create a patch.
|
||||
* Applies the patch onto another text, allowing for errors.
|
||||
* @author fraser@google.com (Neil Fraser)
|
||||
*/
|
||||
|
||||
/**
|
||||
* CHANGES by pedrottimark to diff_match_patch_uncompressed.ts file:
|
||||
*
|
||||
* 1. Delete anything not needed to use diff_cleanupSemantic method
|
||||
* 2. Convert from prototype properties to var declarations
|
||||
* 3. Convert Diff to class from constructor and prototype
|
||||
* 4. Add type annotations for arguments and return values
|
||||
* 5. Add exports
|
||||
*/
|
||||
|
||||
/**
|
||||
* The data structure representing a diff is an array of tuples:
|
||||
* [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
|
||||
* which means: delete 'Hello', add 'Goodbye' and keep ' world.'
|
||||
*/
|
||||
var DIFF_DELETE = -1;
|
||||
exports.DIFF_DELETE = DIFF_DELETE;
|
||||
var DIFF_INSERT = 1;
|
||||
exports.DIFF_INSERT = DIFF_INSERT;
|
||||
var DIFF_EQUAL = 0;
|
||||
/**
|
||||
* Class representing one diff tuple.
|
||||
* Attempts to look like a two-element array (which is what this used to be).
|
||||
* @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.
|
||||
* @param {string} text Text to be deleted, inserted, or retained.
|
||||
* @constructor
|
||||
*/
|
||||
|
||||
exports.DIFF_EQUAL = DIFF_EQUAL;
|
||||
|
||||
class Diff {
|
||||
constructor(op, text) {
|
||||
_defineProperty(this, 0, void 0);
|
||||
|
||||
_defineProperty(this, 1, void 0);
|
||||
|
||||
this[0] = op;
|
||||
this[1] = text;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine the common prefix of two strings.
|
||||
* @param {string} text1 First string.
|
||||
* @param {string} text2 Second string.
|
||||
* @return {number} The number of characters common to the start of each
|
||||
* string.
|
||||
*/
|
||||
|
||||
exports.Diff = Diff;
|
||||
|
||||
var diff_commonPrefix = function (text1, text2) {
|
||||
// Quick check for common null cases.
|
||||
if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
|
||||
return 0;
|
||||
} // Binary search.
|
||||
// Performance analysis: https://neil.fraser.name/news/2007/10/09/
|
||||
|
||||
var pointermin = 0;
|
||||
var pointermax = Math.min(text1.length, text2.length);
|
||||
var pointermid = pointermax;
|
||||
var pointerstart = 0;
|
||||
|
||||
while (pointermin < pointermid) {
|
||||
if (
|
||||
text1.substring(pointerstart, pointermid) ==
|
||||
text2.substring(pointerstart, pointermid)
|
||||
) {
|
||||
pointermin = pointermid;
|
||||
pointerstart = pointermin;
|
||||
} else {
|
||||
pointermax = pointermid;
|
||||
}
|
||||
|
||||
pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
|
||||
}
|
||||
|
||||
return pointermid;
|
||||
};
|
||||
/**
|
||||
* Determine the common suffix of two strings.
|
||||
* @param {string} text1 First string.
|
||||
* @param {string} text2 Second string.
|
||||
* @return {number} The number of characters common to the end of each string.
|
||||
*/
|
||||
|
||||
var diff_commonSuffix = function (text1, text2) {
|
||||
// Quick check for common null cases.
|
||||
if (
|
||||
!text1 ||
|
||||
!text2 ||
|
||||
text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)
|
||||
) {
|
||||
return 0;
|
||||
} // Binary search.
|
||||
// Performance analysis: https://neil.fraser.name/news/2007/10/09/
|
||||
|
||||
var pointermin = 0;
|
||||
var pointermax = Math.min(text1.length, text2.length);
|
||||
var pointermid = pointermax;
|
||||
var pointerend = 0;
|
||||
|
||||
while (pointermin < pointermid) {
|
||||
if (
|
||||
text1.substring(text1.length - pointermid, text1.length - pointerend) ==
|
||||
text2.substring(text2.length - pointermid, text2.length - pointerend)
|
||||
) {
|
||||
pointermin = pointermid;
|
||||
pointerend = pointermin;
|
||||
} else {
|
||||
pointermax = pointermid;
|
||||
}
|
||||
|
||||
pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
|
||||
}
|
||||
|
||||
return pointermid;
|
||||
};
|
||||
/**
|
||||
* Determine if the suffix of one string is the prefix of another.
|
||||
* @param {string} text1 First string.
|
||||
* @param {string} text2 Second string.
|
||||
* @return {number} The number of characters common to the end of the first
|
||||
* string and the start of the second string.
|
||||
* @private
|
||||
*/
|
||||
|
||||
var diff_commonOverlap_ = function (text1, text2) {
|
||||
// Cache the text lengths to prevent multiple calls.
|
||||
var text1_length = text1.length;
|
||||
var text2_length = text2.length; // Eliminate the null case.
|
||||
|
||||
if (text1_length == 0 || text2_length == 0) {
|
||||
return 0;
|
||||
} // Truncate the longer string.
|
||||
|
||||
if (text1_length > text2_length) {
|
||||
text1 = text1.substring(text1_length - text2_length);
|
||||
} else if (text1_length < text2_length) {
|
||||
text2 = text2.substring(0, text1_length);
|
||||
}
|
||||
|
||||
var text_length = Math.min(text1_length, text2_length); // Quick check for the worst case.
|
||||
|
||||
if (text1 == text2) {
|
||||
return text_length;
|
||||
} // Start by looking for a single character match
|
||||
// and increase length until no match is found.
|
||||
// Performance analysis: https://neil.fraser.name/news/2010/11/04/
|
||||
|
||||
var best = 0;
|
||||
var length = 1;
|
||||
|
||||
while (true) {
|
||||
var pattern = text1.substring(text_length - length);
|
||||
var found = text2.indexOf(pattern);
|
||||
|
||||
if (found == -1) {
|
||||
return best;
|
||||
}
|
||||
|
||||
length += found;
|
||||
|
||||
if (
|
||||
found == 0 ||
|
||||
text1.substring(text_length - length) == text2.substring(0, length)
|
||||
) {
|
||||
best = length;
|
||||
length++;
|
||||
}
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Reduce the number of edits by eliminating semantically trivial equalities.
|
||||
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
|
||||
*/
|
||||
|
||||
var diff_cleanupSemantic = function (diffs) {
|
||||
var changes = false;
|
||||
var equalities = []; // Stack of indices where equalities are found.
|
||||
|
||||
var equalitiesLength = 0; // Keeping our own length var is faster in JS.
|
||||
|
||||
/** @type {?string} */
|
||||
|
||||
var lastEquality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1]
|
||||
|
||||
var pointer = 0; // Index of current position.
|
||||
// Number of characters that changed prior to the equality.
|
||||
|
||||
var length_insertions1 = 0;
|
||||
var length_deletions1 = 0; // Number of characters that changed after the equality.
|
||||
|
||||
var length_insertions2 = 0;
|
||||
var length_deletions2 = 0;
|
||||
|
||||
while (pointer < diffs.length) {
|
||||
if (diffs[pointer][0] == DIFF_EQUAL) {
|
||||
// Equality found.
|
||||
equalities[equalitiesLength++] = pointer;
|
||||
length_insertions1 = length_insertions2;
|
||||
length_deletions1 = length_deletions2;
|
||||
length_insertions2 = 0;
|
||||
length_deletions2 = 0;
|
||||
lastEquality = diffs[pointer][1];
|
||||
} else {
|
||||
// An insertion or deletion.
|
||||
if (diffs[pointer][0] == DIFF_INSERT) {
|
||||
length_insertions2 += diffs[pointer][1].length;
|
||||
} else {
|
||||
length_deletions2 += diffs[pointer][1].length;
|
||||
} // Eliminate an equality that is smaller or equal to the edits on both
|
||||
// sides of it.
|
||||
|
||||
if (
|
||||
lastEquality &&
|
||||
lastEquality.length <=
|
||||
Math.max(length_insertions1, length_deletions1) &&
|
||||
lastEquality.length <= Math.max(length_insertions2, length_deletions2)
|
||||
) {
|
||||
// Duplicate record.
|
||||
diffs.splice(
|
||||
equalities[equalitiesLength - 1],
|
||||
0,
|
||||
new Diff(DIFF_DELETE, lastEquality)
|
||||
); // Change second copy to insert.
|
||||
|
||||
diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; // Throw away the equality we just deleted.
|
||||
|
||||
equalitiesLength--; // Throw away the previous equality (it needs to be reevaluated).
|
||||
|
||||
equalitiesLength--;
|
||||
pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
|
||||
length_insertions1 = 0; // Reset the counters.
|
||||
|
||||
length_deletions1 = 0;
|
||||
length_insertions2 = 0;
|
||||
length_deletions2 = 0;
|
||||
lastEquality = null;
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
pointer++;
|
||||
} // Normalize the diff.
|
||||
|
||||
if (changes) {
|
||||
diff_cleanupMerge(diffs);
|
||||
}
|
||||
|
||||
diff_cleanupSemanticLossless(diffs); // Find any overlaps between deletions and insertions.
|
||||
// e.g: <del>abcxxx</del><ins>xxxdef</ins>
|
||||
// -> <del>abc</del>xxx<ins>def</ins>
|
||||
// e.g: <del>xxxabc</del><ins>defxxx</ins>
|
||||
// -> <ins>def</ins>xxx<del>abc</del>
|
||||
// Only extract an overlap if it is as big as the edit ahead or behind it.
|
||||
|
||||
pointer = 1;
|
||||
|
||||
while (pointer < diffs.length) {
|
||||
if (
|
||||
diffs[pointer - 1][0] == DIFF_DELETE &&
|
||||
diffs[pointer][0] == DIFF_INSERT
|
||||
) {
|
||||
var deletion = diffs[pointer - 1][1];
|
||||
var insertion = diffs[pointer][1];
|
||||
var overlap_length1 = diff_commonOverlap_(deletion, insertion);
|
||||
var overlap_length2 = diff_commonOverlap_(insertion, deletion);
|
||||
|
||||
if (overlap_length1 >= overlap_length2) {
|
||||
if (
|
||||
overlap_length1 >= deletion.length / 2 ||
|
||||
overlap_length1 >= insertion.length / 2
|
||||
) {
|
||||
// Overlap found. Insert an equality and trim the surrounding edits.
|
||||
diffs.splice(
|
||||
pointer,
|
||||
0,
|
||||
new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1))
|
||||
);
|
||||
diffs[pointer - 1][1] = deletion.substring(
|
||||
0,
|
||||
deletion.length - overlap_length1
|
||||
);
|
||||
diffs[pointer + 1][1] = insertion.substring(overlap_length1);
|
||||
pointer++;
|
||||
}
|
||||
} else {
|
||||
if (
|
||||
overlap_length2 >= deletion.length / 2 ||
|
||||
overlap_length2 >= insertion.length / 2
|
||||
) {
|
||||
// Reverse overlap found.
|
||||
// Insert an equality and swap and trim the surrounding edits.
|
||||
diffs.splice(
|
||||
pointer,
|
||||
0,
|
||||
new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2))
|
||||
);
|
||||
diffs[pointer - 1][0] = DIFF_INSERT;
|
||||
diffs[pointer - 1][1] = insertion.substring(
|
||||
0,
|
||||
insertion.length - overlap_length2
|
||||
);
|
||||
diffs[pointer + 1][0] = DIFF_DELETE;
|
||||
diffs[pointer + 1][1] = deletion.substring(overlap_length2);
|
||||
pointer++;
|
||||
}
|
||||
}
|
||||
|
||||
pointer++;
|
||||
}
|
||||
|
||||
pointer++;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Look for single edits surrounded on both sides by equalities
|
||||
* which can be shifted sideways to align the edit to a word boundary.
|
||||
* e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.
|
||||
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
|
||||
*/
|
||||
|
||||
exports.cleanupSemantic = diff_cleanupSemantic;
|
||||
|
||||
var diff_cleanupSemanticLossless = function (diffs) {
|
||||
/**
|
||||
* Given two strings, compute a score representing whether the internal
|
||||
* boundary falls on logical boundaries.
|
||||
* Scores range from 6 (best) to 0 (worst).
|
||||
* Closure, but does not reference any external variables.
|
||||
* @param {string} one First string.
|
||||
* @param {string} two Second string.
|
||||
* @return {number} The score.
|
||||
* @private
|
||||
*/
|
||||
function diff_cleanupSemanticScore_(one, two) {
|
||||
if (!one || !two) {
|
||||
// Edges are the best.
|
||||
return 6;
|
||||
} // Each port of this function behaves slightly differently due to
|
||||
// subtle differences in each language's definition of things like
|
||||
// 'whitespace'. Since this function's purpose is largely cosmetic,
|
||||
// the choice has been made to use each language's native features
|
||||
// rather than force total conformity.
|
||||
|
||||
var char1 = one.charAt(one.length - 1);
|
||||
var char2 = two.charAt(0);
|
||||
var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);
|
||||
var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);
|
||||
var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);
|
||||
var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);
|
||||
var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);
|
||||
var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);
|
||||
var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);
|
||||
var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);
|
||||
|
||||
if (blankLine1 || blankLine2) {
|
||||
// Five points for blank lines.
|
||||
return 5;
|
||||
} else if (lineBreak1 || lineBreak2) {
|
||||
// Four points for line breaks.
|
||||
return 4;
|
||||
} else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {
|
||||
// Three points for end of sentences.
|
||||
return 3;
|
||||
} else if (whitespace1 || whitespace2) {
|
||||
// Two points for whitespace.
|
||||
return 2;
|
||||
} else if (nonAlphaNumeric1 || nonAlphaNumeric2) {
|
||||
// One point for non-alphanumeric.
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
var pointer = 1; // Intentionally ignore the first and last element (don't need checking).
|
||||
|
||||
while (pointer < diffs.length - 1) {
|
||||
if (
|
||||
diffs[pointer - 1][0] == DIFF_EQUAL &&
|
||||
diffs[pointer + 1][0] == DIFF_EQUAL
|
||||
) {
|
||||
// This is a single edit surrounded by equalities.
|
||||
var equality1 = diffs[pointer - 1][1];
|
||||
var edit = diffs[pointer][1];
|
||||
var equality2 = diffs[pointer + 1][1]; // First, shift the edit as far left as possible.
|
||||
|
||||
var commonOffset = diff_commonSuffix(equality1, edit);
|
||||
|
||||
if (commonOffset) {
|
||||
var commonString = edit.substring(edit.length - commonOffset);
|
||||
equality1 = equality1.substring(0, equality1.length - commonOffset);
|
||||
edit = commonString + edit.substring(0, edit.length - commonOffset);
|
||||
equality2 = commonString + equality2;
|
||||
} // Second, step character by character right, looking for the best fit.
|
||||
|
||||
var bestEquality1 = equality1;
|
||||
var bestEdit = edit;
|
||||
var bestEquality2 = equality2;
|
||||
var bestScore =
|
||||
diff_cleanupSemanticScore_(equality1, edit) +
|
||||
diff_cleanupSemanticScore_(edit, equality2);
|
||||
|
||||
while (edit.charAt(0) === equality2.charAt(0)) {
|
||||
equality1 += edit.charAt(0);
|
||||
edit = edit.substring(1) + equality2.charAt(0);
|
||||
equality2 = equality2.substring(1);
|
||||
var score =
|
||||
diff_cleanupSemanticScore_(equality1, edit) +
|
||||
diff_cleanupSemanticScore_(edit, equality2); // The >= encourages trailing rather than leading whitespace on edits.
|
||||
|
||||
if (score >= bestScore) {
|
||||
bestScore = score;
|
||||
bestEquality1 = equality1;
|
||||
bestEdit = edit;
|
||||
bestEquality2 = equality2;
|
||||
}
|
||||
}
|
||||
|
||||
if (diffs[pointer - 1][1] != bestEquality1) {
|
||||
// We have an improvement, save it back to the diff.
|
||||
if (bestEquality1) {
|
||||
diffs[pointer - 1][1] = bestEquality1;
|
||||
} else {
|
||||
diffs.splice(pointer - 1, 1);
|
||||
pointer--;
|
||||
}
|
||||
|
||||
diffs[pointer][1] = bestEdit;
|
||||
|
||||
if (bestEquality2) {
|
||||
diffs[pointer + 1][1] = bestEquality2;
|
||||
} else {
|
||||
diffs.splice(pointer + 1, 1);
|
||||
pointer--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pointer++;
|
||||
}
|
||||
}; // Define some regex patterns for matching boundaries.
|
||||
|
||||
var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;
|
||||
var whitespaceRegex_ = /\s/;
|
||||
var linebreakRegex_ = /[\r\n]/;
|
||||
var blanklineEndRegex_ = /\n\r?\n$/;
|
||||
var blanklineStartRegex_ = /^\r?\n\r?\n/;
|
||||
/**
|
||||
* Reorder and merge like edit sections. Merge equalities.
|
||||
* Any edit section can move as long as it doesn't cross an equality.
|
||||
* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
|
||||
*/
|
||||
|
||||
var diff_cleanupMerge = function (diffs) {
|
||||
// Add a dummy entry at the end.
|
||||
diffs.push(new Diff(DIFF_EQUAL, ''));
|
||||
var pointer = 0;
|
||||
var count_delete = 0;
|
||||
var count_insert = 0;
|
||||
var text_delete = '';
|
||||
var text_insert = '';
|
||||
var commonlength;
|
||||
|
||||
while (pointer < diffs.length) {
|
||||
switch (diffs[pointer][0]) {
|
||||
case DIFF_INSERT:
|
||||
count_insert++;
|
||||
text_insert += diffs[pointer][1];
|
||||
pointer++;
|
||||
break;
|
||||
|
||||
case DIFF_DELETE:
|
||||
count_delete++;
|
||||
text_delete += diffs[pointer][1];
|
||||
pointer++;
|
||||
break;
|
||||
|
||||
case DIFF_EQUAL:
|
||||
// Upon reaching an equality, check for prior redundancies.
|
||||
if (count_delete + count_insert > 1) {
|
||||
if (count_delete !== 0 && count_insert !== 0) {
|
||||
// Factor out any common prefixies.
|
||||
commonlength = diff_commonPrefix(text_insert, text_delete);
|
||||
|
||||
if (commonlength !== 0) {
|
||||
if (
|
||||
pointer - count_delete - count_insert > 0 &&
|
||||
diffs[pointer - count_delete - count_insert - 1][0] ==
|
||||
DIFF_EQUAL
|
||||
) {
|
||||
diffs[
|
||||
pointer - count_delete - count_insert - 1
|
||||
][1] += text_insert.substring(0, commonlength);
|
||||
} else {
|
||||
diffs.splice(
|
||||
0,
|
||||
0,
|
||||
new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength))
|
||||
);
|
||||
pointer++;
|
||||
}
|
||||
|
||||
text_insert = text_insert.substring(commonlength);
|
||||
text_delete = text_delete.substring(commonlength);
|
||||
} // Factor out any common suffixies.
|
||||
|
||||
commonlength = diff_commonSuffix(text_insert, text_delete);
|
||||
|
||||
if (commonlength !== 0) {
|
||||
diffs[pointer][1] =
|
||||
text_insert.substring(text_insert.length - commonlength) +
|
||||
diffs[pointer][1];
|
||||
text_insert = text_insert.substring(
|
||||
0,
|
||||
text_insert.length - commonlength
|
||||
);
|
||||
text_delete = text_delete.substring(
|
||||
0,
|
||||
text_delete.length - commonlength
|
||||
);
|
||||
}
|
||||
} // Delete the offending records and add the merged ones.
|
||||
|
||||
pointer -= count_delete + count_insert;
|
||||
diffs.splice(pointer, count_delete + count_insert);
|
||||
|
||||
if (text_delete.length) {
|
||||
diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete));
|
||||
pointer++;
|
||||
}
|
||||
|
||||
if (text_insert.length) {
|
||||
diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert));
|
||||
pointer++;
|
||||
}
|
||||
|
||||
pointer++;
|
||||
} else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {
|
||||
// Merge this equality with the previous one.
|
||||
diffs[pointer - 1][1] += diffs[pointer][1];
|
||||
diffs.splice(pointer, 1);
|
||||
} else {
|
||||
pointer++;
|
||||
}
|
||||
|
||||
count_insert = 0;
|
||||
count_delete = 0;
|
||||
text_delete = '';
|
||||
text_insert = '';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (diffs[diffs.length - 1][1] === '') {
|
||||
diffs.pop(); // Remove the dummy entry at the end.
|
||||
} // Second pass: look for single edits surrounded on both sides by equalities
|
||||
// which can be shifted sideways to eliminate an equality.
|
||||
// e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
|
||||
|
||||
var changes = false;
|
||||
pointer = 1; // Intentionally ignore the first and last element (don't need checking).
|
||||
|
||||
while (pointer < diffs.length - 1) {
|
||||
if (
|
||||
diffs[pointer - 1][0] == DIFF_EQUAL &&
|
||||
diffs[pointer + 1][0] == DIFF_EQUAL
|
||||
) {
|
||||
// This is a single edit surrounded by equalities.
|
||||
if (
|
||||
diffs[pointer][1].substring(
|
||||
diffs[pointer][1].length - diffs[pointer - 1][1].length
|
||||
) == diffs[pointer - 1][1]
|
||||
) {
|
||||
// Shift the edit over the previous equality.
|
||||
diffs[pointer][1] =
|
||||
diffs[pointer - 1][1] +
|
||||
diffs[pointer][1].substring(
|
||||
0,
|
||||
diffs[pointer][1].length - diffs[pointer - 1][1].length
|
||||
);
|
||||
diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
|
||||
diffs.splice(pointer - 1, 1);
|
||||
changes = true;
|
||||
} else if (
|
||||
diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==
|
||||
diffs[pointer + 1][1]
|
||||
) {
|
||||
// Shift the edit over the next equality.
|
||||
diffs[pointer - 1][1] += diffs[pointer + 1][1];
|
||||
diffs[pointer][1] =
|
||||
diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
|
||||
diffs[pointer + 1][1];
|
||||
diffs.splice(pointer + 1, 1);
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
pointer++;
|
||||
} // If shifts were made, the diff needs reordering and another shift sweep.
|
||||
|
||||
if (changes) {
|
||||
diff_cleanupMerge(diffs);
|
||||
}
|
||||
};
|
8
node_modules/jest-matcher-utils/node_modules/jest-diff/build/constants.d.ts
generated
vendored
Normal file
8
node_modules/jest-matcher-utils/node_modules/jest-diff/build/constants.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export declare const NO_DIFF_MESSAGE = "Compared values have no visual difference.";
|
||||
export declare const SIMILAR_MESSAGE: string;
|
19
node_modules/jest-matcher-utils/node_modules/jest-diff/build/constants.js
generated
vendored
Normal file
19
node_modules/jest-matcher-utils/node_modules/jest-diff/build/constants.js
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.SIMILAR_MESSAGE = exports.NO_DIFF_MESSAGE = void 0;
|
||||
|
||||
/**
|
||||
* 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 NO_DIFF_MESSAGE = 'Compared values have no visual difference.';
|
||||
exports.NO_DIFF_MESSAGE = NO_DIFF_MESSAGE;
|
||||
const SIMILAR_MESSAGE =
|
||||
'Compared values serialize to the same structure.\n' +
|
||||
'Printing internal object structure without calling `toJSON` instead.';
|
||||
exports.SIMILAR_MESSAGE = SIMILAR_MESSAGE;
|
11
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffLines.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffLines.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { Diff } from './cleanupSemantic';
|
||||
import type { DiffOptions } from './types';
|
||||
export declare const diffLinesUnified: (aLines: Array<string>, bLines: Array<string>, options?: DiffOptions | undefined) => string;
|
||||
export declare const diffLinesUnified2: (aLinesDisplay: Array<string>, bLinesDisplay: Array<string>, aLinesCompare: Array<string>, bLinesCompare: Array<string>, options?: DiffOptions | undefined) => string;
|
||||
export declare const diffLinesRaw: (aLines: Array<string>, bLines: Array<string>) => Array<Diff>;
|
143
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffLines.js
generated
vendored
Normal file
143
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffLines.js
generated
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.diffLinesRaw = exports.diffLinesUnified2 = exports.diffLinesUnified = void 0;
|
||||
|
||||
var _diffSequences = _interopRequireDefault(require('diff-sequences'));
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
var _normalizeDiffOptions = require('./normalizeDiffOptions');
|
||||
|
||||
var _printDiffs = require('./printDiffs');
|
||||
|
||||
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.
|
||||
*/
|
||||
const isEmptyString = lines => lines.length === 1 && lines[0].length === 0; // Compare two arrays of strings line-by-line. Format as comparison lines.
|
||||
|
||||
const diffLinesUnified = (aLines, bLines, options) =>
|
||||
(0, _printDiffs.printDiffLines)(
|
||||
diffLinesRaw(
|
||||
isEmptyString(aLines) ? [] : aLines,
|
||||
isEmptyString(bLines) ? [] : bLines
|
||||
),
|
||||
(0, _normalizeDiffOptions.normalizeDiffOptions)(options)
|
||||
); // Given two pairs of arrays of strings:
|
||||
// Compare the pair of comparison arrays line-by-line.
|
||||
// Format the corresponding lines in the pair of displayable arrays.
|
||||
|
||||
exports.diffLinesUnified = diffLinesUnified;
|
||||
|
||||
const diffLinesUnified2 = (
|
||||
aLinesDisplay,
|
||||
bLinesDisplay,
|
||||
aLinesCompare,
|
||||
bLinesCompare,
|
||||
options
|
||||
) => {
|
||||
if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) {
|
||||
aLinesDisplay = [];
|
||||
aLinesCompare = [];
|
||||
}
|
||||
|
||||
if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) {
|
||||
bLinesDisplay = [];
|
||||
bLinesCompare = [];
|
||||
}
|
||||
|
||||
if (
|
||||
aLinesDisplay.length !== aLinesCompare.length ||
|
||||
bLinesDisplay.length !== bLinesCompare.length
|
||||
) {
|
||||
// Fall back to diff of display lines.
|
||||
return diffLinesUnified(aLinesDisplay, bLinesDisplay, options);
|
||||
}
|
||||
|
||||
const diffs = diffLinesRaw(aLinesCompare, bLinesCompare); // Replace comparison lines with displayable lines.
|
||||
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
diffs.forEach(diff => {
|
||||
switch (diff[0]) {
|
||||
case _cleanupSemantic.DIFF_DELETE:
|
||||
diff[1] = aLinesDisplay[aIndex];
|
||||
aIndex += 1;
|
||||
break;
|
||||
|
||||
case _cleanupSemantic.DIFF_INSERT:
|
||||
diff[1] = bLinesDisplay[bIndex];
|
||||
bIndex += 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
diff[1] = bLinesDisplay[bIndex];
|
||||
aIndex += 1;
|
||||
bIndex += 1;
|
||||
}
|
||||
});
|
||||
return (0, _printDiffs.printDiffLines)(
|
||||
diffs,
|
||||
(0, _normalizeDiffOptions.normalizeDiffOptions)(options)
|
||||
);
|
||||
}; // Compare two arrays of strings line-by-line.
|
||||
|
||||
exports.diffLinesUnified2 = diffLinesUnified2;
|
||||
|
||||
const diffLinesRaw = (aLines, bLines) => {
|
||||
const aLength = aLines.length;
|
||||
const bLength = bLines.length;
|
||||
|
||||
const isCommon = (aIndex, bIndex) => aLines[aIndex] === bLines[bIndex];
|
||||
|
||||
const diffs = [];
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
|
||||
const foundSubsequence = (nCommon, aCommon, bCommon) => {
|
||||
for (; aIndex !== aCommon; aIndex += 1) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])
|
||||
);
|
||||
}
|
||||
|
||||
for (; bIndex !== bCommon; bIndex += 1) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])
|
||||
);
|
||||
}
|
||||
|
||||
for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_EQUAL, bLines[bIndex])
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
(0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence); // After the last common subsequence, push remaining change items.
|
||||
|
||||
for (; aIndex !== aLength; aIndex += 1) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])
|
||||
);
|
||||
}
|
||||
|
||||
for (; bIndex !== bLength; bIndex += 1) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])
|
||||
);
|
||||
}
|
||||
|
||||
return diffs;
|
||||
};
|
||||
|
||||
exports.diffLinesRaw = diffLinesRaw;
|
9
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffStrings.d.ts
generated
vendored
Normal file
9
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffStrings.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { Diff } from './cleanupSemantic';
|
||||
declare const diffStrings: (a: string, b: string) => Array<Diff>;
|
||||
export default diffStrings;
|
78
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffStrings.js
generated
vendored
Normal file
78
node_modules/jest-matcher-utils/node_modules/jest-diff/build/diffStrings.js
generated
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _diffSequences = _interopRequireDefault(require('diff-sequences'));
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
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.
|
||||
*/
|
||||
const diffStrings = (a, b) => {
|
||||
const isCommon = (aIndex, bIndex) => a[aIndex] === b[bIndex];
|
||||
|
||||
let aIndex = 0;
|
||||
let bIndex = 0;
|
||||
const diffs = [];
|
||||
|
||||
const foundSubsequence = (nCommon, aCommon, bCommon) => {
|
||||
if (aIndex !== aCommon) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(
|
||||
_cleanupSemantic.DIFF_DELETE,
|
||||
a.slice(aIndex, aCommon)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (bIndex !== bCommon) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(
|
||||
_cleanupSemantic.DIFF_INSERT,
|
||||
b.slice(bIndex, bCommon)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
aIndex = aCommon + nCommon; // number of characters compared in a
|
||||
|
||||
bIndex = bCommon + nCommon; // number of characters compared in b
|
||||
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(
|
||||
_cleanupSemantic.DIFF_EQUAL,
|
||||
b.slice(bCommon, bIndex)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
(0, _diffSequences.default)(a.length, b.length, isCommon, foundSubsequence); // After the last common subsequence, push remaining change items.
|
||||
|
||||
if (aIndex !== a.length) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, a.slice(aIndex))
|
||||
);
|
||||
}
|
||||
|
||||
if (bIndex !== b.length) {
|
||||
diffs.push(
|
||||
new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, b.slice(bIndex))
|
||||
);
|
||||
}
|
||||
|
||||
return diffs;
|
||||
};
|
||||
|
||||
var _default = diffStrings;
|
||||
exports.default = _default;
|
10
node_modules/jest-matcher-utils/node_modules/jest-diff/build/getAlignedDiffs.d.ts
generated
vendored
Normal file
10
node_modules/jest-matcher-utils/node_modules/jest-diff/build/getAlignedDiffs.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { Diff } from './cleanupSemantic';
|
||||
import type { DiffOptionsColor } from './types';
|
||||
declare const getAlignedDiffs: (diffs: Array<Diff>, changeColor: DiffOptionsColor) => Array<Diff>;
|
||||
export default getAlignedDiffs;
|
244
node_modules/jest-matcher-utils/node_modules/jest-diff/build/getAlignedDiffs.js
generated
vendored
Normal file
244
node_modules/jest-matcher-utils/node_modules/jest-diff/build/getAlignedDiffs.js
generated
vendored
Normal file
|
@ -0,0 +1,244 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
// Given change op and array of diffs, return concatenated string:
|
||||
// * include common strings
|
||||
// * include change strings which have argument op with changeColor
|
||||
// * exclude change strings which have opposite op
|
||||
const concatenateRelevantDiffs = (op, diffs, changeColor) =>
|
||||
diffs.reduce(
|
||||
(reduced, diff) =>
|
||||
reduced +
|
||||
(diff[0] === _cleanupSemantic.DIFF_EQUAL
|
||||
? diff[1]
|
||||
: diff[0] === op && diff[1].length !== 0 // empty if change is newline
|
||||
? changeColor(diff[1])
|
||||
: ''),
|
||||
''
|
||||
); // Encapsulate change lines until either a common newline or the end.
|
||||
|
||||
class ChangeBuffer {
|
||||
// incomplete line
|
||||
// complete lines
|
||||
constructor(op, changeColor) {
|
||||
_defineProperty(this, 'op', void 0);
|
||||
|
||||
_defineProperty(this, 'line', void 0);
|
||||
|
||||
_defineProperty(this, 'lines', void 0);
|
||||
|
||||
_defineProperty(this, 'changeColor', void 0);
|
||||
|
||||
this.op = op;
|
||||
this.line = [];
|
||||
this.lines = [];
|
||||
this.changeColor = changeColor;
|
||||
}
|
||||
|
||||
pushSubstring(substring) {
|
||||
this.pushDiff(new _cleanupSemantic.Diff(this.op, substring));
|
||||
}
|
||||
|
||||
pushLine() {
|
||||
// Assume call only if line has at least one diff,
|
||||
// therefore an empty line must have a diff which has an empty string.
|
||||
// If line has multiple diffs, then assume it has a common diff,
|
||||
// therefore change diffs have change color;
|
||||
// otherwise then it has line color only.
|
||||
this.lines.push(
|
||||
this.line.length !== 1
|
||||
? new _cleanupSemantic.Diff(
|
||||
this.op,
|
||||
concatenateRelevantDiffs(this.op, this.line, this.changeColor)
|
||||
)
|
||||
: this.line[0][0] === this.op
|
||||
? this.line[0] // can use instance
|
||||
: new _cleanupSemantic.Diff(this.op, this.line[0][1]) // was common diff
|
||||
);
|
||||
this.line.length = 0;
|
||||
}
|
||||
|
||||
isLineEmpty() {
|
||||
return this.line.length === 0;
|
||||
} // Minor input to buffer.
|
||||
|
||||
pushDiff(diff) {
|
||||
this.line.push(diff);
|
||||
} // Main input to buffer.
|
||||
|
||||
align(diff) {
|
||||
const string = diff[1];
|
||||
|
||||
if (string.includes('\n')) {
|
||||
const substrings = string.split('\n');
|
||||
const iLast = substrings.length - 1;
|
||||
substrings.forEach((substring, i) => {
|
||||
if (i < iLast) {
|
||||
// The first substring completes the current change line.
|
||||
// A middle substring is a change line.
|
||||
this.pushSubstring(substring);
|
||||
this.pushLine();
|
||||
} else if (substring.length !== 0) {
|
||||
// The last substring starts a change line, if it is not empty.
|
||||
// Important: This non-empty condition also automatically omits
|
||||
// the newline appended to the end of expected and received strings.
|
||||
this.pushSubstring(substring);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Append non-multiline string to current change line.
|
||||
this.pushDiff(diff);
|
||||
}
|
||||
} // Output from buffer.
|
||||
|
||||
moveLinesTo(lines) {
|
||||
if (!this.isLineEmpty()) {
|
||||
this.pushLine();
|
||||
}
|
||||
|
||||
lines.push(...this.lines);
|
||||
this.lines.length = 0;
|
||||
}
|
||||
} // Encapsulate common and change lines.
|
||||
|
||||
class CommonBuffer {
|
||||
constructor(deleteBuffer, insertBuffer) {
|
||||
_defineProperty(this, 'deleteBuffer', void 0);
|
||||
|
||||
_defineProperty(this, 'insertBuffer', void 0);
|
||||
|
||||
_defineProperty(this, 'lines', void 0);
|
||||
|
||||
this.deleteBuffer = deleteBuffer;
|
||||
this.insertBuffer = insertBuffer;
|
||||
this.lines = [];
|
||||
}
|
||||
|
||||
pushDiffCommonLine(diff) {
|
||||
this.lines.push(diff);
|
||||
}
|
||||
|
||||
pushDiffChangeLines(diff) {
|
||||
const isDiffEmpty = diff[1].length === 0; // An empty diff string is redundant, unless a change line is empty.
|
||||
|
||||
if (!isDiffEmpty || this.deleteBuffer.isLineEmpty()) {
|
||||
this.deleteBuffer.pushDiff(diff);
|
||||
}
|
||||
|
||||
if (!isDiffEmpty || this.insertBuffer.isLineEmpty()) {
|
||||
this.insertBuffer.pushDiff(diff);
|
||||
}
|
||||
}
|
||||
|
||||
flushChangeLines() {
|
||||
this.deleteBuffer.moveLinesTo(this.lines);
|
||||
this.insertBuffer.moveLinesTo(this.lines);
|
||||
} // Input to buffer.
|
||||
|
||||
align(diff) {
|
||||
const op = diff[0];
|
||||
const string = diff[1];
|
||||
|
||||
if (string.includes('\n')) {
|
||||
const substrings = string.split('\n');
|
||||
const iLast = substrings.length - 1;
|
||||
substrings.forEach((substring, i) => {
|
||||
if (i === 0) {
|
||||
const subdiff = new _cleanupSemantic.Diff(op, substring);
|
||||
|
||||
if (
|
||||
this.deleteBuffer.isLineEmpty() &&
|
||||
this.insertBuffer.isLineEmpty()
|
||||
) {
|
||||
// If both current change lines are empty,
|
||||
// then the first substring is a common line.
|
||||
this.flushChangeLines();
|
||||
this.pushDiffCommonLine(subdiff);
|
||||
} else {
|
||||
// If either current change line is non-empty,
|
||||
// then the first substring completes the change lines.
|
||||
this.pushDiffChangeLines(subdiff);
|
||||
this.flushChangeLines();
|
||||
}
|
||||
} else if (i < iLast) {
|
||||
// A middle substring is a common line.
|
||||
this.pushDiffCommonLine(new _cleanupSemantic.Diff(op, substring));
|
||||
} else if (substring.length !== 0) {
|
||||
// The last substring starts a change line, if it is not empty.
|
||||
// Important: This non-empty condition also automatically omits
|
||||
// the newline appended to the end of expected and received strings.
|
||||
this.pushDiffChangeLines(new _cleanupSemantic.Diff(op, substring));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Append non-multiline string to current change lines.
|
||||
// Important: It cannot be at the end following empty change lines,
|
||||
// because newline appended to the end of expected and received strings.
|
||||
this.pushDiffChangeLines(diff);
|
||||
}
|
||||
} // Output from buffer.
|
||||
|
||||
getLines() {
|
||||
this.flushChangeLines();
|
||||
return this.lines;
|
||||
}
|
||||
} // Given diffs from expected and received strings,
|
||||
// return new array of diffs split or joined into lines.
|
||||
//
|
||||
// To correctly align a change line at the end, the algorithm:
|
||||
// * assumes that a newline was appended to the strings
|
||||
// * omits the last newline from the output array
|
||||
//
|
||||
// Assume the function is not called:
|
||||
// * if either expected or received is empty string
|
||||
// * if neither expected nor received is multiline string
|
||||
|
||||
const getAlignedDiffs = (diffs, changeColor) => {
|
||||
const deleteBuffer = new ChangeBuffer(
|
||||
_cleanupSemantic.DIFF_DELETE,
|
||||
changeColor
|
||||
);
|
||||
const insertBuffer = new ChangeBuffer(
|
||||
_cleanupSemantic.DIFF_INSERT,
|
||||
changeColor
|
||||
);
|
||||
const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer);
|
||||
diffs.forEach(diff => {
|
||||
switch (diff[0]) {
|
||||
case _cleanupSemantic.DIFF_DELETE:
|
||||
deleteBuffer.align(diff);
|
||||
break;
|
||||
|
||||
case _cleanupSemantic.DIFF_INSERT:
|
||||
insertBuffer.align(diff);
|
||||
break;
|
||||
|
||||
default:
|
||||
commonBuffer.align(diff);
|
||||
}
|
||||
});
|
||||
return commonBuffer.getLines();
|
||||
};
|
||||
|
||||
var _default = getAlignedDiffs;
|
||||
exports.default = _default;
|
16
node_modules/jest-matcher-utils/node_modules/jest-diff/build/index.d.ts
generated
vendored
Normal file
16
node_modules/jest-matcher-utils/node_modules/jest-diff/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff } from './cleanupSemantic';
|
||||
import { diffLinesRaw, diffLinesUnified, diffLinesUnified2 } from './diffLines';
|
||||
import { diffStringsRaw, diffStringsUnified } from './printDiffs';
|
||||
import type { DiffOptions } from './types';
|
||||
export type { DiffOptions, DiffOptionsColor } from './types';
|
||||
export { diffLinesRaw, diffLinesUnified, diffLinesUnified2 };
|
||||
export { diffStringsRaw, diffStringsUnified };
|
||||
export { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff };
|
||||
declare function diff(a: any, b: any, options?: DiffOptions): string | null;
|
||||
export default diff;
|
258
node_modules/jest-matcher-utils/node_modules/jest-diff/build/index.js
generated
vendored
Normal file
258
node_modules/jest-matcher-utils/node_modules/jest-diff/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,258 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, 'DIFF_DELETE', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _cleanupSemantic.DIFF_DELETE;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'DIFF_EQUAL', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _cleanupSemantic.DIFF_EQUAL;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'DIFF_INSERT', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _cleanupSemantic.DIFF_INSERT;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'Diff', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _cleanupSemantic.Diff;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'diffLinesRaw', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _diffLines.diffLinesRaw;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'diffLinesUnified', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _diffLines.diffLinesUnified;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'diffLinesUnified2', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _diffLines.diffLinesUnified2;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'diffStringsRaw', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _printDiffs.diffStringsRaw;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'diffStringsUnified', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _printDiffs.diffStringsUnified;
|
||||
}
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _prettyFormat = _interopRequireDefault(require('pretty-format'));
|
||||
|
||||
var _chalk = _interopRequireDefault(require('chalk'));
|
||||
|
||||
var _jestGetType = _interopRequireDefault(require('jest-get-type'));
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
var _normalizeDiffOptions = require('./normalizeDiffOptions');
|
||||
|
||||
var _diffLines = require('./diffLines');
|
||||
|
||||
var _printDiffs = require('./printDiffs');
|
||||
|
||||
var _constants = require('./constants');
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
|
||||
|
||||
const getCommonMessage = (message, options) => {
|
||||
const {commonColor} = (0, _normalizeDiffOptions.normalizeDiffOptions)(
|
||||
options
|
||||
);
|
||||
return commonColor(message);
|
||||
};
|
||||
|
||||
const {
|
||||
AsymmetricMatcher,
|
||||
DOMCollection,
|
||||
DOMElement,
|
||||
Immutable,
|
||||
ReactElement,
|
||||
ReactTestComponent
|
||||
} = _prettyFormat.default.plugins;
|
||||
const PLUGINS = [
|
||||
ReactTestComponent,
|
||||
ReactElement,
|
||||
DOMElement,
|
||||
DOMCollection,
|
||||
Immutable,
|
||||
AsymmetricMatcher
|
||||
];
|
||||
const FORMAT_OPTIONS = {
|
||||
plugins: PLUGINS
|
||||
};
|
||||
const FORMAT_OPTIONS_0 = {...FORMAT_OPTIONS, indent: 0};
|
||||
const FALLBACK_FORMAT_OPTIONS = {
|
||||
callToJSON: false,
|
||||
maxDepth: 10,
|
||||
plugins: PLUGINS
|
||||
};
|
||||
const FALLBACK_FORMAT_OPTIONS_0 = {...FALLBACK_FORMAT_OPTIONS, indent: 0}; // Generate a string that will highlight the difference between two values
|
||||
// with green and red. (similar to how github does code diffing)
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
|
||||
function diff(a, b, options) {
|
||||
if (Object.is(a, b)) {
|
||||
return getCommonMessage(_constants.NO_DIFF_MESSAGE, options);
|
||||
}
|
||||
|
||||
const aType = (0, _jestGetType.default)(a);
|
||||
let expectedType = aType;
|
||||
let omitDifference = false;
|
||||
|
||||
if (aType === 'object' && typeof a.asymmetricMatch === 'function') {
|
||||
if (a.$$typeof !== Symbol.for('jest.asymmetricMatcher')) {
|
||||
// Do not know expected type of user-defined asymmetric matcher.
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof a.getExpectedType !== 'function') {
|
||||
// For example, expect.anything() matches either null or undefined
|
||||
return null;
|
||||
}
|
||||
|
||||
expectedType = a.getExpectedType(); // Primitive types boolean and number omit difference below.
|
||||
// For example, omit difference for expect.stringMatching(regexp)
|
||||
|
||||
omitDifference = expectedType === 'string';
|
||||
}
|
||||
|
||||
if (expectedType !== (0, _jestGetType.default)(b)) {
|
||||
return (
|
||||
' Comparing two different types of values.' +
|
||||
` Expected ${_chalk.default.green(expectedType)} but ` +
|
||||
`received ${_chalk.default.red((0, _jestGetType.default)(b))}.`
|
||||
);
|
||||
}
|
||||
|
||||
if (omitDifference) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (aType) {
|
||||
case 'string':
|
||||
return (0, _diffLines.diffLinesUnified)(
|
||||
a.split('\n'),
|
||||
b.split('\n'),
|
||||
options
|
||||
);
|
||||
|
||||
case 'boolean':
|
||||
case 'number':
|
||||
return comparePrimitive(a, b, options);
|
||||
|
||||
case 'map':
|
||||
return compareObjects(sortMap(a), sortMap(b), options);
|
||||
|
||||
case 'set':
|
||||
return compareObjects(sortSet(a), sortSet(b), options);
|
||||
|
||||
default:
|
||||
return compareObjects(a, b, options);
|
||||
}
|
||||
}
|
||||
|
||||
function comparePrimitive(a, b, options) {
|
||||
const aFormat = (0, _prettyFormat.default)(a, FORMAT_OPTIONS);
|
||||
const bFormat = (0, _prettyFormat.default)(b, FORMAT_OPTIONS);
|
||||
return aFormat === bFormat
|
||||
? getCommonMessage(_constants.NO_DIFF_MESSAGE, options)
|
||||
: (0, _diffLines.diffLinesUnified)(
|
||||
aFormat.split('\n'),
|
||||
bFormat.split('\n'),
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
function sortMap(map) {
|
||||
return new Map(Array.from(map.entries()).sort());
|
||||
}
|
||||
|
||||
function sortSet(set) {
|
||||
return new Set(Array.from(set.values()).sort());
|
||||
}
|
||||
|
||||
function compareObjects(a, b, options) {
|
||||
let difference;
|
||||
let hasThrown = false;
|
||||
const noDiffMessage = getCommonMessage(_constants.NO_DIFF_MESSAGE, options);
|
||||
|
||||
try {
|
||||
const aCompare = (0, _prettyFormat.default)(a, FORMAT_OPTIONS_0);
|
||||
const bCompare = (0, _prettyFormat.default)(b, FORMAT_OPTIONS_0);
|
||||
|
||||
if (aCompare === bCompare) {
|
||||
difference = noDiffMessage;
|
||||
} else {
|
||||
const aDisplay = (0, _prettyFormat.default)(a, FORMAT_OPTIONS);
|
||||
const bDisplay = (0, _prettyFormat.default)(b, FORMAT_OPTIONS);
|
||||
difference = (0, _diffLines.diffLinesUnified2)(
|
||||
aDisplay.split('\n'),
|
||||
bDisplay.split('\n'),
|
||||
aCompare.split('\n'),
|
||||
bCompare.split('\n'),
|
||||
options
|
||||
);
|
||||
}
|
||||
} catch {
|
||||
hasThrown = true;
|
||||
} // If the comparison yields no results, compare again but this time
|
||||
// without calling `toJSON`. It's also possible that toJSON might throw.
|
||||
|
||||
if (difference === undefined || difference === noDiffMessage) {
|
||||
const aCompare = (0, _prettyFormat.default)(a, FALLBACK_FORMAT_OPTIONS_0);
|
||||
const bCompare = (0, _prettyFormat.default)(b, FALLBACK_FORMAT_OPTIONS_0);
|
||||
|
||||
if (aCompare === bCompare) {
|
||||
difference = noDiffMessage;
|
||||
} else {
|
||||
const aDisplay = (0, _prettyFormat.default)(a, FALLBACK_FORMAT_OPTIONS);
|
||||
const bDisplay = (0, _prettyFormat.default)(b, FALLBACK_FORMAT_OPTIONS);
|
||||
difference = (0, _diffLines.diffLinesUnified2)(
|
||||
aDisplay.split('\n'),
|
||||
bDisplay.split('\n'),
|
||||
aCompare.split('\n'),
|
||||
bCompare.split('\n'),
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
if (difference !== noDiffMessage && !hasThrown) {
|
||||
difference =
|
||||
getCommonMessage(_constants.SIMILAR_MESSAGE, options) +
|
||||
'\n\n' +
|
||||
difference;
|
||||
}
|
||||
}
|
||||
|
||||
return difference;
|
||||
}
|
||||
|
||||
var _default = diff;
|
||||
exports.default = _default;
|
10
node_modules/jest-matcher-utils/node_modules/jest-diff/build/joinAlignedDiffs.d.ts
generated
vendored
Normal file
10
node_modules/jest-matcher-utils/node_modules/jest-diff/build/joinAlignedDiffs.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { Diff } from './cleanupSemantic';
|
||||
import type { DiffOptionsNormalized } from './types';
|
||||
export declare const joinAlignedDiffsNoExpand: (diffs: Array<Diff>, options: DiffOptionsNormalized) => string;
|
||||
export declare const joinAlignedDiffsExpand: (diffs: Array<Diff>, options: DiffOptionsNormalized) => string;
|
235
node_modules/jest-matcher-utils/node_modules/jest-diff/build/joinAlignedDiffs.js
generated
vendored
Normal file
235
node_modules/jest-matcher-utils/node_modules/jest-diff/build/joinAlignedDiffs.js
generated
vendored
Normal file
|
@ -0,0 +1,235 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.joinAlignedDiffsExpand = exports.joinAlignedDiffsNoExpand = void 0;
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
var _printDiffs = require('./printDiffs');
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
// jest --no-expand
|
||||
//
|
||||
// Given array of aligned strings with inverse highlight formatting,
|
||||
// return joined lines with diff formatting (and patch marks, if needed).
|
||||
const joinAlignedDiffsNoExpand = (diffs, options) => {
|
||||
const iLength = diffs.length;
|
||||
const nContextLines = options.contextLines;
|
||||
const nContextLines2 = nContextLines + nContextLines; // First pass: count output lines and see if it has patches.
|
||||
|
||||
let jLength = iLength;
|
||||
let hasExcessAtStartOrEnd = false;
|
||||
let nExcessesBetweenChanges = 0;
|
||||
let i = 0;
|
||||
|
||||
while (i !== iLength) {
|
||||
const iStart = i;
|
||||
|
||||
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) {
|
||||
i += 1;
|
||||
}
|
||||
|
||||
if (iStart !== i) {
|
||||
if (iStart === 0) {
|
||||
// at start
|
||||
if (i > nContextLines) {
|
||||
jLength -= i - nContextLines; // subtract excess common lines
|
||||
|
||||
hasExcessAtStartOrEnd = true;
|
||||
}
|
||||
} else if (i === iLength) {
|
||||
// at end
|
||||
const n = i - iStart;
|
||||
|
||||
if (n > nContextLines) {
|
||||
jLength -= n - nContextLines; // subtract excess common lines
|
||||
|
||||
hasExcessAtStartOrEnd = true;
|
||||
}
|
||||
} else {
|
||||
// between changes
|
||||
const n = i - iStart;
|
||||
|
||||
if (n > nContextLines2) {
|
||||
jLength -= n - nContextLines2; // subtract excess common lines
|
||||
|
||||
nExcessesBetweenChanges += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (i !== iLength && diffs[i][0] !== _cleanupSemantic.DIFF_EQUAL) {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
const hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd;
|
||||
|
||||
if (nExcessesBetweenChanges !== 0) {
|
||||
jLength += nExcessesBetweenChanges + 1; // add patch lines
|
||||
} else if (hasExcessAtStartOrEnd) {
|
||||
jLength += 1; // add patch line
|
||||
}
|
||||
|
||||
const jLast = jLength - 1;
|
||||
const lines = [];
|
||||
let jPatchMark = 0; // index of placeholder line for current patch mark
|
||||
|
||||
if (hasPatch) {
|
||||
lines.push(''); // placeholder line for first patch mark
|
||||
} // Indexes of expected or received lines in current patch:
|
||||
|
||||
let aStart = 0;
|
||||
let bStart = 0;
|
||||
let aEnd = 0;
|
||||
let bEnd = 0;
|
||||
|
||||
const pushCommonLine = line => {
|
||||
const j = lines.length;
|
||||
lines.push(
|
||||
(0, _printDiffs.printCommonLine)(line, j === 0 || j === jLast, options)
|
||||
);
|
||||
aEnd += 1;
|
||||
bEnd += 1;
|
||||
};
|
||||
|
||||
const pushDeleteLine = line => {
|
||||
const j = lines.length;
|
||||
lines.push(
|
||||
(0, _printDiffs.printDeleteLine)(line, j === 0 || j === jLast, options)
|
||||
);
|
||||
aEnd += 1;
|
||||
};
|
||||
|
||||
const pushInsertLine = line => {
|
||||
const j = lines.length;
|
||||
lines.push(
|
||||
(0, _printDiffs.printInsertLine)(line, j === 0 || j === jLast, options)
|
||||
);
|
||||
bEnd += 1;
|
||||
}; // Second pass: push lines with diff formatting (and patch marks, if needed).
|
||||
|
||||
i = 0;
|
||||
|
||||
while (i !== iLength) {
|
||||
let iStart = i;
|
||||
|
||||
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) {
|
||||
i += 1;
|
||||
}
|
||||
|
||||
if (iStart !== i) {
|
||||
if (iStart === 0) {
|
||||
// at beginning
|
||||
if (i > nContextLines) {
|
||||
iStart = i - nContextLines;
|
||||
aStart = iStart;
|
||||
bStart = iStart;
|
||||
aEnd = aStart;
|
||||
bEnd = bStart;
|
||||
}
|
||||
|
||||
for (let iCommon = iStart; iCommon !== i; iCommon += 1) {
|
||||
pushCommonLine(diffs[iCommon][1]);
|
||||
}
|
||||
} else if (i === iLength) {
|
||||
// at end
|
||||
const iEnd = i - iStart > nContextLines ? iStart + nContextLines : i;
|
||||
|
||||
for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) {
|
||||
pushCommonLine(diffs[iCommon][1]);
|
||||
}
|
||||
} else {
|
||||
// between changes
|
||||
const nCommon = i - iStart;
|
||||
|
||||
if (nCommon > nContextLines2) {
|
||||
const iEnd = iStart + nContextLines;
|
||||
|
||||
for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) {
|
||||
pushCommonLine(diffs[iCommon][1]);
|
||||
}
|
||||
|
||||
lines[jPatchMark] = (0, _printDiffs.createPatchMark)(
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
options
|
||||
);
|
||||
jPatchMark = lines.length;
|
||||
lines.push(''); // placeholder line for next patch mark
|
||||
|
||||
const nOmit = nCommon - nContextLines2;
|
||||
aStart = aEnd + nOmit;
|
||||
bStart = bEnd + nOmit;
|
||||
aEnd = aStart;
|
||||
bEnd = bStart;
|
||||
|
||||
for (let iCommon = i - nContextLines; iCommon !== i; iCommon += 1) {
|
||||
pushCommonLine(diffs[iCommon][1]);
|
||||
}
|
||||
} else {
|
||||
for (let iCommon = iStart; iCommon !== i; iCommon += 1) {
|
||||
pushCommonLine(diffs[iCommon][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_DELETE) {
|
||||
pushDeleteLine(diffs[i][1]);
|
||||
i += 1;
|
||||
}
|
||||
|
||||
while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_INSERT) {
|
||||
pushInsertLine(diffs[i][1]);
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasPatch) {
|
||||
lines[jPatchMark] = (0, _printDiffs.createPatchMark)(
|
||||
aStart,
|
||||
aEnd,
|
||||
bStart,
|
||||
bEnd,
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
return lines.join('\n');
|
||||
}; // jest --expand
|
||||
//
|
||||
// Given array of aligned strings with inverse highlight formatting,
|
||||
// return joined lines with diff formatting.
|
||||
|
||||
exports.joinAlignedDiffsNoExpand = joinAlignedDiffsNoExpand;
|
||||
|
||||
const joinAlignedDiffsExpand = (diffs, options) =>
|
||||
diffs
|
||||
.map((diff, i, diffs) => {
|
||||
const line = diff[1];
|
||||
const isFirstOrLast = i === 0 || i === diffs.length - 1;
|
||||
|
||||
switch (diff[0]) {
|
||||
case _cleanupSemantic.DIFF_DELETE:
|
||||
return (0, _printDiffs.printDeleteLine)(line, isFirstOrLast, options);
|
||||
|
||||
case _cleanupSemantic.DIFF_INSERT:
|
||||
return (0, _printDiffs.printInsertLine)(line, isFirstOrLast, options);
|
||||
|
||||
default:
|
||||
return (0, _printDiffs.printCommonLine)(line, isFirstOrLast, options);
|
||||
}
|
||||
})
|
||||
.join('\n');
|
||||
|
||||
exports.joinAlignedDiffsExpand = joinAlignedDiffsExpand;
|
9
node_modules/jest-matcher-utils/node_modules/jest-diff/build/normalizeDiffOptions.d.ts
generated
vendored
Normal file
9
node_modules/jest-matcher-utils/node_modules/jest-diff/build/normalizeDiffOptions.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { DiffOptions, DiffOptionsNormalized } from './types';
|
||||
export declare const noColor: (string: string) => string;
|
||||
export declare const normalizeDiffOptions: (options?: DiffOptions) => DiffOptionsNormalized;
|
57
node_modules/jest-matcher-utils/node_modules/jest-diff/build/normalizeDiffOptions.js
generated
vendored
Normal file
57
node_modules/jest-matcher-utils/node_modules/jest-diff/build/normalizeDiffOptions.js
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.normalizeDiffOptions = exports.noColor = void 0;
|
||||
|
||||
var _chalk = _interopRequireDefault(require('chalk'));
|
||||
|
||||
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.
|
||||
*/
|
||||
const noColor = string => string;
|
||||
|
||||
exports.noColor = noColor;
|
||||
const DIFF_CONTEXT_DEFAULT = 5;
|
||||
const OPTIONS_DEFAULT = {
|
||||
aAnnotation: 'Expected',
|
||||
aColor: _chalk.default.green,
|
||||
aIndicator: '-',
|
||||
bAnnotation: 'Received',
|
||||
bColor: _chalk.default.red,
|
||||
bIndicator: '+',
|
||||
changeColor: _chalk.default.inverse,
|
||||
changeLineTrailingSpaceColor: noColor,
|
||||
commonColor: _chalk.default.dim,
|
||||
commonIndicator: ' ',
|
||||
commonLineTrailingSpaceColor: noColor,
|
||||
contextLines: DIFF_CONTEXT_DEFAULT,
|
||||
emptyFirstOrLastLinePlaceholder: '',
|
||||
expand: true,
|
||||
includeChangeCounts: false,
|
||||
omitAnnotationLines: false,
|
||||
patchColor: _chalk.default.yellow
|
||||
};
|
||||
|
||||
const getContextLines = contextLines =>
|
||||
typeof contextLines === 'number' &&
|
||||
Number.isSafeInteger(contextLines) &&
|
||||
contextLines >= 0
|
||||
? contextLines
|
||||
: DIFF_CONTEXT_DEFAULT; // Pure function returns options with all properties.
|
||||
|
||||
const normalizeDiffOptions = (options = {}) => ({
|
||||
...OPTIONS_DEFAULT,
|
||||
...options,
|
||||
contextLines: getContextLines(options.contextLines)
|
||||
});
|
||||
|
||||
exports.normalizeDiffOptions = normalizeDiffOptions;
|
22
node_modules/jest-matcher-utils/node_modules/jest-diff/build/printDiffs.d.ts
generated
vendored
Normal file
22
node_modules/jest-matcher-utils/node_modules/jest-diff/build/printDiffs.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import { Diff } from './cleanupSemantic';
|
||||
import type { DiffOptions, DiffOptionsNormalized } from './types';
|
||||
export declare const printDeleteLine: (line: string, isFirstOrLast: boolean, { aColor, aIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder, }: DiffOptionsNormalized) => string;
|
||||
export declare const printInsertLine: (line: string, isFirstOrLast: boolean, { bColor, bIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder, }: DiffOptionsNormalized) => string;
|
||||
export declare const printCommonLine: (line: string, isFirstOrLast: boolean, { commonColor, commonIndicator, commonLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder, }: DiffOptionsNormalized) => string;
|
||||
export declare const hasCommonDiff: (diffs: Array<Diff>, isMultiline: boolean) => boolean;
|
||||
export declare type ChangeCounts = {
|
||||
a: number;
|
||||
b: number;
|
||||
};
|
||||
export declare const countChanges: (diffs: Array<Diff>) => ChangeCounts;
|
||||
export declare const printAnnotation: ({ aAnnotation, aColor, aIndicator, bAnnotation, bColor, bIndicator, includeChangeCounts, omitAnnotationLines, }: DiffOptionsNormalized, changeCounts: ChangeCounts) => string;
|
||||
export declare const printDiffLines: (diffs: Array<Diff>, options: DiffOptionsNormalized) => string;
|
||||
export declare const createPatchMark: (aStart: number, aEnd: number, bStart: number, bEnd: number, { patchColor }: DiffOptionsNormalized) => string;
|
||||
export declare const diffStringsUnified: (a: string, b: string, options?: DiffOptions | undefined) => string;
|
||||
export declare const diffStringsRaw: (a: string, b: string, cleanup: boolean) => Array<Diff>;
|
257
node_modules/jest-matcher-utils/node_modules/jest-diff/build/printDiffs.js
generated
vendored
Normal file
257
node_modules/jest-matcher-utils/node_modules/jest-diff/build/printDiffs.js
generated
vendored
Normal file
|
@ -0,0 +1,257 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.diffStringsRaw = exports.diffStringsUnified = exports.createPatchMark = exports.printDiffLines = exports.printAnnotation = exports.countChanges = exports.hasCommonDiff = exports.printCommonLine = exports.printInsertLine = exports.printDeleteLine = void 0;
|
||||
|
||||
var _cleanupSemantic = require('./cleanupSemantic');
|
||||
|
||||
var _diffLines = require('./diffLines');
|
||||
|
||||
var _diffStrings = _interopRequireDefault(require('./diffStrings'));
|
||||
|
||||
var _getAlignedDiffs = _interopRequireDefault(require('./getAlignedDiffs'));
|
||||
|
||||
var _joinAlignedDiffs = require('./joinAlignedDiffs');
|
||||
|
||||
var _normalizeDiffOptions = require('./normalizeDiffOptions');
|
||||
|
||||
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.
|
||||
*/
|
||||
const formatTrailingSpaces = (line, trailingSpaceFormatter) =>
|
||||
line.replace(/\s+$/, match => trailingSpaceFormatter(match));
|
||||
|
||||
const printDiffLine = (
|
||||
line,
|
||||
isFirstOrLast,
|
||||
color,
|
||||
indicator,
|
||||
trailingSpaceFormatter,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
) =>
|
||||
line.length !== 0
|
||||
? color(
|
||||
indicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter)
|
||||
)
|
||||
: indicator !== ' '
|
||||
? color(indicator)
|
||||
: isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0
|
||||
? color(indicator + ' ' + emptyFirstOrLastLinePlaceholder)
|
||||
: '';
|
||||
|
||||
const printDeleteLine = (
|
||||
line,
|
||||
isFirstOrLast,
|
||||
{
|
||||
aColor,
|
||||
aIndicator,
|
||||
changeLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
}
|
||||
) =>
|
||||
printDiffLine(
|
||||
line,
|
||||
isFirstOrLast,
|
||||
aColor,
|
||||
aIndicator,
|
||||
changeLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
);
|
||||
|
||||
exports.printDeleteLine = printDeleteLine;
|
||||
|
||||
const printInsertLine = (
|
||||
line,
|
||||
isFirstOrLast,
|
||||
{
|
||||
bColor,
|
||||
bIndicator,
|
||||
changeLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
}
|
||||
) =>
|
||||
printDiffLine(
|
||||
line,
|
||||
isFirstOrLast,
|
||||
bColor,
|
||||
bIndicator,
|
||||
changeLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
);
|
||||
|
||||
exports.printInsertLine = printInsertLine;
|
||||
|
||||
const printCommonLine = (
|
||||
line,
|
||||
isFirstOrLast,
|
||||
{
|
||||
commonColor,
|
||||
commonIndicator,
|
||||
commonLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
}
|
||||
) =>
|
||||
printDiffLine(
|
||||
line,
|
||||
isFirstOrLast,
|
||||
commonColor,
|
||||
commonIndicator,
|
||||
commonLineTrailingSpaceColor,
|
||||
emptyFirstOrLastLinePlaceholder
|
||||
);
|
||||
|
||||
exports.printCommonLine = printCommonLine;
|
||||
|
||||
const hasCommonDiff = (diffs, isMultiline) => {
|
||||
if (isMultiline) {
|
||||
// Important: Ignore common newline that was appended to multiline strings!
|
||||
const iLast = diffs.length - 1;
|
||||
return diffs.some(
|
||||
(diff, i) =>
|
||||
diff[0] === _cleanupSemantic.DIFF_EQUAL &&
|
||||
(i !== iLast || diff[1] !== '\n')
|
||||
);
|
||||
}
|
||||
|
||||
return diffs.some(diff => diff[0] === _cleanupSemantic.DIFF_EQUAL);
|
||||
};
|
||||
|
||||
exports.hasCommonDiff = hasCommonDiff;
|
||||
|
||||
const countChanges = diffs => {
|
||||
let a = 0;
|
||||
let b = 0;
|
||||
diffs.forEach(diff => {
|
||||
switch (diff[0]) {
|
||||
case _cleanupSemantic.DIFF_DELETE:
|
||||
a += 1;
|
||||
break;
|
||||
|
||||
case _cleanupSemantic.DIFF_INSERT:
|
||||
b += 1;
|
||||
break;
|
||||
}
|
||||
});
|
||||
return {
|
||||
a,
|
||||
b
|
||||
};
|
||||
};
|
||||
|
||||
exports.countChanges = countChanges;
|
||||
|
||||
const printAnnotation = (
|
||||
{
|
||||
aAnnotation,
|
||||
aColor,
|
||||
aIndicator,
|
||||
bAnnotation,
|
||||
bColor,
|
||||
bIndicator,
|
||||
includeChangeCounts,
|
||||
omitAnnotationLines
|
||||
},
|
||||
changeCounts
|
||||
) => {
|
||||
if (omitAnnotationLines) {
|
||||
return '';
|
||||
}
|
||||
|
||||
let aRest = '';
|
||||
let bRest = '';
|
||||
|
||||
if (includeChangeCounts) {
|
||||
const aCount = String(changeCounts.a);
|
||||
const bCount = String(changeCounts.b); // Padding right aligns the ends of the annotations.
|
||||
|
||||
const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length;
|
||||
const aAnnotationPadding = ' '.repeat(Math.max(0, baAnnotationLengthDiff));
|
||||
const bAnnotationPadding = ' '.repeat(Math.max(0, -baAnnotationLengthDiff)); // Padding left aligns the ends of the counts.
|
||||
|
||||
const baCountLengthDiff = bCount.length - aCount.length;
|
||||
const aCountPadding = ' '.repeat(Math.max(0, baCountLengthDiff));
|
||||
const bCountPadding = ' '.repeat(Math.max(0, -baCountLengthDiff));
|
||||
aRest =
|
||||
aAnnotationPadding + ' ' + aIndicator + ' ' + aCountPadding + aCount;
|
||||
bRest =
|
||||
bAnnotationPadding + ' ' + bIndicator + ' ' + bCountPadding + bCount;
|
||||
}
|
||||
|
||||
return (
|
||||
aColor(aIndicator + ' ' + aAnnotation + aRest) +
|
||||
'\n' +
|
||||
bColor(bIndicator + ' ' + bAnnotation + bRest) +
|
||||
'\n\n'
|
||||
);
|
||||
};
|
||||
|
||||
exports.printAnnotation = printAnnotation;
|
||||
|
||||
const printDiffLines = (diffs, options) =>
|
||||
printAnnotation(options, countChanges(diffs)) +
|
||||
(options.expand
|
||||
? (0, _joinAlignedDiffs.joinAlignedDiffsExpand)(diffs, options)
|
||||
: (0, _joinAlignedDiffs.joinAlignedDiffsNoExpand)(diffs, options)); // In GNU diff format, indexes are one-based instead of zero-based.
|
||||
|
||||
exports.printDiffLines = printDiffLines;
|
||||
|
||||
const createPatchMark = (aStart, aEnd, bStart, bEnd, {patchColor}) =>
|
||||
patchColor(
|
||||
`@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`
|
||||
); // Compare two strings character-by-character.
|
||||
// Format as comparison lines in which changed substrings have inverse colors.
|
||||
|
||||
exports.createPatchMark = createPatchMark;
|
||||
|
||||
const diffStringsUnified = (a, b, options) => {
|
||||
if (a !== b && a.length !== 0 && b.length !== 0) {
|
||||
const isMultiline = a.includes('\n') || b.includes('\n'); // getAlignedDiffs assumes that a newline was appended to the strings.
|
||||
|
||||
const diffs = diffStringsRaw(
|
||||
isMultiline ? a + '\n' : a,
|
||||
isMultiline ? b + '\n' : b,
|
||||
true // cleanupSemantic
|
||||
);
|
||||
|
||||
if (hasCommonDiff(diffs, isMultiline)) {
|
||||
const optionsNormalized = (0, _normalizeDiffOptions.normalizeDiffOptions)(
|
||||
options
|
||||
);
|
||||
const lines = (0, _getAlignedDiffs.default)(
|
||||
diffs,
|
||||
optionsNormalized.changeColor
|
||||
);
|
||||
return printDiffLines(lines, optionsNormalized);
|
||||
}
|
||||
} // Fall back to line-by-line diff.
|
||||
|
||||
return (0, _diffLines.diffLinesUnified)(
|
||||
a.split('\n'),
|
||||
b.split('\n'),
|
||||
options
|
||||
);
|
||||
}; // Compare two strings character-by-character.
|
||||
// Optionally clean up small common substrings, also known as chaff.
|
||||
|
||||
exports.diffStringsUnified = diffStringsUnified;
|
||||
|
||||
const diffStringsRaw = (a, b, cleanup) => {
|
||||
const diffs = (0, _diffStrings.default)(a, b);
|
||||
|
||||
if (cleanup) {
|
||||
(0, _cleanupSemantic.cleanupSemantic)(diffs); // impure function
|
||||
}
|
||||
|
||||
return diffs;
|
||||
};
|
||||
|
||||
exports.diffStringsRaw = diffStringsRaw;
|
45
node_modules/jest-matcher-utils/node_modules/jest-diff/build/types.d.ts
generated
vendored
Normal file
45
node_modules/jest-matcher-utils/node_modules/jest-diff/build/types.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export declare type DiffOptionsColor = (arg: string) => string;
|
||||
export declare type DiffOptions = {
|
||||
aAnnotation?: string;
|
||||
aColor?: DiffOptionsColor;
|
||||
aIndicator?: string;
|
||||
bAnnotation?: string;
|
||||
bColor?: DiffOptionsColor;
|
||||
bIndicator?: string;
|
||||
changeColor?: DiffOptionsColor;
|
||||
changeLineTrailingSpaceColor?: DiffOptionsColor;
|
||||
commonColor?: DiffOptionsColor;
|
||||
commonIndicator?: string;
|
||||
commonLineTrailingSpaceColor?: DiffOptionsColor;
|
||||
contextLines?: number;
|
||||
emptyFirstOrLastLinePlaceholder?: string;
|
||||
expand?: boolean;
|
||||
includeChangeCounts?: boolean;
|
||||
omitAnnotationLines?: boolean;
|
||||
patchColor?: DiffOptionsColor;
|
||||
};
|
||||
export declare type DiffOptionsNormalized = {
|
||||
aAnnotation: string;
|
||||
aColor: DiffOptionsColor;
|
||||
aIndicator: string;
|
||||
bAnnotation: string;
|
||||
bColor: DiffOptionsColor;
|
||||
bIndicator: string;
|
||||
changeColor: DiffOptionsColor;
|
||||
changeLineTrailingSpaceColor: DiffOptionsColor;
|
||||
commonColor: DiffOptionsColor;
|
||||
commonIndicator: string;
|
||||
commonLineTrailingSpaceColor: DiffOptionsColor;
|
||||
contextLines: number;
|
||||
emptyFirstOrLastLinePlaceholder: string;
|
||||
expand: boolean;
|
||||
includeChangeCounts: boolean;
|
||||
omitAnnotationLines: boolean;
|
||||
patchColor: DiffOptionsColor;
|
||||
};
|
1
node_modules/jest-matcher-utils/node_modules/jest-diff/build/types.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/jest-diff/build/types.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
29
node_modules/jest-matcher-utils/node_modules/jest-diff/package.json
generated
vendored
Normal file
29
node_modules/jest-matcher-utils/node_modules/jest-diff/package.json
generated
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"name": "jest-diff",
|
||||
"version": "26.4.2",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/jest-diff"
|
||||
},
|
||||
"license": "MIT",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"diff-sequences": "^26.3.0",
|
||||
"jest-get-type": "^26.3.0",
|
||||
"pretty-format": "^26.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/test-utils": "^26.3.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "2586a798260886c28b6d28256cdfe354e039d5d1"
|
||||
}
|
21
node_modules/jest-matcher-utils/node_modules/jest-get-type/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/jest-get-type/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
12
node_modules/jest-matcher-utils/node_modules/jest-get-type/build/index.d.ts
generated
vendored
Normal file
12
node_modules/jest-matcher-utils/node_modules/jest-get-type/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
declare type ValueType = 'array' | 'bigint' | 'boolean' | 'function' | 'null' | 'number' | 'object' | 'regexp' | 'map' | 'set' | 'date' | 'string' | 'symbol' | 'undefined';
|
||||
declare function getType(value: unknown): ValueType;
|
||||
declare namespace getType {
|
||||
var isPrimitive: (value: unknown) => boolean;
|
||||
}
|
||||
export = getType;
|
51
node_modules/jest-matcher-utils/node_modules/jest-get-type/build/index.js
generated
vendored
Normal file
51
node_modules/jest-matcher-utils/node_modules/jest-get-type/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
'use strict';
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
// get the type of a value with handling the edge cases like `typeof []`
|
||||
// and `typeof null`
|
||||
function getType(value) {
|
||||
if (value === undefined) {
|
||||
return 'undefined';
|
||||
} else if (value === null) {
|
||||
return 'null';
|
||||
} else if (Array.isArray(value)) {
|
||||
return 'array';
|
||||
} else if (typeof value === 'boolean') {
|
||||
return 'boolean';
|
||||
} else if (typeof value === 'function') {
|
||||
return 'function';
|
||||
} else if (typeof value === 'number') {
|
||||
return 'number';
|
||||
} else if (typeof value === 'string') {
|
||||
return 'string';
|
||||
} else if (typeof value === 'bigint') {
|
||||
return 'bigint';
|
||||
} else if (typeof value === 'object') {
|
||||
if (value != null) {
|
||||
if (value.constructor === RegExp) {
|
||||
return 'regexp';
|
||||
} else if (value.constructor === Map) {
|
||||
return 'map';
|
||||
} else if (value.constructor === Set) {
|
||||
return 'set';
|
||||
} else if (value.constructor === Date) {
|
||||
return 'date';
|
||||
}
|
||||
}
|
||||
|
||||
return 'object';
|
||||
} else if (typeof value === 'symbol') {
|
||||
return 'symbol';
|
||||
}
|
||||
|
||||
throw new Error(`value of unknown type: ${value}`);
|
||||
}
|
||||
|
||||
getType.isPrimitive = value => Object(value) !== value;
|
||||
|
||||
module.exports = getType;
|
20
node_modules/jest-matcher-utils/node_modules/jest-get-type/package.json
generated
vendored
Normal file
20
node_modules/jest-matcher-utils/node_modules/jest-get-type/package.json
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"name": "jest-get-type",
|
||||
"description": "A utility function to get the type of a value",
|
||||
"version": "26.3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/jest-get-type"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"license": "MIT",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "3a7e06fe855515a848241bb06a6f6e117847443d"
|
||||
}
|
21
node_modules/jest-matcher-utils/node_modules/pretty-format/LICENSE
generated
vendored
Normal file
21
node_modules/jest-matcher-utils/node_modules/pretty-format/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
456
node_modules/jest-matcher-utils/node_modules/pretty-format/README.md
generated
vendored
Executable file
456
node_modules/jest-matcher-utils/node_modules/pretty-format/README.md
generated
vendored
Executable file
|
@ -0,0 +1,456 @@
|
|||
# pretty-format
|
||||
|
||||
Stringify any JavaScript value.
|
||||
|
||||
- Serialize built-in JavaScript types.
|
||||
- Serialize application-specific data types with built-in or user-defined plugins.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
$ yarn add pretty-format
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const prettyFormat = require('pretty-format'); // CommonJS
|
||||
```
|
||||
|
||||
```js
|
||||
import prettyFormat from 'pretty-format'; // ES2015 modules
|
||||
```
|
||||
|
||||
```js
|
||||
const val = {object: {}};
|
||||
val.circularReference = val;
|
||||
val[Symbol('foo')] = 'foo';
|
||||
val.map = new Map([['prop', 'value']]);
|
||||
val.array = [-0, Infinity, NaN];
|
||||
|
||||
console.log(prettyFormat(val));
|
||||
/*
|
||||
Object {
|
||||
"array": Array [
|
||||
-0,
|
||||
Infinity,
|
||||
NaN,
|
||||
],
|
||||
"circularReference": [Circular],
|
||||
"map": Map {
|
||||
"prop" => "value",
|
||||
},
|
||||
"object": Object {},
|
||||
Symbol(foo): "foo",
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
## Usage with options
|
||||
|
||||
```js
|
||||
function onClick() {}
|
||||
|
||||
console.log(prettyFormat(onClick));
|
||||
/*
|
||||
[Function onClick]
|
||||
*/
|
||||
|
||||
const options = {
|
||||
printFunctionName: false,
|
||||
};
|
||||
console.log(prettyFormat(onClick, options));
|
||||
/*
|
||||
[Function]
|
||||
*/
|
||||
```
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
| key | type | default | description |
|
||||
| :------------------ | :-------- | :--------- | :------------------------------------------------------ |
|
||||
| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |
|
||||
| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |
|
||||
| `escapeString` | `boolean` | `true` | escape special characters in strings |
|
||||
| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |
|
||||
| `indent` | `number` | `2` | spaces in each level of indentation |
|
||||
| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |
|
||||
| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |
|
||||
| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |
|
||||
| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |
|
||||
| `theme` | `object` | | colors to highlight syntax in terminal |
|
||||
|
||||
Property values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)
|
||||
|
||||
```js
|
||||
const DEFAULT_THEME = {
|
||||
comment: 'gray',
|
||||
content: 'reset',
|
||||
prop: 'yellow',
|
||||
tag: 'cyan',
|
||||
value: 'green',
|
||||
};
|
||||
```
|
||||
|
||||
## Usage with plugins
|
||||
|
||||
The `pretty-format` package provides some built-in plugins, including:
|
||||
|
||||
- `ReactElement` for elements from `react`
|
||||
- `ReactTestComponent` for test objects from `react-test-renderer`
|
||||
|
||||
```js
|
||||
// CommonJS
|
||||
const prettyFormat = require('pretty-format');
|
||||
const ReactElement = prettyFormat.plugins.ReactElement;
|
||||
const ReactTestComponent = prettyFormat.plugins.ReactTestComponent;
|
||||
|
||||
const React = require('react');
|
||||
const renderer = require('react-test-renderer');
|
||||
```
|
||||
|
||||
```js
|
||||
// ES2015 modules and destructuring assignment
|
||||
import prettyFormat from 'pretty-format';
|
||||
const {ReactElement, ReactTestComponent} = prettyFormat.plugins;
|
||||
|
||||
import React from 'react';
|
||||
import renderer from 'react-test-renderer';
|
||||
```
|
||||
|
||||
```js
|
||||
const onClick = () => {};
|
||||
const element = React.createElement('button', {onClick}, 'Hello World');
|
||||
|
||||
const formatted1 = prettyFormat(element, {
|
||||
plugins: [ReactElement],
|
||||
printFunctionName: false,
|
||||
});
|
||||
const formatted2 = prettyFormat(renderer.create(element).toJSON(), {
|
||||
plugins: [ReactTestComponent],
|
||||
printFunctionName: false,
|
||||
});
|
||||
/*
|
||||
<button
|
||||
onClick=[Function]
|
||||
>
|
||||
Hello World
|
||||
</button>
|
||||
*/
|
||||
```
|
||||
|
||||
## Usage in Jest
|
||||
|
||||
For snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.
|
||||
|
||||
To serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:
|
||||
|
||||
In an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.
|
||||
|
||||
```js
|
||||
import serializer from 'my-serializer-module';
|
||||
expect.addSnapshotSerializer(serializer);
|
||||
|
||||
// tests which have `expect(value).toMatchSnapshot()` assertions
|
||||
```
|
||||
|
||||
For **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:
|
||||
|
||||
```json
|
||||
{
|
||||
"jest": {
|
||||
"snapshotSerializers": ["my-serializer-module"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Writing plugins
|
||||
|
||||
A plugin is a JavaScript object.
|
||||
|
||||
If `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:
|
||||
|
||||
- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)
|
||||
- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)
|
||||
|
||||
### test
|
||||
|
||||
Write `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:
|
||||
|
||||
- `TypeError: Cannot read property 'whatever' of null`
|
||||
- `TypeError: Cannot read property 'whatever' of undefined`
|
||||
|
||||
For example, `test` method of built-in `ReactElement` plugin:
|
||||
|
||||
```js
|
||||
const elementSymbol = Symbol.for('react.element');
|
||||
const test = val => val && val.$$typeof === elementSymbol;
|
||||
```
|
||||
|
||||
Pay attention to efficiency in `test` because `pretty-format` calls it often.
|
||||
|
||||
### serialize
|
||||
|
||||
The **improved** interface is available in **version 21** or later.
|
||||
|
||||
Write `serialize` to return a string, given the arguments:
|
||||
|
||||
- `val` which “passed the test”
|
||||
- unchanging `config` object: derived from `options`
|
||||
- current `indentation` string: concatenate to `indent` from `config`
|
||||
- current `depth` number: compare to `maxDepth` from `config`
|
||||
- current `refs` array: find circular references in objects
|
||||
- `printer` callback function: serialize children
|
||||
|
||||
### config
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
| key | type | description |
|
||||
| :------------------ | :-------- | :------------------------------------------------------ |
|
||||
| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |
|
||||
| `colors` | `Object` | escape codes for colors to highlight syntax |
|
||||
| `escapeRegex` | `boolean` | escape special characters in regular expressions |
|
||||
| `escapeString` | `boolean` | escape special characters in strings |
|
||||
| `indent` | `string` | spaces in each level of indentation |
|
||||
| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |
|
||||
| `min` | `boolean` | minimize added space: no indentation nor line breaks |
|
||||
| `plugins` | `array` | plugins to serialize application-specific data types |
|
||||
| `printFunctionName` | `boolean` | include or omit the name of a function |
|
||||
| `spacingInner` | `strong` | spacing to separate items in a list |
|
||||
| `spacingOuter` | `strong` | spacing to enclose a list of items |
|
||||
|
||||
Each property of `colors` in `config` corresponds to a property of `theme` in `options`:
|
||||
|
||||
- the key is the same (for example, `tag`)
|
||||
- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)
|
||||
|
||||
Some properties in `config` are derived from `min` in `options`:
|
||||
|
||||
- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`
|
||||
- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`
|
||||
|
||||
### Example of serialize and test
|
||||
|
||||
This plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.
|
||||
|
||||
```js
|
||||
// We reused more code when we factored out a function for child items
|
||||
// that is independent of depth, name, and enclosing punctuation (see below).
|
||||
const SEPARATOR = ',';
|
||||
function serializeItems(items, config, indentation, depth, refs, printer) {
|
||||
if (items.length === 0) {
|
||||
return '';
|
||||
}
|
||||
const indentationItems = indentation + config.indent;
|
||||
return (
|
||||
config.spacingOuter +
|
||||
items
|
||||
.map(
|
||||
item =>
|
||||
indentationItems +
|
||||
printer(item, config, indentationItems, depth, refs), // callback
|
||||
)
|
||||
.join(SEPARATOR + config.spacingInner) +
|
||||
(config.min ? '' : SEPARATOR) + // following the last item
|
||||
config.spacingOuter +
|
||||
indentation
|
||||
);
|
||||
}
|
||||
|
||||
const plugin = {
|
||||
test(val) {
|
||||
return Array.isArray(val);
|
||||
},
|
||||
serialize(array, config, indentation, depth, refs, printer) {
|
||||
const name = array.constructor.name;
|
||||
return ++depth > config.maxDepth
|
||||
? '[' + name + ']'
|
||||
: (config.min ? '' : name + ' ') +
|
||||
'[' +
|
||||
serializeItems(array, config, indentation, depth, refs, printer) +
|
||||
']';
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
const val = {
|
||||
filter: 'completed',
|
||||
items: [
|
||||
{
|
||||
text: 'Write test',
|
||||
completed: true,
|
||||
},
|
||||
{
|
||||
text: 'Write serialize',
|
||||
completed: true,
|
||||
},
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
console.log(
|
||||
prettyFormat(val, {
|
||||
plugins: [plugin],
|
||||
}),
|
||||
);
|
||||
/*
|
||||
Object {
|
||||
"filter": "completed",
|
||||
"items": Array [
|
||||
Object {
|
||||
"completed": true,
|
||||
"text": "Write test",
|
||||
},
|
||||
Object {
|
||||
"completed": true,
|
||||
"text": "Write serialize",
|
||||
},
|
||||
],
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
```js
|
||||
console.log(
|
||||
prettyFormat(val, {
|
||||
indent: 4,
|
||||
plugins: [plugin],
|
||||
}),
|
||||
);
|
||||
/*
|
||||
Object {
|
||||
"filter": "completed",
|
||||
"items": Array [
|
||||
Object {
|
||||
"completed": true,
|
||||
"text": "Write test",
|
||||
},
|
||||
Object {
|
||||
"completed": true,
|
||||
"text": "Write serialize",
|
||||
},
|
||||
],
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
```js
|
||||
console.log(
|
||||
prettyFormat(val, {
|
||||
maxDepth: 1,
|
||||
plugins: [plugin],
|
||||
}),
|
||||
);
|
||||
/*
|
||||
Object {
|
||||
"filter": "completed",
|
||||
"items": [Array],
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
```js
|
||||
console.log(
|
||||
prettyFormat(val, {
|
||||
min: true,
|
||||
plugins: [plugin],
|
||||
}),
|
||||
);
|
||||
/*
|
||||
{"filter": "completed", "items": [{"completed": true, "text": "Write test"}, {"completed": true, "text": "Write serialize"}]}
|
||||
*/
|
||||
```
|
||||
|
||||
### print
|
||||
|
||||
The **original** interface is adequate for plugins:
|
||||
|
||||
- that **do not** depend on options other than `highlight` or `min`
|
||||
- that **do not** depend on `depth` or `refs` in recursive traversal, and
|
||||
- if values either
|
||||
- do **not** require indentation, or
|
||||
- do **not** occur as children of JavaScript data structures (for example, array)
|
||||
|
||||
Write `print` to return a string, given the arguments:
|
||||
|
||||
- `val` which “passed the test”
|
||||
- current `printer(valChild)` callback function: serialize children
|
||||
- current `indenter(lines)` callback function: indent lines at the next level
|
||||
- unchanging `config` object: derived from `options`
|
||||
- unchanging `colors` object: derived from `options`
|
||||
|
||||
The 3 properties of `config` are `min` in `options` and:
|
||||
|
||||
- `spacing` and `edgeSpacing` are **newline** if `min` is `false`
|
||||
- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`
|
||||
|
||||
Each property of `colors` corresponds to a property of `theme` in `options`:
|
||||
|
||||
- the key is the same (for example, `tag`)
|
||||
- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)
|
||||
|
||||
### Example of print and test
|
||||
|
||||
This plugin prints functions with the **number of named arguments** excluding rest argument.
|
||||
|
||||
```js
|
||||
const plugin = {
|
||||
print(val) {
|
||||
return `[Function ${val.name || 'anonymous'} ${val.length}]`;
|
||||
},
|
||||
test(val) {
|
||||
return typeof val === 'function';
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
const val = {
|
||||
onClick(event) {},
|
||||
render() {},
|
||||
};
|
||||
|
||||
prettyFormat(val, {
|
||||
plugins: [plugin],
|
||||
});
|
||||
/*
|
||||
Object {
|
||||
"onClick": [Function onClick 1],
|
||||
"render": [Function render 0],
|
||||
}
|
||||
*/
|
||||
|
||||
prettyFormat(val);
|
||||
/*
|
||||
Object {
|
||||
"onClick": [Function onClick],
|
||||
"render": [Function render],
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
This plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.
|
||||
|
||||
```js
|
||||
prettyFormat(val, {
|
||||
plugins: [pluginOld],
|
||||
printFunctionName: false,
|
||||
});
|
||||
/*
|
||||
Object {
|
||||
"onClick": [Function onClick 1],
|
||||
"render": [Function render 0],
|
||||
}
|
||||
*/
|
||||
|
||||
prettyFormat(val, {
|
||||
printFunctionName: false,
|
||||
});
|
||||
/*
|
||||
Object {
|
||||
"onClick": [Function],
|
||||
"render": [Function],
|
||||
}
|
||||
*/
|
||||
```
|
32
node_modules/jest-matcher-utils/node_modules/pretty-format/build/collections.d.ts
generated
vendored
Normal file
32
node_modules/jest-matcher-utils/node_modules/pretty-format/build/collections.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
import type { Config, Printer, Refs } from './types';
|
||||
/**
|
||||
* Return entries (for example, of a map)
|
||||
* with spacing, indentation, and comma
|
||||
* without surrounding punctuation (for example, braces)
|
||||
*/
|
||||
export declare function printIteratorEntries(iterator: Iterator<[unknown, unknown]>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer, separator?: string): string;
|
||||
/**
|
||||
* Return values (for example, of a set)
|
||||
* with spacing, indentation, and comma
|
||||
* without surrounding punctuation (braces or brackets)
|
||||
*/
|
||||
export declare function printIteratorValues(iterator: Iterator<unknown>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer): string;
|
||||
/**
|
||||
* Return items (for example, of an array)
|
||||
* with spacing, indentation, and comma
|
||||
* without surrounding punctuation (for example, brackets)
|
||||
**/
|
||||
export declare function printListItems(list: ArrayLike<unknown>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer): string;
|
||||
/**
|
||||
* Return properties of an object
|
||||
* with spacing, indentation, and comma
|
||||
* without surrounding punctuation (for example, braces)
|
||||
*/
|
||||
export declare function printObjectProperties(val: Record<string, unknown>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer): string;
|
185
node_modules/jest-matcher-utils/node_modules/pretty-format/build/collections.js
generated
vendored
Normal file
185
node_modules/jest-matcher-utils/node_modules/pretty-format/build/collections.js
generated
vendored
Normal file
|
@ -0,0 +1,185 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.printIteratorEntries = printIteratorEntries;
|
||||
exports.printIteratorValues = printIteratorValues;
|
||||
exports.printListItems = printListItems;
|
||||
exports.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 => {
|
||||
const keys = Object.keys(object).sort();
|
||||
|
||||
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 +
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
37
node_modules/jest-matcher-utils/node_modules/pretty-format/build/index.d.ts
generated
vendored
Normal file
37
node_modules/jest-matcher-utils/node_modules/pretty-format/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type * as PrettyFormat from './types';
|
||||
/**
|
||||
* Returns a presentation string of your `val` object
|
||||
* @param val any potential JavaScript object
|
||||
* @param options Custom settings
|
||||
*/
|
||||
declare function prettyFormat(val: unknown, options?: PrettyFormat.OptionsReceived): string;
|
||||
declare namespace prettyFormat {
|
||||
var plugins: {
|
||||
AsymmetricMatcher: PrettyFormat.NewPlugin;
|
||||
ConvertAnsi: PrettyFormat.NewPlugin;
|
||||
DOMCollection: PrettyFormat.NewPlugin;
|
||||
DOMElement: PrettyFormat.NewPlugin;
|
||||
Immutable: PrettyFormat.NewPlugin;
|
||||
ReactElement: PrettyFormat.NewPlugin;
|
||||
ReactTestComponent: PrettyFormat.NewPlugin;
|
||||
};
|
||||
}
|
||||
declare namespace prettyFormat {
|
||||
type Colors = PrettyFormat.Colors;
|
||||
type Config = PrettyFormat.Config;
|
||||
type Options = PrettyFormat.Options;
|
||||
type OptionsReceived = PrettyFormat.OptionsReceived;
|
||||
type OldPlugin = PrettyFormat.OldPlugin;
|
||||
type NewPlugin = PrettyFormat.NewPlugin;
|
||||
type Plugin = PrettyFormat.Plugin;
|
||||
type Plugins = PrettyFormat.Plugins;
|
||||
type Refs = PrettyFormat.Refs;
|
||||
type Theme = PrettyFormat.Theme;
|
||||
}
|
||||
export = prettyFormat;
|
559
node_modules/jest-matcher-utils/node_modules/pretty-format/build/index.js
generated
vendored
Normal file
559
node_modules/jest-matcher-utils/node_modules/pretty-format/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,559 @@
|
|||
'use strict';
|
||||
|
||||
var _ansiStyles = _interopRequireDefault(require('ansi-styles'));
|
||||
|
||||
var _collections = require('./collections');
|
||||
|
||||
var _AsymmetricMatcher = _interopRequireDefault(
|
||||
require('./plugins/AsymmetricMatcher')
|
||||
);
|
||||
|
||||
var _ConvertAnsi = _interopRequireDefault(require('./plugins/ConvertAnsi'));
|
||||
|
||||
var _DOMCollection = _interopRequireDefault(require('./plugins/DOMCollection'));
|
||||
|
||||
var _DOMElement = _interopRequireDefault(require('./plugins/DOMElement'));
|
||||
|
||||
var _Immutable = _interopRequireDefault(require('./plugins/Immutable'));
|
||||
|
||||
var _ReactElement = _interopRequireDefault(require('./plugins/ReactElement'));
|
||||
|
||||
var _ReactTestComponent = _interopRequireDefault(
|
||||
require('./plugins/ReactTestComponent')
|
||||
);
|
||||
|
||||
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.
|
||||
*/
|
||||
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/master/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 ? '' : 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 ? '' : 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,
|
||||
escapeRegex: false,
|
||||
escapeString: true,
|
||||
highlight: false,
|
||||
indent: 2,
|
||||
maxDepth: Infinity,
|
||||
min: false,
|
||||
plugins: [],
|
||||
printFunctionName: true,
|
||||
theme: DEFAULT_THEME
|
||||
};
|
||||
|
||||
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 => ({
|
||||
callToJSON:
|
||||
options && options.callToJSON !== undefined
|
||||
? options.callToJSON
|
||||
: DEFAULT_OPTIONS.callToJSON,
|
||||
colors:
|
||||
options && options.highlight
|
||||
? getColorsHighlight(options)
|
||||
: getColorsEmpty(),
|
||||
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,
|
||||
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 prettyFormat(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, []);
|
||||
}
|
||||
|
||||
prettyFormat.plugins = {
|
||||
AsymmetricMatcher: _AsymmetricMatcher.default,
|
||||
ConvertAnsi: _ConvertAnsi.default,
|
||||
DOMCollection: _DOMCollection.default,
|
||||
DOMElement: _DOMElement.default,
|
||||
Immutable: _Immutable.default,
|
||||
ReactElement: _ReactElement.default,
|
||||
ReactTestComponent: _ReactTestComponent.default
|
||||
}; // eslint-disable-next-line no-redeclare
|
||||
|
||||
module.exports = prettyFormat;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/AsymmetricMatcher.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/AsymmetricMatcher.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
export declare const test: NewPlugin['test'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
103
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/AsymmetricMatcher.js
generated
vendored
Normal file
103
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/AsymmetricMatcher.js
generated
vendored
Normal file
|
@ -0,0 +1,103 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.test = exports.serialize = void 0;
|
||||
|
||||
var _collections = require('../collections');
|
||||
|
||||
var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
|
||||
const asymmetricMatcher =
|
||||
typeof Symbol === 'function' && Symbol.for
|
||||
? Symbol.for('jest.asymmetricMatcher')
|
||||
: 0x1357a5;
|
||||
const SPACE = ' ';
|
||||
|
||||
const serialize = (val, config, indentation, depth, refs, printer) => {
|
||||
const stringedValue = val.toString();
|
||||
|
||||
if (
|
||||
stringedValue === 'ArrayContaining' ||
|
||||
stringedValue === 'ArrayNotContaining'
|
||||
) {
|
||||
if (++depth > config.maxDepth) {
|
||||
return '[' + stringedValue + ']';
|
||||
}
|
||||
|
||||
return (
|
||||
stringedValue +
|
||||
SPACE +
|
||||
'[' +
|
||||
(0, _collections.printListItems)(
|
||||
val.sample,
|
||||
config,
|
||||
indentation,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
) +
|
||||
']'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
stringedValue === 'ObjectContaining' ||
|
||||
stringedValue === 'ObjectNotContaining'
|
||||
) {
|
||||
if (++depth > config.maxDepth) {
|
||||
return '[' + stringedValue + ']';
|
||||
}
|
||||
|
||||
return (
|
||||
stringedValue +
|
||||
SPACE +
|
||||
'{' +
|
||||
(0, _collections.printObjectProperties)(
|
||||
val.sample,
|
||||
config,
|
||||
indentation,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
) +
|
||||
'}'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
stringedValue === 'StringMatching' ||
|
||||
stringedValue === 'StringNotMatching'
|
||||
) {
|
||||
return (
|
||||
stringedValue +
|
||||
SPACE +
|
||||
printer(val.sample, config, indentation, depth, refs)
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
stringedValue === 'StringContaining' ||
|
||||
stringedValue === 'StringNotContaining'
|
||||
) {
|
||||
return (
|
||||
stringedValue +
|
||||
SPACE +
|
||||
printer(val.sample, config, indentation, depth, refs)
|
||||
);
|
||||
}
|
||||
|
||||
return val.toAsymmetricMatcher();
|
||||
};
|
||||
|
||||
exports.serialize = serialize;
|
||||
|
||||
const test = val => val && val.$$typeof === asymmetricMatcher;
|
||||
|
||||
exports.test = test;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ConvertAnsi.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ConvertAnsi.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const test: NewPlugin['test'];
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
96
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ConvertAnsi.js
generated
vendored
Normal file
96
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ConvertAnsi.js
generated
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.serialize = exports.test = void 0;
|
||||
|
||||
var _ansiRegex = _interopRequireDefault(require('ansi-regex'));
|
||||
|
||||
var _ansiStyles = _interopRequireDefault(require('ansi-styles'));
|
||||
|
||||
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.
|
||||
*/
|
||||
const toHumanReadableAnsi = text =>
|
||||
text.replace((0, _ansiRegex.default)(), match => {
|
||||
switch (match) {
|
||||
case _ansiStyles.default.red.close:
|
||||
case _ansiStyles.default.green.close:
|
||||
case _ansiStyles.default.cyan.close:
|
||||
case _ansiStyles.default.gray.close:
|
||||
case _ansiStyles.default.white.close:
|
||||
case _ansiStyles.default.yellow.close:
|
||||
case _ansiStyles.default.bgRed.close:
|
||||
case _ansiStyles.default.bgGreen.close:
|
||||
case _ansiStyles.default.bgYellow.close:
|
||||
case _ansiStyles.default.inverse.close:
|
||||
case _ansiStyles.default.dim.close:
|
||||
case _ansiStyles.default.bold.close:
|
||||
case _ansiStyles.default.reset.open:
|
||||
case _ansiStyles.default.reset.close:
|
||||
return '</>';
|
||||
|
||||
case _ansiStyles.default.red.open:
|
||||
return '<red>';
|
||||
|
||||
case _ansiStyles.default.green.open:
|
||||
return '<green>';
|
||||
|
||||
case _ansiStyles.default.cyan.open:
|
||||
return '<cyan>';
|
||||
|
||||
case _ansiStyles.default.gray.open:
|
||||
return '<gray>';
|
||||
|
||||
case _ansiStyles.default.white.open:
|
||||
return '<white>';
|
||||
|
||||
case _ansiStyles.default.yellow.open:
|
||||
return '<yellow>';
|
||||
|
||||
case _ansiStyles.default.bgRed.open:
|
||||
return '<bgRed>';
|
||||
|
||||
case _ansiStyles.default.bgGreen.open:
|
||||
return '<bgGreen>';
|
||||
|
||||
case _ansiStyles.default.bgYellow.open:
|
||||
return '<bgYellow>';
|
||||
|
||||
case _ansiStyles.default.inverse.open:
|
||||
return '<inverse>';
|
||||
|
||||
case _ansiStyles.default.dim.open:
|
||||
return '<dim>';
|
||||
|
||||
case _ansiStyles.default.bold.open:
|
||||
return '<bold>';
|
||||
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
});
|
||||
|
||||
const test = val =>
|
||||
typeof val === 'string' && !!val.match((0, _ansiRegex.default)());
|
||||
|
||||
exports.test = test;
|
||||
|
||||
const serialize = (val, config, indentation, depth, refs, printer) =>
|
||||
printer(toHumanReadableAnsi(val), config, indentation, depth, refs);
|
||||
|
||||
exports.serialize = serialize;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMCollection.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMCollection.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const test: NewPlugin['test'];
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
78
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMCollection.js
generated
vendored
Normal file
78
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMCollection.js
generated
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.serialize = exports.test = void 0;
|
||||
|
||||
var _collections = require('../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.
|
||||
*/
|
||||
const SPACE = ' ';
|
||||
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 = val =>
|
||||
val &&
|
||||
val.constructor &&
|
||||
!!val.constructor.name &&
|
||||
testName(val.constructor.name);
|
||||
|
||||
exports.test = test;
|
||||
|
||||
const isNamedNodeMap = collection =>
|
||||
collection.constructor.name === 'NamedNodeMap';
|
||||
|
||||
const serialize = (collection, config, indentation, depth, refs, printer) => {
|
||||
const name = collection.constructor.name;
|
||||
|
||||
if (++depth > config.maxDepth) {
|
||||
return '[' + name + ']';
|
||||
}
|
||||
|
||||
return (
|
||||
(config.min ? '' : name + SPACE) +
|
||||
(OBJECT_NAMES.indexOf(name) !== -1
|
||||
? '{' +
|
||||
(0, _collections.printObjectProperties)(
|
||||
isNamedNodeMap(collection)
|
||||
? Array.from(collection).reduce((props, attribute) => {
|
||||
props[attribute.name] = attribute.value;
|
||||
return props;
|
||||
}, {})
|
||||
: {...collection},
|
||||
config,
|
||||
indentation,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
) +
|
||||
'}'
|
||||
: '[' +
|
||||
(0, _collections.printListItems)(
|
||||
Array.from(collection),
|
||||
config,
|
||||
indentation,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
) +
|
||||
']')
|
||||
);
|
||||
};
|
||||
|
||||
exports.serialize = serialize;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMElement.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMElement.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const test: NewPlugin['test'];
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
125
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMElement.js
generated
vendored
Normal file
125
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/DOMElement.js
generated
vendored
Normal file
|
@ -0,0 +1,125 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.serialize = exports.test = void 0;
|
||||
|
||||
var _markup = require('./lib/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 testNode = val => {
|
||||
var _val$hasAttribute;
|
||||
|
||||
const constructorName = val.constructor.name;
|
||||
const {nodeType, tagName} = val;
|
||||
const isCustomElement =
|
||||
(typeof tagName === 'string' && tagName.includes('-')) ||
|
||||
((_val$hasAttribute = val.hasAttribute) === null ||
|
||||
_val$hasAttribute === void 0
|
||||
? void 0
|
||||
: _val$hasAttribute.call(val, 'is'));
|
||||
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 = 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)
|
||||
);
|
||||
};
|
||||
|
||||
exports.test = test;
|
||||
|
||||
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 = (node, config, indentation, depth, refs, printer) => {
|
||||
if (nodeIsText(node)) {
|
||||
return (0, _markup.printText)(node.data, config);
|
||||
}
|
||||
|
||||
if (nodeIsComment(node)) {
|
||||
return (0, _markup.printComment)(node.data, config);
|
||||
}
|
||||
|
||||
const type = nodeIsFragment(node)
|
||||
? `DocumentFragment`
|
||||
: node.tagName.toLowerCase();
|
||||
|
||||
if (++depth > config.maxDepth) {
|
||||
return (0, _markup.printElementAsLeaf)(type, config);
|
||||
}
|
||||
|
||||
return (0, _markup.printElement)(
|
||||
type,
|
||||
(0, _markup.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.printChildren)(
|
||||
Array.prototype.slice.call(node.childNodes || node.children),
|
||||
config,
|
||||
indentation + config.indent,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
),
|
||||
config,
|
||||
indentation
|
||||
);
|
||||
};
|
||||
|
||||
exports.serialize = serialize;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/Immutable.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/Immutable.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
export declare const test: NewPlugin['test'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
247
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/Immutable.js
generated
vendored
Normal file
247
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/Immutable.js
generated
vendored
Normal file
|
@ -0,0 +1,247 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.test = exports.serialize = void 0;
|
||||
|
||||
var _collections = require('../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.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.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.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.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.printIteratorValues)(
|
||||
val.values(),
|
||||
config,
|
||||
indentation,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
) +
|
||||
']';
|
||||
|
||||
const serialize = (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.
|
||||
|
||||
exports.serialize = serialize;
|
||||
|
||||
const test = val =>
|
||||
val &&
|
||||
(val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true);
|
||||
|
||||
exports.test = test;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactElement.d.ts
generated
vendored
Normal file
11
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactElement.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
export declare const test: NewPlugin['test'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
166
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactElement.js
generated
vendored
Normal file
166
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactElement.js
generated
vendored
Normal file
|
@ -0,0 +1,166 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.test = exports.serialize = void 0;
|
||||
|
||||
var ReactIs = _interopRequireWildcard(require('react-is'));
|
||||
|
||||
var _markup = require('./lib/markup');
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (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 = element => {
|
||||
const {props} = element;
|
||||
return Object.keys(props)
|
||||
.filter(key => key !== 'children' && props[key] !== undefined)
|
||||
.sort();
|
||||
};
|
||||
|
||||
const serialize = (element, config, indentation, depth, refs, printer) =>
|
||||
++depth > config.maxDepth
|
||||
? (0, _markup.printElementAsLeaf)(getType(element), config)
|
||||
: (0, _markup.printElement)(
|
||||
getType(element),
|
||||
(0, _markup.printProps)(
|
||||
getPropKeys(element),
|
||||
element.props,
|
||||
config,
|
||||
indentation + config.indent,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
),
|
||||
(0, _markup.printChildren)(
|
||||
getChildren(element.props.children),
|
||||
config,
|
||||
indentation + config.indent,
|
||||
depth,
|
||||
refs,
|
||||
printer
|
||||
),
|
||||
config,
|
||||
indentation
|
||||
);
|
||||
|
||||
exports.serialize = serialize;
|
||||
|
||||
const test = val => val && ReactIs.isElement(val);
|
||||
|
||||
exports.test = test;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
18
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactTestComponent.d.ts
generated
vendored
Normal file
18
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactTestComponent.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { NewPlugin } from '../types';
|
||||
export declare type ReactTestObject = {
|
||||
$$typeof: symbol;
|
||||
type: string;
|
||||
props?: Record<string, unknown>;
|
||||
children?: null | Array<ReactTestChild>;
|
||||
};
|
||||
declare type ReactTestChild = ReactTestObject | string | number;
|
||||
export declare const serialize: NewPlugin['serialize'];
|
||||
export declare const test: NewPlugin['test'];
|
||||
declare const plugin: NewPlugin;
|
||||
export default plugin;
|
65
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactTestComponent.js
generated
vendored
Normal file
65
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/ReactTestComponent.js
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = exports.test = exports.serialize = void 0;
|
||||
|
||||
var _markup = require('./lib/markup');
|
||||
|
||||
var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
|
||||
const testSymbol =
|
||||
typeof Symbol === 'function' && Symbol.for
|
||||
? Symbol.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
|
||||
);
|
||||
|
||||
exports.serialize = serialize;
|
||||
|
||||
const test = val => val && val.$$typeof === testSymbol;
|
||||
|
||||
exports.test = test;
|
||||
const plugin = {
|
||||
serialize,
|
||||
test
|
||||
};
|
||||
var _default = plugin;
|
||||
exports.default = _default;
|
7
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/escapeHTML.d.ts
generated
vendored
Normal file
7
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/escapeHTML.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export default function escapeHTML(str: string): string;
|
16
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/escapeHTML.js
generated
vendored
Normal file
16
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/escapeHTML.js
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.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, '>');
|
||||
}
|
13
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/markup.d.ts
generated
vendored
Normal file
13
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/markup.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
import type { Config, Printer, Refs } from '../../types';
|
||||
export declare const printProps: (keys: Array<string>, props: Record<string, unknown>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer) => string;
|
||||
export declare const printChildren: (children: Array<any>, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer) => string;
|
||||
export declare const printText: (text: string, config: Config) => string;
|
||||
export declare const printComment: (comment: string, config: Config) => string;
|
||||
export declare const printElement: (type: string, printedProps: string, printedChildren: string, config: Config, indentation: string) => string;
|
||||
export declare const printElementAsLeaf: (type: string, config: Config) => string;
|
147
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/markup.js
generated
vendored
Normal file
147
node_modules/jest-matcher-utils/node_modules/pretty-format/build/plugins/lib/markup.js
generated
vendored
Normal file
|
@ -0,0 +1,147 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.printElementAsLeaf = exports.printElement = exports.printComment = exports.printText = exports.printChildren = exports.printProps = void 0;
|
||||
|
||||
var _escapeHTML = _interopRequireDefault(require('./escapeHTML'));
|
||||
|
||||
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.
|
||||
*/
|
||||
// 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.
|
||||
|
||||
exports.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('');
|
||||
|
||||
exports.printChildren = printChildren;
|
||||
|
||||
const printText = (text, config) => {
|
||||
const contentColor = config.colors.content;
|
||||
return (
|
||||
contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close
|
||||
);
|
||||
};
|
||||
|
||||
exports.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.
|
||||
|
||||
exports.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
|
||||
);
|
||||
};
|
||||
|
||||
exports.printElement = printElement;
|
||||
|
||||
const printElementAsLeaf = (type, config) => {
|
||||
const tagColor = config.colors.tag;
|
||||
return (
|
||||
tagColor.open +
|
||||
'<' +
|
||||
type +
|
||||
tagColor.close +
|
||||
' …' +
|
||||
tagColor.open +
|
||||
' />' +
|
||||
tagColor.close
|
||||
);
|
||||
};
|
||||
|
||||
exports.printElementAsLeaf = printElementAsLeaf;
|
100
node_modules/jest-matcher-utils/node_modules/pretty-format/build/types.d.ts
generated
vendored
Normal file
100
node_modules/jest-matcher-utils/node_modules/pretty-format/build/types.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,100 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
export declare type Colors = {
|
||||
comment: {
|
||||
close: string;
|
||||
open: string;
|
||||
};
|
||||
content: {
|
||||
close: string;
|
||||
open: string;
|
||||
};
|
||||
prop: {
|
||||
close: string;
|
||||
open: string;
|
||||
};
|
||||
tag: {
|
||||
close: string;
|
||||
open: string;
|
||||
};
|
||||
value: {
|
||||
close: string;
|
||||
open: string;
|
||||
};
|
||||
};
|
||||
declare type Indent = (arg0: string) => string;
|
||||
export declare type Refs = Array<unknown>;
|
||||
declare type Print = (arg0: unknown) => string;
|
||||
export declare type Theme = {
|
||||
comment: string;
|
||||
content: string;
|
||||
prop: string;
|
||||
tag: string;
|
||||
value: string;
|
||||
};
|
||||
declare type ThemeReceived = {
|
||||
comment?: string;
|
||||
content?: string;
|
||||
prop?: string;
|
||||
tag?: string;
|
||||
value?: string;
|
||||
};
|
||||
export declare type Options = {
|
||||
callToJSON: boolean;
|
||||
escapeRegex: boolean;
|
||||
escapeString: boolean;
|
||||
highlight: boolean;
|
||||
indent: number;
|
||||
maxDepth: number;
|
||||
min: boolean;
|
||||
plugins: Plugins;
|
||||
printFunctionName: boolean;
|
||||
theme: Theme;
|
||||
};
|
||||
export declare type OptionsReceived = {
|
||||
callToJSON?: boolean;
|
||||
escapeRegex?: boolean;
|
||||
escapeString?: boolean;
|
||||
highlight?: boolean;
|
||||
indent?: number;
|
||||
maxDepth?: number;
|
||||
min?: boolean;
|
||||
plugins?: Plugins;
|
||||
printFunctionName?: boolean;
|
||||
theme?: ThemeReceived;
|
||||
};
|
||||
export declare type Config = {
|
||||
callToJSON: boolean;
|
||||
colors: Colors;
|
||||
escapeRegex: boolean;
|
||||
escapeString: boolean;
|
||||
indent: string;
|
||||
maxDepth: number;
|
||||
min: boolean;
|
||||
plugins: Plugins;
|
||||
printFunctionName: boolean;
|
||||
spacingInner: string;
|
||||
spacingOuter: string;
|
||||
};
|
||||
export declare type Printer = (val: unknown, config: Config, indentation: string, depth: number, refs: Refs, hasCalledToJSON?: boolean) => string;
|
||||
declare type Test = (arg0: any) => boolean;
|
||||
export declare type NewPlugin = {
|
||||
serialize: (val: any, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer) => string;
|
||||
test: Test;
|
||||
};
|
||||
declare type PluginOptions = {
|
||||
edgeSpacing: string;
|
||||
min: boolean;
|
||||
spacing: string;
|
||||
};
|
||||
export declare type OldPlugin = {
|
||||
print: (val: unknown, print: Print, indent: Indent, options: PluginOptions, colors: Colors) => string;
|
||||
test: Test;
|
||||
};
|
||||
export declare type Plugin = NewPlugin | OldPlugin;
|
||||
export declare type Plugins = Array<Plugin>;
|
||||
export {};
|
1
node_modules/jest-matcher-utils/node_modules/pretty-format/build/types.js
generated
vendored
Normal file
1
node_modules/jest-matcher-utils/node_modules/pretty-format/build/types.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
37
node_modules/jest-matcher-utils/node_modules/pretty-format/package.json
generated
vendored
Normal file
37
node_modules/jest-matcher-utils/node_modules/pretty-format/package.json
generated
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"name": "pretty-format",
|
||||
"version": "26.4.2",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/pretty-format"
|
||||
},
|
||||
"license": "MIT",
|
||||
"description": "Stringify any JavaScript value.",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"author": "James Kyle <me@thejameskyle.com>",
|
||||
"dependencies": {
|
||||
"@jest/types": "^26.3.0",
|
||||
"ansi-regex": "^5.0.0",
|
||||
"ansi-styles": "^4.0.0",
|
||||
"react-is": "^16.12.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "*",
|
||||
"@types/react-is": "^16.7.1",
|
||||
"@types/react-test-renderer": "*",
|
||||
"immutable": "4.0.0-rc.9",
|
||||
"jest-util": "^26.3.0",
|
||||
"react": "*",
|
||||
"react-dom": "*",
|
||||
"react-test-renderer": "*"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "2586a798260886c28b6d28256cdfe354e039d5d1"
|
||||
}
|
30
node_modules/jest-matcher-utils/package.json
generated
vendored
Normal file
30
node_modules/jest-matcher-utils/package.json
generated
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"name": "jest-matcher-utils",
|
||||
"description": "A set of utility functions for expect and related packages",
|
||||
"version": "26.4.2",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest.git",
|
||||
"directory": "packages/jest-matcher-utils"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"license": "MIT",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"jest-diff": "^26.4.2",
|
||||
"jest-get-type": "^26.3.0",
|
||||
"pretty-format": "^26.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/test-utils": "^26.3.0",
|
||||
"@types/node": "*"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "2586a798260886c28b6d28256cdfe354e039d5d1"
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue