diff --git a/build/build-smokehouse-bundle.js b/build/build-smokehouse-bundle.js index 97a56f0f7b81..4a105ca007e6 100644 --- a/build/build-smokehouse-bundle.js +++ b/build/build-smokehouse-bundle.js @@ -5,18 +5,47 @@ */ 'use strict'; -const browserify = require('browserify'); -const fs = require('fs'); +const rollup = require('rollup'); + +/** + * Rollup plugins don't export types that work with commonjs. + * @template T + * @param {T} module + * @return {T['default']} + */ +function rollupPluginTypeCoerce(module) { + // @ts-expect-error + return module; +} + +const nodeResolve = rollupPluginTypeCoerce(require('rollup-plugin-node-resolve')); +const commonjs = rollupPluginTypeCoerce(require('rollup-plugin-commonjs')); +// @ts-expect-error: no types +const shim = require('rollup-plugin-shim'); const {LH_ROOT} = require('../root.js'); const distDir = `${LH_ROOT}/dist`; const bundleOutFile = `${distDir}/smokehouse-bundle.js`; const smokehouseLibFilename = './lighthouse-cli/test/smokehouse/frontends/lib.js'; +const smokehouseCliFilename = + require.resolve('../lighthouse-cli/test/smokehouse/lighthouse-runners/cli.js'); -browserify(smokehouseLibFilename, {standalone: 'Lighthouse.Smokehouse'}) - .ignore('./lighthouse-cli/test/smokehouse/lighthouse-runners/cli.js') - .transform('@wardpeet/brfs', {global: true, parserOpts: {ecmaVersion: 12}}) - .bundle((err, src) => { - if (err) throw err; - fs.writeFileSync(bundleOutFile, src.toString()); +async function build() { + const bundle = await rollup.rollup({ + input: smokehouseLibFilename, + context: 'globalThis', + plugins: [ + nodeResolve(), + commonjs(), + shim({ + [smokehouseCliFilename]: 'export default {}', + }), + ], }); + + await bundle.write({ + file: bundleOutFile, + }); +} + +build(); diff --git a/lighthouse-cli/.eslintrc.cjs b/lighthouse-cli/.eslintrc.cjs new file mode 100644 index 000000000000..938d7e233f94 --- /dev/null +++ b/lighthouse-cli/.eslintrc.cjs @@ -0,0 +1,27 @@ +/** + * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ +'use strict'; + +module.exports = { + env: { + browser: true, + }, + rules: { + // TODO(esmodules): move to root eslint when all code is ESM + // or when this is resolved: https://github.com/import-js/eslint-plugin-import/issues/2214 + 'import/order': [2, { + 'groups': [ + 'builtin', + 'external', + ['sibling', 'parent'], + 'index', + 'object', + 'type', + ], + 'newlines-between': 'always', + }], + }, +}; diff --git a/lighthouse-cli/bin.js b/lighthouse-cli/bin.js index 31f16805dc5a..c79840106364 100644 --- a/lighthouse-cli/bin.js +++ b/lighthouse-cli/bin.js @@ -18,19 +18,23 @@ * cli-flags lh-core/index */ -const fs = require('fs'); -const path = require('path'); -const commands = require('./commands/commands.js'); -const printer = require('./printer.js'); -const {getFlags} = require('./cli-flags.js'); -const {runLighthouse} = require('./run.js'); -const {generateConfig} = require('../lighthouse-core/index.js'); -const log = require('lighthouse-logger'); -const pkg = require('../package.json'); -const Sentry = require('../lighthouse-core/lib/sentry.js'); -const updateNotifier = require('update-notifier'); -const {askPermission} = require('./sentry-prompt.js'); -const {LH_ROOT} = require('../root.js'); +import fs from 'fs'; +import path from 'path'; +import url from 'url'; + +import log from 'lighthouse-logger'; +import updateNotifier from 'update-notifier'; + +import * as commands from './commands/commands.js'; +import * as Printer from './printer.js'; +import {getFlags} from './cli-flags.js'; +import {runLighthouse} from './run.js'; +import lighthouse from '../lighthouse-core/index.js'; +import * as Sentry from '../lighthouse-core/lib/sentry.js'; +import {askPermission} from './sentry-prompt.js'; +import {LH_ROOT} from '../root.js'; + +const pkg = JSON.parse(fs.readFileSync(LH_ROOT + '/package.json', 'utf-8')); /** * @return {boolean} @@ -58,16 +62,22 @@ async function begin() { commands.listTraceCategories(); } - const url = cliFlags._[0]; + const urlUnderTest = cliFlags._[0]; /** @type {LH.Config.Json|undefined} */ let configJson; if (cliFlags.configPath) { // Resolve the config file path relative to where cli was called. cliFlags.configPath = path.resolve(process.cwd(), cliFlags.configPath); - configJson = require(cliFlags.configPath); + + if (cliFlags.configPath.endsWith('.json')) { + configJson = JSON.parse(fs.readFileSync(cliFlags.configPath, 'utf-8')); + } else { + const configModuleUrl = url.pathToFileURL(cliFlags.configPath).href; + configJson = (await import(configModuleUrl)).default; + } } else if (cliFlags.preset) { - configJson = require(`../lighthouse-core/config/${cliFlags.preset}-config.js`); + configJson = (await import(`../lighthouse-core/config/${cliFlags.preset}-config.js`)).default; } if (cliFlags.budgetPath) { @@ -88,7 +98,7 @@ async function begin() { if ( cliFlags.output.length === 1 && - cliFlags.output[0] === printer.OutputMode.json && + cliFlags.output[0] === Printer.OutputMode.json && !cliFlags.outputPath ) { cliFlags.outputPath = 'stdout'; @@ -106,7 +116,7 @@ async function begin() { } if (cliFlags.printConfig) { - const config = generateConfig(configJson, cliFlags); + const config = lighthouse.generateConfig(configJson, cliFlags); process.stdout.write(config.getPrintString()); return; } @@ -119,7 +129,7 @@ async function begin() { } if (cliFlags.enableErrorReporting) { Sentry.init({ - url, + url: urlUnderTest, flags: cliFlags, environmentData: { name: 'redacted', // prevent sentry from using hostname @@ -132,9 +142,9 @@ async function begin() { }); } - return runLighthouse(url, cliFlags, configJson); + return runLighthouse(urlUnderTest, cliFlags, configJson); } -module.exports = { +export { begin, }; diff --git a/lighthouse-cli/cli-flags.js b/lighthouse-cli/cli-flags.js index b7d99e67d958..552b3a7baaae 100644 --- a/lighthouse-cli/cli-flags.js +++ b/lighthouse-cli/cli-flags.js @@ -7,9 +7,12 @@ /* eslint-disable max-len */ -const yargs = require('yargs'); -const fs = require('fs'); -const {isObjectOfUnknownValues} = require('../lighthouse-core/lib/type-verifiers.js'); +import fs from 'fs'; + +import yargs from 'yargs'; +import * as yargsHelpers from 'yargs/helpers'; + +import {isObjectOfUnknownValues} from '../lighthouse-core/lib/type-verifiers.js'; /** * @param {string=} manualArgv @@ -17,8 +20,10 @@ const {isObjectOfUnknownValues} = require('../lighthouse-core/lib/type-verifiers * @return {LH.CliFlags} */ function getFlags(manualArgv, options = {}) { - // @ts-expect-error - undocumented, but yargs() supports parsing a single `string`. - const y = manualArgv ? yargs(manualArgv) : yargs; + const y = manualArgv ? + // @ts-expect-error - undocumented, but yargs() supports parsing a single `string`. + yargs(manualArgv) : + yargs(yargsHelpers.hideBin(process.argv)); let parser = y.help('help') .showHelpOnFail(false, 'Specify --help for available options') @@ -318,7 +323,7 @@ function getFlags(manualArgv, options = {}) { throw new Error('Please provide a url'); }) .epilogue('For more information on Lighthouse, see https://developers.google.com/web/tools/lighthouse/.') - .wrap(yargs.terminalWidth()); + .wrap(y.terminalWidth()); if (options.noExitOnFailure) { // Silence console.error() logging and don't process.exit(). @@ -499,6 +504,6 @@ function coerceScreenEmulation(value) { return screenEmulationSettings; } -module.exports = { +export { getFlags, }; diff --git a/lighthouse-cli/commands/commands.js b/lighthouse-cli/commands/commands.js index b4761a633a30..940690650aab 100644 --- a/lighthouse-cli/commands/commands.js +++ b/lighthouse-cli/commands/commands.js @@ -5,10 +5,5 @@ */ 'use strict'; -const listAudits = require('./list-audits.js'); -const listTraceCategories = require('./list-trace-categories.js'); - -module.exports = { - listAudits, - listTraceCategories, -}; +export {listAudits} from './list-audits.js'; +export {listTraceCategories} from './list-trace-categories.js'; diff --git a/lighthouse-cli/commands/list-audits.js b/lighthouse-cli/commands/list-audits.js index b9a6bd9dfd4e..d095e2148866 100644 --- a/lighthouse-cli/commands/list-audits.js +++ b/lighthouse-cli/commands/list-audits.js @@ -5,7 +5,7 @@ */ 'use strict'; -const lighthouse = require('../../lighthouse-core/index.js'); +import lighthouse from '../../lighthouse-core/index.js'; function listAudits() { const audits = lighthouse.getAuditList().map((i) => i.replace(/\.js$/, '')); @@ -13,4 +13,4 @@ function listAudits() { process.exit(0); } -module.exports = listAudits; +export {listAudits}; diff --git a/lighthouse-cli/commands/list-trace-categories.js b/lighthouse-cli/commands/list-trace-categories.js index a3ef3bda1bf2..5c32ddf552aa 100644 --- a/lighthouse-cli/commands/list-trace-categories.js +++ b/lighthouse-cli/commands/list-trace-categories.js @@ -5,7 +5,7 @@ */ 'use strict'; -const lighthouse = require('../../lighthouse-core/index.js'); +import lighthouse from '../../lighthouse-core/index.js'; function listTraceCategories() { const traceCategories = lighthouse.traceCategories; @@ -13,4 +13,4 @@ function listTraceCategories() { process.exit(0); } -module.exports = listTraceCategories; +export {listTraceCategories}; diff --git a/lighthouse-cli/index.js b/lighthouse-cli/index.js index 0e4c7104e641..1efdd16dbd2c 100755 --- a/lighthouse-cli/index.js +++ b/lighthouse-cli/index.js @@ -6,7 +6,9 @@ */ 'use strict'; -require('./bin.js').begin().catch(err => { +import {begin} from './bin.js'; + +begin().catch(err => { process.stderr.write(err.stack); process.exit(1); }); diff --git a/lighthouse-cli/test/fixtures/package.json b/lighthouse-cli/package.json similarity index 100% rename from lighthouse-cli/test/fixtures/package.json rename to lighthouse-cli/package.json diff --git a/lighthouse-cli/printer.js b/lighthouse-cli/printer.js index f852e7bff396..d297aeb1c809 100644 --- a/lighthouse-cli/printer.js +++ b/lighthouse-cli/printer.js @@ -5,8 +5,9 @@ */ 'use strict'; -const fs = require('fs'); -const log = require('lighthouse-logger'); +import fs from 'fs'; + +import log from 'lighthouse-logger'; /** * An enumeration of acceptable output modes: @@ -91,7 +92,7 @@ function getValidOutputOptions() { return Object.keys(OutputMode); } -module.exports = { +export { checkOutputPath, write, OutputMode, diff --git a/lighthouse-cli/run.js b/lighthouse-cli/run.js index 3f5d35f2026d..d92a610af503 100644 --- a/lighthouse-cli/run.js +++ b/lighthouse-cli/run.js @@ -7,20 +7,19 @@ /* eslint-disable no-console */ -const path = require('path'); -const psList = require('ps-list'); +import path from 'path'; -const Printer = require('./printer.js'); -const ChromeLauncher = require('chrome-launcher'); +import psList from 'ps-list'; +import * as ChromeLauncher from 'chrome-launcher'; +import yargsParser from 'yargs-parser'; +import log from 'lighthouse-logger'; +import open from 'open'; -const yargsParser = require('yargs-parser'); -const lighthouse = require('../lighthouse-core/index.js'); -const log = require('lighthouse-logger'); -const getFilenamePrefix = require('../report/generator/file-namer.js').getFilenamePrefix; -const assetSaver = require('../lighthouse-core/lib/asset-saver.js'); -const URL = require('../lighthouse-core/lib/url-shim.js'); - -const open = require('open'); +import * as Printer from './printer.js'; +import lighthouse from '../lighthouse-core/index.js'; +import {getFilenamePrefix} from '../report/generator/file-namer.js'; +import * as assetSaver from '../lighthouse-core/lib/asset-saver.js'; +import URL from '../lighthouse-core/lib/url-shim.js'; /** @typedef {Error & {code: string, friendlyMessage?: string}} ExitError */ @@ -203,8 +202,8 @@ async function potentiallyKillChrome(launchedChrome) { * @return {Promise} */ async function runLighthouseWithFraggleRock(url, flags, config, launchedChrome) { - const fraggleRock = require('../lighthouse-core/fraggle-rock/api.js'); - const puppeteer = require('puppeteer'); + const fraggleRock = (await import('../lighthouse-core/fraggle-rock/api.js')).default; + const puppeteer = (await import('puppeteer')).default; const browser = await puppeteer.connect({browserURL: `http://localhost:${launchedChrome.port}`}); const page = await browser.newPage(); flags.channel = 'fraggle-rock-cli'; @@ -272,7 +271,7 @@ async function runLighthouse(url, flags, config) { } } -module.exports = { +export { parseChromeFlags, saveResults, runLighthouse, diff --git a/lighthouse-cli/sentry-prompt.js b/lighthouse-cli/sentry-prompt.js index 82c5c63fcda1..fdfa5e9e5ac6 100644 --- a/lighthouse-cli/sentry-prompt.js +++ b/lighthouse-cli/sentry-prompt.js @@ -5,10 +5,9 @@ */ 'use strict'; -const Configstore = require('configstore'); -const {Confirm} = require('enquirer'); - -const log = require('lighthouse-logger'); +import Configstore from 'configstore'; +import Confirm from 'enquirer'; +import log from 'lighthouse-logger'; const MAXIMUM_WAIT_TIME = 20 * 1000; @@ -29,7 +28,7 @@ function prompt() { /** @type {NodeJS.Timer|undefined} */ let timeout; - const prompt = new Confirm({ + const prompt = new Confirm.Confirm({ name: 'isErrorReportingEnabled', initial: false, message: MESSAGE, @@ -75,6 +74,6 @@ function askPermission() { }).catch(_ => false); } -module.exports = { +export { askPermission, }; diff --git a/lighthouse-cli/test/cli/bin-test.js b/lighthouse-cli/test/cli/bin-test.js index 4df8ac052618..eabb1c55debd 100644 --- a/lighthouse-cli/test/cli/bin-test.js +++ b/lighthouse-cli/test/cli/bin-test.js @@ -7,41 +7,60 @@ /* eslint-env jest */ -jest.mock('../../run.js', () => ({runLighthouse: jest.fn()})); -jest.mock('../../cli-flags.js', () => ({getFlags: jest.fn()})); -jest.mock('../../sentry-prompt.js', () => ({askPermission: jest.fn()})); -jest.mock('../../../lighthouse-core/lib/sentry.js', () => ({init: jest.fn()})); -jest.mock('lighthouse-logger', () => ({setLevel: jest.fn()})); -jest.mock('update-notifier', () => () => ({notify: () => {}})); - -const bin = require('../../bin.js'); - -/** @type {jest.Mock} */ -let getCLIFlagsFn; -/** @type {jest.Mock} */ -let runLighthouseFn; -/** @type {jest.Mock} */ -let setLogLevelFn; -/** @type {jest.Mock} */ -let askSentryPermissionFn; -/** @type {jest.Mock} */ -let initSentryFn; -/** @type {LH.CliFlags} */ -let cliFlags; +import fs from 'fs'; + +import {jest} from '@jest/globals'; + +import {LH_ROOT} from '../../../root.js'; + +const mockRunLighthouse = jest.fn(); + +jest.unstable_mockModule('../../run.js', () => { + return {runLighthouse: mockRunLighthouse}; +}); -beforeEach(() => { - getCLIFlagsFn = /** @type {*} */ (require('../../cli-flags.js').getFlags); - runLighthouseFn = /** @type {*} */ (require('../../run.js').runLighthouse); - setLogLevelFn = /** @type {*} */ (require('lighthouse-logger').setLevel); - askSentryPermissionFn = /** @type {*} */ (require('../../sentry-prompt.js').askPermission); - initSentryFn = /** @type {*} */ (require('../../../lighthouse-core/lib/sentry.js').init); +const mockGetFlags = jest.fn(); +jest.unstable_mockModule('../../cli-flags.js', () => { + return {getFlags: mockGetFlags}; +}); + +const mockAskPermission = jest.fn(); +jest.unstable_mockModule('../../sentry-prompt.js', () => { + return {askPermission: mockAskPermission}; +}); - runLighthouseFn.mockReset(); - askSentryPermissionFn.mockReset(); - initSentryFn.mockReset(); +const mockSentryInit = jest.fn(); +jest.unstable_mockModule('../../../lighthouse-core/lib/sentry.js', () => { + return {init: mockSentryInit}; +}); - runLighthouseFn.mockResolvedValue({}); +const mockLoggerSetLevel = jest.fn(); +jest.unstable_mockModule('lighthouse-logger', () => { + return {default: {setLevel: mockLoggerSetLevel}}; +}); + +const mockNotify = jest.fn(); +jest.unstable_mockModule('update-notifier', () => { + return {default: () => ({notify: mockNotify})}; +}); +/** @type {import('../../bin.js')} */ +let bin; +beforeAll(async () => { + bin = await import('../../bin.js'); +}); + +/** @type {LH.CliFlags} */ +let cliFlags; + +beforeEach(async () => { + mockAskPermission.mockReset(); + mockGetFlags.mockReset(); + mockLoggerSetLevel.mockReset(); + mockNotify.mockReset(); + mockRunLighthouse.mockReset(); + mockSentryInit.mockReset(); + mockRunLighthouse.mockResolvedValue({}); cliFlags = { _: ['http://example.com'], output: ['html'], @@ -60,15 +79,16 @@ beforeEach(() => { listTraceCategories: false, printConfig: false, }; - - getCLIFlagsFn.mockReset(); - getCLIFlagsFn.mockImplementation(() => cliFlags); + mockGetFlags.mockImplementation(() => cliFlags); }); describe('CLI bin', function() { + /** + * @return {any} + */ function getRunLighthouseArgs() { - expect(runLighthouseFn).toHaveBeenCalled(); - return runLighthouseFn.mock.calls[0]; + expect(mockRunLighthouse).toHaveBeenCalled(); + return mockRunLighthouse.mock.calls[0]; } it('should run without failure', async () => { @@ -76,10 +96,21 @@ describe('CLI bin', function() { }); describe('config', () => { - it('should load the config from the path', async () => { - const configPath = require.resolve('../../../lighthouse-core/config/lr-desktop-config.js'); + it('should load the config from the path (common js)', async () => { + // TODO(esmodules): change this test when config file is esm. + const configPath = `${LH_ROOT}/lighthouse-core/config/lr-desktop-config.js`; + cliFlags = {...cliFlags, configPath: configPath}; + const actualConfig = (await import(configPath)).default; + await bin.begin(); + + expect(getRunLighthouseArgs()[2]).toEqual(actualConfig); + }); + + it('should load the config from the path (es modules)', async () => { + const configPath = + `${LH_ROOT}/lighthouse-cli/test/smokehouse/test-definitions/a11y/a11y-config.js`; cliFlags = {...cliFlags, configPath: configPath}; - const actualConfig = require(configPath); + const actualConfig = (await import(configPath)).default; await bin.begin(); expect(getRunLighthouseArgs()[2]).toEqual(actualConfig); @@ -87,7 +118,8 @@ describe('CLI bin', function() { it('should load the config from the preset', async () => { cliFlags = {...cliFlags, preset: 'experimental'}; - const actualConfig = require('../../../lighthouse-core/config/experimental-config.js'); + const actualConfig = + (await import('../../../lighthouse-core/config/experimental-config.js')).default; await bin.begin(); expect(getRunLighthouseArgs()[2]).toEqual(actualConfig); @@ -96,9 +128,9 @@ describe('CLI bin', function() { describe('budget', () => { it('should load the config from the path', async () => { - const budgetPath = '../../../lighthouse-core/test/fixtures/simple-budget.json'; - cliFlags = {...cliFlags, budgetPath: require.resolve(budgetPath)}; - const budgetFile = require(budgetPath); + const budgetPath = `${LH_ROOT}/lighthouse-core/test/fixtures/simple-budget.json`; + cliFlags = {...cliFlags, budgetPath}; + const budgetFile = JSON.parse(fs.readFileSync(budgetPath, 'utf-8')); await bin.begin(); expect(getRunLighthouseArgs()[1].budgets).toEqual(budgetFile); @@ -108,19 +140,19 @@ describe('CLI bin', function() { describe('logging', () => { it('should have info by default', async () => { await bin.begin(); - expect(setLogLevelFn).toHaveBeenCalledWith('info'); + expect(mockLoggerSetLevel).toHaveBeenCalledWith('info'); }); it('should respect verbose', async () => { cliFlags = {...cliFlags, verbose: true}; await bin.begin(); - expect(setLogLevelFn).toHaveBeenCalledWith('verbose'); + expect(mockLoggerSetLevel).toHaveBeenCalledWith('verbose'); }); it('should respect quiet', async () => { cliFlags = {...cliFlags, quiet: true}; await bin.begin(); - expect(setLogLevelFn).toHaveBeenCalledWith('silent'); + expect(mockLoggerSetLevel).toHaveBeenCalledWith('silent'); }); }); @@ -148,18 +180,18 @@ describe('CLI bin', function() { describe('precomputedLanternData', () => { it('should read lantern data from file', async () => { - const lanternDataFile = require.resolve('../fixtures/lantern-data.json'); + const lanternDataFile = `${LH_ROOT}/lighthouse-cli/test/fixtures/lantern-data.json`; cliFlags = {...cliFlags, precomputedLanternDataPath: lanternDataFile}; await bin.begin(); expect(getRunLighthouseArgs()[1]).toMatchObject({ - precomputedLanternData: require(lanternDataFile), + precomputedLanternData: (await import(lanternDataFile)).default, precomputedLanternDataPath: lanternDataFile, }); }); it('should throw when invalid lantern data used', async () => { - const headersFile = require.resolve('../fixtures/extra-headers/valid.json'); + const headersFile = `${LH_ROOT}/lighthouse-cli/test/fixtures/extra-headers/valid.json`; cliFlags = {...cliFlags, precomputedLanternDataPath: headersFile}; await expect(bin.begin()).rejects.toBeTruthy(); }); @@ -169,28 +201,28 @@ describe('CLI bin', function() { it('should request permission when no preference set', async () => { await bin.begin(); - expect(askSentryPermissionFn).toHaveBeenCalled(); + expect(mockAskPermission).toHaveBeenCalled(); }); it('should not request permission when preference set', async () => { cliFlags = {...cliFlags, enableErrorReporting: false}; await bin.begin(); - expect(askSentryPermissionFn).not.toHaveBeenCalled(); + expect(mockAskPermission).not.toHaveBeenCalled(); }); it('should initialize sentry when enabled', async () => { cliFlags = {...cliFlags, enableErrorReporting: true}; await bin.begin(); - expect(initSentryFn).toHaveBeenCalled(); + expect(mockSentryInit).toHaveBeenCalled(); }); it('should not initialize sentry when disabled', async () => { cliFlags = {...cliFlags, enableErrorReporting: false}; await bin.begin(); - expect(initSentryFn).not.toHaveBeenCalled(); + expect(mockSentryInit).not.toHaveBeenCalled(); }); }); }); diff --git a/lighthouse-cli/test/cli/cli-flags-test.js b/lighthouse-cli/test/cli/cli-flags-test.js index ec46e8794c7c..4089d08e03b8 100644 --- a/lighthouse-cli/test/cli/cli-flags-test.js +++ b/lighthouse-cli/test/cli/cli-flags-test.js @@ -6,13 +6,18 @@ 'use strict'; /* eslint-env jest */ -const assert = require('assert').strict; -const getFlags = require('../../cli-flags.js').getFlags; + +import {strict as assert} from 'assert'; +import fs from 'fs'; + +import yargs from 'yargs'; + +import {getFlags} from '../../cli-flags.js'; +import {LH_ROOT} from '../../../root.js'; describe('CLI flags', function() { it('all options should have descriptions', () => { getFlags('chrome://version'); - const yargs = require('yargs'); // @ts-expect-error - getGroups is private const optionGroups = yargs.getGroups(); @@ -32,7 +37,7 @@ describe('CLI flags', function() { it('settings are accepted from a file path', () => { const flags = getFlags([ 'http://www.example.com', - `--cli-flags-path="${__dirname}/../fixtures/cli-flags-path.json"`, + `--cli-flags-path="${LH_ROOT}/lighthouse-cli/test/fixtures/cli-flags-path.json"`, '--budgets-path=path/to/my/budget-from-command-line.json', // this should override the config value ].join(' ')); @@ -84,14 +89,15 @@ describe('CLI flags', function() { expect(flags).toHaveProperty('extraHeaders', {foo: 'bar'}); }); - it('should read extra headers from file', async () => { - const headersFile = require.resolve('../fixtures/extra-headers/valid.json'); + it('should read extra headers from file', () => { + const headersFile = `${LH_ROOT}/lighthouse-cli/test/fixtures/extra-headers/valid.json`; + const headers = JSON.parse(fs.readFileSync(headersFile, 'utf-8')); const flags = getFlags([ 'http://www.example.com', `--extra-headers=${headersFile}`, ].join(' ')); - expect(flags).toHaveProperty('extraHeaders', require(headersFile)); + expect(flags).toHaveProperty('extraHeaders', headers); }); }); diff --git a/lighthouse-cli/test/cli/index-test.js b/lighthouse-cli/test/cli/index-test.js index 5a44bc0e22b5..cf54247c6d09 100644 --- a/lighthouse-cli/test/cli/index-test.js +++ b/lighthouse-cli/test/cli/index-test.js @@ -6,11 +6,13 @@ 'use strict'; /* eslint-env jest */ -const assert = require('assert').strict; -const childProcess = require('child_process'); -const path = require('path'); -const indexPath = path.resolve(__dirname, '../../index.js'); -const spawnSync = childProcess.spawnSync; + +import {strict as assert} from 'assert'; +import {spawnSync} from 'child_process'; + +import {LH_ROOT} from '../../../root.js'; + +const indexPath = `${LH_ROOT}/lighthouse-cli/index.js`; describe('CLI Tests', function() { it('fails if a url is not provided', () => { @@ -56,7 +58,7 @@ describe('CLI Tests', function() { it('should exit with a error if the file does not contain valid JSON', () => { const ret = spawnSync('node', [indexPath, 'https://www.google.com', '--extra-headers', - path.resolve(__dirname, '../fixtures/extra-headers/invalid.txt')], {encoding: 'utf8'}); + `${LH_ROOT}/lighthouse-cli/test/fixtures/extra-headers/invalid.txt`], {encoding: 'utf8'}); assert.ok(ret.stderr.includes('Unexpected token')); assert.equal(ret.status, 1); diff --git a/lighthouse-cli/test/cli/printer-test.js b/lighthouse-cli/test/cli/printer-test.js index 017cc8185711..c53431930906 100644 --- a/lighthouse-cli/test/cli/printer-test.js +++ b/lighthouse-cli/test/cli/printer-test.js @@ -6,10 +6,12 @@ 'use strict'; /* eslint-env jest */ -const Printer = require('../../printer.js'); -const assert = require('assert').strict; -const fs = require('fs'); -const sampleResults = require('../../../lighthouse-core/test/results/sample_v2.json'); + +import {strict as assert} from 'assert'; +import fs from 'fs'; + +import * as Printer from '../../printer.js'; +import sampleResults from '../../../lighthouse-core/test/results/sample_v2.json'; describe('Printer', () => { it('accepts valid output paths', () => { diff --git a/lighthouse-cli/test/cli/run-test.js b/lighthouse-cli/test/cli/run-test.js index 24a03ace6542..e0d500d5a88d 100644 --- a/lighthouse-cli/test/cli/run-test.js +++ b/lighthouse-cli/test/cli/run-test.js @@ -6,12 +6,15 @@ 'use strict'; /* eslint-env jest */ -const assert = require('assert').strict; -const path = require('path'); -const fs = require('fs'); -const run = require('../../run.js'); -const parseChromeFlags = require('../../run.js').parseChromeFlags; -const {LH_ROOT} = require('../../../root.js'); + +import {strict as assert} from 'assert'; +import path from 'path'; +import fs from 'fs'; + +import * as run from '../../run.js'; +import {parseChromeFlags} from '../../run.js'; +import {getFlags} from '../../cli-flags.js'; +import {LH_ROOT} from '../../../root.js'; /** @type {LH.Config.Json} */ const testConfig = { @@ -21,14 +24,6 @@ const testConfig = { }, }; -// Map plugin name to fixture since not actually installed in node_modules/. -jest.mock('lighthouse-plugin-simple', () => { - // eslint-disable-next-line max-len - return require('../../../lighthouse-core/test/fixtures/config-plugins/lighthouse-plugin-simple/plugin-simple.js'); -}, {virtual: true}); - -const getFlags = require('../../cli-flags.js').getFlags; - describe('CLI run', function() { describe('runLighthouse runs Lighthouse as a node module', () => { /** @type {LH.RunnerResult} */ @@ -46,6 +41,8 @@ describe('CLI run', function() { const flags = getFlags([ '--output=json', `--output-path=${filename}`, + // Jest allows us to resolve this module with no setup. + // https://github.com/GoogleChrome/lighthouse/pull/13045#discussion_r708690607 '--plugins=lighthouse-plugin-simple', // Use sample artifacts to avoid gathering during a unit test. `--audit-mode=${samplev2ArtifactsPath}`, diff --git a/lighthouse-cli/test/smokehouse/package.json b/lighthouse-cli/test/smokehouse/package.json deleted file mode 100644 index bd346284783c..000000000000 --- a/lighthouse-cli/test/smokehouse/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "module", - "//": "Any directory that uses `import ... from` or `export ...` must be type module. Temporary file until root package.json is type: module" -} \ No newline at end of file diff --git a/lighthouse-viewer/test/test-helpers.js b/lighthouse-viewer/test/test-helpers.js index 46f477fc8b08..745bbb3462b3 100644 --- a/lighthouse-viewer/test/test-helpers.js +++ b/lighthouse-viewer/test/test-helpers.js @@ -5,8 +5,8 @@ */ 'use strict'; -import * as fs from 'fs'; -import * as path from 'path'; +import fs from 'fs'; +import path from 'path'; import * as jsdom from 'jsdom'; diff --git a/lighthouse-viewer/test/viewer-test-pptr.js b/lighthouse-viewer/test/viewer-test-pptr.js index 512ea4b55a4a..922cd18ad993 100644 --- a/lighthouse-viewer/test/viewer-test-pptr.js +++ b/lighthouse-viewer/test/viewer-test-pptr.js @@ -7,8 +7,8 @@ /* eslint-env jest */ -import * as fs from 'fs'; -import * as assert from 'assert'; +import fs from 'fs'; +import assert from 'assert'; import {jest} from '@jest/globals'; import puppeteer from 'puppeteer'; diff --git a/package.json b/package.json index 1f7793fae387..9c9a7a5265b3 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "glob": "^7.1.3", "idb-keyval": "2.2.0", "intl-messageformat-parser": "^1.8.1", - "jest": "27.0.3", + "jest": "27.1.1", "jsdom": "^12.2.0", "jsonld": "^5.2.0", "jsonlint-mod": "^1.7.6", @@ -167,6 +167,7 @@ "rollup": "^2.50.6", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-shim": "^1.0.0", "rollup-plugin-terser": "^7.0.2", "tabulator-tables": "^4.9.3", "terser": "^5.3.8", diff --git a/root.js b/root.js index ecf261013fbb..9912df6e2b44 100644 --- a/root.js +++ b/root.js @@ -5,4 +5,6 @@ */ 'use strict'; -module.exports.LH_ROOT = __dirname; +module.exports = { + LH_ROOT: __dirname, +}; diff --git a/yarn.lock b/yarn.lock index 020f6fc97088..b9136a969cca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -566,94 +566,94 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6" - integrity sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w== +"@jest/console@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.0.tgz#57f702837ec52899be58c3794dce5941c77a8b63" + integrity sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.0.2" - jest-util "^27.0.2" + jest-message-util "^27.2.0" + jest-util "^27.2.0" slash "^3.0.0" -"@jest/core@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.3.tgz#b5a38675fa0466450a7fd465f4b226762cb592a2" - integrity sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg== +"@jest/core@^27.1.1", "@jest/core@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.0.tgz#61fc27b244e9709170ed9ffe41b006add569f1b3" + integrity sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw== dependencies: - "@jest/console" "^27.0.2" - "@jest/reporters" "^27.0.2" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/console" "^27.2.0" + "@jest/reporters" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.0.2" - jest-config "^27.0.3" - jest-haste-map "^27.0.2" - jest-message-util "^27.0.2" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.2" - jest-resolve-dependencies "^27.0.3" - jest-runner "^27.0.3" - jest-runtime "^27.0.3" - jest-snapshot "^27.0.2" - jest-util "^27.0.2" - jest-validate "^27.0.2" - jest-watcher "^27.0.2" + jest-changed-files "^27.1.1" + jest-config "^27.2.0" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" + jest-regex-util "^27.0.6" + jest-resolve "^27.2.0" + jest-resolve-dependencies "^27.2.0" + jest-runner "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" + jest-watcher "^27.2.0" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.3.tgz#68769b1dfdd213e3456169d64fbe9bd63a5fda92" - integrity sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA== +"@jest/environment@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.2.0.tgz#48d1dbfa65f8e4a5a5c6cbeb9c59d1a5c2776f6b" + integrity sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ== dependencies: - "@jest/fake-timers" "^27.0.3" - "@jest/types" "^27.0.2" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.0.3" + jest-mock "^27.1.1" -"@jest/fake-timers@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.3.tgz#9899ba6304cc636734c74478df502e18136461dd" - integrity sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA== +"@jest/fake-timers@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.0.tgz#560841bc21ae7fbeff0cbff8de8f5cf43ad3561d" + integrity sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.0.2" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-message-util "^27.2.0" + jest-mock "^27.1.1" + jest-util "^27.2.0" -"@jest/globals@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.3.tgz#1cf8933b7791bba0b99305cbf39fd4d2e3fe4060" - integrity sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ== +"@jest/globals@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.0.tgz#4d7085f51df5ac70c8240eb3501289676503933d" + integrity sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg== dependencies: - "@jest/environment" "^27.0.3" - "@jest/types" "^27.0.2" - expect "^27.0.2" + "@jest/environment" "^27.2.0" + "@jest/types" "^27.1.1" + expect "^27.2.0" -"@jest/reporters@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.2.tgz#ad73835d1cd54da08b0998a70b14446405e8e0d9" - integrity sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA== +"@jest/reporters@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.0.tgz#629886d9a42218e504a424889a293abb27919e25" + integrity sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.0.2" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/console" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -664,60 +664,60 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.0.2" - jest-resolve "^27.0.2" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-haste-map "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" + v8-to-istanbul "^8.0.0" -"@jest/source-map@^27.0.1": - version "27.0.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz#2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4" - integrity sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A== +"@jest/source-map@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" + integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10" - integrity sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA== +"@jest/test-result@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.0.tgz#377b46a41a6415dd4839fd0bed67b89fecea6b20" + integrity sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA== dependencies: - "@jest/console" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/console" "^27.2.0" + "@jest/types" "^27.1.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.3.tgz#2a8632b86a9a6f8900e514917cdab6a062e71049" - integrity sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q== +"@jest/test-sequencer@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz#b02b507687825af2fdc84e90c539d36fd8cf7bc9" + integrity sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA== dependencies: - "@jest/test-result" "^27.0.2" + "@jest/test-result" "^27.2.0" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" - jest-runtime "^27.0.3" + jest-haste-map "^27.2.0" + jest-runtime "^27.2.0" -"@jest/transform@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.2.tgz#b073b7c589e3f4b842102468875def2bb722d6b5" - integrity sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw== +"@jest/transform@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.0.tgz#e7e6e49d2591792db2385c33cdbb4379d407068d" + integrity sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" - jest-regex-util "^27.0.1" - jest-util "^27.0.2" + jest-haste-map "^27.2.0" + jest-regex-util "^27.0.6" + jest-util "^27.2.0" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -744,10 +744,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e" - integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg== +"@jest/types@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" + integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -755,10 +755,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" - integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== +"@jest/types@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" + integrity sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1751,16 +1751,16 @@ axe-core@4.2.3: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.3.tgz#2a3afc332f0031b42f602f4a3de03c211ca98f72" integrity sha512-pXnVMfJKSIWU2Ml4JHP7pZEPIrgBO1Fd3WGx+fPBsS+KRGhE4vxooD8XBGWbQOIVSZsVK7pUDBBkCicNu80yzQ== -babel-jest@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz#7dc18adb01322acce62c2af76ea2c7cd186ade37" - integrity sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q== +babel-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.0.tgz#c0f129a81f1197028aeb4447acbc04564c8bfc52" + integrity sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA== dependencies: - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.0.1" + babel-preset-jest "^27.2.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -1776,10 +1776,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11" - integrity sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ== +babel-plugin-jest-hoist@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277" + integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -1804,12 +1804,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20" - integrity sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA== +babel-preset-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885" + integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg== dependencies: - babel-plugin-jest-hoist "^27.0.1" + babel-plugin-jest-hoist "^27.2.0" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -3149,10 +3149,10 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff-sequences@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.1.tgz#9c9801d52ed5f576ff0a20e3022a13ee6e297e7c" - integrity sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg== +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== diffie-hellman@^5.0.0: version "5.0.3" @@ -3734,17 +3734,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz#e66ca3a4c9592f1c019fa1d46459a9d2084f3422" - integrity sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w== +expect@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.0.tgz#40eb89a492afb726a3929ccf3611ee0799ab976f" + integrity sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" ansi-styles "^5.0.0" - jest-get-type "^27.0.1" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-regex-util "^27.0.1" + jest-get-type "^27.0.6" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-regex-util "^27.0.6" extend-shallow@^2.0.1: version "2.0.1" @@ -5109,84 +5109,84 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz#997253042b4a032950fc5f56abf3c5d1f8560801" - integrity sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw== +jest-changed-files@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.1.tgz#9b3f67a34cc58e3e811e2e1e21529837653e4200" + integrity sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.3.tgz#32006967de484e03589da944064d72e172ce3261" - integrity sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ== +jest-circus@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.0.tgz#ad0d6d75514050f539d422bae41344224d2328f9" + integrity sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA== dependencies: - "@jest/environment" "^27.0.3" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.0.2" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.0.2" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-runtime "^27.0.3" - jest-snapshot "^27.0.2" - jest-util "^27.0.2" - pretty-format "^27.0.2" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.3.tgz#b733871acb526054a0f8c971d0466595c5f8316d" - integrity sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg== +jest-cli@^27.1.1: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.0.tgz#6da5ecca5bd757e20449f5ec1f1cad5b0303d16b" + integrity sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA== dependencies: - "@jest/core" "^27.0.3" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/core" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.0.3" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-config "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.3.tgz#31871583573c6d669dcdb5bb2d1a8738f3b91c20" - integrity sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA== +jest-config@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.0.tgz#d1c359253927005c53d11ab3e50d3b2f402a673a" + integrity sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.0.3" - "@jest/types" "^27.0.2" - babel-jest "^27.0.2" + "@jest/test-sequencer" "^27.2.0" + "@jest/types" "^27.1.1" + babel-jest "^27.2.0" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.0.3" - jest-environment-jsdom "^27.0.3" - jest-environment-node "^27.0.3" - jest-get-type "^27.0.1" - jest-jasmine2 "^27.0.3" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.2" - jest-runner "^27.0.3" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-circus "^27.2.0" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" + jest-get-type "^27.0.6" + jest-jasmine2 "^27.2.0" + jest-regex-util "^27.0.6" + jest-resolve "^27.2.0" + jest-runner "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" micromatch "^4.0.4" - pretty-format "^27.0.2" + pretty-format "^27.2.0" jest-diff@^24.3.0: version "24.9.0" @@ -5198,152 +5198,152 @@ jest-diff@^24.3.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.2.tgz#f315b87cee5dc134cf42c2708ab27375cc3f5a7e" - integrity sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw== +jest-diff@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.0.tgz#bda761c360f751bab1e7a2fe2fc2b0a35ce8518c" + integrity sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw== dependencies: chalk "^4.0.0" - diff-sequences "^27.0.1" - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.2.0" -jest-docblock@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz#bd9752819b49fa4fab1a50b73eb58c653b962e8b" - integrity sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA== +jest-docblock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" + integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== dependencies: detect-newline "^3.0.0" -jest-each@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz#865ddb4367476ced752167926b656fa0dcecd8c7" - integrity sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ== +jest-each@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.2.0.tgz#4c531c7223de289429fc7b2473a86e653c86d61f" + integrity sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" chalk "^4.0.0" - jest-get-type "^27.0.1" - jest-util "^27.0.2" - pretty-format "^27.0.2" - -jest-environment-jsdom@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz#ed73e913ddc03864eb9f934b5cbabf1b63504e2e" - integrity sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA== - dependencies: - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" - "@jest/types" "^27.0.2" + jest-get-type "^27.0.6" + jest-util "^27.2.0" + pretty-format "^27.2.0" + +jest-environment-jsdom@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz#c654dfae50ca2272c2a2e2bb95ff0af298283a3c" + integrity sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA== + dependencies: + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-mock "^27.1.1" + jest-util "^27.2.0" jsdom "^16.6.0" -jest-environment-node@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.3.tgz#b4acb3679d2552a4215732cab8b0ca7ec4398ee0" - integrity sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg== +jest-environment-node@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.2.0.tgz#73ef2151cb62206669becb94cd84f33276252de5" + integrity sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg== dependencies: - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-mock "^27.1.1" + jest-util "^27.2.0" jest-get-type@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-get-type@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815" - integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg== +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.2.tgz#3f1819400c671237e48b4d4b76a80a0dbed7577f" - integrity sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA== +jest-haste-map@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.0.tgz#703b3a473e3f2e27d75ab07864ffd7bbaad0d75e" + integrity sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" - jest-regex-util "^27.0.1" - jest-serializer "^27.0.1" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.2.0" + jest-worker "^27.2.0" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.3.tgz#fa6f6499566ea1b01b68b3ad13f49d1592b02c85" - integrity sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA== +jest-jasmine2@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz#1ece0ee37c348b59ed3dfcfe509fc24e3377b12d" + integrity sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.0.3" - "@jest/source-map" "^27.0.1" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.2.0" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.0.2" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.0.2" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-runtime "^27.0.3" - jest-snapshot "^27.0.2" - jest-util "^27.0.2" - pretty-format "^27.0.2" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" throat "^6.0.1" -jest-leak-detector@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz#ce19aa9dbcf7a72a9d58907a970427506f624e69" - integrity sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q== +jest-leak-detector@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz#9a7ca2dad1a21c4e49ad2a8ad7f1214ffdb86a28" + integrity sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA== dependencies: - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + jest-get-type "^27.0.6" + pretty-format "^27.2.0" -jest-matcher-utils@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0" - integrity sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA== +jest-matcher-utils@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz#b4d224ab88655d5fab64b96b989ac349e2f5da43" + integrity sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw== dependencies: chalk "^4.0.0" - jest-diff "^27.0.2" - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + jest-diff "^27.2.0" + jest-get-type "^27.0.6" + pretty-format "^27.2.0" -jest-message-util@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c" - integrity sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw== +jest-message-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.0.tgz#2f65c71df55267208686b1d7514e18106c91ceaf" + integrity sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.0.2" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz#5591844f9192b3335c0dca38e8e45ed297d4d23d" - integrity sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q== +jest-mock@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.1.tgz#c7a2e81301fdcf3dab114931d23d89ec9d0c3a82" + integrity sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -5351,105 +5351,109 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" - integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== +jest-regex-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" + integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.3.tgz#7e258f7d0458bb910855f8a50f5c1e9d92c319dc" - integrity sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A== +jest-resolve-dependencies@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz#b56a1aab95b0fd21e0a69a15fda985c05f902b8a" + integrity sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg== dependencies: - "@jest/types" "^27.0.2" - jest-regex-util "^27.0.1" - jest-snapshot "^27.0.2" + "@jest/types" "^27.1.1" + jest-regex-util "^27.0.6" + jest-snapshot "^27.2.0" -jest-resolve@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.2.tgz#087a3ed17182722a3415f92bfacc99c49cf8a965" - integrity sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q== +jest-resolve@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.2.0.tgz#f5d053693ab3806ec2f778e6df8b0aa4cfaef95f" + integrity sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" + jest-haste-map "^27.2.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-util "^27.2.0" + jest-validate "^27.2.0" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.3.tgz#d9747af3bee5a6ffaeb9e10b653263b780258b54" - integrity sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ== +jest-runner@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.0.tgz#281b255d88a473aebc0b5cb46e58a83a1251cab3" + integrity sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww== dependencies: - "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.3" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-docblock "^27.0.1" - jest-haste-map "^27.0.2" - jest-leak-detector "^27.0.2" - jest-message-util "^27.0.2" - jest-resolve "^27.0.2" - jest-runtime "^27.0.3" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-docblock "^27.0.6" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" + jest-haste-map "^27.2.0" + jest-leak-detector "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-runtime "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.3.tgz#32499c1047e5d953cfbb67fe790ab0167a614d28" - integrity sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ== - dependencies: - "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" - "@jest/globals" "^27.0.3" - "@jest/source-map" "^27.0.1" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" +jest-runtime@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.0.tgz#998295ccd80008b3031eeb5cc60e801e8551024b" + integrity sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ== + dependencies: + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/globals" "^27.2.0" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" + execa "^5.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" - jest-message-util "^27.0.2" - jest-mock "^27.0.3" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.2" - jest-snapshot "^27.0.2" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" + jest-mock "^27.1.1" + jest-regex-util "^27.0.6" + jest-resolve "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" -jest-serializer@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020" - integrity sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ== +jest-serializer@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" + integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== dependencies: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.2.tgz#40c48dc6afd3cbc5d3d07c061f20fc10d94ca0cd" - integrity sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA== +jest-snapshot@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.0.tgz#7961e7107ac666a46fbb23e7bb48ce0b8c6a9285" + integrity sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -5457,23 +5461,23 @@ jest-snapshot@^27.0.2: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.0.2" + expect "^27.2.0" graceful-fs "^4.2.4" - jest-diff "^27.0.2" - jest-get-type "^27.0.1" - jest-haste-map "^27.0.2" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-resolve "^27.0.2" - jest-util "^27.0.2" + jest-diff "^27.2.0" + jest-get-type "^27.0.6" + jest-haste-map "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" natural-compare "^1.4.0" - pretty-format "^27.0.2" + pretty-format "^27.2.0" semver "^7.3.2" jest-util@^27.0.0: @@ -5488,41 +5492,41 @@ jest-util@^27.0.0: is-ci "^3.0.0" picomatch "^2.2.3" -jest-util@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7" - integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA== +jest-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.0.tgz#bfccb85cfafae752257319e825a5b8d4ada470dc" + integrity sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz#7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5" - integrity sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg== +jest-validate@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.0.tgz#b7535f12d95dd3b4382831f4047384ca098642ab" + integrity sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.0.1" + jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.0.2" + pretty-format "^27.2.0" -jest-watcher@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb" - integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA== +jest-watcher@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.0.tgz#dc2eef4c13c6d41cebf3f1fc5f900a54b51c2ea0" + integrity sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg== dependencies: - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.0.2" + jest-util "^27.2.0" string-length "^4.0.1" jest-worker@^26.2.1: @@ -5534,23 +5538,23 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" - integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== +jest-worker@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.0.tgz#11eef39f1c88f41384ca235c2f48fe50bc229bc0" + integrity sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.3.tgz#0b4ac738c93612f778d58250aee026220487e5a4" - integrity sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg== +jest@27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.1.1.tgz#49f0497fa0fb07dc78898318cc1b737b5fbf72d8" + integrity sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA== dependencies: - "@jest/core" "^27.0.3" + "@jest/core" "^27.1.1" import-local "^3.0.2" - jest-cli "^27.0.3" + jest-cli "^27.1.1" jpeg-js@^0.4.1: version "0.4.1" @@ -6980,12 +6984,12 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" - integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig== +pretty-format@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" + integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.1.1" ansi-regex "^5.0.0" ansi-styles "^5.0.0" react-is "^17.0.1" @@ -7471,6 +7475,11 @@ rollup-plugin-node-resolve@^5.2.0: resolve "^1.11.1" rollup-pluginutils "^2.8.1" +rollup-plugin-shim@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-shim/-/rollup-plugin-shim-1.0.0.tgz#b00f5cb44cdae81358c5342fe82fa71a1602b56b" + integrity sha512-rZqFD43y4U9nSqVq3iyWBiDwmBQJY8Txi04yI9jTKD3xcl7CbFjh1qRpQshUB3sONLubDzm7vJiwB+1MEGv67w== + rollup-plugin-terser@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -8666,7 +8675,7 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^7.0.0, v8-to-istanbul@^7.1.0: +v8-to-istanbul@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== @@ -8675,6 +8684,15 @@ v8-to-istanbul@^7.0.0, v8-to-istanbul@^7.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" +v8-to-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" + integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"