aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jest-snapshot
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jest-snapshot')
-rw-r--r--node_modules/jest-snapshot/LICENSE21
-rw-r--r--node_modules/jest-snapshot/build/InlineSnapshots.d.ts15
-rw-r--r--node_modules/jest-snapshot/build/InlineSnapshots.js503
-rw-r--r--node_modules/jest-snapshot/build/SnapshotResolver.d.ts18
-rw-r--r--node_modules/jest-snapshot/build/SnapshotResolver.js179
-rw-r--r--node_modules/jest-snapshot/build/State.d.ts62
-rw-r--r--node_modules/jest-snapshot/build/State.js389
-rw-r--r--node_modules/jest-snapshot/build/colors.d.ts15
-rw-r--r--node_modules/jest-snapshot/build/colors.js38
-rw-r--r--node_modules/jest-snapshot/build/dedentLines.d.ts7
-rw-r--r--node_modules/jest-snapshot/build/dedentLines.js149
-rw-r--r--node_modules/jest-snapshot/build/index.d.ts34
-rw-r--r--node_modules/jest-snapshot/build/index.js645
-rw-r--r--node_modules/jest-snapshot/build/mockSerializer.d.ts11
-rw-r--r--node_modules/jest-snapshot/build/mockSerializer.js52
-rw-r--r--node_modules/jest-snapshot/build/plugins.d.ts9
-rw-r--r--node_modules/jest-snapshot/build/plugins.js48
-rw-r--r--node_modules/jest-snapshot/build/printSnapshot.d.ts24
-rw-r--r--node_modules/jest-snapshot/build/printSnapshot.js407
-rw-r--r--node_modules/jest-snapshot/build/types.d.ts25
-rw-r--r--node_modules/jest-snapshot/build/types.js1
-rw-r--r--node_modules/jest-snapshot/build/utils.d.ts28
-rw-r--r--node_modules/jest-snapshot/build/utils.js460
l---------node_modules/jest-snapshot/node_modules/.bin/semver1
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/CHANGELOG.md111
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/LICENSE15
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/README.md566
-rwxr-xr-xnode_modules/jest-snapshot/node_modules/semver/bin/semver.js173
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/classes/comparator.js135
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/classes/index.js5
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/classes/range.js510
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/classes/semver.js287
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/clean.js6
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/cmp.js48
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/coerce.js51
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js7
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/compare.js5
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/diff.js23
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/eq.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/gt.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/gte.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/inc.js15
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/lt.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/lte.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/major.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/minor.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/neq.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/parse.js33
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/patch.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js6
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/rsort.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js10
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/sort.js3
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/functions/valid.js6
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/index.js48
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/internal/constants.js17
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/internal/debug.js9
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js23
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js11
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/internal/re.js182
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/package.json41
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/preload.js2
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/range.bnf16
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js4
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js7
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js4
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js25
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js24
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js60
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/outside.js80
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js44
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/subset.js222
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js8
-rw-r--r--node_modules/jest-snapshot/node_modules/semver/ranges/valid.js11
-rw-r--r--node_modules/jest-snapshot/package.json61
77 files changed, 6091 insertions, 0 deletions
diff --git a/node_modules/jest-snapshot/LICENSE b/node_modules/jest-snapshot/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/jest-snapshot/LICENSE
@@ -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.
diff --git a/node_modules/jest-snapshot/build/InlineSnapshots.d.ts b/node_modules/jest-snapshot/build/InlineSnapshots.d.ts
new file mode 100644
index 0000000..a93ff53
--- /dev/null
+++ b/node_modules/jest-snapshot/build/InlineSnapshots.d.ts
@@ -0,0 +1,15 @@
+/**
+ * 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 { Expression } from '@babel/types';
+import type { Config } from '@jest/types';
+import type { Frame } from 'jest-message-util';
+export declare type InlineSnapshot = {
+ snapshot: string;
+ frame: Frame;
+ node?: Expression;
+};
+export declare function saveInlineSnapshots(snapshots: Array<InlineSnapshot>, prettierPath: Config.Path): void;
diff --git a/node_modules/jest-snapshot/build/InlineSnapshots.js b/node_modules/jest-snapshot/build/InlineSnapshots.js
new file mode 100644
index 0000000..8e20fe9
--- /dev/null
+++ b/node_modules/jest-snapshot/build/InlineSnapshots.js
@@ -0,0 +1,503 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.saveInlineSnapshots = saveInlineSnapshots;
+
+var path = _interopRequireWildcard(require('path'));
+
+var fs = _interopRequireWildcard(require('graceful-fs'));
+
+var _semver = _interopRequireDefault(require('semver'));
+
+var _utils = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestWriteFile =
+ global[Symbol.for('jest-native-write-file')] || fs.writeFileSync;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestReadFile =
+ global[Symbol.for('jest-native-read-file')] || fs.readFileSync;
+
+// prettier-ignore
+const babelTraverse = // @ts-expect-error requireOutside Babel transform
+require(require.resolve('@babel/traverse', {
+ [(global['jest-symbol-do-not-touch'] || global.Symbol).for('jest-resolve-outside-vm-option')]: true
+})).default; // prettier-ignore
+
+const generate = require(require.resolve('@babel/generator', { // @ts-expect-error requireOutside Babel transform
+ [(global['jest-symbol-do-not-touch'] || global.Symbol).for(
+ 'jest-resolve-outside-vm-option'
+ )]: true
+})).default; // @ts-expect-error requireOutside Babel transform
+
+const {file, templateElement, templateLiteral} = require(require.resolve(
+ '@babel/types',
+ {
+ [(global['jest-symbol-do-not-touch'] || global.Symbol).for(
+ 'jest-resolve-outside-vm-option'
+ )]: true
+ }
+)); // @ts-expect-error requireOutside Babel transform
+
+const {parseSync} = require(require.resolve('@babel/core', {
+ [(global['jest-symbol-do-not-touch'] || global.Symbol).for(
+ 'jest-resolve-outside-vm-option'
+ )]: true
+}));
+
+function saveInlineSnapshots(snapshots, prettierPath) {
+ let prettier = null;
+
+ if (prettierPath) {
+ try {
+ // @ts-expect-error requireOutside Babel transform
+ prettier = require(require.resolve(prettierPath, {
+ [(global['jest-symbol-do-not-touch'] || global.Symbol).for(
+ 'jest-resolve-outside-vm-option'
+ )]: true
+ }));
+ } catch {
+ // Continue even if prettier is not installed.
+ }
+ }
+
+ const snapshotsByFile = groupSnapshotsByFile(snapshots);
+
+ for (const sourceFilePath of Object.keys(snapshotsByFile)) {
+ saveSnapshotsForFile(
+ snapshotsByFile[sourceFilePath],
+ sourceFilePath,
+ prettier && _semver.default.gte(prettier.version, '1.5.0')
+ ? prettier
+ : undefined
+ );
+ }
+}
+
+const saveSnapshotsForFile = (snapshots, sourceFilePath, prettier) => {
+ const sourceFile = jestReadFile(sourceFilePath, 'utf8'); // TypeScript projects may not have a babel config; make sure they can be parsed anyway.
+
+ const presets = [require.resolve('babel-preset-current-node-syntax')];
+ const plugins = [];
+
+ if (/\.tsx?$/.test(sourceFilePath)) {
+ plugins.push([
+ require.resolve('@babel/plugin-syntax-typescript'),
+ {
+ isTSX: sourceFilePath.endsWith('x')
+ }, // unique name to make sure Babel does not complain about a possible duplicate plugin.
+ 'TypeScript syntax plugin added by Jest snapshot'
+ ]);
+ } // Record the matcher names seen during traversal and pass them down one
+ // by one to formatting parser.
+
+ const snapshotMatcherNames = [];
+ const ast = parseSync(sourceFile, {
+ filename: sourceFilePath,
+ plugins,
+ presets,
+ root: path.dirname(sourceFilePath)
+ });
+
+ if (!ast) {
+ throw new Error(`jest-snapshot: Failed to parse ${sourceFilePath}`);
+ }
+
+ traverseAst(snapshots, ast, snapshotMatcherNames); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off.
+
+ const sourceFileWithSnapshots = snapshots.reduceRight(
+ (sourceSoFar, nextSnapshot) => {
+ if (
+ !nextSnapshot.node ||
+ typeof nextSnapshot.node.start !== 'number' ||
+ typeof nextSnapshot.node.end !== 'number'
+ ) {
+ throw new Error('Jest: no snapshot insert location found');
+ }
+
+ return (
+ sourceSoFar.slice(0, nextSnapshot.node.start) +
+ generate(nextSnapshot.node, {
+ retainLines: true
+ }).code.trim() +
+ sourceSoFar.slice(nextSnapshot.node.end)
+ );
+ },
+ sourceFile
+ );
+ const newSourceFile = prettier
+ ? runPrettier(
+ prettier,
+ sourceFilePath,
+ sourceFileWithSnapshots,
+ snapshotMatcherNames
+ )
+ : sourceFileWithSnapshots;
+
+ if (newSourceFile !== sourceFile) {
+ jestWriteFile(sourceFilePath, newSourceFile);
+ }
+};
+
+const groupSnapshotsBy = createKey => snapshots =>
+ snapshots.reduce((object, inlineSnapshot) => {
+ const key = createKey(inlineSnapshot);
+ return {...object, [key]: (object[key] || []).concat(inlineSnapshot)};
+ }, {});
+
+const groupSnapshotsByFrame = groupSnapshotsBy(({frame: {line, column}}) =>
+ typeof line === 'number' && typeof column === 'number'
+ ? `${line}:${column - 1}`
+ : ''
+);
+const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file);
+
+const indent = (snapshot, numIndents, indentation) => {
+ const lines = snapshot.split('\n'); // Prevent re-indentation of inline snapshots.
+
+ if (
+ lines.length >= 2 &&
+ lines[1].startsWith(indentation.repeat(numIndents + 1))
+ ) {
+ return snapshot;
+ }
+
+ return lines
+ .map((line, index) => {
+ if (index === 0) {
+ // First line is either a 1-line snapshot or a blank line.
+ return line;
+ } else if (index !== lines.length - 1) {
+ // Do not indent empty lines.
+ if (line === '') {
+ return line;
+ } // Not last line, indent one level deeper than expect call.
+
+ return indentation.repeat(numIndents + 1) + line;
+ } else {
+ // The last line should be placed on the same level as the expect call.
+ return indentation.repeat(numIndents) + line;
+ }
+ })
+ .join('\n');
+};
+
+const resolveAst = fileOrProgram => {
+ // Flow uses a 'Program' parent node, babel expects a 'File'.
+ let ast = fileOrProgram;
+
+ if (ast.type !== 'File') {
+ ast = file(ast, ast.comments, ast.tokens);
+ delete ast.program.comments;
+ }
+
+ return ast;
+};
+
+const traverseAst = (snapshots, fileOrProgram, snapshotMatcherNames) => {
+ const ast = resolveAst(fileOrProgram);
+ const groupedSnapshots = groupSnapshotsByFrame(snapshots);
+ const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot));
+ babelTraverse(ast, {
+ CallExpression({node}) {
+ const {arguments: args, callee} = node;
+
+ if (
+ callee.type !== 'MemberExpression' ||
+ callee.property.type !== 'Identifier' ||
+ callee.property.loc == null
+ ) {
+ return;
+ }
+
+ const {line, column} = callee.property.loc.start;
+ const snapshotsForFrame = groupedSnapshots[`${line}:${column}`];
+
+ if (!snapshotsForFrame) {
+ return;
+ }
+
+ if (snapshotsForFrame.length > 1) {
+ throw new Error(
+ 'Jest: Multiple inline snapshots for the same call are not supported.'
+ );
+ }
+
+ snapshotMatcherNames.push(callee.property.name);
+ const snapshotIndex = args.findIndex(
+ ({type}) => type === 'TemplateLiteral'
+ );
+ const values = snapshotsForFrame.map(inlineSnapshot => {
+ inlineSnapshot.node = node;
+ const {snapshot} = inlineSnapshot;
+ remainingSnapshots.delete(snapshot);
+ return templateLiteral(
+ [
+ templateElement({
+ raw: (0, _utils.escapeBacktickString)(snapshot)
+ })
+ ],
+ []
+ );
+ });
+ const replacementNode = values[0];
+
+ if (snapshotIndex > -1) {
+ args[snapshotIndex] = replacementNode;
+ } else {
+ args.push(replacementNode);
+ }
+ }
+ });
+
+ if (remainingSnapshots.size) {
+ throw new Error("Jest: Couldn't locate all inline snapshots.");
+ }
+};
+
+const runPrettier = (
+ prettier,
+ sourceFilePath,
+ sourceFileWithSnapshots,
+ snapshotMatcherNames
+) => {
+ // Resolve project configuration.
+ // For older versions of Prettier, do not load configuration.
+ const config = prettier.resolveConfig
+ ? prettier.resolveConfig.sync(sourceFilePath, {
+ editorconfig: true
+ })
+ : null; // Detect the parser for the test file.
+ // For older versions of Prettier, fallback to a simple parser detection.
+ // @ts-expect-error
+
+ const inferredParser = prettier.getFileInfo
+ ? prettier.getFileInfo.sync(sourceFilePath).inferredParser
+ : (config && typeof config.parser === 'string' && config.parser) ||
+ simpleDetectParser(sourceFilePath);
+
+ if (!inferredParser) {
+ throw new Error(
+ `Could not infer Prettier parser for file ${sourceFilePath}`
+ );
+ } // Snapshots have now been inserted. Run prettier to make sure that the code is
+ // formatted, except snapshot indentation. Snapshots cannot be formatted until
+ // after the initial format because we don't know where the call expression
+ // will be placed (specifically its indentation), so we have to do two
+ // prettier.format calls back-to-back.
+
+ return prettier.format(
+ prettier.format(sourceFileWithSnapshots, {
+ ...config,
+ filepath: sourceFilePath
+ }),
+ {
+ ...config,
+ filepath: sourceFilePath,
+ parser: createFormattingParser(snapshotMatcherNames, inferredParser)
+ }
+ );
+}; // This parser formats snapshots to the correct indentation.
+
+const createFormattingParser =
+ (snapshotMatcherNames, inferredParser) => (text, parsers, options) => {
+ // Workaround for https://github.com/prettier/prettier/issues/3150
+ options.parser = inferredParser;
+ const ast = resolveAst(parsers[inferredParser](text, options));
+ babelTraverse(ast, {
+ CallExpression({node: {arguments: args, callee}}) {
+ var _options$tabWidth, _options$tabWidth2;
+
+ if (
+ callee.type !== 'MemberExpression' ||
+ callee.property.type !== 'Identifier' ||
+ !snapshotMatcherNames.includes(callee.property.name) ||
+ !callee.loc ||
+ callee.computed
+ ) {
+ return;
+ }
+
+ let snapshotIndex;
+ let snapshot;
+
+ for (let i = 0; i < args.length; i++) {
+ const node = args[i];
+
+ if (node.type === 'TemplateLiteral') {
+ snapshotIndex = i;
+ snapshot = node.quasis[0].value.raw;
+ }
+ }
+
+ if (snapshot === undefined || snapshotIndex === undefined) {
+ return;
+ }
+
+ const useSpaces = !options.useTabs;
+ snapshot = indent(
+ snapshot,
+ Math.ceil(
+ useSpaces
+ ? callee.loc.start.column /
+ ((_options$tabWidth = options.tabWidth) !== null &&
+ _options$tabWidth !== void 0
+ ? _options$tabWidth
+ : 1)
+ : callee.loc.start.column / 2 // Each tab is 2 characters.
+ ),
+ useSpaces
+ ? ' '.repeat(
+ (_options$tabWidth2 = options.tabWidth) !== null &&
+ _options$tabWidth2 !== void 0
+ ? _options$tabWidth2
+ : 1
+ )
+ : '\t'
+ );
+ const replacementNode = templateLiteral(
+ [
+ templateElement({
+ raw: snapshot
+ })
+ ],
+ []
+ );
+ args[snapshotIndex] = replacementNode;
+ }
+ });
+ return ast;
+ };
+
+const simpleDetectParser = filePath => {
+ const extname = path.extname(filePath);
+
+ if (/\.tsx?$/.test(extname)) {
+ return 'typescript';
+ }
+
+ return 'babel';
+};
diff --git a/node_modules/jest-snapshot/build/SnapshotResolver.d.ts b/node_modules/jest-snapshot/build/SnapshotResolver.d.ts
new file mode 100644
index 0000000..2214a1f
--- /dev/null
+++ b/node_modules/jest-snapshot/build/SnapshotResolver.d.ts
@@ -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 { Config } from '@jest/types';
+export declare type SnapshotResolver = {
+ testPathForConsistencyCheck: string;
+ resolveSnapshotPath(testPath: Config.Path, extension?: string): Config.Path;
+ resolveTestPath(snapshotPath: Config.Path, extension?: string): Config.Path;
+};
+export declare const EXTENSION = "snap";
+export declare const DOT_EXTENSION: string;
+export declare const isSnapshotPath: (path: string) => boolean;
+declare type LocalRequire = (module: string) => unknown;
+export declare const buildSnapshotResolver: (config: Config.ProjectConfig, localRequire?: Promise<LocalRequire> | LocalRequire) => Promise<SnapshotResolver>;
+export {};
diff --git a/node_modules/jest-snapshot/build/SnapshotResolver.js b/node_modules/jest-snapshot/build/SnapshotResolver.js
new file mode 100644
index 0000000..b4692fe
--- /dev/null
+++ b/node_modules/jest-snapshot/build/SnapshotResolver.js
@@ -0,0 +1,179 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.isSnapshotPath =
+ exports.buildSnapshotResolver =
+ exports.EXTENSION =
+ exports.DOT_EXTENSION =
+ void 0;
+
+var path = _interopRequireWildcard(require('path'));
+
+var _chalk = _interopRequireDefault(require('chalk'));
+
+var _transform = require('@jest/transform');
+
+var _jestUtil = require('jest-util');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const EXTENSION = 'snap';
+exports.EXTENSION = EXTENSION;
+const DOT_EXTENSION = '.' + EXTENSION;
+exports.DOT_EXTENSION = DOT_EXTENSION;
+
+const isSnapshotPath = path => path.endsWith(DOT_EXTENSION);
+
+exports.isSnapshotPath = isSnapshotPath;
+const cache = new Map();
+
+const buildSnapshotResolver = async (
+ config,
+ localRequire = (0, _transform.createTranspilingRequire)(config)
+) => {
+ var _cache$get;
+
+ const key = config.rootDir;
+ const resolver =
+ (_cache$get = cache.get(key)) !== null && _cache$get !== void 0
+ ? _cache$get
+ : await createSnapshotResolver(
+ await localRequire,
+ config.snapshotResolver
+ );
+ cache.set(key, resolver);
+ return resolver;
+};
+
+exports.buildSnapshotResolver = buildSnapshotResolver;
+
+async function createSnapshotResolver(localRequire, snapshotResolverPath) {
+ return typeof snapshotResolverPath === 'string'
+ ? await createCustomSnapshotResolver(snapshotResolverPath, localRequire)
+ : createDefaultSnapshotResolver();
+}
+
+function createDefaultSnapshotResolver() {
+ return {
+ resolveSnapshotPath: testPath =>
+ path.join(
+ path.join(path.dirname(testPath), '__snapshots__'),
+ path.basename(testPath) + DOT_EXTENSION
+ ),
+ resolveTestPath: snapshotPath =>
+ path.resolve(
+ path.dirname(snapshotPath),
+ '..',
+ path.basename(snapshotPath, DOT_EXTENSION)
+ ),
+ testPathForConsistencyCheck: path.posix.join(
+ 'consistency_check',
+ '__tests__',
+ 'example.test.js'
+ )
+ };
+}
+
+async function createCustomSnapshotResolver(
+ snapshotResolverPath,
+ localRequire
+) {
+ const custom = (0, _jestUtil.interopRequireDefault)(
+ await localRequire(snapshotResolverPath)
+ ).default;
+ const keys = [
+ ['resolveSnapshotPath', 'function'],
+ ['resolveTestPath', 'function'],
+ ['testPathForConsistencyCheck', 'string']
+ ];
+ keys.forEach(([propName, requiredType]) => {
+ if (typeof custom[propName] !== requiredType) {
+ throw new TypeError(mustImplement(propName, requiredType));
+ }
+ });
+ const customResolver = {
+ resolveSnapshotPath: testPath =>
+ custom.resolveSnapshotPath(testPath, DOT_EXTENSION),
+ resolveTestPath: snapshotPath =>
+ custom.resolveTestPath(snapshotPath, DOT_EXTENSION),
+ testPathForConsistencyCheck: custom.testPathForConsistencyCheck
+ };
+ verifyConsistentTransformations(customResolver);
+ return customResolver;
+}
+
+function mustImplement(propName, requiredType) {
+ return (
+ _chalk.default.bold(
+ `Custom snapshot resolver must implement a \`${propName}\` as a ${requiredType}.`
+ ) +
+ '\nDocumentation: https://jestjs.io/docs/configuration#snapshotresolver-string'
+ );
+}
+
+function verifyConsistentTransformations(custom) {
+ const resolvedSnapshotPath = custom.resolveSnapshotPath(
+ custom.testPathForConsistencyCheck
+ );
+ const resolvedTestPath = custom.resolveTestPath(resolvedSnapshotPath);
+
+ if (resolvedTestPath !== custom.testPathForConsistencyCheck) {
+ throw new Error(
+ _chalk.default.bold(
+ `Custom snapshot resolver functions must transform paths consistently, i.e. expects resolveTestPath(resolveSnapshotPath('${custom.testPathForConsistencyCheck}')) === ${resolvedTestPath}`
+ )
+ );
+ }
+}
diff --git a/node_modules/jest-snapshot/build/State.d.ts b/node_modules/jest-snapshot/build/State.d.ts
new file mode 100644
index 0000000..86d7ae5
--- /dev/null
+++ b/node_modules/jest-snapshot/build/State.d.ts
@@ -0,0 +1,62 @@
+/**
+ * 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 } from '@jest/types';
+import type { OptionsReceived as PrettyFormatOptions } from 'pretty-format';
+export declare type SnapshotStateOptions = {
+ updateSnapshot: Config.SnapshotUpdateState;
+ prettierPath: Config.Path;
+ expand?: boolean;
+ snapshotFormat: PrettyFormatOptions;
+};
+export declare type SnapshotMatchOptions = {
+ testName: string;
+ received: unknown;
+ key?: string;
+ inlineSnapshot?: string;
+ isInline: boolean;
+ error?: Error;
+};
+declare type SnapshotReturnOptions = {
+ actual: string;
+ count: number;
+ expected?: string;
+ key: string;
+ pass: boolean;
+};
+declare type SaveStatus = {
+ deleted: boolean;
+ saved: boolean;
+};
+export default class SnapshotState {
+ private _counters;
+ private _dirty;
+ private _index;
+ private _updateSnapshot;
+ private _snapshotData;
+ private _initialData;
+ private _snapshotPath;
+ private _inlineSnapshots;
+ private _uncheckedKeys;
+ private _prettierPath;
+ private _snapshotFormat;
+ added: number;
+ expand: boolean;
+ matched: number;
+ unmatched: number;
+ updated: number;
+ constructor(snapshotPath: Config.Path, options: SnapshotStateOptions);
+ markSnapshotsAsCheckedForTest(testName: string): void;
+ private _addSnapshot;
+ clear(): void;
+ save(): SaveStatus;
+ getUncheckedCount(): number;
+ getUncheckedKeys(): Array<string>;
+ removeUncheckedKeys(): void;
+ match({ testName, received, key, inlineSnapshot, isInline, error, }: SnapshotMatchOptions): SnapshotReturnOptions;
+ fail(testName: string, _received: unknown, key?: string): string;
+}
+export {};
diff --git a/node_modules/jest-snapshot/build/State.js b/node_modules/jest-snapshot/build/State.js
new file mode 100644
index 0000000..6148b78
--- /dev/null
+++ b/node_modules/jest-snapshot/build/State.js
@@ -0,0 +1,389 @@
+'use strict';
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+var fs = _interopRequireWildcard(require('graceful-fs'));
+
+var _jestMessageUtil = require('jest-message-util');
+
+var _InlineSnapshots = require('./InlineSnapshots');
+
+var _utils = require('./utils');
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestExistsFile =
+ global[Symbol.for('jest-native-exists-file')] || fs.existsSync;
+
+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;
+}
+
+class SnapshotState {
+ // @ts-expect-error
+ constructor(snapshotPath, options) {
+ _defineProperty(this, '_counters', void 0);
+
+ _defineProperty(this, '_dirty', void 0);
+
+ _defineProperty(this, '_index', void 0);
+
+ _defineProperty(this, '_updateSnapshot', void 0);
+
+ _defineProperty(this, '_snapshotData', void 0);
+
+ _defineProperty(this, '_initialData', void 0);
+
+ _defineProperty(this, '_snapshotPath', void 0);
+
+ _defineProperty(this, '_inlineSnapshots', void 0);
+
+ _defineProperty(this, '_uncheckedKeys', void 0);
+
+ _defineProperty(this, '_prettierPath', void 0);
+
+ _defineProperty(this, '_snapshotFormat', void 0);
+
+ _defineProperty(this, 'added', void 0);
+
+ _defineProperty(this, 'expand', void 0);
+
+ _defineProperty(this, 'matched', void 0);
+
+ _defineProperty(this, 'unmatched', void 0);
+
+ _defineProperty(this, 'updated', void 0);
+
+ this._snapshotPath = snapshotPath;
+ const {data, dirty} = (0, _utils.getSnapshotData)(
+ this._snapshotPath,
+ options.updateSnapshot
+ );
+ this._initialData = data;
+ this._snapshotData = data;
+ this._dirty = dirty;
+ this._prettierPath = options.prettierPath;
+ this._inlineSnapshots = [];
+ this._uncheckedKeys = new Set(Object.keys(this._snapshotData));
+ this._counters = new Map();
+ this._index = 0;
+ this.expand = options.expand || false;
+ this.added = 0;
+ this.matched = 0;
+ this.unmatched = 0;
+ this._updateSnapshot = options.updateSnapshot;
+ this.updated = 0;
+ this._snapshotFormat = options.snapshotFormat;
+ }
+
+ markSnapshotsAsCheckedForTest(testName) {
+ this._uncheckedKeys.forEach(uncheckedKey => {
+ if ((0, _utils.keyToTestName)(uncheckedKey) === testName) {
+ this._uncheckedKeys.delete(uncheckedKey);
+ }
+ });
+ }
+
+ _addSnapshot(key, receivedSerialized, options) {
+ this._dirty = true;
+
+ if (options.isInline) {
+ const error = options.error || new Error();
+ const lines = (0, _jestMessageUtil.getStackTraceLines)(
+ (0, _utils.removeLinesBeforeExternalMatcherTrap)(error.stack || '')
+ );
+ const frame = (0, _jestMessageUtil.getTopFrame)(lines);
+
+ if (!frame) {
+ throw new Error(
+ "Jest: Couldn't infer stack frame for inline snapshot."
+ );
+ }
+
+ this._inlineSnapshots.push({
+ frame,
+ snapshot: receivedSerialized
+ });
+ } else {
+ this._snapshotData[key] = receivedSerialized;
+ }
+ }
+
+ clear() {
+ this._snapshotData = this._initialData;
+ this._inlineSnapshots = [];
+ this._counters = new Map();
+ this._index = 0;
+ this.added = 0;
+ this.matched = 0;
+ this.unmatched = 0;
+ this.updated = 0;
+ }
+
+ save() {
+ const hasExternalSnapshots = Object.keys(this._snapshotData).length;
+ const hasInlineSnapshots = this._inlineSnapshots.length;
+ const isEmpty = !hasExternalSnapshots && !hasInlineSnapshots;
+ const status = {
+ deleted: false,
+ saved: false
+ };
+
+ if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) {
+ if (hasExternalSnapshots) {
+ (0, _utils.saveSnapshotFile)(this._snapshotData, this._snapshotPath);
+ }
+
+ if (hasInlineSnapshots) {
+ (0, _InlineSnapshots.saveInlineSnapshots)(
+ this._inlineSnapshots,
+ this._prettierPath
+ );
+ }
+
+ status.saved = true;
+ } else if (!hasExternalSnapshots && jestExistsFile(this._snapshotPath)) {
+ if (this._updateSnapshot === 'all') {
+ fs.unlinkSync(this._snapshotPath);
+ }
+
+ status.deleted = true;
+ }
+
+ return status;
+ }
+
+ getUncheckedCount() {
+ return this._uncheckedKeys.size || 0;
+ }
+
+ getUncheckedKeys() {
+ return Array.from(this._uncheckedKeys);
+ }
+
+ removeUncheckedKeys() {
+ if (this._updateSnapshot === 'all' && this._uncheckedKeys.size) {
+ this._dirty = true;
+
+ this._uncheckedKeys.forEach(key => delete this._snapshotData[key]);
+
+ this._uncheckedKeys.clear();
+ }
+ }
+
+ match({testName, received, key, inlineSnapshot, isInline, error}) {
+ this._counters.set(testName, (this._counters.get(testName) || 0) + 1);
+
+ const count = Number(this._counters.get(testName));
+
+ if (!key) {
+ key = (0, _utils.testNameToKey)(testName, count);
+ } // Do not mark the snapshot as "checked" if the snapshot is inline and
+ // there's an external snapshot. This way the external snapshot can be
+ // removed with `--updateSnapshot`.
+
+ if (!(isInline && this._snapshotData[key] !== undefined)) {
+ this._uncheckedKeys.delete(key);
+ }
+
+ const receivedSerialized = (0, _utils.addExtraLineBreaks)(
+ (0, _utils.serialize)(received, undefined, this._snapshotFormat)
+ );
+ const expected = isInline ? inlineSnapshot : this._snapshotData[key];
+ const pass = expected === receivedSerialized;
+ const hasSnapshot = expected !== undefined;
+ const snapshotIsPersisted = isInline || fs.existsSync(this._snapshotPath);
+
+ if (pass && !isInline) {
+ // Executing a snapshot file as JavaScript and writing the strings back
+ // when other snapshots have changed loses the proper escaping for some
+ // characters. Since we check every snapshot in every test, use the newly
+ // generated formatted string.
+ // Note that this is only relevant when a snapshot is added and the dirty
+ // flag is set.
+ this._snapshotData[key] = receivedSerialized;
+ } // These are the conditions on when to write snapshots:
+ // * There's no snapshot file in a non-CI environment.
+ // * There is a snapshot file and we decided to update the snapshot.
+ // * There is a snapshot file, but it doesn't have this snaphsot.
+ // These are the conditions on when not to write snapshots:
+ // * The update flag is set to 'none'.
+ // * There's no snapshot file or a file without this snapshot on a CI environment.
+
+ if (
+ (hasSnapshot && this._updateSnapshot === 'all') ||
+ ((!hasSnapshot || !snapshotIsPersisted) &&
+ (this._updateSnapshot === 'new' || this._updateSnapshot === 'all'))
+ ) {
+ if (this._updateSnapshot === 'all') {
+ if (!pass) {
+ if (hasSnapshot) {
+ this.updated++;
+ } else {
+ this.added++;
+ }
+
+ this._addSnapshot(key, receivedSerialized, {
+ error,
+ isInline
+ });
+ } else {
+ this.matched++;
+ }
+ } else {
+ this._addSnapshot(key, receivedSerialized, {
+ error,
+ isInline
+ });
+
+ this.added++;
+ }
+
+ return {
+ actual: '',
+ count,
+ expected: '',
+ key,
+ pass: true
+ };
+ } else {
+ if (!pass) {
+ this.unmatched++;
+ return {
+ actual: (0, _utils.removeExtraLineBreaks)(receivedSerialized),
+ count,
+ expected:
+ expected !== undefined
+ ? (0, _utils.removeExtraLineBreaks)(expected)
+ : undefined,
+ key,
+ pass: false
+ };
+ } else {
+ this.matched++;
+ return {
+ actual: '',
+ count,
+ expected: '',
+ key,
+ pass: true
+ };
+ }
+ }
+ }
+
+ fail(testName, _received, key) {
+ this._counters.set(testName, (this._counters.get(testName) || 0) + 1);
+
+ const count = Number(this._counters.get(testName));
+
+ if (!key) {
+ key = (0, _utils.testNameToKey)(testName, count);
+ }
+
+ this._uncheckedKeys.delete(key);
+
+ this.unmatched++;
+ return key;
+ }
+}
+
+exports.default = SnapshotState;
diff --git a/node_modules/jest-snapshot/build/colors.d.ts b/node_modules/jest-snapshot/build/colors.d.ts
new file mode 100644
index 0000000..23e2905
--- /dev/null
+++ b/node_modules/jest-snapshot/build/colors.d.ts
@@ -0,0 +1,15 @@
+/**
+ * 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 aForeground2 = 90;
+export declare const aBackground2 = 225;
+export declare const bForeground2 = 23;
+export declare const bBackground2 = 195;
+export declare type RGB = [number, number, number];
+export declare const aForeground3: RGB;
+export declare const aBackground3: RGB;
+export declare const bForeground3: RGB;
+export declare const bBackground3: RGB;
diff --git a/node_modules/jest-snapshot/build/colors.js b/node_modules/jest-snapshot/build/colors.js
new file mode 100644
index 0000000..897ea87
--- /dev/null
+++ b/node_modules/jest-snapshot/build/colors.js
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.bForeground3 =
+ exports.bForeground2 =
+ exports.bBackground3 =
+ exports.bBackground2 =
+ exports.aForeground3 =
+ exports.aForeground2 =
+ exports.aBackground3 =
+ exports.aBackground2 =
+ 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.
+ */
+// https://jonasjacek.github.io/colors/
+const aForeground2 = 90;
+exports.aForeground2 = aForeground2;
+const aBackground2 = 225;
+exports.aBackground2 = aBackground2;
+const bForeground2 = 23;
+exports.bForeground2 = bForeground2;
+const bBackground2 = 195;
+exports.bBackground2 = bBackground2;
+const aForeground3 = [0x80, 0, 0x80];
+exports.aForeground3 = aForeground3;
+const aBackground3 = [0xff, 0xd7, 0xff];
+exports.aBackground3 = aBackground3;
+const bForeground3 = [0, 0x5f, 0x5f];
+exports.bForeground3 = bForeground3;
+const bBackground3 = [0xd7, 0xff, 0xff];
+exports.bBackground3 = bBackground3;
diff --git a/node_modules/jest-snapshot/build/dedentLines.d.ts b/node_modules/jest-snapshot/build/dedentLines.d.ts
new file mode 100644
index 0000000..1ebd410
--- /dev/null
+++ b/node_modules/jest-snapshot/build/dedentLines.d.ts
@@ -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 declare const dedentLines: (input: Array<string>) => Array<string> | null;
diff --git a/node_modules/jest-snapshot/build/dedentLines.js b/node_modules/jest-snapshot/build/dedentLines.js
new file mode 100644
index 0000000..b860c4d
--- /dev/null
+++ b/node_modules/jest-snapshot/build/dedentLines.js
@@ -0,0 +1,149 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.dedentLines = 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 getIndentationLength = line => {
+ const result = /^( {2})+/.exec(line);
+ return result === null ? 0 : result[0].length;
+};
+
+const dedentLine = line => line.slice(getIndentationLength(line)); // Return true if:
+// "key": "value has multiple lines\n…
+// "key has multiple lines\n…
+
+const hasUnmatchedDoubleQuoteMarks = string => {
+ let n = 0;
+ let i = string.indexOf('"', 0);
+
+ while (i !== -1) {
+ if (i === 0 || string[i - 1] !== '\\') {
+ n += 1;
+ }
+
+ i = string.indexOf('"', i + 1);
+ }
+
+ return n % 2 !== 0;
+};
+
+const isFirstLineOfTag = line => /^( {2})*\</.test(line); // The length of the output array is the index of the next input line.
+// Push dedented lines of start tag onto output and return true;
+// otherwise return false because:
+// * props include a multiline string (or text node, if props have markup)
+// * start tag does not close
+
+const dedentStartTag = (input, output) => {
+ let line = input[output.length];
+ output.push(dedentLine(line));
+
+ if (line.includes('>')) {
+ return true;
+ }
+
+ while (output.length < input.length) {
+ line = input[output.length];
+
+ if (hasUnmatchedDoubleQuoteMarks(line)) {
+ return false; // because props include a multiline string
+ } else if (isFirstLineOfTag(line)) {
+ // Recursion only if props have markup.
+ if (!dedentMarkup(input, output)) {
+ return false;
+ }
+ } else {
+ output.push(dedentLine(line));
+
+ if (line.includes('>')) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}; // Push dedented lines of markup onto output and return true;
+// otherwise return false because:
+// * props include a multiline string
+// * text has more than one adjacent line
+// * markup does not close
+
+const dedentMarkup = (input, output) => {
+ let line = input[output.length];
+
+ if (!dedentStartTag(input, output)) {
+ return false;
+ }
+
+ if (input[output.length - 1].includes('/>')) {
+ return true;
+ }
+
+ let isText = false;
+ const stack = [];
+ stack.push(getIndentationLength(line));
+
+ while (stack.length > 0 && output.length < input.length) {
+ line = input[output.length];
+
+ if (isFirstLineOfTag(line)) {
+ if (line.includes('</')) {
+ output.push(dedentLine(line));
+ stack.pop();
+ } else {
+ if (!dedentStartTag(input, output)) {
+ return false;
+ }
+
+ if (!input[output.length - 1].includes('/>')) {
+ stack.push(getIndentationLength(line));
+ }
+ }
+
+ isText = false;
+ } else {
+ if (isText) {
+ return false; // because text has more than one adjacent line
+ }
+
+ const indentationLengthOfTag = stack[stack.length - 1];
+ output.push(line.slice(indentationLengthOfTag + 2));
+ isText = true;
+ }
+ }
+
+ return stack.length === 0;
+}; // Return lines unindented by heuristic;
+// otherwise return null because:
+// * props include a multiline string
+// * text has more than one adjacent line
+// * markup does not close
+
+const dedentLines = input => {
+ const output = [];
+
+ while (output.length < input.length) {
+ const line = input[output.length];
+
+ if (hasUnmatchedDoubleQuoteMarks(line)) {
+ return null;
+ } else if (isFirstLineOfTag(line)) {
+ if (!dedentMarkup(input, output)) {
+ return null;
+ }
+ } else {
+ output.push(dedentLine(line));
+ }
+ }
+
+ return output;
+};
+
+exports.dedentLines = dedentLines;
diff --git a/node_modules/jest-snapshot/build/index.d.ts b/node_modules/jest-snapshot/build/index.d.ts
new file mode 100644
index 0000000..adbd406
--- /dev/null
+++ b/node_modules/jest-snapshot/build/index.d.ts
@@ -0,0 +1,34 @@
+/**
+ * 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 } from '@jest/types';
+import type { FS as HasteFS } from 'jest-haste-map';
+import { SnapshotResolver as JestSnapshotResolver } from './SnapshotResolver';
+import SnapshotState from './State';
+import type { Context, ExpectationResult } from './types';
+import * as utils from './utils';
+declare const JestSnapshot: {
+ EXTENSION: string;
+ SnapshotState: typeof SnapshotState;
+ addSerializer: (plugin: import("pretty-format").Plugin) => void;
+ buildSnapshotResolver: (config: Config.ProjectConfig, localRequire?: ((module: string) => unknown) | Promise<(module: string) => unknown>) => Promise<JestSnapshotResolver>;
+ cleanup: (hasteFS: HasteFS, update: Config.SnapshotUpdateState, snapshotResolver: JestSnapshotResolver, testPathIgnorePatterns?: string[] | undefined) => {
+ filesRemoved: number;
+ filesRemovedList: Array<string>;
+ };
+ getSerializers: () => import("pretty-format").Plugins;
+ isSnapshotPath: (path: string) => boolean;
+ toMatchInlineSnapshot: (this: Context, received: unknown, propertiesOrSnapshot?: string | object | undefined, inlineSnapshot?: string | undefined) => ExpectationResult;
+ toMatchSnapshot: (this: Context, received: unknown, propertiesOrHint?: string | object | undefined, hint?: string | undefined) => ExpectationResult;
+ toThrowErrorMatchingInlineSnapshot: (this: Context, received: unknown, inlineSnapshot?: string | undefined, fromPromise?: boolean | undefined) => ExpectationResult;
+ toThrowErrorMatchingSnapshot: (this: Context, received: unknown, hint: string | undefined, fromPromise: boolean) => ExpectationResult;
+ utils: typeof utils;
+};
+declare namespace JestSnapshot {
+ type SnapshotResolver = JestSnapshotResolver;
+ type SnapshotStateType = SnapshotState;
+}
+export = JestSnapshot;
diff --git a/node_modules/jest-snapshot/build/index.js b/node_modules/jest-snapshot/build/index.js
new file mode 100644
index 0000000..50fbbc5
--- /dev/null
+++ b/node_modules/jest-snapshot/build/index.js
@@ -0,0 +1,645 @@
+'use strict';
+
+var fs = _interopRequireWildcard(require('graceful-fs'));
+
+var _jestMatcherUtils = require('jest-matcher-utils');
+
+var _SnapshotResolver = require('./SnapshotResolver');
+
+var _State = _interopRequireDefault(require('./State'));
+
+var _plugins = require('./plugins');
+
+var _printSnapshot = require('./printSnapshot');
+
+var utils = _interopRequireWildcard(require('./utils'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestExistsFile =
+ global[Symbol.for('jest-native-exists-file')] || fs.existsSync;
+const DID_NOT_THROW = 'Received function did not throw'; // same as toThrow
+
+const NOT_SNAPSHOT_MATCHERS = `Snapshot matchers cannot be used with ${(0,
+_jestMatcherUtils.BOLD_WEIGHT)('not')}`;
+const INDENTATION_REGEX = /^([^\S\n]*)\S/m; // Display name in report when matcher fails same as in snapshot file,
+// but with optional hint argument in bold weight.
+
+const printSnapshotName = (concatenatedBlockNames = '', hint = '', count) => {
+ const hasNames = concatenatedBlockNames.length !== 0;
+ const hasHint = hint.length !== 0;
+ return (
+ 'Snapshot name: `' +
+ (hasNames ? utils.escapeBacktickString(concatenatedBlockNames) : '') +
+ (hasNames && hasHint ? ': ' : '') +
+ (hasHint
+ ? (0, _jestMatcherUtils.BOLD_WEIGHT)(utils.escapeBacktickString(hint))
+ : '') +
+ ' ' +
+ count +
+ '`'
+ );
+};
+
+function stripAddedIndentation(inlineSnapshot) {
+ // Find indentation if exists.
+ const match = inlineSnapshot.match(INDENTATION_REGEX);
+
+ if (!match || !match[1]) {
+ // No indentation.
+ return inlineSnapshot;
+ }
+
+ const indentation = match[1];
+ const lines = inlineSnapshot.split('\n');
+
+ if (lines.length <= 2) {
+ // Must be at least 3 lines.
+ return inlineSnapshot;
+ }
+
+ if (lines[0].trim() !== '' || lines[lines.length - 1].trim() !== '') {
+ // If not blank first and last lines, abort.
+ return inlineSnapshot;
+ }
+
+ for (let i = 1; i < lines.length - 1; i++) {
+ if (lines[i] !== '') {
+ if (lines[i].indexOf(indentation) !== 0) {
+ // All lines except first and last should either be blank or have the same
+ // indent as the first line (or more). If this isn't the case we don't
+ // want to touch the snapshot at all.
+ return inlineSnapshot;
+ }
+
+ lines[i] = lines[i].substring(indentation.length);
+ }
+ } // Last line is a special case because it won't have the same indent as others
+ // but may still have been given some indent to line up.
+
+ lines[lines.length - 1] = ''; // Return inline snapshot, now at indent 0.
+
+ inlineSnapshot = lines.join('\n');
+ return inlineSnapshot;
+}
+
+const fileExists = (filePath, hasteFS) =>
+ hasteFS.exists(filePath) || jestExistsFile(filePath);
+
+const cleanup = (hasteFS, update, snapshotResolver, testPathIgnorePatterns) => {
+ const pattern = '\\.' + _SnapshotResolver.EXTENSION + '$';
+ const files = hasteFS.matchFiles(pattern);
+ let testIgnorePatternsRegex = null;
+
+ if (testPathIgnorePatterns && testPathIgnorePatterns.length > 0) {
+ testIgnorePatternsRegex = new RegExp(testPathIgnorePatterns.join('|'));
+ }
+
+ const list = files.filter(snapshotFile => {
+ const testPath = snapshotResolver.resolveTestPath(snapshotFile); // ignore snapshots of ignored tests
+
+ if (testIgnorePatternsRegex && testIgnorePatternsRegex.test(testPath)) {
+ return false;
+ }
+
+ if (!fileExists(testPath, hasteFS)) {
+ if (update === 'all') {
+ fs.unlinkSync(snapshotFile);
+ }
+
+ return true;
+ }
+
+ return false;
+ });
+ return {
+ filesRemoved: list.length,
+ filesRemovedList: list
+ };
+};
+
+const toMatchSnapshot = function (received, propertiesOrHint, hint) {
+ const matcherName = 'toMatchSnapshot';
+ let properties;
+ const length = arguments.length;
+
+ if (length === 2 && typeof propertiesOrHint === 'string') {
+ hint = propertiesOrHint;
+ } else if (length >= 2) {
+ if (typeof propertiesOrHint !== 'object' || propertiesOrHint === null) {
+ const options = {
+ isNot: this.isNot,
+ promise: this.promise
+ };
+ let printedWithType = (0, _jestMatcherUtils.printWithType)(
+ 'Expected properties',
+ propertiesOrHint,
+ _printSnapshot.printExpected
+ );
+
+ if (length === 3) {
+ options.secondArgument = 'hint';
+ options.secondArgumentColor = _jestMatcherUtils.BOLD_WEIGHT;
+
+ if (propertiesOrHint == null) {
+ printedWithType +=
+ "\n\nTo provide a hint without properties: toMatchSnapshot('hint')";
+ }
+ }
+
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ _printSnapshot.PROPERTIES_ARG,
+ options
+ ),
+ `Expected ${(0, _jestMatcherUtils.EXPECTED_COLOR)(
+ 'properties'
+ )} must be an object`,
+ printedWithType
+ )
+ );
+ } // Future breaking change: Snapshot hint must be a string
+ // if (arguments.length === 3 && typeof hint !== 'string') {}
+
+ properties = propertiesOrHint;
+ }
+
+ return _toMatchSnapshot({
+ context: this,
+ hint,
+ isInline: false,
+ matcherName,
+ properties,
+ received
+ });
+};
+
+const toMatchInlineSnapshot = function (
+ received,
+ propertiesOrSnapshot,
+ inlineSnapshot
+) {
+ const matcherName = 'toMatchInlineSnapshot';
+ let properties;
+ const length = arguments.length;
+
+ if (length === 2 && typeof propertiesOrSnapshot === 'string') {
+ inlineSnapshot = propertiesOrSnapshot;
+ } else if (length >= 2) {
+ const options = {
+ isNot: this.isNot,
+ promise: this.promise
+ };
+
+ if (length === 3) {
+ options.secondArgument = _printSnapshot.SNAPSHOT_ARG;
+ options.secondArgumentColor = _printSnapshot.noColor;
+ }
+
+ if (
+ typeof propertiesOrSnapshot !== 'object' ||
+ propertiesOrSnapshot === null
+ ) {
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ _printSnapshot.PROPERTIES_ARG,
+ options
+ ),
+ `Expected ${(0, _jestMatcherUtils.EXPECTED_COLOR)(
+ 'properties'
+ )} must be an object`,
+ (0, _jestMatcherUtils.printWithType)(
+ 'Expected properties',
+ propertiesOrSnapshot,
+ _printSnapshot.printExpected
+ )
+ )
+ );
+ }
+
+ if (length === 3 && typeof inlineSnapshot !== 'string') {
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ _printSnapshot.PROPERTIES_ARG,
+ options
+ ),
+ 'Inline snapshot must be a string',
+ (0, _jestMatcherUtils.printWithType)(
+ 'Inline snapshot',
+ inlineSnapshot,
+ utils.serialize
+ )
+ )
+ );
+ }
+
+ properties = propertiesOrSnapshot;
+ }
+
+ return _toMatchSnapshot({
+ context: this,
+ inlineSnapshot:
+ inlineSnapshot !== undefined
+ ? stripAddedIndentation(inlineSnapshot)
+ : undefined,
+ isInline: true,
+ matcherName,
+ properties,
+ received
+ });
+};
+
+const _toMatchSnapshot = config => {
+ const {context, hint, inlineSnapshot, isInline, matcherName, properties} =
+ config;
+ let {received} = config;
+ context.dontThrow && context.dontThrow();
+ const {currentTestName, isNot, snapshotState} = context;
+
+ if (isNot) {
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _printSnapshot.matcherHintFromConfig)(config, false),
+ NOT_SNAPSHOT_MATCHERS
+ )
+ );
+ }
+
+ if (snapshotState == null) {
+ // Because the state is the problem, this is not a matcher error.
+ // Call generic stringify from jest-matcher-utils package
+ // because uninitialized snapshot state does not need snapshot serializers.
+ throw new Error(
+ (0, _printSnapshot.matcherHintFromConfig)(config, false) +
+ '\n\n' +
+ 'Snapshot state must be initialized' +
+ '\n\n' +
+ (0, _jestMatcherUtils.printWithType)(
+ 'Snapshot state',
+ snapshotState,
+ _jestMatcherUtils.stringify
+ )
+ );
+ }
+
+ const fullTestName =
+ currentTestName && hint
+ ? `${currentTestName}: ${hint}`
+ : currentTestName || ''; // future BREAKING change: || hint
+
+ if (typeof properties === 'object') {
+ if (typeof received !== 'object' || received === null) {
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _printSnapshot.matcherHintFromConfig)(config, false),
+ `${(0, _jestMatcherUtils.RECEIVED_COLOR)(
+ 'received'
+ )} value must be an object when the matcher has ${(0,
+ _jestMatcherUtils.EXPECTED_COLOR)('properties')}`,
+ (0, _jestMatcherUtils.printWithType)(
+ 'Received',
+ received,
+ _printSnapshot.printReceived
+ )
+ )
+ );
+ }
+
+ const propertyPass = context.equals(received, properties, [
+ context.utils.iterableEquality,
+ context.utils.subsetEquality
+ ]);
+
+ if (!propertyPass) {
+ const key = snapshotState.fail(fullTestName, received);
+ const matched = /(\d+)$/.exec(key);
+ const count = matched === null ? 1 : Number(matched[1]);
+
+ const message = () =>
+ (0, _printSnapshot.matcherHintFromConfig)(config, false) +
+ '\n\n' +
+ printSnapshotName(currentTestName, hint, count) +
+ '\n\n' +
+ (0, _printSnapshot.printPropertiesAndReceived)(
+ properties,
+ received,
+ snapshotState.expand
+ );
+
+ return {
+ message,
+ name: matcherName,
+ pass: false
+ };
+ } else {
+ received = utils.deepMerge(received, properties);
+ }
+ }
+
+ const result = snapshotState.match({
+ error: context.error,
+ inlineSnapshot,
+ isInline,
+ received,
+ testName: fullTestName
+ });
+ const {actual, count, expected, pass} = result;
+
+ if (pass) {
+ return {
+ message: () => '',
+ pass: true
+ };
+ }
+
+ const message =
+ expected === undefined
+ ? () =>
+ (0, _printSnapshot.matcherHintFromConfig)(config, true) +
+ '\n\n' +
+ printSnapshotName(currentTestName, hint, count) +
+ '\n\n' +
+ `New snapshot was ${(0, _jestMatcherUtils.BOLD_WEIGHT)(
+ 'not written'
+ )}. The update flag ` +
+ 'must be explicitly passed to write a new snapshot.\n\n' +
+ 'This is likely because this test is run in a continuous integration ' +
+ '(CI) environment in which snapshots are not written by default.\n\n' +
+ `Received:${actual.includes('\n') ? '\n' : ' '}${(0,
+ _printSnapshot.bReceivedColor)(actual)}`
+ : () =>
+ (0, _printSnapshot.matcherHintFromConfig)(config, true) +
+ '\n\n' +
+ printSnapshotName(currentTestName, hint, count) +
+ '\n\n' +
+ (0, _printSnapshot.printSnapshotAndReceived)(
+ expected,
+ actual,
+ received,
+ snapshotState.expand
+ ); // Passing the actual and expected objects so that a custom reporter
+ // could access them, for example in order to display a custom visual diff,
+ // or create a different error message
+
+ return {
+ actual,
+ expected,
+ message,
+ name: matcherName,
+ pass: false
+ };
+};
+
+const toThrowErrorMatchingSnapshot = function (
+ received,
+ hint, // because error TS1016 for hint?: string
+ fromPromise
+) {
+ const matcherName = 'toThrowErrorMatchingSnapshot'; // Future breaking change: Snapshot hint must be a string
+ // if (hint !== undefined && typeof hint !== string) {}
+
+ return _toThrowErrorMatchingSnapshot(
+ {
+ context: this,
+ hint,
+ isInline: false,
+ matcherName,
+ received
+ },
+ fromPromise
+ );
+};
+
+const toThrowErrorMatchingInlineSnapshot = function (
+ received,
+ inlineSnapshot,
+ fromPromise
+) {
+ const matcherName = 'toThrowErrorMatchingInlineSnapshot';
+
+ if (inlineSnapshot !== undefined && typeof inlineSnapshot !== 'string') {
+ const options = {
+ expectedColor: _printSnapshot.noColor,
+ isNot: this.isNot,
+ promise: this.promise
+ };
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ _printSnapshot.SNAPSHOT_ARG,
+ options
+ ),
+ 'Inline snapshot must be a string',
+ (0, _jestMatcherUtils.printWithType)(
+ 'Inline snapshot',
+ inlineSnapshot,
+ utils.serialize
+ )
+ )
+ );
+ }
+
+ return _toThrowErrorMatchingSnapshot(
+ {
+ context: this,
+ inlineSnapshot:
+ inlineSnapshot !== undefined
+ ? stripAddedIndentation(inlineSnapshot)
+ : undefined,
+ isInline: true,
+ matcherName,
+ received
+ },
+ fromPromise
+ );
+};
+
+const _toThrowErrorMatchingSnapshot = (config, fromPromise) => {
+ const {context, hint, inlineSnapshot, isInline, matcherName, received} =
+ config;
+ context.dontThrow && context.dontThrow();
+ const {isNot, promise} = context;
+
+ if (!fromPromise) {
+ if (typeof received !== 'function') {
+ const options = {
+ isNot,
+ promise
+ };
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ '',
+ options
+ ),
+ `${(0, _jestMatcherUtils.RECEIVED_COLOR)(
+ 'received'
+ )} value must be a function`,
+ (0, _jestMatcherUtils.printWithType)(
+ 'Received',
+ received,
+ _printSnapshot.printReceived
+ )
+ )
+ );
+ }
+ }
+
+ if (isNot) {
+ throw new Error(
+ (0, _jestMatcherUtils.matcherErrorMessage)(
+ (0, _printSnapshot.matcherHintFromConfig)(config, false),
+ NOT_SNAPSHOT_MATCHERS
+ )
+ );
+ }
+
+ let error;
+
+ if (fromPromise) {
+ error = received;
+ } else {
+ try {
+ received();
+ } catch (e) {
+ error = e;
+ }
+ }
+
+ if (error === undefined) {
+ // Because the received value is a function, this is not a matcher error.
+ throw new Error(
+ (0, _printSnapshot.matcherHintFromConfig)(config, false) +
+ '\n\n' +
+ DID_NOT_THROW
+ );
+ }
+
+ return _toMatchSnapshot({
+ context,
+ hint,
+ inlineSnapshot,
+ isInline,
+ matcherName,
+ received: error.message
+ });
+};
+
+const JestSnapshot = {
+ EXTENSION: _SnapshotResolver.EXTENSION,
+ SnapshotState: _State.default,
+ addSerializer: _plugins.addSerializer,
+ buildSnapshotResolver: _SnapshotResolver.buildSnapshotResolver,
+ cleanup,
+ getSerializers: _plugins.getSerializers,
+ isSnapshotPath: _SnapshotResolver.isSnapshotPath,
+ toMatchInlineSnapshot,
+ toMatchSnapshot,
+ toThrowErrorMatchingInlineSnapshot,
+ toThrowErrorMatchingSnapshot,
+ utils
+};
+module.exports = JestSnapshot;
diff --git a/node_modules/jest-snapshot/build/mockSerializer.d.ts b/node_modules/jest-snapshot/build/mockSerializer.d.ts
new file mode 100644
index 0000000..828986e
--- /dev/null
+++ b/node_modules/jest-snapshot/build/mockSerializer.d.ts
@@ -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 'pretty-format';
+export declare const serialize: NewPlugin['serialize'];
+export declare const test: NewPlugin['test'];
+declare const plugin: NewPlugin;
+export default plugin;
diff --git a/node_modules/jest-snapshot/build/mockSerializer.js b/node_modules/jest-snapshot/build/mockSerializer.js
new file mode 100644
index 0000000..bf1c78d
--- /dev/null
+++ b/node_modules/jest-snapshot/build/mockSerializer.js
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.test = exports.serialize = 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.
+ */
+const serialize = (val, config, indentation, depth, refs, printer) => {
+ // Serialize a non-default name, even if config.printFunctionName is false.
+ const name = val.getMockName();
+ const nameString = name === 'jest.fn()' ? '' : ' ' + name;
+ let callsString = '';
+
+ if (val.mock.calls.length !== 0) {
+ const indentationNext = indentation + config.indent;
+ callsString =
+ ' {' +
+ config.spacingOuter +
+ indentationNext +
+ '"calls": ' +
+ printer(val.mock.calls, config, indentationNext, depth, refs) +
+ (config.min ? ', ' : ',') +
+ config.spacingOuter +
+ indentationNext +
+ '"results": ' +
+ printer(val.mock.results, config, indentationNext, depth, refs) +
+ (config.min ? '' : ',') +
+ config.spacingOuter +
+ indentation +
+ '}';
+ }
+
+ return '[MockFunction' + nameString + ']' + callsString;
+};
+
+exports.serialize = serialize;
+
+const test = val => val && !!val._isMockFunction;
+
+exports.test = test;
+const plugin = {
+ serialize,
+ test
+};
+var _default = plugin;
+exports.default = _default;
diff --git a/node_modules/jest-snapshot/build/plugins.d.ts b/node_modules/jest-snapshot/build/plugins.d.ts
new file mode 100644
index 0000000..89b6d48
--- /dev/null
+++ b/node_modules/jest-snapshot/build/plugins.d.ts
@@ -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 { Plugin as PrettyFormatPlugin, Plugins as PrettyFormatPlugins } from 'pretty-format';
+export declare const addSerializer: (plugin: PrettyFormatPlugin) => void;
+export declare const getSerializers: () => PrettyFormatPlugins;
diff --git a/node_modules/jest-snapshot/build/plugins.js b/node_modules/jest-snapshot/build/plugins.js
new file mode 100644
index 0000000..6a3625b
--- /dev/null
+++ b/node_modules/jest-snapshot/build/plugins.js
@@ -0,0 +1,48 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.getSerializers = exports.addSerializer = void 0;
+
+var _prettyFormat = require('pretty-format');
+
+var _mockSerializer = _interopRequireDefault(require('./mockSerializer'));
+
+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 {
+ DOMCollection,
+ DOMElement,
+ Immutable,
+ ReactElement,
+ ReactTestComponent,
+ AsymmetricMatcher
+} = _prettyFormat.plugins;
+let PLUGINS = [
+ ReactTestComponent,
+ ReactElement,
+ DOMElement,
+ DOMCollection,
+ Immutable,
+ _mockSerializer.default,
+ AsymmetricMatcher
+]; // Prepend to list so the last added is the first tested.
+
+const addSerializer = plugin => {
+ PLUGINS = [plugin].concat(PLUGINS);
+};
+
+exports.addSerializer = addSerializer;
+
+const getSerializers = () => PLUGINS;
+
+exports.getSerializers = getSerializers;
diff --git a/node_modules/jest-snapshot/build/printSnapshot.d.ts b/node_modules/jest-snapshot/build/printSnapshot.d.ts
new file mode 100644
index 0000000..0325346
--- /dev/null
+++ b/node_modules/jest-snapshot/build/printSnapshot.d.ts
@@ -0,0 +1,24 @@
+/**
+ * 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 { DiffOptionsColor } from 'jest-diff';
+import type { MatchSnapshotConfig } from './types';
+declare type Chalk = chalk.Chalk;
+export declare const getSnapshotColorForChalkInstance: (chalkInstance: Chalk) => DiffOptionsColor;
+export declare const getReceivedColorForChalkInstance: (chalkInstance: Chalk) => DiffOptionsColor;
+export declare const aSnapshotColor: DiffOptionsColor;
+export declare const bReceivedColor: DiffOptionsColor;
+export declare const noColor: (string: string) => string;
+export declare const HINT_ARG = "hint";
+export declare const SNAPSHOT_ARG = "snapshot";
+export declare const PROPERTIES_ARG = "properties";
+export declare const matcherHintFromConfig: ({ context: { isNot, promise }, hint, inlineSnapshot, matcherName, properties, }: MatchSnapshotConfig, isUpdatable: boolean) => string;
+export declare const printExpected: (val: unknown) => string;
+export declare const printReceived: (val: unknown) => string;
+export declare const printPropertiesAndReceived: (properties: object, received: object, expand: boolean) => string;
+export declare const printSnapshotAndReceived: (a: string, b: string, received: unknown, expand: boolean) => string;
+export {};
diff --git a/node_modules/jest-snapshot/build/printSnapshot.js b/node_modules/jest-snapshot/build/printSnapshot.js
new file mode 100644
index 0000000..c5f186c
--- /dev/null
+++ b/node_modules/jest-snapshot/build/printSnapshot.js
@@ -0,0 +1,407 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.printSnapshotAndReceived =
+ exports.printReceived =
+ exports.printPropertiesAndReceived =
+ exports.printExpected =
+ exports.noColor =
+ exports.matcherHintFromConfig =
+ exports.getSnapshotColorForChalkInstance =
+ exports.getReceivedColorForChalkInstance =
+ exports.bReceivedColor =
+ exports.aSnapshotColor =
+ exports.SNAPSHOT_ARG =
+ exports.PROPERTIES_ARG =
+ exports.HINT_ARG =
+ void 0;
+
+var _chalk = _interopRequireDefault(require('chalk'));
+
+var _utils = require('expect/build/utils');
+
+var _jestDiff = require('jest-diff');
+
+var _jestGetType = require('jest-get-type');
+
+var _jestMatcherUtils = require('jest-matcher-utils');
+
+var _prettyFormat = require('pretty-format');
+
+var _colors = require('./colors');
+
+var _dedentLines = require('./dedentLines');
+
+var _utils2 = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/ban-types-eventually */
+// Temporary hack because getObjectSubset has known limitations,
+// is not in the public interface of the expect package,
+// and the long-term goal is to use a non-serialization diff.
+// Make sure to remove file from `exports` in `expect/package.json`.
+const getSnapshotColorForChalkInstance = chalkInstance => {
+ const level = chalkInstance.level;
+
+ if (level === 3) {
+ return chalkInstance
+ .rgb(
+ _colors.aForeground3[0],
+ _colors.aForeground3[1],
+ _colors.aForeground3[2]
+ )
+ .bgRgb(
+ _colors.aBackground3[0],
+ _colors.aBackground3[1],
+ _colors.aBackground3[2]
+ );
+ }
+
+ if (level === 2) {
+ return chalkInstance
+ .ansi256(_colors.aForeground2)
+ .bgAnsi256(_colors.aBackground2);
+ }
+
+ return chalkInstance.magenta.bgYellowBright;
+};
+
+exports.getSnapshotColorForChalkInstance = getSnapshotColorForChalkInstance;
+
+const getReceivedColorForChalkInstance = chalkInstance => {
+ const level = chalkInstance.level;
+
+ if (level === 3) {
+ return chalkInstance
+ .rgb(
+ _colors.bForeground3[0],
+ _colors.bForeground3[1],
+ _colors.bForeground3[2]
+ )
+ .bgRgb(
+ _colors.bBackground3[0],
+ _colors.bBackground3[1],
+ _colors.bBackground3[2]
+ );
+ }
+
+ if (level === 2) {
+ return chalkInstance
+ .ansi256(_colors.bForeground2)
+ .bgAnsi256(_colors.bBackground2);
+ }
+
+ return chalkInstance.cyan.bgWhiteBright; // also known as teal
+};
+
+exports.getReceivedColorForChalkInstance = getReceivedColorForChalkInstance;
+const aSnapshotColor = getSnapshotColorForChalkInstance(_chalk.default);
+exports.aSnapshotColor = aSnapshotColor;
+const bReceivedColor = getReceivedColorForChalkInstance(_chalk.default);
+exports.bReceivedColor = bReceivedColor;
+
+const noColor = string => string;
+
+exports.noColor = noColor;
+const HINT_ARG = 'hint';
+exports.HINT_ARG = HINT_ARG;
+const SNAPSHOT_ARG = 'snapshot';
+exports.SNAPSHOT_ARG = SNAPSHOT_ARG;
+const PROPERTIES_ARG = 'properties';
+exports.PROPERTIES_ARG = PROPERTIES_ARG;
+
+const matcherHintFromConfig = (
+ {context: {isNot, promise}, hint, inlineSnapshot, matcherName, properties},
+ isUpdatable
+) => {
+ const options = {
+ isNot,
+ promise
+ };
+
+ if (isUpdatable) {
+ options.receivedColor = bReceivedColor;
+ }
+
+ let expectedArgument = '';
+
+ if (typeof properties === 'object') {
+ expectedArgument = PROPERTIES_ARG;
+
+ if (isUpdatable) {
+ options.expectedColor = noColor;
+ }
+
+ if (typeof hint === 'string' && hint.length !== 0) {
+ options.secondArgument = HINT_ARG;
+ options.secondArgumentColor = _jestMatcherUtils.BOLD_WEIGHT;
+ } else if (typeof inlineSnapshot === 'string') {
+ options.secondArgument = SNAPSHOT_ARG;
+
+ if (isUpdatable) {
+ options.secondArgumentColor = aSnapshotColor;
+ } else {
+ options.secondArgumentColor = noColor;
+ }
+ }
+ } else {
+ if (typeof hint === 'string' && hint.length !== 0) {
+ expectedArgument = HINT_ARG;
+ options.expectedColor = _jestMatcherUtils.BOLD_WEIGHT;
+ } else if (typeof inlineSnapshot === 'string') {
+ expectedArgument = SNAPSHOT_ARG;
+
+ if (isUpdatable) {
+ options.expectedColor = aSnapshotColor;
+ }
+ }
+ }
+
+ return (0, _jestMatcherUtils.matcherHint)(
+ matcherName,
+ undefined,
+ expectedArgument,
+ options
+ );
+}; // Given array of diffs, return string:
+// * include common substrings
+// * exclude change substrings which have opposite op
+// * include change substrings which have argument op
+// with change color only if there is a common substring
+
+exports.matcherHintFromConfig = matcherHintFromConfig;
+
+const joinDiffs = (diffs, op, hasCommon) =>
+ diffs.reduce(
+ (reduced, diff) =>
+ reduced +
+ (diff[0] === _jestDiff.DIFF_EQUAL
+ ? diff[1]
+ : diff[0] !== op
+ ? ''
+ : hasCommon
+ ? (0, _jestMatcherUtils.INVERTED_COLOR)(diff[1])
+ : diff[1]),
+ ''
+ );
+
+const isLineDiffable = received => {
+ const receivedType = (0, _jestGetType.getType)(received);
+
+ if ((0, _jestGetType.isPrimitive)(received)) {
+ return typeof received === 'string';
+ }
+
+ if (
+ receivedType === 'date' ||
+ receivedType === 'function' ||
+ receivedType === 'regexp'
+ ) {
+ return false;
+ }
+
+ if (received instanceof Error) {
+ return false;
+ }
+
+ if (
+ receivedType === 'object' &&
+ typeof received.asymmetricMatch === 'function'
+ ) {
+ return false;
+ }
+
+ return true;
+};
+
+const printExpected = val =>
+ (0, _jestMatcherUtils.EXPECTED_COLOR)((0, _utils2.minify)(val));
+
+exports.printExpected = printExpected;
+
+const printReceived = val =>
+ (0, _jestMatcherUtils.RECEIVED_COLOR)((0, _utils2.minify)(val));
+
+exports.printReceived = printReceived;
+
+const printPropertiesAndReceived = (
+ properties,
+ received,
+ expand // CLI options: true if `--expand` or false if `--no-expand`
+) => {
+ const aAnnotation = 'Expected properties';
+ const bAnnotation = 'Received value';
+
+ if (isLineDiffable(properties) && isLineDiffable(received)) {
+ return (0, _jestDiff.diffLinesUnified)(
+ (0, _utils2.serialize)(properties).split('\n'),
+ (0, _utils2.serialize)(
+ (0, _utils.getObjectSubset)(received, properties)
+ ).split('\n'),
+ {
+ aAnnotation,
+ aColor: _jestMatcherUtils.EXPECTED_COLOR,
+ bAnnotation,
+ bColor: _jestMatcherUtils.RECEIVED_COLOR,
+ changeLineTrailingSpaceColor: _chalk.default.bgYellow,
+ commonLineTrailingSpaceColor: _chalk.default.bgYellow,
+ emptyFirstOrLastLinePlaceholder: '↵',
+ // U+21B5
+ expand,
+ includeChangeCounts: true
+ }
+ );
+ }
+
+ const printLabel = (0, _jestMatcherUtils.getLabelPrinter)(
+ aAnnotation,
+ bAnnotation
+ );
+ return (
+ printLabel(aAnnotation) +
+ printExpected(properties) +
+ '\n' +
+ printLabel(bAnnotation) +
+ printReceived(received)
+ );
+};
+
+exports.printPropertiesAndReceived = printPropertiesAndReceived;
+const MAX_DIFF_STRING_LENGTH = 20000;
+
+const printSnapshotAndReceived = (
+ a,
+ b,
+ received,
+ expand // CLI options: true if `--expand` or false if `--no-expand`
+) => {
+ const aAnnotation = 'Snapshot';
+ const bAnnotation = 'Received';
+ const aColor = aSnapshotColor;
+ const bColor = bReceivedColor;
+ const options = {
+ aAnnotation,
+ aColor,
+ bAnnotation,
+ bColor,
+ changeLineTrailingSpaceColor: noColor,
+ commonLineTrailingSpaceColor: _chalk.default.bgYellow,
+ emptyFirstOrLastLinePlaceholder: '↵',
+ // U+21B5
+ expand,
+ includeChangeCounts: true
+ };
+
+ if (typeof received === 'string') {
+ if (
+ a.length >= 2 &&
+ a.startsWith('"') &&
+ a.endsWith('"') &&
+ b === (0, _prettyFormat.format)(received)
+ ) {
+ // If snapshot looks like default serialization of a string
+ // and received is string which has default serialization.
+ if (!a.includes('\n') && !b.includes('\n')) {
+ // If neither string is multiline,
+ // display as labels and quoted strings.
+ let aQuoted = a;
+ let bQuoted = b;
+
+ if (
+ a.length - 2 <= MAX_DIFF_STRING_LENGTH &&
+ b.length - 2 <= MAX_DIFF_STRING_LENGTH
+ ) {
+ const diffs = (0, _jestDiff.diffStringsRaw)(
+ a.slice(1, -1),
+ b.slice(1, -1),
+ true
+ );
+ const hasCommon = diffs.some(
+ diff => diff[0] === _jestDiff.DIFF_EQUAL
+ );
+ aQuoted =
+ '"' + joinDiffs(diffs, _jestDiff.DIFF_DELETE, hasCommon) + '"';
+ bQuoted =
+ '"' + joinDiffs(diffs, _jestDiff.DIFF_INSERT, hasCommon) + '"';
+ }
+
+ const printLabel = (0, _jestMatcherUtils.getLabelPrinter)(
+ aAnnotation,
+ bAnnotation
+ );
+ return (
+ printLabel(aAnnotation) +
+ aColor(aQuoted) +
+ '\n' +
+ printLabel(bAnnotation) +
+ bColor(bQuoted)
+ );
+ } // Else either string is multiline, so display as unquoted strings.
+
+ a = (0, _utils2.deserializeString)(a); // hypothetical expected string
+
+ b = received; // not serialized
+ } // Else expected had custom serialization or was not a string
+ // or received has custom serialization.
+
+ return a.length <= MAX_DIFF_STRING_LENGTH &&
+ b.length <= MAX_DIFF_STRING_LENGTH
+ ? (0, _jestDiff.diffStringsUnified)(a, b, options)
+ : (0, _jestDiff.diffLinesUnified)(a.split('\n'), b.split('\n'), options);
+ }
+
+ if (isLineDiffable(received)) {
+ const aLines2 = a.split('\n');
+ const bLines2 = b.split('\n'); // Fall through to fix a regression for custom serializers
+ // like jest-snapshot-serializer-raw that ignore the indent option.
+
+ const b0 = (0, _utils2.serialize)(received, 0);
+
+ if (b0 !== b) {
+ const aLines0 = (0, _dedentLines.dedentLines)(aLines2);
+
+ if (aLines0 !== null) {
+ // Compare lines without indentation.
+ const bLines0 = b0.split('\n');
+ return (0, _jestDiff.diffLinesUnified2)(
+ aLines2,
+ bLines2,
+ aLines0,
+ bLines0,
+ options
+ );
+ }
+ } // Fall back because:
+ // * props include a multiline string
+ // * text has more than one adjacent line
+ // * markup does not close
+
+ return (0, _jestDiff.diffLinesUnified)(aLines2, bLines2, options);
+ }
+
+ const printLabel = (0, _jestMatcherUtils.getLabelPrinter)(
+ aAnnotation,
+ bAnnotation
+ );
+ return (
+ printLabel(aAnnotation) +
+ aColor(a) +
+ '\n' +
+ printLabel(bAnnotation) +
+ bColor(b)
+ );
+};
+
+exports.printSnapshotAndReceived = printSnapshotAndReceived;
diff --git a/node_modules/jest-snapshot/build/types.d.ts b/node_modules/jest-snapshot/build/types.d.ts
new file mode 100644
index 0000000..627f1ac
--- /dev/null
+++ b/node_modules/jest-snapshot/build/types.d.ts
@@ -0,0 +1,25 @@
+/**
+ * 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 { MatcherState } from 'expect';
+import type SnapshotState from './State';
+export declare type Context = MatcherState & {
+ snapshotState: SnapshotState;
+};
+export declare type MatchSnapshotConfig = {
+ context: Context;
+ hint?: string;
+ inlineSnapshot?: string;
+ isInline: boolean;
+ matcherName: string;
+ properties?: object;
+ received: any;
+};
+export declare type SnapshotData = Record<string, string>;
+export declare type ExpectationResult = {
+ pass: boolean;
+ message: () => string;
+};
diff --git a/node_modules/jest-snapshot/build/types.js b/node_modules/jest-snapshot/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/jest-snapshot/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/jest-snapshot/build/utils.d.ts b/node_modules/jest-snapshot/build/utils.d.ts
new file mode 100644
index 0000000..3b17cc2
--- /dev/null
+++ b/node_modules/jest-snapshot/build/utils.d.ts
@@ -0,0 +1,28 @@
+/**
+ * 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 } from '@jest/types';
+import { OptionsReceived as PrettyFormatOptions } from 'pretty-format';
+import type { SnapshotData } from './types';
+export declare const SNAPSHOT_VERSION = "1";
+export declare const SNAPSHOT_GUIDE_LINK = "https://goo.gl/fbAQLP";
+export declare const SNAPSHOT_VERSION_WARNING: string;
+export declare const testNameToKey: (testName: Config.Path, count: number) => string;
+export declare const keyToTestName: (key: string) => string;
+export declare const getSnapshotData: (snapshotPath: Config.Path, update: Config.SnapshotUpdateState) => {
+ data: SnapshotData;
+ dirty: boolean;
+};
+export declare const addExtraLineBreaks: (string: string) => string;
+export declare const removeExtraLineBreaks: (string: string) => string;
+export declare const removeLinesBeforeExternalMatcherTrap: (stack: string) => string;
+export declare const serialize: (val: unknown, indent?: number, formatOverrides?: PrettyFormatOptions) => string;
+export declare const minify: (val: unknown) => string;
+export declare const deserializeString: (stringified: string) => string;
+export declare const escapeBacktickString: (str: string) => string;
+export declare const ensureDirectoryExists: (filePath: Config.Path) => void;
+export declare const saveSnapshotFile: (snapshotData: SnapshotData, snapshotPath: Config.Path) => void;
+export declare const deepMerge: (target: any, source: any) => any;
diff --git a/node_modules/jest-snapshot/build/utils.js b/node_modules/jest-snapshot/build/utils.js
new file mode 100644
index 0000000..3c6b4ba
--- /dev/null
+++ b/node_modules/jest-snapshot/build/utils.js
@@ -0,0 +1,460 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.testNameToKey =
+ exports.serialize =
+ exports.saveSnapshotFile =
+ exports.removeLinesBeforeExternalMatcherTrap =
+ exports.removeExtraLineBreaks =
+ exports.minify =
+ exports.keyToTestName =
+ exports.getSnapshotData =
+ exports.escapeBacktickString =
+ exports.ensureDirectoryExists =
+ exports.deserializeString =
+ exports.deepMerge =
+ exports.addExtraLineBreaks =
+ exports.SNAPSHOT_VERSION_WARNING =
+ exports.SNAPSHOT_VERSION =
+ exports.SNAPSHOT_GUIDE_LINK =
+ void 0;
+
+var path = _interopRequireWildcard(require('path'));
+
+var _chalk = _interopRequireDefault(require('chalk'));
+
+var fs = _interopRequireWildcard(require('graceful-fs'));
+
+var _naturalCompare = _interopRequireDefault(require('natural-compare'));
+
+var _prettyFormat = require('pretty-format');
+
+var _plugins = require('./plugins');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestWriteFile =
+ global[Symbol.for('jest-native-write-file')] || fs.writeFileSync;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestReadFile =
+ global[Symbol.for('jest-native-read-file')] || fs.readFileSync;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
+
+var global = (function () {
+ if (typeof globalThis !== 'undefined') {
+ return globalThis;
+ } else if (typeof global !== 'undefined') {
+ return global;
+ } else if (typeof self !== 'undefined') {
+ return self;
+ } else if (typeof window !== 'undefined') {
+ return window;
+ } else {
+ return Function('return this')();
+ }
+})();
+
+var jestExistsFile =
+ global[Symbol.for('jest-native-exists-file')] || fs.existsSync;
+const SNAPSHOT_VERSION = '1';
+exports.SNAPSHOT_VERSION = SNAPSHOT_VERSION;
+const SNAPSHOT_VERSION_REGEXP = /^\/\/ Jest Snapshot v(.+),/;
+const SNAPSHOT_GUIDE_LINK = 'https://goo.gl/fbAQLP';
+exports.SNAPSHOT_GUIDE_LINK = SNAPSHOT_GUIDE_LINK;
+
+const SNAPSHOT_VERSION_WARNING = _chalk.default.yellow(
+ `${_chalk.default.bold('Warning')}: Before you upgrade snapshots, ` +
+ 'we recommend that you revert any local changes to tests or other code, ' +
+ 'to ensure that you do not store invalid state.'
+);
+
+exports.SNAPSHOT_VERSION_WARNING = SNAPSHOT_VERSION_WARNING;
+
+const writeSnapshotVersion = () =>
+ `// Jest Snapshot v${SNAPSHOT_VERSION}, ${SNAPSHOT_GUIDE_LINK}`;
+
+const validateSnapshotVersion = snapshotContents => {
+ const versionTest = SNAPSHOT_VERSION_REGEXP.exec(snapshotContents);
+ const version = versionTest && versionTest[1];
+
+ if (!version) {
+ return new Error(
+ _chalk.default.red(
+ `${_chalk.default.bold(
+ 'Outdated snapshot'
+ )}: No snapshot header found. ` +
+ 'Jest 19 introduced versioned snapshots to ensure all developers ' +
+ 'on a project are using the same version of Jest. ' +
+ 'Please update all snapshots during this upgrade of Jest.\n\n'
+ ) + SNAPSHOT_VERSION_WARNING
+ );
+ }
+
+ if (version < SNAPSHOT_VERSION) {
+ return new Error(
+ _chalk.default.red(
+ `${_chalk.default.red.bold(
+ 'Outdated snapshot'
+ )}: The version of the snapshot ` +
+ 'file associated with this test is outdated. The snapshot file ' +
+ 'version ensures that all developers on a project are using ' +
+ 'the same version of Jest. ' +
+ 'Please update all snapshots during this upgrade of Jest.\n\n'
+ ) +
+ `Expected: v${SNAPSHOT_VERSION}\n` +
+ `Received: v${version}\n\n` +
+ SNAPSHOT_VERSION_WARNING
+ );
+ }
+
+ if (version > SNAPSHOT_VERSION) {
+ return new Error(
+ _chalk.default.red(
+ `${_chalk.default.red.bold(
+ 'Outdated Jest version'
+ )}: The version of this ` +
+ 'snapshot file indicates that this project is meant to be used ' +
+ 'with a newer version of Jest. The snapshot file version ensures ' +
+ 'that all developers on a project are using the same version of ' +
+ 'Jest. Please update your version of Jest and re-run the tests.\n\n'
+ ) +
+ `Expected: v${SNAPSHOT_VERSION}\n` +
+ `Received: v${version}`
+ );
+ }
+
+ return null;
+};
+
+function isObject(item) {
+ return item != null && typeof item === 'object' && !Array.isArray(item);
+}
+
+const testNameToKey = (testName, count) => testName + ' ' + count;
+
+exports.testNameToKey = testNameToKey;
+
+const keyToTestName = key => {
+ if (!/ \d+$/.test(key)) {
+ throw new Error('Snapshot keys must end with a number.');
+ }
+
+ return key.replace(/ \d+$/, '');
+};
+
+exports.keyToTestName = keyToTestName;
+
+const getSnapshotData = (snapshotPath, update) => {
+ const data = Object.create(null);
+ let snapshotContents = '';
+ let dirty = false;
+
+ if (jestExistsFile(snapshotPath)) {
+ try {
+ snapshotContents = jestReadFile(snapshotPath, 'utf8'); // eslint-disable-next-line no-new-func
+
+ const populate = new Function('exports', snapshotContents);
+ populate(data);
+ } catch {}
+ }
+
+ const validationResult = validateSnapshotVersion(snapshotContents);
+ const isInvalid = snapshotContents && validationResult;
+
+ if (update === 'none' && isInvalid) {
+ throw validationResult;
+ }
+
+ if ((update === 'all' || update === 'new') && isInvalid) {
+ dirty = true;
+ }
+
+ return {
+ data,
+ dirty
+ };
+}; // Add extra line breaks at beginning and end of multiline snapshot
+// to make the content easier to read.
+
+exports.getSnapshotData = getSnapshotData;
+
+const addExtraLineBreaks = string =>
+ string.includes('\n') ? `\n${string}\n` : string; // Remove extra line breaks at beginning and end of multiline snapshot.
+// Instead of trim, which can remove additional newlines or spaces
+// at beginning or end of the content from a custom serializer.
+
+exports.addExtraLineBreaks = addExtraLineBreaks;
+
+const removeExtraLineBreaks = string =>
+ string.length > 2 && string.startsWith('\n') && string.endsWith('\n')
+ ? string.slice(1, -1)
+ : string;
+
+exports.removeExtraLineBreaks = removeExtraLineBreaks;
+
+const removeLinesBeforeExternalMatcherTrap = stack => {
+ const lines = stack.split('\n');
+
+ for (let i = 0; i < lines.length; i += 1) {
+ // It's a function name specified in `packages/expect/src/index.ts`
+ // for external custom matchers.
+ if (lines[i].includes('__EXTERNAL_MATCHER_TRAP__')) {
+ return lines.slice(i + 1).join('\n');
+ }
+ }
+
+ return stack;
+};
+
+exports.removeLinesBeforeExternalMatcherTrap =
+ removeLinesBeforeExternalMatcherTrap;
+const escapeRegex = true;
+const printFunctionName = false;
+
+const serialize = (val, indent = 2, formatOverrides = {}) =>
+ normalizeNewlines(
+ (0, _prettyFormat.format)(val, {
+ escapeRegex,
+ indent,
+ plugins: (0, _plugins.getSerializers)(),
+ printFunctionName,
+ ...formatOverrides
+ })
+ );
+
+exports.serialize = serialize;
+
+const minify = val =>
+ (0, _prettyFormat.format)(val, {
+ escapeRegex,
+ min: true,
+ plugins: (0, _plugins.getSerializers)(),
+ printFunctionName
+ }); // Remove double quote marks and unescape double quotes and backslashes.
+
+exports.minify = minify;
+
+const deserializeString = stringified =>
+ stringified.slice(1, -1).replace(/\\("|\\)/g, '$1');
+
+exports.deserializeString = deserializeString;
+
+const escapeBacktickString = str => str.replace(/`|\\|\${/g, '\\$&');
+
+exports.escapeBacktickString = escapeBacktickString;
+
+const printBacktickString = str => '`' + escapeBacktickString(str) + '`';
+
+const ensureDirectoryExists = filePath => {
+ try {
+ fs.mkdirSync(path.join(path.dirname(filePath)), {
+ recursive: true
+ });
+ } catch {}
+};
+
+exports.ensureDirectoryExists = ensureDirectoryExists;
+
+const normalizeNewlines = string => string.replace(/\r\n|\r/g, '\n');
+
+const saveSnapshotFile = (snapshotData, snapshotPath) => {
+ const snapshots = Object.keys(snapshotData)
+ .sort(_naturalCompare.default)
+ .map(
+ key =>
+ 'exports[' +
+ printBacktickString(key) +
+ '] = ' +
+ printBacktickString(normalizeNewlines(snapshotData[key])) +
+ ';'
+ );
+ ensureDirectoryExists(snapshotPath);
+ jestWriteFile(
+ snapshotPath,
+ writeSnapshotVersion() + '\n\n' + snapshots.join('\n\n') + '\n'
+ );
+};
+
+exports.saveSnapshotFile = saveSnapshotFile;
+
+const deepMergeArray = (target, source) => {
+ const mergedOutput = Array.from(target);
+ source.forEach((sourceElement, index) => {
+ const targetElement = mergedOutput[index];
+
+ if (Array.isArray(target[index])) {
+ mergedOutput[index] = deepMergeArray(target[index], sourceElement);
+ } else if (isObject(targetElement)) {
+ mergedOutput[index] = deepMerge(target[index], sourceElement);
+ } else {
+ // Source does not exist in target or target is primitive and cannot be deep merged
+ mergedOutput[index] = sourceElement;
+ }
+ });
+ return mergedOutput;
+}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
+
+const deepMerge = (target, source) => {
+ if (isObject(target) && isObject(source)) {
+ const mergedOutput = {...target};
+ Object.keys(source).forEach(key => {
+ if (isObject(source[key]) && !source[key].$$typeof) {
+ if (!(key in target))
+ Object.assign(mergedOutput, {
+ [key]: source[key]
+ });
+ else mergedOutput[key] = deepMerge(target[key], source[key]);
+ } else if (Array.isArray(source[key])) {
+ mergedOutput[key] = deepMergeArray(target[key], source[key]);
+ } else {
+ Object.assign(mergedOutput, {
+ [key]: source[key]
+ });
+ }
+ });
+ return mergedOutput;
+ } else if (Array.isArray(target) && Array.isArray(source)) {
+ return deepMergeArray(target, source);
+ }
+
+ return target;
+};
+
+exports.deepMerge = deepMerge;
diff --git a/node_modules/jest-snapshot/node_modules/.bin/semver b/node_modules/jest-snapshot/node_modules/.bin/semver
new file mode 120000
index 0000000..5aaadf4
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/.bin/semver
@@ -0,0 +1 @@
+../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/jest-snapshot/node_modules/semver/CHANGELOG.md b/node_modules/jest-snapshot/node_modules/semver/CHANGELOG.md
new file mode 100644
index 0000000..220af17
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/CHANGELOG.md
@@ -0,0 +1,111 @@
+# changes log
+
+## 7.3.0
+
+* Add `subset(r1, r2)` method to determine if `r1` range is entirely
+ contained by `r2` range.
+
+## 7.2.3
+
+* Fix handling of `includePrelease` mode where version ranges like `1.0.0 -
+ 2.0.0` would include `3.0.0-pre` and not `1.0.0-pre`.
+
+## 7.2.2
+
+* Fix bug where `2.0.0-pre` would be included in `^1.0.0` if
+ `includePrerelease` was set to true.
+
+## 7.2.0
+
+* Add `simplifyRange` method to attempt to generate a more human-readable
+ range expression that is equivalent to a supplied range, for a given set
+ of versions.
+
+## 7.1.2
+
+* Remove fancy lazy-loading logic, as it was causing problems for webpack
+ users.
+
+## 7.1.0
+
+* Add `require('semver/preload')` to load the entire module without using
+ lazy getter methods.
+
+## 7.0.0
+
+* Refactor module into separate files for better tree-shaking
+* Drop support for very old node versions, use const/let, `=>` functions,
+ and classes.
+
+## 6.3.0
+
+* Expose the token enum on the exports
+
+## 6.2.0
+
+* Coerce numbers to strings when passed to semver.coerce()
+* Add `rtl` option to coerce from right to left
+
+## 6.1.3
+
+* Handle X-ranges properly in includePrerelease mode
+
+## 6.1.2
+
+* Do not throw when testing invalid version strings
+
+## 6.1.1
+
+* Add options support for semver.coerce()
+* Handle undefined version passed to Range.test
+
+## 6.1.0
+
+* Add semver.compareBuild function
+* Support `*` in semver.intersects
+
+## 6.0
+
+* Fix `intersects` logic.
+
+ This is technically a bug fix, but since it is also a change to behavior
+ that may require users updating their code, it is marked as a major
+ version increment.
+
+## 5.7
+
+* Add `minVersion` method
+
+## 5.6
+
+* Move boolean `loose` param to an options object, with
+ backwards-compatibility protection.
+* Add ability to opt out of special prerelease version handling with
+ the `includePrerelease` option flag.
+
+## 5.5
+
+* Add version coercion capabilities
+
+## 5.4
+
+* Add intersection checking
+
+## 5.3
+
+* Add `minSatisfying` method
+
+## 5.2
+
+* Add `prerelease(v)` that returns prerelease components
+
+## 5.1
+
+* Add Backus-Naur for ranges
+* Remove excessively cute inspection methods
+
+## 5.0
+
+* Remove AMD/Browserified build artifacts
+* Fix ltr and gtr when using the `*` range
+* Fix for range `*` with a prerelease identifier
diff --git a/node_modules/jest-snapshot/node_modules/semver/LICENSE b/node_modules/jest-snapshot/node_modules/semver/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/jest-snapshot/node_modules/semver/README.md b/node_modules/jest-snapshot/node_modules/semver/README.md
new file mode 100644
index 0000000..9bef045
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/README.md
@@ -0,0 +1,566 @@
+semver(1) -- The semantic versioner for npm
+===========================================
+
+## Install
+
+```bash
+npm install semver
+````
+
+## Usage
+
+As a node module:
+
+```js
+const semver = require('semver')
+
+semver.valid('1.2.3') // '1.2.3'
+semver.valid('a.b.c') // null
+semver.clean(' =v1.2.3 ') // '1.2.3'
+semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
+semver.gt('1.2.3', '9.8.7') // false
+semver.lt('1.2.3', '9.8.7') // true
+semver.minVersion('>=1.0.0') // '1.0.0'
+semver.valid(semver.coerce('v2')) // '2.0.0'
+semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
+```
+
+You can also just load the module for the function that you care about, if
+you'd like to minimize your footprint.
+
+```js
+// load the whole API at once in a single object
+const semver = require('semver')
+
+// or just load the bits you need
+// all of them listed here, just pick and choose what you want
+
+// classes
+const SemVer = require('semver/classes/semver')
+const Comparator = require('semver/classes/comparator')
+const Range = require('semver/classes/range')
+
+// functions for working with versions
+const semverParse = require('semver/functions/parse')
+const semverValid = require('semver/functions/valid')
+const semverClean = require('semver/functions/clean')
+const semverInc = require('semver/functions/inc')
+const semverDiff = require('semver/functions/diff')
+const semverMajor = require('semver/functions/major')
+const semverMinor = require('semver/functions/minor')
+const semverPatch = require('semver/functions/patch')
+const semverPrerelease = require('semver/functions/prerelease')
+const semverCompare = require('semver/functions/compare')
+const semverRcompare = require('semver/functions/rcompare')
+const semverCompareLoose = require('semver/functions/compare-loose')
+const semverCompareBuild = require('semver/functions/compare-build')
+const semverSort = require('semver/functions/sort')
+const semverRsort = require('semver/functions/rsort')
+
+// low-level comparators between versions
+const semverGt = require('semver/functions/gt')
+const semverLt = require('semver/functions/lt')
+const semverEq = require('semver/functions/eq')
+const semverNeq = require('semver/functions/neq')
+const semverGte = require('semver/functions/gte')
+const semverLte = require('semver/functions/lte')
+const semverCmp = require('semver/functions/cmp')
+const semverCoerce = require('semver/functions/coerce')
+
+// working with ranges
+const semverSatisfies = require('semver/functions/satisfies')
+const semverMaxSatisfying = require('semver/ranges/max-satisfying')
+const semverMinSatisfying = require('semver/ranges/min-satisfying')
+const semverToComparators = require('semver/ranges/to-comparators')
+const semverMinVersion = require('semver/ranges/min-version')
+const semverValidRange = require('semver/ranges/valid')
+const semverOutside = require('semver/ranges/outside')
+const semverGtr = require('semver/ranges/gtr')
+const semverLtr = require('semver/ranges/ltr')
+const semverIntersects = require('semver/ranges/intersects')
+const simplifyRange = require('semver/ranges/simplify')
+const rangeSubset = require('semver/ranges/subset')
+```
+
+As a command-line utility:
+
+```
+$ semver -h
+
+A JavaScript implementation of the https://semver.org/ specification
+Copyright Isaac Z. Schlueter
+
+Usage: semver [options] <version> [<version> [...]]
+Prints valid versions sorted by SemVer precedence
+
+Options:
+-r --range <range>
+ Print versions that match the specified range.
+
+-i --increment [<level>]
+ Increment a version by the specified level. Level can
+ be one of: major, minor, patch, premajor, preminor,
+ prepatch, or prerelease. Default level is 'patch'.
+ Only one version may be specified.
+
+--preid <identifier>
+ Identifier to be used to prefix premajor, preminor,
+ prepatch or prerelease version increments.
+
+-l --loose
+ Interpret versions and ranges loosely
+
+-p --include-prerelease
+ Always include prerelease versions in range matching
+
+-c --coerce
+ Coerce a string into SemVer if possible
+ (does not imply --loose)
+
+--rtl
+ Coerce version strings right to left
+
+--ltr
+ Coerce version strings left to right (default)
+
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
+
+If no satisfying versions are found, then exits failure.
+
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.
+```
+
+## Versions
+
+A "version" is described by the `v2.0.0` specification found at
+<https://semver.org/>.
+
+A leading `"="` or `"v"` character is stripped off and ignored.
+
+## Ranges
+
+A `version range` is a set of `comparators` which specify versions
+that satisfy the range.
+
+A `comparator` is composed of an `operator` and a `version`. The set
+of primitive `operators` is:
+
+* `<` Less than
+* `<=` Less than or equal to
+* `>` Greater than
+* `>=` Greater than or equal to
+* `=` Equal. If no operator is specified, then equality is assumed,
+ so this operator is optional, but MAY be included.
+
+For example, the comparator `>=1.2.7` would match the versions
+`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
+or `1.1.0`.
+
+Comparators can be joined by whitespace to form a `comparator set`,
+which is satisfied by the **intersection** of all of the comparators
+it includes.
+
+A range is composed of one or more comparator sets, joined by `||`. A
+version matches a range if and only if every comparator in at least
+one of the `||`-separated comparator sets is satisfied by the version.
+
+For example, the range `>=1.2.7 <1.3.0` would match the versions
+`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
+or `1.1.0`.
+
+The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
+`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
+
+### Prerelease Tags
+
+If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same `[major, minor, patch]` tuple also has a
+prerelease tag.
+
+For example, the range `>1.2.3-alpha.3` would be allowed to match the
+version `1.2.3-alpha.7`, but it would *not* be satisfied by
+`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
+than" `1.2.3-alpha.3` according to the SemVer sort rules. The version
+range only accepts prerelease tags on the `1.2.3` version. The
+version `3.4.5` *would* satisfy the range, because it does not have a
+prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
+
+The purpose for this behavior is twofold. First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
+Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use *that specific* set of
+alpha/beta/rc versions. By including a prerelease tag in the range,
+the user is indicating that they are aware of the risk. However, it
+is still not appropriate to assume that they have opted into taking a
+similar risk on the *next* set of prerelease versions.
+
+Note that this behavior can be suppressed (treating all prerelease
+versions as if they were normal versions, for the purpose of range
+matching) by setting the `includePrerelease` flag on the options
+object to any
+[functions](https://github.com/npm/node-semver#functions) that do
+range matching.
+
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+```javascript
+semver.inc('1.2.3', 'prerelease', 'beta')
+// '1.2.4-beta.0'
+```
+
+command-line example:
+
+```bash
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```bash
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
+### Advanced Range Syntax
+
+Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
+Advanced ranges may be combined in the same way as primitive
+comparators using white space or `||`.
+
+#### Hyphen Ranges `X.Y.Z - A.B.C`
+
+Specifies an inclusive set.
+
+* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
+
+If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
+
+If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0`
+* `1.2.3 - 2` := `>=1.2.3 <3.0.0-0`
+
+#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
+
+Any of `X`, `x`, or `*` may be used to "stand in" for one of the
+numeric values in the `[major, minor, patch]` tuple.
+
+* `*` := `>=0.0.0` (Any version satisfies)
+* `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version)
+* `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions)
+
+A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+* `""` (empty string) := `*` := `>=0.0.0`
+* `1` := `1.x.x` := `>=1.0.0 <2.0.0-0`
+* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0`
+
+#### Tilde Ranges `~1.2.3` `~1.2` `~1`
+
+Allows patch-level changes if a minor version is specified on the
+comparator. Allows minor-level changes if not.
+
+* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0`
+* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`)
+* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`)
+* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0`
+* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`)
+* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`)
+* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `1.2.4-beta.2` would not, because it is a prerelease of a
+ different `[major, minor, patch]` tuple.
+
+#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
+
+Allows changes that do not modify the left-most non-zero element in the
+`[major, minor, patch]` tuple. In other words, this allows patch and
+minor updates for versions `1.0.0` and above, patch updates for
+versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
+
+Many authors treat a `0.x` version as if the `x` were the major
+"breaking-change" indicator.
+
+Caret ranges are ideal when an author may make breaking changes
+between `0.2.4` and `0.3.0` releases, which is a common practice.
+However, it presumes that there will *not* be breaking changes between
+`0.2.4` and `0.2.5`. It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+* `^1.2.3` := `>=1.2.3 <2.0.0-0`
+* `^0.2.3` := `>=0.2.3 <0.3.0-0`
+* `^0.0.3` := `>=0.0.3 <0.0.4-0`
+* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `1.2.4-beta.2` would not, because it is a prerelease of a
+ different `[major, minor, patch]` tuple.
+* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the
+ `0.0.3` version *only* will be allowed, if they are greater than or
+ equal to `beta`. So, `0.0.3-pr.2` would be allowed.
+
+When parsing caret ranges, a missing `patch` value desugars to the
+number `0`, but will allow flexibility within that value, even if the
+major and minor versions are both `0`.
+
+* `^1.2.x` := `>=1.2.0 <2.0.0-0`
+* `^0.0.x` := `>=0.0.0 <0.1.0-0`
+* `^0.0` := `>=0.0.0 <0.1.0-0`
+
+A missing `minor` and `patch` values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+* `^1.x` := `>=1.0.0 <2.0.0-0`
+* `^0.x` := `>=0.0.0 <1.0.0-0`
+
+### Range Grammar
+
+Putting all this together, here is a Backus-Naur grammar for ranges,
+for the benefit of parser authors:
+
+```bnf
+range-set ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen ::= partial ' - ' partial
+simple ::= primitive | partial | tilde | caret
+primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr ::= 'x' | 'X' | '*' | nr
+nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
+tilde ::= '~' partial
+caret ::= '^' partial
+qualifier ::= ( '-' pre )? ( '+' build )?
+pre ::= parts
+build ::= parts
+parts ::= part ( '.' part ) *
+part ::= nr | [-0-9A-Za-z]+
+```
+
+## Functions
+
+All methods and classes take a final `options` object argument. All
+options in this object are `false` by default. The options supported
+are:
+
+- `loose` Be more forgiving about not-quite-valid semver strings.
+ (Any resulting output will always be 100% strict compliant, of
+ course.) For backwards compatibility reasons, if the `options`
+ argument is a boolean value instead of an object, it is interpreted
+ to be the `loose` param.
+- `includePrerelease` Set to suppress the [default
+ behavior](https://github.com/npm/node-semver#prerelease-tags) of
+ excluding prerelease tagged versions from ranges unless they are
+ explicitly opted into.
+
+Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.
+
+* `valid(v)`: Return the parsed version, or null if it's not valid.
+* `inc(v, release)`: Return the version incremented by the release
+ type (`major`, `premajor`, `minor`, `preminor`, `patch`,
+ `prepatch`, or `prerelease`), or null if it's not valid
+ * `premajor` in one call will bump the version up to the next major
+ version and down to a prerelease of that major version.
+ `preminor`, and `prepatch` work the same way.
+ * If called from a non-prerelease version, the `prerelease` will work the
+ same as `prepatch`. It increments the patch version, then makes a
+ prerelease. If the input version is already a prerelease it simply
+ increments it.
+* `prerelease(v)`: Returns an array of prerelease components, or null
+ if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
+* `major(v)`: Return the major version number.
+* `minor(v)`: Return the minor version number.
+* `patch(v)`: Return the patch version number.
+* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
+ or comparators intersect.
+* `parse(v)`: Attempt to parse a string as a semantic version, returning either
+ a `SemVer` object or `null`.
+
+### Comparison
+
+* `gt(v1, v2)`: `v1 > v2`
+* `gte(v1, v2)`: `v1 >= v2`
+* `lt(v1, v2)`: `v1 < v2`
+* `lte(v1, v2)`: `v1 <= v2`
+* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
+ even if they're not the exact same string. You already know how to
+ compare strings.
+* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
+* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
+ the corresponding function above. `"==="` and `"!=="` do simple
+ string comparison, but are included for completeness. Throws if an
+ invalid comparison string is provided.
+* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
+ `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
+* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
+ in descending order when passed to `Array.sort()`.
+* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions
+ are equal. Sorts in ascending order if passed to `Array.sort()`.
+ `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+ (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+ or null if the versions are the same.
+
+### Comparators
+
+* `intersects(comparator)`: Return true if the comparators intersect
+
+### Ranges
+
+* `validRange(range)`: Return the valid range or null if it's not valid
+* `satisfies(version, range)`: Return true if the version satisfies the
+ range.
+* `maxSatisfying(versions, range)`: Return the highest version in the list
+ that satisfies the range, or `null` if none of them do.
+* `minSatisfying(versions, range)`: Return the lowest version in the list
+ that satisfies the range, or `null` if none of them do.
+* `minVersion(range)`: Return the lowest version that can possibly match
+ the given range.
+* `gtr(version, range)`: Return `true` if version is greater than all the
+ versions possible in the range.
+* `ltr(version, range)`: Return `true` if version is less than all the
+ versions possible in the range.
+* `outside(version, range, hilo)`: Return true if the version is outside
+ the bounds of the range in either the high or low direction. The
+ `hilo` argument must be either the string `'>'` or `'<'`. (This is
+ the function called by `gtr` and `ltr`.)
+* `intersects(range)`: Return true if any of the ranges comparators intersect
+* `simplifyRange(versions, range)`: Return a "simplified" range that
+ matches the same items in `versions` list as the range specified. Note
+ that it does *not* guarantee that it would match the same versions in all
+ cases, only for the set of versions provided. This is useful when
+ generating ranges by joining together multiple versions with `||`
+ programmatically, to provide the user with something a bit more
+ ergonomic. If the provided range is shorter in string-length than the
+ generated range, then that is returned.
+* `subset(subRange, superRange)`: Return `true` if the `subRange` range is
+ entirely contained by the `superRange` range.
+
+Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, *or* satisfy a range! For
+example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
+until `2.0.0`, so the version `1.2.10` would not be greater than the
+range (because `2.0.1` satisfies, which is higher), nor less than the
+range (since `1.2.8` satisfies, which is lower), and it also does not
+satisfy the range.
+
+If you want to know if a version satisfies or does not satisfy a
+range, use the `satisfies(version, range)` function.
+
+### Coercion
+
+* `coerce(version, options)`: Coerces a string to semver if possible
+
+This aims to provide a very forgiving translation of a non-semver string to
+semver. It looks for the first digit in a string, and consumes all
+remaining characters which satisfy at least a partial semver (e.g., `1`,
+`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer
+versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All
+surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes
+`3.4.0`). Only text which lacks digits will fail coercion (`version one`
+is not valid). The maximum length for any semver component considered for
+coercion is 16 characters; longer components will be ignored
+(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any
+semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value
+components are invalid (`9999999999999999.4.7.4` is likely invalid).
+
+If the `options.rtl` flag is set, then `coerce` will return the right-most
+coercible tuple that does not share an ending index with a longer coercible
+tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not
+`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of
+any other overlapping SemVer tuple.
+
+### Clean
+
+* `clean(version)`: Clean a string to be a valid semver if possible
+
+This will return a cleaned and trimmed semver version. If the provided
+version is not valid a null will be returned. This does not work for
+ranges.
+
+ex.
+* `s.clean(' = v 2.1.5foo')`: `null`
+* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'`
+* `s.clean(' = v 2.1.5-foo')`: `null`
+* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'`
+* `s.clean('=v2.1.5')`: `'2.1.5'`
+* `s.clean(' =v2.1.5')`: `2.1.5`
+* `s.clean(' 2.1.5 ')`: `'2.1.5'`
+* `s.clean('~1.0.0')`: `null`
+
+## Exported Modules
+
+<!--
+TODO: Make sure that all of these items are documented (classes aren't,
+eg), and then pull the module name into the documentation for that specific
+thing.
+-->
+
+You may pull in just the part of this semver utility that you need, if you
+are sensitive to packing and tree-shaking concerns. The main
+`require('semver')` export uses getter functions to lazily load the parts
+of the API that are used.
+
+The following modules are available:
+
+* `require('semver')`
+* `require('semver/classes')`
+* `require('semver/classes/comparator')`
+* `require('semver/classes/range')`
+* `require('semver/classes/semver')`
+* `require('semver/functions/clean')`
+* `require('semver/functions/cmp')`
+* `require('semver/functions/coerce')`
+* `require('semver/functions/compare')`
+* `require('semver/functions/compare-build')`
+* `require('semver/functions/compare-loose')`
+* `require('semver/functions/diff')`
+* `require('semver/functions/eq')`
+* `require('semver/functions/gt')`
+* `require('semver/functions/gte')`
+* `require('semver/functions/inc')`
+* `require('semver/functions/lt')`
+* `require('semver/functions/lte')`
+* `require('semver/functions/major')`
+* `require('semver/functions/minor')`
+* `require('semver/functions/neq')`
+* `require('semver/functions/parse')`
+* `require('semver/functions/patch')`
+* `require('semver/functions/prerelease')`
+* `require('semver/functions/rcompare')`
+* `require('semver/functions/rsort')`
+* `require('semver/functions/satisfies')`
+* `require('semver/functions/sort')`
+* `require('semver/functions/valid')`
+* `require('semver/ranges/gtr')`
+* `require('semver/ranges/intersects')`
+* `require('semver/ranges/ltr')`
+* `require('semver/ranges/max-satisfying')`
+* `require('semver/ranges/min-satisfying')`
+* `require('semver/ranges/min-version')`
+* `require('semver/ranges/outside')`
+* `require('semver/ranges/to-comparators')`
+* `require('semver/ranges/valid')`
diff --git a/node_modules/jest-snapshot/node_modules/semver/bin/semver.js b/node_modules/jest-snapshot/node_modules/semver/bin/semver.js
new file mode 100755
index 0000000..73fe295
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/bin/semver.js
@@ -0,0 +1,173 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+const argv = process.argv.slice(2)
+
+let versions = []
+
+const range = []
+
+let inc = null
+
+const version = require('../package.json').version
+
+let loose = false
+
+let includePrerelease = false
+
+let coerce = false
+
+let rtl = false
+
+let identifier
+
+const semver = require('../')
+
+let reverse = false
+
+const options = {}
+
+const main = () => {
+ if (!argv.length) return help()
+ while (argv.length) {
+ let a = argv.shift()
+ const indexOfEqualSign = a.indexOf('=')
+ if (indexOfEqualSign !== -1) {
+ a = a.slice(0, indexOfEqualSign)
+ argv.unshift(a.slice(indexOfEqualSign + 1))
+ }
+ switch (a) {
+ case '-rv': case '-rev': case '--rev': case '--reverse':
+ reverse = true
+ break
+ case '-l': case '--loose':
+ loose = true
+ break
+ case '-p': case '--include-prerelease':
+ includePrerelease = true
+ break
+ case '-v': case '--version':
+ versions.push(argv.shift())
+ break
+ case '-i': case '--inc': case '--increment':
+ switch (argv[0]) {
+ case 'major': case 'minor': case 'patch': case 'prerelease':
+ case 'premajor': case 'preminor': case 'prepatch':
+ inc = argv.shift()
+ break
+ default:
+ inc = 'patch'
+ break
+ }
+ break
+ case '--preid':
+ identifier = argv.shift()
+ break
+ case '-r': case '--range':
+ range.push(argv.shift())
+ break
+ case '-c': case '--coerce':
+ coerce = true
+ break
+ case '--rtl':
+ rtl = true
+ break
+ case '--ltr':
+ rtl = false
+ break
+ case '-h': case '--help': case '-?':
+ return help()
+ default:
+ versions.push(a)
+ break
+ }
+ }
+
+ const options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
+
+ versions = versions.map((v) => {
+ return coerce ? (semver.coerce(v, options) || { version: v }).version : v
+ }).filter((v) => {
+ return semver.valid(v)
+ })
+ if (!versions.length) return fail()
+ if (inc && (versions.length !== 1 || range.length)) { return failInc() }
+
+ for (let i = 0, l = range.length; i < l; i++) {
+ versions = versions.filter((v) => {
+ return semver.satisfies(v, range[i], options)
+ })
+ if (!versions.length) return fail()
+ }
+ return success(versions)
+}
+
+
+const failInc = () => {
+ console.error('--inc can only be used on a single version with no range')
+ fail()
+}
+
+const fail = () => process.exit(1)
+
+const success = () => {
+ const compare = reverse ? 'rcompare' : 'compare'
+ versions.sort((a, b) => {
+ return semver[compare](a, b, options)
+ }).map((v) => {
+ return semver.clean(v, options)
+ }).map((v) => {
+ return inc ? semver.inc(v, inc, options, identifier) : v
+ }).forEach((v, i, _) => { console.log(v) })
+}
+
+const help = () => console.log(
+`SemVer ${version}
+
+A JavaScript implementation of the https://semver.org/ specification
+Copyright Isaac Z. Schlueter
+
+Usage: semver [options] <version> [<version> [...]]
+Prints valid versions sorted by SemVer precedence
+
+Options:
+-r --range <range>
+ Print versions that match the specified range.
+
+-i --increment [<level>]
+ Increment a version by the specified level. Level can
+ be one of: major, minor, patch, premajor, preminor,
+ prepatch, or prerelease. Default level is 'patch'.
+ Only one version may be specified.
+
+--preid <identifier>
+ Identifier to be used to prefix premajor, preminor,
+ prepatch or prerelease version increments.
+
+-l --loose
+ Interpret versions and ranges loosely
+
+-p --include-prerelease
+ Always include prerelease versions in range matching
+
+-c --coerce
+ Coerce a string into SemVer if possible
+ (does not imply --loose)
+
+--rtl
+ Coerce version strings right to left
+
+--ltr
+ Coerce version strings left to right (default)
+
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
+
+If no satisfying versions are found, then exits failure.
+
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.`)
+
+main()
diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js b/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js
new file mode 100644
index 0000000..dbbef2d
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js
@@ -0,0 +1,135 @@
+const ANY = Symbol('SemVer ANY')
+// hoisted class for cyclic dependency
+class Comparator {
+ static get ANY () {
+ return ANY
+ }
+ constructor (comp, options) {
+ options = parseOptions(options)
+
+ if (comp instanceof Comparator) {
+ if (comp.loose === !!options.loose) {
+ return comp
+ } else {
+ comp = comp.value
+ }
+ }
+
+ debug('comparator', comp, options)
+ this.options = options
+ this.loose = !!options.loose
+ this.parse(comp)
+
+ if (this.semver === ANY) {
+ this.value = ''
+ } else {
+ this.value = this.operator + this.semver.version
+ }
+
+ debug('comp', this)
+ }
+
+ parse (comp) {
+ const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+ const m = comp.match(r)
+
+ if (!m) {
+ throw new TypeError(`Invalid comparator: ${comp}`)
+ }
+
+ this.operator = m[1] !== undefined ? m[1] : ''
+ if (this.operator === '=') {
+ this.operator = ''
+ }
+
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2]) {
+ this.semver = ANY
+ } else {
+ this.semver = new SemVer(m[2], this.options.loose)
+ }
+ }
+
+ toString () {
+ return this.value
+ }
+
+ test (version) {
+ debug('Comparator.test', version, this.options.loose)
+
+ if (this.semver === ANY || version === ANY) {
+ return true
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
+ }
+ }
+
+ return cmp(version, this.operator, this.semver, this.options)
+ }
+
+ intersects (comp, options) {
+ if (!(comp instanceof Comparator)) {
+ throw new TypeError('a Comparator is required')
+ }
+
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
+ }
+ }
+
+ if (this.operator === '') {
+ if (this.value === '') {
+ return true
+ }
+ return new Range(comp.value, options).test(this.value)
+ } else if (comp.operator === '') {
+ if (comp.value === '') {
+ return true
+ }
+ return new Range(this.value, options).test(comp.semver)
+ }
+
+ const sameDirectionIncreasing =
+ (this.operator === '>=' || this.operator === '>') &&
+ (comp.operator === '>=' || comp.operator === '>')
+ const sameDirectionDecreasing =
+ (this.operator === '<=' || this.operator === '<') &&
+ (comp.operator === '<=' || comp.operator === '<')
+ const sameSemVer = this.semver.version === comp.semver.version
+ const differentDirectionsInclusive =
+ (this.operator === '>=' || this.operator === '<=') &&
+ (comp.operator === '>=' || comp.operator === '<=')
+ const oppositeDirectionsLessThan =
+ cmp(this.semver, '<', comp.semver, options) &&
+ (this.operator === '>=' || this.operator === '>') &&
+ (comp.operator === '<=' || comp.operator === '<')
+ const oppositeDirectionsGreaterThan =
+ cmp(this.semver, '>', comp.semver, options) &&
+ (this.operator === '<=' || this.operator === '<') &&
+ (comp.operator === '>=' || comp.operator === '>')
+
+ return (
+ sameDirectionIncreasing ||
+ sameDirectionDecreasing ||
+ (sameSemVer && differentDirectionsInclusive) ||
+ oppositeDirectionsLessThan ||
+ oppositeDirectionsGreaterThan
+ )
+ }
+}
+
+module.exports = Comparator
+
+const parseOptions = require('../internal/parse-options')
+const {re, t} = require('../internal/re')
+const cmp = require('../functions/cmp')
+const debug = require('../internal/debug')
+const SemVer = require('./semver')
+const Range = require('./range')
diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/index.js b/node_modules/jest-snapshot/node_modules/semver/classes/index.js
new file mode 100644
index 0000000..198b84d
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/classes/index.js
@@ -0,0 +1,5 @@
+module.exports = {
+ SemVer: require('./semver.js'),
+ Range: require('./range.js'),
+ Comparator: require('./comparator.js')
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/range.js b/node_modules/jest-snapshot/node_modules/semver/classes/range.js
new file mode 100644
index 0000000..aa04f6b
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/classes/range.js
@@ -0,0 +1,510 @@
+// hoisted class for cyclic dependency
+class Range {
+ constructor (range, options) {
+ options = parseOptions(options)
+
+ if (range instanceof Range) {
+ if (
+ range.loose === !!options.loose &&
+ range.includePrerelease === !!options.includePrerelease
+ ) {
+ return range
+ } else {
+ return new Range(range.raw, options)
+ }
+ }
+
+ if (range instanceof Comparator) {
+ // just put it in the set and return
+ this.raw = range.value
+ this.set = [[range]]
+ this.format()
+ return this
+ }
+
+ this.options = options
+ this.loose = !!options.loose
+ this.includePrerelease = !!options.includePrerelease
+
+ // First, split based on boolean or ||
+ this.raw = range
+ this.set = range
+ .split(/\s*\|\|\s*/)
+ // map the range to a 2d array of comparators
+ .map(range => this.parseRange(range.trim()))
+ // throw out any comparator lists that are empty
+ // this generally means that it was not a valid range, which is allowed
+ // in loose mode, but will still throw if the WHOLE range is invalid.
+ .filter(c => c.length)
+
+ if (!this.set.length) {
+ throw new TypeError(`Invalid SemVer Range: ${range}`)
+ }
+
+ // if we have any that are not the null set, throw out null sets.
+ if (this.set.length > 1) {
+ // keep the first one, in case they're all null sets
+ const first = this.set[0]
+ this.set = this.set.filter(c => !isNullSet(c[0]))
+ if (this.set.length === 0)
+ this.set = [first]
+ else if (this.set.length > 1) {
+ // if we have any that are *, then the range is just *
+ for (const c of this.set) {
+ if (c.length === 1 && isAny(c[0])) {
+ this.set = [c]
+ break
+ }
+ }
+ }
+ }
+
+ this.format()
+ }
+
+ format () {
+ this.range = this.set
+ .map((comps) => {
+ return comps.join(' ').trim()
+ })
+ .join('||')
+ .trim()
+ return this.range
+ }
+
+ toString () {
+ return this.range
+ }
+
+ parseRange (range) {
+ range = range.trim()
+
+ // memoize range parsing for performance.
+ // this is a very hot path, and fully deterministic.
+ const memoOpts = Object.keys(this.options).join(',')
+ const memoKey = `parseRange:${memoOpts}:${range}`
+ const cached = cache.get(memoKey)
+ if (cached)
+ return cached
+
+ const loose = this.options.loose
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+ const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
+ range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
+ debug('hyphen replace', range)
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+ range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
+ debug('comparator trim', range, re[t.COMPARATORTRIM])
+
+ // `~ 1.2.3` => `~1.2.3`
+ range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
+
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[t.CARETTRIM], caretTrimReplace)
+
+ // normalize spaces
+ range = range.split(/\s+/).join(' ')
+
+ // At this point, the range is completely trimmed and
+ // ready to be split into comparators.
+
+ const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+ const rangeList = range
+ .split(' ')
+ .map(comp => parseComparator(comp, this.options))
+ .join(' ')
+ .split(/\s+/)
+ // >=0.0.0 is equivalent to *
+ .map(comp => replaceGTE0(comp, this.options))
+ // in loose mode, throw out any that are not valid comparators
+ .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)
+ .map(comp => new Comparator(comp, this.options))
+
+ // if any comparators are the null set, then replace with JUST null set
+ // if more than one comparator, remove any * comparators
+ // also, don't include the same comparator more than once
+ const l = rangeList.length
+ const rangeMap = new Map()
+ for (const comp of rangeList) {
+ if (isNullSet(comp))
+ return [comp]
+ rangeMap.set(comp.value, comp)
+ }
+ if (rangeMap.size > 1 && rangeMap.has(''))
+ rangeMap.delete('')
+
+ const result = [...rangeMap.values()]
+ cache.set(memoKey, result)
+ return result
+ }
+
+ intersects (range, options) {
+ if (!(range instanceof Range)) {
+ throw new TypeError('a Range is required')
+ }
+
+ return this.set.some((thisComparators) => {
+ return (
+ isSatisfiable(thisComparators, options) &&
+ range.set.some((rangeComparators) => {
+ return (
+ isSatisfiable(rangeComparators, options) &&
+ thisComparators.every((thisComparator) => {
+ return rangeComparators.every((rangeComparator) => {
+ return thisComparator.intersects(rangeComparator, options)
+ })
+ })
+ )
+ })
+ )
+ })
+ }
+
+ // if ANY of the sets match ALL of its comparators, then pass
+ test (version) {
+ if (!version) {
+ return false
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
+ }
+ }
+
+ for (let i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version, this.options)) {
+ return true
+ }
+ }
+ return false
+ }
+}
+module.exports = Range
+
+const LRU = require('lru-cache')
+const cache = new LRU({ max: 1000 })
+
+const parseOptions = require('../internal/parse-options')
+const Comparator = require('./comparator')
+const debug = require('../internal/debug')
+const SemVer = require('./semver')
+const {
+ re,
+ t,
+ comparatorTrimReplace,
+ tildeTrimReplace,
+ caretTrimReplace
+} = require('../internal/re')
+
+const isNullSet = c => c.value === '<0.0.0-0'
+const isAny = c => c.value === ''
+
+// take a set of comparators and determine whether there
+// exists a version which can satisfy it
+const isSatisfiable = (comparators, options) => {
+ let result = true
+ const remainingComparators = comparators.slice()
+ let testComparator = remainingComparators.pop()
+
+ while (result && remainingComparators.length) {
+ result = remainingComparators.every((otherComparator) => {
+ return testComparator.intersects(otherComparator, options)
+ })
+
+ testComparator = remainingComparators.pop()
+ }
+
+ return result
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+const parseComparator = (comp, options) => {
+ debug('comp', comp, options)
+ comp = replaceCarets(comp, options)
+ debug('caret', comp)
+ comp = replaceTildes(comp, options)
+ debug('tildes', comp)
+ comp = replaceXRanges(comp, options)
+ debug('xrange', comp)
+ comp = replaceStars(comp, options)
+ debug('stars', comp)
+ return comp
+}
+
+const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
+
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
+const replaceTildes = (comp, options) =>
+ comp.trim().split(/\s+/).map((comp) => {
+ return replaceTilde(comp, options)
+ }).join(' ')
+
+const replaceTilde = (comp, options) => {
+ const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug('tilde', comp, _, M, m, p, pr)
+ let ret
+
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
+ } else if (isX(p)) {
+ // ~1.2 == >=1.2.0 <1.3.0-0
+ ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
+ } else if (pr) {
+ debug('replaceTilde pr', pr)
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${+m + 1}.0-0`
+ } else {
+ // ~1.2.3 == >=1.2.3 <1.3.0-0
+ ret = `>=${M}.${m}.${p
+ } <${M}.${+m + 1}.0-0`
+ }
+
+ debug('tilde return', ret)
+ return ret
+ })
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
+// ^1.2.3 --> >=1.2.3 <2.0.0-0
+// ^1.2.0 --> >=1.2.0 <2.0.0-0
+const replaceCarets = (comp, options) =>
+ comp.trim().split(/\s+/).map((comp) => {
+ return replaceCaret(comp, options)
+ }).join(' ')
+
+const replaceCaret = (comp, options) => {
+ debug('caret', comp, options)
+ const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
+ const z = options.includePrerelease ? '-0' : ''
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug('caret', comp, _, M, m, p, pr)
+ let ret
+
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
+ } else if (isX(p)) {
+ if (M === '0') {
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
+ } else {
+ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
+ }
+ } else if (pr) {
+ debug('replaceCaret pr', pr)
+ if (M === '0') {
+ if (m === '0') {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${m}.${+p + 1}-0`
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${+m + 1}.0-0`
+ }
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${+M + 1}.0.0-0`
+ }
+ } else {
+ debug('no pr')
+ if (M === '0') {
+ if (m === '0') {
+ ret = `>=${M}.${m}.${p
+ }${z} <${M}.${m}.${+p + 1}-0`
+ } else {
+ ret = `>=${M}.${m}.${p
+ }${z} <${M}.${+m + 1}.0-0`
+ }
+ } else {
+ ret = `>=${M}.${m}.${p
+ } <${+M + 1}.0.0-0`
+ }
+ }
+
+ debug('caret return', ret)
+ return ret
+ })
+}
+
+const replaceXRanges = (comp, options) => {
+ debug('replaceXRanges', comp, options)
+ return comp.split(/\s+/).map((comp) => {
+ return replaceXRange(comp, options)
+ }).join(' ')
+}
+
+const replaceXRange = (comp, options) => {
+ comp = comp.trim()
+ const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
+ return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
+ debug('xRange', comp, ret, gtlt, M, m, p, pr)
+ const xM = isX(M)
+ const xm = xM || isX(m)
+ const xp = xm || isX(p)
+ const anyX = xp
+
+ if (gtlt === '=' && anyX) {
+ gtlt = ''
+ }
+
+ // if we're including prereleases in the match, then we need
+ // to fix this to -0, the lowest possible prerelease value
+ pr = options.includePrerelease ? '-0' : ''
+
+ if (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0-0'
+ } else {
+ // nothing is forbidden
+ ret = '*'
+ }
+ } else if (gtlt && anyX) {
+ // we know patch is an x, because we have any x at all.
+ // replace X with 0
+ if (xm) {
+ m = 0
+ }
+ p = 0
+
+ if (gtlt === '>') {
+ // >1 => >=2.0.0
+ // >1.2 => >=1.3.0
+ gtlt = '>='
+ if (xm) {
+ M = +M + 1
+ m = 0
+ p = 0
+ } else {
+ m = +m + 1
+ p = 0
+ }
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm) {
+ M = +M + 1
+ } else {
+ m = +m + 1
+ }
+ }
+
+ if (gtlt === '<')
+ pr = '-0'
+
+ ret = `${gtlt + M}.${m}.${p}${pr}`
+ } else if (xm) {
+ ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
+ } else if (xp) {
+ ret = `>=${M}.${m}.0${pr
+ } <${M}.${+m + 1}.0-0`
+ }
+
+ debug('xRange return', ret)
+
+ return ret
+ })
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+const replaceStars = (comp, options) => {
+ debug('replaceStars', comp, options)
+ // Looseness is ignored here. star is always as loose as it gets!
+ return comp.trim().replace(re[t.STAR], '')
+}
+
+const replaceGTE0 = (comp, options) => {
+ debug('replaceGTE0', comp, options)
+ return comp.trim()
+ .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
+}
+
+// This function is passed to string.replace(re[t.HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
+const hyphenReplace = incPr => ($0,
+ from, fM, fm, fp, fpr, fb,
+ to, tM, tm, tp, tpr, tb) => {
+ if (isX(fM)) {
+ from = ''
+ } else if (isX(fm)) {
+ from = `>=${fM}.0.0${incPr ? '-0' : ''}`
+ } else if (isX(fp)) {
+ from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
+ } else if (fpr) {
+ from = `>=${from}`
+ } else {
+ from = `>=${from}${incPr ? '-0' : ''}`
+ }
+
+ if (isX(tM)) {
+ to = ''
+ } else if (isX(tm)) {
+ to = `<${+tM + 1}.0.0-0`
+ } else if (isX(tp)) {
+ to = `<${tM}.${+tm + 1}.0-0`
+ } else if (tpr) {
+ to = `<=${tM}.${tm}.${tp}-${tpr}`
+ } else if (incPr) {
+ to = `<${tM}.${tm}.${+tp + 1}-0`
+ } else {
+ to = `<=${to}`
+ }
+
+ return (`${from} ${to}`).trim()
+}
+
+const testSet = (set, version, options) => {
+ for (let i = 0; i < set.length; i++) {
+ if (!set[i].test(version)) {
+ return false
+ }
+ }
+
+ if (version.prerelease.length && !options.includePrerelease) {
+ // Find the set of versions that are allowed to have prereleases
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+ // That should allow `1.2.3-pr.2` to pass.
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
+ // even though it's within the range set by the comparators.
+ for (let i = 0; i < set.length; i++) {
+ debug(set[i].semver)
+ if (set[i].semver === Comparator.ANY) {
+ continue
+ }
+
+ if (set[i].semver.prerelease.length > 0) {
+ const allowed = set[i].semver
+ if (allowed.major === version.major &&
+ allowed.minor === version.minor &&
+ allowed.patch === version.patch) {
+ return true
+ }
+ }
+ }
+
+ // Version has a -pre, but it's not one of the ones we like.
+ return false
+ }
+
+ return true
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/semver.js b/node_modules/jest-snapshot/node_modules/semver/classes/semver.js
new file mode 100644
index 0000000..ed81a7e
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/classes/semver.js
@@ -0,0 +1,287 @@
+const debug = require('../internal/debug')
+const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')
+const { re, t } = require('../internal/re')
+
+const parseOptions = require('../internal/parse-options')
+const { compareIdentifiers } = require('../internal/identifiers')
+class SemVer {
+ constructor (version, options) {
+ options = parseOptions(options)
+
+ if (version instanceof SemVer) {
+ if (version.loose === !!options.loose &&
+ version.includePrerelease === !!options.includePrerelease) {
+ return version
+ } else {
+ version = version.version
+ }
+ } else if (typeof version !== 'string') {
+ throw new TypeError(`Invalid Version: ${version}`)
+ }
+
+ if (version.length > MAX_LENGTH) {
+ throw new TypeError(
+ `version is longer than ${MAX_LENGTH} characters`
+ )
+ }
+
+ debug('SemVer', version, options)
+ this.options = options
+ this.loose = !!options.loose
+ // this isn't actually relevant for versions, but keep it so that we
+ // don't run into trouble passing this.options around.
+ this.includePrerelease = !!options.includePrerelease
+
+ const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
+
+ if (!m) {
+ throw new TypeError(`Invalid Version: ${version}`)
+ }
+
+ this.raw = version
+
+ // these are actually numbers
+ this.major = +m[1]
+ this.minor = +m[2]
+ this.patch = +m[3]
+
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+ throw new TypeError('Invalid major version')
+ }
+
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+ throw new TypeError('Invalid minor version')
+ }
+
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+ throw new TypeError('Invalid patch version')
+ }
+
+ // numberify any prerelease numeric ids
+ if (!m[4]) {
+ this.prerelease = []
+ } else {
+ this.prerelease = m[4].split('.').map((id) => {
+ if (/^[0-9]+$/.test(id)) {
+ const num = +id
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
+ return num
+ }
+ }
+ return id
+ })
+ }
+
+ this.build = m[5] ? m[5].split('.') : []
+ this.format()
+ }
+
+ format () {
+ this.version = `${this.major}.${this.minor}.${this.patch}`
+ if (this.prerelease.length) {
+ this.version += `-${this.prerelease.join('.')}`
+ }
+ return this.version
+ }
+
+ toString () {
+ return this.version
+ }
+
+ compare (other) {
+ debug('SemVer.compare', this.version, this.options, other)
+ if (!(other instanceof SemVer)) {
+ if (typeof other === 'string' && other === this.version) {
+ return 0
+ }
+ other = new SemVer(other, this.options)
+ }
+
+ if (other.version === this.version) {
+ return 0
+ }
+
+ return this.compareMain(other) || this.comparePre(other)
+ }
+
+ compareMain (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ return (
+ compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch)
+ )
+ }
+
+ comparePre (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ // NOT having a prerelease is > having one
+ if (this.prerelease.length && !other.prerelease.length) {
+ return -1
+ } else if (!this.prerelease.length && other.prerelease.length) {
+ return 1
+ } else if (!this.prerelease.length && !other.prerelease.length) {
+ return 0
+ }
+
+ let i = 0
+ do {
+ const a = this.prerelease[i]
+ const b = other.prerelease[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
+ }
+ } while (++i)
+ }
+
+ compareBuild (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ let i = 0
+ do {
+ const a = this.build[i]
+ const b = other.build[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
+ }
+ } while (++i)
+ }
+
+ // preminor will bump the version up to the next minor release, and immediately
+ // down to pre-release. premajor and prepatch work the same way.
+ inc (release, identifier) {
+ switch (release) {
+ case 'premajor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor = 0
+ this.major++
+ this.inc('pre', identifier)
+ break
+ case 'preminor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor++
+ this.inc('pre', identifier)
+ break
+ case 'prepatch':
+ // If this is already a prerelease, it will bump to the next version
+ // drop any prereleases that might already exist, since they are not
+ // relevant at this point.
+ this.prerelease.length = 0
+ this.inc('patch', identifier)
+ this.inc('pre', identifier)
+ break
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0) {
+ this.inc('patch', identifier)
+ }
+ this.inc('pre', identifier)
+ break
+
+ case 'major':
+ // If this is a pre-major version, bump up to the same major version.
+ // Otherwise increment major.
+ // 1.0.0-5 bumps to 1.0.0
+ // 1.1.0 bumps to 2.0.0
+ if (
+ this.minor !== 0 ||
+ this.patch !== 0 ||
+ this.prerelease.length === 0
+ ) {
+ this.major++
+ }
+ this.minor = 0
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'minor':
+ // If this is a pre-minor version, bump up to the same minor version.
+ // Otherwise increment minor.
+ // 1.2.0-5 bumps to 1.2.0
+ // 1.2.1 bumps to 1.3.0
+ if (this.patch !== 0 || this.prerelease.length === 0) {
+ this.minor++
+ }
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'patch':
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0) {
+ this.patch++
+ }
+ this.prerelease = []
+ break
+ // This probably shouldn't be used publicly.
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
+ case 'pre':
+ if (this.prerelease.length === 0) {
+ this.prerelease = [0]
+ } else {
+ let i = this.prerelease.length
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === 'number') {
+ this.prerelease[i]++
+ i = -2
+ }
+ }
+ if (i === -1) {
+ // didn't increment anything
+ this.prerelease.push(0)
+ }
+ }
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ if (this.prerelease[0] === identifier) {
+ if (isNaN(this.prerelease[1])) {
+ this.prerelease = [identifier, 0]
+ }
+ } else {
+ this.prerelease = [identifier, 0]
+ }
+ }
+ break
+
+ default:
+ throw new Error(`invalid increment argument: ${release}`)
+ }
+ this.format()
+ this.raw = this.version
+ return this
+ }
+}
+
+module.exports = SemVer
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/clean.js b/node_modules/jest-snapshot/node_modules/semver/functions/clean.js
new file mode 100644
index 0000000..811fe6b
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/clean.js
@@ -0,0 +1,6 @@
+const parse = require('./parse')
+const clean = (version, options) => {
+ const s = parse(version.trim().replace(/^[=v]+/, ''), options)
+ return s ? s.version : null
+}
+module.exports = clean
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js b/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js
new file mode 100644
index 0000000..3b89db7
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js
@@ -0,0 +1,48 @@
+const eq = require('./eq')
+const neq = require('./neq')
+const gt = require('./gt')
+const gte = require('./gte')
+const lt = require('./lt')
+const lte = require('./lte')
+
+const cmp = (a, op, b, loose) => {
+ switch (op) {
+ case '===':
+ if (typeof a === 'object')
+ a = a.version
+ if (typeof b === 'object')
+ b = b.version
+ return a === b
+
+ case '!==':
+ if (typeof a === 'object')
+ a = a.version
+ if (typeof b === 'object')
+ b = b.version
+ return a !== b
+
+ case '':
+ case '=':
+ case '==':
+ return eq(a, b, loose)
+
+ case '!=':
+ return neq(a, b, loose)
+
+ case '>':
+ return gt(a, b, loose)
+
+ case '>=':
+ return gte(a, b, loose)
+
+ case '<':
+ return lt(a, b, loose)
+
+ case '<=':
+ return lte(a, b, loose)
+
+ default:
+ throw new TypeError(`Invalid operator: ${op}`)
+ }
+}
+module.exports = cmp
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js b/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js
new file mode 100644
index 0000000..106ca71
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js
@@ -0,0 +1,51 @@
+const SemVer = require('../classes/semver')
+const parse = require('./parse')
+const {re, t} = require('../internal/re')
+
+const coerce = (version, options) => {
+ if (version instanceof SemVer) {
+ return version
+ }
+
+ if (typeof version === 'number') {
+ version = String(version)
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ options = options || {}
+
+ let match = null
+ if (!options.rtl) {
+ match = version.match(re[t.COERCE])
+ } else {
+ // Find the right-most coercible string that does not share
+ // a terminus with a more left-ward coercible string.
+ // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
+ //
+ // Walk through the string checking with a /g regexp
+ // Manually set the index so as to pick up overlapping matches.
+ // Stop when we get a match that ends at the string end, since no
+ // coercible string can be more right-ward without the same terminus.
+ let next
+ while ((next = re[t.COERCERTL].exec(version)) &&
+ (!match || match.index + match[0].length !== version.length)
+ ) {
+ if (!match ||
+ next.index + next[0].length !== match.index + match[0].length) {
+ match = next
+ }
+ re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
+ }
+ // leave it in a clean state
+ re[t.COERCERTL].lastIndex = -1
+ }
+
+ if (match === null)
+ return null
+
+ return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
+}
+module.exports = coerce
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js
new file mode 100644
index 0000000..9eb881b
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js
@@ -0,0 +1,7 @@
+const SemVer = require('../classes/semver')
+const compareBuild = (a, b, loose) => {
+ const versionA = new SemVer(a, loose)
+ const versionB = new SemVer(b, loose)
+ return versionA.compare(versionB) || versionA.compareBuild(versionB)
+}
+module.exports = compareBuild
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js
new file mode 100644
index 0000000..4881fbe
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const compareLoose = (a, b) => compare(a, b, true)
+module.exports = compareLoose
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare.js
new file mode 100644
index 0000000..748b7af
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare.js
@@ -0,0 +1,5 @@
+const SemVer = require('../classes/semver')
+const compare = (a, b, loose) =>
+ new SemVer(a, loose).compare(new SemVer(b, loose))
+
+module.exports = compare
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/diff.js b/node_modules/jest-snapshot/node_modules/semver/functions/diff.js
new file mode 100644
index 0000000..87200ef
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/diff.js
@@ -0,0 +1,23 @@
+const parse = require('./parse')
+const eq = require('./eq')
+
+const diff = (version1, version2) => {
+ if (eq(version1, version2)) {
+ return null
+ } else {
+ const v1 = parse(version1)
+ const v2 = parse(version2)
+ const hasPre = v1.prerelease.length || v2.prerelease.length
+ const prefix = hasPre ? 'pre' : ''
+ const defaultResult = hasPre ? 'prerelease' : ''
+ for (const key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return prefix + key
+ }
+ }
+ }
+ return defaultResult // may be undefined
+ }
+}
+module.exports = diff
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/eq.js b/node_modules/jest-snapshot/node_modules/semver/functions/eq.js
new file mode 100644
index 0000000..271fed9
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/eq.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const eq = (a, b, loose) => compare(a, b, loose) === 0
+module.exports = eq
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/gt.js b/node_modules/jest-snapshot/node_modules/semver/functions/gt.js
new file mode 100644
index 0000000..d9b2156
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/gt.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const gt = (a, b, loose) => compare(a, b, loose) > 0
+module.exports = gt
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/gte.js b/node_modules/jest-snapshot/node_modules/semver/functions/gte.js
new file mode 100644
index 0000000..5aeaa63
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/gte.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const gte = (a, b, loose) => compare(a, b, loose) >= 0
+module.exports = gte
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/inc.js b/node_modules/jest-snapshot/node_modules/semver/functions/inc.js
new file mode 100644
index 0000000..aa4d83a
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/inc.js
@@ -0,0 +1,15 @@
+const SemVer = require('../classes/semver')
+
+const inc = (version, release, options, identifier) => {
+ if (typeof (options) === 'string') {
+ identifier = options
+ options = undefined
+ }
+
+ try {
+ return new SemVer(version, options).inc(release, identifier).version
+ } catch (er) {
+ return null
+ }
+}
+module.exports = inc
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/lt.js b/node_modules/jest-snapshot/node_modules/semver/functions/lt.js
new file mode 100644
index 0000000..b440ab7
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/lt.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const lt = (a, b, loose) => compare(a, b, loose) < 0
+module.exports = lt
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/lte.js b/node_modules/jest-snapshot/node_modules/semver/functions/lte.js
new file mode 100644
index 0000000..6dcc956
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/lte.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const lte = (a, b, loose) => compare(a, b, loose) <= 0
+module.exports = lte
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/major.js b/node_modules/jest-snapshot/node_modules/semver/functions/major.js
new file mode 100644
index 0000000..4283165
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/major.js
@@ -0,0 +1,3 @@
+const SemVer = require('../classes/semver')
+const major = (a, loose) => new SemVer(a, loose).major
+module.exports = major
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/minor.js b/node_modules/jest-snapshot/node_modules/semver/functions/minor.js
new file mode 100644
index 0000000..57b3455
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/minor.js
@@ -0,0 +1,3 @@
+const SemVer = require('../classes/semver')
+const minor = (a, loose) => new SemVer(a, loose).minor
+module.exports = minor
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/neq.js b/node_modules/jest-snapshot/node_modules/semver/functions/neq.js
new file mode 100644
index 0000000..f944c01
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/neq.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const neq = (a, b, loose) => compare(a, b, loose) !== 0
+module.exports = neq
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/parse.js b/node_modules/jest-snapshot/node_modules/semver/functions/parse.js
new file mode 100644
index 0000000..11f20f0
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/parse.js
@@ -0,0 +1,33 @@
+const {MAX_LENGTH} = require('../internal/constants')
+const { re, t } = require('../internal/re')
+const SemVer = require('../classes/semver')
+
+const parseOptions = require('../internal/parse-options')
+const parse = (version, options) => {
+ options = parseOptions(options)
+
+ if (version instanceof SemVer) {
+ return version
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ if (version.length > MAX_LENGTH) {
+ return null
+ }
+
+ const r = options.loose ? re[t.LOOSE] : re[t.FULL]
+ if (!r.test(version)) {
+ return null
+ }
+
+ try {
+ return new SemVer(version, options)
+ } catch (er) {
+ return null
+ }
+}
+
+module.exports = parse
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/patch.js b/node_modules/jest-snapshot/node_modules/semver/functions/patch.js
new file mode 100644
index 0000000..63afca2
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/patch.js
@@ -0,0 +1,3 @@
+const SemVer = require('../classes/semver')
+const patch = (a, loose) => new SemVer(a, loose).patch
+module.exports = patch
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js b/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js
new file mode 100644
index 0000000..06aa132
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js
@@ -0,0 +1,6 @@
+const parse = require('./parse')
+const prerelease = (version, options) => {
+ const parsed = parse(version, options)
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
+}
+module.exports = prerelease
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js b/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js
new file mode 100644
index 0000000..0ac509e
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js
@@ -0,0 +1,3 @@
+const compare = require('./compare')
+const rcompare = (a, b, loose) => compare(b, a, loose)
+module.exports = rcompare
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js b/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js
new file mode 100644
index 0000000..82404c5
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js
@@ -0,0 +1,3 @@
+const compareBuild = require('./compare-build')
+const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
+module.exports = rsort
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js b/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js
new file mode 100644
index 0000000..50af1c1
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js
@@ -0,0 +1,10 @@
+const Range = require('../classes/range')
+const satisfies = (version, range, options) => {
+ try {
+ range = new Range(range, options)
+ } catch (er) {
+ return false
+ }
+ return range.test(version)
+}
+module.exports = satisfies
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/sort.js b/node_modules/jest-snapshot/node_modules/semver/functions/sort.js
new file mode 100644
index 0000000..4d10917
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/sort.js
@@ -0,0 +1,3 @@
+const compareBuild = require('./compare-build')
+const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
+module.exports = sort
diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/valid.js b/node_modules/jest-snapshot/node_modules/semver/functions/valid.js
new file mode 100644
index 0000000..f27bae1
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/functions/valid.js
@@ -0,0 +1,6 @@
+const parse = require('./parse')
+const valid = (version, options) => {
+ const v = parse(version, options)
+ return v ? v.version : null
+}
+module.exports = valid
diff --git a/node_modules/jest-snapshot/node_modules/semver/index.js b/node_modules/jest-snapshot/node_modules/semver/index.js
new file mode 100644
index 0000000..57e2ae6
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/index.js
@@ -0,0 +1,48 @@
+// just pre-load all the stuff that index.js lazily exports
+const internalRe = require('./internal/re')
+module.exports = {
+ re: internalRe.re,
+ src: internalRe.src,
+ tokens: internalRe.t,
+ SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,
+ SemVer: require('./classes/semver'),
+ compareIdentifiers: require('./internal/identifiers').compareIdentifiers,
+ rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,
+ parse: require('./functions/parse'),
+ valid: require('./functions/valid'),
+ clean: require('./functions/clean'),
+ inc: require('./functions/inc'),
+ diff: require('./functions/diff'),
+ major: require('./functions/major'),
+ minor: require('./functions/minor'),
+ patch: require('./functions/patch'),
+ prerelease: require('./functions/prerelease'),
+ compare: require('./functions/compare'),
+ rcompare: require('./functions/rcompare'),
+ compareLoose: require('./functions/compare-loose'),
+ compareBuild: require('./functions/compare-build'),
+ sort: require('./functions/sort'),
+ rsort: require('./functions/rsort'),
+ gt: require('./functions/gt'),
+ lt: require('./functions/lt'),
+ eq: require('./functions/eq'),
+ neq: require('./functions/neq'),
+ gte: require('./functions/gte'),
+ lte: require('./functions/lte'),
+ cmp: require('./functions/cmp'),
+ coerce: require('./functions/coerce'),
+ Comparator: require('./classes/comparator'),
+ Range: require('./classes/range'),
+ satisfies: require('./functions/satisfies'),
+ toComparators: require('./ranges/to-comparators'),
+ maxSatisfying: require('./ranges/max-satisfying'),
+ minSatisfying: require('./ranges/min-satisfying'),
+ minVersion: require('./ranges/min-version'),
+ validRange: require('./ranges/valid'),
+ outside: require('./ranges/outside'),
+ gtr: require('./ranges/gtr'),
+ ltr: require('./ranges/ltr'),
+ intersects: require('./ranges/intersects'),
+ simplifyRange: require('./ranges/simplify'),
+ subset: require('./ranges/subset'),
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/constants.js b/node_modules/jest-snapshot/node_modules/semver/internal/constants.js
new file mode 100644
index 0000000..49df215
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/internal/constants.js
@@ -0,0 +1,17 @@
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+const SEMVER_SPEC_VERSION = '2.0.0'
+
+const MAX_LENGTH = 256
+const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
+ /* istanbul ignore next */ 9007199254740991
+
+// Max safe segment length for coercion.
+const MAX_SAFE_COMPONENT_LENGTH = 16
+
+module.exports = {
+ SEMVER_SPEC_VERSION,
+ MAX_LENGTH,
+ MAX_SAFE_INTEGER,
+ MAX_SAFE_COMPONENT_LENGTH
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/debug.js b/node_modules/jest-snapshot/node_modules/semver/internal/debug.js
new file mode 100644
index 0000000..1c00e13
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/internal/debug.js
@@ -0,0 +1,9 @@
+const debug = (
+ typeof process === 'object' &&
+ process.env &&
+ process.env.NODE_DEBUG &&
+ /\bsemver\b/i.test(process.env.NODE_DEBUG)
+) ? (...args) => console.error('SEMVER', ...args)
+ : () => {}
+
+module.exports = debug
diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js b/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js
new file mode 100644
index 0000000..ed13094
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js
@@ -0,0 +1,23 @@
+const numeric = /^[0-9]+$/
+const compareIdentifiers = (a, b) => {
+ const anum = numeric.test(a)
+ const bnum = numeric.test(b)
+
+ if (anum && bnum) {
+ a = +a
+ b = +b
+ }
+
+ return a === b ? 0
+ : (anum && !bnum) ? -1
+ : (bnum && !anum) ? 1
+ : a < b ? -1
+ : 1
+}
+
+const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)
+
+module.exports = {
+ compareIdentifiers,
+ rcompareIdentifiers
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js b/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js
new file mode 100644
index 0000000..42d2ebd
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js
@@ -0,0 +1,11 @@
+// parse out just the options we care about so we always get a consistent
+// obj with keys in a consistent order.
+const opts = ['includePrerelease', 'loose', 'rtl']
+const parseOptions = options =>
+ !options ? {}
+ : typeof options !== 'object' ? { loose: true }
+ : opts.filter(k => options[k]).reduce((options, k) => {
+ options[k] = true
+ return options
+ }, {})
+module.exports = parseOptions
diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/re.js b/node_modules/jest-snapshot/node_modules/semver/internal/re.js
new file mode 100644
index 0000000..54d4176
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/internal/re.js
@@ -0,0 +1,182 @@
+const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')
+const debug = require('./debug')
+exports = module.exports = {}
+
+// The actual regexps go on exports.re
+const re = exports.re = []
+const src = exports.src = []
+const t = exports.t = {}
+let R = 0
+
+const createToken = (name, value, isGlobal) => {
+ const index = R++
+ debug(index, value)
+ t[name] = index
+ src[index] = value
+ re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
+}
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
+createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*')
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})`)
+
+createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
+}|${src[t.NONNUMERICIDENTIFIER]})`)
+
+createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
+}|${src[t.NONNUMERICIDENTIFIER]})`)
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
+}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
+
+createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
+}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
+}(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups. The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
+}${src[t.PRERELEASE]}?${
+ src[t.BUILD]}?`)
+
+createToken('FULL', `^${src[t.FULLPLAIN]}$`)
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
+}${src[t.PRERELEASELOOSE]}?${
+ src[t.BUILD]}?`)
+
+createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
+
+createToken('GTLT', '((?:<|>)?=?)')
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
+createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
+
+createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:${src[t.PRERELEASE]})?${
+ src[t.BUILD]}?` +
+ `)?)?`)
+
+createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:${src[t.PRERELEASELOOSE]})?${
+ src[t.BUILD]}?` +
+ `)?)?`)
+
+createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
+createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
+
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+createToken('COERCE', `${'(^|[^\\d])' +
+ '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
+ `(?:$|[^\\d])`)
+createToken('COERCERTL', src[t.COERCE], true)
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+createToken('LONETILDE', '(?:~>?)')
+
+createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
+exports.tildeTrimReplace = '$1~'
+
+createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
+createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+createToken('LONECARET', '(?:\\^)')
+
+createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
+exports.caretTrimReplace = '$1^'
+
+createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
+createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
+createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
+}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
+exports.comparatorTrimReplace = '$1$2$3'
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
+ `\\s+-\\s+` +
+ `(${src[t.XRANGEPLAIN]})` +
+ `\\s*$`)
+
+createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
+ `\\s+-\\s+` +
+ `(${src[t.XRANGEPLAINLOOSE]})` +
+ `\\s*$`)
+
+// Star ranges basically just allow anything at all.
+createToken('STAR', '(<|>)?=?\\s*\\*')
+// >=0.0.0 is like a star
+createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$')
+createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$')
diff --git a/node_modules/jest-snapshot/node_modules/semver/package.json b/node_modules/jest-snapshot/node_modules/semver/package.json
new file mode 100644
index 0000000..4e11541
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "semver",
+ "version": "7.3.5",
+ "description": "The semantic version parser used by npm.",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --follow-tags"
+ },
+ "devDependencies": {
+ "tap": "^14.10.7"
+ },
+ "license": "ISC",
+ "repository": "https://github.com/npm/node-semver",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "files": [
+ "bin/**/*.js",
+ "range.bnf",
+ "classes/**/*.js",
+ "functions/**/*.js",
+ "internal/**/*.js",
+ "ranges/**/*.js",
+ "index.js",
+ "preload.js"
+ ],
+ "tap": {
+ "check-coverage": true,
+ "coverage-map": "map.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ }
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/preload.js b/node_modules/jest-snapshot/node_modules/semver/preload.js
new file mode 100644
index 0000000..947cd4f
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/preload.js
@@ -0,0 +1,2 @@
+// XXX remove in v8 or beyond
+module.exports = require('./index.js')
diff --git a/node_modules/jest-snapshot/node_modules/semver/range.bnf b/node_modules/jest-snapshot/node_modules/semver/range.bnf
new file mode 100644
index 0000000..d4c6ae0
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/range.bnf
@@ -0,0 +1,16 @@
+range-set ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen ::= partial ' - ' partial
+simple ::= primitive | partial | tilde | caret
+primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
+partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr ::= 'x' | 'X' | '*' | nr
+nr ::= '0' | [1-9] ( [0-9] ) *
+tilde ::= '~' partial
+caret ::= '^' partial
+qualifier ::= ( '-' pre )? ( '+' build )?
+pre ::= parts
+build ::= parts
+parts ::= part ( '.' part ) *
+part ::= nr | [-0-9A-Za-z]+
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js b/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js
new file mode 100644
index 0000000..db7e355
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js
@@ -0,0 +1,4 @@
+// Determine if version is greater than all the versions possible in the range.
+const outside = require('./outside')
+const gtr = (version, range, options) => outside(version, range, '>', options)
+module.exports = gtr
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js b/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js
new file mode 100644
index 0000000..3d1a6f3
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js
@@ -0,0 +1,7 @@
+const Range = require('../classes/range')
+const intersects = (r1, r2, options) => {
+ r1 = new Range(r1, options)
+ r2 = new Range(r2, options)
+ return r1.intersects(r2)
+}
+module.exports = intersects
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js b/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js
new file mode 100644
index 0000000..528a885
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js
@@ -0,0 +1,4 @@
+const outside = require('./outside')
+// Determine if version is less than all the versions possible in the range
+const ltr = (version, range, options) => outside(version, range, '<', options)
+module.exports = ltr
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js b/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js
new file mode 100644
index 0000000..6e3d993
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js
@@ -0,0 +1,25 @@
+const SemVer = require('../classes/semver')
+const Range = require('../classes/range')
+
+const maxSatisfying = (versions, range, options) => {
+ let max = null
+ let maxSV = null
+ let rangeObj = null
+ try {
+ rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach((v) => {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!max || maxSV.compare(v) === -1) {
+ // compare(max, v, true)
+ max = v
+ maxSV = new SemVer(max, options)
+ }
+ }
+ })
+ return max
+}
+module.exports = maxSatisfying
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js b/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js
new file mode 100644
index 0000000..9b60974
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js
@@ -0,0 +1,24 @@
+const SemVer = require('../classes/semver')
+const Range = require('../classes/range')
+const minSatisfying = (versions, range, options) => {
+ let min = null
+ let minSV = null
+ let rangeObj = null
+ try {
+ rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach((v) => {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!min || minSV.compare(v) === 1) {
+ // compare(min, v, true)
+ min = v
+ minSV = new SemVer(min, options)
+ }
+ }
+ })
+ return min
+}
+module.exports = minSatisfying
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js b/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js
new file mode 100644
index 0000000..2fac412
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js
@@ -0,0 +1,60 @@
+const SemVer = require('../classes/semver')
+const Range = require('../classes/range')
+const gt = require('../functions/gt')
+
+const minVersion = (range, loose) => {
+ range = new Range(range, loose)
+
+ let minver = new SemVer('0.0.0')
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = new SemVer('0.0.0-0')
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = null
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i]
+
+ let setMin = null
+ comparators.forEach((comparator) => {
+ // Clone to avoid manipulating the comparator's semver object.
+ const compver = new SemVer(comparator.semver.version)
+ switch (comparator.operator) {
+ case '>':
+ if (compver.prerelease.length === 0) {
+ compver.patch++
+ } else {
+ compver.prerelease.push(0)
+ }
+ compver.raw = compver.format()
+ /* fallthrough */
+ case '':
+ case '>=':
+ if (!setMin || gt(compver, setMin)) {
+ setMin = compver
+ }
+ break
+ case '<':
+ case '<=':
+ /* Ignore maximum versions */
+ break
+ /* istanbul ignore next */
+ default:
+ throw new Error(`Unexpected operation: ${comparator.operator}`)
+ }
+ })
+ if (setMin && (!minver || gt(minver, setMin)))
+ minver = setMin
+ }
+
+ if (minver && range.test(minver)) {
+ return minver
+ }
+
+ return null
+}
+module.exports = minVersion
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js b/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js
new file mode 100644
index 0000000..2a4b0a1
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js
@@ -0,0 +1,80 @@
+const SemVer = require('../classes/semver')
+const Comparator = require('../classes/comparator')
+const {ANY} = Comparator
+const Range = require('../classes/range')
+const satisfies = require('../functions/satisfies')
+const gt = require('../functions/gt')
+const lt = require('../functions/lt')
+const lte = require('../functions/lte')
+const gte = require('../functions/gte')
+
+const outside = (version, range, hilo, options) => {
+ version = new SemVer(version, options)
+ range = new Range(range, options)
+
+ let gtfn, ltefn, ltfn, comp, ecomp
+ switch (hilo) {
+ case '>':
+ gtfn = gt
+ ltefn = lte
+ ltfn = lt
+ comp = '>'
+ ecomp = '>='
+ break
+ case '<':
+ gtfn = lt
+ ltefn = gte
+ ltfn = gt
+ comp = '<'
+ ecomp = '<='
+ break
+ default:
+ throw new TypeError('Must provide a hilo val of "<" or ">"')
+ }
+
+ // If it satisfies the range it is not outside
+ if (satisfies(version, range, options)) {
+ return false
+ }
+
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
+
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i]
+
+ let high = null
+ let low = null
+
+ comparators.forEach((comparator) => {
+ if (comparator.semver === ANY) {
+ comparator = new Comparator('>=0.0.0')
+ }
+ high = high || comparator
+ low = low || comparator
+ if (gtfn(comparator.semver, high.semver, options)) {
+ high = comparator
+ } else if (ltfn(comparator.semver, low.semver, options)) {
+ low = comparator
+ }
+ })
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false
+ }
+
+ // If the lowest version comparator has an operator and our version
+ // is less than it then it isn't higher than the range
+ if ((!low.operator || low.operator === comp) &&
+ ltefn(version, low.semver)) {
+ return false
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+ return false
+ }
+ }
+ return true
+}
+
+module.exports = outside
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js b/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js
new file mode 100644
index 0000000..b792f97
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js
@@ -0,0 +1,44 @@
+// given a set of versions and a range, create a "simplified" range
+// that includes the same versions that the original range does
+// If the original range is shorter than the simplified one, return that.
+const satisfies = require('../functions/satisfies.js')
+const compare = require('../functions/compare.js')
+module.exports = (versions, range, options) => {
+ const set = []
+ let min = null
+ let prev = null
+ const v = versions.sort((a, b) => compare(a, b, options))
+ for (const version of v) {
+ const included = satisfies(version, range, options)
+ if (included) {
+ prev = version
+ if (!min)
+ min = version
+ } else {
+ if (prev) {
+ set.push([min, prev])
+ }
+ prev = null
+ min = null
+ }
+ }
+ if (min)
+ set.push([min, null])
+
+ const ranges = []
+ for (const [min, max] of set) {
+ if (min === max)
+ ranges.push(min)
+ else if (!max && min === v[0])
+ ranges.push('*')
+ else if (!max)
+ ranges.push(`>=${min}`)
+ else if (min === v[0])
+ ranges.push(`<=${max}`)
+ else
+ ranges.push(`${min} - ${max}`)
+ }
+ const simplified = ranges.join(' || ')
+ const original = typeof range.raw === 'string' ? range.raw : String(range)
+ return simplified.length < original.length ? simplified : range
+}
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js b/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js
new file mode 100644
index 0000000..532fd13
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js
@@ -0,0 +1,222 @@
+const Range = require('../classes/range.js')
+const Comparator = require('../classes/comparator.js')
+const { ANY } = Comparator
+const satisfies = require('../functions/satisfies.js')
+const compare = require('../functions/compare.js')
+
+// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
+// - Every simple range `r1, r2, ...` is a null set, OR
+// - Every simple range `r1, r2, ...` which is not a null set is a subset of
+// some `R1, R2, ...`
+//
+// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
+// - If c is only the ANY comparator
+// - If C is only the ANY comparator, return true
+// - Else if in prerelease mode, return false
+// - else replace c with `[>=0.0.0]`
+// - If C is only the ANY comparator
+// - if in prerelease mode, return true
+// - else replace C with `[>=0.0.0]`
+// - Let EQ be the set of = comparators in c
+// - If EQ is more than one, return true (null set)
+// - Let GT be the highest > or >= comparator in c
+// - Let LT be the lowest < or <= comparator in c
+// - If GT and LT, and GT.semver > LT.semver, return true (null set)
+// - If any C is a = range, and GT or LT are set, return false
+// - If EQ
+// - If GT, and EQ does not satisfy GT, return true (null set)
+// - If LT, and EQ does not satisfy LT, return true (null set)
+// - If EQ satisfies every C, return true
+// - Else return false
+// - If GT
+// - If GT.semver is lower than any > or >= comp in C, return false
+// - If GT is >=, and GT.semver does not satisfy every C, return false
+// - If GT.semver has a prerelease, and not in prerelease mode
+// - If no C has a prerelease and the GT.semver tuple, return false
+// - If LT
+// - If LT.semver is greater than any < or <= comp in C, return false
+// - If LT is <=, and LT.semver does not satisfy every C, return false
+// - If GT.semver has a prerelease, and not in prerelease mode
+// - If no C has a prerelease and the LT.semver tuple, return false
+// - Else return true
+
+const subset = (sub, dom, options = {}) => {
+ if (sub === dom)
+ return true
+
+ sub = new Range(sub, options)
+ dom = new Range(dom, options)
+ let sawNonNull = false
+
+ OUTER: for (const simpleSub of sub.set) {
+ for (const simpleDom of dom.set) {
+ const isSub = simpleSubset(simpleSub, simpleDom, options)
+ sawNonNull = sawNonNull || isSub !== null
+ if (isSub)
+ continue OUTER
+ }
+ // the null set is a subset of everything, but null simple ranges in
+ // a complex range should be ignored. so if we saw a non-null range,
+ // then we know this isn't a subset, but if EVERY simple range was null,
+ // then it is a subset.
+ if (sawNonNull)
+ return false
+ }
+ return true
+}
+
+const simpleSubset = (sub, dom, options) => {
+ if (sub === dom)
+ return true
+
+ if (sub.length === 1 && sub[0].semver === ANY) {
+ if (dom.length === 1 && dom[0].semver === ANY)
+ return true
+ else if (options.includePrerelease)
+ sub = [ new Comparator('>=0.0.0-0') ]
+ else
+ sub = [ new Comparator('>=0.0.0') ]
+ }
+
+ if (dom.length === 1 && dom[0].semver === ANY) {
+ if (options.includePrerelease)
+ return true
+ else
+ dom = [ new Comparator('>=0.0.0') ]
+ }
+
+ const eqSet = new Set()
+ let gt, lt
+ for (const c of sub) {
+ if (c.operator === '>' || c.operator === '>=')
+ gt = higherGT(gt, c, options)
+ else if (c.operator === '<' || c.operator === '<=')
+ lt = lowerLT(lt, c, options)
+ else
+ eqSet.add(c.semver)
+ }
+
+ if (eqSet.size > 1)
+ return null
+
+ let gtltComp
+ if (gt && lt) {
+ gtltComp = compare(gt.semver, lt.semver, options)
+ if (gtltComp > 0)
+ return null
+ else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
+ return null
+ }
+
+ // will iterate one or zero times
+ for (const eq of eqSet) {
+ if (gt && !satisfies(eq, String(gt), options))
+ return null
+
+ if (lt && !satisfies(eq, String(lt), options))
+ return null
+
+ for (const c of dom) {
+ if (!satisfies(eq, String(c), options))
+ return false
+ }
+
+ return true
+ }
+
+ let higher, lower
+ let hasDomLT, hasDomGT
+ // if the subset has a prerelease, we need a comparator in the superset
+ // with the same tuple and a prerelease, or it's not a subset
+ let needDomLTPre = lt &&
+ !options.includePrerelease &&
+ lt.semver.prerelease.length ? lt.semver : false
+ let needDomGTPre = gt &&
+ !options.includePrerelease &&
+ gt.semver.prerelease.length ? gt.semver : false
+ // exception: <1.2.3-0 is the same as <1.2.3
+ if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
+ lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
+ needDomLTPre = false
+ }
+
+ for (const c of dom) {
+ hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
+ hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
+ if (gt) {
+ if (needDomGTPre) {
+ if (c.semver.prerelease && c.semver.prerelease.length &&
+ c.semver.major === needDomGTPre.major &&
+ c.semver.minor === needDomGTPre.minor &&
+ c.semver.patch === needDomGTPre.patch) {
+ needDomGTPre = false
+ }
+ }
+ if (c.operator === '>' || c.operator === '>=') {
+ higher = higherGT(gt, c, options)
+ if (higher === c && higher !== gt)
+ return false
+ } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))
+ return false
+ }
+ if (lt) {
+ if (needDomLTPre) {
+ if (c.semver.prerelease && c.semver.prerelease.length &&
+ c.semver.major === needDomLTPre.major &&
+ c.semver.minor === needDomLTPre.minor &&
+ c.semver.patch === needDomLTPre.patch) {
+ needDomLTPre = false
+ }
+ }
+ if (c.operator === '<' || c.operator === '<=') {
+ lower = lowerLT(lt, c, options)
+ if (lower === c && lower !== lt)
+ return false
+ } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))
+ return false
+ }
+ if (!c.operator && (lt || gt) && gtltComp !== 0)
+ return false
+ }
+
+ // if there was a < or >, and nothing in the dom, then must be false
+ // UNLESS it was limited by another range in the other direction.
+ // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
+ if (gt && hasDomLT && !lt && gtltComp !== 0)
+ return false
+
+ if (lt && hasDomGT && !gt && gtltComp !== 0)
+ return false
+
+ // we needed a prerelease range in a specific tuple, but didn't get one
+ // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
+ // because it includes prereleases in the 1.2.3 tuple
+ if (needDomGTPre || needDomLTPre)
+ return false
+
+ return true
+}
+
+// >=1.2.3 is lower than >1.2.3
+const higherGT = (a, b, options) => {
+ if (!a)
+ return b
+ const comp = compare(a.semver, b.semver, options)
+ return comp > 0 ? a
+ : comp < 0 ? b
+ : b.operator === '>' && a.operator === '>=' ? b
+ : a
+}
+
+// <=1.2.3 is higher than <1.2.3
+const lowerLT = (a, b, options) => {
+ if (!a)
+ return b
+ const comp = compare(a.semver, b.semver, options)
+ return comp < 0 ? a
+ : comp > 0 ? b
+ : b.operator === '<' && a.operator === '<=' ? b
+ : a
+}
+
+module.exports = subset
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js b/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js
new file mode 100644
index 0000000..6c8bc7e
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js
@@ -0,0 +1,8 @@
+const Range = require('../classes/range')
+
+// Mostly just for testing and legacy API reasons
+const toComparators = (range, options) =>
+ new Range(range, options).set
+ .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
+
+module.exports = toComparators
diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js b/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js
new file mode 100644
index 0000000..365f356
--- /dev/null
+++ b/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js
@@ -0,0 +1,11 @@
+const Range = require('../classes/range')
+const validRange = (range, options) => {
+ try {
+ // Return '*' instead of '' so that truthiness works.
+ // This will throw if it's invalid anyway
+ return new Range(range, options).range || '*'
+ } catch (er) {
+ return null
+ }
+}
+module.exports = validRange
diff --git a/node_modules/jest-snapshot/package.json b/node_modules/jest-snapshot/package.json
new file mode 100644
index 0000000..417eafe
--- /dev/null
+++ b/node_modules/jest-snapshot/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "jest-snapshot",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-snapshot"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@babel/core": "^7.7.2",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.0.0",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/babel__traverse": "^7.0.4",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^27.5.1",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^27.5.1",
+ "jest-get-type": "^27.5.1",
+ "jest-haste-map": "^27.5.1",
+ "jest-matcher-utils": "^27.5.1",
+ "jest-message-util": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^27.5.1",
+ "semver": "^7.3.2"
+ },
+ "devDependencies": {
+ "@babel/preset-flow": "^7.7.2",
+ "@babel/preset-react": "^7.7.2",
+ "@jest/test-utils": "^27.5.1",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/natural-compare": "^1.4.0",
+ "@types/semver": "^7.1.0",
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "prettier": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}