From c4a50db217abb22fcff2b6d0a6f7e5140d7109b3 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Thu, 28 Jan 2021 19:02:34 +0300 Subject: [PATCH] fix: support esm format for configurations --- package.json | 2 ++ packages/webpack-cli/bin/cli.js | 8 +++-- packages/webpack-cli/lib/bootstrap.js | 4 ++- .../lib/utils/dynamic-import-loader.js | 13 +++++++ packages/webpack-cli/lib/webpack-cli.js | 31 +++++++++------- test/config-format/coffee/coffee.test.js | 1 - test/config-format/coffee/package.json | 5 --- test/config-format/failure/failure.test.js | 16 ++++----- ...pack.config.coffee => webpack.config.iced} | 0 test/config-format/mjs/mjs.test.js | 12 ++----- .../main.ts | 0 .../tsconfig.json | 0 .../typescript-commonjs-default.test.js | 14 ++++++++ .../webpack.config.ts | 0 .../config-format/typescript-commonjs/main.ts | 1 + .../typescript-commonjs/tsconfig.json | 5 +++ .../typescript-commonjs.test.js | 14 ++++++++ .../typescript-commonjs/webpack.config.ts | 14 ++++++++ test/config-format/typescript/package.json | 7 ---- .../typescript/typescript.test.js | 20 ----------- .../custom-name/config.webpack.mjs | 10 ++++++ .../custom-name/custom-name.test.js | 10 +++++- .../mjs-config/default-mjs-config.test.js | 34 ++++++++---------- test/config/error-mjs/config-error.test.js | 11 +++--- yarn.lock | 36 +++++++++++++++++-- 25 files changed, 172 insertions(+), 96 deletions(-) create mode 100644 packages/webpack-cli/lib/utils/dynamic-import-loader.js delete mode 100644 test/config-format/coffee/package.json rename test/config-format/failure/{webpack.config.coffee => webpack.config.iced} (100%) rename test/config-format/{typescript => typescript-commonjs-default}/main.ts (100%) rename test/config-format/{typescript => typescript-commonjs-default}/tsconfig.json (100%) create mode 100644 test/config-format/typescript-commonjs-default/typescript-commonjs-default.test.js rename test/config-format/{typescript => typescript-commonjs-default}/webpack.config.ts (100%) create mode 100644 test/config-format/typescript-commonjs/main.ts create mode 100644 test/config-format/typescript-commonjs/tsconfig.json create mode 100644 test/config-format/typescript-commonjs/typescript-commonjs.test.js create mode 100644 test/config-format/typescript-commonjs/webpack.config.ts delete mode 100644 test/config-format/typescript/package.json delete mode 100644 test/config-format/typescript/typescript.test.js create mode 100644 test/config-lookup/custom-name/config.webpack.mjs diff --git a/package.json b/package.json index 504d74f5ff9..b5b5372c039 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,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", @@ -91,6 +92,7 @@ "strip-ansi": "^6.0.0", "ts-jest": "^26.4.3", "typescript": "^4.1.3", + "ts-node": "^9.1.1", "webpack": "^5.18.0", "webpack-bundle-analyzer": "^4.3.0", "webpack-dev-server": "^3.11.1", diff --git a/packages/webpack-cli/bin/cli.js b/packages/webpack-cli/bin/cli.js index d309c0a985f..e7cd9ddda5b 100755 --- a/packages/webpack-cli/bin/cli.js +++ b/packages/webpack-cli/bin/cli.js @@ -2,6 +2,10 @@ 'use strict'; +const Module = require('module'); + +const originalModuleCompile = Module.prototype._compile; + require('v8-compile-cache'); const importLocal = require('import-local'); @@ -19,7 +23,7 @@ if (importLocal(__filename)) { process.title = 'webpack'; if (packageExists('webpack')) { - runCLI(process.argv); + runCLI(process.argv, originalModuleCompile); } else { promptInstallation('webpack', () => { error(`It looks like ${yellow('webpack')} is not installed.`); @@ -27,7 +31,7 @@ if (packageExists('webpack')) { .then(() => { success(`${yellow('webpack')} was installed successfully.`); - runCLI(process.argv); + runCLI(process.argv, originalModuleCompile); }) .catch(() => { error(`Action Interrupted, Please try once again or install ${yellow('webpack')} manually.`); diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index ffb65e53c08..de08340d55b 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -3,11 +3,13 @@ const logger = require('./utils/logger'); process.title = 'webpack-cli'; -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) { 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/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 0baf614ee13..b8accbe75a1 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 getPkg = require('./utils/package-exists'); @@ -1143,26 +1145,31 @@ 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 = require('./utils/dynamic-import-loader')(); + + if (this._originalModuleCompile) { + Module.prototype._compile = previousModuleCompile; + } + + if (error.code === 'ERR_REQUIRE_ESM' && 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/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..9bc774b6ebd 100644 --- a/test/config-format/mjs/mjs.test.js +++ b/test/config-format/mjs/mjs.test.js @@ -4,14 +4,8 @@ describe('webpack cli', () => { it('should support mjs config format', () => { const { exitCode, stderr, stdout } = run(__dirname, ['-c', 'webpack.config.mjs'], [], { DISABLE_V8_COMPILE_CACHE: true }); - if (exitCode === 0) { - 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(); - } + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); }); }); diff --git a/test/config-format/typescript/main.ts b/test/config-format/typescript-commonjs-default/main.ts similarity index 100% rename from test/config-format/typescript/main.ts rename to test/config-format/typescript-commonjs-default/main.ts diff --git a/test/config-format/typescript/tsconfig.json b/test/config-format/typescript-commonjs-default/tsconfig.json similarity index 100% rename from test/config-format/typescript/tsconfig.json rename to test/config-format/typescript-commonjs-default/tsconfig.json diff --git a/test/config-format/typescript-commonjs-default/typescript-commonjs-default.test.js b/test/config-format/typescript-commonjs-default/typescript-commonjs-default.test.js new file mode 100644 index 00000000000..b511e69843e --- /dev/null +++ b/test/config-format/typescript-commonjs-default/typescript-commonjs-default.test.js @@ -0,0 +1,14 @@ +const { run } = require('../../utils/test-utils'); +const { existsSync } = require('fs'); +const { resolve } = require('path'); + +describe('webpack cli', () => { + 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, 'dist/foo.bundle.js'))).toBeTruthy(); + }); +}); diff --git a/test/config-format/typescript/webpack.config.ts b/test/config-format/typescript-commonjs-default/webpack.config.ts similarity index 100% rename from test/config-format/typescript/webpack.config.ts rename to test/config-format/typescript-commonjs-default/webpack.config.ts diff --git a/test/config-format/typescript-commonjs/main.ts b/test/config-format/typescript-commonjs/main.ts new file mode 100644 index 00000000000..5dbd072a4f6 --- /dev/null +++ b/test/config-format/typescript-commonjs/main.ts @@ -0,0 +1 @@ +console.log('Main typescript file'); diff --git a/test/config-format/typescript-commonjs/tsconfig.json b/test/config-format/typescript-commonjs/tsconfig.json new file mode 100644 index 00000000000..391488ab17f --- /dev/null +++ b/test/config-format/typescript-commonjs/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "module": "commonjs" + } +} diff --git a/test/config-format/typescript-commonjs/typescript-commonjs.test.js b/test/config-format/typescript-commonjs/typescript-commonjs.test.js new file mode 100644 index 00000000000..b511e69843e --- /dev/null +++ b/test/config-format/typescript-commonjs/typescript-commonjs.test.js @@ -0,0 +1,14 @@ +const { run } = require('../../utils/test-utils'); +const { existsSync } = require('fs'); +const { resolve } = require('path'); + +describe('webpack cli', () => { + 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, 'dist/foo.bundle.js'))).toBeTruthy(); + }); +}); diff --git a/test/config-format/typescript-commonjs/webpack.config.ts b/test/config-format/typescript-commonjs/webpack.config.ts new file mode 100644 index 00000000000..bbc70963b3b --- /dev/null +++ b/test/config-format/typescript-commonjs/webpack.config.ts @@ -0,0 +1,14 @@ +/* eslint-disable node/no-unsupported-features/es-syntax */ +/** eslint-disable **/ +import * as path from 'path'; + +const config = { + mode: 'production', + entry: './main.ts', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'foo.bundle.js', + }, +}; + +export = config; 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 deleted file mode 100644 index 21fadb957e7..00000000000 --- a/test/config-format/typescript/typescript.test.js +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable node/no-unpublished-require */ -const { run, runInstall } = 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']); - - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(exitCode).toBe(0); - expect(existsSync(resolve(__dirname, 'bin/foo.bundle.js'))).toBeTruthy(); - }, - 1000 * 60 * 5, - ); -}); 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..8ea589902cc 100644 --- a/test/config-lookup/custom-name/custom-name.test.js +++ b/test/config-lookup/custom-name/custom-name.test.js @@ -4,11 +4,19 @@ const { resolve } = require('path'); const { run } = require('../../utils/test-utils'); describe('custom config file', () => { - it('should work', () => { + it('should work with cjs format', () => { const { exitCode, stderr, stdout } = run(__dirname, ['--config', resolve(__dirname, 'config.webpack.js')], false); 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')], false); + + 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..2f683cf7116 100644 --- a/test/config/defaults/mjs-config/default-mjs-config.test.js +++ b/test/config/defaults/mjs-config/default-mjs-config.test.js @@ -6,27 +6,21 @@ describe('Default Config:', () => { it('Should be able to pick mjs config by default', () => { const { exitCode, stderr, stdout } = run(__dirname, [], [], { DISABLE_V8_COMPILE_CACHE: true }); - if (exitCode === 0) { - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - // default entry should be used - expect(stdout).toContain('./src/index.js'); - // should pick up the output path from config - expect(stdout).toContain('test-output'); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + // default entry should be used + expect(stdout).toContain('./src/index.js'); + // should pick up the output path from config + expect(stdout).toContain('test-output'); - if (!isWebpack5) { - expect(stdout).toContain('Hash'); - expect(stdout).toContain('Version'); - expect(stdout).toContain('Built at'); - expect(stdout).toContain('Time'); - } - - // 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(); + if (!isWebpack5) { + expect(stdout).toContain('Hash'); + expect(stdout).toContain('Version'); + expect(stdout).toContain('Built at'); + expect(stdout).toContain('Time'); } + + // check that the output file exists + expect(fs.existsSync(path.join(__dirname, '/dist/test-output.js'))).toBeTruthy(); }); }); diff --git a/test/config/error-mjs/config-error.test.js b/test/config/error-mjs/config-error.test.js index 4abbe2e5b48..12e0428e615 100644 --- a/test/config/error-mjs/config-error.test.js +++ b/test/config/error-mjs/config-error.test.js @@ -4,19 +4,16 @@ 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')]); expect(exitCode).toBe(2); - expect(/Invalid configuration object/.test(stderr) || /Unexpected token/.test(stderr)).toBe(true); + 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')]); expect(exitCode).toBe(2); expect(stderr).toContain('SyntaxError: Unexpected token'); diff --git a/yarn.lock b/yarn.lock index a05832ed73a..34535f79374 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" @@ -7446,7 +7461,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== @@ -9899,7 +9914,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== @@ -10603,6 +10618,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" @@ -11500,6 +11527,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"