diff --git a/package.json b/package.json index d472ba02..a6eb8fbc 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@google-cloud/firestore": "^4.14.0", "@sentry/node": "^6.10.0", "@slack/web-api": "^6.3.0", + "@swc/wasm": "^1.2.89", "@tensorflow/tfjs-node": "^3.8.0", "@vercel/webpack-asset-relocator-loader": "1.6.0", "analytics-node": "^5.0.0", @@ -63,6 +64,7 @@ "isomorphic-unfetch": "^3.0.0", "jest": "^27.0.6", "jimp": "^0.16.1", + "json5": "^2.2.0", "jugglingdb": "2.0.1", "koa": "^2.6.2", "leveldown": "^6.0.0", @@ -72,6 +74,7 @@ "mailgun": "^0.5.0", "mariadb": "^2.0.1-beta", "memcached": "^2.2.2", + "memory-fs": "^0.5.0", "mkdirp": "^1.0.4", "mongoose": "^5.3.12", "mysql": "^2.16.0", @@ -97,15 +100,13 @@ "socket.io": "^4.1.3", "source-map-support": "^0.5.9", "stripe": "^8.167.0", + "swc-loader": "^0.1.15", "swig": "^1.4.2", "terser": "^5.6.1", "the-answer": "^1.0.0", "tiny-json-http": "^7.0.2", - "ts-loader": "^8.3.0", - "tsconfig-paths": "^3.7.0", - "tsconfig-paths-webpack-plugin": "^3.2.0", "twilio": "^3.23.2", - "typescript": "^4.4.2", + "typescript": "^4.4.3", "vm2": "^3.6.6", "vue": "^2.5.17", "vue-server-renderer": "^2.5.17", diff --git a/scripts/build.js b/scripts/build.js index cf5d5d08..7fcab2fa 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -53,23 +53,23 @@ async function main() { ); checkUnknownAssets('shebang-loader', Object.keys(shebangLoaderAssets)); - const { code: tsLoader, assets: tsLoaderAssets } = await ncc( - __dirname + "/../src/loaders/ts-loader", + const { code: swcLoader, assets: swcLoaderAssets } = await ncc( + __dirname + "/../src/loaders/swc-loader", { - filename: "ts-loader.js", + filename: "swc-loader.js", minify, cache, v8cache, noAssetBuilds: true }, ); - checkUnknownAssets('ts-loader', Object.keys(tsLoaderAssets).filter(asset => !asset.startsWith('lib/') && !asset.startsWith('typescript/lib'))); + checkUnknownAssets('swc-loader', Object.keys(swcLoaderAssets).filter(asset => asset !== 'wasm_bg.wasm')); const { code: stringifyLoader, assets: stringifyLoaderAssets } = await ncc( __dirname + "/../src/loaders/stringify-loader", { filename: "stringify-loader.js", minify, cache, v8cache } ); - checkUnknownAssets('stringify-loader', Object.keys(stringifyLoader)); + checkUnknownAssets('stringify-loader', Object.keys(stringifyLoaderAssets)); const { code: sourcemapSupport, assets: sourcemapAssets } = await ncc( require.resolve("source-map-support/register"), @@ -92,7 +92,8 @@ async function main() { writeFileSync(__dirname + "/../dist/ncc/sourcemap-register.js.cache", sourcemapAssets["sourcemap-register.js.cache"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/relocate-loader.js.cache", relocateLoaderAssets["relocate-loader.js.cache"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/shebang-loader.js.cache", shebangLoaderAssets["shebang-loader.js.cache"].source); - writeFileSync(__dirname + "/../dist/ncc/loaders/ts-loader.js.cache", tsLoaderAssets["ts-loader.js.cache"].source); + writeFileSync(__dirname + "/../dist/ncc/loaders/swc-loader.js.cache", swcLoaderAssets["swc-loader.js.cache"].source); + writeFileSync(__dirname + "/../dist/ncc/loaders/wasm_bg.wasm", swcLoaderAssets["wasm_bg.wasm"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/stringify-loader.js.cache", stringifyLoaderAssets["stringify-loader.js.cache"].source); writeFileSync(__dirname + "/../dist/ncc/cli.js.cache.js", cliAssets["cli.js.cache.js"].source); @@ -100,7 +101,7 @@ async function main() { writeFileSync(__dirname + "/../dist/ncc/sourcemap-register.js.cache.js", sourcemapAssets["sourcemap-register.js.cache.js"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/relocate-loader.js.cache.js", relocateLoaderAssets["relocate-loader.js.cache.js"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/shebang-loader.js.cache.js", shebangLoaderAssets["shebang-loader.js.cache.js"].source); - writeFileSync(__dirname + "/../dist/ncc/loaders/ts-loader.js.cache.js", tsLoaderAssets["ts-loader.js.cache.js"].source); + writeFileSync(__dirname + "/../dist/ncc/loaders/swc-loader.js.cache.js", swcLoaderAssets["swc-loader.js.cache.js"].source); writeFileSync(__dirname + "/../dist/ncc/loaders/stringify-loader.js.cache.js", stringifyLoaderAssets["stringify-loader.js.cache.js"].source); writeFileSync(__dirname + "/../dist/ncc/cli.js", cli, { mode: 0o777 }); @@ -109,7 +110,7 @@ async function main() { writeFileSync(__dirname + "/../dist/ncc/sourcemap-register.js", sourcemapSupport); writeFileSync(__dirname + "/../dist/ncc/loaders/relocate-loader.js", relocateLoader); writeFileSync(__dirname + "/../dist/ncc/loaders/shebang-loader.js", shebangLoader); - writeFileSync(__dirname + "/../dist/ncc/loaders/ts-loader.js", tsLoader); + writeFileSync(__dirname + "/../dist/ncc/loaders/swc-loader.js", swcLoader); writeFileSync(__dirname + "/../dist/ncc/loaders/stringify-loader.js", stringifyLoader); writeFileSync(__dirname + "/../dist/ncc/loaders/uncacheable.js", readFileSync(__dirname + "/../src/loaders/uncacheable.js")); writeFileSync(__dirname + "/../dist/ncc/loaders/empty-loader.js", readFileSync(__dirname + "/../src/loaders/empty-loader.js")); diff --git a/src/index.js b/src/index.js index f7dff022..54d0f155 100644 --- a/src/index.js +++ b/src/index.js @@ -5,12 +5,10 @@ const { join, dirname, extname, relative, resolve: pathResolve } = require("path const webpack = require("webpack"); const MemoryFS = require("memory-fs"); const terser = require("terser"); -const tsconfigPaths = require("tsconfig-paths"); -const { loadTsconfig } = require("tsconfig-paths/lib/tsconfig-loader"); -const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); +const JSON5 = require("json5"); const shebangRegEx = require('./utils/shebang'); const nccCacheDir = require("./utils/ncc-cache-dir"); -const LicenseWebpackPlugin = require('license-webpack-plugin').LicenseWebpackPlugin; +const { LicenseWebpackPlugin } = require('license-webpack-plugin'); const { version: nccVersion } = require('../package.json'); const { hasTypeModule } = require('./utils/has-type-module'); @@ -105,31 +103,23 @@ function ncc ( existingAssetNames.push(`${filename}.cache`); existingAssetNames.push(`${filename}.cache${ext}`); } - const resolvePlugins = []; - // add TsconfigPathsPlugin to support `paths` resolution in tsconfig - // we need to catch here because the plugin will - // error if there's no tsconfig in the working directory - let fullTsconfig = {}; + + let tsconfig = {}; try { - const configFileAbsolutePath = walkParentDirs({ + const configPath = walkParentDirs({ base: process.cwd(), start: dirname(entry), filename: 'tsconfig.json', }); - fullTsconfig = loadTsconfig(configFileAbsolutePath) || { - compilerOptions: {} - }; - - const tsconfigPathsOptions = { silent: true } - if (fullTsconfig.compilerOptions.allowJs) { - tsconfigPathsOptions.extensions = SUPPORTED_EXTENSIONS - } - resolvePlugins.push(new TsconfigPathsPlugin(tsconfigPathsOptions)); - - if (tsconfig.resultType === "success") { - tsconfigMatchPath = tsconfigPaths.createMatchPath(tsconfig.absoluteBaseUrl, tsconfig.paths); - } + const contents = fs.readFileSync(configPath, 'utf8') + tsconfig = JSON5.parse(contents); + const baseUrl = tsconfig.compilerOptions.baseUrl; + resolveModules.push(pathResolve(dirname(configPath), baseUrl)); } catch (e) {} + const resolvePlugins = []; + const resolveModules = []; + const compilerOptions = tsconfig.compilerOptions || {}; + resolvePlugins.push({ apply(resolver) { @@ -294,6 +284,7 @@ function ncc ( // webpack defaults to `module` and `main`, but that's // not really what node.js supports, so we reset it mainFields: ["main"], + modules: resolveModules.length > 0 ? resolveModules : undefined, plugins: resolvePlugins }, // https://github.com/vercel/ncc/pull/29#pullrequestreview-177152175 @@ -333,17 +324,30 @@ function ncc ( loader: eval('__dirname + "/loaders/uncacheable.js"') }, { - loader: eval('__dirname + "/loaders/ts-loader.js"'), + loader: eval('__dirname + "/loaders/swc-loader.js"'), options: { - transpileOnly, - compiler: eval('__dirname + "/typescript.js"'), - compilerOptions: { - module: 'esnext', - target: 'esnext', - ...fullTsconfig.compilerOptions, - allowSyntheticDefaultImports: true, - noEmit: false, - outDir: '//' + minify: false, // TODO: maybe we could omit terser if `true`? + exclude: tsconfig.exclude, + sourceMaps: compilerOptions.sourceMap || false, + module: { + type: compilerOptions.module && compilerOptions.module.toLowerCase() === 'commonjs' ? 'commonjs' : 'es6', + strict: false, + strictMode: true, + lazy: false, + noInterop: !compilerOptions.esModuleInterop + }, + jsc: { + externalHelpers: false, + keepClassNames: true, + target: compilerOptions.target && compilerOptions.target.toLowerCase() || 'es2021', + paths: compilerOptions.paths, + baseUrl: compilerOptions.baseUrl, + parser: { + syntax: 'typescript', + tsx: true, // TODO: use tsconfig.compilerOptions.jsx ??? + decorators: compilerOptions.experimentalDecorators || false, + dynamicImport: true, // TODO: use module ??? + } } } }] @@ -431,7 +435,7 @@ function ncc ( async function finalizeHandler (stats) { const assets = Object.create(null); - getFlatFiles(mfs.data, assets, relocateLoader.getAssetMeta, fullTsconfig); + getFlatFiles(mfs.data, assets, relocateLoader.getAssetMeta, compilerOptions); // filter symlinks to existing assets const symlinks = Object.create(null); for (const [key, value] of Object.entries(relocateLoader.getSymlinks())) { @@ -625,17 +629,17 @@ function ncc ( } // this could be rewritten with actual FS apis / globs, but this is simpler -function getFlatFiles(mfsData, output, getAssetMeta, tsconfig, curBase = "") { +function getFlatFiles(mfsData, output, getAssetMeta, compilerOptions, curBase = "") { for (const path of Object.keys(mfsData)) { const item = mfsData[path]; let curPath = `${curBase}/${path}`; // directory - if (item[""] === true) getFlatFiles(item, output, getAssetMeta, tsconfig, curPath); + if (item[""] === true) getFlatFiles(item, output, getAssetMeta, compilerOptions, curPath); // file else if (!curPath.endsWith("/")) { const meta = getAssetMeta(curPath.substr(1)) || {}; if(curPath.endsWith(".d.ts")) { - const outDir = tsconfig.compilerOptions.outDir ? pathResolve(tsconfig.compilerOptions.outDir) : pathResolve('dist'); + const outDir = compilerOptions.outDir ? pathResolve(compilerOptions.outDir) : pathResolve('dist'); curPath = curPath .replace(outDir, "") .replace(process.cwd(), "") diff --git a/src/loaders/swc-loader.js b/src/loaders/swc-loader.js new file mode 100644 index 00000000..7a764668 --- /dev/null +++ b/src/loaders/swc-loader.js @@ -0,0 +1,94 @@ +// Source code from https://github.com/swc-project/swc-loader/blob/master/src/index.js +// with the following changes: +// - swapped out `@swc/core` for `@swc/wasm` +// - swapped out `swc.transform()` for `swc.transformSync()` + +const loaderUtils = require("loader-utils"); +const swc = require("@swc/wasm"); + +function makeLoader() { + return function (source, inputSourceMap) { + // Make the loader async + const callback = this.async(); + const filename = this.resourcePath; + + let loaderOptions = loaderUtils.getOptions(this) || {}; + + // Standardize on 'sourceMaps' as the key passed through to Webpack, so that + // users may safely use either one alongside our default use of + // 'this.sourceMap' below without getting error about conflicting aliases. + if ( + Object.prototype.hasOwnProperty.call(loaderOptions, "sourceMap") && + !Object.prototype.hasOwnProperty.call(loaderOptions, "sourceMaps") + ) { + loaderOptions = Object.assign({}, loaderOptions, { + sourceMaps: loaderOptions.sourceMap, + }); + delete loaderOptions.sourceMap; + } + + if (inputSourceMap) { + inputSourceMap = JSON.stringify(inputSourceMap); + } + + const programmaticOptions = Object.assign({}, loaderOptions, { + filename, + inputSourceMap: inputSourceMap || undefined, + + // Set the default sourcemap behavior based on Webpack's mapping flag, + // but allow users to override if they want. + sourceMaps: + loaderOptions.sourceMaps === undefined + ? this.sourceMap + : loaderOptions.sourceMaps, + + // Ensure that Webpack will get a full absolute path in the sourcemap + // so that it can properly map the module back to its internal cached + // modules. + sourceFileName: filename, + }); + if (!programmaticOptions.inputSourceMap) { + delete programmaticOptions.inputSourceMap; + } + + const parseMap = programmaticOptions.parseMap; + + delete programmaticOptions.parseMap; + delete programmaticOptions.customize; + delete programmaticOptions.cacheDirectory; + delete programmaticOptions.cacheIdentifier; + delete programmaticOptions.cacheCompression; + delete programmaticOptions.metadataSubscribers; + + // auto detect development mode + if (this.mode && programmaticOptions.jsc && programmaticOptions.jsc.transform + && programmaticOptions.jsc.transform.react && + !Object.prototype.hasOwnProperty.call(programmaticOptions.jsc.transform.react, "development")) { + programmaticOptions.jsc.transform.react.development = this.mode === 'development' + } + + if (programmaticOptions.sourceMaps === "inline") { + // Babel has this weird behavior where if you set "inline", we + // inline the sourcemap, and set 'result.map = null'. This results + // in bad behavior from Babel since the maps get put into the code, + // which Webpack does not expect, and because the map we return to + // Webpack is null, which is also bad. To avoid that, we override the + // behavior here so "inline" just behaves like 'true'. + programmaticOptions.sourceMaps = true; + } + + try { + const output = swc.transformSync(source, programmaticOptions); + callback( + null, + output.code, + parseMap ? JSON.parse(output.map) : output.map + ); + } catch (e) { + callback(e); + } + }; +} + +module.exports = makeLoader(); +module.exports.custom = makeLoader; diff --git a/src/loaders/ts-loader.js b/src/loaders/ts-loader.js deleted file mode 100644 index 71f65480..00000000 --- a/src/loaders/ts-loader.js +++ /dev/null @@ -1,24 +0,0 @@ -// we re-export so that we generate a unique -// optional bundle for the ts-loader, that -// doesn't get loaded unless the user is -// compiling typescript -const logger = require("ts-loader/dist/logger"); -const makeLogger = logger.makeLogger; -logger.makeLogger = function (loaderOptions, colors) { - const instance = makeLogger(loaderOptions, colors); - const logWarning = instance.logWarning; - instance.logWarning = function (message) { - // Disable TS Loader TypeScript compatibility warning - if (message.indexOf('This version may or may not be compatible with ts-loader') !== -1) - return; - return logWarning(message); - }; - return instance; -}; - -module.exports = require("ts-loader"); - -// ts-loader internally has a require("typescript") that applies -// regardless of "compiler". -// We could remap this too, as soon as ncc supports aliased externals -module.exports.typescript = require("typescript"); diff --git a/yarn.lock b/yarn.lock index f232deac..b2871b2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1773,6 +1773,11 @@ p-queue "^6.6.1" p-retry "^4.0.0" +"@swc/wasm@^1.2.89": + version "1.2.89" + resolved "https://registry.yarnpkg.com/@swc/wasm/-/wasm-1.2.89.tgz#e6388467366c95cd2130c9b06d7c70e714624ad7" + integrity sha512-Qo/rmRXiIadFWE8ZxF7SFe267Tq0UFZygPhUg6A0ku83ziRfNoZwWweOw+S7aRBd+KpoTFjPQrZ9TRy4Jl2R9A== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -5460,23 +5465,6 @@ engine.io@~5.1.1: engine.io-parser "~4.0.0" ws "~7.4.2" -enhanced-resolve@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - enhanced-resolve@^5.8.0: version "5.8.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.0.tgz#d9deae58f9d3773b6a111a5a46831da5be5c9ac0" @@ -10033,14 +10021,6 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" @@ -11815,7 +11795,7 @@ phin@^2.9.1: resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== -picomatch@^2.0.4, picomatch@^2.0.5: +picomatch@^2.0.4: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -14191,6 +14171,13 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" +swc-loader@^0.1.15: + version "0.1.15" + resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.1.15.tgz#cb9c630ccfbb46dabc5aebc5560cced658e32992" + integrity sha512-cn1WPIeQJvXM4bbo3OwdEIapsQ4uUGOfyFj0h2+2+brT0k76DCGnZXDE2KmcqTd2JSQ+b61z2NPMib7eEwMYYw== + dependencies: + loader-utils "^2.0.0" + swig@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/swig/-/swig-1.4.2.tgz#4085ca0453369104b5d483e2841b39b7ae1aaba5" @@ -14216,11 +14203,6 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" @@ -14578,35 +14560,6 @@ ts-invariant@^0.4.0: dependencies: tslib "^1.9.3" -ts-loader@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" - integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^4.0.0" - loader-utils "^2.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -tsconfig-paths-webpack-plugin@^3.2.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.1.tgz#e4dbf492a20dca9caab60086ddacb703afc2b726" - integrity sha512-n5CMlUUj+N5pjBhBACLq4jdr9cPTitySCjIosoQm0zwK99gmrcTGAfY9CwxRFT9+9OleNWXPRUcxsKP4AYExxQ== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.7.0" - tsconfig-paths "^3.9.0" - -tsconfig-paths@^3.7.0, tsconfig-paths@^3.9.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" - integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== - dependencies: - json5 "^2.2.0" - minimist "^1.2.0" - strip-bom "^3.0.0" - tslib@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -14718,10 +14671,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" - integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== +typescript@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== uglify-es@^3.3.9: version "3.3.9"