diff --git a/package.json b/package.json index a54dc077679..84f62d67bd3 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "pretest": "yarn build && yarn lint && yarn prepsuite", "test": "jest --reporters=default", "test:smoketests": "nyc node smoketests", - "test:coverage": "nyc jest --forceExit", + "test:coverage": "nyc --require ts-node/register jest --forceExit", "test:cli": "jest test --reporters=default --forceExit", "test:packages": "jest packages/ --reporters=default --forceExit", "test:ci": "yarn test:cli && yarn test:packages", @@ -64,6 +64,7 @@ "@typescript-eslint/eslint-plugin": "^2.34.0", "@typescript-eslint/parser": "^2.34.0", "@webpack-cli/migrate": "^1.1.2", + "coffeescript": "^2.5.1", "colorette": "^1.2.1", "commitlint": "^11.0.0", "commitlint-config-cz": "^0.13.2", @@ -88,6 +89,7 @@ "rimraf": "^3.0.2", "strip-ansi": "^6.0.0", "ts-jest": "^26.4.3", + "ts-node": "^9.1.1", "typescript": "^4.1.3", "webpack": "^5.18.0", "webpack-bundle-analyzer": "^4.3.0", diff --git a/packages/webpack-cli/bin/cli.js b/packages/webpack-cli/bin/cli.js index c78e0935e9f..db74156aa8b 100755 --- a/packages/webpack-cli/bin/cli.js +++ b/packages/webpack-cli/bin/cli.js @@ -1,6 +1,11 @@ #!/usr/bin/env node 'use strict'; + +const Module = require('module'); + +const originalModuleCompile = Module.prototype._compile; + require('v8-compile-cache'); const importLocal = require('import-local'); @@ -15,7 +20,7 @@ if (importLocal(__filename)) { process.title = 'webpack'; if (utils.packageExists('webpack')) { - runCLI(process.argv); + runCLI(process.argv, originalModuleCompile); } else { const { promptInstallation, logger, colors } = utils; @@ -25,7 +30,7 @@ if (utils.packageExists('webpack')) { .then(() => { logger.success(`${colors.bold('webpack')} was installed successfully.`); - runCLI(process.argv); + runCLI(process.argv, originalModuleCompile); }) .catch(() => { logger.error(`Action Interrupted, Please try once again or install ${colors.bold('webpack')} manually.`); diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index c01ca2b7ce7..0a83a81c9e2 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -1,11 +1,13 @@ const WebpackCLI = require('./webpack-cli'); const utils = require('./utils'); -const runCLI = async (args) => { +const runCLI = async (args, originalModuleCompile) => { try { // Create a new instance of the CLI object const cli = new WebpackCLI(); + cli._originalModuleCompile = originalModuleCompile; + await cli.run(args); } catch (error) { utils.logger.error(error); diff --git a/packages/webpack-cli/lib/utils/dynamic-import-loader.js b/packages/webpack-cli/lib/utils/dynamic-import-loader.js new file mode 100644 index 00000000000..a9dbedc197b --- /dev/null +++ b/packages/webpack-cli/lib/utils/dynamic-import-loader.js @@ -0,0 +1,13 @@ +function dynamicImportLoader() { + let importESM; + + try { + importESM = new Function('id', 'return import(id);'); + } catch (e) { + importESM = null; + } + + return importESM; +} + +module.exports = dynamicImportLoader; diff --git a/packages/webpack-cli/lib/utils/index.js b/packages/webpack-cli/lib/utils/index.js index 223e9c0cf3f..045c98f2aab 100644 --- a/packages/webpack-cli/lib/utils/index.js +++ b/packages/webpack-cli/lib/utils/index.js @@ -19,6 +19,10 @@ module.exports = { return require('./capitalize-first-letter'); }, + get dynamicImportLoader() { + return require('./dynamic-import-loader'); + }, + get getPackageManager() { return require('./get-package-manager'); }, diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 04d28a9135e..79f7070534c 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -1,5 +1,7 @@ const fs = require('fs'); const path = require('path'); +const { pathToFileURL } = require('url'); +const Module = require('module'); const { program } = require('commander'); const utils = require('./utils'); @@ -1137,26 +1139,35 @@ class WebpackCLI { } } - const { pathToFileURL } = require('url'); - - let importESM; - - try { - importESM = new Function('id', 'return import(id);'); - } catch (e) { - importESM = null; - } - let options; try { try { options = require(configPath); } catch (error) { - if (pathToFileURL && importESM && error.code === 'ERR_REQUIRE_ESM') { + let previousModuleCompile; + + // TODO Workaround https://github.com/zertosh/v8-compile-cache/issues/30 + if (this._originalModuleCompile) { + previousModuleCompile = Module.prototype._compile; + + Module.prototype._compile = this._originalModuleCompile; + } + + const dynamicImportLoader = this.utils.dynamicImportLoader(); + + if (this._originalModuleCompile) { + Module.prototype._compile = previousModuleCompile; + } + + if ( + (error.code === 'ERR_REQUIRE_ESM' || process.env.WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG) && + pathToFileURL && + dynamicImportLoader + ) { const urlForConfig = pathToFileURL(configPath); - options = await importESM(urlForConfig); + options = await dynamicImportLoader(urlForConfig); options = options.default; return { options, path: configPath }; diff --git a/test/config-format/coffee/coffee.test.js b/test/config-format/coffee/coffee.test.js index 84f6ada8f75..1a31dbd4849 100644 --- a/test/config-format/coffee/coffee.test.js +++ b/test/config-format/coffee/coffee.test.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line node/no-unpublished-require const { run } = require('../../utils/test-utils'); describe('webpack cli', () => { diff --git a/test/config-format/coffee/package.json b/test/config-format/coffee/package.json deleted file mode 100644 index 79463144cb1..00000000000 --- a/test/config-format/coffee/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "coffeescript": "^2.5.1" - } -} diff --git a/test/config-format/commonjs-default/commonjs-default.test.js b/test/config-format/commonjs-default/commonjs-default.test.js new file mode 100644 index 00000000000..b31d62a3655 --- /dev/null +++ b/test/config-format/commonjs-default/commonjs-default.test.js @@ -0,0 +1,11 @@ +const { run } = require('../../utils/test-utils'); + +describe('webpack cli', () => { + it('should support CommonJS file', () => { + const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.cjs'], false); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); +}); diff --git a/test/config-format/commonjs-default/main.js b/test/config-format/commonjs-default/main.js new file mode 100644 index 00000000000..8ed93e41fb2 --- /dev/null +++ b/test/config-format/commonjs-default/main.js @@ -0,0 +1 @@ +console.log('Hoshiumi'); diff --git a/test/config-format/commonjs-default/webpack.config.cjs b/test/config-format/commonjs-default/webpack.config.cjs new file mode 100644 index 00000000000..415d965a247 --- /dev/null +++ b/test/config-format/commonjs-default/webpack.config.cjs @@ -0,0 +1,12 @@ +const path = require('path'); + +const config = { + mode: 'production', + entry: './main.js', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'foo.bundle.js', + }, +}; + +module.exports.default = config; diff --git a/test/config-format/failure/failure.test.js b/test/config-format/failure/failure.test.js index 125c94e31bf..0befcb891ca 100644 --- a/test/config-format/failure/failure.test.js +++ b/test/config-format/failure/failure.test.js @@ -2,17 +2,15 @@ const path = require('path'); const { run } = require('../../utils/test-utils'); -describe('webpack cli', () => { - it('should support mjs config format', () => { - const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.coffee']); +describe('failure', () => { + it('should log error on not installed registers', () => { + const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.iced']); expect(exitCode).toBe(2); - expect(stderr).toContain(`Unable load '${path.resolve(__dirname, './webpack.config.coffee')}'`); - expect(stderr).toContain('Unable to use specified module loaders for ".coffee".'); - expect(stderr).toContain("Cannot find module 'coffeescript/register'"); - expect(stderr).toContain("Cannot find module 'coffee-script/register'"); - expect(stderr).toContain("Cannot find module 'coffeescript'"); - expect(stderr).toContain("Cannot find module 'coffee-script'"); + expect(stderr).toContain(`Unable load '${path.resolve(__dirname, './webpack.config.iced')}'`); + expect(stderr).toContain('Unable to use specified module loaders for ".iced".'); + expect(stderr).toContain("Cannot find module 'iced-coffee-script/register'"); + expect(stderr).toContain("Cannot find module 'iced-coffee-script'"); expect(stderr).toContain('Please install one of them'); expect(stdout).toBeFalsy(); }); diff --git a/test/config-format/failure/webpack.config.coffee b/test/config-format/failure/webpack.config.iced similarity index 100% rename from test/config-format/failure/webpack.config.coffee rename to test/config-format/failure/webpack.config.iced diff --git a/test/config-format/mjs/mjs.test.js b/test/config-format/mjs/mjs.test.js index e8ada298f2a..97853c18bfd 100644 --- a/test/config-format/mjs/mjs.test.js +++ b/test/config-format/mjs/mjs.test.js @@ -2,16 +2,17 @@ const { run } = require('../../utils/test-utils'); describe('webpack cli', () => { it('should support mjs config format', () => { - const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.mjs'], [], { DISABLE_V8_COMPILE_CACHE: true }); + const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.mjs'], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }); - if (exitCode === 0) { + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toBe(2); + expect(stdout).toBeFalsy(); + } else { expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); - } else { - expect(exitCode).toBe(2); - expect(/Cannot use import statement outside a module/.test(stderr) || /Unexpected token/.test(stderr)).toBe(true); - expect(stdout).toBeFalsy(); } }); }); diff --git a/test/config-format/typescript/package.json b/test/config-format/typescript/package.json deleted file mode 100644 index 43237a25bed..00000000000 --- a/test/config-format/typescript/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": { - "typescript": "^3.8.2", - "ts-node": "^8.6.2", - "tsconfig-paths": "^3.9.0" - } -} diff --git a/test/config-format/typescript/typescript.test.js b/test/config-format/typescript/typescript.test.js index 21fadb957e7..b511e69843e 100644 --- a/test/config-format/typescript/typescript.test.js +++ b/test/config-format/typescript/typescript.test.js @@ -1,20 +1,14 @@ -/* eslint-disable node/no-unpublished-require */ -const { run, runInstall } = require('../../utils/test-utils'); +const { run } = require('../../utils/test-utils'); const { existsSync } = require('fs'); const { resolve } = require('path'); describe('webpack cli', () => { - it.skip( - 'should support typescript file', - async () => { - await runInstall(__dirname); - const { exitCode, stderr, stdout } = run(__dirname, ['-c', './webpack.config.ts']); + it('should support typescript file', () => { + const { exitCode, stderr, stdout } = run(__dirname, ['-c', './webpack.config.ts']); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(exitCode).toBe(0); - expect(existsSync(resolve(__dirname, 'bin/foo.bundle.js'))).toBeTruthy(); - }, - 1000 * 60 * 5, - ); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(existsSync(resolve(__dirname, 'dist/foo.bundle.js'))).toBeTruthy(); + }); }); diff --git a/test/config-format/typescript/webpack.config.ts b/test/config-format/typescript/webpack.config.ts index 4a17fa148c6..bbc70963b3b 100644 --- a/test/config-format/typescript/webpack.config.ts +++ b/test/config-format/typescript/webpack.config.ts @@ -11,4 +11,4 @@ const config = { }, }; -export default config; +export = config; diff --git a/test/config-lookup/custom-name/config.webpack.mjs b/test/config-lookup/custom-name/config.webpack.mjs new file mode 100644 index 00000000000..272b905bc1c --- /dev/null +++ b/test/config-lookup/custom-name/config.webpack.mjs @@ -0,0 +1,10 @@ +import { fileURLToPath } from 'url'; +import path from 'path'; + +export default { + entry: './a.js', + output: { + path: path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'dist'), + filename: 'a.bundle.js', + }, +}; diff --git a/test/config-lookup/custom-name/custom-name.test.js b/test/config-lookup/custom-name/custom-name.test.js index aa9bcd1c439..1f088a363e4 100644 --- a/test/config-lookup/custom-name/custom-name.test.js +++ b/test/config-lookup/custom-name/custom-name.test.js @@ -4,11 +4,26 @@ const { resolve } = require('path'); const { run } = require('../../utils/test-utils'); describe('custom config file', () => { - it('should work', () => { - const { exitCode, stderr, stdout } = run(__dirname, ['--config', resolve(__dirname, 'config.webpack.js')], false); + it('should work with cjs format', () => { + const { exitCode, stderr, stdout } = run(__dirname, ['--config', resolve(__dirname, 'config.webpack.js')]); expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); }); + + it('should work with esm format', () => { + const { exitCode, stderr, stdout } = run(__dirname, ['--config', resolve(__dirname, 'config.webpack.mjs')], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }); + + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toBe(2); + expect(stdout).toBeFalsy(); + } else { + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + } + }); }); diff --git a/test/config/defaults/mjs-config/default-mjs-config.test.js b/test/config/defaults/mjs-config/default-mjs-config.test.js index b2fe3551bdc..f5b443c9613 100644 --- a/test/config/defaults/mjs-config/default-mjs-config.test.js +++ b/test/config/defaults/mjs-config/default-mjs-config.test.js @@ -4,9 +4,12 @@ const { run, isWebpack5 } = require('../../../utils/test-utils'); describe('Default Config:', () => { it('Should be able to pick mjs config by default', () => { - const { exitCode, stderr, stdout } = run(__dirname, [], [], { DISABLE_V8_COMPILE_CACHE: true }); + const { exitCode, stderr, stdout } = run(__dirname, [], { env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true } }); - if (exitCode === 0) { + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toEqual(2); + expect(stdout).toBeFalsy(); + } else { expect(exitCode).toEqual(0); expect(stderr).toBeFalsy(); // default entry should be used @@ -23,10 +26,6 @@ describe('Default Config:', () => { // check that the output file exists expect(fs.existsSync(path.join(__dirname, '/dist/test-output.js'))).toBeTruthy(); - } else { - expect(exitCode).toEqual(2); - expect(stderr).toContain('Unexpected token'); - expect(stdout).toBeFalsy(); } }); }); diff --git a/test/config/error-mjs/config-error.test.js b/test/config/error-mjs/config-error.test.js index 4abbe2e5b48..eb90cbf1e76 100644 --- a/test/config/error-mjs/config-error.test.js +++ b/test/config/error-mjs/config-error.test.js @@ -4,22 +4,31 @@ const { run } = require('../../utils/test-utils'); describe('config error', () => { it('should throw error with invalid configuration', () => { - const { exitCode, stderr, stdout } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.mjs')], [], { - DISABLE_V8_COMPILE_CACHE: true, + const { exitCode, stderr, stdout } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.mjs')], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, }); expect(exitCode).toBe(2); - expect(/Invalid configuration object/.test(stderr) || /Unexpected token/.test(stderr)).toBe(true); + + if (!/Error: Not supported/.test(stderr)) { + expect(stderr).toContain('Invalid configuration object'); + expect(stderr).toContain(`"development" | "production" | "none"`); + } + expect(stdout).toBeFalsy(); }); it('should throw syntax error and exit with non-zero exit code', () => { - const { exitCode, stderr, stdout } = run(__dirname, ['-c', resolve(__dirname, 'syntax-error.mjs')], [], { - DISABLE_V8_COMPILE_CACHE: true, + const { exitCode, stderr, stdout } = run(__dirname, ['-c', resolve(__dirname, 'syntax-error.mjs')], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, }); expect(exitCode).toBe(2); - expect(stderr).toContain('SyntaxError: Unexpected token'); + + if (!/Error: Not supported/.test(stderr)) { + expect(stderr).toContain('SyntaxError: Unexpected token'); + } + expect(stdout).toBeFalsy(); }); }); diff --git a/test/entry/scss/package.json b/test/entry/scss/package.json index 2ddfa5b1c12..11b90db6ca3 100644 --- a/test/entry/scss/package.json +++ b/test/entry/scss/package.json @@ -1,9 +1,9 @@ { "dependencies": { - "css-loader": "^3.4.2", - "style-loader": "^1.1.3", - "sass-loader": "^8.0.2", - "mini-css-extract-plugin": "^0.9.0", - "node-sass": "^4.13.1" + "css-loader": "^5.0.1", + "style-loader": "^2.0.0", + "sass-loader": "^10.1.1", + "mini-css-extract-plugin": "^1.3.5", + "node-sass": "^5.0.0" } } diff --git a/test/watch/basic/basic.test.js b/test/watch/basic/basic.test.js index 771e4f81344..29013daeff3 100644 --- a/test/watch/basic/basic.test.js +++ b/test/watch/basic/basic.test.js @@ -38,7 +38,7 @@ describe('basic', () => { if (!modified) { process.nextTick(() => { - writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');`); + writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');\n`); }); modified = true; @@ -71,7 +71,7 @@ describe('basic', () => { if (!modified) { process.nextTick(() => { - writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');`); + writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');\n`); }); modified = true; @@ -106,7 +106,7 @@ describe('basic', () => { if (!modified) { process.nextTick(() => { - writeFileSync(resolve(__dirname, './src/entry.js'), `console.log('watch flag test');`); + writeFileSync(resolve(__dirname, './src/entry.js'), `console.log('watch flag test');\n`); }); modified = true; @@ -139,7 +139,7 @@ describe('basic', () => { if (!modified) { process.nextTick(() => { - writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');`); + writeFileSync(resolve(__dirname, './src/index.js'), `console.log('watch flag test');\n`); }); modified = true; diff --git a/test/watch/basic/src/index.js b/test/watch/basic/src/index.js index efc51ca0a97..1d8734ee1c8 100644 --- a/test/watch/basic/src/index.js +++ b/test/watch/basic/src/index.js @@ -1 +1 @@ -console.log('watch flag test'); \ No newline at end of file +console.log('watch flag test'); diff --git a/yarn.lock b/yarn.lock index 2d97813f88f..7cab2c49a97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2495,6 +2495,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3307,6 +3312,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +coffeescript@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.5.1.tgz#b2442a1f2c806139669534a54adc35010559d16a" + integrity sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3657,6 +3667,11 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -7436,7 +7451,7 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -9889,7 +9904,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.19: +source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -10593,6 +10608,18 @@ ts-jest@^26.4.3: semver "7.x" yargs-parser "20.x" +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -11490,6 +11517,11 @@ yeoman-test@^2.7.0: yeoman-environment "^2.10.0" yeoman-generator "^4.10.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"