diff --git a/cli.js b/cli.js index 893293e9..b16c8acb 100755 --- a/cli.js +++ b/cli.js @@ -1,20 +1,22 @@ #!/usr/bin/env node /* eslint-disable no-console */ -'use strict' - -const path = require('path') -const sade = require('sade') -const kleur = require('kleur') -const lilconfig = require('lilconfig') -const merge = require('merge-options').bind({ ignoreUndefined: true }) -const pkg = require('./package.json') -const { runnerOptions } = require('./src/utils') -const UvuRunner = require('./src/runner-uvu') -const MochaRunner = require('./src/runner-mocha') -const TapeRunner = require('./src/runner-tape') -const BenchmarkRunner = require('./src/runner-benchmark') -const ZoraRunner = require('./src/runner-zora') +import path from 'path' +import sade from 'sade' +import kleur from 'kleur' +import { lilconfigSync } from 'lilconfig' +import mergeOptions from 'merge-options' +import { runnerOptions } from './src/utils/index.js' +import UvuRunner from './src/runner-uvu.js' +import MochaRunner from './src/runner-mocha.js' +import TapeRunner from './src/runner-tape.js' +import { BenchmarkRunner } from './src/runner-benchmark.js' +import ZoraRunner from './src/runner-zora.js' +import fs from 'fs' + +const { version } = JSON.parse(fs.readFileSync('package.json', 'utf8')) + +const merge = mergeOptions.bind({ ignoreUndefined: true }) // Handle any uncaught errors process.once('uncaughtException', ( @@ -98,7 +100,7 @@ const sade2 = new Proxy(sade('playwright-test [files]', true), { }) sade2 - .version(pkg.version) + .version(version) .describe( 'Run mocha, zora, uvu, tape and benchmark.js scripts inside real browsers with `playwright`.' ) @@ -139,17 +141,15 @@ sade2 let config if (opts.config) { - config = lilconfig - .lilconfigSync('playwright-test') - .load(path.resolve(opts.config)) + config = lilconfigSync('playwright-test').load(path.resolve(opts.config)) } else { - config = lilconfig.lilconfigSync('playwright-test').search() + config = lilconfigSync('playwright-test').search() if (!config) { - config = lilconfig.lilconfigSync('pw-test').search() + config = lilconfigSync('pw-test').search() } } - let Runner = null + let Runner switch (opts.runner) { case 'uvu': @@ -168,7 +168,7 @@ sade2 Runner = BenchmarkRunner break default: - console.error('Runner not supported: ', opts.runner) + console.error('Runner not supported:', opts.runner) process.exit(1) } const runner = new Runner( diff --git a/mocks/benchmark.js b/mocks/benchmark.js index 839bdda2..cdb2b2ca 100644 --- a/mocks/benchmark.js +++ b/mocks/benchmark.js @@ -1,9 +1,9 @@ /* eslint-disable no-unused-expressions */ 'use strict' -const Benchmark = require('benchmark') +// const Benchmark = require('benchmark') -// import Benchmark from 'benchmark' +import Benchmark from 'benchmark' const suite = new Benchmark.Suite() diff --git a/package.json b/package.json index fc19b915..a8914d3f 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,16 @@ "repository": "hugomrdias/playwright-test", "author": "Hugo Dias (hugodias.me)", "license": "MIT", + "type": "module", "main": "src/runner.js", "types": "dist/src/runner.d.ts", + "exports": "./index.js", "bin": { "playwright-test": "cli.js", "pw-test": "cli.js" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "scripts": { "prepare": "tsc && copyfiles 'src/**/*.d.ts' dist", @@ -78,6 +80,7 @@ "copyfiles": "^2.4.1", "debug": "^4.3.1", "delay": "^5.0.0", + "eslint-plugin-unicorn": "^32.0.1", "execa": "^5.0.0", "hd-scripts": "^0.1.1", "mocha": "^8.4.0", @@ -93,16 +96,29 @@ "*.js": "eslint --fix" }, "eslintConfig": { - "extends": "./node_modules/hd-scripts/eslint/index.js" + "extends": [ + "./node_modules/hd-scripts/eslint/index.js", + "plugin:unicorn/recommended" + ], + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "unicorn/prefer-node-protocol": "off", + "unicorn/prevent-abbreviations": "off", + "import/extensions": [ + "error", + "ignorePackages" + ] + } }, "eslintIgnore": [ "node_modules", "coverage", "dist", "src/vendor/benchmark.js", + "src/setup-bench.js", "src/vendor/source-map-support.js", - "src/utils/inject-process.js", - "node-globals-buffer.js", "mocks" ], "prettier": "hd-scripts/prettier.config.js" diff --git a/src/empty-fs.js b/src/empty-fs.js index f177540a..b1c6ea43 100644 --- a/src/empty-fs.js +++ b/src/empty-fs.js @@ -1,2 +1 @@ -'use strict' -module.exports = {} +export default {} diff --git a/src/node-globals-buffer.js b/src/node-globals-buffer.js index 07794ee4..6bb2ce3a 100644 --- a/src/node-globals-buffer.js +++ b/src/node-globals-buffer.js @@ -1,4 +1,5 @@ -// @ts-nocheck -export const Buffer = require('buffer') -export const process = require('process/browser') // https://github.com/ionic-team/rollup-plugin-node-polyfills + +export { default as Buffer } from 'buffer' +// @ts-ignore +export { default as process } from 'process/browser' diff --git a/src/runner-benchmark.js b/src/runner-benchmark.js index ae1d306a..07efb115 100644 --- a/src/runner-benchmark.js +++ b/src/runner-benchmark.js @@ -1,11 +1,13 @@ /* eslint-disable no-console */ -'use strict' -const path = require('path') -const Runner = require('./runner') -const { build } = require('./utils') +import path from 'path' +import { fileURLToPath } from 'url' +import { Runner } from './runner.js' +import { build } from './utils/index.js' -class BenchmarkRunner extends Runner { +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +export class BenchmarkRunner extends Runner { /** * Compile tests * @@ -26,5 +28,3 @@ class BenchmarkRunner extends Runner { return build(this, { plugins: [plugin] }) } } - -module.exports = BenchmarkRunner diff --git a/src/runner-mocha.js b/src/runner-mocha.js index 0d7126f2..f76a4c25 100644 --- a/src/runner-mocha.js +++ b/src/runner-mocha.js @@ -1,10 +1,12 @@ /* eslint-disable no-console */ -'use strict' -const merge = require('merge-options') -const Runner = require('./runner') -const waitFor = require('p-wait-for') -const { build } = require('./utils') +import merge from 'merge-options' +import { Runner } from './runner.js' +import waitFor from 'p-wait-for' +import { build } from './utils/index.js' +import { createRequire } from 'module' + +const require = createRequire(import.meta.url) const runMocha = () => ` mocha @@ -61,7 +63,7 @@ class MochaRunner extends Runner { break } default: - throw Error('mode not supported') + throw new Error('mode not supported') } } @@ -81,4 +83,4 @@ class MochaRunner extends Runner { } } -module.exports = MochaRunner +export default MochaRunner diff --git a/src/runner-tape.js b/src/runner-tape.js index 0ca8d406..c631a7c8 100644 --- a/src/runner-tape.js +++ b/src/runner-tape.js @@ -1,9 +1,13 @@ /* eslint-disable no-console */ -'use strict' -const path = require('path') -const Runner = require('./runner') -const { build } = require('./utils') +import path from 'path' +import { Runner } from './runner.js' +import { build } from './utils/index.js' +import { createRequire } from 'module' +import { fileURLToPath } from 'url' + +const require = createRequire(import.meta.url) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) /** * @typedef {import('esbuild').Plugin} EsbuildPlugin */ @@ -41,4 +45,4 @@ class TapeRunner extends Runner { } } -module.exports = TapeRunner +export default TapeRunner diff --git a/src/runner-uvu.js b/src/runner-uvu.js index 153e7d0a..898219f4 100644 --- a/src/runner-uvu.js +++ b/src/runner-uvu.js @@ -1,9 +1,8 @@ /* eslint-disable no-console */ -'use strict' -const strip = require('strip-ansi') -const Runner = require('./runner') -const { build } = require('./utils') +import strip from 'strip-ansi' +import { Runner } from './runner.js' +import { build } from './utils/index.js' const run = (/** @type {boolean} */ pass) => ` self.PW_TEST.end(${pass}) @@ -44,4 +43,4 @@ class UvuRunner extends Runner { } } -module.exports = UvuRunner +export default UvuRunner diff --git a/src/runner-zora.js b/src/runner-zora.js index 097041a6..426d230c 100644 --- a/src/runner-zora.js +++ b/src/runner-zora.js @@ -1,10 +1,12 @@ /* eslint-disable no-console */ -'use strict' -const path = require('path') -const Runner = require('./runner') -const waitFor = require('p-wait-for') -const { build } = require('./utils') +import path from 'path' +import { Runner } from './runner.js' +import waitFor from 'p-wait-for' +import { build } from './utils/index.js' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) const runZora = () => ` zora @@ -45,7 +47,7 @@ class ZoraRunner extends Runner { break } default: - throw Error('mode not supported') + throw new Error('mode not supported') } } @@ -85,4 +87,4 @@ class ZoraRunner extends Runner { } } -module.exports = ZoraRunner +export default ZoraRunner diff --git a/src/runner.js b/src/runner.js index 1734323e..1397d831 100644 --- a/src/runner.js +++ b/src/runner.js @@ -1,13 +1,11 @@ /* eslint-disable no-console */ -'use strict' - -const fs = require('fs') -const path = require('path') -const ora = require('ora') -const tempy = require('tempy') -const { premove } = require('premove/sync') -const merge = require('merge-options').bind({ ignoreUndefined: true }) -const { + +import { copyFileSync } from 'fs' +import path from 'path' +import ora from 'ora' +import { directory } from 'tempy' +import { premove } from 'premove/sync' +import { redirectConsole, getPw, addWorker, @@ -15,8 +13,14 @@ const { defaultTestPatterns, createCov, createPolka, -} = require('./utils') -const { compileSw } = require('./utils/build-sw') +} from './utils/index.js' +import { compileSw } from './utils/build-sw.js' +import mergeOptions from 'merge-options' +import { fileURLToPath } from 'node:url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +const merge = mergeOptions.bind({ ignoreUndefined: true }) /** * @typedef {import('playwright-core').Page} Page @@ -47,7 +51,7 @@ const defaultOptions = { buildSWConfig: {}, } -class Runner { +export class Runner { /** * * @param {Partial} [options] @@ -55,10 +59,10 @@ class Runner { constructor(options = {}) { /** @type {RunnerOptions} */ this.options = merge(defaultOptions, options) - /** @type {import('polka').Polka["server"] | null} */ - this.server = null - this.dir = tempy.directory() - this.browserDir = tempy.directory() + /** @type {import('polka').Polka["server"] | undefined} */ + this.server = undefined + this.dir = directory() + this.browserDir = directory() this.url = '' this.stopped = false this.watching = false @@ -90,7 +94,7 @@ class Runner { ] for (const file of files) { - fs.copyFileSync( + copyFileSync( path.join(__dirname, './../static', file), path.join(this.dir, file) ) @@ -134,15 +138,15 @@ class Runner { */ async setupPage(context) { if (this.options.extension && this.options.browser !== 'chromium') { - throw Error('Extension testing is only supported in chromium') + throw new Error('Extension testing is only supported in chromium') } if (this.options.cov && this.options.browser !== 'chromium') { - throw Error('Coverage is only supported in chromium') + throw new Error('Coverage is only supported in chromium') } if (this.options.cov && this.options.mode !== 'main') { - throw Error( + throw new Error( 'Coverage is only supported in the main thread use mode:"main" ' ) } @@ -150,12 +154,13 @@ class Runner { if (this.options.extension) { const context = /** @type {ChromiumBrowserContext} */ (this.context) const backgroundPages = await context.backgroundPages() - this.page = backgroundPages.length - ? backgroundPages[0] - : await context.waitForEvent('backgroundpage') + this.page = + backgroundPages.length > 0 + ? backgroundPages[0] + : await context.waitForEvent('backgroundpage') if (!this.page) { - throw Error('Could not find the background page for the extension.') + throw new Error('Could not find the background page for the extension.') } if (this.options.debug) { @@ -227,7 +232,7 @@ class Runner { break } default: - throw Error('mode not supported') + throw new Error('mode not supported') } } @@ -290,9 +295,9 @@ class Runner { // exit await this.stop(testsFailed) } - } catch (err) { + } catch (error) { spinner.fail('Running tests failed.') - await this.stop(true, err) + await this.stop(true, error) } } @@ -371,6 +376,7 @@ class Runner { } else if (msg) { console.log(msg) } + // eslint-disable-next-line unicorn/no-process-exit process.exit(fail ? 1 : 0) } @@ -385,5 +391,3 @@ class Runner { throw new Error('abstract method') } } - -module.exports = Runner diff --git a/src/setup-bench.js b/src/setup-bench.js index 5bf4a6ae..0a03f5dc 100644 --- a/src/setup-bench.js +++ b/src/setup-bench.js @@ -1,13 +1,12 @@ // @ts-nocheck /* eslint-disable new-cap */ -'use strict' // Run benchmarkjs in the browser https://github.com/bestiejs/benchmark.js/issues/128#issuecomment-271615298 // const process = require('process'); const _ = require('lodash') -const Benchmark = require('./vendor/benchmark') +require('./vendor/benchmark') -const BenchmarkSpecial = Benchmark.runInContext({ +const BenchmarkSpecial = globalThis.Benchmark.runInContext({ _, process, }) @@ -55,6 +54,6 @@ const proxy = new Proxy(BenchmarkSpecial, { }, }) -self.Benchmark = proxy +globalThis.Benchmark = proxy module.exports = proxy exports.Benchmark = proxy diff --git a/src/setup-mocha.js b/src/setup-mocha.js index 6d738a18..60039780 100644 --- a/src/setup-mocha.js +++ b/src/setup-mocha.js @@ -1,10 +1,9 @@ // @ts-nocheck -'use strict' /* eslint-disable no-undef */ // mocha library itself, to have it set up on global -require('mocha/mocha') +import 'mocha/mocha' const { allowUncaught, diff --git a/src/setup-tape.js b/src/setup-tape.js index 12b44f8f..34203ab6 100644 --- a/src/setup-tape.js +++ b/src/setup-tape.js @@ -1,15 +1,14 @@ // @ts-nocheck -'use strict' -const test = require('tape') +import { onFailure, onFinish } from 'tape' self.TAPE_RUN_FAIL = false -test.onFailure(() => { +onFailure(() => { self.TAPE_RUN_FAIL = true }) -test.onFinish(() => { +onFinish(() => { // eslint-disable-next-line no-undef if (process.env.PW_TEST.mode === 'worker') { postMessage({ diff --git a/src/setup-zora.js b/src/setup-zora.js index 38d08962..321dd4e7 100644 --- a/src/setup-zora.js +++ b/src/setup-zora.js @@ -1,8 +1,6 @@ -'use strict' +import { createHarness } from 'zora' -const { createHarness } = require('zora') - -const harness = createHarness({ +export const harness = createHarness({ // eslint-disable-next-line no-undef indent: process.env.INDENT === 'true', // eslint-disable-next-line no-undef @@ -11,4 +9,27 @@ const harness = createHarness({ // @ts-ignore self.zora = harness -module.exports = harness + +export default harness +export const test = harness.test +export const only = harness.only +export const skip = harness.skip +export const equal = harness.equal +export const equals = harness.equals +export const eq = harness.eq +export const deepEqual = harness.deepEqual +export const notEqual = harness.notEqual +export const notEquals = harness.notEquals +export const notEq = harness.notEq +export const notDeepEqual = harness.notDeepEqual +export const is = harness.is +export const same = harness.same +export const isNot = harness.isNot +export const notSame = harness.notSame +export const ok = harness.ok +export const truthy = harness.truthy +export const notOk = harness.notOk +export const falsy = harness.falsy +export const fail = harness.fail +export const throws = harness.throws +export const doesNotThrow = harness.doesNotThrow diff --git a/src/utils/build-sw.js b/src/utils/build-sw.js index 711bbe00..92eb1da8 100644 --- a/src/utils/build-sw.js +++ b/src/utils/build-sw.js @@ -1,10 +1,12 @@ /* eslint-disable no-console */ -'use strict' -const fs = require('fs') -const path = require('path') -const esbuild = require('esbuild') -const merge = require('merge-options').bind({ +import { writeFileSync } from 'fs' +import path from 'path' +import { build } from 'esbuild' +import mergeOptions from 'merge-options' +import { fileURLToPath } from 'url' + +const merge = mergeOptions.bind({ ignoreUndefined: true, concatArrays: true, }) @@ -18,13 +20,13 @@ const merge = require('merge-options').bind({ /** * Build the bundle * - * @param {import("../runner")} runner + * @param {import("../runner").Runner} runner * @param {{ * out: string, * entry: string * }} opts - Runner esbuild config */ -async function compileSw(runner, { out, entry }) { +export async function compileSw(runner, { out, entry }) { const outfile = path.join(runner.dir, out) const infile = path.join(runner.dir, 'in.js') const infileContent = ` @@ -36,24 +38,25 @@ self.addEventListener('activate', (event) => { import "${path.join(runner.options.cwd, entry).replace(/\\/g, '/')}" ` - fs.writeFileSync(infile, infileContent) + writeFileSync(infile, infileContent) /** @type {ESBuildOptions} */ const defaultOptions = { entryPoints: [infile], bundle: true, format: 'esm', sourcemap: 'inline', - inject: [path.join(__dirname, 'inject-process.js')], + inject: [ + path.join( + path.dirname(fileURLToPath(import.meta.url)), + 'inject-process.js' + ), + ], outfile, define: { global: 'globalThis', }, } - await esbuild.build(merge(defaultOptions, runner.options.buildSWConfig)) + await build(merge(defaultOptions, runner.options.buildSWConfig)) return out } - -module.exports = { - compileSw, -} diff --git a/src/utils/index.js b/src/utils/index.js index dc4ce0cc..454d9a79 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,19 +1,25 @@ /* eslint-disable no-console */ -'use strict' -const { createServer } = require('net') -const path = require('path') -const fs = require('fs') -const { promisify } = require('util') -const esbuild = require('esbuild') -const kleur = require('kleur') -const globby = require('globby') -const ora = require('ora') -const sirv = require('sirv') -const polka = require('polka') -const camelCase = require('camelcase') -const V8ToIstanbul = require('v8-to-istanbul') -const merge = require('merge-options').bind({ +import mergeOptions from 'merge-options' +import path from 'path' +import fs from 'fs' +import kleur from 'kleur' +import camelCase from 'camelcase' +import sirv from 'sirv' +import esbuild from 'esbuild' +import V8ToIstanbul from 'v8-to-istanbul' +import { promisify } from 'util' +import globby from 'globby' +import ora from 'ora' +import { createServer } from 'http' +import polka from 'polka' +import { createRequire } from 'module' +import { fileURLToPath } from 'url' + +const require = createRequire(import.meta.url) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +const merge = mergeOptions.bind({ ignoreUndefined: true, concatArrays: true, }) @@ -58,7 +64,7 @@ function buildExtensionPattern(extensions) { /** * @param {string[]} extensions */ -function defaultTestPatterns(extensions) { +export function defaultTestPatterns(extensions) { const extensionPattern = buildExtensionPattern(extensions) return [ @@ -123,7 +129,7 @@ function findFiles({ cwd, extensions, filePatterns }) { * @param {string[]} options.extensions * @param {string[]} options.filePatterns */ -function findTests({ cwd, extensions, filePatterns }) { +export function findTests({ cwd, extensions, filePatterns }) { return findFiles({ cwd, extensions, @@ -144,8 +150,6 @@ function extractErrorMessage(arg) { ? arg._remoteObject.description : undefined } - - return undefined } /** @type {Record} */ @@ -175,7 +179,7 @@ const messageTypeToConsoleFn = { /** * @param {import('playwright-core').ConsoleMessage} msg */ -async function redirectConsole(msg) { +export async function redirectConsole(msg) { const type = msg.type() const consoleFn = messageTypeToConsoleFn[type] @@ -190,7 +194,7 @@ async function redirectConsole(msg) { msgArgs = await Promise.all( msg.args().map((arg) => extractErrorMessage(arg) || arg.jsonValue()) ) - } catch (err) { + } catch { // ignore error runner was probably force stopped } @@ -241,18 +245,19 @@ async function redirectConsole(msg) { * @param {TBrowser} browserName * @returns {Promise>>} */ -async function getPw(browserName) { +export async function getPw(browserName) { if (!['chromium', 'firefox', 'webkit'].includes(String(browserName))) { throw new Error(`Browser not supported: ${browserName}`) } const { installBrowsersWithProgressBar, // @ts-ignore - } = require('playwright-core/lib/install/installer') + } = await import('playwright-core/lib/install/installer.js') // @ts-ignore - const setupInProcess = require('playwright-core/lib/inprocess') - const browsers = require('playwright-core/browsers.json') + const setupInProcess = await import('playwright-core/lib/inprocess.js') + // const browsers = await import('playwright-core/browsers.json') const browsersPath = require.resolve('playwright-core/browsers.json') + const browsers = JSON.parse(fs.readFileSync(browsersPath, 'utf-8')) // @ts-ignore browsers.browsers[0].download = true // chromium @@ -261,9 +266,9 @@ async function getPw(browserName) { // @ts-ignore browsers.browsers[2].download = true // webkit - fs.writeFileSync(browsersPath, JSON.stringify(browsers, null, 2)) + fs.writeFileSync(browsersPath, JSON.stringify(browsers, undefined, 2)) await installBrowsersWithProgressBar([browserName]) - const api = setupInProcess + const api = setupInProcess.default return api[browserName] } @@ -271,7 +276,7 @@ async function getPw(browserName) { /** * @param {string} filePath */ -function addWorker(filePath) { +export function addWorker(filePath) { return ` const w = new Worker("${filePath}"); w.onmessage = function(e) { @@ -285,7 +290,7 @@ w.onmessage = function(e) { /** * @param {{ [x: string]: any; }} flags */ -function runnerOptions(flags) { +export function runnerOptions(flags) { const opts = {} // eslint-disable-next-line guard-for-in @@ -328,12 +333,12 @@ function runnerOptions(flags) { /** * Build the bundle * - * @param {import("../runner")} runner + * @param {import("../runner").Runner} runner * @param {ESBuildOptions} config - Runner esbuild config * @param {string} tmpl * @param {"bundle" | "before" | "watch"} mode */ -const build = async (runner, config = {}, tmpl = '', mode = 'bundle') => { +export async function build(runner, config = {}, tmpl = '', mode = 'bundle') { const outName = `${mode}-out.js` const infile = path.join(runner.dir, 'in.js') const outfile = path.join(runner.dir, outName) @@ -411,11 +416,11 @@ require('${require /** * Create coverage report in istanbul JSON format * - * @param {import("../runner")} runner + * @param {import("../runner").Runner} runner * @param {any} coverage * @param {string} file */ -const createCov = async (runner, coverage, file) => { +export async function createCov(runner, coverage, file) { const spinner = ora('Generating code coverage.').start() const entries = {} const { cwd } = runner.options @@ -423,7 +428,7 @@ const createCov = async (runner, coverage, file) => { const TestExclude = require('test-exclude') const exclude = new TestExclude() // @ts-ignore - const f = exclude.globSync().map((f) => path.resolve(f)) + const f = new Set(exclude.globSync().map((f) => path.resolve(f))) for (const entry of coverage) { const filePath = path.join(runner.dir, entry.url.replace(runner.url, '')) @@ -439,7 +444,7 @@ const createCov = async (runner, coverage, file) => { // eslint-disable-next-line guard-for-in for (const key in instanbul) { - if (f.includes(key)) { + if (f.has(key)) { // @ts-ignore entries[key] = instanbul[key] } @@ -487,9 +492,9 @@ function getPort(port = 3000, host = '127.0.0.1') { } /** - * @param {import('../runner')} runner + * @param {import('../runner').Runner} runner */ -async function createPolka(runner) { +export async function createPolka(runner) { const host = 'localhost' const port = await getPort(3000, host) const url = `http://${host}:${port}/` @@ -528,17 +533,3 @@ async function createPolka(runner) { }) }) } - -module.exports = { - extractErrorMessage, - redirectConsole, - defaultTestPatterns, - findTests, - findFiles, - getPw, - addWorker, - runnerOptions, - build, - createCov, - createPolka, -} diff --git a/src/utils/inject-process.js b/src/utils/inject-process.js index 3a36eca3..1980c2a8 100644 --- a/src/utils/inject-process.js +++ b/src/utils/inject-process.js @@ -1,3 +1,3 @@ // @ts-nocheck -export const process = require('process/browser') +export { default as process } from 'process/browser' // https://github.com/ionic-team/rollup-plugin-node-polyfills diff --git a/src/vendor/benchmark.js b/src/vendor/benchmark.js index 0f59b3f0..57b403f8 100644 --- a/src/vendor/benchmark.js +++ b/src/vendor/benchmark.js @@ -3342,7 +3342,6 @@ })) } else { const Benchmark = runInContext() - // Check for `exports` after `define` in case a build optimizer adds an `exports` object. if (freeExports && freeModule) { // Export for Node.js. diff --git a/src/vendor/source-map-support.js b/src/vendor/source-map-support.js index c8cd54c3..dfba3f98 100644 --- a/src/vendor/source-map-support.js +++ b/src/vendor/source-map-support.js @@ -1,8 +1,8 @@ // @ts-nocheck 'use strict' -const SourceMapConsumer = require('source-map').SourceMapConsumer -const path = require('path') +import { SourceMapConsumer } from 'source-map' +import { dirname, resolve } from 'path' let fs @@ -16,7 +16,7 @@ try { /* nop */ } -const { Buffer } = require('buffer') +import { Buffer } from 'buffer' /** * Requires a module which is protected against bundler minification. @@ -141,7 +141,7 @@ function supportRelativeURL(file, url, tweak) { if (!file) { return url } - const dir = path.dirname(file) + const dir = dirname(file) const match = /^\w+:\/\/[^\/]*/.exec(dir) let protocol = match ? match[0] : '' const startPath = dir.slice(protocol.length) @@ -151,15 +151,14 @@ function supportRelativeURL(file, url, tweak) { protocol += '/' return ( - protocol + - path.resolve(dir.slice(protocol.length), url).replace(/\\/g, '/') + protocol + resolve(dir.slice(protocol.length), url).replace(/\\/g, '/') ) } if (tweak && PW_TEST_SOURCEMAP === true) { - return 'file://' + path.resolve(dir.slice(protocol.length), url) + return 'file://' + resolve(dir.slice(protocol.length), url) } - return protocol + path.resolve(dir.slice(protocol.length), url) + return protocol + resolve(dir.slice(protocol.length), url) } function retrieveSourceMapURL(source) { @@ -633,12 +632,16 @@ function shimEmitUncaughtException() { const originalRetrieveFileHandlers = retrieveFileHandlers.slice(0) const originalRetrieveMapHandlers = retrieveMapHandlers.slice(0) -exports.wrapCallSite = wrapCallSite -exports.getErrorSource = getErrorSource -exports.mapSourcePosition = mapSourcePosition -exports.retrieveSourceMap = retrieveSourceMap +const _wrapCallSite = wrapCallSite +export { _wrapCallSite as wrapCallSite } +const _getErrorSource = getErrorSource +export { _getErrorSource as getErrorSource } +const _mapSourcePosition = mapSourcePosition +export { _mapSourcePosition as mapSourcePosition } +const _retrieveSourceMap = retrieveSourceMap +export { _retrieveSourceMap as retrieveSourceMap } -exports.install = function (options) { +export function install(options) { options = options || {} if (options.environment) { @@ -736,7 +739,7 @@ exports.install = function (options) { } } -exports.resetRetrieveHandlers = function () { +export function resetRetrieveHandlers() { retrieveFileHandlers.length = 0 retrieveMapHandlers.length = 0 diff --git a/test.js b/test.js index 6c7ab477..de798291 100644 --- a/test.js +++ b/test.js @@ -1,14 +1,12 @@ -'use strict' - -const { test } = require('uvu') -const assert = require('uvu/assert') -const execa = require('execa') +import { test } from 'uvu' +import { is, ok } from 'uvu/assert' +import execa from 'execa' test('mocha', async () => { const proc = await execa('./cli.js', ['mocks/test.mocha.js']) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('5 passing'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('5 passing'), 'process stdout') }) test('mocha with DEBUG=app', async () => { @@ -16,16 +14,16 @@ test('mocha with DEBUG=app', async () => { env: { DEBUG: 'app' }, }) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('5 passing'), 'process stdout') - assert.ok(proc.stdout.includes('app test pass'), 'debug output') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('5 passing'), 'process stdout') + ok(proc.stdout.includes('app test pass'), 'debug output') }) test('mocha incognito', async () => { const proc = await execa('./cli.js', ['mocks/test.mocha.js', '--incognito']) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('5 passing'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('5 passing'), 'process stdout') }) test('mocha mode:worker', async () => { @@ -35,15 +33,15 @@ test('mocha mode:worker', async () => { 'worker', ]) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('5 passing'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('5 passing'), 'process stdout') }) test('mocha extension', async () => { const proc = await execa('./cli.js', ['mocks/test.mocha.js', '--extension']) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('5 passing'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('5 passing'), 'process stdout') }) test('tape', async () => { @@ -53,8 +51,8 @@ test('tape', async () => { 'tape', ]) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('# pass 5'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('# pass 5'), 'process stdout') }) test('tape mode:worker', async () => { @@ -66,8 +64,8 @@ test('tape mode:worker', async () => { 'worker', ]) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('# pass 5'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('# pass 5'), 'process stdout') }) test('zora', async () => { @@ -82,8 +80,8 @@ test('zora', async () => { } ) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('# success: 2'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('# success: 2'), 'process stdout') }) test('zora mode:worker', async () => { @@ -98,8 +96,8 @@ test('zora mode:worker', async () => { } ) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('# success: 2'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('# success: 2'), 'process stdout') }) test.skip('benchmark', async () => { @@ -109,8 +107,8 @@ test.skip('benchmark', async () => { 'benchmark', ]) - assert.is(proc.exitCode, 0, 'exit code') - assert.ok(proc.stdout.includes('Fastest is String#indexOf'), 'process stdout') + is(proc.exitCode, 0, 'exit code') + ok(proc.stdout.includes('Fastest is String#indexOf'), 'process stdout') }) test('sw', async () => { @@ -122,6 +120,6 @@ test('sw', async () => { 'mocks/sw/sw.config.js', ]) - assert.is(proc.exitCode, 0, 'exit code') + is(proc.exitCode, 0, 'exit code') }) test.run() diff --git a/tsconfig.json b/tsconfig.json index 59c7ab44..1c639d40 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "hd-scripts/tsconfig.json", "compilerOptions": { - "outDir": "dist" + "outDir": "dist", + "module": "ES2020" }, - "include": ["src", "test.js", "cli.js", "package.json"] + "include": ["src", "src/utils", "test.js", "cli.js", "package.json"] } diff --git a/yarn.lock b/yarn.lock index 5227f5f0..ec51022b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,18 +14,166 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: "@babel/highlight" "^7.12.13" +"@babel/compat-data@^7.13.15": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" + integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== + +"@babel/core@^7.12.16": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.2.tgz#54e45334ffc0172048e5c93ded36461d3ad4c417" + integrity sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.2" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/eslint-parser@^7.12.16": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.14.2.tgz#aa6fe7b76378397d643f14dfa8bf920cb6fbddab" + integrity sha512-g1YXHASb84MvEkReG/nZ74emTPAMjip1Ey6azZqKTEWidpgEzPGl/uoc6IPJjaMGw424u40sNm1V70tuYOQmeA== + dependencies: + eslint-scope "^5.1.0" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/generator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.2.tgz#d5773e8b557d421fd6ce0d5efa5fd7fc22567c30" + integrity sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ== + dependencies: + "@babel/types" "^7.14.2" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-function-name@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" + integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.14.2" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" + integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -35,6 +183,42 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.12.13", "@babel/parser@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.2.tgz#0c1680aa44ad4605b16cbdcc5c341a61bde9c746" + integrity sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ== + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" + integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.14.2" + "@babel/types" "^7.14.2" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" + integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + to-fast-properties "^2.0.0" + "@eslint/eslintrc@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" @@ -157,6 +341,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.0.tgz#557dd0da4a6dca1407481df3bbacae0cd6f68042" integrity sha512-YN1d+ae2MCb4U0mMa+Zlb5lWTdpFShbAj5nmte6lel27waMMBfivrm0prC16p/Di3DyTrmerrYUT8/145HXxVw== +"@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/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -516,6 +705,17 @@ browser-util-inspect@^0.2.0: resolved "https://registry.yarnpkg.com/browser-util-inspect/-/browser-util-inspect-0.2.0.tgz#cdda8ce1a4a07a4386035168a228c8777bff459c" integrity sha1-zdqM4aSgekOGA1FooijId3v/RZw= +browserslist@^4.14.5: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -542,6 +742,11 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +builtin-modules@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -565,6 +770,11 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +caniuse-lite@^1.0.30001219: + version "1.0.30001228" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" + integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== + chalk@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -608,6 +818,18 @@ chokidar@3.5.1: optionalDependencies: fsevents "~2.3.1" +ci-info@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" + integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= + dependencies: + escape-string-regexp "^1.0.5" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -680,6 +902,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + commander@^6.1.0, commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -700,7 +927,7 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -convert-source-map@^1.6.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== @@ -750,7 +977,7 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -debug@4, debug@4.3.1, debug@^4.0.1, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: +debug@4, debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -887,6 +1114,11 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +electron-to-chromium@^1.3.723: + version "1.3.727" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz#857e310ca00f0b75da4e1db6ff0e073cc4a91ddf" + integrity sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1105,7 +1337,26 @@ eslint-plugin-promise@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-plugin-unicorn@^32.0.1: + version "32.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.1.tgz#a7cb9f538441b78936a96261eea4392d76526d77" + integrity sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg== + dependencies: + ci-info "^3.1.1" + clean-regexp "^1.0.0" + eslint-template-visitor "^2.3.2" + eslint-utils "^2.1.0" + import-modules "^2.1.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.23" + reserved-words "^0.1.2" + safe-regex "^2.1.1" + semver "^7.3.5" + +eslint-scope@^5.0.0, eslint-scope@^5.1.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -1113,6 +1364,17 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-template-visitor@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz#b52f96ff311e773a345d79053ccc78275bbc463d" + integrity sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA== + dependencies: + "@babel/core" "^7.12.16" + "@babel/eslint-parser" "^7.12.16" + eslint-visitor-keys "^2.0.0" + esquery "^1.3.1" + multimap "^1.1.0" + eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -1130,6 +1392,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + eslint@^7.23.0: version "7.25.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" @@ -1187,7 +1454,7 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: +esquery@^1.0.1, esquery@^1.3.1, esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -1405,6 +1672,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1455,6 +1727,11 @@ glob@7.1.6, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" @@ -1598,6 +1875,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-modules@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.1.0.tgz#abe7df297cb6c1f19b57246eb8b8bd9664b6d8c2" + integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1652,6 +1934,13 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" +is-builtin-module@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" + integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== + dependencies: + builtin-modules "^3.0.0" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" @@ -1865,6 +2154,11 @@ jsdoctypeparser@^9.0.0: resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -1892,6 +2186,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + kleur@^4.0.3, kleur@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" @@ -2145,6 +2446,11 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multimap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8" + integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw== + nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -2155,6 +2461,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== + noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" @@ -2163,7 +2474,7 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" -normalize-package-data@^2.3.2: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -2477,6 +2788,11 @@ plur@^1.0.0: resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" integrity sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY= +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + pngjs@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" @@ -2586,6 +2902,15 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -2595,6 +2920,16 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + readable-stream@2.2.9: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" @@ -2649,6 +2984,11 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +regexp-tree@^0.1.23, regexp-tree@~0.1.1: + version "0.1.23" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.23.tgz#8a8ce1cc5e971acef62213a7ecdb1f6e18a1f1b2" + integrity sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw== + regexp.prototype.flags@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" @@ -2692,6 +3032,11 @@ requireindex@~1.2.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2776,6 +3121,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -2786,7 +3138,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.1.0: +semver@^6.1.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -2878,6 +3230,11 @@ source-map@0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" @@ -3183,6 +3540,11 @@ through@2, through@^2.3.8, through@~2.3.4: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -3269,6 +3631,11 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"