From 6ba49b8c6a273bd1a15a727a40faa6c951f2a7f7 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 11:56:57 -0500 Subject: [PATCH 01/89] vscode auto-formatting. will revert eventually --- .../jest-snapshot/src/inline_snapshots.js | 140 +++++++++--------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index cd171877a4a7..ec002b1c413c 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -10,14 +10,14 @@ import fs from 'fs'; import semver from 'semver'; import path from 'path'; -import {templateElement, templateLiteral, file} from '@babel/types'; +import { templateElement, templateLiteral, file } from '@babel/types'; -import type {Path} from 'types/Config'; -import {escapeBacktickString} from './utils'; +import type { Path } from 'types/Config'; +import { escapeBacktickString } from './utils'; export type InlineSnapshot = {| snapshot: string, - frame: {line: number, column: number, file: string}, + frame: { line: number, column: number, file: string }, |}; export const saveInlineSnapshots = ( @@ -28,7 +28,7 @@ export const saveInlineSnapshots = ( if (!prettier) { throw new Error( `Jest: Inline Snapshots requires Prettier.\n` + - `Please ensure "prettier" is installed in your project.`, + `Please ensure "prettier" is installed in your project.`, ); } @@ -36,7 +36,7 @@ export const saveInlineSnapshots = ( if (semver.lt(prettier.version, '1.5.0')) { throw new Error( `Jest: Inline Snapshots require prettier>=1.5.0.\n` + - `Please upgrade "prettier".`, + `Please upgrade "prettier".`, ); } @@ -64,8 +64,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -91,13 +91,13 @@ const groupSnapshotsBy = (createKey: InlineSnapshot => string) => ( ) => snapshots.reduce((object, inlineSnapshot) => { const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; + return { ...object, [key]: (object[key] || []).concat(inlineSnapshot) }; }, {}); const groupSnapshotsByFrame = groupSnapshotsBy( - ({frame: {line, column}}) => `${line}:${column - 1}`, + ({ frame: { line, column } }) => `${line}:${column - 1}`, ); -const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file); +const groupSnapshotsByFile = groupSnapshotsBy(({ frame: { file } }) => file); const createParser = ( snapshots: InlineSnapshot[], @@ -105,67 +105,67 @@ const createParser = ( babelTraverse: Function, ) => ( text: string, - parsers: {[key: string]: (string) => any}, + parsers: { [key: string]: (string) => any }, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const groupedSnapshots = groupSnapshotsByFrame(snapshots); - const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); - let ast = parsers[inferredParser](text); - - // Flow uses a 'Program' parent node, babel expects a 'File'. - if (ast.type !== 'File') { - ast = file(ast, ast.comments, ast.tokens); - delete ast.program.comments; - } - - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' - ) { - 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.', - ); - } - const snapshotIndex = args.findIndex( - ({type}) => type === 'TemplateLiteral', - ); - const values = snapshotsForFrame.map(({snapshot}) => { - remainingSnapshots.delete(snapshot); - - return templateLiteral( - [templateElement({raw: escapeBacktickString(snapshot)})], - [], + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const groupedSnapshots = groupSnapshotsByFrame(snapshots); + const remainingSnapshots = new Set(snapshots.map(({ snapshot }) => snapshot)); + let ast = parsers[inferredParser](text); + + // Flow uses a 'Program' parent node, babel expects a 'File'. + if (ast.type !== 'File') { + ast = file(ast, ast.comments, ast.tokens); + delete ast.program.comments; + } + + babelTraverse(ast, { + CallExpression({ node: { arguments: args, callee } }) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' + ) { + 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.', + ); + } + const snapshotIndex = args.findIndex( + ({ type }) => type === 'TemplateLiteral', ); - }); - 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.`); - } - - return ast; -}; + const values = snapshotsForFrame.map(({ snapshot }) => { + remainingSnapshots.delete(snapshot); + + return templateLiteral( + [templateElement({ raw: 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.`); + } + + return ast; + }; const simpleDetectParser = (filePath: Path) => { const extname = path.extname(filePath); From ca8cc4390d0f348c6dcfbfffec5f12d8dcc3986b Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 15:21:45 -0500 Subject: [PATCH 02/89] use string replacement rather than prettier to insert snapshots --- .../src/__tests__/inline_snapshots.test.js | 66 +++++++++++++++++++ .../jest-snapshot/src/inline_snapshots.js | 46 ++++++++----- 2 files changed, 97 insertions(+), 15 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index 63c744e73d0c..2c1cd2acf261 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -75,6 +75,48 @@ test('saveInlineSnapshots() replaces empty function call with a template literal ); }); +test('saveInlineSnapshots() leaves formatting outside of snapshots alone', () => { + const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock + fs.readFileSync = (jest.fn( + () => ` +const a = [1, 2]; +expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line +snapshot\`); +expect(a).toMatchInlineSnapshot(); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +`.trim() + '\n', + ): any); + + saveInlineSnapshots( + [ + { + frame: { column: 11, file: filename, line: 2 }, + snapshot: `[1, 2]`, + }, + { + frame: { column: 11, file: filename, line: 4 }, + snapshot: `[1, 2]`, + }, + { + frame: { column: 11, file: filename, line: 5 }, + snapshot: `[1, 2]`, + }, + ], + prettier, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + `const a = [1, 2]; +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +`, + ); +}); + test.each([['babylon'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { @@ -130,6 +172,30 @@ test('saveInlineSnapshots() replaces existing template literal with property mat ); }); +test('saveInlineSnapshots() creates template literal with property matchers', () => { + const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock + fs.readFileSync = (jest.fn( + () => 'expect(1).toMatchInlineSnapshot({});\n', + ): any); + + saveInlineSnapshots( + [ + { + frame: {column: 11, file: filename, line: 1}, + snapshot: `1`, + }, + ], + prettier, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + 'expect(1).toMatchInlineSnapshot({}, `1`);\n', + ); +}); + test('saveInlineSnapshots() throws if frame does not match', () => { const filename = path.join(__dirname, 'my.test.js'); // $FlowFixMe mock diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index ec002b1c413c..98308792ad53 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -18,6 +18,9 @@ import { escapeBacktickString } from './utils'; export type InlineSnapshot = {| snapshot: string, frame: { line: number, column: number, file: string }, +sliceStart ?: number, + sliceEnd ?: number, + shouldHaveCommaPrefix ?: boolean, |}; export const saveInlineSnapshots = ( @@ -75,12 +78,25 @@ const saveSnapshotsForFile = ( : (config && config.parser) || simpleDetectParser(sourceFilePath); // Format the source code using the custom parser API. - const newSourceFile = prettier.format(sourceFile, { + // The output isn't used, but prettier provides an ast + // which is used to calculate snapshot offsets. + prettier.format(sourceFile, { ...config, filepath: sourceFilePath, parser: createParser(snapshots, inferredParser, babelTraverse), }); + // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. + const newSourceFile = snapshots.reduceRight( + (sourceSoFar, nextSnapshot) => + sourceSoFar.slice(0, nextSnapshot.sliceStart) + + (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + + escapeBacktickString(nextSnapshot.snapshot) + + '`' + + sourceSoFar.slice(nextSnapshot.sliceEnd), + sourceFile + ) + if (newSourceFile !== sourceFile) { fs.writeFileSync(sourceFilePath, newSourceFile); } @@ -142,21 +158,21 @@ const createParser = ( const snapshotIndex = args.findIndex( ({ type }) => type === 'TemplateLiteral', ); - const values = snapshotsForFrame.map(({ snapshot }) => { + snapshotsForFrame.forEach(inlineSnapshot => { + const { snapshot } = inlineSnapshot + if (snapshotIndex > -1) { + inlineSnapshot.sliceStart = args[snapshotIndex].start; + inlineSnapshot.sliceEnd = args[snapshotIndex].end; + } else if (args.length > 0) { + inlineSnapshot.shouldHaveCommaPrefix = true; + inlineSnapshot.sliceStart = args[args.length - 1].end; + inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; + } else { + inlineSnapshot.sliceStart = text.indexOf('(', callee.end) + 1; + inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; + } remainingSnapshots.delete(snapshot); - - return templateLiteral( - [templateElement({ raw: escapeBacktickString(snapshot) })], - [], - ); - }); - const replacementNode = values[0]; - - if (snapshotIndex > -1) { - args[snapshotIndex] = replacementNode; - } else { - args.push(replacementNode); - } + }) }, }); From 15701bf90d8f58cc08bec31fb44c2b9bc3c59e98 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 15:52:04 -0500 Subject: [PATCH 03/89] make formatting go back to how it was? --- .../jest-snapshot/src/inline_snapshots.js | 146 +++++++++--------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 98308792ad53..205e99cfcb7b 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -10,15 +10,15 @@ import fs from 'fs'; import semver from 'semver'; import path from 'path'; -import { templateElement, templateLiteral, file } from '@babel/types'; +import {templateElement, templateLiteral, file} from '@babel/types'; -import type { Path } from 'types/Config'; -import { escapeBacktickString } from './utils'; +import type {Path} from 'types/Config'; +import {escapeBacktickString} from './utils'; export type InlineSnapshot = {| snapshot: string, - frame: { line: number, column: number, file: string }, -sliceStart ?: number, + frame: {line: number, column: number, file: string}, + sliceStart ?: number, sliceEnd ?: number, shouldHaveCommaPrefix ?: boolean, |}; @@ -31,7 +31,7 @@ export const saveInlineSnapshots = ( if (!prettier) { throw new Error( `Jest: Inline Snapshots requires Prettier.\n` + - `Please ensure "prettier" is installed in your project.`, + `Please ensure "prettier" is installed in your project.`, ); } @@ -39,7 +39,7 @@ export const saveInlineSnapshots = ( if (semver.lt(prettier.version, '1.5.0')) { throw new Error( `Jest: Inline Snapshots require prettier>=1.5.0.\n` + - `Please upgrade "prettier".`, + `Please upgrade "prettier".`, ); } @@ -67,8 +67,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -95,7 +95,7 @@ const saveSnapshotsForFile = ( '`' + sourceSoFar.slice(nextSnapshot.sliceEnd), sourceFile - ) + ); if (newSourceFile !== sourceFile) { fs.writeFileSync(sourceFilePath, newSourceFile); @@ -107,13 +107,13 @@ const groupSnapshotsBy = (createKey: InlineSnapshot => string) => ( ) => snapshots.reduce((object, inlineSnapshot) => { const key = createKey(inlineSnapshot); - return { ...object, [key]: (object[key] || []).concat(inlineSnapshot) }; + return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; }, {}); const groupSnapshotsByFrame = groupSnapshotsBy( - ({ frame: { line, column } }) => `${line}:${column - 1}`, + ({frame: {line, column}}) => `${line}:${column - 1}`, ); -const groupSnapshotsByFile = groupSnapshotsBy(({ frame: { file } }) => file); +const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file); const createParser = ( snapshots: InlineSnapshot[], @@ -121,67 +121,67 @@ const createParser = ( babelTraverse: Function, ) => ( text: string, - parsers: { [key: string]: (string) => any }, + parsers: {[key: string]: (string) => any}, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const groupedSnapshots = groupSnapshotsByFrame(snapshots); - const remainingSnapshots = new Set(snapshots.map(({ snapshot }) => snapshot)); - let ast = parsers[inferredParser](text); - - // Flow uses a 'Program' parent node, babel expects a 'File'. - if (ast.type !== 'File') { - ast = file(ast, ast.comments, ast.tokens); - delete ast.program.comments; - } - - babelTraverse(ast, { - CallExpression({ node: { arguments: args, callee } }) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' - ) { - 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.', - ); - } - const snapshotIndex = args.findIndex( - ({ type }) => type === 'TemplateLiteral', +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const groupedSnapshots = groupSnapshotsByFrame(snapshots); + const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); + let ast = parsers[inferredParser](text); + + // Flow uses a 'Program' parent node, babel expects a 'File'. + if (ast.type !== 'File') { + ast = file(ast, ast.comments, ast.tokens); + delete ast.program.comments; + } + + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' + ) { + 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.', ); - snapshotsForFrame.forEach(inlineSnapshot => { - const { snapshot } = inlineSnapshot - if (snapshotIndex > -1) { - inlineSnapshot.sliceStart = args[snapshotIndex].start; - inlineSnapshot.sliceEnd = args[snapshotIndex].end; - } else if (args.length > 0) { - inlineSnapshot.shouldHaveCommaPrefix = true; - inlineSnapshot.sliceStart = args[args.length - 1].end; - inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; - } else { - inlineSnapshot.sliceStart = text.indexOf('(', callee.end) + 1; - inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; - } - remainingSnapshots.delete(snapshot); - }) - }, - }); - - if (remainingSnapshots.size) { - throw new Error(`Jest: Couldn't locate all inline snapshots.`); - } - - return ast; - }; + } + const snapshotIndex = args.findIndex( + ({type}) => type === 'TemplateLiteral', + ); + snapshotsForFrame.forEach(inlineSnapshot => { + const { snapshot } = inlineSnapshot + if (snapshotIndex > -1) { + inlineSnapshot.sliceStart = args[snapshotIndex].start; + inlineSnapshot.sliceEnd = args[snapshotIndex].end; + } else if (args.length > 0) { + inlineSnapshot.shouldHaveCommaPrefix = true; + inlineSnapshot.sliceStart = args[args.length - 1].end; + inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; + } else { + inlineSnapshot.sliceStart = text.indexOf('(', callee.end) + 1; + inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; + } + remainingSnapshots.delete(snapshot); + }) + }, + }); + + if (remainingSnapshots.size) { + throw new Error(`Jest: Couldn't locate all inline snapshots.`); + } + + return ast; +}; const simpleDetectParser = (filePath: Path) => { const extname = path.extname(filePath); @@ -189,4 +189,4 @@ const simpleDetectParser = (filePath: Path) => { return 'typescript'; } return 'babylon'; -}; +}; \ No newline at end of file From 2658e2cb2a98dd346acc8d1475182b1862ccb49b Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 15:52:59 -0500 Subject: [PATCH 04/89] add end of file newline --- packages/jest-snapshot/src/inline_snapshots.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 205e99cfcb7b..5b01f04cd119 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -189,4 +189,4 @@ const simpleDetectParser = (filePath: Path) => { return 'typescript'; } return 'babylon'; -}; \ No newline at end of file +}; From 9aeac1a3d707766bf9eae4089c00ed801a6d42a4 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 18:14:49 -0500 Subject: [PATCH 05/89] fallback to @babel/parser when prettier isn't present --- .../src/__tests__/inline_snapshots.test.js | 112 ++++++++++++---- .../jest-snapshot/src/inline_snapshots.js | 124 ++++++++++-------- 2 files changed, 154 insertions(+), 82 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index 2c1cd2acf261..131a627b54c4 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -75,46 +75,102 @@ test('saveInlineSnapshots() replaces empty function call with a template literal ); }); -test('saveInlineSnapshots() leaves formatting outside of snapshots alone', () => { - const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( - () => ` +test('saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone', () => { + const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock + fs.readFileSync = (jest.fn( + () => ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); expect(a).toMatchInlineSnapshot(); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); `.trim() + '\n', - ): any); + ): any); - saveInlineSnapshots( - [ - { - frame: { column: 11, file: filename, line: 2 }, - snapshot: `[1, 2]`, - }, - { - frame: { column: 11, file: filename, line: 4 }, - snapshot: `[1, 2]`, - }, - { - frame: { column: 11, file: filename, line: 5 }, - snapshot: `[1, 2]`, - }, - ], - prettier, - babelTraverse, - ); + saveInlineSnapshots( + [2, 4, 5].map(line => ({ + frame: { column: 11, file: filename, line }, + snapshot: `[1, 2]` + })), + null, + babelTraverse, + ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, - `const a = [1, 2]; + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + `const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); `, - ); + ); +}); + +test('saveInlineSnapshots() can handle typescript without prettier', () => { + const filename = path.join(__dirname, 'my.test.ts'); + // $FlowFixMe mock + fs.readFileSync = (jest.fn( + () => ` +interface Foo { + foo: string +} +const a: [Foo, Foo] = [{ foo: 'one' }, { foo: 'two' }]; +expect(a).toMatchInlineSnapshot(); +`.trim() + '\n', + ): any); + + saveInlineSnapshots( + [{ + frame: { column: 11, file: filename, line: 5 }, + snapshot: `[{ foo: 'one' }, { foo: 'two' }]` + }], + null, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + ` +interface Foo { + foo: string +} +const a: [Foo, Foo] = [{ foo: 'one' }, { foo: 'two' }]; +expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); +`.trim() + '\n', + ); +}); + +test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { + const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock + fs.readFileSync = (jest.fn( + () => ` +const a = [1, 2]; +expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line +snapshot\`); +expect(a).toMatchInlineSnapshot(); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +`.trim() + '\n', + ): any); + + saveInlineSnapshots( + [2, 4, 5].map(line => ({ + frame: { column: 11, file: filename, line }, + snapshot: `[1, 2]` + })), + prettier, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + `const a = [1, 2]; +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +expect(a).toMatchInlineSnapshot(\`[1, 2]\`); +`, + ); }); test.each([['babylon'], ['flow'], ['typescript']])( diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 5b01f04cd119..1e6963bcd0c6 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -10,6 +10,7 @@ import fs from 'fs'; import semver from 'semver'; import path from 'path'; +import {parse} from '@babel/parser'; import {templateElement, templateLiteral, file} from '@babel/types'; import type {Path} from 'types/Config'; @@ -28,28 +29,13 @@ export const saveInlineSnapshots = ( prettier: any, babelTraverse: Function, ) => { - if (!prettier) { - throw new Error( - `Jest: Inline Snapshots requires Prettier.\n` + - `Please ensure "prettier" is installed in your project.`, - ); - } - - // Custom parser API was added in 1.5.0 - if (semver.lt(prettier.version, '1.5.0')) { - throw new Error( - `Jest: Inline Snapshots require prettier>=1.5.0.\n` + - `Please upgrade "prettier".`, - ); - } - const snapshotsByFile = groupSnapshotsByFile(snapshots); for (const sourceFilePath of Object.keys(snapshotsByFile)) { saveSnapshotsForFile( snapshotsByFile[sourceFilePath], sourceFilePath, - prettier, + prettier && semver.gte(prettier.version, '1.5.0') ? prettier : null, babelTraverse, ); } @@ -63,39 +49,48 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - // 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. - const inferredParser = prettier.getFileInfo - ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(sourceFilePath); - - // Format the source code using the custom parser API. - // The output isn't used, but prettier provides an ast - // which is used to calculate snapshot offsets. - prettier.format(sourceFile, { - ...config, - filepath: sourceFilePath, - parser: createParser(snapshots, inferredParser, babelTraverse), - }); - - // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. - const newSourceFile = snapshots.reduceRight( - (sourceSoFar, nextSnapshot) => - sourceSoFar.slice(0, nextSnapshot.sliceStart) + - (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + - escapeBacktickString(nextSnapshot.snapshot) + - '`' + - sourceSoFar.slice(nextSnapshot.sliceEnd), - sourceFile - ); + let newSourceFile; + if (prettier) { + // 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. + const inferredParser = prettier.getFileInfo + ? prettier.getFileInfo.sync(sourceFilePath).inferredParser + : (config && config.parser) || simpleDetectParser(sourceFilePath); + + // Format the source code using the custom parser API. + newSourceFile = prettier.format(sourceFile, { + ...config, + filepath: sourceFilePath, + parser: createParser(snapshots, inferredParser, babelTraverse), + }); + } else { + const plugins = /\.tsx?$/.test(sourceFilePath) ? ['typescript'] : undefined; + const ast = parse(sourceFile, { plugins }); + traverseAst(snapshots, ast, sourceFile, babelTraverse); + + // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. + newSourceFile = snapshots.reduceRight( + (sourceSoFar, nextSnapshot) => { + if (typeof nextSnapshot.sliceStart !== 'number' || typeof nextSnapshot.sliceEnd !== 'number') { + throw new Error('Jest: no snapshot insert location found'); + } + return sourceSoFar.slice(0, nextSnapshot.sliceStart) + + (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + + escapeBacktickString(nextSnapshot.snapshot) + + '`' + + sourceSoFar.slice(nextSnapshot.sliceEnd); + }, + sourceFile, + ); + } if (newSourceFile !== sourceFile) { fs.writeFileSync(sourceFilePath, newSourceFile); @@ -126,16 +121,25 @@ const createParser = ( ) => { // Workaround for https://github.com/prettier/prettier/issues/3150 options.parser = inferredParser; + const ast = parsers[inferredParser](text); - const groupedSnapshots = groupSnapshotsByFrame(snapshots); - const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); - let ast = parsers[inferredParser](text); + return traverseAst(snapshots, ast, text, babelTraverse); +}; +const traverseAst = ( + snapshots: InlineSnapshot[], + ast: any, + text: string, + babelTraverse: Function, +) => { // Flow uses a 'Program' parent node, babel expects a 'File'. if (ast.type !== 'File') { ast = file(ast, ast.comments, ast.tokens); delete ast.program.comments; } + + const groupedSnapshots = groupSnapshotsByFrame(snapshots); + const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); babelTraverse(ast, { CallExpression({node: {arguments: args, callee}}) { @@ -158,7 +162,7 @@ const createParser = ( const snapshotIndex = args.findIndex( ({type}) => type === 'TemplateLiteral', ); - snapshotsForFrame.forEach(inlineSnapshot => { + const values = snapshotsForFrame.map(inlineSnapshot => { const { snapshot } = inlineSnapshot if (snapshotIndex > -1) { inlineSnapshot.sliceStart = args[snapshotIndex].start; @@ -172,7 +176,19 @@ const createParser = ( inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; } remainingSnapshots.delete(snapshot); - }) + + return templateLiteral( + [templateElement({raw: escapeBacktickString(snapshot)})], + [], + ); + }); + const replacementNode = values[0]; + + if (snapshotIndex > -1) { + args[snapshotIndex] = replacementNode; + } else { + args.push(replacementNode); + } }, }); From e9a2b070a92ebd47e7bb070c979e2ae3e00c9ebb Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 18:17:52 -0500 Subject: [PATCH 06/89] use spyOn instead of $FlowFixMe mock --- .../src/__tests__/inline_snapshots.test.js | 55 ++++++++----------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index 131a627b54c4..f2829bddc7df 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -53,10 +53,9 @@ afterEach(() => { test('saveInlineSnapshots() replaces empty function call with a template literal', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => `expect(1).toMatchInlineSnapshot();\n`, - ): any); + ); saveInlineSnapshots( [ @@ -77,8 +76,7 @@ test('saveInlineSnapshots() replaces empty function call with a template literal test('saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line @@ -86,7 +84,7 @@ snapshot\`); expect(a).toMatchInlineSnapshot(); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); `.trim() + '\n', - ): any); + ); saveInlineSnapshots( [2, 4, 5].map(line => ({ @@ -109,8 +107,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); test('saveInlineSnapshots() can handle typescript without prettier', () => { const filename = path.join(__dirname, 'my.test.ts'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => ` interface Foo { foo: string @@ -118,7 +115,7 @@ interface Foo { const a: [Foo, Foo] = [{ foo: 'one' }, { foo: 'two' }]; expect(a).toMatchInlineSnapshot(); `.trim() + '\n', - ): any); + ); saveInlineSnapshots( [{ @@ -143,8 +140,7 @@ expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line @@ -152,7 +148,7 @@ snapshot\`); expect(a).toMatchInlineSnapshot(); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); `.trim() + '\n', - ): any); + ); saveInlineSnapshots( [2, 4, 5].map(line => ({ @@ -177,10 +173,9 @@ test.each([['babylon'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot(`2`);\n', - ): any); + ); prettier.resolveConfig.sync.mockReturnValue({parser}); @@ -206,10 +201,9 @@ test.each([['babylon'], ['flow'], ['typescript']])( test('saveInlineSnapshots() replaces existing template literal with property matchers', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot({}, `2`);\n', - ): any); + ); saveInlineSnapshots( [ @@ -230,10 +224,9 @@ test('saveInlineSnapshots() replaces existing template literal with property mat test('saveInlineSnapshots() creates template literal with property matchers', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot({});\n', - ): any); + ); saveInlineSnapshots( [ @@ -254,10 +247,9 @@ test('saveInlineSnapshots() creates template literal with property matchers', () test('saveInlineSnapshots() throws if frame does not match', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot();\n', - ): any); + ); const save = () => saveInlineSnapshots( @@ -276,10 +268,9 @@ test('saveInlineSnapshots() throws if frame does not match', () => { test('saveInlineSnapshots() throws if multiple calls to to the same location', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot();\n', - ): any); + ); const frame = {column: 11, file: filename, line: 1}; const save = () => @@ -296,10 +287,9 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( test('saveInlineSnapshots() uses escaped backticks', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect("`").toMatchInlineSnapshot();\n', - ): any); + ); const frame = {column: 13, file: filename, line: 1}; saveInlineSnapshots([{frame, snapshot: '`'}], prettier, babelTraverse); @@ -312,10 +302,9 @@ test('saveInlineSnapshots() uses escaped backticks', () => { test('saveInlineSnapshots() works with non-literals in expect call', () => { const filename = path.join(__dirname, 'my.test.js'); - // $FlowFixMe mock - fs.readFileSync = (jest.fn( + jest.spyOn(fs, 'readFileSync').mockImplementation( () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, - ): any); + ); prettier.resolveConfig.sync.mockReturnValue({ bracketSpacing: false, singleQuote: true, From 9594ea251cb75f84876d2214670865b7278662e5 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 18:19:26 -0500 Subject: [PATCH 07/89] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 815f452fb361..8593351f9927 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[jest-snapshots]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - `[jest-resolve]`: Pass default resolver into custom resolvers ([#7714](https://github.com/facebook/jest/pull/7714)) - `[jest-cli]`: `global{Setup,Teardown}` use default export with es modules ([#7750](https://github.com/facebook/jest/pull/7750)) - `[jest-runtime]` Better error messages when the jest environment is used after teardown by async code ([#7756](https://github.com/facebook/jest/pull/7756)) From 3bc79e79016e16b6857e3987e4bd4a0be1acb390 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 18:23:45 -0500 Subject: [PATCH 08/89] remove trailing whitespace --- .../jest-snapshot/src/inline_snapshots.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 1e6963bcd0c6..2d4a9e7d90aa 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -177,17 +177,17 @@ const traverseAst = ( } remainingSnapshots.delete(snapshot); - return templateLiteral( - [templateElement({raw: escapeBacktickString(snapshot)})], - [], - ); - }); - const replacementNode = values[0]; - - if (snapshotIndex > -1) { - args[snapshotIndex] = replacementNode; - } else { - args.push(replacementNode); + return templateLiteral( + [templateElement({raw: escapeBacktickString(snapshot)})], + [], + ); + }); + const replacementNode = values[0]; + + if (snapshotIndex > -1) { + args[snapshotIndex] = replacementNode; + } else { + args.push(replacementNode); } }, }); From 1555d65196a0fe60a970eb0f02a9a56e35ee6682 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 18:37:36 -0500 Subject: [PATCH 09/89] make sure snapshot creation works with property matchers and without prettier --- .../jest-snapshot/src/__tests__/inline_snapshots.test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index f2829bddc7df..caf19c35c28f 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -222,7 +222,8 @@ test('saveInlineSnapshots() replaces existing template literal with property mat ); }); -test('saveInlineSnapshots() creates template literal with property matchers', () => { +test.each([[prettier], [null]])( + 'saveInlineSnapshots() creates template literal with property matchers', prettierModule => { const filename = path.join(__dirname, 'my.test.js'); jest.spyOn(fs, 'readFileSync').mockImplementation( () => 'expect(1).toMatchInlineSnapshot({});\n', @@ -235,7 +236,7 @@ test('saveInlineSnapshots() creates template literal with property matchers', () snapshot: `1`, }, ], - prettier, + prettierModule, babelTraverse, ); From cc921ccca49c8eaf332bff6c5dc8021a74b69aeb Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 19:17:14 -0500 Subject: [PATCH 10/89] lint --- .../src/__tests__/inline_snapshots.test.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index caf19c35c28f..b54723b424dc 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -288,9 +288,11 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( test('saveInlineSnapshots() uses escaped backticks', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect("`").toMatchInlineSnapshot();\n', - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation( + () => 'expect("`").toMatchInlineSnapshot();\n', + ); const frame = {column: 13, file: filename, line: 1}; saveInlineSnapshots([{frame, snapshot: '`'}], prettier, babelTraverse); @@ -303,9 +305,11 @@ test('saveInlineSnapshots() uses escaped backticks', () => { test('saveInlineSnapshots() works with non-literals in expect call', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation( + () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, + ); prettier.resolveConfig.sync.mockReturnValue({ bracketSpacing: false, singleQuote: true, From 0c2547e17a7631ba67fc00814c59f22e2b3f7e91 Mon Sep 17 00:00:00 2001 From: mmkal Date: Sun, 3 Feb 2019 20:03:58 -0500 Subject: [PATCH 11/89] use prettier --write --- .../src/__tests__/inline_snapshots.test.js | 107 +++++++++--------- 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index b54723b424dc..bf36d8668006 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -53,9 +53,9 @@ afterEach(() => { test('saveInlineSnapshots() replaces empty function call with a template literal', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => `expect(1).toMatchInlineSnapshot();\n`, - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => `expect(1).toMatchInlineSnapshot();\n`); saveInlineSnapshots( [ @@ -77,7 +77,8 @@ test('saveInlineSnapshots() replaces empty function call with a template literal test('saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone', () => { const filename = path.join(__dirname, 'my.test.js'); jest.spyOn(fs, 'readFileSync').mockImplementation( - () => ` + () => + ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); @@ -88,8 +89,8 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); saveInlineSnapshots( [2, 4, 5].map(line => ({ - frame: { column: 11, file: filename, line }, - snapshot: `[1, 2]` + frame: {column: 11, file: filename, line}, + snapshot: `[1, 2]`, })), null, babelTraverse, @@ -108,7 +109,8 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); test('saveInlineSnapshots() can handle typescript without prettier', () => { const filename = path.join(__dirname, 'my.test.ts'); jest.spyOn(fs, 'readFileSync').mockImplementation( - () => ` + () => + ` interface Foo { foo: string } @@ -118,10 +120,12 @@ expect(a).toMatchInlineSnapshot(); ); saveInlineSnapshots( - [{ - frame: { column: 11, file: filename, line: 5 }, - snapshot: `[{ foo: 'one' }, { foo: 'two' }]` - }], + [ + { + frame: {column: 11, file: filename, line: 5}, + snapshot: `[{ foo: 'one' }, { foo: 'two' }]`, + }, + ], null, babelTraverse, ); @@ -141,7 +145,8 @@ expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { const filename = path.join(__dirname, 'my.test.js'); jest.spyOn(fs, 'readFileSync').mockImplementation( - () => ` + () => + ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); @@ -152,8 +157,8 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); saveInlineSnapshots( [2, 4, 5].map(line => ({ - frame: { column: 11, file: filename, line }, - snapshot: `[1, 2]` + frame: {column: 11, file: filename, line}, + snapshot: `[1, 2]`, })), prettier, babelTraverse, @@ -173,9 +178,9 @@ test.each([['babylon'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect(1).toMatchInlineSnapshot(`2`);\n', - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => 'expect(1).toMatchInlineSnapshot(`2`);\n'); prettier.resolveConfig.sync.mockReturnValue({parser}); @@ -201,9 +206,9 @@ test.each([['babylon'], ['flow'], ['typescript']])( test('saveInlineSnapshots() replaces existing template literal with property matchers', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect(1).toMatchInlineSnapshot({}, `2`);\n', - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => 'expect(1).toMatchInlineSnapshot({}, `2`);\n'); saveInlineSnapshots( [ @@ -223,34 +228,36 @@ test('saveInlineSnapshots() replaces existing template literal with property mat }); test.each([[prettier], [null]])( - 'saveInlineSnapshots() creates template literal with property matchers', prettierModule => { - const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect(1).toMatchInlineSnapshot({});\n', - ); + 'saveInlineSnapshots() creates template literal with property matchers', + prettierModule => { + const filename = path.join(__dirname, 'my.test.js'); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => 'expect(1).toMatchInlineSnapshot({});\n'); - saveInlineSnapshots( - [ - { - frame: {column: 11, file: filename, line: 1}, - snapshot: `1`, - }, - ], - prettierModule, - babelTraverse, - ); + saveInlineSnapshots( + [ + { + frame: {column: 11, file: filename, line: 1}, + snapshot: `1`, + }, + ], + prettierModule, + babelTraverse, + ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, - 'expect(1).toMatchInlineSnapshot({}, `1`);\n', - ); -}); + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + 'expect(1).toMatchInlineSnapshot({}, `1`);\n', + ); + }, +); test('saveInlineSnapshots() throws if frame does not match', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect(1).toMatchInlineSnapshot();\n', - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => 'expect(1).toMatchInlineSnapshot();\n'); const save = () => saveInlineSnapshots( @@ -269,9 +276,9 @@ test('saveInlineSnapshots() throws if frame does not match', () => { test('saveInlineSnapshots() throws if multiple calls to to the same location', () => { const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => 'expect(1).toMatchInlineSnapshot();\n', - ); + jest + .spyOn(fs, 'readFileSync') + .mockImplementation(() => 'expect(1).toMatchInlineSnapshot();\n'); const frame = {column: 11, file: filename, line: 1}; const save = () => @@ -290,9 +297,7 @@ test('saveInlineSnapshots() uses escaped backticks', () => { const filename = path.join(__dirname, 'my.test.js'); jest .spyOn(fs, 'readFileSync') - .mockImplementation( - () => 'expect("`").toMatchInlineSnapshot();\n', - ); + .mockImplementation(() => 'expect("`").toMatchInlineSnapshot();\n'); const frame = {column: 13, file: filename, line: 1}; saveInlineSnapshots([{frame, snapshot: '`'}], prettier, babelTraverse); @@ -307,9 +312,7 @@ test('saveInlineSnapshots() works with non-literals in expect call', () => { const filename = path.join(__dirname, 'my.test.js'); jest .spyOn(fs, 'readFileSync') - .mockImplementation( - () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, - ); + .mockImplementation(() => `expect({a: 'a'}).toMatchInlineSnapshot();\n`); prettier.resolveConfig.sync.mockReturnValue({ bracketSpacing: false, singleQuote: true, From 69016b19c667e7bca512b459c077c49cb6ee1c71 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Feb 2019 09:52:58 -0500 Subject: [PATCH 12/89] add @babel/parser as snapshot dependency had to do this manually; node-gyp is not playing nicely with windows. if CI complains I'll try on a mac. --- packages/jest-snapshot/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 7eba9cd83a2d..deed6d48d060 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -9,6 +9,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { + "@babel/parser": "^7.2.3", "@babel/types": "^7.0.0", "chalk": "^2.0.1", "jest-diff": "^24.0.0", From 716a6209a2683c08dbf14ce2e9f3ed58f1dfa2fe Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Feb 2019 10:41:14 -0500 Subject: [PATCH 13/89] prettier didn't take last time for some reason --- .../jest-snapshot/src/inline_snapshots.js | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 2d4a9e7d90aa..7af2b5317dbb 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -19,9 +19,9 @@ import {escapeBacktickString} from './utils'; export type InlineSnapshot = {| snapshot: string, frame: {line: number, column: number, file: string}, - sliceStart ?: number, - sliceEnd ?: number, - shouldHaveCommaPrefix ?: boolean, + sliceStart?: number, + sliceEnd?: number, + shouldHaveCommaPrefix?: boolean, |}; export const saveInlineSnapshots = ( @@ -73,23 +73,25 @@ const saveSnapshotsForFile = ( }); } else { const plugins = /\.tsx?$/.test(sourceFilePath) ? ['typescript'] : undefined; - const ast = parse(sourceFile, { plugins }); + const ast = parse(sourceFile, {plugins}); traverseAst(snapshots, ast, sourceFile, babelTraverse); // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. - newSourceFile = snapshots.reduceRight( - (sourceSoFar, nextSnapshot) => { - if (typeof nextSnapshot.sliceStart !== 'number' || typeof nextSnapshot.sliceEnd !== 'number') { - throw new Error('Jest: no snapshot insert location found'); - } - return sourceSoFar.slice(0, nextSnapshot.sliceStart) + - (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + - escapeBacktickString(nextSnapshot.snapshot) + - '`' + - sourceSoFar.slice(nextSnapshot.sliceEnd); - }, - sourceFile, - ); + newSourceFile = snapshots.reduceRight((sourceSoFar, nextSnapshot) => { + if ( + typeof nextSnapshot.sliceStart !== 'number' || + typeof nextSnapshot.sliceEnd !== 'number' + ) { + throw new Error('Jest: no snapshot insert location found'); + } + return ( + sourceSoFar.slice(0, nextSnapshot.sliceStart) + + (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + + escapeBacktickString(nextSnapshot.snapshot) + + '`' + + sourceSoFar.slice(nextSnapshot.sliceEnd) + ); + }, sourceFile); } if (newSourceFile !== sourceFile) { @@ -137,7 +139,7 @@ const traverseAst = ( ast = file(ast, ast.comments, ast.tokens); delete ast.program.comments; } - + const groupedSnapshots = groupSnapshotsByFrame(snapshots); const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); @@ -163,7 +165,7 @@ const traverseAst = ( ({type}) => type === 'TemplateLiteral', ); const values = snapshotsForFrame.map(inlineSnapshot => { - const { snapshot } = inlineSnapshot + const {snapshot} = inlineSnapshot; if (snapshotIndex > -1) { inlineSnapshot.sliceStart = args[snapshotIndex].start; inlineSnapshot.sliceEnd = args[snapshotIndex].end; From dbb3bcf7449bea65eccd56109b9511ba80c5b148 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Feb 2019 16:13:33 -0500 Subject: [PATCH 14/89] shorten comment --- packages/jest-snapshot/src/inline_snapshots.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 7af2b5317dbb..270813d5b5f1 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -76,7 +76,7 @@ const saveSnapshotsForFile = ( const ast = parse(sourceFile, {plugins}); traverseAst(snapshots, ast, sourceFile, babelTraverse); - // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. + // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. newSourceFile = snapshots.reduceRight((sourceSoFar, nextSnapshot) => { if ( typeof nextSnapshot.sliceStart !== 'number' || From 93bb88b94da9e65232fbf979631d65115e9d70f3 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Feb 2019 21:31:12 -0500 Subject: [PATCH 15/89] use the same plugins as prettier --- .../src/__tests__/inline_snapshots.test.js | 64 +++++++++++++++++++ .../jest-snapshot/src/inline_snapshots.js | 44 +++++++++++-- 2 files changed, 103 insertions(+), 5 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index bf36d8668006..e61e9b8bcdd1 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -142,6 +142,70 @@ expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); ); }); +test('saveInlineSnapshots() can handle tsx without prettier', () => { + const filename = path.join(__dirname, 'my.test.tsx'); + jest.spyOn(fs, 'readFileSync').mockImplementation( + () => + ` +const Foo = (props: { foo: string }) =>
{props.foo}
; +const a = await Foo({ foo: "hello" }); +expect(a).toMatchInlineSnapshot(); +`.trim() + '\n', + ); + + saveInlineSnapshots( + [ + { + frame: {column: 11, file: filename, line: 3}, + snapshot: `
hello
`, + }, + ], + null, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + ` +const Foo = (props: { foo: string }) =>
{props.foo}
; +const a = await Foo({ foo: "hello" }); +expect(a).toMatchInlineSnapshot(\`
hello
\`); +`.trim() + '\n', + ); +}); + +test('saveInlineSnapshots() can handle jsx without prettier', () => { + const filename = path.join(__dirname, 'my.test.js'); + jest.spyOn(fs, 'readFileSync').mockImplementation( + () => + ` +const Foo = (props: { foo: string }) =>
{props.foo}
; +const a = Foo({ foo: "hello" }); +expect(a).toMatchInlineSnapshot(); +`.trim() + '\n', + ); + + saveInlineSnapshots( + [ + { + frame: {column: 11, file: filename, line: 3}, + snapshot: `
hello
`, + }, + ], + null, + babelTraverse, + ); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + filename, + ` +const Foo = (props: { foo: string }) =>
{props.foo}
; +const a = Foo({ foo: "hello" }); +expect(a).toMatchInlineSnapshot(\`
hello
\`); +`.trim() + '\n', + ); +}); + test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { const filename = path.join(__dirname, 'my.test.js'); jest.spyOn(fs, 'readFileSync').mockImplementation( diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 2d4a9e7d90aa..326be7352bc7 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -72,8 +72,17 @@ const saveSnapshotsForFile = ( parser: createParser(snapshots, inferredParser, babelTraverse), }); } else { - const plugins = /\.tsx?$/.test(sourceFilePath) ? ['typescript'] : undefined; - const ast = parse(sourceFile, { plugins }); + const plugins = /\.tsx?$/.test(sourceFilePath) + ? ['typescript', ...prettierBabelPluginList] + : ['flow', ...prettierBabelPluginList]; + const ast = parse(sourceFile, { + sourceType: "module", + allowAwaitOutsideFunction: true, + allowImportExportEverywhere: true, + allowReturnOutsideFunction: true, + allowSuperOutsideMethod: true, + plugins, + }); traverseAst(snapshots, ast, sourceFile, babelTraverse); // substitute in the snapshots in reverse order, so the slice calculations aren't thrown off. @@ -123,7 +132,9 @@ const createParser = ( options.parser = inferredParser; const ast = parsers[inferredParser](text); - return traverseAst(snapshots, ast, text, babelTraverse); + traverseAst(snapshots, ast, text, babelTraverse); + + return ast; }; const traverseAst = ( @@ -195,10 +206,33 @@ const traverseAst = ( if (remainingSnapshots.size) { throw new Error(`Jest: Couldn't locate all inline snapshots.`); } - - return ast; }; +// lifted from https://github.com/prettier/prettier/blob/ca43aad88a5853eebc47958b3f69b47df5d78782/src/language-js/parser-babylon.js#L20-L40 +const prettierBabelPluginList = [ + 'jsx', + 'doExpressions', + 'objectRestSpread', + 'classProperties', + 'exportDefaultFrom', + 'exportNamespaceFrom', + 'asyncGenerators', + 'functionBind', + 'functionSent', + 'dynamicImport', + 'numericSeparator', + 'importMeta', + 'optionalCatchBinding', + 'optionalChaining', + 'classPrivateProperties', + ['pipelineOperator', { proposal: 'minimal' }], + 'nullishCoalescingOperator', + 'bigInt', + 'throwExpressions', + 'logicalAssignment', + 'classPrivateMethods', +]; + const simpleDetectParser = (filePath: Path) => { const extname = path.extname(filePath); if (/tsx?$/.test(extname)) { From ac572886ba31c4fc005ff7f02421d35bcfb0eb9f Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Feb 2019 21:43:21 -0500 Subject: [PATCH 16/89] prettier fixes --- packages/jest-snapshot/src/inline_snapshots.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 31864ca2d889..5df358db0b85 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -76,12 +76,12 @@ const saveSnapshotsForFile = ( ? ['typescript', ...prettierBabelPluginList] : ['flow', ...prettierBabelPluginList]; const ast = parse(sourceFile, { - sourceType: "module", allowAwaitOutsideFunction: true, allowImportExportEverywhere: true, allowReturnOutsideFunction: true, allowSuperOutsideMethod: true, plugins, + sourceType: 'module', }); traverseAst(snapshots, ast, sourceFile, babelTraverse); @@ -227,7 +227,7 @@ const prettierBabelPluginList = [ 'optionalCatchBinding', 'optionalChaining', 'classPrivateProperties', - ['pipelineOperator', { proposal: 'minimal' }], + ['pipelineOperator', {proposal: 'minimal'}], 'nullishCoalescingOperator', 'bigInt', 'throwExpressions', From 188d731c566506da0a9fe37e4eba1d67bdda056a Mon Sep 17 00:00:00 2001 From: mmkal Date: Tue, 12 Feb 2019 00:40:54 -0500 Subject: [PATCH 17/89] use loadPartialConfig from @babel/core rather than hard-coded list --- .../src/__tests__/inline_snapshots.test.js | 31 ++++++++---- .../jest-snapshot/src/inline_snapshots.js | 48 +++++-------------- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index e61e9b8bcdd1..99ad0f694e24 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -9,11 +9,13 @@ jest.mock('fs'); jest.mock('prettier'); +jest.mock('@babel/core'); const fs = require('fs'); const path = require('path'); const prettier = require('prettier'); const babelTraverse = require('@babel/traverse').default; +const babelCore = require('@babel/core'); const {saveInlineSnapshots} = require('../inline_snapshots'); @@ -36,6 +38,10 @@ beforeEach(() => { // $FlowFixMe mock fs.readdirSync = jest.fn(() => []); + jest + .spyOn(babelCore, 'loadPartialConfig') + .mockImplementation(() => ({options: {plugins: []}})); + prettier.resolveConfig.sync.mockReset(); }); afterEach(() => { @@ -147,16 +153,18 @@ test('saveInlineSnapshots() can handle tsx without prettier', () => { jest.spyOn(fs, 'readFileSync').mockImplementation( () => ` -const Foo = (props: { foo: string }) =>
{props.foo}
; -const a = await Foo({ foo: "hello" }); -expect(a).toMatchInlineSnapshot(); +it('foos', async () => { + const Foo = (props: { foo: string }) =>
{props.foo}
; + const a = await Foo({ foo: "hello" }); + expect(a).toMatchInlineSnapshot(); +}) `.trim() + '\n', ); saveInlineSnapshots( [ { - frame: {column: 11, file: filename, line: 3}, + frame: {column: 13, file: filename, line: 4}, snapshot: `
hello
`, }, ], @@ -167,14 +175,21 @@ expect(a).toMatchInlineSnapshot(); expect(fs.writeFileSync).toHaveBeenCalledWith( filename, ` -const Foo = (props: { foo: string }) =>
{props.foo}
; -const a = await Foo({ foo: "hello" }); -expect(a).toMatchInlineSnapshot(\`
hello
\`); +it('foos', async () => { + const Foo = (props: { foo: string }) =>
{props.foo}
; + const a = await Foo({ foo: "hello" }); + expect(a).toMatchInlineSnapshot(\`
hello
\`); +}) `.trim() + '\n', ); }); -test('saveInlineSnapshots() can handle jsx without prettier', () => { +test('saveInlineSnapshots() can handle flow and jsx without prettier', () => { + jest.spyOn(babelCore, 'loadPartialConfig').mockImplementation(() => ({ + options: { + plugins: ['flow', 'jsx'], + }, + })); const filename = path.join(__dirname, 'my.test.js'); jest.spyOn(fs, 'readFileSync').mockImplementation( () => diff --git a/packages/jest-snapshot/src/inline_snapshots.js b/packages/jest-snapshot/src/inline_snapshots.js index 5df358db0b85..b043406977e7 100644 --- a/packages/jest-snapshot/src/inline_snapshots.js +++ b/packages/jest-snapshot/src/inline_snapshots.js @@ -10,6 +10,7 @@ import fs from 'fs'; import semver from 'semver'; import path from 'path'; +import {loadPartialConfig} from '@babel/core'; import {parse} from '@babel/parser'; import {templateElement, templateLiteral, file} from '@babel/types'; @@ -72,17 +73,17 @@ const saveSnapshotsForFile = ( parser: createParser(snapshots, inferredParser, babelTraverse), }); } else { - const plugins = /\.tsx?$/.test(sourceFilePath) - ? ['typescript', ...prettierBabelPluginList] - : ['flow', ...prettierBabelPluginList]; - const ast = parse(sourceFile, { - allowAwaitOutsideFunction: true, - allowImportExportEverywhere: true, - allowReturnOutsideFunction: true, - allowSuperOutsideMethod: true, - plugins, - sourceType: 'module', - }); + const {options} = loadPartialConfig({filename: sourceFilePath}); + + // TypeScript projects may not have a babel config; make sure they can be parsed anyway. + if (/\.tsx?$/.test(sourceFilePath)) { + options.plugins.push('typescript'); + } + if (/\.tsx/.test(sourceFilePath)) { + options.plugins.push('jsx'); + } + + const ast = parse(sourceFile, options); traverseAst(snapshots, ast, sourceFile, babelTraverse); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. @@ -210,31 +211,6 @@ const traverseAst = ( } }; -// lifted from https://github.com/prettier/prettier/blob/ca43aad88a5853eebc47958b3f69b47df5d78782/src/language-js/parser-babylon.js#L20-L40 -const prettierBabelPluginList = [ - 'jsx', - 'doExpressions', - 'objectRestSpread', - 'classProperties', - 'exportDefaultFrom', - 'exportNamespaceFrom', - 'asyncGenerators', - 'functionBind', - 'functionSent', - 'dynamicImport', - 'numericSeparator', - 'importMeta', - 'optionalCatchBinding', - 'optionalChaining', - 'classPrivateProperties', - ['pipelineOperator', {proposal: 'minimal'}], - 'nullishCoalescingOperator', - 'bigInt', - 'throwExpressions', - 'logicalAssignment', - 'classPrivateMethods', -]; - const simpleDetectParser = (filePath: Path) => { const extname = path.extname(filePath); if (/tsx?$/.test(extname)) { From 6ecb0a490ef5afa38eb3eabdcf2262996624eb94 Mon Sep 17 00:00:00 2001 From: mmkal Date: Tue, 12 Feb 2019 00:43:55 -0500 Subject: [PATCH 18/89] add @babel/core dependency --- packages/jest-snapshot/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 61be57ebe4c9..701401a7caac 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -9,6 +9,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { + "@babel/core": "^7.2.2", "@babel/parser": "^7.2.3", "@babel/types": "^7.0.0", "chalk": "^2.0.1", From 2f3f2e170c1be52c9e503a57c017466a6be9025f Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 10:01:15 -0500 Subject: [PATCH 19/89] fix merge errors --- .../jest-snapshot/src/inline_snapshots.ts | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 64ac9b8500e7..c1d56f3ae931 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -9,25 +9,25 @@ import fs from 'fs'; import path from 'path'; import semver from 'semver'; import {loadPartialConfig} from '@babel/core'; -import {parse} from '@babel/parser'; +import {parse, ParserOptions} from '@babel/parser'; import { templateElement, templateLiteral, file, CallExpression, } from '@babel/types'; +import {Frame} from 'jest-message-util'; import {Config} from '@jest/types'; import {escapeBacktickString} from './utils'; -import type {Path} from 'types/Config'; -export type InlineSnapshot = {| - snapshot: string, - frame: {line: number, column: number, file: string}, - sliceStart?: number, - sliceEnd?: number, - shouldHaveCommaPrefix?: boolean, -|}; +export type InlineSnapshot = { + snapshot: string; + frame: Frame; + sliceStart?: number | null; + sliceEnd?: number | null; + shouldHaveCommaPrefix?: boolean; +}; export const saveInlineSnapshots = ( snapshots: Array, @@ -77,7 +77,10 @@ const saveSnapshotsForFile = ( parser: createParser(snapshots, inferredParser, babelTraverse), }); } else { - const {options} = loadPartialConfig({filename: sourceFilePath}); + const {options} = loadPartialConfig({filename: sourceFilePath})!; + if (!options.plugins) { + options.plugins = [] + } // TypeScript projects may not have a babel config; make sure they can be parsed anyway. if (/\.tsx?$/.test(sourceFilePath)) { @@ -87,7 +90,7 @@ const saveSnapshotsForFile = ( options.plugins.push('jsx'); } - const ast = parse(sourceFile, options); + const ast = parse(sourceFile, options as ParserOptions); traverseAst(snapshots, ast, sourceFile, babelTraverse); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. @@ -195,7 +198,7 @@ const traverseAst = ( inlineSnapshot.sliceStart = args[args.length - 1].end; inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; } else { - inlineSnapshot.sliceStart = text.indexOf('(', callee.end) + 1; + inlineSnapshot.sliceStart = text.indexOf('(', callee.end!) + 1; inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; } remainingSnapshots.delete(snapshot); From 8c820d647e617d94cb6c7981b742b860c8c74507 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 10:37:18 -0500 Subject: [PATCH 20/89] case test fake frames to Frame type --- .../src/__tests__/inline_snapshots.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 5e173c22cc30..0738d6523fef 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -84,7 +84,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); saveInlineSnapshots( [2, 4, 5].map(line => ({ - frame: {column: 11, file: filename, line}, + frame: {column: 11, file: filename, line} as Frame, snapshot: `[1, 2]`, })), null, @@ -117,7 +117,7 @@ expect(a).toMatchInlineSnapshot(); saveInlineSnapshots( [ { - frame: {column: 11, file: filename, line: 5}, + frame: {column: 11, file: filename, line: 5} as Frame, snapshot: `[{ foo: 'one' }, { foo: 'two' }]`, }, ], @@ -153,7 +153,7 @@ it('foos', async () => { saveInlineSnapshots( [ { - frame: {column: 13, file: filename, line: 4}, + frame: {column: 13, file: filename, line: 4} as Frame, snapshot: `
hello
`, }, ], @@ -192,7 +192,7 @@ expect(a).toMatchInlineSnapshot(); saveInlineSnapshots( [ { - frame: {column: 11, file: filename, line: 3}, + frame: {column: 11, file: filename, line: 3} as Frame, snapshot: `
hello
`, }, ], @@ -225,7 +225,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); saveInlineSnapshots( [2, 4, 5].map(line => ({ - frame: {column: 11, file: filename, line}, + frame: {column: 11, file: filename, line} as Frame, snapshot: `[1, 2]`, })), prettier, @@ -308,7 +308,7 @@ test.each([[prettier], [null]])( saveInlineSnapshots( [ { - frame: {column: 11, file: filename, line: 1}, + frame: {column: 11, file: filename, line: 1} as Frame, snapshot: `1`, }, ], From 5ef7328c1f39a56c8851c046bde5e15085490a10 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 10:37:30 -0500 Subject: [PATCH 21/89] make vscode stop messing up formatting --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c4951686b125..3746c2fa84c1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,6 @@ "flow.useNPMPackagedFlow": true, "javascript.validate.enable": false, "jest.pathToJest": "yarn jest --", - "prettier.eslintIntegration": true + "prettier.eslintIntegration": true, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false } From 741ca7f514972b246db7e9276c1393a52f94ee25 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 11:29:11 -0500 Subject: [PATCH 22/89] use babel generate instead of hacky comma hacks --- packages/jest-snapshot/package.json | 1 + .../jest-snapshot/src/inline_snapshots.ts | 82 ++++++++----------- yarn.lock | 4 +- 3 files changed, 39 insertions(+), 48 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 23b6d245d6fb..05b9536c7a41 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -11,6 +11,7 @@ "types": "build/index.d.ts", "dependencies": { "@babel/core": "^7.2.2", + "@babel/generator": "^7.3.4", "@babel/parser": "^7.2.3", "@babel/types": "^7.0.0", "@jest/types": "^24.1.0", diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index c1d56f3ae931..8a116ff9e837 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -9,12 +9,14 @@ import fs from 'fs'; import path from 'path'; import semver from 'semver'; import {loadPartialConfig} from '@babel/core'; +import generate from '@babel/generator'; import {parse, ParserOptions} from '@babel/parser'; +import traverse from '@babel/traverse' import { templateElement, templateLiteral, file, - CallExpression, + Expression, } from '@babel/types'; import {Frame} from 'jest-message-util'; @@ -24,10 +26,9 @@ import {escapeBacktickString} from './utils'; export type InlineSnapshot = { snapshot: string; frame: Frame; - sliceStart?: number | null; - sliceEnd?: number | null; - shouldHaveCommaPrefix?: boolean; + node?: Expression; }; +type BabelTraverse = typeof traverse export const saveInlineSnapshots = ( snapshots: Array, @@ -41,7 +42,7 @@ export const saveInlineSnapshots = ( snapshotsByFile[sourceFilePath], sourceFilePath, prettier && semver.gte(prettier.version, '1.5.0') ? prettier : null, - babelTraverse, + babelTraverse as BabelTraverse, ); } }; @@ -50,7 +51,7 @@ const saveSnapshotsForFile = ( snapshots: Array, sourceFilePath: Config.Path, prettier: any, - babelTraverse: Function, + babelTraverse: BabelTraverse, ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); @@ -60,8 +61,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -79,7 +80,7 @@ const saveSnapshotsForFile = ( } else { const {options} = loadPartialConfig({filename: sourceFilePath})!; if (!options.plugins) { - options.plugins = [] + options.plugins = []; } // TypeScript projects may not have a babel config; make sure they can be parsed anyway. @@ -91,22 +92,21 @@ const saveSnapshotsForFile = ( } const ast = parse(sourceFile, options as ParserOptions); - traverseAst(snapshots, ast, sourceFile, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. newSourceFile = snapshots.reduceRight((sourceSoFar, nextSnapshot) => { if ( - typeof nextSnapshot.sliceStart !== 'number' || - typeof nextSnapshot.sliceEnd !== 'number' + !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.sliceStart) + - (nextSnapshot.shouldHaveCommaPrefix ? ', `' : '`') + - escapeBacktickString(nextSnapshot.snapshot) + - '`' + - sourceSoFar.slice(nextSnapshot.sliceEnd) + sourceSoFar.slice(0, nextSnapshot.node.start) + + generate(nextSnapshot.node).code + + sourceSoFar.slice(nextSnapshot.node.end) ); }, sourceFile); } @@ -119,13 +119,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -137,26 +137,25 @@ const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file); const createParser = ( snapshots: Array, inferredParser: string, - babelTraverse: Function, + babelTraverse: BabelTraverse, ) => ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text); - traverseAst(snapshots, ast, text, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); - return ast; -}; + return ast; + }; const traverseAst = ( snapshots: InlineSnapshot[], ast: any, - text: string, - babelTraverse: Function, + babelTraverse: BabelTraverse, ) => { // Flow uses a 'Program' parent node, babel expects a 'File'. if (ast.type !== 'File') { @@ -168,7 +167,8 @@ const traverseAst = ( const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + CallExpression({node}) { + const {arguments: args, callee} = node; if ( callee.type !== 'MemberExpression' || callee.property.type !== 'Identifier' @@ -189,18 +189,8 @@ const traverseAst = ( ({type}) => type === 'TemplateLiteral', ); const values = snapshotsForFrame.map(inlineSnapshot => { + inlineSnapshot.node = node; const {snapshot} = inlineSnapshot; - if (snapshotIndex > -1) { - inlineSnapshot.sliceStart = args[snapshotIndex].start; - inlineSnapshot.sliceEnd = args[snapshotIndex].end; - } else if (args.length > 0) { - inlineSnapshot.shouldHaveCommaPrefix = true; - inlineSnapshot.sliceStart = args[args.length - 1].end; - inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; - } else { - inlineSnapshot.sliceStart = text.indexOf('(', callee.end!) + 1; - inlineSnapshot.sliceEnd = inlineSnapshot.sliceStart; - } remainingSnapshots.delete(snapshot); return templateLiteral( diff --git a/yarn.lock b/yarn.lock index 35dfdc279ddb..bbbffeb15e71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.3.4": +"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.2.2", "@babel/core@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== @@ -253,7 +253,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.3.4": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.3", "@babel/parser@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== From 4f5ea4bb8e5deda0184e6156bfb6e9baab0c14aa Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 11:32:35 -0500 Subject: [PATCH 23/89] use imports and flatten test.each --- .../src/__tests__/inline_snapshots.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 0738d6523fef..d76905ef9546 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -9,11 +9,11 @@ jest.mock('fs'); jest.mock('prettier'); jest.mock('@babel/core'); -const fs = require('fs'); -const path = require('path'); -const prettier = require('prettier'); -const babelTraverse = require('@babel/traverse').default; -const babelCore = require('@babel/core'); +import fs from 'fs'; +import path from 'path'; +import prettier from 'prettier'; +import babelTraverse from '@babel/traverse'; +import * as babelCore from '@babel/core'; import {Frame} from 'jest-message-util'; import {saveInlineSnapshots} from '../inline_snapshots'; @@ -297,7 +297,7 @@ test('saveInlineSnapshots() replaces existing template literal with property mat ); }); -test.each([[prettier], [null]])( +test.each([prettier, null])( 'saveInlineSnapshots() creates template literal with property matchers', prettierModule => { const filename = path.join(__dirname, 'my.test.js'); From 4a4d86c8ca9e018f613864235ce1f31417b5adb1 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 11:47:49 -0500 Subject: [PATCH 24/89] prettier fix #123532 --- .../jest-snapshot/src/inline_snapshots.ts | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 8a116ff9e837..00f693c4dbf6 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -11,13 +11,8 @@ import semver from 'semver'; import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; import {parse, ParserOptions} from '@babel/parser'; -import traverse from '@babel/traverse' -import { - templateElement, - templateLiteral, - file, - Expression, -} from '@babel/types'; +import traverse from '@babel/traverse'; +import {templateElement, templateLiteral, file, Expression} from '@babel/types'; import {Frame} from 'jest-message-util'; import {Config} from '@jest/types'; @@ -28,7 +23,7 @@ export type InlineSnapshot = { frame: Frame; node?: Expression; }; -type BabelTraverse = typeof traverse +type BabelTraverse = typeof traverse; export const saveInlineSnapshots = ( snapshots: Array, @@ -61,8 +56,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -119,13 +114,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -142,15 +137,15 @@ const createParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text); - traverseAst(snapshots, ast, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); - return ast; - }; + return ast; +}; const traverseAst = ( snapshots: InlineSnapshot[], From a4d30a74a3485dfbe003c29bc181f789df09fb9b Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 12:40:06 -0500 Subject: [PATCH 25/89] move changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ac50ab8cfec..edc812ff5026 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[jest-snapshots]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - `[expect]`: Improve report when matcher fails, part 7 ([#7866](https://github.com/facebook/jest/pull/7866)) - `[expect]`: Improve report when matcher fails, part 8 ([#7876](https://github.com/facebook/jest/pull/7876)) - `[expect]`: Improve report when matcher fails, part 9 ([#7940](https://github.com/facebook/jest/pull/7940)) @@ -90,7 +91,6 @@ ### Features -- `[jest-snapshots]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - `[jest-resolve]`: Pass default resolver into custom resolvers ([#7714](https://github.com/facebook/jest/pull/7714)) - `[jest-cli]`: `global{Setup,Teardown}` use default export with es modules ([#7750](https://github.com/facebook/jest/pull/7750)) - `[jest-runtime]` Better error messages when the jest environment is used after teardown by async code ([#7756](https://github.com/facebook/jest/pull/7756)) From f77b104a3f20f6ecb7c30f77eb9af5bf7ee18108 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 4 Mar 2019 17:20:39 -0500 Subject: [PATCH 26/89] lint fixes --- packages/jest-snapshot/package.json | 1 + .../jest-snapshot/src/inline_snapshots.ts | 34 +++++++++---------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 05b9536c7a41..32674a8d47a3 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -13,6 +13,7 @@ "@babel/core": "^7.2.2", "@babel/generator": "^7.3.4", "@babel/parser": "^7.2.3", + "@babel/traverse": "^7.3.4", "@babel/types": "^7.0.0", "@jest/types": "^24.1.0", "chalk": "^2.0.1", diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 00f693c4dbf6..990f9e64c250 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -56,8 +56,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -114,13 +114,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -137,18 +137,18 @@ const createParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text); - traverseAst(snapshots, ast, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); - return ast; -}; + return ast; + }; const traverseAst = ( - snapshots: InlineSnapshot[], + snapshots: Array, ast: any, babelTraverse: BabelTraverse, ) => { From a1020142922b298ee245f0fba5829b9bac4d4b25 Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 11 Mar 2019 16:17:28 -0400 Subject: [PATCH 27/89] lint not sure about the OOM errors on jest-circus. I hope these changes didn't do that... --- .../jest-snapshot/src/inline_snapshots.ts | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 990f9e64c250..a59ee01b883c 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -56,8 +56,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -114,13 +114,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -137,15 +137,15 @@ const createParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text); - traverseAst(snapshots, ast, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); - return ast; - }; + return ast; +}; const traverseAst = ( snapshots: Array, From 9215a44092fe4fbcc7f5a238c8429f58f59e7a2f Mon Sep 17 00:00:00 2001 From: mmkal Date: Mon, 11 Mar 2019 16:41:51 -0400 Subject: [PATCH 28/89] prettier changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 996cd9133088..302a27c3f195 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## master ### Features + - `[jest-snapshots]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) ### Fixes From 3e92e6cdf077bf19738124bd68249ac093d4f209 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 13:06:55 -0400 Subject: [PATCH 29/89] fix conflicts --- .../jest-snapshot/src/inline_snapshots.ts | 187 ++++++++---------- 1 file changed, 77 insertions(+), 110 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index a5c3abdd3b67..de612c8c0fea 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -12,7 +12,7 @@ import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; import {parse, ParserOptions} from '@babel/parser'; import traverse from '@babel/traverse'; -import {templateElement, templateLiteral, file, Expression} from '@babel/types'; +import {templateElement, templateLiteral, file, Expression, CallExpression} from '@babel/types'; import {Frame} from 'jest-message-util'; import {Config} from '@jest/types'; @@ -50,15 +50,14 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); -<<<<<<< HEAD let newSourceFile; if (prettier) { // Resolve project configuration. // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -71,7 +70,14 @@ const saveSnapshotsForFile = ( newSourceFile = prettier.format(sourceFile, { ...config, filepath: sourceFilePath, - parser: createParser(snapshots, inferredParser, babelTraverse), + parser: createInsertionParser(snapshots, inferredParser, babelTraverse), + }); + + // Format the snapshots using the custom parser API. + newSourceFile = prettier.format(newSourceFile, { + ...config, + filepath: sourceFilePath, + parser: createFormattingParser(inferredParser, babelTraverse), }); } else { const {options} = loadPartialConfig({filename: sourceFilePath})!; @@ -106,54 +112,22 @@ const saveSnapshotsForFile = ( ); }, sourceFile); } -======= - // 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. - const inferredParser = prettier.getFileInfo - ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(sourceFilePath); - - // Insert snapshots using the custom parser API. After insertion, 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). - const newSourceFile = prettier.format(sourceFile, { - ...config, - filepath: sourceFilePath, - parser: createInsertionParser(snapshots, inferredParser, babelTraverse), - }); ->>>>>>> master - - // Format the snapshots using the custom parser API. - const formattedNewSourceFile = prettier.format(newSourceFile, { - ...config, - filepath: sourceFilePath, - parser: createFormattingParser(inferredParser, babelTraverse), - }); - if (formattedNewSourceFile !== sourceFile) { - fs.writeFileSync(sourceFilePath, formattedNewSourceFile); + if (newSourceFile !== sourceFile) { + fs.writeFileSync(sourceFilePath, newSourceFile); } }; const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -208,16 +182,15 @@ const createInsertionParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text); -<<<<<<< HEAD - traverseAst(snapshots, ast, babelTraverse); + traverseAst(snapshots, ast, babelTraverse); - return ast; -}; + return ast; + }; const traverseAst = ( snapshots: Array, @@ -233,12 +206,6 @@ const traverseAst = ( const groupedSnapshots = groupSnapshotsByFrame(snapshots); const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); -======= - const groupedSnapshots = groupSnapshotsByFrame(snapshots); - const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); - - const ast = getAst(parsers, inferredParser, text); ->>>>>>> master babelTraverse(ast, { CallExpression({node}) { const {arguments: args, callee} = node; @@ -294,61 +261,61 @@ const createFormattingParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = getAst(parsers, inferredParser, text); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const ast = getAst(parsers, inferredParser, text); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - for (let i = 0; i < args.length; i++) { - const node = args[i]; - if (node.type === 'TemplateLiteral') { - snapshotIndex = i; - snapshot = node.quasis[0].value.raw; + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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; } - } - if (snapshot === undefined || snapshotIndex === undefined) { - return; - } - const useSpaces = !options.useTabs; - snapshot = indent( - snapshot, - Math.ceil( - useSpaces - ? callee.loc.start.column / options.tabWidth - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; -}; + return ast; + }; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From 5f2676638dbaed7a689e037a402487638ce6ad24 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 13:36:43 -0400 Subject: [PATCH 30/89] add todo --- .../jest-snapshot/src/inline_snapshots.ts | 54 ++++++------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index de612c8c0fea..06793890e3a7 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -6,7 +6,7 @@ */ import fs from 'fs'; -import path from 'path'; +// import path from 'path'; import semver from 'semver'; import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; @@ -50,36 +50,8 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - let newSourceFile; - if (prettier) { - // 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. - const inferredParser = prettier.getFileInfo - ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(sourceFilePath); - - // Format the source code using the custom parser API. - newSourceFile = prettier.format(sourceFile, { - ...config, - filepath: sourceFilePath, - parser: createInsertionParser(snapshots, inferredParser, babelTraverse), - }); - - // Format the snapshots using the custom parser API. - newSourceFile = prettier.format(newSourceFile, { - ...config, - filepath: sourceFilePath, - parser: createFormattingParser(inferredParser, babelTraverse), - }); - } else { + let newSourceFile: string; + { const {options} = loadPartialConfig({filename: sourceFilePath})!; if (!options.plugins) { options.plugins = []; @@ -113,6 +85,10 @@ const saveSnapshotsForFile = ( }, sourceFile); } + if (prettier) { + // todo: put formatting back in + } + if (newSourceFile !== sourceFile) { fs.writeFileSync(sourceFilePath, newSourceFile); } @@ -174,7 +150,7 @@ const getAst = ( }; // This parser inserts snapshots into the AST. -const createInsertionParser = ( +export const createInsertionParser = ( snapshots: Array, inferredParser: string, babelTraverse: BabelTraverse, @@ -317,10 +293,10 @@ const createFormattingParser = ( return ast; }; -const simpleDetectParser = (filePath: Config.Path) => { - const extname = path.extname(filePath); - if (/tsx?$/.test(extname)) { - return 'typescript'; - } - return 'babylon'; -}; +// const simpleDetectParser = (filePath: Config.Path) => { +// const extname = path.extname(filePath); +// if (/tsx?$/.test(extname)) { +// return 'typescript'; +// } +// return 'babylon'; +// }; From eea3199f1bc27ac6524415442154e5458842a2fd Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 13:48:27 -0400 Subject: [PATCH 31/89] placeholder prettier formatting block --- .../src/__tests__/inline_snapshots.test.ts | 44 +++++++++---------- .../jest-snapshot/src/inline_snapshots.ts | 39 +++++++++++----- 2 files changed, 51 insertions(+), 32 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 749161a5badf..b1c416705a32 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -432,12 +432,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `);\n' + - '});\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `);\n' + + '});\n', ); }); @@ -469,12 +469,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + - '\t\tObject {\n' + - "\t\t a: 'a'\n" + - '\t\t}\n' + - '\t`);\n' + - '});\n', + "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + + '\t\tObject {\n' + + "\t\t a: 'a'\n" + + '\t\t}\n' + + '\t`);\n' + + '});\n', ); }); @@ -502,11 +502,11 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `));\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `));\n', ); }); @@ -535,10 +535,10 @@ test('saveInlineSnapshots() does not indent empty lines', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + - ' hello\n' + - '\n' + - ' world\n' + - ' `));\n', + ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + + ' hello\n' + + '\n' + + ' world\n' + + ' `));\n', ); }); diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 06793890e3a7..a52dd3f02c17 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -85,8 +85,27 @@ const saveSnapshotsForFile = ( }, sourceFile); } - if (prettier) { - // todo: put formatting back in + if (prettier && false) { + // 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. + const inferredParser = prettier.getFileInfo + ? prettier.getFileInfo.sync(sourceFilePath).inferredParser + : (config && config.parser) || simpleDetectParser(sourceFilePath); + + // Format the source code using the custom parser API. + newSourceFile = prettier.format(sourceFile, { + ...config, + filepath: sourceFilePath, + parser: createFormattingParser(inferredParser, babelTraverse), + }); } if (newSourceFile !== sourceFile) { @@ -170,7 +189,7 @@ export const createInsertionParser = ( const traverseAst = ( snapshots: Array, - ast: any, + ast: any, // todo: type as Program babelTraverse: BabelTraverse, ) => { // Flow uses a 'Program' parent node, babel expects a 'File'. @@ -293,10 +312,10 @@ const createFormattingParser = ( return ast; }; -// const simpleDetectParser = (filePath: Config.Path) => { -// const extname = path.extname(filePath); -// if (/tsx?$/.test(extname)) { -// return 'typescript'; -// } -// return 'babylon'; -// }; +const simpleDetectParser = (filePath: Config.Path) => { + const extname = path.extname(filePath); + if (/tsx?$/.test(extname)) { + return 'typescript'; + } + return 'babylon'; +}; From 442f1cdd93a1029fb7a2bc376811e52dec304eb4 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 17:59:53 -0400 Subject: [PATCH 32/89] reign in @babel/generate's creative license a bit --- packages/jest-snapshot/src/inline_snapshots.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index a52dd3f02c17..97b9b3fbfce2 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -6,7 +6,7 @@ */ import fs from 'fs'; -// import path from 'path'; +import path from 'path'; import semver from 'semver'; import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; @@ -79,13 +79,13 @@ const saveSnapshotsForFile = ( } return ( sourceSoFar.slice(0, nextSnapshot.node.start) + - generate(nextSnapshot.node).code + + generate(nextSnapshot.node, {retainLines: true}).code + sourceSoFar.slice(nextSnapshot.node.end) ); }, sourceFile); } - if (prettier && false) { + if (prettier) { // Resolve project configuration. // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig @@ -101,7 +101,7 @@ const saveSnapshotsForFile = ( : (config && config.parser) || simpleDetectParser(sourceFilePath); // Format the source code using the custom parser API. - newSourceFile = prettier.format(sourceFile, { + newSourceFile = prettier.format(newSourceFile, { ...config, filepath: sourceFilePath, parser: createFormattingParser(inferredParser, babelTraverse), @@ -206,7 +206,10 @@ const traverseAst = ( const {arguments: args, callee} = node; if ( callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed ) { return; } From 121ddafca8d986fcfd83fec4b88066895bab146a Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 18:20:36 -0400 Subject: [PATCH 33/89] =?UTF-8?q?run=20prettier=20twice=20=C2=AF\=5F(?= =?UTF-8?q?=E3=83=84)=5F/=C2=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jest-snapshot/src/inline_snapshots.ts | 96 +++++++++---------- 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 97b9b3fbfce2..625d82a3c59d 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -50,41 +50,39 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - let newSourceFile: string; - { - const {options} = loadPartialConfig({filename: sourceFilePath})!; - if (!options.plugins) { - options.plugins = []; - } - - // TypeScript projects may not have a babel config; make sure they can be parsed anyway. - if (/\.tsx?$/.test(sourceFilePath)) { - options.plugins.push('typescript'); - } - if (/\.tsx/.test(sourceFilePath)) { - options.plugins.push('jsx'); - } - - const ast = parse(sourceFile, options as ParserOptions); - traverseAst(snapshots, ast, babelTraverse); + const {options} = loadPartialConfig({filename: sourceFilePath})!; + if (!options.plugins) { + options.plugins = []; + } - // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. - newSourceFile = 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 + - sourceSoFar.slice(nextSnapshot.node.end) - ); - }, sourceFile); + // TypeScript projects may not have a babel config; make sure they can be parsed anyway. + if (/\.tsx?$/.test(sourceFilePath)) { + options.plugins.push('typescript'); } + if (/\.tsx/.test(sourceFilePath)) { + options.plugins.push('jsx'); + } + + const ast = parse(sourceFile, options as ParserOptions); + traverseAst(snapshots, ast, babelTraverse); + + // 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 + + sourceSoFar.slice(nextSnapshot.node.end) + ); + }, sourceFile); + let newSourceFile = sourceFileWithSnapshots if (prettier) { // Resolve project configuration. // For older versions of Prettier, do not load configuration. @@ -100,12 +98,23 @@ const saveSnapshotsForFile = ( ? prettier.getFileInfo.sync(sourceFilePath).inferredParser : (config && config.parser) || simpleDetectParser(sourceFilePath); - // Format the source code using the custom parser API. + // Insert snapshots using the custom parser API. After insertion, 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). newSourceFile = prettier.format(newSourceFile, { ...config, filepath: sourceFilePath, - parser: createFormattingParser(inferredParser, babelTraverse), }); + + if (newSourceFile !== sourceFileWithSnapshots) { + // prettier moved things around, we now need to run it again to fix snapshot indentations. + newSourceFile = prettier.format(newSourceFile, { + ...config, + filepath: sourceFilePath, + parser: createFormattingParser(inferredParser, babelTraverse), + }); + } } if (newSourceFile !== sourceFile) { @@ -168,25 +177,6 @@ const getAst = ( return ast; }; -// This parser inserts snapshots into the AST. -export const createInsertionParser = ( - snapshots: Array, - inferredParser: string, - babelTraverse: BabelTraverse, -) => ( - text: string, - parsers: {[key: string]: (text: string) => any}, - options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - const ast = parsers[inferredParser](text); - - traverseAst(snapshots, ast, babelTraverse); - - return ast; - }; - const traverseAst = ( snapshots: Array, ast: any, // todo: type as Program From 9a46420cd83bc24e4dffcc65518efa9a46821e57 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 18:32:16 -0400 Subject: [PATCH 34/89] trim babel's creativity again --- packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts | 2 +- packages/jest-snapshot/src/inline_snapshots.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index b1c416705a32..75f5ae811d18 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -242,7 +242,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); ); }); -test.each([['babylon'], ['flow'], ['typescript']])( +test.each([['babel'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { const filename = path.join(__dirname, 'my.test.js'); diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 625d82a3c59d..8886a29a4e37 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -77,7 +77,7 @@ const saveSnapshotsForFile = ( } return ( sourceSoFar.slice(0, nextSnapshot.node.start) + - generate(nextSnapshot.node, {retainLines: true}).code + + generate(nextSnapshot.node, {retainLines: true}).code.trim() + sourceSoFar.slice(nextSnapshot.node.end) ); }, sourceFile); From ae376f603561a256fb0441c2281e46def651fb91 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 18:40:31 -0400 Subject: [PATCH 35/89] clean up --- .../jest-snapshot/src/inline_snapshots.ts | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 8886a29a4e37..4f8c9508ac19 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -12,7 +12,7 @@ import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; import {parse, ParserOptions} from '@babel/parser'; import traverse from '@babel/traverse'; -import {templateElement, templateLiteral, file, Expression, CallExpression} from '@babel/types'; +import {templateElement, templateLiteral, file, Expression, CallExpression, File, Program} from '@babel/types'; import {Frame} from 'jest-message-util'; import {Config} from '@jest/types'; @@ -28,7 +28,7 @@ type BabelTraverse = typeof traverse; export const saveInlineSnapshots = ( snapshots: Array, prettier: any, - babelTraverse: Function, + babelTraverse: BabelTraverse, ) => { const snapshotsByFile = groupSnapshotsByFile(snapshots); @@ -98,7 +98,7 @@ const saveSnapshotsForFile = ( ? prettier.getFileInfo.sync(sourceFilePath).inferredParser : (config && config.parser) || simpleDetectParser(sourceFilePath); - // Insert snapshots using the custom parser API. After insertion, the code is + // 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). @@ -108,7 +108,7 @@ const saveSnapshotsForFile = ( }); if (newSourceFile !== sourceFileWithSnapshots) { - // prettier moved things around, we now need to run it again to fix snapshot indentations. + // prettier moved things around, run it again to fix snapshot indentations. newSourceFile = prettier.format(newSourceFile, { ...config, filepath: sourceFilePath, @@ -163,13 +163,9 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { .join('\n'); }; -const getAst = ( - parsers: {[key: string]: (text: string) => any}, - inferredParser: string, - text: string, -) => { +const resolveAst = (fileOrProgram: any): File => { // Flow uses a 'Program' parent node, babel expects a 'File'. - let ast = parsers[inferredParser](text); + let ast = fileOrProgram if (ast.type !== 'File') { ast = file(ast, ast.comments, ast.tokens); delete ast.program.comments; @@ -179,14 +175,10 @@ const getAst = ( const traverseAst = ( snapshots: Array, - ast: any, // todo: type as Program + fileOrProgram: File | Program, babelTraverse: BabelTraverse, ) => { - // Flow uses a 'Program' parent node, babel expects a 'File'. - if (ast.type !== 'File') { - ast = file(ast, ast.comments, ast.tokens); - delete ast.program.comments; - } + const ast = resolveAst(fileOrProgram) const groupedSnapshots = groupSnapshotsByFrame(snapshots); const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); @@ -244,7 +236,7 @@ const traverseAst = ( // This parser formats snapshots to the correct indentation. const createFormattingParser = ( inferredParser: string, - babelTraverse: Function, + babelTraverse: BabelTraverse, ) => ( text: string, parsers: {[key: string]: (text: string) => any}, @@ -253,7 +245,7 @@ const createFormattingParser = ( // Workaround for https://github.com/prettier/prettier/issues/3150 options.parser = inferredParser; - const ast = getAst(parsers, inferredParser, text); + const ast = resolveAst(parsers[inferredParser](text)); babelTraverse(ast, { CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { if ( From 38c3c32bdbcb7e272cc5748d87e4c2d2ec8be7b4 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 18:41:33 -0400 Subject: [PATCH 36/89] prettier --- .../src/__tests__/inline_snapshots.test.ts | 44 ++--- .../jest-snapshot/src/inline_snapshots.ts | 165 ++++++++++-------- 2 files changed, 110 insertions(+), 99 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 75f5ae811d18..e6f2e48afa1d 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -432,12 +432,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `);\n' + - '});\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `);\n' + + '});\n', ); }); @@ -469,12 +469,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + - '\t\tObject {\n' + - "\t\t a: 'a'\n" + - '\t\t}\n' + - '\t`);\n' + - '});\n', + "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + + '\t\tObject {\n' + + "\t\t a: 'a'\n" + + '\t\t}\n' + + '\t`);\n' + + '});\n', ); }); @@ -502,11 +502,11 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `));\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `));\n', ); }); @@ -535,10 +535,10 @@ test('saveInlineSnapshots() does not indent empty lines', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + - ' hello\n' + - '\n' + - ' world\n' + - ' `));\n', + ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + + ' hello\n' + + '\n' + + ' world\n' + + ' `));\n', ); }); diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 4f8c9508ac19..382f3c2619a5 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -12,7 +12,15 @@ import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; import {parse, ParserOptions} from '@babel/parser'; import traverse from '@babel/traverse'; -import {templateElement, templateLiteral, file, Expression, CallExpression, File, Program} from '@babel/types'; +import { + templateElement, + templateLiteral, + file, + Expression, + CallExpression, + File, + Program, +} from '@babel/types'; import {Frame} from 'jest-message-util'; import {Config} from '@jest/types'; @@ -67,29 +75,32 @@ const saveSnapshotsForFile = ( traverseAst(snapshots, ast, babelTraverse); // 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 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, + ); - let newSourceFile = sourceFileWithSnapshots + let newSourceFile = sourceFileWithSnapshots; if (prettier) { // Resolve project configuration. // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -125,13 +136,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce<{[key: string]: Array}>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + snapshots.reduce<{[key: string]: Array}>( + (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' @@ -165,7 +176,7 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { const resolveAst = (fileOrProgram: any): File => { // Flow uses a 'Program' parent node, babel expects a 'File'. - let ast = fileOrProgram + let ast = fileOrProgram; if (ast.type !== 'File') { ast = file(ast, ast.comments, ast.tokens); delete ast.program.comments; @@ -178,7 +189,7 @@ const traverseAst = ( fileOrProgram: File | Program, babelTraverse: BabelTraverse, ) => { - const ast = resolveAst(fileOrProgram) + const ast = resolveAst(fileOrProgram); const groupedSnapshots = groupSnapshotsByFrame(snapshots); const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); @@ -241,61 +252,61 @@ const createFormattingParser = ( text: string, parsers: {[key: string]: (text: string) => any}, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From b92f988fc7dfb50557e8e37c00b8da6b8d0f8bc2 Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 18:55:46 -0400 Subject: [PATCH 37/89] use Function to avoid fixing types all over the place --- packages/jest-snapshot/src/inline_snapshots.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 382f3c2619a5..b9523f492820 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -36,7 +36,7 @@ type BabelTraverse = typeof traverse; export const saveInlineSnapshots = ( snapshots: Array, prettier: any, - babelTraverse: BabelTraverse, + babelTraverse: Function, ) => { const snapshotsByFile = groupSnapshotsByFile(snapshots); From a8ce8c1215e8fcbeaf03c698907ca7b80340a6fc Mon Sep 17 00:00:00 2001 From: mmkal Date: Thu, 11 Apr 2019 19:04:17 -0400 Subject: [PATCH 38/89] oops --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01e2f5aec378..b7784035bc30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,12 +54,9 @@ - `[@jest/reporter]` Display todo and skip test descriptions when verbose is true ([#8038](https://github.com/facebook/jest/pull/8038)) - `[jest-runner]` Support default exports for test environments ([#8163](https://github.com/facebook/jest/pull/8163)) - `[pretty-format]` Support React.Suspense ([#8180](https://github.com/facebook/jest/pull/8180)) -<<<<<<< HEAD -- `[jest-snapshots]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) -======= +- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - `[jest-snapshot]` Indent inline snapshots ([#8198](https://github.com/facebook/jest/pull/8198)) - `[jest-config]` Support colors in `displayName` configuration ([#8025](https://github.com/facebook/jest/pull/8025)) ->>>>>>> master ### Fixes From 6fae9d12cba23916213200873cd415fc3451ab80 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sun, 23 Jun 2019 17:34:04 -0400 Subject: [PATCH 39/89] prettier --- .../jest-snapshot/src/inline_snapshots.ts | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 588581c354c2..4ec54397b069 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -99,8 +99,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -136,13 +136,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -260,61 +260,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From 87d79d25245484bb020f98d0ce1852eaa3909027 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sun, 23 Jun 2019 18:27:20 -0400 Subject: [PATCH 40/89] fix: remove callee property name check --- .../jest-snapshot/src/inline_snapshots.ts | 123 +++++++++--------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 4ec54397b069..1a48f235fab3 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -99,8 +99,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -136,13 +136,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -207,10 +207,7 @@ const traverseAst = ( const {arguments: args, callee} = node; if ( callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed + callee.property.type !== 'Identifier' ) { return; } @@ -260,61 +257,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - for (let i = 0; i < args.length; i++) { - const node = args[i]; - if (node.type === 'TemplateLiteral') { - snapshotIndex = i; - snapshot = node.quasis[0].value.raw; + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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; } - } - if (snapshot === undefined || snapshotIndex === undefined) { - return; - } - const useSpaces = !options.useTabs; - snapshot = indent( - snapshot, - Math.ceil( - useSpaces - ? callee.loc.start.column / options.tabWidth - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; -}; + return ast; + }; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From c787b8da42bcd5bc5c70d0ae411ca7c6d06d3a89 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sun, 23 Jun 2019 18:50:36 -0400 Subject: [PATCH 41/89] prettier --- .../jest-snapshot/src/inline_snapshots.ts | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 1a48f235fab3..1a69e5590f7c 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -99,8 +99,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -136,13 +136,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -257,61 +257,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From 81d63aadc40af059bf11f8301e2cea055ae4051d Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Tue, 25 Jun 2019 14:07:33 -0400 Subject: [PATCH 42/89] alphabetize imports --- packages/jest-snapshot/src/inline_snapshots.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 1a69e5590f7c..73ce8d90ab88 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -16,8 +16,8 @@ import { templateElement, templateLiteral, file, - Expression, CallExpression, + Expression, File, Program, } from '@babel/types'; From 5205259dd8bdbc0c8ad31f698782b2e84752c36b Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Tue, 25 Jun 2019 14:28:40 -0400 Subject: [PATCH 43/89] move changelog entry to master --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49852f42c7cd..5b7e01f336a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - `[jest-cli]` Improve chai support (with detailed output, to match jest exceptions) ([#8454](https://github.com/facebook/jest/pull/8454)) - `[*]` Manage the global timeout with `--testTimeout` command line argument. ([#8456](https://github.com/facebook/jest/pull/8456)) - `[pretty-format]` Render custom displayName of memoized components +- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) + ### Fixes @@ -107,7 +109,6 @@ - `[@jest/reporter]` Display todo and skip test descriptions when verbose is true ([#8038](https://github.com/facebook/jest/pull/8038)) - `[jest-runner]` Support default exports for test environments ([#8163](https://github.com/facebook/jest/pull/8163)) - `[pretty-format]` Support React.Suspense ([#8180](https://github.com/facebook/jest/pull/8180)) -- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - `[jest-snapshot]` Indent inline snapshots ([#8198](https://github.com/facebook/jest/pull/8198)) - `[jest-config]` Support colors in `displayName` configuration ([#8025](https://github.com/facebook/jest/pull/8025)) From d97f6cf3231ea5b1ca577c674b6e55e7e9948433 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Fri, 28 Jun 2019 21:53:27 -0400 Subject: [PATCH 44/89] check plugin is missing before adding --- .../jest-snapshot/src/inline_snapshots.ts | 122 +++++++++--------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 73ce8d90ab88..ede64e06b63d 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -64,10 +64,10 @@ const saveSnapshotsForFile = ( } // TypeScript projects may not have a babel config; make sure they can be parsed anyway. - if (/\.tsx?$/.test(sourceFilePath)) { + if (/\.tsx?$/.test(sourceFilePath) && options.plugins.indexOf('typescript') === -1) { options.plugins.push('typescript'); } - if (/\.tsx/.test(sourceFilePath)) { + if (/\.tsx/.test(sourceFilePath) && options.plugins.indexOf('jsx') === -1) { options.plugins.push('jsx'); } @@ -99,8 +99,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -136,13 +136,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -257,61 +257,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - for (let i = 0; i < args.length; i++) { - const node = args[i]; - if (node.type === 'TemplateLiteral') { - snapshotIndex = i; - snapshot = node.quasis[0].value.raw; + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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; } - } - if (snapshot === undefined || snapshotIndex === undefined) { - return; - } - const useSpaces = !options.useTabs; - snapshot = indent( - snapshot, - Math.ceil( - useSpaces - ? callee.loc.start.column / options.tabWidth - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; -}; + return ast; + }; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From 127d492f84140102afc0f11f03a9d401385bc637 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Fri, 28 Jun 2019 22:05:25 -0400 Subject: [PATCH 45/89] prettier --- packages/jest-snapshot/src/inline_snapshots.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index ede64e06b63d..b7a88ac20bb7 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -64,7 +64,10 @@ const saveSnapshotsForFile = ( } // TypeScript projects may not have a babel config; make sure they can be parsed anyway. - if (/\.tsx?$/.test(sourceFilePath) && options.plugins.indexOf('typescript') === -1) { + if ( + /\.tsx?$/.test(sourceFilePath) && + options.plugins.indexOf('typescript') === -1 + ) { options.plugins.push('typescript'); } if (/\.tsx/.test(sourceFilePath) && options.plugins.indexOf('jsx') === -1) { From 2ef0b1bb69869c25973f515674090983003b3169 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Fri, 28 Jun 2019 22:32:01 -0400 Subject: [PATCH 46/89] prettier --- .../jest-snapshot/src/inline_snapshots.ts | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index b7a88ac20bb7..2d1fd8874ca9 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -102,8 +102,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -139,13 +139,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -260,61 +260,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From e0d50a58ab93116802d1b88fbc2795aed7780662 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Fri, 28 Jun 2019 22:55:11 -0400 Subject: [PATCH 47/89] prettier! --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b7e01f336a0..92314e9f375a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,6 @@ - `[pretty-format]` Render custom displayName of memoized components - `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) - ### Fixes - `[babel-plugin-jest-hoist]` Expand list of whitelisted globals in global mocks ([#8429](https://github.com/facebook/jest/pull/8429) From 11b23098d111b9b0a7b6b84469fee9e7f0f57ee1 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 19 Oct 2019 17:36:15 -0400 Subject: [PATCH 48/89] run yarn install to update lockfile --- yarn.lock | 52 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index cda9839f0e9f..1dc8e5119b6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,10 +9,10 @@ dependencies: tslib "^1.9.0" -"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.2.2", "@babel/core@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" - integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== +"@angular/compiler@^8.2.5": + version "8.2.11" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.2.11.tgz#fe1da7b83cbd4dd4c59d784d7a5caf593003a885" + integrity sha512-Qnh07i04s0LZECEKu9/NHwdRutfEs9N3y8f0uMdC+m7Cjy3guvmLtriAMdnxlH3KFFFSnugM6Ng6+gII8tZI6A== dependencies: tslib "^1.9.0" @@ -71,6 +71,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.2.2": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.3.4" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.0.0", "@babel/generator@^7.4.0", "@babel/generator@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" @@ -82,6 +102,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.3.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== + dependencies: + "@babel/types" "^7.6.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -280,6 +310,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.2.3": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== + "@babel/plugin-external-helpers@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" @@ -930,6 +965,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" From 49ae9ea5e57d7989c264c7e62feff6fc8594c498 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 19 Oct 2019 19:14:52 -0400 Subject: [PATCH 49/89] prettier --- .../src/__tests__/inline_snapshots.test.ts | 70 +++++------ .../jest-snapshot/src/inline_snapshots.ts | 118 +++++++++--------- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 0a6b443601c6..285d10582f98 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -414,12 +414,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `);\n' + - '});\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `);\n' + + '});\n', ); }); @@ -457,19 +457,19 @@ test('saveInlineSnapshots() does not re-indent already indented snapshots', () = expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `);\n' + - '});\n' + - "it('is a another test', () => {\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " b: 'b'\n" + - ' }\n' + - ' `);\n' + - '});\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `);\n' + + '});\n' + + "it('is a another test', () => {\n" + + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " b: 'b'\n" + + ' }\n' + + ' `);\n' + + '});\n', ); }); @@ -501,12 +501,12 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () => {\n" + - "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + - '\t\tObject {\n' + - "\t\t a: 'a'\n" + - '\t\t}\n' + - '\t`);\n' + - '});\n', + "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + + '\t\tObject {\n' + + "\t\t a: 'a'\n" + + '\t\t}\n' + + '\t`);\n' + + '});\n', ); }); @@ -534,11 +534,11 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - ' Object {\n' + - " a: 'a'\n" + - ' }\n' + - ' `));\n', + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + + ' Object {\n' + + " a: 'a'\n" + + ' }\n' + + ' `));\n', ); }); @@ -567,10 +567,10 @@ test('saveInlineSnapshots() does not indent empty lines', () => { expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is a test', () =>\n" + - ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + - ' hello\n' + - '\n' + - ' world\n' + - ' `));\n', + ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + + ' hello\n' + + '\n' + + ' world\n' + + ' `));\n', ); }); diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index e18effa58716..78a98c2e7174 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -102,8 +102,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -139,13 +139,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -260,61 +260,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From fa29eaba3947ee6d247e24fed8877bd60c308205 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 19 Oct 2019 19:18:28 -0400 Subject: [PATCH 50/89] null check --- .../jest-snapshot/src/inline_snapshots.ts | 120 +++++++++--------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 78a98c2e7174..7ac0808bdeba 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -58,7 +58,7 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - const {options} = loadPartialConfig({filename: sourceFilePath})!; + const {options} = loadPartialConfig({filename: sourceFilePath}) || {options: {}}; if (!options.plugins) { options.plugins = []; } @@ -102,8 +102,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -139,13 +139,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -260,61 +260,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, -) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } + ) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + + const ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - for (let i = 0; i < args.length; i++) { - const node = args[i]; - if (node.type === 'TemplateLiteral') { - snapshotIndex = i; - snapshot = node.quasis[0].value.raw; + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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; } - } - if (snapshot === undefined || snapshotIndex === undefined) { - return; - } - const useSpaces = !options.useTabs; - snapshot = indent( - snapshot, - Math.ceil( - useSpaces - ? callee.loc.start.column / options.tabWidth - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; -}; + return ast; + }; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From b4d7dd119b5dc5eb8f5557fbfaaef007402f008d Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 12:29:08 -0500 Subject: [PATCH 51/89] fix: lint issues running yarn lint:prettier edited a bunch of markdown files for me, but I don't really want to check them in --- .../src/__tests__/inline_snapshots.test.ts | 5 +- .../jest-snapshot/src/inline_snapshots.ts | 122 +++++++++--------- 2 files changed, 63 insertions(+), 64 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 16ef84bc6db0..285d10582f98 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -335,10 +335,7 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( const frame = {column: 11, file: filename, line: 1} as Frame; const save = () => saveInlineSnapshots( - [ - {frame, snapshot: `1`}, - {frame, snapshot: `2`}, - ], + [{frame, snapshot: `1`}, {frame, snapshot: `2`}], prettier, babelTraverse, ); diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 7ac0808bdeba..da3683a1f515 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -58,7 +58,9 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - const {options} = loadPartialConfig({filename: sourceFilePath}) || {options: {}}; + const {options} = loadPartialConfig({filename: sourceFilePath}) || { + options: {}, + }; if (!options.plugins) { options.plugins = []; } @@ -102,8 +104,8 @@ const saveSnapshotsForFile = ( // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + editorconfig: true, + }) : null; // Detect the parser for the test file. @@ -139,13 +141,13 @@ const saveSnapshotsForFile = ( const groupSnapshotsBy = ( createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => - snapshots.reduce>>( - (object, inlineSnapshot) => { - const key = createKey(inlineSnapshot); - return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; - }, - {}, - ); + 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' @@ -260,61 +262,61 @@ const createFormattingParser = ( text: string, parsers: Record any>, options: any, - ) => { - // Workaround for https://github.com/prettier/prettier/issues/3150 - options.parser = inferredParser; - - const ast = resolveAst(parsers[inferredParser](text)); - babelTraverse(ast, { - CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { - if ( - callee.type !== 'MemberExpression' || - callee.property.type !== 'Identifier' || - callee.property.name !== 'toMatchInlineSnapshot' || - !callee.loc || - callee.computed - ) { - return; - } +) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; - let snapshotIndex: number | undefined; - let snapshot: string | undefined; - 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 ast = resolveAst(parsers[inferredParser](text)); + babelTraverse(ast, { + CallExpression({node: {arguments: args, callee}}: {node: CallExpression}) { + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.name !== 'toMatchInlineSnapshot' || + !callee.loc || + callee.computed + ) { + return; + } + + let snapshotIndex: number | undefined; + let snapshot: string | undefined; + 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 - : callee.loc.start.column / 2, // Each tab is 2 characters. - ), - useSpaces ? ' '.repeat(options.tabWidth) : '\t', - ); + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? callee.loc.start.column / options.tabWidth + : callee.loc.start.column / 2, // Each tab is 2 characters. + ), + useSpaces ? ' '.repeat(options.tabWidth) : '\t', + ); - const replacementNode = templateLiteral( - [ - templateElement({ - raw: snapshot, - }), - ], - [], - ); - args[snapshotIndex] = replacementNode; - }, - }); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot, + }), + ], + [], + ); + args[snapshotIndex] = replacementNode; + }, + }); - return ast; - }; + return ast; +}; const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); From 22c1e4efeebb4c59e54440bf52c031b6b128c14b Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 12:38:41 -0500 Subject: [PATCH 52/89] make @babel/* packages peerDependencies --- packages/jest-snapshot/package.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index bf38c907d122..273a378f45a2 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -10,10 +10,6 @@ "main": "build/index.js", "types": "build/index.d.ts", "dependencies": { - "@babel/core": "^7.2.2", - "@babel/generator": "^7.3.4", - "@babel/parser": "^7.2.3", - "@babel/traverse": "^7.3.4", "@babel/types": "^7.0.0", "@jest/types": "^24.9.0", "chalk": "^2.0.1", @@ -37,6 +33,12 @@ "jest-haste-map": "^24.9.0", "prettier": "^1.13.4" }, + "peerDependencies": { + "@babel/core": "7.x", + "@babel/generator": "7.x", + "@babel/parser": "7.x", + "@babel/traverse": "7.x" + }, "engines": { "node": ">= 8" }, @@ -44,4 +46,4 @@ "access": "public" }, "gitHead": "9ad0f4bc6b8bdd94989804226c28c9960d9da7d1" -} +} \ No newline at end of file From 12393d761a2fc8d716c443bded91b896a2cab099 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 12:42:30 -0500 Subject: [PATCH 53/89] oh dear more lint --- packages/jest-snapshot/src/inline_snapshots.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index da3683a1f515..50302cd40800 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -10,16 +10,16 @@ import * as path from 'path'; import semver = require('semver'); import {loadPartialConfig} from '@babel/core'; import generate from '@babel/generator'; -import {parse, ParserOptions} from '@babel/parser'; +import {ParserOptions, parse} from '@babel/parser'; import traverse from '@babel/traverse'; import { - templateElement, - templateLiteral, CallExpression, - file, Expression, File, Program, + file, + templateElement, + templateLiteral, } from '@babel/types'; import {Frame} from 'jest-message-util'; From 6d4815f3446ef9027dc8937dae0b22d603e7a4f2 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 12:52:17 -0500 Subject: [PATCH 54/89] ah needed to update prettier locally --- .../jest-snapshot/src/__tests__/inline_snapshots.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 285d10582f98..16ef84bc6db0 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -335,7 +335,10 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( const frame = {column: 11, file: filename, line: 1} as Frame; const save = () => saveInlineSnapshots( - [{frame, snapshot: `1`}, {frame, snapshot: `2`}], + [ + {frame, snapshot: `1`}, + {frame, snapshot: `2`}, + ], prettier, babelTraverse, ); From b2dfa56a5d09c24ca2d0cdcb0ae7eebac55fd2dc Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 12:56:12 -0500 Subject: [PATCH 55/89] I forgot lockfiles are kinda trustworthy now --- yarn.lock | 59 +++++-------------------------------------------------- 1 file changed, 5 insertions(+), 54 deletions(-) diff --git a/yarn.lock b/yarn.lock index d367019a5a36..11ebbb06dbd5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,26 +71,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.2.2": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" - integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.4" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.3.4" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.3.4" - "@babel/types" "^7.3.4" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/generator@^7.0.0", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" @@ -101,16 +81,6 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.3.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== - dependencies: - "@babel/types" "^7.6.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - "@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.0": version "7.7.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" @@ -294,7 +264,7 @@ "@babel/traverse" "^7.7.0" "@babel/types" "^7.7.0" -"@babel/helpers@^7.2.0", "@babel/helpers@^7.7.0": +"@babel/helpers@^7.7.0": version "7.7.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== @@ -317,16 +287,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== -"@babel/parser@^7.2.3": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== - -"@babel/parser@^7.3.4": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" - integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== - "@babel/plugin-external-helpers@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" @@ -948,7 +908,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.0.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0", "@babel/template@^7.7.0": +"@babel/template@^7.0.0", "@babel/template@^7.4.0", "@babel/template@^7.7.0": version "7.7.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== @@ -972,7 +932,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.6.1", "@babel/types@^7.7.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.6.1", "@babel/types@^7.7.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== @@ -981,15 +941,6 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" - integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -4350,7 +4301,7 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -8871,7 +8822,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.10: +lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== From 2bc8090f38ddacafcc66f4f61301a0349f4066e1 Mon Sep 17 00:00:00 2001 From: mmkal <15040698+mmkal@users.noreply.github.com> Date: Sat, 9 Nov 2019 15:31:36 -0500 Subject: [PATCH 56/89] move generator, parser and traverse back to dependencies --- packages/jest-snapshot/package.json | 15 ++++++++++----- yarn.lock | 7 ++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 273a378f45a2..8f346a4aa746 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -10,6 +10,9 @@ "main": "build/index.js", "types": "build/index.d.ts", "dependencies": { + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.3", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/types": "^24.9.0", "chalk": "^2.0.1", @@ -34,10 +37,12 @@ "prettier": "^1.13.4" }, "peerDependencies": { - "@babel/core": "7.x", - "@babel/generator": "7.x", - "@babel/parser": "7.x", - "@babel/traverse": "7.x" + "@babel/core": "7.x" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } }, "engines": { "node": ">= 8" @@ -46,4 +51,4 @@ "access": "public" }, "gitHead": "9ad0f4bc6b8bdd94989804226c28c9960d9da7d1" -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 11ebbb06dbd5..f26406a6d118 100644 --- a/yarn.lock +++ b/yarn.lock @@ -287,6 +287,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== +"@babel/parser@^7.7.3": + version "7.7.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" + integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== + "@babel/plugin-external-helpers@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" @@ -917,7 +922,7 @@ "@babel/parser" "^7.7.0" "@babel/types" "^7.7.0" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.2", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.2", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== From 5fe99299d17bc96adc386d9b47a8b1c157b7c621 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Fri, 10 Apr 2020 18:47:31 +0200 Subject: [PATCH 57/89] require.resolve Babel syntax plugin --- packages/jest-snapshot/package.json | 4 +++- packages/jest-snapshot/src/inline_snapshots.ts | 17 ++++++++--------- yarn.lock | 9 ++------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index e2d599769b7c..a8aff32dd197 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -18,7 +18,9 @@ }, "dependencies": { "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.3", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/types": "^25.3.0", diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index d5678fb1fcf0..c41975be8a00 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -66,14 +66,13 @@ const saveSnapshotsForFile = ( } // TypeScript projects may not have a babel config; make sure they can be parsed anyway. - if ( - /\.tsx?$/.test(sourceFilePath) && - options.plugins.indexOf('typescript') === -1 - ) { - options.plugins.push('typescript'); - } - if (/\.tsx/.test(sourceFilePath) && options.plugins.indexOf('jsx') === -1) { - options.plugins.push('jsx'); + if (/\.tsx?$/.test(sourceFilePath)) { + options.plugins.push([ + require.resolve('@babel/plugin-syntax-typescript'), + {isTSX: /\.tsx$/.test(sourceFilePath)}, + // 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 @@ -333,7 +332,7 @@ const createFormattingParser = ( const simpleDetectParser = (filePath: Config.Path) => { const extname = path.extname(filePath); - if (/tsx?$/.test(extname)) { + if (/\.tsx?$/.test(extname)) { return 'typescript'; } return 'babylon'; diff --git a/yarn.lock b/yarn.lock index 9577ab04ca4a..a0031c30063d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -340,11 +340,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== -"@babel/parser@^7.7.3": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" - integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== - "@babel/plugin-external-helpers@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz#5a94164d9af393b2820a3cdc407e28ebf237de4b" @@ -506,7 +501,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.8.3": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.7.2", "@babel/plugin-syntax-jsx@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== @@ -562,7 +557,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-typescript@^7.8.3": +"@babel/plugin-syntax-typescript@^7.7.2", "@babel/plugin-syntax-typescript@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== From 449999d7da176fd08823138865efcf297ce82b6e Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Fri, 10 Apr 2020 18:49:49 +0200 Subject: [PATCH 58/89] correct changelog position --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 605fa96f565f..e4005992750d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Features +- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) + ### Fixes ### Chore & Maintenance @@ -267,7 +269,6 @@ - `[jest-matcher-utils]` Add color options to `matcherHint` ([#8795](https://github.com/facebook/jest/pull/8795)) - `[jest-circus/jest-jasmine2]` Give clearer output for Node assert errors ([#8792](https://github.com/facebook/jest/pull/8792)) - `[jest-runner]` Export all types in the type signature of `jest-runner` ([#8825](https://github.com/facebook/jest/pull/8825)) -- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) ### Fixes From 5ae7f0f402196f6c16db9ff334d0effef8be1575 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Fri, 10 Apr 2020 19:11:33 +0200 Subject: [PATCH 59/89] extract runPrettier fn --- .../jest-snapshot/src/inline_snapshots.ts | 93 +++++++++++-------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index c41975be8a00..8730ce5ccc18 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -101,44 +101,15 @@ const saveSnapshotsForFile = ( sourceFile, ); - let newSourceFile = sourceFileWithSnapshots; - if (prettier) { - // 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. - const inferredParser = prettier.getFileInfo - ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(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). - newSourceFile = prettier.format(newSourceFile, { - ...config, - filepath: sourceFilePath, - }); - - if (newSourceFile !== sourceFileWithSnapshots) { - // prettier moved things around, run it again to fix snapshot indentations. - newSourceFile = prettier.format(newSourceFile, { - ...config, - filepath: sourceFilePath, - parser: createFormattingParser( - snapshotMatcherNames, - inferredParser, - babelTraverse, - ), - }); - } - } + const newSourceFile = prettier + ? runPrettier( + prettier, + sourceFilePath, + sourceFileWithSnapshots, + snapshotMatcherNames, + babelTraverse, + ) + : sourceFileWithSnapshots; if (newSourceFile !== sourceFile) { fs.writeFileSync(sourceFilePath, newSourceFile); @@ -265,6 +236,52 @@ const traverseAst = ( } }; +const runPrettier = ( + prettier: any, + sourceFilePath: string, + sourceFileWithSnapshots: string, + snapshotMatcherNames: Array, + babelTraverse: BabelTraverse, +) => { + // 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. + const inferredParser = prettier.getFileInfo + ? prettier.getFileInfo.sync(sourceFilePath).inferredParser + : (config && config.parser) || simpleDetectParser(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). + let newSourceFile = prettier.format(sourceFileWithSnapshots, { + ...config, + filepath: sourceFilePath, + }); + + if (newSourceFile !== sourceFileWithSnapshots) { + // prettier moved things around, run it again to fix snapshot indentations. + newSourceFile = prettier.format(newSourceFile, { + ...config, + filepath: sourceFilePath, + parser: createFormattingParser( + snapshotMatcherNames, + inferredParser, + babelTraverse, + ), + }); + } + + return newSourceFile; +}; + // This parser formats snapshots to the correct indentation. const createFormattingParser = ( snapshotMatcherNames: Array, From 8ebb456d6356a6cc83b45adea703ea01521bb831 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Fri, 10 Apr 2020 22:02:23 +0200 Subject: [PATCH 60/89] Babel parse correctly --- packages/jest-snapshot/package.json | 4 +- .../src/__tests__/inline_snapshots.test.ts | 206 ++++++++---------- .../jest-snapshot/src/inline_snapshots.ts | 22 +- yarn.lock | 36 ++- 4 files changed, 134 insertions(+), 134 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index a8aff32dd197..f97b41be8558 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -19,8 +19,6 @@ "dependencies": { "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/types": "^25.3.0", @@ -38,6 +36,8 @@ "semver": "^6.3.0" }, "devDependencies": { + "@babel/preset-flow": "^7.7.2", + "@babel/preset-react": "^7.7.2", "@types/natural-compare": "^1.4.0", "@types/semver": "^6.0.1", "ansi-regex": "^5.0.0", diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index 16ef84bc6db0..fddf615f1b09 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -5,34 +5,29 @@ * LICENSE file in the root directory of this source tree. */ -jest.mock('fs', () => ({ - ...jest.genMockFromModule('fs'), - existsSync: jest.fn().mockReturnValue(true), - readdirSync: jest.fn().mockReturnValue([]), - statSync: jest.fn(filePath => ({ - isDirectory: () => !filePath.endsWith('.js'), - })), -})); jest.mock('prettier'); -jest.mock('@babel/core'); import * as fs from 'fs'; +import {tmpdir} from 'os'; import * as path from 'path'; import prettier from 'prettier'; import babelTraverse from '@babel/traverse'; -import * as babelCore from '@babel/core'; import {Frame} from 'jest-message-util'; +let dir; import {saveInlineSnapshots} from '../inline_snapshots'; beforeEach(() => { (prettier.resolveConfig.sync as jest.Mock).mockReset(); }); +beforeEach(() => { + dir = path.join(tmpdir(), `jest-inline-snapshot-test-${Date.now()}`); + fs.mkdirSync(dir); +}); + test('saveInlineSnapshots() replaces empty function call with a template literal', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => `expect(1).toMatchInlineSnapshot();\n`, - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, `expect(1).toMatchInlineSnapshot();\n`); saveInlineSnapshots( [ @@ -45,17 +40,16 @@ test('saveInlineSnapshots() replaces empty function call with a template literal babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect(1).toMatchInlineSnapshot(`1`);\n', ); }); test('saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone', () => { - const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => - ` + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); @@ -73,8 +67,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf8')).toBe( `const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); @@ -84,10 +77,10 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); }); test('saveInlineSnapshots() can handle typescript without prettier', () => { - const filename = path.join(__dirname, 'my.test.ts'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => - ` + const filename = path.join(dir, 'my.test.ts'); + fs.writeFileSync( + filename, + ` interface Foo { foo: string } @@ -107,8 +100,7 @@ expect(a).toMatchInlineSnapshot(); babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf8')).toBe( ` interface Foo { foo: string @@ -120,10 +112,10 @@ expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); }); test('saveInlineSnapshots() can handle tsx without prettier', () => { - const filename = path.join(__dirname, 'my.test.tsx'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => - ` + const filename = path.join(dir, 'my.test.tsx'); + fs.writeFileSync( + filename, + ` it('foos', async () => { const Foo = (props: { foo: string }) =>
{props.foo}
; const a = await Foo({ foo: "hello" }); @@ -143,8 +135,7 @@ it('foos', async () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( ` it('foos', async () => { const Foo = (props: { foo: string }) =>
{props.foo}
; @@ -156,20 +147,24 @@ it('foos', async () => { }); test('saveInlineSnapshots() can handle flow and jsx without prettier', () => { - jest.spyOn(babelCore, 'loadPartialConfig').mockImplementation(() => ({ - options: { - plugins: ['flow', 'jsx'], - }, - })); - const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => - ` + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + ` const Foo = (props: { foo: string }) =>
{props.foo}
; const a = Foo({ foo: "hello" }); expect(a).toMatchInlineSnapshot(); `.trim() + '\n', ); + fs.writeFileSync( + path.join(dir, '.babelrc'), + JSON.stringify({ + presets: [ + require.resolve('@babel/preset-flow'), + require.resolve('@babel/preset-react'), + ], + }), + ); saveInlineSnapshots( [ @@ -182,8 +177,7 @@ expect(a).toMatchInlineSnapshot(); babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( ` const Foo = (props: { foo: string }) =>
{props.foo}
; const a = Foo({ foo: "hello" }); @@ -193,10 +187,10 @@ expect(a).toMatchInlineSnapshot(\`
hello
\`); }); test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { - const filename = path.join(__dirname, 'my.test.js'); - jest.spyOn(fs, 'readFileSync').mockImplementation( - () => - ` + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + ` const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); @@ -214,8 +208,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( `const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); @@ -227,10 +220,8 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); test.each([['babel'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => 'expect(1).toMatchInlineSnapshot(`2`);\n', - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot(`2`);\n'); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({parser}); @@ -249,18 +240,15 @@ test.each([['babel'], ['flow'], ['typescript']])( (prettier.resolveConfig.sync as jest.Mock).mock.results[0].value, ).toEqual({parser}); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect(1).toMatchInlineSnapshot(`1`);\n', ); }, ); test('saveInlineSnapshots() replaces existing template literal with property matchers', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => 'expect(1).toMatchInlineSnapshot({}, `2`);\n', - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot({}, `2`);\n'); saveInlineSnapshots( [ @@ -273,8 +261,7 @@ test('saveInlineSnapshots() replaces existing template literal with property mat babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect(1).toMatchInlineSnapshot({}, `1`);\n', ); }); @@ -282,10 +269,8 @@ test('saveInlineSnapshots() replaces existing template literal with property mat test.each([prettier, null])( 'saveInlineSnapshots() creates template literal with property matchers', prettierModule => { - const filename = path.join(__dirname, 'my.test.js'); - jest - .spyOn(fs, 'readFileSync') - .mockImplementation(() => 'expect(1).toMatchInlineSnapshot({});\n'); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot({});\n'); saveInlineSnapshots( [ @@ -298,18 +283,15 @@ test.each([prettier, null])( babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect(1).toMatchInlineSnapshot({}, `1`);\n', ); }, ); test('saveInlineSnapshots() throws if frame does not match', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => 'expect(1).toMatchInlineSnapshot();\n', - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot();\n'); const save = () => saveInlineSnapshots( @@ -327,10 +309,8 @@ test('saveInlineSnapshots() throws if frame does not match', () => { }); test('saveInlineSnapshots() throws if multiple calls to to the same location', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => 'expect(1).toMatchInlineSnapshot();\n', - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot();\n'); const frame = {column: 11, file: filename, line: 1} as Frame; const save = () => @@ -349,25 +329,20 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( }); test('saveInlineSnapshots() uses escaped backticks', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => 'expect("`").toMatchInlineSnapshot();\n', - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect("`").toMatchInlineSnapshot();\n'); const frame = {column: 13, file: filename, line: 1} as Frame; saveInlineSnapshots([{frame, snapshot: '`'}], prettier, babelTraverse); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect("`").toMatchInlineSnapshot(`\\``);\n', ); }); test('saveInlineSnapshots() works with non-literals in expect call', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, - ); + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, `expect({a: 'a'}).toMatchInlineSnapshot();\n`); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, singleQuote: true, @@ -384,17 +359,16 @@ test('saveInlineSnapshots() works with non-literals in expect call', () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "expect({a: 'a'}).toMatchInlineSnapshot(`{a: 'a'}`);\n", ); }); test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => - "it('is a test', () => {\n" + + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + '});\n', ); @@ -414,8 +388,7 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + ' Object {\n' + @@ -427,10 +400,10 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { }); test('saveInlineSnapshots() does not re-indent already indented snapshots', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => - "it('is a test', () => {\n" + + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + '});\n' + "it('is a another test', () => {\n" + @@ -457,8 +430,7 @@ test('saveInlineSnapshots() does not re-indent already indented snapshots', () = babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + ' Object {\n' + @@ -477,10 +449,10 @@ test('saveInlineSnapshots() does not re-indent already indented snapshots', () = }); test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => - "it('is a test', () => {\n" + + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + '});\n', ); @@ -501,8 +473,7 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + '\t\tObject {\n' + @@ -514,9 +485,10 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { }); test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => "it('is a test', () => expect({a: 'a'}).toMatchInlineSnapshot());\n", + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is a test', () => expect({a: 'a'}).toMatchInlineSnapshot());\n", ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -534,8 +506,7 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () =>\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + ' Object {\n' + @@ -546,10 +517,10 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { }); test('saveInlineSnapshots() does not indent empty lines', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => - "it('is a test', () => expect(`hello\n\nworld`).toMatchInlineSnapshot());\n", + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is a test', () => expect(`hello\n\nworld`).toMatchInlineSnapshot());\n", ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -567,8 +538,7 @@ test('saveInlineSnapshots() does not indent empty lines', () => { babelTraverse, ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () =>\n" + ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + ' hello\n' + diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 8730ce5ccc18..d5fcd2de386f 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -8,9 +8,8 @@ import * as fs from 'fs'; import * as path from 'path'; import semver = require('semver'); -import {loadPartialConfig} from '@babel/core'; +import {parseSync} from '@babel/core'; import generate from '@babel/generator'; -import {ParserOptions, parse} from '@babel/parser'; import type traverse from '@babel/traverse'; import { CallExpression, @@ -58,16 +57,10 @@ const saveSnapshotsForFile = ( ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); - const {options} = loadPartialConfig({filename: sourceFilePath}) || { - options: {}, - }; - if (!options.plugins) { - options.plugins = []; - } - // TypeScript projects may not have a babel config; make sure they can be parsed anyway. + const plugins = []; if (/\.tsx?$/.test(sourceFilePath)) { - options.plugins.push([ + plugins.push([ require.resolve('@babel/plugin-syntax-typescript'), {isTSX: /\.tsx$/.test(sourceFilePath)}, // unique name to make sure Babel does not complain about a possible duplicate plugin. @@ -79,7 +72,14 @@ const saveSnapshotsForFile = ( // by one to formatting parser. const snapshotMatcherNames: Array = []; - const ast = parse(sourceFile, options as ParserOptions); + const ast = parseSync(sourceFile, { + filename: sourceFilePath, + plugins, + root: path.dirname(sourceFilePath), + }); + if (!ast) { + throw new Error(`jest-snapshot: Failed to parse ${sourceFilePath}`); + } traverseAst(snapshots, ast, snapshotMatcherNames, babelTraverse); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. diff --git a/yarn.lock b/yarn.lock index a0031c30063d..91f1c99a3df6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -501,7 +501,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.7.2", "@babel/plugin-syntax-jsx@^7.8.3": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== @@ -557,7 +557,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-typescript@^7.7.2", "@babel/plugin-syntax-typescript@^7.8.3": +"@babel/plugin-syntax-typescript@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== @@ -646,7 +646,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0": +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== @@ -806,6 +806,16 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" +"@babel/plugin-transform-react-jsx@^7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" + integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.9.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.8.7": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" @@ -965,6 +975,14 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/preset-flow@^7.7.2": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" + integrity sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-flow-strip-types" "^7.9.0" + "@babel/preset-modules@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" @@ -988,6 +1006,18 @@ "@babel/plugin-transform-react-jsx-self" "^7.9.0" "@babel/plugin-transform-react-jsx-source" "^7.9.0" +"@babel/preset-react@^7.7.2": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" + integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.4" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" + "@babel/preset-typescript@*", "@babel/preset-typescript@^7.0.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" From 0d2ea9942a706fbcbb4e8e917322fa830a929e67 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sun, 12 Apr 2020 00:50:21 +0200 Subject: [PATCH 61/89] dedupe babel deps --- yarn.lock | 95 ++++++------------------------------------------------- 1 file changed, 10 insertions(+), 85 deletions(-) diff --git a/yarn.lock b/yarn.lock index 91f1c99a3df6..cd55922417dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,7 +39,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== @@ -77,17 +77,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.9.0": - version "7.9.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.3.tgz#7c8b2956c6f68b3ab732bd16305916fbba521d94" - integrity sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ== - dependencies: - "@babel/types" "^7.9.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/generator@^7.7.2": +"@babel/generator@^7.0.0", "@babel/generator@^7.7.2", "@babel/generator@^7.9.0": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== @@ -178,7 +168,7 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.7.0": +"@babel/helper-function-name@^7.8.3": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== @@ -187,15 +177,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.9.5" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -285,19 +266,14 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-split-export-declaration@^7.7.0", "@babel/helper-split-export-declaration@^7.8.3": +"@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: "@babel/types" "^7.8.3" -"@babel/helper-validator-identifier@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" - integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== - -"@babel/helper-validator-identifier@^7.9.5": +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== @@ -330,16 +306,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.3.tgz#043a5fc2ad8b7ea9facddc4e802a1f0f25da7255" integrity sha512-E6SpIDJZ0cZAKoCNk+qSDd0ChfTnpiJN9FfNf3RZ20dzwA2vL2oq5IX1XTVT+4vDmRlta2nGk5HGMMskJAR+4A== -"@babel/parser@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" - integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== - "@babel/plugin-external-helpers@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz#5a94164d9af393b2820a3cdc407e28ebf237de4b" @@ -796,17 +767,7 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.9.1": - version "7.9.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.1.tgz#d03af29396a6dc51bfa24eefd8005a9fd381152a" - integrity sha512-+xIZ6fPoix7h57CNO/ZeYADchg1tFyX9NDsnmNFFua8e1JNPln156mzS+8AQe1On2X2GLlANHJWHIXbMCqWDkQ== - dependencies: - "@babel/helper-builder-react-jsx" "^7.9.0" - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx@^7.9.4": +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.9.4": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== @@ -994,19 +955,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@*", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.7.4": - version "7.9.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.1.tgz#b346403c36d58c3bb544148272a0cefd9c28677a" - integrity sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.1" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" - -"@babel/preset-react@^7.7.2": +"@babel/preset-react@*", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.7.2", "@babel/preset-react@^7.7.4": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== @@ -1061,7 +1010,7 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== @@ -1076,31 +1025,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" - integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/types" "^7.7.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" - integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.7.2", "@babel/types@^7.9.5": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== From 355bde6bddb91cf22e02eeae17e0ae09c3e85950 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 12 Apr 2020 15:45:19 +0200 Subject: [PATCH 62/89] Update packages/jest-snapshot/src/inline_snapshots.ts Co-Authored-By: Simen Bekkhus --- packages/jest-snapshot/src/inline_snapshots.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index d5fcd2de386f..441fad61632c 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -62,7 +62,7 @@ const saveSnapshotsForFile = ( if (/\.tsx?$/.test(sourceFilePath)) { plugins.push([ require.resolve('@babel/plugin-syntax-typescript'), - {isTSX: /\.tsx$/.test(sourceFilePath)}, + {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', ]); From 26acdd0b4e8379eea12128cb88baec897e193799 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 12 Apr 2020 15:54:27 +0200 Subject: [PATCH 63/89] plugin-syntax-typescript dep --- packages/jest-snapshot/package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index f97b41be8558..9ff39c4c5b93 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -19,6 +19,7 @@ "dependencies": { "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/types": "^25.3.0", diff --git a/yarn.lock b/yarn.lock index cd55922417dc..5d9b6b4c6122 100644 --- a/yarn.lock +++ b/yarn.lock @@ -528,7 +528,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-typescript@^7.8.3": +"@babel/plugin-syntax-typescript@^7.7.2", "@babel/plugin-syntax-typescript@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== From 6f485593fddf8164b7cd811153b9db689d8d7468 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 12 Apr 2020 16:10:59 +0200 Subject: [PATCH 64/89] preset current node syntax and dep cleanup --- packages/jest-snapshot/package.json | 10 ++-------- packages/jest-snapshot/src/inline_snapshots.ts | 7 +++++-- yarn.lock | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 9ff39c4c5b93..acb7b9b10496 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -17,6 +17,7 @@ } }, "dependencies": { + "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", @@ -24,6 +25,7 @@ "@babel/types": "^7.0.0", "@jest/types": "^25.3.0", "@types/prettier": "^1.19.0", + "babel-preset-current-node-syntax": "^0.1.2", "chalk": "^3.0.0", "expect": "^25.3.0", "jest-diff": "^25.3.0", @@ -46,14 +48,6 @@ "jest-haste-map": "^25.3.0", "prettier": "^1.13.4" }, - "peerDependencies": { - "@babel/core": "7.x" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - } - }, "engines": { "node": ">= 8.3" }, diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 441fad61632c..1cea154e10e1 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -9,6 +9,7 @@ import * as fs from 'fs'; import * as path from 'path'; import semver = require('semver'); import {parseSync} from '@babel/core'; +import type {PluginItem} from '@babel/core'; import generate from '@babel/generator'; import type traverse from '@babel/traverse'; import { @@ -20,9 +21,9 @@ import { templateElement, templateLiteral, } from '@babel/types'; -import type {Frame} from 'jest-message-util'; import type {Config} from '@jest/types'; +import type {Frame} from 'jest-message-util'; import {escapeBacktickString} from './utils'; export type InlineSnapshot = { @@ -58,7 +59,8 @@ const saveSnapshotsForFile = ( const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); // TypeScript projects may not have a babel config; make sure they can be parsed anyway. - const plugins = []; + const presets = [require.resolve('babel-preset-current-node-syntax')]; + const plugins: Array = []; if (/\.tsx?$/.test(sourceFilePath)) { plugins.push([ require.resolve('@babel/plugin-syntax-typescript'), @@ -74,6 +76,7 @@ const saveSnapshotsForFile = ( const ast = parseSync(sourceFile, { filename: sourceFilePath, + presets, plugins, root: path.dirname(sourceFilePath), }); diff --git a/yarn.lock b/yarn.lock index 5d9b6b4c6122..e688496fa51c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -55,7 +55,7 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.3.4", "@babel/core@^7.7.4", "@babel/core@^7.7.5": +"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.3.4", "@babel/core@^7.7.2", "@babel/core@^7.7.4", "@babel/core@^7.7.5": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== From 784b3d759ed50bdeb500d173cd1405fd8386fb21 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 12 Apr 2020 16:23:55 +0200 Subject: [PATCH 65/89] babel core peer dep --- packages/jest-snapshot/package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index acb7b9b10496..9af818004476 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -17,7 +17,6 @@ } }, "dependencies": { - "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", @@ -39,6 +38,7 @@ "semver": "^6.3.0" }, "devDependencies": { + "@babel/core": "^7.7.2", "@babel/preset-flow": "^7.7.2", "@babel/preset-react": "^7.7.2", "@types/natural-compare": "^1.4.0", @@ -48,6 +48,9 @@ "jest-haste-map": "^25.3.0", "prettier": "^1.13.4" }, + "peerDependencies": { + "@babel/core": "^7.7.2" + }, "engines": { "node": ">= 8.3" }, From 81f12a4bbfcdfc747ef968149f4bf2938dc1eea5 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 12 Apr 2020 16:28:05 +0200 Subject: [PATCH 66/89] lint --- packages/jest-snapshot/src/inline_snapshots.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 1cea154e10e1..178f5f35a416 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -76,8 +76,8 @@ const saveSnapshotsForFile = ( const ast = parseSync(sourceFile, { filename: sourceFilePath, - presets, plugins, + presets, root: path.dirname(sourceFilePath), }); if (!ast) { From 3f89b254c0c4d2ba80341aa356234f343fa710b6 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Mon, 27 Apr 2020 23:45:05 +0200 Subject: [PATCH 67/89] basic jest-runtime require.resolve test --- .../__tests__/runtime_require_resolve.test.ts | 47 +++++++++++++++++++ .../src/__tests__/test_root/resolve_mapped.js | 10 ++++ .../src/__tests__/test_root/resolve_self.js | 10 ++++ 3 files changed, 67 insertions(+) create mode 100644 packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts create mode 100644 packages/jest-runtime/src/__tests__/test_root/resolve_mapped.js create mode 100644 packages/jest-runtime/src/__tests__/test_root/resolve_self.js diff --git a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts new file mode 100644 index 000000000000..97298fbfc326 --- /dev/null +++ b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts @@ -0,0 +1,47 @@ +/** + * 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. + * + */ + +'use strict'; + +import type {Config} from '@jest/types'; +import type Runtime from '..'; + +let createRuntime: ( + path: string, + config?: Config.InitialOptions, +) => Promise; + +describe('Runtime require.resolve', () => { + beforeEach(() => { + createRuntime = require('createRuntime'); + }); + + it('resolves a module path', async () => { + const runtime = await createRuntime(__filename); + const resolved = runtime.requireModule( + runtime.__mockRootPath, + './resolve_self.js', + ); + expect(resolved).toEqual(require.resolve('./test_root/resolve_self.js')); + }); + + it('resolves a module path with moduleNameMapper', async () => { + const runtime = await createRuntime(__filename, { + moduleNameMapper: { + '^testMapped/(.*)': '/mapped_dir/$1', + }, + }); + const resolved = runtime.requireModule( + runtime.__mockRootPath, + './resolve_mapped.js', + ); + expect(resolved).toEqual( + require.resolve('./test_root/mapped_dir/moduleInMapped.js'), + ); + }); +}); diff --git a/packages/jest-runtime/src/__tests__/test_root/resolve_mapped.js b/packages/jest-runtime/src/__tests__/test_root/resolve_mapped.js new file mode 100644 index 000000000000..377e18fcaa0f --- /dev/null +++ b/packages/jest-runtime/src/__tests__/test_root/resolve_mapped.js @@ -0,0 +1,10 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +module.exports = require.resolve('testMapped/moduleInMapped'); diff --git a/packages/jest-runtime/src/__tests__/test_root/resolve_self.js b/packages/jest-runtime/src/__tests__/test_root/resolve_self.js new file mode 100644 index 000000000000..63195879cf57 --- /dev/null +++ b/packages/jest-runtime/src/__tests__/test_root/resolve_self.js @@ -0,0 +1,10 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +module.exports = require.resolve('./resolve_self'); From eb5b9d318632e6635c508ea39aae411fd4dc33a4 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 00:37:27 +0200 Subject: [PATCH 68/89] implement require.resolve option outsideJestVm for internal modules only --- .../__tests__/runtime_require_resolve.test.ts | 21 ++++++++ .../test_root/resolve_and_require_outside.js | 14 +++++ packages/jest-runtime/src/index.ts | 52 +++++++++++++++++-- 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js diff --git a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts index 97298fbfc326..9e80bd4577c2 100644 --- a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts +++ b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts @@ -44,4 +44,25 @@ describe('Runtime require.resolve', () => { require.resolve('./test_root/mapped_dir/moduleInMapped.js'), ); }); + + describe('with the outsideJestVm option', () => { + it('forwards to the real Node require in an internal context', async () => { + const runtime = await createRuntime(__filename); + const module = runtime.requireInternalModule( + runtime.__mockRootPath, + './resolve_and_require_outside.js', + ); + expect(module).toBe(require('./test_root/create_require_module')); + }); + + it('ignores the option in an external context', async () => { + const runtime = await createRuntime(__filename); + const module = runtime.requireModule( + runtime.__mockRootPath, + './resolve_and_require_outside.js', + ); + expect(module.foo).toBe('foo'); + expect(module).not.toBe(require('./test_root/create_require_module')); + }); + }); }); diff --git a/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js b/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js new file mode 100644 index 000000000000..97b015d82312 --- /dev/null +++ b/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js @@ -0,0 +1,14 @@ +/** + * 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. + */ + +'use strict'; + +const path = require.resolve('./create_require_module', {outsideJestVm: true}); +if (typeof path !== 'string') { + throw new Error('require.resolve not spec-compliant: must return a string'); +} +module.exports = require(path); diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index ecb2d25f3ef8..3ec15b550018 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -81,7 +81,11 @@ const defaultTransformOptions: InternalModuleOptions = { type InitialModule = Partial & Pick; type ModuleRegistry = Map; -type ResolveOptions = Parameters[1]; + +type ResolveOptions = Parameters[1] & { + outsideJestVm?: true; +}; +const OUTSIDE_JEST_VM_PROTOCOL = 'outside-jest-vm:'; type BooleanObject = Record; type CacheFS = {[path: string]: string}; @@ -534,6 +538,13 @@ class Runtime { } requireInternalModule(from: Config.Path, to?: string): T { + if (to) { + const outsideJestVmPath = this._decodePossibleOutsideJestVmPath(to); + if (outsideJestVmPath) { + return require(outsideJestVmPath); + } + } + return this.requireModule(from, to, { isInternalModule: true, supportsDynamicImport: false, @@ -833,6 +844,31 @@ class Runtime { this._moduleMocker.clearAllMocks(); } + // fileUrl.protocol cannot be set to a non-standard protocol, so we use string manipulation + private _createOutsideJestVmPath(path: string) { + return pathToFileURL(path) + .toString() + .replace(/^file:/, OUTSIDE_JEST_VM_PROTOCOL); + } + private _decodePossibleOutsideJestVmPath( + maybeUrl: string, + ): string | undefined { + let url: URL; + try { + url = new URL(maybeUrl); + } catch { + return undefined; + } + if (url.protocol !== OUTSIDE_JEST_VM_PROTOCOL) { + return undefined; + } + return fileURLToPath( + url + .toString() + .replace(new RegExp('^' + OUTSIDE_JEST_VM_PROTOCOL), 'file:'), + ); + } + private _resolveModule(from: Config.Path, to?: string) { return to ? this._resolver.resolveModule(from, to) : from; } @@ -1269,9 +1305,17 @@ class Runtime { from: InitialModule, options?: InternalModuleOptions, ): LocalModuleRequire { - // TODO: somehow avoid having to type the arguments - they should come from `NodeRequire/LocalModuleRequire.resolve` - const resolve = (moduleName: string, options: ResolveOptions) => - this._requireResolve(from.filename, moduleName, options); + const resolve = (moduleName: string, resolveOptions?: ResolveOptions) => { + const resolved = this._requireResolve( + from.filename, + moduleName, + resolveOptions, + ); + if (resolveOptions?.outsideJestVm && options?.isInternalModule) { + return this._createOutsideJestVmPath(resolved); + } + return resolved; + }; resolve.paths = (moduleName: string) => this._requireResolvePaths(from.filename, moduleName); From e141acebddb62195e121d3cfe67624f555d042fd Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 14:28:15 +0200 Subject: [PATCH 69/89] review improvements --- .../__tests__/runtime_require_resolve.test.ts | 4 +-- packages/jest-runtime/src/helpers.ts | 20 +++++++++++ packages/jest-runtime/src/index.ts | 36 ++++--------------- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts index 9e80bd4577c2..ce8a48ee7c12 100644 --- a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts +++ b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts @@ -6,8 +6,6 @@ * */ -'use strict'; - import type {Config} from '@jest/types'; import type Runtime from '..'; @@ -57,7 +55,7 @@ describe('Runtime require.resolve', () => { it('ignores the option in an external context', async () => { const runtime = await createRuntime(__filename); - const module = runtime.requireModule( + const module = runtime.requireModule( runtime.__mockRootPath, './resolve_and_require_outside.js', ); diff --git a/packages/jest-runtime/src/helpers.ts b/packages/jest-runtime/src/helpers.ts index fb42e2b1e4ca..efda283cd1a3 100644 --- a/packages/jest-runtime/src/helpers.ts +++ b/packages/jest-runtime/src/helpers.ts @@ -10,6 +10,26 @@ import slash = require('slash'); import glob = require('glob'); import type {Config} from '@jest/types'; +const OUTSIDE_JEST_VM_PROTOCOL = 'jest-main:'; +// String manipulation is easier here, fileURLToPath is only in newer Nodes, +// plus setting non-standard protocols on URL objects is difficult. +export const createOutsideJestVmPath = (path: string) => { + return `${OUTSIDE_JEST_VM_PROTOCOL}//` + encodeURIComponent(path); +}; +export const decodePossibleOutsideJestVmPath = ( + outsideJestVmPath: string, +): string | undefined => { + if (outsideJestVmPath.startsWith(OUTSIDE_JEST_VM_PROTOCOL)) { + return decodeURIComponent( + outsideJestVmPath.replace( + new RegExp('^' + OUTSIDE_JEST_VM_PROTOCOL + '//'), + '', + ), + ); + } + return undefined; +}; + export const findSiblingsWithFileExtension = ( moduleFileExtensions: Config.ProjectConfig['moduleFileExtensions'], from: Config.Path, diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 3ec15b550018..c9ba7598a485 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -45,7 +45,11 @@ import {CoverageInstrumenter, V8Coverage} from 'collect-v8-coverage'; import * as fs from 'graceful-fs'; import {run as cliRun} from './cli'; import {options as cliOptions} from './cli/args'; -import {findSiblingsWithFileExtension} from './helpers'; +import { + findSiblingsWithFileExtension, + decodePossibleOutsideJestVmPath, + createOutsideJestVmPath, +} from './helpers'; import type {Context as JestContext} from './types'; import jestMock = require('jest-mock'); import HasteMap = require('jest-haste-map'); @@ -85,7 +89,6 @@ type ModuleRegistry = Map; type ResolveOptions = Parameters[1] & { outsideJestVm?: true; }; -const OUTSIDE_JEST_VM_PROTOCOL = 'outside-jest-vm:'; type BooleanObject = Record; type CacheFS = {[path: string]: string}; @@ -539,7 +542,7 @@ class Runtime { requireInternalModule(from: Config.Path, to?: string): T { if (to) { - const outsideJestVmPath = this._decodePossibleOutsideJestVmPath(to); + const outsideJestVmPath = decodePossibleOutsideJestVmPath(to); if (outsideJestVmPath) { return require(outsideJestVmPath); } @@ -844,31 +847,6 @@ class Runtime { this._moduleMocker.clearAllMocks(); } - // fileUrl.protocol cannot be set to a non-standard protocol, so we use string manipulation - private _createOutsideJestVmPath(path: string) { - return pathToFileURL(path) - .toString() - .replace(/^file:/, OUTSIDE_JEST_VM_PROTOCOL); - } - private _decodePossibleOutsideJestVmPath( - maybeUrl: string, - ): string | undefined { - let url: URL; - try { - url = new URL(maybeUrl); - } catch { - return undefined; - } - if (url.protocol !== OUTSIDE_JEST_VM_PROTOCOL) { - return undefined; - } - return fileURLToPath( - url - .toString() - .replace(new RegExp('^' + OUTSIDE_JEST_VM_PROTOCOL), 'file:'), - ); - } - private _resolveModule(from: Config.Path, to?: string) { return to ? this._resolver.resolveModule(from, to) : from; } @@ -1312,7 +1290,7 @@ class Runtime { resolveOptions, ); if (resolveOptions?.outsideJestVm && options?.isInternalModule) { - return this._createOutsideJestVmPath(resolved); + return createOutsideJestVmPath(resolved); } return resolved; }; From faed0420950121b65cdc884926f83596bf8a34f6 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 14:30:39 +0200 Subject: [PATCH 70/89] lint --- packages/jest-runtime/src/helpers.ts | 5 ++--- packages/jest-runtime/src/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/jest-runtime/src/helpers.ts b/packages/jest-runtime/src/helpers.ts index efda283cd1a3..4a7d28aa7f27 100644 --- a/packages/jest-runtime/src/helpers.ts +++ b/packages/jest-runtime/src/helpers.ts @@ -13,9 +13,8 @@ import type {Config} from '@jest/types'; const OUTSIDE_JEST_VM_PROTOCOL = 'jest-main:'; // String manipulation is easier here, fileURLToPath is only in newer Nodes, // plus setting non-standard protocols on URL objects is difficult. -export const createOutsideJestVmPath = (path: string) => { - return `${OUTSIDE_JEST_VM_PROTOCOL}//` + encodeURIComponent(path); -}; +export const createOutsideJestVmPath = (path: string): string => + OUTSIDE_JEST_VM_PROTOCOL + '//' + encodeURIComponent(path); export const decodePossibleOutsideJestVmPath = ( outsideJestVmPath: string, ): string | undefined => { diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index c9ba7598a485..b2cefbfeb2ec 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -46,9 +46,9 @@ import * as fs from 'graceful-fs'; import {run as cliRun} from './cli'; import {options as cliOptions} from './cli/args'; import { - findSiblingsWithFileExtension, - decodePossibleOutsideJestVmPath, createOutsideJestVmPath, + decodePossibleOutsideJestVmPath, + findSiblingsWithFileExtension, } from './helpers'; import type {Context as JestContext} from './types'; import jestMock = require('jest-mock'); From fc086ccae51119e25ddfdeae6478af6564ba6c3f Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 16:08:48 +0200 Subject: [PATCH 71/89] WIP require prettier/Babel from outsideJestVm --- .../legacy-code-todo-rewrite/jestAdapter.ts | 7 +-- .../jestAdapterInit.ts | 9 +-- .../jest-jasmine2/src/setup_jest_globals.ts | 5 +- packages/jest-snapshot/src/State.ts | 13 ++--- .../src/__tests__/inline_snapshots.test.ts | 52 ++++++----------- .../jest-snapshot/src/inline_snapshots.ts | 58 ++++++++++--------- 6 files changed, 61 insertions(+), 83 deletions(-) diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts index a7fdf68cb0d9..a41fa5f152fa 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts @@ -33,18 +33,15 @@ const jestAdapter = async ( .requireInternalModule(EXPECT_INITIALIZER) .default({expand: globalConfig.expand}); - const getPrettier = () => - config.prettierPath ? require(config.prettierPath) : null; - const getBabelTraverse = () => require('@babel/traverse').default; + const {prettierPath} = config; const {globals, snapshotState} = await initialize({ config, environment, - getBabelTraverse, - getPrettier, globalConfig, localRequire: runtime.requireModule.bind(runtime), parentProcess: process, + prettierPath, testPath, }); diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts index eb0595455c4e..1f9fceb72e2b 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts @@ -39,21 +39,19 @@ type Process = NodeJS.Process; export const initialize = async ({ config, environment, - getPrettier, - getBabelTraverse, globalConfig, localRequire, parentProcess, + prettierPath, testPath, }: { config: Config.ProjectConfig; environment: JestEnvironment; - getPrettier: () => null | any; - getBabelTraverse: () => Function; globalConfig: Config.GlobalConfig; localRequire: (path: Config.Path) => any; testPath: Config.Path; parentProcess: Process; + prettierPath: Config.Path; }) => { if (globalConfig.testTimeout) { getRunnerState().testTimeout = globalConfig.testTimeout; @@ -133,8 +131,7 @@ export const initialize = async ({ const snapshotPath = snapshotResolver.resolveSnapshotPath(testPath); const snapshotState = new SnapshotState(snapshotPath, { expand, - getBabelTraverse, - getPrettier, + prettierPath, updateSnapshot, }); setState({snapshotState, testPath}); diff --git a/packages/jest-jasmine2/src/setup_jest_globals.ts b/packages/jest-jasmine2/src/setup_jest_globals.ts index 492ec9e3aef5..380cc7b2460c 100644 --- a/packages/jest-jasmine2/src/setup_jest_globals.ts +++ b/packages/jest-jasmine2/src/setup_jest_globals.ts @@ -106,13 +106,12 @@ export default ({ patchJasmine(); const {expand, updateSnapshot} = globalConfig; + const {prettierPath} = config; const snapshotResolver = buildSnapshotResolver(config); const snapshotPath = snapshotResolver.resolveSnapshotPath(testPath); const snapshotState = new SnapshotState(snapshotPath, { expand, - getBabelTraverse: () => require('@babel/traverse').default, - getPrettier: () => - config.prettierPath ? require(config.prettierPath) : null, + prettierPath, updateSnapshot, }); setState({snapshotState, testPath}); diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index 8e7824bc15c4..2d955e90a040 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -24,8 +24,7 @@ import type {SnapshotData} from './types'; export type SnapshotStateOptions = { updateSnapshot: Config.SnapshotUpdateState; - getPrettier: () => null | typeof import('prettier'); - getBabelTraverse: () => Function; + prettierPath: Config.Path; expand?: boolean; }; @@ -62,8 +61,7 @@ export default class SnapshotState { private _snapshotPath: Config.Path; private _inlineSnapshots: Array; private _uncheckedKeys: Set; - private _getBabelTraverse: () => Function; - private _getPrettier: () => null | typeof import('prettier'); + private _prettierPath: Config.Path; added: number; expand: boolean; @@ -80,8 +78,7 @@ export default class SnapshotState { this._initialData = data; this._snapshotData = data; this._dirty = dirty; - this._getBabelTraverse = options.getBabelTraverse; - this._getPrettier = options.getPrettier; + this._prettierPath = options.prettierPath; this._inlineSnapshots = []; this._uncheckedKeys = new Set(Object.keys(this._snapshotData)); this._counters = new Map(); @@ -154,9 +151,7 @@ export default class SnapshotState { saveSnapshotFile(this._snapshotData, this._snapshotPath); } if (hasInlineSnapshots) { - const prettier = this._getPrettier(); // Load lazily - const babelTraverse = this._getBabelTraverse(); // Load lazily - saveInlineSnapshots(this._inlineSnapshots, prettier, babelTraverse); + saveInlineSnapshots(this._inlineSnapshots, this._prettierPath); } status.saved = true; } else if (!hasExternalSnapshots && fs.existsSync(this._snapshotPath)) { diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts index fddf615f1b09..90836dc6a2bb 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.ts @@ -5,14 +5,15 @@ * LICENSE file in the root directory of this source tree. */ -jest.mock('prettier'); +// TODO this is annoying +// (but a general require(require.resolve()) problem) +jest.mock(require.resolve('prettier'), () => require('../__mocks__/prettier')); import * as fs from 'fs'; import {tmpdir} from 'os'; import * as path from 'path'; -import prettier from 'prettier'; -import babelTraverse from '@babel/traverse'; import {Frame} from 'jest-message-util'; +const prettier = require(require.resolve('prettier')); let dir; import {saveInlineSnapshots} from '../inline_snapshots'; @@ -36,8 +37,7 @@ test('saveInlineSnapshots() replaces empty function call with a template literal snapshot: `1`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -64,7 +64,6 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); snapshot: `[1, 2]`, })), null, - babelTraverse, ); expect(fs.readFileSync(filename, 'utf8')).toBe( @@ -97,7 +96,6 @@ expect(a).toMatchInlineSnapshot(); }, ], null, - babelTraverse, ); expect(fs.readFileSync(filename, 'utf8')).toBe( @@ -132,7 +130,6 @@ it('foos', async () => { }, ], null, - babelTraverse, ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -174,7 +171,6 @@ expect(a).toMatchInlineSnapshot(); }, ], null, - babelTraverse, ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -204,8 +200,7 @@ expect(a).toMatchInlineSnapshot(\`[1, 2]\`); frame: {column: 11, file: filename, line} as Frame, snapshot: `[1, 2]`, })), - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -232,8 +227,7 @@ test.each([['babel'], ['flow'], ['typescript']])( snapshot: `1`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect( @@ -257,8 +251,7 @@ test('saveInlineSnapshots() replaces existing template literal with property mat snapshot: `1`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -266,7 +259,7 @@ test('saveInlineSnapshots() replaces existing template literal with property mat ); }); -test.each([prettier, null])( +test.each(['prettier', null])( 'saveInlineSnapshots() creates template literal with property matchers', prettierModule => { const filename = path.join(dir, 'my.test.js'); @@ -280,7 +273,6 @@ test.each([prettier, null])( }, ], prettierModule, - babelTraverse, ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -301,8 +293,7 @@ test('saveInlineSnapshots() throws if frame does not match', () => { snapshot: `1`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(save).toThrowError(/Couldn't locate all inline snapshots./); @@ -319,8 +310,7 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( {frame, snapshot: `1`}, {frame, snapshot: `2`}, ], - prettier, - babelTraverse, + 'prettier', ); expect(save).toThrowError( @@ -333,7 +323,7 @@ test('saveInlineSnapshots() uses escaped backticks', () => { fs.writeFileSync(filename, 'expect("`").toMatchInlineSnapshot();\n'); const frame = {column: 13, file: filename, line: 1} as Frame; - saveInlineSnapshots([{frame, snapshot: '`'}], prettier, babelTraverse); + saveInlineSnapshots([{frame, snapshot: '`'}], 'prettier'); expect(fs.readFileSync(filename, 'utf-8')).toBe( 'expect("`").toMatchInlineSnapshot(`\\``);\n', @@ -355,8 +345,7 @@ test('saveInlineSnapshots() works with non-literals in expect call', () => { snapshot: `{a: 'a'}`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -384,8 +373,7 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -426,8 +414,7 @@ test('saveInlineSnapshots() does not re-indent already indented snapshots', () = snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -469,8 +456,7 @@ test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -502,8 +488,7 @@ test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( @@ -534,8 +519,7 @@ test('saveInlineSnapshots() does not indent empty lines', () => { snapshot: `\nhello\n\nworld\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); expect(fs.readFileSync(filename, 'utf-8')).toBe( diff --git a/packages/jest-snapshot/src/inline_snapshots.ts b/packages/jest-snapshot/src/inline_snapshots.ts index 178f5f35a416..1ec8a398dbe3 100644 --- a/packages/jest-snapshot/src/inline_snapshots.ts +++ b/packages/jest-snapshot/src/inline_snapshots.ts @@ -8,36 +8,52 @@ import * as fs from 'fs'; import * as path from 'path'; import semver = require('semver'); -import {parseSync} from '@babel/core'; import type {PluginItem} from '@babel/core'; -import generate from '@babel/generator'; import type traverse from '@babel/traverse'; -import { - CallExpression, - Expression, - File, - Program, - file, - templateElement, - templateLiteral, -} from '@babel/types'; +import type {CallExpression, Expression, File, Program} from '@babel/types'; import type {Config} from '@jest/types'; import type {Frame} from 'jest-message-util'; import {escapeBacktickString} from './utils'; +// TODO ignore this mess - with a Babel plugin, these will be MUCH, MUCH nicer for TS +type BabelTraverse = typeof traverse; +const babelTraverse: BabelTraverse = require(require.resolve( + '@babel/traverse', + { + outsideJestVm: true, + } as any, +)).default; +const generate: typeof import('@babel/generator')['default'] = require(require.resolve( + '@babel/generator', + {outsideJestVm: true} as any, +)).default; +const { + file, + templateElement, + templateLiteral, +} = require(require.resolve('@babel/types', {outsideJestVm: true} as any)); +const {parseSync} = require(require.resolve('@babel/core', { + outsideJestVm: true, +} as any)) as typeof import('@babel/core'); + export type InlineSnapshot = { snapshot: string; frame: Frame; node?: Expression; }; -type BabelTraverse = typeof traverse; export function saveInlineSnapshots( snapshots: Array, - prettier: typeof import('prettier') | null, - babelTraverse: Function, + prettierPath: Config.Path, ): void { + // TODO same as above + const prettier = prettierPath + ? (require(require.resolve(prettierPath, { + outsideJestVm: true, + } as any)) as typeof import('prettier')) + : null; + const snapshotsByFile = groupSnapshotsByFile(snapshots); for (const sourceFilePath of Object.keys(snapshotsByFile)) { @@ -45,7 +61,6 @@ export function saveInlineSnapshots( snapshotsByFile[sourceFilePath], sourceFilePath, prettier && semver.gte(prettier.version, '1.5.0') ? prettier : null, - babelTraverse as BabelTraverse, ); } } @@ -54,7 +69,6 @@ const saveSnapshotsForFile = ( snapshots: Array, sourceFilePath: Config.Path, prettier: any, - babelTraverse: BabelTraverse, ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); @@ -83,7 +97,7 @@ const saveSnapshotsForFile = ( if (!ast) { throw new Error(`jest-snapshot: Failed to parse ${sourceFilePath}`); } - traverseAst(snapshots, ast, snapshotMatcherNames, babelTraverse); + traverseAst(snapshots, ast, snapshotMatcherNames); // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. const sourceFileWithSnapshots = snapshots.reduceRight( @@ -110,7 +124,6 @@ const saveSnapshotsForFile = ( sourceFilePath, sourceFileWithSnapshots, snapshotMatcherNames, - babelTraverse, ) : sourceFileWithSnapshots; @@ -182,7 +195,6 @@ const traverseAst = ( snapshots: Array, fileOrProgram: File | Program, snapshotMatcherNames: Array, - babelTraverse: BabelTraverse, ) => { const ast = resolveAst(fileOrProgram); @@ -244,7 +256,6 @@ const runPrettier = ( sourceFilePath: string, sourceFileWithSnapshots: string, snapshotMatcherNames: Array, - babelTraverse: BabelTraverse, ) => { // Resolve project configuration. // For older versions of Prettier, do not load configuration. @@ -274,11 +285,7 @@ const runPrettier = ( newSourceFile = prettier.format(newSourceFile, { ...config, filepath: sourceFilePath, - parser: createFormattingParser( - snapshotMatcherNames, - inferredParser, - babelTraverse, - ), + parser: createFormattingParser(snapshotMatcherNames, inferredParser), }); } @@ -289,7 +296,6 @@ const runPrettier = ( const createFormattingParser = ( snapshotMatcherNames: Array, inferredParser: string, - babelTraverse: BabelTraverse, ) => ( text: string, parsers: Record any>, From a2a05bdd34180573103b291542e97a60980659e4 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 18:46:46 +0200 Subject: [PATCH 72/89] use Symbol key for resolve option This means other tools (e.g. Yarn PnP) should ignore the unknown option --- .../src/__tests__/runtime_require_resolve.test.ts | 2 +- .../__tests__/test_root/resolve_and_require_outside.js | 4 +++- packages/jest-runtime/src/index.ts | 10 ++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts index ce8a48ee7c12..c46c92dba4a7 100644 --- a/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts +++ b/packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts @@ -43,7 +43,7 @@ describe('Runtime require.resolve', () => { ); }); - describe('with the outsideJestVm option', () => { + describe('with the OUTSIDE_JEST_VM_RESOLVE_OPTION', () => { it('forwards to the real Node require in an internal context', async () => { const runtime = await createRuntime(__filename); const module = runtime.requireInternalModule( diff --git a/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js b/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js index 97b015d82312..52aa44551e02 100644 --- a/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js +++ b/packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js @@ -7,7 +7,9 @@ 'use strict'; -const path = require.resolve('./create_require_module', {outsideJestVm: true}); +const path = require.resolve('./create_require_module', { + [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, +}); if (typeof path !== 'string') { throw new Error('require.resolve not spec-compliant: must return a string'); } diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index b2cefbfeb2ec..1215f2538091 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -86,8 +86,11 @@ type InitialModule = Partial & Pick; type ModuleRegistry = Map; +const OUTSIDE_JEST_VM_RESOLVE_OPTION = Symbol.for( + 'OUTSIDE_JEST_VM_RESOLVE_OPTION', +); type ResolveOptions = Parameters[1] & { - outsideJestVm?: true; + [OUTSIDE_JEST_VM_RESOLVE_OPTION]?: true; }; type BooleanObject = Record; @@ -1289,7 +1292,10 @@ class Runtime { moduleName, resolveOptions, ); - if (resolveOptions?.outsideJestVm && options?.isInternalModule) { + if ( + resolveOptions?.[OUTSIDE_JEST_VM_RESOLVE_OPTION] && + options?.isInternalModule + ) { return createOutsideJestVmPath(resolved); } return resolved; From 7efccacb9b8aa225d74c04deb316863fead6b1d7 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 28 Apr 2020 20:15:16 +0200 Subject: [PATCH 73/89] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91f04725fe98..33054d96bbd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ - `[@jest/globals]` New package so Jest's globals can be explicitly imported ([#9801](https://github.com/facebook/jest/pull/9801)) - `[jest-core]` Show coverage of sources related to tests in changed files ([#9769](https://github.com/facebook/jest/pull/9769)) - `[jest-runtime]` Populate `require.cache` ([#9841](https://github.com/facebook/jest/pull/9841)) -- `[jest-snapshot]`: Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) +- `[jest-snapshot]`: [**BREAKING**] Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) ### Fixes From 06a7fb0e6ac8e7998a286e22d2e591222238bc5f Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 8 Nov 2020 20:46:28 +0000 Subject: [PATCH 74/89] changelog merge --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e1338a2186b..e582b9ff33db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - `[jest-config]` [**BREAKING**] Default to Node testing environment instead of browser (JSDOM) ([#9874](https://github.com/facebook/jest/pull/9874)) - `[jest-runner]` [**BREAKING**] set exit code to 1 if test logs after teardown ([#10728](https://github.com/facebook/jest/pull/10728)) +- `[jest-snapshot]`: [**BREAKING**] Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) ### Fixes @@ -332,7 +333,6 @@ - `[@jest/globals]` New package so Jest's globals can be explicitly imported ([#9801](https://github.com/facebook/jest/pull/9801)) - `[jest-core]` Show coverage of sources related to tests in changed files ([#9769](https://github.com/facebook/jest/pull/9769)) - `[jest-runtime]` Populate `require.cache` ([#9841](https://github.com/facebook/jest/pull/9841)) -- `[jest-snapshot]`: [**BREAKING**] Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792)) ### Fixes From 478d8f6d58163215b8ba526fb2271612d5543242 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 8 Nov 2020 20:48:46 +0000 Subject: [PATCH 75/89] merge fixup --- packages/jest-runtime/src/index.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 1c9d2577c03c..65376a7c7403 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -615,11 +615,7 @@ export default class Runtime { } } -<<<<<<< HEAD - return this.requireModule(from, to, { -======= return this.requireModule(from, to, { ->>>>>>> master isInternalModule: true, supportsDynamicImport: esmIsAvailable, supportsExportNamespaceFrom: false, @@ -1398,11 +1394,7 @@ export default class Runtime { private _createRequireImplementation( from: InitialModule, options?: InternalModuleOptions, -<<<<<<< HEAD - ): LocalModuleRequire { -======= ): NodeRequire { ->>>>>>> master const resolve = (moduleName: string, resolveOptions?: ResolveOptions) => { const resolved = this._requireResolve( from.filename, From b3e2f73e421f4eff68ddd78301f233a72158e99e Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 8 Nov 2020 20:50:44 +0000 Subject: [PATCH 76/89] yarn.lock merge --- yarn.lock | 7205 +---------------------------------------------------- 1 file changed, 123 insertions(+), 7082 deletions(-) diff --git a/yarn.lock b/yarn.lock index c21ff78b5bc2..bf8c8812487a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,7081 +1,3 @@ -<<<<<<< HEAD -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@angular/common@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.1.1.tgz#29828cbb5e1f3f81cd6aa9468e9e1d4f02c1c7e8" - integrity sha512-bS13veMs7//YqYjYJ+JI78ylaCyVcdFKZKikd5SZa6+r6fajcyvLnSKqrKypG3O1BeJ8vOG/Pq54P5gWhbR6eA== - -"@angular/compiler@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.1.tgz#c2964849cc42d483ef2a5dd06d8e91d69a8ebe12" - integrity sha512-u1IP6IzUgK6lIzrG1cxp96umXgtThyhuFn/KPoyVt7wPxZ6vVR0ZxjM7zycEcrMGzk0nf0nyOKaksJk9sTXTbg== - -"@angular/core@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.1.tgz#0a4bb3f81e4103d141556dd5c7272f05bc78cfaa" - integrity sha512-6lDlUlePafr/392hOvvTZZl6xPHT50U6658sHUAVIr0Un4mJ2MHNHKZtO45bpn3hM4gjFcYRQ7Rpd0umW74iTA== - -"@angular/forms@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-9.1.1.tgz#3090829dd2989207fd9a4dbc5b44b3ff9b2fe948" - integrity sha512-NX+LuK8JFisiq3uHCOK6YoN/yIb2R9Ye5mwiOPkuZA3lZLKCnUXqCHZbM8VHy/WdjIxxeUaFMJc38yV8RVoabg== - -"@angular/platform-browser-dynamic@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.1.tgz#aaaa31a8ddf6e810755644180703118c792b8ca0" - integrity sha512-kEox5UOwkRLjGKXLh5o5SYopoAylpKgrXtRrKRKTCMmZTpYSe1bLlXMjpwMAMZ9ZFSTvWp9iX94aT5bJDpLrRQ== - -"@angular/platform-browser@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.1.1.tgz#bb5a98a3a33a307436684c4c7e2c448c786ae466" - integrity sha512-tjALKhdAWPErj0euIIdvx/31AHEZ7is7ADsMu+nYn2NY2gcPUuiqq3RCUJVxBYJ2Cclq1nlF0i2rEDKh7TrBKg== - -"@babel/code-frame@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" - integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== - dependencies: - browserslist "^4.9.1" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@*", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.3.4", "@babel/core@^7.7.2", "@babel/core@^7.7.4", "@babel/core@^7.7.5": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.5.0", "@babel/generator@^7.7.2", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" - integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== - dependencies: - "@babel/types" "^7.9.5" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-builder-react-jsx-experimental@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" - integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/types" "^7.9.5" - -"@babel/helper-builder-react-jsx@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" - integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/types" "^7.9.0" - -"@babel/helper-compilation-targets@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" - integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== - dependencies: - "@babel/compat-data" "^7.8.6" - browserslist "^4.9.1" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz#79753d44017806b481017f24b02fd4113c7106ea" - integrity sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA== - dependencies: - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== - dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" - integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== - -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" - integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - -"@babel/highlight@^7.0.0", "@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== - -"@babel/plugin-external-helpers@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz#5a94164d9af393b2820a3cdc407e28ebf237de4b" - integrity sha512-mx0WXDDiIl5DwzMtzWGRSPugXi9BxROS05GQrhLNbEamhBiicgn994ibwkyiBH+6png7bm/yA7AUsvHyCXi4Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@*", "@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.3.4", "@babel/plugin-proposal-class-properties@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-decorators@*": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" - integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-decorators" "^7.8.3" - -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" - integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-export-default-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" - integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.9.5" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" - integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-decorators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" - integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" - integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0", "@babel/plugin-syntax-flow@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" - integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" - integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-typescript@^7.7.2", "@babel/plugin-syntax-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" - integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" - integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" - integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-modules-amd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" - integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" - integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" - integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.8.3.tgz#dc3b8dd50ef03837868a37b7df791f64f288538e" - integrity sha512-i3LuN8tPDqUCRFu3dkzF2r1Nx0jp4scxtm7JxtIqI9he9Vk20YD+/zshdzR9JLsoBMlJlNR82a62vQExNEVx/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" - integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" - integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== - dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" - integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" - integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.9.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" - integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== - dependencies: - "@babel/helper-builder-react-jsx" "^7.9.0" - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-runtime@^7.0.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" - integrity sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - -"@babel/plugin-transform-strict-mode@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-strict-mode/-/plugin-transform-strict-mode-7.8.3.tgz#62a98e601eb18179b283895b2df7fbb1b951efbf" - integrity sha512-CbUigaCDY8v5FzmosamC7wmPDayHVpk5xOj9erH2k46heHWAkreKqVVkiBMQLIGt+z6SI290fTGYpgDIpWz0Wg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typescript@^7.5.0", "@babel/plugin-transform-typescript@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359" - integrity sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-typescript" "^7.8.3" - -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/polyfill@^7.7.0": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f" - integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/preset-env@*", "@babel/preset-env@^7.1.0", "@babel/preset-env@^7.7.4": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.5.tgz#8ddc76039bc45b774b19e2fc548f6807d8a8919f" - integrity sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ== - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.5" - browserslist "^4.9.1" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-flow@^7.7.2": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" - integrity sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-flow-strip-types" "^7.9.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@*", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.7.2", "@babel/preset-react@^7.7.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" - integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.4" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" - -"@babel/preset-typescript@*", "@babel/preset-typescript@^7.0.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" - integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.9.0" - -"@babel/register@^7.0.0", "@babel/register@^7.7.4": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" - integrity sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/runtime-corejs3@^7.8.3": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz#26fe4aa77e9f1ecef9b776559bbb8e84d34284b7" - integrity sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.0.0", "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" - integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.5" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" - integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== - dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.3": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" - integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - -"@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== - dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@lerna/add@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" - integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" - integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" - integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" - integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.2" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" - integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.18.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" - integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" - integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - -"@lerna/diff@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" - integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" - integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" - dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" - integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== - dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^3.6.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" - integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/info@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" - integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" - -"@lerna/init@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" - integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" - -"@lerna/link@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" - integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" - integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" - -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== - dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== - dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npmlog "^4.1.2" - upath "^1.2.0" - -"@lerna/project@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" - integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" - -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" - integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.20.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" - -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== - dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== - dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" - -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== - dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" - integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" - integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/conventional-commits" "3.18.5" - "@lerna/github-client" "3.16.5" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - load-json-file "^5.3.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== - dependencies: - "@octokit/types" "^2.0.0" - -"@octokit/endpoint@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.0.tgz#4c7acd79ab72df78732a7d63b09be53ec5a2230b" - integrity sha512-3nx+MEYoZeD0uJ+7F/gvELLvQJzLXhep2Az0bBSXagbApDvDW0LWwpnAIY/hb0Jwe17A0fJdz0O12dPh05cj7A== - dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" - -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.0.tgz#94ca7293373654400fbb2995f377f9473e00834b" - integrity sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.3.4" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.4.tgz#fbc950bf785d59da3b0399fc6d042c8cf52e2905" - integrity sha512-qyj8G8BxQyXjt9Xu6NvfvOr1E0l35lsXtwm3SopsYg/JWXjlsnwqLc8rsD2OLguEL/JjLfBvrXr4az7z8Lch2A== - dependencies: - "@octokit/endpoint" "^6.0.0" - "@octokit/request-error" "^2.0.0" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^5.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.8.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.8.1.tgz#935ba46c3abb745e913b1110b87f1ca75f2a3792" - integrity sha512-1fzZcYTvPkrJsS9MX7oTMun447Q/tJo5XOtXQsKqmbTbwQV1f+R58pDmjDbzeFbQ7KzMJaDN7Sq4bCh/WHmgLg== - dependencies: - "@types/node" ">= 8" - -"@react-native-community/cli-debugger-ui@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.7.0.tgz#4a8689f56b99378b24bbbf0ff6a89869d667f013" - integrity sha512-Z/xJ08Wz3J2fKDPrwxtQ44XSHnWsF6dnT0H2AANw63bWjnrR0E3sh8Nk8/oO+j9R7LH8S0+NHJdlniXYtL/bNg== - dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-platform-android@^4.2.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-4.7.0.tgz#aace6b8004b8d3aae40d6affaad1c472e0310a25" - integrity sha512-Lb6D0ipmFwYLJeQy5/NI4uJpeSHw85rd84C40wwpoUfsCgZhA93WUJdFkuQEIDkfTqs5Yqgl+/szhIZdnIXPxw== - dependencies: - "@react-native-community/cli-tools" "^4.7.0" - chalk "^3.0.0" - execa "^1.0.0" - fs-extra "^8.1.0" - glob "^7.1.3" - jetifier "^1.6.2" - lodash "^4.17.15" - logkitty "^0.6.0" - slash "^3.0.0" - xmldoc "^1.1.2" - -"@react-native-community/cli-platform-ios@^4.2.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.7.0.tgz#471dcdbd2645c5650f16c0eddcca50e47ca78398" - integrity sha512-XqnxP6H6+PG/wn4+Pwas5jaTSr5n7x6v8trkPY8iO37b8sq7tJLNYznaBMROF43i0NqO48JdhquYOqnDN8FdBA== - dependencies: - "@react-native-community/cli-tools" "^4.7.0" - chalk "^3.0.0" - glob "^7.1.3" - js-yaml "^3.13.1" - lodash "^4.17.15" - plist "^3.0.1" - xcode "^2.0.0" - -"@react-native-community/cli-tools@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-4.7.0.tgz#83d49277e7f56fef87bdfd0ba55d2cfa20190689" - integrity sha512-llNWJEWXhGMsaHLWoieraPeWuva3kRsIEPi8oRVTybyz82JjR71mN0OFs41o1OnAR6+TR9d5cJPN+mIOESugEA== - dependencies: - chalk "^3.0.0" - lodash "^4.17.15" - mime "^2.4.1" - node-fetch "^2.6.0" - -"@react-native-community/cli-types@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-4.7.0.tgz#871905753f8ff83cf10c48e8df3fdd63cd7667a0" - integrity sha512-Pw05Rsh/ENFs/Utv1SVRFfdMAn+W9yy1AOhyIKB36JX0Xw00sIZQDyZVsVfmaLSOpRpJ/qUdKWXB/WYV4XYELw== - -"@react-native-community/cli@^4.2.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-4.7.0.tgz#be692631356d14fd1ffe23f25b479dca9e8e7c95" - integrity sha512-DbpxcPC7lFCJ112dPXL4DBKh5TfH0QK2OTG7uEGjfsApT4c01Lae6OMTNSssXgXTcNJApqIT5a6GXK2vSE0CEQ== - dependencies: - "@hapi/joi" "^15.0.3" - "@react-native-community/cli-debugger-ui" "^4.7.0" - "@react-native-community/cli-tools" "^4.7.0" - "@react-native-community/cli-types" "^4.7.0" - chalk "^3.0.0" - command-exists "^1.2.8" - commander "^2.19.0" - compression "^1.7.1" - connect "^3.6.5" - cosmiconfig "^5.1.0" - deepmerge "^3.2.0" - envinfo "^7.1.0" - errorhandler "^1.5.0" - execa "^1.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - glob "^7.1.3" - graceful-fs "^4.1.3" - inquirer "^3.0.6" - leven "^3.1.0" - lodash "^4.17.15" - metro "^0.58.0" - metro-config "^0.58.0" - metro-core "^0.58.0" - metro-react-native-babel-transformer "^0.58.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - node-stream-zip "^1.9.1" - open "^6.2.0" - ora "^3.4.0" - pretty-format "^25.2.0" - semver "^6.3.0" - serve-static "^1.13.1" - shell-quote "1.6.1" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" - ws "^1.1.0" - -"@sheerun/mutationobserver-shim@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25" - integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== - -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - -"@sinonjs/commons@^1.7.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2" - integrity sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw== - dependencies: - type-detect "4.0.8" - -"@testing-library/dom@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.0.0.tgz#34e28e69e49bd6347fc64a5dde4c4f9aabbd17d3" - integrity sha512-B5XTz3uMsbqbdR9CZlnwpZjTE3fCWuqRkz/zvDc2Ej/vuHmTM0Ur2v0XPwr7usWfGIBsahEK5HL1E91+4IFiBg== - dependencies: - "@babel/runtime" "^7.5.5" - "@sheerun/mutationobserver-shim" "^0.3.2" - aria-query "3.0.0" - pretty-format "^24.8.0" - wait-for-expect "^1.3.0" - -"@testing-library/react@*": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.1.1.tgz#ee5b15c02b64cfbd14cdcad87fee2ed5f28fc2d1" - integrity sha512-mjX9l/onA5eVe8/4/obe7ZAw05U8s+kinXVglySVOMJo/oCSam9D9Dcg+aYVGsuBEuYV2W9m2LTP4KbNZh8BOw== - dependencies: - "@babel/runtime" "^7.5.5" - "@testing-library/dom" "^6.0.0" - "@types/react-dom" "^16.8.5" - -"@tootallnate/once@1": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" - integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== - -"@types/anymatch@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - -"@types/babel-types@*": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" - integrity sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ== - -"@types/babel__code-frame@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.1.tgz#baf2529c4abbfb5e4008c845efcfe39a187e2f99" - integrity sha512-FFfbQozKxYmOnCKFYV+EQprjBI7u2yaNc2ly/K9AhzyC8MzXtCtSRqptpw+HUJxhwCOo5mLwf1ATmzyhOaVbDg== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.0.4", "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.7": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" - integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*", "@types/babel__generator@^7.0.0": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" - integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*", "@types/babel__template@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.0.10" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.10.tgz#d9a99f017317d9b3d1abc2ced45d3bca68df0daf" - integrity sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw== - dependencies: - "@babel/types" "^7.3.0" - -"@types/braces@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== - -"@types/browser-resolve@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@types/browser-resolve/-/browser-resolve-1.11.0.tgz#28c427182a6e340b3d7082b62da8128c562f04d6" - integrity sha512-fI2q5j/5w2TuO+lIGj7bMcvOQQCo5Eq71OLiWttohpp4xW6xhA9ltN2ielMSvl5ochAIY0Z3E8LtVRMIGLYy2w== - dependencies: - "@types/resolve" "*" - -"@types/cheerio@^0.22.8": - version "0.22.17" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.17.tgz#e54f71c3135f71ebc16c8dc62edad533872c9e72" - integrity sha512-izlm+hbqWN9csuB9GSMfCnAyd3/57XZi3rfz1B0C4QBGVMp+9xQ7+9KYnep+ySfUrCWql4lGzkLf0XmprXcz9g== - dependencies: - "@types/node" "*" - -"@types/ci-info@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/ci-info/-/ci-info-2.0.0.tgz#51848cc0f5c30c064f4b25f7f688bf35825b3971" - integrity sha512-5R2/MHILQLDCzTuhs1j4Qqq8AaKUf7Ma4KSSkCtc12+fMs47zfa34qhto9goxpyX00tQK1zxB885VCiawZ5Qhg== - -"@types/co@^4.6.0", "@types/co@^4.6.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@types/co/-/co-4.6.2.tgz#027177ea7a3e34adbd55424e8b949fceb80fda32" - integrity sha512-tCPGk0b+zVZgFq6JovNM9MPH78BdLBE4RQMa21GCe2LhSs91kCSegS2Qdpb1NdRmfa7Asay9+rY2u1Z8Iw0s8A== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/convert-source-map@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/convert-source-map/-/convert-source-map-1.5.1.tgz#d4d180dd6adc5cb68ad99bd56e03d637881f4616" - integrity sha512-laiDIXqqthjJlyAMYAXOtN3N8+UlbM+KvZi4BaY5ZOekmVkBs/UxfK5O0HWeJVG2eW8F+Mu2ww13fTX+kY1FlQ== - -"@types/cross-spawn@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.1.tgz#60fa0c87046347c17d9735e5289e72b804ca9b63" - integrity sha512-MtN1pDYdI6D6QFDzy39Q+6c9rl2o/xN7aWGe6oZuzqq5N6+YuwFsWiEAv3dNzvzN9YzU+itpN8lBzFpphQKLAw== - dependencies: - "@types/node" "*" - -"@types/debug@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" - integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== - -"@types/decompress@^4.2.3": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@types/decompress/-/decompress-4.2.3.tgz#98eed48af80001038aa05690b2094915f296fe65" - integrity sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ== - dependencies: - "@types/node" "*" - -"@types/dedent@0.7.0", "@types/dedent@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050" - integrity sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A== - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/exit@^0.1.30": - version "0.1.31" - resolved "https://registry.yarnpkg.com/@types/exit/-/exit-0.1.31.tgz#681387d7724b42b91c29c7822da7967e05db5255" - integrity sha512-ghT0E6Bw64RXc6lM30ExMNlYbUCsyR8oucl/q+ESGGhNOXOmBPpZHYGXCH2T/yTFq9YtudNCnZEQ4puX6aq87A== - dependencies: - "@types/node" "*" - -"@types/fast-json-stable-stringify@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#40363bb847cb86b2c2e1599f1398d11e8329c921" - integrity sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ== - -"@types/fb-watchman@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/fb-watchman/-/fb-watchman-2.0.0.tgz#ca60ded406baa8c81c65ac1f86763a5d00aa7c55" - integrity sha512-Ao2jlksPEUGCEXBvJz5e2MuDpYUtxXgtUk45cg0g5Mmy4f0j7bQuDlOlqBMgKGRl9dZAK4ZTzFtukuzj2mURlQ== - dependencies: - "@types/events" "*" - -"@types/find-cache-dir@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/find-cache-dir/-/find-cache-dir-2.0.1.tgz#7d44d34f6fcde70989517cb4f66042a9bf83f5e3" - integrity sha512-L+8XrNQEa8EL8C9rwWxbC2R+K7tWVg+Ib5zTp0GmFajjUvTBGDqaY0WAdDBGSXdO0eEG3O0FCjdIHNfjyluF1Q== - -"@types/find-package-json@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/find-package-json/-/find-package-json-1.1.1.tgz#c0d296ac74fe3309ed0fe75a9c3edb42a776d30c" - integrity sha512-XMCocYkg6VUpkbOQMKa3M5cgc3MvU/LJKQwd3VUJrWZbLr2ARUggupsCAF8DxjEEIuSO6HlnH+vl+XV4bgVeEQ== - dependencies: - "@types/node" "*" - -"@types/get-port@^4.0.1": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-4.2.0.tgz#4fc44616c737d37d3ee7926d86fa975d0afba5e4" - integrity sha512-Iv2FAb5RnIk/eFO2CTu8k+0VMmIR15pKbcqRWi+s3ydW+aKXlN2yemP92SrO++ERyJx+p6Ie1ggbLBMbU1SjiQ== - dependencies: - get-port "*" - -"@types/glob@*", "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== - dependencies: - "@types/node" "*" - -"@types/is-ci@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-2.0.0.tgz#e2b81d0f9275861649d501dbc39a480fbf311459" - integrity sha512-J8ytIdkALbTrqcJ6OZiEv0B9skfyok/zCDj1q06GGCDa1rlHnPobUBT0BYR1vku2oZVwVEgCurtXqCASAfjCiQ== - dependencies: - "@types/ci-info" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-instrument@^1.7.2": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.3.tgz#120a0fb4e6bb704544a4d22017207a561a285fd2" - integrity sha512-bnWCOhyg4h/wAb0D2pwcD2e6JtK4Oh/7+gOgAS6bYi2hDn9jb7X08Afe2CbtzZQN6U0AnMpA91IPgw10HGgTpw== - dependencies: - "@types/babel-types" "*" - "@types/istanbul-lib-coverage" "*" - source-map "^0.6.1" - -"@types/istanbul-lib-report@*", "@types/istanbul-lib-report@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-lib-source-maps@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#d67b612f453baf7abda33a9baf1cb072189ad909" - integrity sha512-pwtxTGrYUe4T/J990fuUk49oJ/MEa2vyugpCnX4n//Owak1lK2vusySEKtolJevFpDuO761Ja+e6PZbxczfn7A== - dependencies: - "@types/istanbul-lib-coverage" "*" - source-map "^0.6.1" - -"@types/istanbul-reports@^1.1.0", "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest@*", "@types/jest@24.0.2": - version "24.0.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.2.tgz#a10ad017ee020b2dfa97655323dbf1f38f14f588" - integrity sha512-YCGS1XGfAnDLUy8IL7iZf+Tnl0jhnaWUhrx8H/WyaDnjsu9dQBO8jiQqgJi/4BEryY6gvaqf1OvB1B2BvsW4dg== - -"@types/jsdom@^12.2.4": - version "12.2.4" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-12.2.4.tgz#845cd4d43f95b8406d9b724ec30c03edadcd9528" - integrity sha512-q+De3S/Ri6U9uPx89YA1XuC+QIBgndIfvBaaJG0pRT8Oqa75k4Mr7G9CRZjIvlbLGIukO/31DFGFJYlQBmXf/A== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - parse5 "^4.0.0" - -"@types/json-schema@^7.0.3": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== - -"@types/lockfile@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/lockfile/-/lockfile-1.0.1.tgz#434a3455e89843312f01976e010c60f1bcbd56f7" - integrity sha512-65WZedEm4AnOsBDdsapJJG42MhROu3n4aSSiu87JXF/pSdlubxZxp3S1yz3kTfkJ2KBPud4CpjoHVAptOm9Zmw== - -"@types/lolex@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/lolex/-/lolex-5.1.0.tgz#11b4c4756c007306d0feeaf2f08f88350c635d2b" - integrity sha512-hCQ2dOEQUw1LwofdIpMMGGqENd5p5ANzvcTe1nXTjcQL84r7tcLXFJlBgi0Ggz0f7BLmE2epf0C5Q07iq2gV0g== - -"@types/md5-file@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/md5-file/-/md5-file-4.0.1.tgz#5e6cfb7949dc375049b8f6fd8f91adacfc176c63" - integrity sha512-uK6vlo/LJp6iNWinpSzZwMe8Auzs0UYxesm7OGfQS3oz6PJciHtrKcqVOGk4wjYKawrl234vwNWvHyXH1ZzRyQ== - -"@types/merge-stream@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/merge-stream/-/merge-stream-1.1.2.tgz#a880ff66b1fbbb5eef4958d015c5947a9334dbb1" - integrity sha512-7faLmaE99g/yX0Y9pF1neh2IUqOf/fXMOWCVzsXjqI1EJ91lrgXmaBKf6bRWM164lLyiHxHt6t/ZO/cIzq61XA== - dependencies: - "@types/node" "*" - -"@types/micromatch@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" - integrity sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw== - dependencies: - "@types/braces" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== - dependencies: - "@types/node" "*" - -"@types/natural-compare@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@types/natural-compare/-/natural-compare-1.4.0.tgz#b3c54f7edc339758d573c5dcac7808c58cf8c31e" - integrity sha512-bNtBj6AF1F90jp54KRPOrYfilGNfPr2kpaUN7rMJjauAtfGBXzT/T/REZN6jb4qUs9FTxU37kir3Nrn5WsTUDw== - -"@types/node-notifier@^6.0.0": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/node-notifier/-/node-notifier-6.0.1.tgz#282bb8c37d69be3343c359efc8b9c97fad46a0e9" - integrity sha512-PBkKwgjxu2aA24zh5Rng8FlL03R4zopZbTtzeKbWLfF+AMeHBMk3Ls12K/yZchYhe/riuiarPXcRJGUBLGb15w== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@>= 8": - version "13.11.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" - integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/prompts@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.5.tgz#b3cb5cd2c69a0da11b21ea6618bffdab6091336c" - integrity sha512-07dV9H+uEmGjtudYst7UlRnctQfd/22zJ2/k1ykZR4Kx/n42hC314v1NCxvaesZebvJJ8i5AVMtBaMbSIR3oBw== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== - -"@types/react-dom@^16.8.5": - version "16.9.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.6.tgz#9e7f83d90566521cc2083be2277c6712dcaf754c" - integrity sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ== - dependencies: - "@types/react" "*" - -"@types/react-is@^16.7.1": - version "16.7.1" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-16.7.1.tgz#d3f1c68c358c00ce116b55ef5410cf486dd08539" - integrity sha512-dMLFD2cCsxtDgMkTydQCM0PxDq8vwc6uN5M/jRktDfYvH3nQj6pjC9OrCXS2lKlYoYTNJorI/dI8x9dpLshexQ== - dependencies: - "@types/react" "*" - -"@types/react-test-renderer@*": - version "16.9.2" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz#e1c408831e8183e5ad748fdece02214a7c2ab6c5" - integrity sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.9.34" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349" - integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/resolve@*", "@types/resolve@^1.14.0": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.14.0.tgz#c95d696264f8e53e764a7c0b83e9317b458b76c3" - integrity sha512-bmjNBW6tok+67iOsASeYSJxSgY++BIR35nGyGLORTDirhra9reJ0shgGL3U7KPDUbOBCx8JrlCjd4d/y5uiMRQ== - dependencies: - "@types/node" "*" - -"@types/rimraf@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.0.tgz#b9d03f090ece263671898d57bb7bb007023ac19f" - integrity sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ== - dependencies: - "@types/glob" "*" - "@types/node" "*" - -"@types/sane@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/sane/-/sane-2.0.0.tgz#891c272b10d1a6f735e915c731756104b5d21374" - integrity sha512-6o/YMfcKcWIK5IAxeo/1DEoVnGKBkPSPj9odxczz2i1gFY78GvguqgtNo28nyKgJUiKEWuFj11acpgdRmRFz7A== - dependencies: - "@types/node" "*" - -"@types/semver@^6.0.1", "@types/semver@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.1.tgz#a236185670a7860f1597cf73bea2e16d001461ba" - integrity sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA== - -"@types/source-map-support@^0.5.0": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.5.1.tgz#b13e4de5bf2e5858e0dfe33fac90556b0f652dc3" - integrity sha512-VDqnZe9D2zR19qbeRvwYyHSp7AtUtCkTaRVFQ8wzwH9TXw9kKKq/vBhfEnFEXVupO2M0lBMA9mr/XyQ6gEkUOA== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/supports-color@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-5.3.0.tgz#eb6a52e9531fb3ebcd401cec774d1bdfb571f793" - integrity sha512-WxwTXnHTIsk7srax1icjLgX+6w1MUAJbhyCpRP/45paEElsPDQUJZDgr1UpKuL2S3Tb+ZyX9MjWwmcSD4bUoOQ== - -"@types/tmp@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.1.0.tgz#19cf73a7bcf641965485119726397a096f0049bd" - integrity sha512-6IwZ9HzWbCq6XoQWhxLpDjuADodH/MKXRUIDFudvgjcVdjFknvmR+DNsoUeer4XPrEnrZs04Jj+kfV9pFsrhmA== - -"@types/tough-cookie@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" - integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== - -"@types/uuid@3.4.6": - version "3.4.6" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.6.tgz#d2c4c48eb85a757bf2927f75f939942d521e3016" - integrity sha512-cCdlC/1kGEZdEglzOieLDYBxHsvEOIg7kp/2FYyVR9Pxakq+Qf/inL3RKQ+PA8gOlI/NnL+fXmQH12nwcGzsHw== - dependencies: - "@types/node" "*" - -"@types/weak-napi@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/weak-napi/-/weak-napi-1.0.0.tgz#b0977c0737cb62d028c4eda76f4e295bb3ae3c49" - integrity sha512-viW/kPA1gpeoNdUge025WqmThQ2lnnHzZWZJM5KlH8w9E5YehOh3GnDjW5w/sAEC91VOlePEiFSQmbnX7VVyLw== - dependencies: - "@types/node" "*" - -"@types/which@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.2.tgz#9c246fc0c93ded311c8512df2891fb41f6227fdf" - integrity sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA== - -"@types/write-file-atomic@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/write-file-atomic/-/write-file-atomic-3.0.0.tgz#51d7d4132d86bc324e713ff280f9dfe971ee9ab1" - integrity sha512-XrvNv7CBEveBoWkGU4ZxuyeL7iaYVr609VjlNAe+VaS8N9stTvGwp5IZgFP+QDbiRQV/R7MmipPsgAhlf5LZzQ== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - -"@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^15.0.0", "@types/yargs@^15.0.3": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^2.19.0": - version "2.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.27.0.tgz#e479cdc4c9cf46f96b4c287755733311b0d0ba4b" - integrity sha512-/my+vVHRN7zYgcp0n4z5A6HAK7bvKGBiswaM5zIlOQczsxj/aiD7RcgD+dvVFuwFaGh5+kM7XA6Q6PN0bvb1tw== - dependencies: - "@typescript-eslint/experimental-utils" "2.27.0" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.27.0", "@typescript-eslint/experimental-utils@^2.5.0": - version "2.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.27.0.tgz#801a952c10b58e486c9a0b36cf21e2aab1e9e01a" - integrity sha512-vOsYzjwJlY6E0NJRXPTeCGqjv5OHgRU1kzxHKWJVPjDYGbPgLudBXjIlc+OD1hDBZ4l1DLbOc5VjofKahsu9Jw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.27.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.19.0": - version "2.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.27.0.tgz#d91664335b2c46584294e42eb4ff35838c427287" - integrity sha512-HFUXZY+EdwrJXZo31DW4IS1ujQW3krzlRjBrFRrJcMDh0zCu107/nRfhk/uBasO8m0NVDbBF5WZKcIUMRO7vPg== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.27.0" - "@typescript-eslint/typescript-estree" "2.27.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.27.0": - version "2.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.27.0.tgz#a288e54605412da8b81f1660b56c8b2e42966ce8" - integrity sha512-t2miCCJIb/FU8yArjAvxllxbTiyNqaXJag7UOpB5DVoM3+xnjeOngtqlJkLRnMtzaRcJhe3CIR9RmL40omubhg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^6.3.0" - tsutils "^3.17.1" - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== - dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" - -JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -absolute-path@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" - integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^6.0.1, acorn@^6.2.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.1.0, acorn@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== - -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" - integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - -agent-base@6: - version "6.0.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" - integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== - dependencies: - debug "4" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== - dependencies: - humanize-ms "^1.2.1" - -airbnb-prop-types@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" - integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== - dependencies: - array.prototype.find "^2.1.0" - function.prototype.name "^1.1.1" - has "^1.0.3" - is-regex "^1.0.4" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.1.0" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.9.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -anser@^1.4.9: - version "1.4.9" - resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" - integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" - integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= - dependencies: - ansi-wrap "0.1.0" - -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-fragments@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" - integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== - dependencies: - colorette "^1.0.7" - slice-ansi "^2.0.0" - strip-ansi "^5.0.0" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -arch@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - -archive-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" - integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= - dependencies: - file-type "^4.2.0" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.10, argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argv@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" - integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= - -aria-query@3.0.0, aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.find@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" - integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.4" - -array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@^2.0.0, asap@~2.0.3, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.4.0, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autolinker@^3.11.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-3.14.1.tgz#6ae4b812b6eaf42d4d68138b9e67757cbf2bc1e4" - integrity sha512-yvsRHIaY51EYDml6MGlbqyJGfl4n7zezGYf+R7gvM8c5LNpRGc4SISkvgAswSS8SWxk/OrGCylKV9mJyVstz7w== - dependencies: - tslib "^1.9.3" - -autolinker@~0.28.0: - version "0.28.1" - resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-0.28.1.tgz#0652b491881879f0775dace0cdca3233942a4e47" - integrity sha1-BlK0kYgYefB3XazgzcoyM5QqTkc= - dependencies: - gulp-header "^1.7.1" - -autoprefixer@^9.7.2: - version "9.7.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.6.tgz#63ac5bbc0ce7934e6997207d5bb00d68fa8293a4" - integrity sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ== - dependencies: - browserslist "^4.11.1" - caniuse-lite "^1.0.30001039" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.27" - postcss-value-parser "^4.0.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - -axobject-query@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" - integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ== - -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-eslint@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-loader@^8.0.5: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-replace-ts-export-assignment@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-replace-ts-export-assignment/-/babel-plugin-replace-ts-export-assignment-0.0.2.tgz#927a30ba303fcf271108980a8d4f80a693e1d53f" - integrity sha512-BiTEG2Ro+O1spuheL5nB289y37FFmz0ISE6GjpNCG2JuA/WNcuEHSYw01+vN8quGf208sID3FnZFDwVyqX18YQ== - -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - -babel-plugin-transform-typescript-metadata@*: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.0.tgz#70093ea8611baf985293fb3ec704d1b7db737ad9" - integrity sha512-ASYrM+bxtpfgZKsAOqQfjmLlekIDigRnNCfQBDOOdaqL18hLhZIsbdiHsuaNDTkljlqnbV/DlufaWY55jC2PBg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -babel-plugin-typescript-strip-namespaces@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-typescript-strip-namespaces/-/babel-plugin-typescript-strip-namespaces-1.1.1.tgz#160433b17e424b57cf72e3b4d8f08195ad28d7fd" - integrity sha512-dVB9caEANbEVwUylL8g3lsYU5JjaXE2KNIVLib3KVcGJF32QunxvQqP6kf+lzW/fyDed/zWD/e/hdyimyc/79Q== - -babel-polyfill@6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0= - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-current-node-syntax@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" - integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" - integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - -babel-runtime@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== - -benchmark@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" - integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= - dependencies: - lodash "^4.17.4" - platform "^1.3.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - -big-integer@^1.6.44: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -bin-build@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861" - integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA== - dependencies: - decompress "^4.0.0" - download "^6.2.2" - execa "^0.7.0" - p-map-series "^1.0.0" - tempfile "^2.0.0" - -bin-check@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49" - integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== - dependencies: - execa "^0.7.0" - executable "^4.1.0" - -bin-version-check@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71" - integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ== - dependencies: - bin-version "^3.0.0" - semver "^5.6.0" - semver-truncate "^1.1.2" - -bin-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839" - integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ== - dependencies: - execa "^1.0.0" - find-versions "^3.0.0" - -bin-wrapper@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz#99348f2cf85031e3ef7efce7e5300aeaae960605" - integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q== - dependencies: - bin-check "^4.1.0" - bin-version-check "^4.0.0" - download "^7.1.0" - import-lazy "^3.1.0" - os-filter-obj "^2.0.0" - pify "^4.0.1" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - -bindings@^1.3.0, bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" - integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -bluebird@^3.3.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - -body-parser@1.19.0, body-parser@^1.16.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -bplist-creator@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" - integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== - dependencies: - stream-buffers "~2.2.0" - -bplist-parser@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== - dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" - -browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" - integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== - dependencies: - caniuse-lite "^1.0.30001038" - electron-to-chromium "^1.3.390" - node-releases "^1.1.53" - pkg-up "^2.0.0" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -bson@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.4.tgz#f76870d799f15b854dffb7ee32f0a874797f7e89" - integrity sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q== - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.2.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" - integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039: - version "1.0.30001040" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz#103fc8e6eb1d7397e95134cd0e996743353d58ea" - integrity sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -caw@^2.0.0, caw@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" - integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== - dependencies: - get-proxy "^2.0.0" - isurl "^1.0.0-alpha5" - tunnel-agent "^0.6.0" - url-to-options "^1.0.1" - -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio@0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -cheerio@^1.0.0-rc.3: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - -chokidar@^2.0.4, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.0.0, chokidar@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.3.0" - optionalDependencies: - fsevents "~2.1.2" - -chownr@^1.1.1, chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" - integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -clipboard@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" - integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -codecov@^3.0.0: - version "3.6.5" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.5.tgz#d73ce62e8a021f5249f54b073e6f2d6a513f172a" - integrity sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ== - dependencies: - argv "0.0.2" - ignore-walk "3.0.3" - js-yaml "3.13.1" - teeny-request "6.0.1" - urlgrey "0.4.4" - -coffee-script@^1.12.4: - version "1.12.7" - resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" - integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== - -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colorette@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" - integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== - -colors@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0" - integrity sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ== - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - -commander@~2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" - integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= - dependencies: - graceful-readlink ">= 1.0.0" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@*: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== - dependencies: - source-map "^0.6.1" - -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -connect@^3.6.0, connect@^3.6.5: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -console-stream@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" - integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ= - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.3, content-disposition@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= - -conventional-changelog-angular@^5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" - integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== - dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-preset-loader@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" - integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== - -conventional-changelog-writer@^4.0.6: - version "4.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" - integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.4.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^5.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== - dependencies: - browserslist "^4.8.5" - semver "7.0.0" - -core-js-pure@^3.0.0: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - -core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.6.5: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-js@^3.2.1: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-react-class@^15.6.3: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -cross-fetch@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723" - integrity sha1-pH/09/xxLauo9qaVoRyUhEDUVyM= - dependencies: - node-fetch "2.1.2" - whatwg-fetch "2.0.4" - -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" - integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crowdin-cli@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/crowdin-cli/-/crowdin-cli-0.3.0.tgz#eac9989a6fe7feaaf33090397afc187c67b46191" - integrity sha1-6smYmm/n/qrzMJA5evwYfGe0YZE= - dependencies: - request "^2.53.0" - yamljs "^0.2.1" - yargs "^2.3.0" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@1.0.0-alpha.39: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== - dependencies: - mdn-data "2.0.6" - source-map "^0.6.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== - dependencies: - css-tree "1.0.0-alpha.39" - -cssom@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" - integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== - dependencies: - cssom "~0.3.6" - -csstype@^2.2.0: - version "2.6.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" - integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -damerau-levenshtein@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== - -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-format@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -dayjs@^1.8.15: - version "1.8.25" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.25.tgz#d09a8696cee7191bc1289e739f96626391b9c73c" - integrity sha512-Pk36juDfQQGDCgr0Lqd1kw15w3OS6xt21JaLPE3lCfsEf8KrERGwDNwvK1tRjrjqFC0uZBJncT4smZQ4F+uV5g== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@3.2.6, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.0.0, decompress@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" - integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" - integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= - -denque@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" - integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -diacritics-map@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/diacritics-map/-/diacritics-map-0.1.0.tgz#6dfc0ff9d01000a2edf2865371cac316e94977af" - integrity sha1-bfwP+dAQAKLt8oZTccrDFulJd68= - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -docusaurus@^1.14.2: - version "1.14.4" - resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-1.14.4.tgz#1ef3ebe8c2aaaf1dec6c2e0e177e83be78aeaca3" - integrity sha512-KALmrlZBc0E+AB0ITR4POGKv8WcrcSSxvmgq7nC3TdpS+S2hrlXN/2tV3tVOZ8q8m+zhcMs7l9mAIhGFQyQwIw== - dependencies: - "@babel/core" "^7.7.4" - "@babel/plugin-proposal-class-properties" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/polyfill" "^7.7.0" - "@babel/preset-env" "^7.7.4" - "@babel/preset-react" "^7.7.4" - "@babel/register" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - autoprefixer "^9.7.2" - babylon "^6.18.0" - chalk "^3.0.0" - classnames "^2.2.6" - commander "^4.0.1" - crowdin-cli "^0.3.0" - cssnano "^4.1.10" - escape-string-regexp "^2.0.0" - express "^4.17.1" - feed "^4.0.0" - fs-extra "^8.1.0" - gaze "^1.1.3" - github-slugger "^1.2.1" - glob "^7.1.6" - highlight.js "^9.16.2" - imagemin "^6.0.0" - imagemin-gifsicle "^6.0.1" - imagemin-jpegtran "^6.0.0" - imagemin-optipng "^6.0.0" - imagemin-svgo "^7.0.0" - lodash "^4.17.15" - markdown-toc "^1.2.0" - mkdirp "^0.5.1" - portfinder "^1.0.25" - postcss "^7.0.23" - prismjs "^1.17.1" - react "^16.8.4" - react-dev-utils "^9.1.0" - react-dom "^16.8.4" - remarkable "^2.0.0" - request "^2.88.0" - shelljs "^0.8.3" - sitemap "^3.2.2" - tcp-port-used "^1.0.1" - tiny-lr "^1.1.1" - tree-node-cli "^1.2.5" - truncate-html "^1.0.3" - -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.0, dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== - dependencies: - is-obj "^2.0.0" - -downlevel-dts@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/downlevel-dts/-/downlevel-dts-0.4.0.tgz#43f9f649c8b137373d76b4ee396d5a0227c10ddb" - integrity sha512-nh5vM3n2pRhPwZqh0iWo5gpItPAYEGEWw9yd0YpI+lO60B7A3A6iJlxDbt7kKVNbqBXKsptL+jwE/Yg5Go66WQ== - dependencies: - shelljs "^0.8.3" - typescript "^3.8.0-dev.20200111" - -download@^6.2.2: - version "6.2.5" - resolved "https://registry.yarnpkg.com/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714" - integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA== - dependencies: - caw "^2.0.0" - content-disposition "^0.5.2" - decompress "^4.0.0" - ext-name "^5.0.0" - file-type "5.2.0" - filenamify "^2.0.0" - get-stream "^3.0.0" - got "^7.0.0" - make-dir "^1.0.0" - p-event "^1.0.0" - pify "^3.0.0" - -download@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" - integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== - dependencies: - archive-type "^4.0.0" - caw "^2.0.1" - content-disposition "^0.5.2" - decompress "^4.2.0" - ext-name "^5.0.0" - file-type "^8.1.0" - filenamify "^2.0.0" - get-stream "^3.0.0" - got "^8.3.1" - make-dir "^1.2.0" - p-event "^2.1.0" - pify "^3.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.390: - version "1.3.403" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" - integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== - -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -"emoji-regex@>=6.0.0 <=6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" - integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= - -emoji-regex@^7.0.1, emoji-regex@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" - integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - -enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - -envinfo@^7.1.0, envinfo@^7.3.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== - -enzyme-adapter-react-16@*: - version "1.15.2" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz#b16db2f0ea424d58a808f9df86ab6212895a4501" - integrity sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q== - dependencies: - enzyme-adapter-utils "^1.13.0" - enzyme-shallow-equal "^1.0.1" - has "^1.0.3" - object.assign "^4.1.0" - object.values "^1.1.1" - prop-types "^15.7.2" - react-is "^16.12.0" - react-test-renderer "^16.0.0-0" - semver "^5.7.0" - -enzyme-adapter-utils@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz#01c885dde2114b4690bf741f8dc94cee3060eb78" - integrity sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ== - dependencies: - airbnb-prop-types "^2.15.0" - function.prototype.name "^1.1.2" - object.assign "^4.1.0" - object.fromentries "^2.0.2" - prop-types "^15.7.2" - semver "^5.7.1" - -enzyme-shallow-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz#7afe03db3801c9b76de8440694096412a8d9d49e" - integrity sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ== - dependencies: - has "^1.0.3" - object-is "^1.0.2" - -enzyme@*: - version "3.11.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" - integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== - dependencies: - array.prototype.flat "^1.2.3" - cheerio "^1.0.0-rc.3" - enzyme-shallow-equal "^1.0.1" - function.prototype.name "^1.1.2" - has "^1.0.3" - html-element-map "^1.2.0" - is-boolean-object "^1.0.1" - is-callable "^1.1.5" - is-number-object "^1.0.4" - is-regex "^1.0.5" - is-string "^1.0.5" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.7.0" - object-is "^1.0.2" - object.assign "^4.1.0" - object.entries "^1.1.1" - object.values "^1.1.1" - raf "^3.4.1" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.2.1" - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - -errorhandler@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" - integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== - dependencies: - accepts "~1.3.7" - escape-html "~1.0.3" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^1.11.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-fbjs@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-fbjs/-/eslint-config-fbjs-3.1.1.tgz#f5b4c1df888693672116f000527a8df25d61b888" - integrity sha512-Vpyqz+ZcyLyiUGUdUfiQmZnxiQ4Nj/KDRKed/Y5qSm+xHbQJ5zcZUQwLUMWHQicpDHewsdXwlpUAblvy1DtGvg== - -eslint-config-prettier@^6.1.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a" - integrity sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ== - dependencies: - get-stdin "^6.0.0" - -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-babel@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" - integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== - dependencies: - eslint-rule-composer "^0.3.0" - -eslint-plugin-eslint-comments@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395" - integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-flowtype@^4.2.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.7.0.tgz#903a6ea3eb5cbf4c7ba7fa73cc43fc39ab7e4a70" - integrity sha512-M+hxhSCk5QBEValO5/UqrS4UunT+MgplIJK5wA1sCtXjzBcZkpTGRwxmLHhGpbHcrmQecgt6ZL/KDdXWqGB7VA== - dependencies: - lodash "^4.17.15" - -eslint-plugin-import@^2.6.0: - version "2.20.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" - integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jest@^23.0.2: - version "23.8.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4" - integrity sha512-xwbnvOsotSV27MtAe7s8uGWOori0nUsrXh2f1EnpmXua8sDfY6VZhHAhHg2sqK7HBNycRQExF074XSZ7DvfoFg== - dependencies: - "@typescript-eslint/experimental-utils" "^2.5.0" - -eslint-plugin-jsx-a11y@^6.0.2: - version "6.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" - integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== - dependencies: - "@babel/runtime" "^7.4.5" - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" - has "^1.0.3" - jsx-ast-utils "^2.2.1" - -eslint-plugin-markdown@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.2.tgz#79274bf17ce3ead48e4a55cbcb6d7ce735754280" - integrity sha512-BfvXKsO0K+zvdarNc801jsE/NTLmig4oKhZ1U3aSUgTf2dB/US5+CrfGxMsCK2Ki1vS1R3HPok+uYpufFndhzw== - dependencies: - object-assign "^4.0.1" - remark-parse "^5.0.0" - unified "^6.1.2" - -eslint-plugin-prettier@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" - integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-react@^7.1.0: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" - integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== - dependencies: - array-includes "^3.1.1" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.15.1" - semver "^6.3.0" - string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" - -eslint-plugin-relay@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-relay/-/eslint-plugin-relay-1.4.1.tgz#5af2ac13e24bd01ad17b6a4014204918d65021cd" - integrity sha512-yb+p+4AxZTi2gXN7cZRfXMBFlRa5j6TtiVeq3yHXyy+tlgYNpxi/dDrP1+tcUTNP9vdaJovnfGZ5jp6kMiH9eg== - dependencies: - graphql "^14.0.0" - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" - integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^6.2.2: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== - dependencies: - estraverse "^5.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-target-shim@^5.0.0, event-target-shim@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@^3.0.0, eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== - -events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== - -eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-buffer@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b" - integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA== - dependencies: - execa "^0.7.0" - p-finally "^1.0.0" - pify "^3.0.0" - rimraf "^2.5.4" - tempfile "^2.0.0" - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -executable@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== - dependencies: - mime-db "^1.28.0" - -ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= - dependencies: - kind-of "^1.1.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.1, external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - -fast-check@^1.13.0: - version "1.24.1" - resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-1.24.1.tgz#42a153e664122b1a2defdaea4e9b8311635fa7e7" - integrity sha512-ECF5LDbt4F8sJyTDI62fRLn0BdHDAdBacxlEsxaYbtqwbsdWofoYZUSaUp9tJrLsqCQ8jG28SkNvPZpDfNo3tw== - dependencies: - pure-rand "^2.0.0" - tslib "^1.10.0" - -fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^2.0.2, fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.0.3: - version "3.2.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" - integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" - integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== - dependencies: - reusify "^1.0.4" - -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs-scripts@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" - integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== - dependencies: - "@babel/core" "^7.0.0" - ansi-colors "^1.0.1" - babel-preset-fbjs "^3.2.0" - core-js "^2.4.1" - cross-spawn "^5.1.0" - fancy-log "^1.3.2" - object-assign "^4.0.1" - plugin-error "^0.1.2" - semver "^5.1.0" - through2 "^2.0.0" - -fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -fbjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" - integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== - dependencies: - core-js "^2.4.1" - fbjs-css-vars "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -feed@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/feed/-/feed-4.1.0.tgz#58f1c9cc2b44715d14ac59234e1bf20c5d757aa7" - integrity sha512-dAXWXM8QMxZ1DRnAxDmy1MaWZFlh1Ku7TU3onbXgHrVJynsxkNGPUed1AxszVW8AXo43xExronVkIqK+ACsoBA== - dependencies: - xml-js "^1.6.11" - -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-type@5.2.0, file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha1-LdvqfHP/42No365J3DOMBYwritY= - -file-type@^10.4.0, file-type@^10.7.0: - version "10.11.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890" - integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw== - -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -file-type@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" - integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - -file-type@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" - integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= - -filenamify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" - integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.1.2, finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874" - integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.0" - pkg-dir "^4.1.0" - -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-package-json@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-package-json/-/find-package-json-1.2.0.tgz#4057d1b943f82d8445fe52dc9cf456f6b8b58083" - integrity sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw== - -find-process@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.3.tgz#25f9105dc32e42abad4636752c37c51cd57dce45" - integrity sha512-+IA+AUsQCf3uucawyTwMWcY+2M3FXq3BRvw3S+j5Jvydjk31f/+NPWpYZOJs+JUs2GvxH4Yfr6Wham0ZtRLlPA== - dependencies: - chalk "^2.0.1" - commander "^2.11.0" - debug "^2.6.8" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-versions@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" - integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== - dependencies: - semver-regex "^2.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== - dependencies: - debug "^3.0.0" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0, from2@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -======= # This file is generated by running "yarn install" inside your project. # Manual changes might be lost - proceed with caution! @@ -7185,7 +107,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:*, @babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.3.4, @babel/core@npm:^7.7.5, @babel/core@npm:^7.9.0": +"@babel/core@npm:*, @babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.3.4, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.9.0": version: 7.12.3 resolution: "@babel/core@npm:7.12.3" dependencies: @@ -7220,6 +142,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.7.2": + version: 7.12.5 + resolution: "@babel/generator@npm:7.12.5" + dependencies: + "@babel/types": ^7.12.5 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: 7706cb3d29060e6dfcdbc982ded9a02f0bda36329cc35aabc6b3f9f30ef7b3b3bcaba51c24714663f3ea9529994cd3461ab8a664b26398208b9b9a96476bf43c + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.10.4": version: 7.10.4 resolution: "@babel/helper-annotate-as-pure@npm:7.10.4" @@ -7518,6 +451,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.7.2": + version: 7.12.5 + resolution: "@babel/parser@npm:7.12.5" + bin: + parser: ./bin/babel-parser.js + checksum: ff03d2389e32e3710c759d7bbcffc2d2e0637498e3a36aeaa0dbf961c48adb7027c393d0458247e54e24fed66ce0ea00e3e8d63089d22931e4175ee398727c15 + languageName: node + linkType: hard + "@babel/plugin-external-helpers@npm:^7.0.0": version: 7.12.1 resolution: "@babel/plugin-external-helpers@npm:7.12.1" @@ -7911,7 +853,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.12.1": +"@babel/plugin-syntax-typescript@npm:^7.12.1, @babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.12.1 resolution: "@babel/plugin-syntax-typescript@npm:7.12.1" dependencies: @@ -8043,7 +985,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.12.1": version: 7.12.1 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.12.1" dependencies: @@ -8245,6 +1187,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-development@npm:^7.12.5": + version: 7.12.5 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.12.5" + dependencies: + "@babel/helper-builder-react-jsx-experimental": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-jsx": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fec194e2f4dfbee97c6c18c2af6fd037b97bfe6024df2548d4453074fd687239bc2d452d9ef1ecc20fb63d2074178994c2c659ffb630ca4d45d4e9462ba643b6 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.12.1": version: 7.12.1 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.12.1" @@ -8281,6 +1236,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.12.5": + version: 7.12.5 + resolution: "@babel/plugin-transform-react-jsx@npm:7.12.5" + dependencies: + "@babel/helper-builder-react-jsx": ^7.10.4 + "@babel/helper-builder-react-jsx-experimental": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-jsx": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 254ddc1097fe88acb3c25f01a439f97df0124bf08a73a3e27418029f4bb47cd761d0430615713380afba02f0ca5ce26c44351228d084214ecb024852bff0d473 + languageName: node + linkType: hard + "@babel/plugin-transform-react-pure-annotations@npm:^7.12.1": version: 7.12.1 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.12.1" @@ -8519,6 +1488,18 @@ __metadata: languageName: node linkType: hard +"@babel/preset-flow@npm:^7.7.2": + version: 7.12.1 + resolution: "@babel/preset-flow@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-transform-flow-strip-types": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 66f6b0f2af4b1d2e3d8253085bac81829917d2d8032267523d61bbad00759a08bf47792f686d1ec1aa4184f1b8179bddfe7e6bd49bdea443548dae5874f8ee6d + languageName: node + linkType: hard + "@babel/preset-modules@npm:^0.1.3": version: 0.1.4 resolution: "@babel/preset-modules@npm:0.1.4" @@ -8551,6 +1532,23 @@ __metadata: languageName: node linkType: hard +"@babel/preset-react@npm:^7.7.2": + version: 7.12.5 + resolution: "@babel/preset-react@npm:7.12.5" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-transform-react-display-name": ^7.12.1 + "@babel/plugin-transform-react-jsx": ^7.12.5 + "@babel/plugin-transform-react-jsx-development": ^7.12.5 + "@babel/plugin-transform-react-jsx-self": ^7.12.1 + "@babel/plugin-transform-react-jsx-source": ^7.12.1 + "@babel/plugin-transform-react-pure-annotations": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1083243ebf652f0895f407b2f8f74c602e602056f225b5c9e9f181019e76d6d475130749b4c543437ca78ee84fa54b3552bcd5a7bb2f40de26cdd3adffe7222a + languageName: node + linkType: hard + "@babel/preset-typescript@npm:*, @babel/preset-typescript@npm:^7.0.0": version: 7.12.1 resolution: "@babel/preset-typescript@npm:7.12.1" @@ -8636,6 +1634,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.12.5": + version: 7.12.6 + resolution: "@babel/types@npm:7.12.6" + dependencies: + "@babel/helper-validator-identifier": ^7.10.4 + lodash: ^4.17.19 + to-fast-properties: ^2.0.0 + checksum: e8d02f859c16c8ae941a1eb84954189eacdd9488c8f9ad54c29dedf2bf8456f45c7fe401c54ea2c4d45d890d865aaac0283a78b62a87f796e92078eac49aa040 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -12050,6 +5059,27 @@ __metadata: languageName: node linkType: hard +"babel-preset-current-node-syntax@npm:^0.1.2": + version: 0.1.4 + resolution: "babel-preset-current-node-syntax@npm:0.1.4" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f54dfafd352b5671dfe549d6e2d692ec4328988bc2040f3c67b2dd4185c85ced29b39440f6f6bfd8145ad00e2cc8b39c5a218ef4bd7c08c48e3afec0583f4125 + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.0 resolution: "babel-preset-current-node-syntax@npm:1.0.0" @@ -16519,7 +9549,6 @@ __metadata: checksum: 698a91b1695e3926185c9e5b0dd57cf687dceb4eb73799af91e6b2ab741735e2962c366c5af6403ffddae2619914193bd339efa706fdc984d0ffc74b7a3603f4 languageName: node linkType: hard ->>>>>>> master fsevents@^1.2.7: version: 1.2.13 @@ -19237,6 +12266,12 @@ fsevents@^1.2.7: version: 0.0.0-use.local resolution: "jest-snapshot@workspace:packages/jest-snapshot" dependencies: + "@babel/core": ^7.7.2 + "@babel/generator": ^7.7.2 + "@babel/parser": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/preset-flow": ^7.7.2 + "@babel/preset-react": ^7.7.2 "@babel/traverse": ^7.3.4 "@babel/types": ^7.0.0 "@jest/test-utils": ^26.6.2 @@ -19248,6 +12283,7 @@ fsevents@^1.2.7: "@types/semver": ^7.1.0 ansi-regex: ^5.0.0 ansi-styles: ^4.2.0 + babel-preset-current-node-syntax: ^0.1.2 chalk: ^4.0.0 expect: ^26.6.2 graceful-fs: ^4.2.4 @@ -19261,6 +12297,11 @@ fsevents@^1.2.7: prettier: ^1.19.1 pretty-format: ^26.6.2 semver: ^7.3.2 + peerDependencies: + "@babel/core": ^7.7.2 + peerDependenciesMeta: + "@babel/core": + optional: true languageName: unknown linkType: soft From f375eced6c114199d975498bf65c9449ff644bbb Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 8 Nov 2020 20:57:28 +0000 Subject: [PATCH 77/89] merge amends --- .../src/__tests__/InlineSnapshots.test.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts index da83f28c79e0..5fefaf79825b 100644 --- a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts @@ -9,16 +9,6 @@ // (but a general require(require.resolve()) problem) jest.mock(require.resolve("prettier"), () => require("../__mocks__/prettier")); -jest.mock("graceful-fs", () => ({ - ...jest.createMockFromModule("fs"), - existsSync: jest.fn().mockReturnValue(true), - readdirSync: jest.fn().mockReturnValue([]), - statSync: jest.fn((filePath) => ({ - isDirectory: () => !filePath.endsWith(".js"), - })), -})); -jest.mock("prettier"); - import * as path from "path"; import { tmpdir } from "os"; import babelTraverse from "@babel/traverse"; From a641fdd79c47fd9dce32897ff806ec89e316a116 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 8 Nov 2020 20:59:09 +0000 Subject: [PATCH 78/89] merge amends --- .../jestAdapterInit.ts | 1 - packages/jest-snapshot/src/InlineSnapshots.ts | 164 ++++---- packages/jest-snapshot/src/State.ts | 2 +- .../src/__tests__/InlineSnapshots.test.ts | 368 +++++++++--------- 4 files changed, 260 insertions(+), 275 deletions(-) diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts index 07c3c8acc2da..6e9cb093bfac 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import type BabelTraverse from '@babel/traverse'; import throat from 'throat'; import type {JestEnvironment} from '@jest/environment'; import { diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 23e3edb05c08..085d45ce02a6 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -5,39 +5,38 @@ * LICENSE file in the root directory of this source tree. */ -import * as path from "path"; -import * as fs from "graceful-fs"; -import type { BuiltInParserName as PrettierParserName } from "prettier"; -import semver = require("semver"); -import type { PluginItem } from "@babel/core"; -import type traverse from "@babel/traverse"; -import type { Expression, File, Program } from "@babel/types"; - -import type { Config } from "@jest/types"; -import type { Frame } from "jest-message-util"; -import { escapeBacktickString } from "./utils"; +import * as path from 'path'; +import type {PluginItem} from '@babel/core'; +import type traverse from '@babel/traverse'; +import type {Expression, File, Program} from '@babel/types'; +import * as fs from 'graceful-fs'; +import type {BuiltInParserName as PrettierParserName} from 'prettier'; +import semver = require('semver'); +import type {Config} from '@jest/types'; +import type {Frame} from 'jest-message-util'; +import {escapeBacktickString} from './utils'; // TODO ignore this mess - with a Babel plugin, these will be MUCH, MUCH nicer for TS type BabelTraverse = typeof traverse; const babelTraverse: BabelTraverse = require(require.resolve( - "@babel/traverse", + '@babel/traverse', { - [Symbol.for("OUTSIDE_JEST_VM_RESOLVE_OPTION")]: true, - } as any + [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, + } as any, )).default; -const generate: typeof import("@babel/generator")["default"] = require(require.resolve( - "@babel/generator", - { [Symbol.for("OUTSIDE_JEST_VM_RESOLVE_OPTION")]: true } as any +const generate: typeof import('@babel/generator')['default'] = require(require.resolve( + '@babel/generator', + {[Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true} as any, )).default; -const { file, templateElement, templateLiteral } = require(require.resolve( - "@babel/types", +const {file, templateElement, templateLiteral} = require(require.resolve( + '@babel/types', { - [Symbol.for("OUTSIDE_JEST_VM_RESOLVE_OPTION")]: true, - } as any + [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, + } as any, )); -const { parseSync } = require(require.resolve("@babel/core", { - [Symbol.for("OUTSIDE_JEST_VM_RESOLVE_OPTION")]: true, -} as any)) as typeof import("@babel/core"); +const {parseSync} = require(require.resolve('@babel/core', { + [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, +} as any)) as typeof import('@babel/core'); export type InlineSnapshot = { snapshot: string; @@ -47,13 +46,13 @@ export type InlineSnapshot = { export function saveInlineSnapshots( snapshots: Array, - prettierPath: Config.Path + prettierPath: Config.Path, ): void { // TODO same as above const prettier = prettierPath ? (require(require.resolve(prettierPath, { - [Symbol.for("OUTSIDE_JEST_VM_RESOLVE_OPTION")]: true, - } as any)) as typeof import("prettier")) + [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, + } as any)) as typeof import('prettier')) : null; const snapshotsByFile = groupSnapshotsByFile(snapshots); @@ -62,7 +61,7 @@ export function saveInlineSnapshots( saveSnapshotsForFile( snapshotsByFile[sourceFilePath], sourceFilePath, - prettier && semver.gte(prettier.version, "1.5.0") ? prettier : null + prettier && semver.gte(prettier.version, '1.5.0') ? prettier : null, ); } } @@ -70,35 +69,22 @@ export function saveInlineSnapshots( const saveSnapshotsForFile = ( snapshots: Array, sourceFilePath: Config.Path, - prettier: any + prettier: any, ) => { - const sourceFile = fs.readFileSync(sourceFilePath, "utf8"); + const sourceFile = fs.readFileSync(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 presets = [require.resolve('babel-preset-current-node-syntax')]; const plugins: Array = []; if (/\.tsx?$/.test(sourceFilePath)) { plugins.push([ - require.resolve("@babel/plugin-syntax-typescript"), - { isTSX: sourceFilePath.endsWith("x") }, + 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", + 'TypeScript syntax plugin added by Jest snapshot', ]); } - // 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: PrettierParserName = prettier.getFileInfo - ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(sourceFilePath); - // Record the matcher names seen during traversal and pass them down one // by one to formatting parser. const snapshotMatcherNames: Array = []; @@ -119,18 +105,18 @@ const saveSnapshotsForFile = ( (sourceSoFar, nextSnapshot) => { if ( !nextSnapshot.node || - typeof nextSnapshot.node.start !== "number" || - typeof nextSnapshot.node.end !== "number" + typeof nextSnapshot.node.start !== 'number' || + typeof nextSnapshot.node.end !== 'number' ) { - throw new Error("Jest: no snapshot insert location found"); + throw new Error('Jest: no snapshot insert location found'); } return ( sourceSoFar.slice(0, nextSnapshot.node.start) + - generate(nextSnapshot.node, { retainLines: true }).code.trim() + + generate(nextSnapshot.node, {retainLines: true}).code.trim() + sourceSoFar.slice(nextSnapshot.node.end) ); }, - sourceFile + sourceFile, ); const newSourceFile = prettier @@ -138,7 +124,7 @@ const saveSnapshotsForFile = ( prettier, sourceFilePath, sourceFileWithSnapshots, - snapshotMatcherNames + snapshotMatcherNames, ) : sourceFileWithSnapshots; @@ -148,25 +134,25 @@ const saveSnapshotsForFile = ( }; const groupSnapshotsBy = ( - createKey: (inlineSnapshot: InlineSnapshot) => string + createKey: (inlineSnapshot: InlineSnapshot) => string, ) => (snapshots: Array) => snapshots.reduce>>( (object, inlineSnapshot) => { const key = createKey(inlineSnapshot); - return { ...object, [key]: (object[key] || []).concat(inlineSnapshot) }; + return {...object, [key]: (object[key] || []).concat(inlineSnapshot)}; }, - {} + {}, ); -const groupSnapshotsByFrame = groupSnapshotsBy(({ frame: { line, column } }) => - typeof line === "number" && typeof column === "number" +const groupSnapshotsByFrame = groupSnapshotsBy(({frame: {line, column}}) => + typeof line === 'number' && typeof column === 'number' ? `${line}:${column - 1}` - : "" + : '', ); -const groupSnapshotsByFile = groupSnapshotsBy(({ frame: { file } }) => file); +const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file); const indent = (snapshot: string, numIndents: number, indentation: string) => { - const lines = snapshot.split("\n"); + const lines = snapshot.split('\n'); // Prevent re-indentation of inline snapshots. if ( lines.length >= 2 && @@ -182,7 +168,7 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { return line; } else if (index !== lines.length - 1) { // Do not indent empty lines. - if (line === "") { + if (line === '') { return line; } @@ -193,13 +179,13 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { return indentation.repeat(numIndents) + line; } }) - .join("\n"); + .join('\n'); }; const resolveAst = (fileOrProgram: any): File => { // Flow uses a 'Program' parent node, babel expects a 'File'. let ast = fileOrProgram; - if (ast.type !== "File") { + if (ast.type !== 'File') { ast = file(ast, ast.comments, ast.tokens); delete ast.program.comments; } @@ -209,46 +195,46 @@ const resolveAst = (fileOrProgram: any): File => { const traverseAst = ( snapshots: Array, fileOrProgram: File | Program, - snapshotMatcherNames: Array + snapshotMatcherNames: Array, ) => { const ast = resolveAst(fileOrProgram); const groupedSnapshots = groupSnapshotsByFrame(snapshots); - const remainingSnapshots = new Set(snapshots.map(({ snapshot }) => snapshot)); + const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); babelTraverse(ast, { - CallExpression({ node }) { - const { arguments: args, callee } = node; + CallExpression({node}) { + const {arguments: args, callee} = node; if ( - callee.type !== "MemberExpression" || - callee.property.type !== "Identifier" || + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || callee.property.loc == null ) { return; } - const { line, column } = callee.property.loc.start; + 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." + 'Jest: Multiple inline snapshots for the same call are not supported.', ); } snapshotMatcherNames.push(callee.property.name); const snapshotIndex = args.findIndex( - ({ type }) => type === "TemplateLiteral" + ({type}) => type === 'TemplateLiteral', ); - const values = snapshotsForFrame.map((inlineSnapshot) => { + const values = snapshotsForFrame.map(inlineSnapshot => { inlineSnapshot.node = node; - const { snapshot } = inlineSnapshot; + const {snapshot} = inlineSnapshot; remainingSnapshots.delete(snapshot); return templateLiteral( - [templateElement({ raw: escapeBacktickString(snapshot) })], - [] + [templateElement({raw: escapeBacktickString(snapshot)})], + [], ); }); const replacementNode = values[0]; @@ -270,7 +256,7 @@ const runPrettier = ( prettier: any, sourceFilePath: string, sourceFileWithSnapshots: string, - snapshotMatcherNames: Array + snapshotMatcherNames: Array, ) => { // Resolve project configuration. // For older versions of Prettier, do not load configuration. @@ -310,21 +296,21 @@ const runPrettier = ( // This parser formats snapshots to the correct indentation. const createFormattingParser = ( snapshotMatcherNames: Array, - inferredParser: string + inferredParser: string, ) => ( text: string, parsers: Record any>, - options: any + options: any, ) => { // Workaround for https://github.com/prettier/prettier/issues/3150 options.parser = inferredParser; const ast = resolveAst(parsers[inferredParser](text)); babelTraverse(ast, { - CallExpression({ node: { arguments: args, callee } }) { + CallExpression({node: {arguments: args, callee}}) { if ( - callee.type !== "MemberExpression" || - callee.property.type !== "Identifier" || + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || !snapshotMatcherNames.includes(callee.property.name) || !callee.loc || callee.computed @@ -336,7 +322,7 @@ const createFormattingParser = ( let snapshot: string | undefined; for (let i = 0; i < args.length; i++) { const node = args[i]; - if (node.type === "TemplateLiteral") { + if (node.type === 'TemplateLiteral') { snapshotIndex = i; snapshot = node.quasis[0].value.raw; } @@ -351,9 +337,9 @@ const createFormattingParser = ( Math.ceil( useSpaces ? callee.loc.start.column / (options.tabWidth ?? 1) - : callee.loc.start.column / 2 // Each tab is 2 characters. + : callee.loc.start.column / 2, // Each tab is 2 characters. ), - useSpaces ? " ".repeat(options.tabWidth ?? 1) : "\t" + useSpaces ? ' '.repeat(options.tabWidth ?? 1) : '\t', ); const replacementNode = templateLiteral( @@ -362,7 +348,7 @@ const createFormattingParser = ( raw: snapshot, }), ], - [] + [], ); args[snapshotIndex] = replacementNode; }, @@ -374,7 +360,7 @@ const createFormattingParser = ( const simpleDetectParser = (filePath: Config.Path): PrettierParserName => { const extname = path.extname(filePath); if (/\.tsx?$/.test(extname)) { - return "typescript"; + return 'typescript'; } - return "babel"; + return 'babel'; }; diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index 7896192fbb36..6e143ef2d10e 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -9,7 +9,7 @@ import * as fs from 'graceful-fs'; import type {Config} from '@jest/types'; import {getStackTraceLines, getTopFrame} from 'jest-message-util'; import {InlineSnapshot, saveInlineSnapshots} from './InlineSnapshots'; -import type {BabelTraverse, Prettier, SnapshotData} from './types'; +import type {SnapshotData} from './types'; import { addExtraLineBreaks, getSnapshotData, diff --git a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts index 5fefaf79825b..381afa40116e 100644 --- a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts @@ -7,15 +7,15 @@ // TODO this is annoying // (but a general require(require.resolve()) problem) -jest.mock(require.resolve("prettier"), () => require("../__mocks__/prettier")); +jest.mock(require.resolve('prettier'), () => require('../__mocks__/prettier')); -import * as path from "path"; -import { tmpdir } from "os"; -import babelTraverse from "@babel/traverse"; -const prettier = require(require.resolve("prettier")); -import * as fs from "graceful-fs"; -import { Frame } from "jest-message-util"; -import { saveInlineSnapshots } from "../InlineSnapshots"; +import {tmpdir} from 'os'; +import * as path from 'path'; +import babelTraverse from '@babel/traverse'; +const prettier = require(require.resolve('prettier')); +import * as fs from 'graceful-fs'; +import {Frame} from 'jest-message-util'; +import {saveInlineSnapshots} from '../InlineSnapshots'; let dir; beforeEach(() => { @@ -27,27 +27,27 @@ beforeEach(() => { fs.mkdirSync(dir); }); -test("saveInlineSnapshots() replaces empty function call with a template literal", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() replaces empty function call with a template literal', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync(filename, `expect(1).toMatchInlineSnapshot();\n`); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 1 } as Frame, + frame: {column: 11, file: filename, line: 1} as Frame, snapshot: `1`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( - "expect(1).toMatchInlineSnapshot(`1`);\n" + expect(fs.readFileSync(filename, 'utf-8')).toBe( + 'expect(1).toMatchInlineSnapshot(`1`);\n', ); }); -test("saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, ` @@ -56,28 +56,28 @@ expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); expect(a).toMatchInlineSnapshot(); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); -`.trim() + "\n" +`.trim() + '\n', ); saveInlineSnapshots( - [2, 4, 5].map((line) => ({ - frame: { column: 11, file: filename, line } as Frame, + [2, 4, 5].map(line => ({ + frame: {column: 11, file: filename, line} as Frame, snapshot: `[1, 2]`, })), - null + null, ); - expect(fs.readFileSync(filename, "utf8")).toBe( + expect(fs.readFileSync(filename, 'utf8')).toBe( `const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); -` +`, ); }); -test("saveInlineSnapshots() can handle typescript without prettier", () => { - const filename = path.join(dir, "my.test.ts"); +test('saveInlineSnapshots() can handle typescript without prettier', () => { + const filename = path.join(dir, 'my.test.ts'); fs.writeFileSync( filename, ` @@ -86,32 +86,32 @@ interface Foo { } const a: [Foo, Foo] = [{ foo: 'one' }, { foo: 'two' }]; expect(a).toMatchInlineSnapshot(); -`.trim() + "\n" +`.trim() + '\n', ); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 5 } as Frame, + frame: {column: 11, file: filename, line: 5} as Frame, snapshot: `[{ foo: 'one' }, { foo: 'two' }]`, }, ], - null + null, ); - expect(fs.readFileSync(filename, "utf8")).toBe( + expect(fs.readFileSync(filename, 'utf8')).toBe( ` interface Foo { foo: string } const a: [Foo, Foo] = [{ foo: 'one' }, { foo: 'two' }]; expect(a).toMatchInlineSnapshot(\`[{ foo: 'one' }, { foo: 'two' }]\`); -`.trim() + "\n" +`.trim() + '\n', ); }); -test("saveInlineSnapshots() can handle tsx without prettier", () => { - const filename = path.join(dir, "my.test.tsx"); +test('saveInlineSnapshots() can handle tsx without prettier', () => { + const filename = path.join(dir, 'my.test.tsx'); fs.writeFileSync( filename, ` @@ -120,71 +120,71 @@ it('foos', async () => { const a = await Foo({ foo: "hello" }); expect(a).toMatchInlineSnapshot(); }) -`.trim() + "\n" +`.trim() + '\n', ); saveInlineSnapshots( [ { - frame: { column: 13, file: filename, line: 4 } as Frame, + frame: {column: 13, file: filename, line: 4} as Frame, snapshot: `
hello
`, }, ], - null + null, ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( ` it('foos', async () => { const Foo = (props: { foo: string }) =>
{props.foo}
; const a = await Foo({ foo: "hello" }); expect(a).toMatchInlineSnapshot(\`
hello
\`); }) -`.trim() + "\n" +`.trim() + '\n', ); }); -test("saveInlineSnapshots() can handle flow and jsx without prettier", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() can handle flow and jsx without prettier', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, ` const Foo = (props: { foo: string }) =>
{props.foo}
; const a = Foo({ foo: "hello" }); expect(a).toMatchInlineSnapshot(); -`.trim() + "\n" +`.trim() + '\n', ); fs.writeFileSync( - path.join(dir, ".babelrc"), + path.join(dir, '.babelrc'), JSON.stringify({ presets: [ - require.resolve("@babel/preset-flow"), - require.resolve("@babel/preset-react"), + require.resolve('@babel/preset-flow'), + require.resolve('@babel/preset-react'), ], - }) + }), ); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 3 } as Frame, + frame: {column: 11, file: filename, line: 3} as Frame, snapshot: `
hello
`, }, ], - null + null, ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( ` const Foo = (props: { foo: string }) =>
{props.foo}
; const a = Foo({ foo: "hello" }); expect(a).toMatchInlineSnapshot(\`
hello
\`); -`.trim() + "\n" +`.trim() + '\n', ); }); -test("saveInlineSnapshots() can use prettier to fix formatting for whole file", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() can use prettier to fix formatting for whole file', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, ` @@ -193,98 +193,98 @@ expect(a).toMatchInlineSnapshot(\`an out-of-date and also multi-line snapshot\`); expect(a).toMatchInlineSnapshot(); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); -`.trim() + "\n" +`.trim() + '\n', ); saveInlineSnapshots( - [2, 4, 5].map((line) => ({ - frame: { column: 11, file: filename, line } as Frame, + [2, 4, 5].map(line => ({ + frame: {column: 11, file: filename, line} as Frame, snapshot: `[1, 2]`, })), - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( `const a = [1, 2]; expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); expect(a).toMatchInlineSnapshot(\`[1, 2]\`); -` +`, ); }); -test.each([["babel"], ["flow"], ["typescript"]])( - "saveInlineSnapshots() replaces existing template literal - %s parser", - (parser) => { - const filename = path.join(dir, "my.test.js"); - fs.writeFileSync(filename, "expect(1).toMatchInlineSnapshot(`2`);\n"); +test.each([['babel'], ['flow'], ['typescript']])( + 'saveInlineSnapshots() replaces existing template literal - %s parser', + parser => { + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot(`2`);\n'); - (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ parser }); + (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({parser}); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 1 } as Frame, + frame: {column: 11, file: filename, line: 1} as Frame, snapshot: `1`, }, ], - "prettier" + 'prettier', ); expect( - (prettier.resolveConfig.sync as jest.Mock).mock.results[0].value - ).toEqual({ parser }); + (prettier.resolveConfig.sync as jest.Mock).mock.results[0].value, + ).toEqual({parser}); - expect(fs.readFileSync(filename, "utf-8")).toBe( - "expect(1).toMatchInlineSnapshot(`1`);\n" + expect(fs.readFileSync(filename, 'utf-8')).toBe( + 'expect(1).toMatchInlineSnapshot(`1`);\n', ); - } + }, ); -test("saveInlineSnapshots() replaces existing template literal with property matchers", () => { - const filename = path.join(dir, "my.test.js"); - fs.writeFileSync(filename, "expect(1).toMatchInlineSnapshot({}, `2`);\n"); +test('saveInlineSnapshots() replaces existing template literal with property matchers', () => { + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot({}, `2`);\n'); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 1 } as Frame, + frame: {column: 11, file: filename, line: 1} as Frame, snapshot: `1`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( - "expect(1).toMatchInlineSnapshot({}, `1`);\n" + expect(fs.readFileSync(filename, 'utf-8')).toBe( + 'expect(1).toMatchInlineSnapshot({}, `1`);\n', ); }); -test.each(["prettier", null])( - "saveInlineSnapshots() creates template literal with property matchers", - (prettierModule) => { - const filename = path.join(dir, "my.test.js"); - fs.writeFileSync(filename, "expect(1).toMatchInlineSnapshot({});\n"); +test.each(['prettier', null])( + 'saveInlineSnapshots() creates template literal with property matchers', + prettierModule => { + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot({});\n'); saveInlineSnapshots( [ { - frame: { column: 11, file: filename, line: 1 } as Frame, + frame: {column: 11, file: filename, line: 1} as Frame, snapshot: `1`, }, ], - prettierModule + prettierModule, ); - expect(fs.readFileSync(filename, "utf-8")).toBe( - "expect(1).toMatchInlineSnapshot({}, `1`);\n" + expect(fs.readFileSync(filename, 'utf-8')).toBe( + 'expect(1).toMatchInlineSnapshot({}, `1`);\n', ); - } + }, ); -test("saveInlineSnapshots() throws if frame does not match", () => { - const filename = path.join(dir, "my.test.js"); - fs.writeFileSync(filename, "expect(1).toMatchInlineSnapshot();\n"); +test('saveInlineSnapshots() throws if frame does not match', () => { + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot();\n'); const save = () => saveInlineSnapshots( @@ -298,45 +298,45 @@ test("saveInlineSnapshots() throws if frame does not match", () => { snapshot: `1`, }, ], - "prettier" + 'prettier', ); expect(save).toThrowError(/Couldn't locate all inline snapshots./); }); -test("saveInlineSnapshots() throws if multiple calls to to the same location", () => { - const filename = path.join(dir, "my.test.js"); - fs.writeFileSync(filename, "expect(1).toMatchInlineSnapshot();\n"); +test('saveInlineSnapshots() throws if multiple calls to to the same location', () => { + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync(filename, 'expect(1).toMatchInlineSnapshot();\n'); - const frame = { column: 11, file: filename, line: 1 } as Frame; + const frame = {column: 11, file: filename, line: 1} as Frame; const save = () => saveInlineSnapshots( [ - { frame, snapshot: `1` }, - { frame, snapshot: `2` }, + {frame, snapshot: `1`}, + {frame, snapshot: `2`}, ], - "prettier" + 'prettier', ); expect(save).toThrowError( - /Multiple inline snapshots for the same call are not supported./ + /Multiple inline snapshots for the same call are not supported./, ); }); -test("saveInlineSnapshots() uses escaped backticks", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() uses escaped backticks', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync(filename, 'expect("`").toMatchInlineSnapshot();\n'); - const frame = { column: 13, file: filename, line: 1 } as Frame; - saveInlineSnapshots([{ frame, snapshot: "`" }], "prettier"); + const frame = {column: 13, file: filename, line: 1} as Frame; + saveInlineSnapshots([{frame, snapshot: '`'}], 'prettier'); - expect(fs.readFileSync(filename, "utf-8")).toBe( - 'expect("`").toMatchInlineSnapshot(`\\``);\n' + expect(fs.readFileSync(filename, 'utf-8')).toBe( + 'expect("`").toMatchInlineSnapshot(`\\``);\n', ); }); -test("saveInlineSnapshots() works with non-literals in expect call", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() works with non-literals in expect call', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync(filename, `expect({a: 'a'}).toMatchInlineSnapshot();\n`); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -346,25 +346,25 @@ test("saveInlineSnapshots() works with non-literals in expect call", () => { saveInlineSnapshots( [ { - frame: { column: 18, file: filename, line: 1 } as Frame, + frame: {column: 18, file: filename, line: 1} as Frame, snapshot: `{a: 'a'}`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( - "expect({a: 'a'}).toMatchInlineSnapshot(`{a: 'a'}`);\n" + expect(fs.readFileSync(filename, 'utf-8')).toBe( + "expect({a: 'a'}).toMatchInlineSnapshot(`{a: 'a'}`);\n", ); }); -test("saveInlineSnapshots() indents multi-line snapshots with spaces", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + - "});\n" + '});\n', ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -374,39 +374,39 @@ test("saveInlineSnapshots() indents multi-line snapshots with spaces", () => { saveInlineSnapshots( [ { - frame: { column: 20, file: filename, line: 2 } as Frame, + frame: {column: 20, file: filename, line: 2} as Frame, snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " a: 'a'\n" + - " }\n" + - " `);\n" + - "});\n" + ' }\n' + + ' `);\n' + + '});\n', ); }); -test("saveInlineSnapshots() does not re-indent error snapshots", () => { - const filename = path.join(__dirname, "my.test.js"); +test('saveInlineSnapshots() does not re-indent error snapshots', () => { + const filename = path.join(__dirname, 'my.test.js'); (fs.readFileSync as jest.Mock).mockImplementation( () => "it('is an error test', () => {\n" + - " expect(() => {\n" + + ' expect(() => {\n' + " throw new Error(['a', 'b'].join('\\n'));\n" + - " }).toThrowErrorMatchingInlineSnapshot(`\n" + + ' }).toThrowErrorMatchingInlineSnapshot(`\n' + ' "a\n' + ' b"\n' + - " `);\n" + - "});\n" + + ' `);\n' + + '});\n' + "it('is another test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + - "});\n" + '});\n', ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -416,48 +416,48 @@ test("saveInlineSnapshots() does not re-indent error snapshots", () => { saveInlineSnapshots( [ { - frame: { column: 20, file: filename, line: 10 } as Frame, + frame: {column: 20, file: filename, line: 10} as Frame, snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], prettier, - babelTraverse + babelTraverse, ); expect(fs.writeFileSync).toHaveBeenCalledWith( filename, "it('is an error test', () => {\n" + - " expect(() => {\n" + + ' expect(() => {\n' + " throw new Error(['a', 'b'].join('\\n'));\n" + - " }).toThrowErrorMatchingInlineSnapshot(`\n" + + ' }).toThrowErrorMatchingInlineSnapshot(`\n' + ' "a\n' + ' b"\n' + - " `);\n" + - "});\n" + + ' `);\n' + + '});\n' + "it('is another test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " a: 'a'\n" + - " }\n" + - " `);\n" + - "});\n" + ' }\n' + + ' `);\n' + + '});\n', ); }); -test("saveInlineSnapshots() does not re-indent already indented snapshots", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() does not re-indent already indented snapshots', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + - "});\n" + + '});\n' + "it('is a another test', () => {\n" + " expect({b: 'b'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " b: 'b'\n" + - " }\n" + - " `);\n" + - "});\n" + ' }\n' + + ' `);\n' + + '});\n', ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -467,38 +467,38 @@ test("saveInlineSnapshots() does not re-indent already indented snapshots", () = saveInlineSnapshots( [ { - frame: { column: 20, file: filename, line: 2 } as Frame, + frame: {column: 20, file: filename, line: 2} as Frame, snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " a: 'a'\n" + - " }\n" + - " `);\n" + - "});\n" + + ' }\n' + + ' `);\n' + + '});\n' + "it('is a another test', () => {\n" + " expect({b: 'b'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " b: 'b'\n" + - " }\n" + - " `);\n" + - "});\n" + ' }\n' + + ' `);\n' + + '});\n', ); }); -test("saveInlineSnapshots() indents multi-line snapshots with tabs", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() indents multi-line snapshots with tabs', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, "it('is a test', () => {\n" + " expect({a: 'a'}).toMatchInlineSnapshot();\n" + - "});\n" + '});\n', ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -509,29 +509,29 @@ test("saveInlineSnapshots() indents multi-line snapshots with tabs", () => { saveInlineSnapshots( [ { - frame: { column: 20, file: filename, line: 2 } as Frame, + frame: {column: 20, file: filename, line: 2} as Frame, snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () => {\n" + "\texpect({a: 'a'}).toMatchInlineSnapshot(`\n" + - "\t\tObject {\n" + + '\t\tObject {\n' + "\t\t a: 'a'\n" + - "\t\t}\n" + - "\t`);\n" + - "});\n" + '\t\t}\n' + + '\t`);\n' + + '});\n', ); }); -test("saveInlineSnapshots() indents snapshots after prettier reformats", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() indents snapshots after prettier reformats', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, - "it('is a test', () => expect({a: 'a'}).toMatchInlineSnapshot());\n" + "it('is a test', () => expect({a: 'a'}).toMatchInlineSnapshot());\n", ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -541,28 +541,28 @@ test("saveInlineSnapshots() indents snapshots after prettier reformats", () => { saveInlineSnapshots( [ { - frame: { column: 40, file: filename, line: 1 } as Frame, + frame: {column: 40, file: filename, line: 1} as Frame, snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () =>\n" + " expect({a: 'a'}).toMatchInlineSnapshot(`\n" + - " Object {\n" + + ' Object {\n' + " a: 'a'\n" + - " }\n" + - " `));\n" + ' }\n' + + ' `));\n', ); }); -test("saveInlineSnapshots() does not indent empty lines", () => { - const filename = path.join(dir, "my.test.js"); +test('saveInlineSnapshots() does not indent empty lines', () => { + const filename = path.join(dir, 'my.test.js'); fs.writeFileSync( filename, - "it('is a test', () => expect(`hello\n\nworld`).toMatchInlineSnapshot());\n" + "it('is a test', () => expect(`hello\n\nworld`).toMatchInlineSnapshot());\n", ); (prettier.resolveConfig.sync as jest.Mock).mockReturnValue({ bracketSpacing: false, @@ -572,19 +572,19 @@ test("saveInlineSnapshots() does not indent empty lines", () => { saveInlineSnapshots( [ { - frame: { column: 9, file: filename, line: 3 } as Frame, + frame: {column: 9, file: filename, line: 3} as Frame, snapshot: `\nhello\n\nworld\n`, }, ], - "prettier" + 'prettier', ); - expect(fs.readFileSync(filename, "utf-8")).toBe( + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is a test', () =>\n" + - " expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n" + - " hello\n" + - "\n" + - " world\n" + - " `));\n" + ' expect(`hello\n\nworld`).toMatchInlineSnapshot(`\n' + + ' hello\n' + + '\n' + + ' world\n' + + ' `));\n', ); }); From 81bc81e8e9c37ba3092b09ac5240175ad36339b4 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Tue, 10 Nov 2020 21:20:12 +0000 Subject: [PATCH 79/89] semantic merge for test --- .../src/__tests__/InlineSnapshots.test.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts index 381afa40116e..cce1679c4b28 100644 --- a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts @@ -393,10 +393,10 @@ test('saveInlineSnapshots() indents multi-line snapshots with spaces', () => { }); test('saveInlineSnapshots() does not re-indent error snapshots', () => { - const filename = path.join(__dirname, 'my.test.js'); - (fs.readFileSync as jest.Mock).mockImplementation( - () => - "it('is an error test', () => {\n" + + const filename = path.join(dir, 'my.test.js'); + fs.writeFileSync( + filename, + "it('is an error test', () => {\n" + ' expect(() => {\n' + " throw new Error(['a', 'b'].join('\\n'));\n" + ' }).toThrowErrorMatchingInlineSnapshot(`\n' + @@ -420,12 +420,10 @@ test('saveInlineSnapshots() does not re-indent error snapshots', () => { snapshot: `\nObject {\n a: 'a'\n}\n`, }, ], - prettier, - babelTraverse, + 'prettier', ); - expect(fs.writeFileSync).toHaveBeenCalledWith( - filename, + expect(fs.readFileSync(filename, 'utf-8')).toBe( "it('is an error test', () => {\n" + ' expect(() => {\n' + " throw new Error(['a', 'b'].join('\\n'));\n" + From 36efffa035e0d1b452a34c05cd34063d7fa806a0 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Wed, 11 Nov 2020 21:36:33 +0000 Subject: [PATCH 80/89] lint --- packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts index cce1679c4b28..5cbff02a0cb4 100644 --- a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts @@ -11,7 +11,6 @@ jest.mock(require.resolve('prettier'), () => require('../__mocks__/prettier')); import {tmpdir} from 'os'; import * as path from 'path'; -import babelTraverse from '@babel/traverse'; const prettier = require(require.resolve('prettier')); import * as fs from 'graceful-fs'; import {Frame} from 'jest-message-util'; From f261822fe6fea0b9aebf1a611caefb9a56e82747 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 15:58:14 +0000 Subject: [PATCH 81/89] use babel stuff --- packages/jest-snapshot/src/InlineSnapshots.ts | 33 +++----- .../src/__tests__/InlineSnapshots.test.ts | 2 - yarn.lock | 81 +------------------ 3 files changed, 13 insertions(+), 103 deletions(-) diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 085d45ce02a6..787fee582247 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -7,7 +7,6 @@ import * as path from 'path'; import type {PluginItem} from '@babel/core'; -import type traverse from '@babel/traverse'; import type {Expression, File, Program} from '@babel/types'; import * as fs from 'graceful-fs'; import type {BuiltInParserName as PrettierParserName} from 'prettier'; @@ -16,27 +15,18 @@ import type {Config} from '@jest/types'; import type {Frame} from 'jest-message-util'; import {escapeBacktickString} from './utils'; -// TODO ignore this mess - with a Babel plugin, these will be MUCH, MUCH nicer for TS -type BabelTraverse = typeof traverse; -const babelTraverse: BabelTraverse = require(require.resolve( +const babelTraverse = (requireOutside( '@babel/traverse', - { - [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, - } as any, -)).default; -const generate: typeof import('@babel/generator')['default'] = require(require.resolve( +) as typeof import('@babel/traverse')).default; +const generate = (requireOutside( '@babel/generator', - {[Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true} as any, -)).default; -const {file, templateElement, templateLiteral} = require(require.resolve( +) as typeof import('@babel/generator')).default; +const {file, templateElement, templateLiteral} = requireOutside( '@babel/types', - { - [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, - } as any, -)); -const {parseSync} = require(require.resolve('@babel/core', { - [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, -} as any)) as typeof import('@babel/core'); +) as typeof import('@babel/types'); +const {parseSync} = requireOutside( + '@babel/core', +) as typeof import('@babel/core'); export type InlineSnapshot = { snapshot: string; @@ -48,11 +38,8 @@ export function saveInlineSnapshots( snapshots: Array, prettierPath: Config.Path, ): void { - // TODO same as above const prettier = prettierPath - ? (require(require.resolve(prettierPath, { - [Symbol.for('OUTSIDE_JEST_VM_RESOLVE_OPTION')]: true, - } as any)) as typeof import('prettier')) + ? (requireOutside(prettierPath) as typeof import('prettier')) : null; const snapshotsByFile = groupSnapshotsByFile(snapshots); diff --git a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts index 5cbff02a0cb4..e033cf6aee1e 100644 --- a/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +++ b/packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -// TODO this is annoying -// (but a general require(require.resolve()) problem) jest.mock(require.resolve('prettier'), () => require('../__mocks__/prettier')); import {tmpdir} from 'os'; diff --git a/yarn.lock b/yarn.lock index 5764691c6056..629fd24c3150 100644 --- a/yarn.lock +++ b/yarn.lock @@ -131,18 +131,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.5.0": - version: 7.12.5 - resolution: "@babel/generator@npm:7.12.5" - dependencies: - "@babel/types": ^7.12.5 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: 7706cb3d29060e6dfcdbc982ded9a02f0bda36329cc35aabc6b3f9f30ef7b3b3bcaba51c24714663f3ea9529994cd3461ab8a664b26398208b9b9a96476bf43c - languageName: node - linkType: hard - -"@babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2": version: 7.12.5 resolution: "@babel/generator@npm:7.12.5" dependencies: @@ -442,16 +431,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.10.4, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.12.5, @babel/parser@npm:^7.7.0": - version: 7.12.5 - resolution: "@babel/parser@npm:7.12.5" - bin: - parser: ./bin/babel-parser.js - checksum: ff03d2389e32e3710c759d7bbcffc2d2e0637498e3a36aeaa0dbf961c48adb7027c393d0458247e54e24fed66ce0ea00e3e8d63089d22931e4175ee398727c15 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.7.2": +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.10.4, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.12.5, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.7.2": version: 7.12.5 resolution: "@babel/parser@npm:7.12.5" bin: @@ -1187,19 +1167,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.12.5": - version: 7.12.5 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.12.5" - dependencies: - "@babel/helper-builder-react-jsx-experimental": ^7.12.1 - "@babel/helper-plugin-utils": ^7.10.4 - "@babel/plugin-syntax-jsx": ^7.12.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fec194e2f4dfbee97c6c18c2af6fd037b97bfe6024df2548d4453074fd687239bc2d452d9ef1ecc20fb63d2074178994c2c659ffb630ca4d45d4e9462ba643b6 - languageName: node - linkType: hard - "@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.12.1": version: 7.12.1 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.12.1" @@ -1236,20 +1203,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.12.5": - version: 7.12.5 - resolution: "@babel/plugin-transform-react-jsx@npm:7.12.5" - dependencies: - "@babel/helper-builder-react-jsx": ^7.10.4 - "@babel/helper-builder-react-jsx-experimental": ^7.12.1 - "@babel/helper-plugin-utils": ^7.10.4 - "@babel/plugin-syntax-jsx": ^7.12.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 254ddc1097fe88acb3c25f01a439f97df0124bf08a73a3e27418029f4bb47cd761d0430615713380afba02f0ca5ce26c44351228d084214ecb024852bff0d473 - languageName: node - linkType: hard - "@babel/plugin-transform-react-pure-annotations@npm:^7.12.1": version: 7.12.1 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.12.1" @@ -1515,24 +1468,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:*, @babel/preset-react@npm:^7.0.0, @babel/preset-react@npm:^7.12.1, @babel/preset-react@npm:^7.9.4": - version: 7.12.5 - resolution: "@babel/preset-react@npm:7.12.5" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - "@babel/plugin-transform-react-display-name": ^7.12.1 - "@babel/plugin-transform-react-jsx": ^7.12.5 - "@babel/plugin-transform-react-jsx-development": ^7.12.5 - "@babel/plugin-transform-react-jsx-self": ^7.12.1 - "@babel/plugin-transform-react-jsx-source": ^7.12.1 - "@babel/plugin-transform-react-pure-annotations": ^7.12.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1083243ebf652f0895f407b2f8f74c602e602056f225b5c9e9f181019e76d6d475130749b4c543437ca78ee84fa54b3552bcd5a7bb2f40de26cdd3adffe7222a - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.7.2": +"@babel/preset-react@npm:*, @babel/preset-react@npm:^7.0.0, @babel/preset-react@npm:^7.12.1, @babel/preset-react@npm:^7.7.2, @babel/preset-react@npm:^7.9.4": version: 7.12.5 resolution: "@babel/preset-react@npm:7.12.5" dependencies: @@ -1634,17 +1570,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.12.5": - version: 7.12.6 - resolution: "@babel/types@npm:7.12.6" - dependencies: - "@babel/helper-validator-identifier": ^7.10.4 - lodash: ^4.17.19 - to-fast-properties: ^2.0.0 - checksum: e8d02f859c16c8ae941a1eb84954189eacdd9488c8f9ad54c29dedf2bf8456f45c7fe401c54ea2c4d45d890d865aaac0283a78b62a87f796e92078eac49aa040 - languageName: node - linkType: hard - "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" From 857d5eb49e5b959c4bbfde9424e52b114fe610d9 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 18:52:06 +0000 Subject: [PATCH 82/89] ts-expect-error now needed because we no longer define the requireOutside global --- packages/jest-snapshot/src/InlineSnapshots.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 787fee582247..4a31cc4170bc 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -15,15 +15,19 @@ import type {Config} from '@jest/types'; import type {Frame} from 'jest-message-util'; import {escapeBacktickString} from './utils'; +// @ts-expect-error requireOutside Babel transform const babelTraverse = (requireOutside( '@babel/traverse', ) as typeof import('@babel/traverse')).default; +// @ts-expect-error requireOutside Babel transform const generate = (requireOutside( '@babel/generator', ) as typeof import('@babel/generator')).default; +// @ts-expect-error requireOutside Babel transform const {file, templateElement, templateLiteral} = requireOutside( '@babel/types', ) as typeof import('@babel/types'); +// @ts-expect-error requireOutside Babel transform const {parseSync} = requireOutside( '@babel/core', ) as typeof import('@babel/core'); @@ -39,7 +43,8 @@ export function saveInlineSnapshots( prettierPath: Config.Path, ): void { const prettier = prettierPath - ? (requireOutside(prettierPath) as typeof import('prettier')) + ? // @ts-expect-error requireOutside Babel transform + (requireOutside(prettierPath) as typeof import('prettier')) : null; const snapshotsByFile = groupSnapshotsByFile(snapshots); From 7f97e87d4a51599208022382c5fbefcfd3e40a65 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 18:54:45 +0000 Subject: [PATCH 83/89] prettier 2 devdep --- packages/jest-snapshot/package.json | 4 ++-- .../jest-snapshot/src/__mocks__/prettier.js | 2 +- yarn.lock | 17 ++++------------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index b100ff9f1cae..d32213f621ed 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -21,7 +21,7 @@ "@babel/types": "^7.0.0", "@jest/types": "^26.6.2", "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^0.1.2", "chalk": "^4.0.0", "expect": "^26.6.2", @@ -47,7 +47,7 @@ "@types/semver": "^7.1.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.2.0", - "prettier": "^1.19.1" + "prettier": "^2.0.0" }, "peerDependencies": { "@babel/core": "^7.7.2" diff --git a/packages/jest-snapshot/src/__mocks__/prettier.js b/packages/jest-snapshot/src/__mocks__/prettier.js index 38a398821537..8f3880a3dc4c 100644 --- a/packages/jest-snapshot/src/__mocks__/prettier.js +++ b/packages/jest-snapshot/src/__mocks__/prettier.js @@ -13,7 +13,7 @@ module.exports = { pluginSearchDirs: [require('path').dirname(require.resolve('prettier'))], ...opts, }), - getFileInfo: {sync: () => ({inferredParser: 'babylon'})}, + getFileInfo: {sync: () => ({inferredParser: 'babel'})}, resolveConfig: {sync: jest.fn()}, version: prettier.version, }; diff --git a/yarn.lock b/yarn.lock index 629fd24c3150..bf37c14ae2df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3763,7 +3763,7 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:*, @types/prettier@npm:^2.0.0": +"@types/prettier@npm:*, @types/prettier@npm:^2.0.0, @types/prettier@npm:^2.1.5": version: 2.1.5 resolution: "@types/prettier@npm:2.1.5" checksum: bc6271235d881fa49b2f03e8e9242a7be8ecbcdcffeb7e31347afd0343f5f5e372ce65fe257e44254156737935c9249c9722cbe991dfad9aab72056c6acdbdaa @@ -12263,7 +12263,7 @@ fsevents@~2.1.2: "@types/babel__traverse": ^7.0.4 "@types/graceful-fs": ^4.1.3 "@types/natural-compare": ^1.4.0 - "@types/prettier": ^2.0.0 + "@types/prettier": ^2.1.5 "@types/semver": ^7.1.0 ansi-regex: ^5.0.0 ansi-styles: ^4.2.0 @@ -12278,7 +12278,7 @@ fsevents@~2.1.2: jest-message-util: ^26.6.2 jest-resolve: ^26.6.2 natural-compare: ^1.4.0 - prettier: ^1.19.1 + prettier: ^2.0.0 pretty-format: ^26.6.2 semver: ^7.3.2 peerDependencies: @@ -16210,16 +16210,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"prettier@npm:^1.19.1": - version: 1.19.1 - resolution: "prettier@npm:1.19.1" - bin: - prettier: ./bin-prettier.js - checksum: e5fcdfe5e159ef5c5480245353cf8fb5bbd1b8afff266f31f281641825238f8a645e58472f77cd75a09ccc45d44c335466e8d901ec138c2bda05e1bd6ea1077c - languageName: node - linkType: hard - -"prettier@npm:^2.0.1, prettier@npm:^2.1.1": +"prettier@npm:^2.0.0, prettier@npm:^2.0.1, prettier@npm:^2.1.1": version: 2.1.2 resolution: "prettier@npm:2.1.2" bin: From d72b98fca2d9ef8f54f3b47fcff53fa8f69c8e4f Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 19:24:34 +0000 Subject: [PATCH 84/89] types --- packages/jest-snapshot/src/InlineSnapshots.ts | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 4a31cc4170bc..858a1e761eb2 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -9,7 +9,10 @@ import * as path from 'path'; import type {PluginItem} from '@babel/core'; import type {Expression, File, Program} from '@babel/types'; import * as fs from 'graceful-fs'; -import type {BuiltInParserName as PrettierParserName} from 'prettier'; +import type { + BuiltInParserName as PrettierParserName, + ParserOptions as PrettierParserOptions, +} from 'prettier'; import semver = require('semver'); import type {Config} from '@jest/types'; import type {Frame} from 'jest-message-util'; @@ -32,6 +35,13 @@ const {parseSync} = requireOutside( '@babel/core', ) as typeof import('@babel/core'); +type Prettier = typeof import('prettier'); +type PrettierFunctionParser = ( + text: string, + parsers: Record, + options: PrettierParserOptions, +) => File; + export type InlineSnapshot = { snapshot: string; frame: Frame; @@ -44,8 +54,8 @@ export function saveInlineSnapshots( ): void { const prettier = prettierPath ? // @ts-expect-error requireOutside Babel transform - (requireOutside(prettierPath) as typeof import('prettier')) - : null; + (requireOutside(prettierPath) as Prettier) + : undefined; const snapshotsByFile = groupSnapshotsByFile(snapshots); @@ -53,7 +63,7 @@ export function saveInlineSnapshots( saveSnapshotsForFile( snapshotsByFile[sourceFilePath], sourceFilePath, - prettier && semver.gte(prettier.version, '1.5.0') ? prettier : null, + prettier && semver.gte(prettier.version, '1.5.0') ? prettier : undefined, ); } } @@ -61,7 +71,7 @@ export function saveInlineSnapshots( const saveSnapshotsForFile = ( snapshots: Array, sourceFilePath: Config.Path, - prettier: any, + prettier?: Prettier, ) => { const sourceFile = fs.readFileSync(sourceFilePath, 'utf8'); @@ -245,7 +255,7 @@ const traverseAst = ( }; const runPrettier = ( - prettier: any, + prettier: Prettier, sourceFilePath: string, sourceFileWithSnapshots: string, snapshotMatcherNames: Array, @@ -262,7 +272,14 @@ const runPrettier = ( // For older versions of Prettier, fallback to a simple parser detection. const inferredParser = prettier.getFileInfo ? prettier.getFileInfo.sync(sourceFilePath).inferredParser - : (config && config.parser) || simpleDetectParser(sourceFilePath); + : (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 @@ -289,15 +306,11 @@ const runPrettier = ( const createFormattingParser = ( snapshotMatcherNames: Array, inferredParser: string, -) => ( - text: string, - parsers: Record any>, - options: any, -) => { +): PrettierFunctionParser => (text, parsers, options) => { // Workaround for https://github.com/prettier/prettier/issues/3150 options.parser = inferredParser; - const ast = resolveAst(parsers[inferredParser](text)); + const ast = resolveAst(parsers[inferredParser](text, parsers, options)); babelTraverse(ast, { CallExpression({node: {arguments: args, callee}}) { if ( From 8364ca1eb2be43d7292ca36f32a0b5728ebf36c1 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 19:39:41 +0000 Subject: [PATCH 85/89] babel-preset-current-node-syntax v1 --- packages/jest-snapshot/package.json | 2 +- yarn.lock | 23 +---------------------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index d32213f621ed..1e9c47693a92 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -22,7 +22,7 @@ "@jest/types": "^26.6.2", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^0.1.2", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^26.6.2", "graceful-fs": "^4.2.4", diff --git a/yarn.lock b/yarn.lock index bf37c14ae2df..e94d49a253a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4991,27 +4991,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^0.1.2": - version: 0.1.4 - resolution: "babel-preset-current-node-syntax@npm:0.1.4" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f54dfafd352b5671dfe549d6e2d692ec4328988bc2040f3c67b2dd4185c85ced29b39440f6f6bfd8145ad00e2cc8b39c5a218ef4bd7c08c48e3afec0583f4125 - languageName: node - linkType: hard - "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.0 resolution: "babel-preset-current-node-syntax@npm:1.0.0" @@ -12267,7 +12246,7 @@ fsevents@~2.1.2: "@types/semver": ^7.1.0 ansi-regex: ^5.0.0 ansi-styles: ^4.2.0 - babel-preset-current-node-syntax: ^0.1.2 + babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 expect: ^26.6.2 graceful-fs: ^4.2.4 From 55363592e9f3eb09b050b478581a97097f03f37b Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 19:48:31 +0000 Subject: [PATCH 86/89] jest-circus config is passed already --- .../jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts | 3 --- .../src/legacy-code-todo-rewrite/jestAdapterInit.ts | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts index bafcb8b47e6e..e16cc8a0a271 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts @@ -30,15 +30,12 @@ const jestAdapter = async ( FRAMEWORK_INITIALIZER, ); - const {prettierPath} = config; - const {globals, snapshotState} = await initialize({ config, environment, globalConfig, localRequire: runtime.requireModule.bind(runtime), parentProcess: process, - prettierPath, sendMessageToJest, setGlobalsForRuntime: runtime.setGlobalsForRuntime?.bind(runtime), testPath, diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts index 6e9cb093bfac..bf4506a218b5 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts @@ -48,7 +48,6 @@ export const initialize = async ({ globalConfig, localRequire, parentProcess, - prettierPath, sendMessageToJest, setGlobalsForRuntime, testPath, @@ -59,7 +58,6 @@ export const initialize = async ({ localRequire: (path: Config.Path) => T; testPath: Config.Path; parentProcess: Process; - prettierPath: Config.Path; sendMessageToJest?: TestFileEvent; setGlobalsForRuntime?: (globals: JestGlobals) => void; }): Promise<{ @@ -159,7 +157,7 @@ export const initialize = async ({ const snapshotPath = snapshotResolver.resolveSnapshotPath(testPath); const snapshotState = new SnapshotState(snapshotPath, { expand, - prettierPath, + prettierPath: config.prettierPath, updateSnapshot, }); // @ts-expect-error: snapshotState is a jest extension of `expect` From c4156b0a241d5b98135982346107bcabe044c92a Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sat, 14 Nov 2020 20:02:14 +0000 Subject: [PATCH 87/89] update snapshot formatting --- .../src/__tests__/__snapshots__/hoistPlugin.test.ts.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-jest-hoist/src/__tests__/__snapshots__/hoistPlugin.test.ts.snap b/packages/babel-plugin-jest-hoist/src/__tests__/__snapshots__/hoistPlugin.test.ts.snap index 09486e91ae92..b90662f2176e 100644 --- a/packages/babel-plugin-jest-hoist/src/__tests__/__snapshots__/hoistPlugin.test.ts.snap +++ b/packages/babel-plugin-jest-hoist/src/__tests__/__snapshots__/hoistPlugin.test.ts.snap @@ -12,14 +12,14 @@ _getJestObj().mock("./App", () => () => /*#__PURE__*/ _jsxDEV( "div", { - children: "Hello world" + children: "Hello world", }, void 0, false, { fileName: _jsxFileName, lineNumber: 1, - columnNumber: 32 + columnNumber: 32, }, this ) From b6327e4cced88e58c18f505db6f78238d138ae8e Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sun, 15 Nov 2020 10:57:07 +0100 Subject: [PATCH 88/89] use upstream types --- packages/jest-snapshot/src/InlineSnapshots.ts | 20 +++++++------------ packages/jest-snapshot/src/types.ts | 3 --- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 858a1e761eb2..e7a9accaf76e 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -10,8 +10,8 @@ import type {PluginItem} from '@babel/core'; import type {Expression, File, Program} from '@babel/types'; import * as fs from 'graceful-fs'; import type { + CustomParser as PrettierCustomParser, BuiltInParserName as PrettierParserName, - ParserOptions as PrettierParserOptions, } from 'prettier'; import semver = require('semver'); import type {Config} from '@jest/types'; @@ -36,11 +36,6 @@ const {parseSync} = requireOutside( ) as typeof import('@babel/core'); type Prettier = typeof import('prettier'); -type PrettierFunctionParser = ( - text: string, - parsers: Record, - options: PrettierParserOptions, -) => File; export type InlineSnapshot = { snapshot: string; @@ -263,14 +258,13 @@ const runPrettier = ( // Resolve project configuration. // For older versions of Prettier, do not load configuration. const config = prettier.resolveConfig - ? prettier.resolveConfig.sync(sourceFilePath, { - editorconfig: true, - }) + ? 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. - const inferredParser = prettier.getFileInfo + // @ts-expect-error + const inferredParser: PrettierParserName | undefined = prettier.getFileInfo ? prettier.getFileInfo.sync(sourceFilePath).inferredParser : (config && typeof config.parser === 'string' && config.parser) || simpleDetectParser(sourceFilePath); @@ -305,12 +299,12 @@ const runPrettier = ( // This parser formats snapshots to the correct indentation. const createFormattingParser = ( snapshotMatcherNames: Array, - inferredParser: string, -): PrettierFunctionParser => (text, parsers, options) => { + inferredParser: PrettierParserName, +): PrettierCustomParser => (text, parsers, options) => { // Workaround for https://github.com/prettier/prettier/issues/3150 options.parser = inferredParser; - const ast = resolveAst(parsers[inferredParser](text, parsers, options)); + const ast = resolveAst(parsers[inferredParser](text, options)); babelTraverse(ast, { CallExpression({node: {arguments: args, callee}}) { if ( diff --git a/packages/jest-snapshot/src/types.ts b/packages/jest-snapshot/src/types.ts index 8dbd91c9c31a..31db0429d212 100644 --- a/packages/jest-snapshot/src/types.ts +++ b/packages/jest-snapshot/src/types.ts @@ -31,6 +31,3 @@ export type ExpectationResult = { pass: boolean; message: () => string; }; - -export type BabelTraverse = typeof import('@babel/traverse').default; -export type Prettier = typeof import('prettier'); From 69f8f0d6314fd8e99d91f8f4d746b095cb24c22d Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 15 Nov 2020 10:49:09 +0000 Subject: [PATCH 89/89] remove obsolete circus deps --- packages/jest-circus/package.json | 3 --- yarn.lock | 2 -- 2 files changed, 5 deletions(-) diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index 4d0f7aafd901..1fa02c5c7646 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -15,11 +15,9 @@ "./runner": "./runner.js" }, "dependencies": { - "@babel/traverse": "^7.1.0", "@jest/environment": "^26.6.2", "@jest/test-result": "^26.6.2", "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", @@ -41,7 +39,6 @@ "@babel/core": "^7.1.0", "@babel/register": "^7.0.0", "@jest/test-utils": "^26.6.2", - "@types/babel__traverse": "^7.0.4", "@types/co": "^4.6.0", "@types/dedent": "^0.7.0", "@types/graceful-fs": "^4.1.3", diff --git a/yarn.lock b/yarn.lock index e94d49a253a4..a659c858ce43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11665,12 +11665,10 @@ fsevents@~2.1.2: dependencies: "@babel/core": ^7.1.0 "@babel/register": ^7.0.0 - "@babel/traverse": ^7.1.0 "@jest/environment": ^26.6.2 "@jest/test-result": ^26.6.2 "@jest/test-utils": ^26.6.2 "@jest/types": ^26.6.2 - "@types/babel__traverse": ^7.0.4 "@types/co": ^4.6.0 "@types/dedent": ^0.7.0 "@types/graceful-fs": ^4.1.3