From 4deed526097ada6eb5506e9adb37190447463dcc Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 13 Sep 2021 19:45:07 -0400 Subject: [PATCH 01/13] Fix missing variable declaration --- src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.js b/src/index.js index f7dff022..32504586 100644 --- a/src/index.js +++ b/src/index.js @@ -126,6 +126,7 @@ function ncc ( } resolvePlugins.push(new TsconfigPathsPlugin(tsconfigPathsOptions)); + const tsconfig = tsconfigPaths.loadConfig(); if (tsconfig.resultType === "success") { tsconfigMatchPath = tsconfigPaths.createMatchPath(tsconfig.absoluteBaseUrl, tsconfig.paths); } From ef9d66c7fdb4c53312234dac8bb9160da6be51f7 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 16 Sep 2021 18:35:27 -0400 Subject: [PATCH 02/13] Always use cwd for tsconfig.json --- package.json | 9 ++++---- src/index.js | 46 ++++++++++++++++++---------------------- yarn.lock | 60 +++++++++++++++------------------------------------- 3 files changed, 42 insertions(+), 73 deletions(-) diff --git a/package.json b/package.json index d472ba02..8199dad3 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,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 +73,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", @@ -101,11 +103,10 @@ "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", + "ts-loader": "^9.2.5", + "tsconfig-paths-webpack-plugin": "^3.5.1", "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/src/index.js b/src/index.js index 32504586..ab79f509 100644 --- a/src/index.js +++ b/src/index.js @@ -5,8 +5,7 @@ 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 JSON5 = require("json5"); const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); const shebangRegEx = require('./utils/shebang'); const nccCacheDir = require("./utils/ncc-cache-dir"); @@ -109,27 +108,22 @@ function ncc ( // 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 compilerOptions = {} try { - const configFileAbsolutePath = 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 + const configPath = join(process.cwd(), 'tsconfig.json'); + const contents = fs.readFileSync(configPath, 'utf8') + const tsconfig = JSON5.parse(contents); + if (tsconfig && tsconfig.compilerOptions) { + compilerOptions = tsconfig.compilerOptions; } - resolvePlugins.push(new TsconfigPathsPlugin(tsconfigPathsOptions)); - - const tsconfig = tsconfigPaths.loadConfig(); - if (tsconfig.resultType === "success") { - tsconfigMatchPath = tsconfigPaths.createMatchPath(tsconfig.absoluteBaseUrl, tsconfig.paths); + const opts = { + silent: true, + configFile: configPath, + extensions: compilerOptions.allowJs + ? SUPPORTED_EXTENSIONS + : SUPPORTED_EXTENSIONS.filter(ext => ext !== '.js') } + resolvePlugins.push(new TsconfigPathsPlugin(opts)); } catch (e) {} resolvePlugins.push({ @@ -339,10 +333,10 @@ function ncc ( transpileOnly, compiler: eval('__dirname + "/typescript.js"'), compilerOptions: { + allowSyntheticDefaultImports: true, module: 'esnext', target: 'esnext', - ...fullTsconfig.compilerOptions, - allowSyntheticDefaultImports: true, + ...compilerOptions, noEmit: false, outDir: '//' } @@ -432,7 +426,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())) { @@ -626,17 +620,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/yarn.lock b/yarn.lock index f232deac..59be0292 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3326,11 +3326,6 @@ bcryptjs@^2.1.0: resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - big.js@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537" @@ -5416,11 +5411,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -5460,14 +5450,13 @@ 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== +enhanced-resolve@^5.0.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" + graceful-fs "^4.2.4" + tapable "^2.2.0" enhanced-resolve@^5.7.0: version "5.7.0" @@ -9396,15 +9385,6 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -14216,11 +14196,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,18 +14553,17 @@ 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== +ts-loader@^9.2.5: + version "9.2.5" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.5.tgz#127733a5e9243bf6dafcb8aa3b8a266d8041dca9" + integrity sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ== dependencies: chalk "^4.1.0" - enhanced-resolve "^4.0.0" - loader-utils "^2.0.0" + enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" -tsconfig-paths-webpack-plugin@^3.2.0: +tsconfig-paths-webpack-plugin@^3.5.1: 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== @@ -14598,7 +14572,7 @@ tsconfig-paths-webpack-plugin@^3.2.0: enhanced-resolve "^5.7.0" tsconfig-paths "^3.9.0" -tsconfig-paths@^3.7.0, tsconfig-paths@^3.9.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== @@ -14718,10 +14692,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" From 85e8d2a9d2f87d1b850e0bd86560c53382eb14e0 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 16 Sep 2021 19:36:18 -0400 Subject: [PATCH 03/13] Use custom ts paths resolve plugin --- package.json | 1 - src/index.js | 39 +++--- src/jsconfig-paths-plugin.js | 226 +++++++++++++++++++++++++++++++++++ yarn.lock | 26 ---- 4 files changed, 246 insertions(+), 46 deletions(-) create mode 100644 src/jsconfig-paths-plugin.js diff --git a/package.json b/package.json index 8199dad3..dcfc1fa7 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,6 @@ "the-answer": "^1.0.0", "tiny-json-http": "^7.0.2", "ts-loader": "^9.2.5", - "tsconfig-paths-webpack-plugin": "^3.5.1", "twilio": "^3.23.2", "typescript": "^4.4.3", "vm2": "^3.6.6", diff --git a/src/index.js b/src/index.js index ab79f509..39f5050c 100644 --- a/src/index.js +++ b/src/index.js @@ -6,10 +6,10 @@ const webpack = require("webpack"); const MemoryFS = require("memory-fs"); const terser = require("terser"); const JSON5 = require("json5"); -const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); const shebangRegEx = require('./utils/shebang'); const nccCacheDir = require("./utils/ncc-cache-dir"); -const LicenseWebpackPlugin = require('license-webpack-plugin').LicenseWebpackPlugin; +const { JsConfigPathsPlugin } = require('./jsconfig-paths-plugin'); +const { LicenseWebpackPlugin } = require('license-webpack-plugin'); const { version: nccVersion } = require('../package.json'); const { hasTypeModule } = require('./utils/has-type-module'); @@ -104,28 +104,28 @@ 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 compilerOptions = {} + + let tsconfig = {}; try { const configPath = join(process.cwd(), 'tsconfig.json'); const contents = fs.readFileSync(configPath, 'utf8') - const tsconfig = JSON5.parse(contents); - if (tsconfig && tsconfig.compilerOptions) { - compilerOptions = tsconfig.compilerOptions; - } - const opts = { - silent: true, - configFile: configPath, - extensions: compilerOptions.allowJs - ? SUPPORTED_EXTENSIONS - : SUPPORTED_EXTENSIONS.filter(ext => ext !== '.js') - } - resolvePlugins.push(new TsconfigPathsPlugin(opts)); + tsconfig = JSON5.parse(contents); } catch (e) {} + const resolvePlugins = []; + const resolveModules = []; + const compilerOptions = tsconfig.compilerOptions || {}; + + if (compilerOptions.baseUrl) { + const resolvedBaseUrl = pathResolve(process.cwd(), compilerOptions.baseUrl); + resolveModules.push(resolvedBaseUrl); + if (compilerOptions.paths) { + resolvePlugins.push( + new JsConfigPathsPlugin(compilerOptions.paths, resolvedBaseUrl) + ) + } + } + resolvePlugins.push({ apply(resolver) { const resolve = resolver.resolve; @@ -289,6 +289,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, plugins: resolvePlugins }, // https://github.com/vercel/ncc/pull/29#pullrequestreview-177152175 diff --git a/src/jsconfig-paths-plugin.js b/src/jsconfig-paths-plugin.js new file mode 100644 index 00000000..b02b8e55 --- /dev/null +++ b/src/jsconfig-paths-plugin.js @@ -0,0 +1,226 @@ +/** + * This webpack resolver is largely from Next.js + * https://github.com/vercel/next.js/blob/29ab433222adc879e7ccaa23b29bed674e123ec4/packages/next/build/webpack/plugins/jsconfig-paths-plugin.ts#L1 + */ +const path = require('path') + +const asterisk = 0x2a + +function hasZeroOrOneAsteriskCharacter(str) { + let seenAsterisk = false + for (let i = 0; i < str.length; i++) { + if (str.charCodeAt(i) === asterisk) { + if (!seenAsterisk) { + seenAsterisk = true + } else { + // have already seen asterisk + return false + } + } + } + return true +} + +/** + * Determines whether a path starts with a relative path component (i.e. `.` or `..`). + */ +function pathIsRelative(testPath) { + return /^\.\.?($|[\\/])/.test(testPath) +} + +function tryParsePattern(pattern) { + // This should be verified outside of here and a proper error thrown. + const indexOfStar = pattern.indexOf('*') + return indexOfStar === -1 + ? undefined + : { + prefix: pattern.substr(0, indexOfStar), + suffix: pattern.substr(indexOfStar + 1), + } + } + +function isPatternMatch({ prefix, suffix }, candidate) { + return ( + candidate.length >= prefix.length + suffix.length && + candidate.startsWith(prefix) && + candidate.endsWith(suffix) + ) +} + +/** Return the object corresponding to the best pattern to match `candidate`. */ +function findBestPatternMatch( + values, + getPattern, + candidate +) { + let matchedValue + // use length of prefix as betterness criteria + let longestMatchPrefixLength = -1 + + for (const v of values) { + const pattern = getPattern(v) + if ( + isPatternMatch(pattern, candidate) && + pattern.prefix.length > longestMatchPrefixLength + ) { + longestMatchPrefixLength = pattern.prefix.length + matchedValue = v + } + } + + return matchedValue +} + +/** +* patternStrings contains both pattern strings (containing "*") and regular strings. +* Return an exact match if possible, or a pattern match, or undefined. +* (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.) +*/ +function matchPatternOrExact( + patternStrings, + candidate +) { + const patterns = [] + for (const patternString of patternStrings) { + if (!hasZeroOrOneAsteriskCharacter(patternString)) continue + const pattern = tryParsePattern(patternString) + if (pattern) { + patterns.push(pattern) + } else if (patternString === candidate) { + // pattern was matched as is - no need to search further + return patternString + } + } + + return findBestPatternMatch(patterns, (_) => _, candidate) +} + +/** +* Tests whether a value is string +*/ +function isString(text) { + return typeof text === 'string' +} + +/** +* Given that candidate matches pattern, returns the text matching the '*'. +* E.g.: matchedText(tryParsePattern("foo*baz"), "foobarbaz") === "bar" +*/ +function matchedText(pattern, candidate) { + return candidate.substring( + pattern.prefix.length, + candidate.length - pattern.suffix.length + ) +} + +function patternText({ prefix, suffix }) { + return `${prefix}*${suffix}` +} + +const NODE_MODULES_REGEX = /node_modules/ + +class JsConfigPathsPlugin { + constructor(paths, resolvedBaseUrl) { + this.paths = paths + this.resolvedBaseUrl = resolvedBaseUrl + console.log('tsconfig.json or jsconfig.json paths: %O', paths) + console.log('resolved baseUrl: %s', resolvedBaseUrl) + } + apply(resolver) { + const paths = this.paths + const pathsKeys = Object.keys(paths) + + // If no aliases are added bail out + if (pathsKeys.length === 0) { + console.log('paths are empty, bailing out') + return + } + + const baseDirectory = this.resolvedBaseUrl + const target = resolver.ensureHook('resolve') + resolver + .getHook('described-resolve') + .tapPromise( + 'JsConfigPathsPlugin', + async (request, resolveContext) => { + const moduleName = request.request + + // Exclude node_modules from paths support (speeds up resolving) + if (request.path.match(NODE_MODULES_REGEX)) { + console.log('skipping request as it is inside node_modules %s', moduleName) + return + } + + if ( + path.posix.isAbsolute(moduleName) || + (process.platform === 'win32' && path.win32.isAbsolute(moduleName)) + ) { + console.log('skipping request as it is an absolute path %s', moduleName) + return + } + + if (pathIsRelative(moduleName)) { + console.log('skipping request as it is a relative path %s', moduleName) + return + } + + // console.log('starting to resolve request %s', moduleName) + + // If the module name does not match any of the patterns in `paths` we hand off resolving to webpack + const matchedPattern = matchPatternOrExact(pathsKeys, moduleName) + if (!matchedPattern) { + console.log('moduleName did not match any paths pattern %s', moduleName) + return + } + + const matchedStar = isString(matchedPattern) + ? undefined + : matchedText(matchedPattern, moduleName) + const matchedPatternText = isString(matchedPattern) + ? matchedPattern + : patternText(matchedPattern) + + let triedPaths = [] + + for (const subst of paths[matchedPatternText]) { + const curPath = matchedStar + ? subst.replace('*', matchedStar) + : subst + + // Ensure .d.ts is not matched + if (curPath.endsWith('.d.ts')) { + continue + } + + const candidate = path.join(baseDirectory, curPath) + const [err, result] = await new Promise((resolve) => { + const obj = Object.assign({}, request, { + request: candidate, + }) + resolver.doResolve( + target, + obj, + `Aliased with tsconfig.json or jsconfig.json ${matchedPatternText} to ${candidate}`, + resolveContext, + (resolverErr, resolverResult) => { + resolve([resolverErr, resolverResult]) + } + ) + }) + + // There's multiple paths values possible, so we first have to iterate them all first before throwing an error + if (err || result === undefined) { + triedPaths.push(candidate) + continue + } + + return result + } + } + ) + } +} + +module.exports = { + JsConfigPathsPlugin +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 59be0292..16bbf155 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5458,14 +5458,6 @@ enhanced-resolve@^5.0.0: graceful-fs "^4.2.4" tapable "^2.2.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" @@ -14563,24 +14555,6 @@ ts-loader@^9.2.5: micromatch "^4.0.0" semver "^7.3.4" -tsconfig-paths-webpack-plugin@^3.5.1: - 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.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" From 5854dae3d8a34ae1a55a5dd98a36f3711584037e Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 14:55:40 -0400 Subject: [PATCH 04/13] Add swc for ts compliation --- package.json | 3 +- scripts/build.js | 4 +- src/index.js | 34 ++++-- src/jsconfig-paths-plugin.js | 226 ----------------------------------- yarn.lock | 146 +++++++++++++++++----- 5 files changed, 146 insertions(+), 267 deletions(-) delete mode 100644 src/jsconfig-paths-plugin.js diff --git a/package.json b/package.json index dcfc1fa7..dfe285de 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/core": "^1.2.88", "@tensorflow/tfjs-node": "^3.8.0", "@vercel/webpack-asset-relocator-loader": "1.6.0", "analytics-node": "^5.0.0", @@ -99,11 +100,11 @@ "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": "^9.2.5", "twilio": "^3.23.2", "typescript": "^4.4.3", "vm2": "^3.6.6", diff --git a/scripts/build.js b/scripts/build.js index cf5d5d08..72eb79b7 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -85,10 +85,10 @@ async function main() { console.log(assets); } - writeFileSync(__dirname + "/../dist/ncc/LICENSES.txt", cliAssets["LICENSES.txt"].source); + //writeFileSync(__dirname + "/../dist/ncc/LICENSES.txt", cliAssets["LICENSES.txt"].source); writeFileSync(__dirname + "/../dist/ncc/cli.js.cache", cliAssets["cli.js.cache"].source); writeFileSync(__dirname + "/../dist/ncc/index.js.cache", indexAssets["index.js.cache"].source); - writeFileSync(__dirname + "/../dist/ncc/mappings.wasm", indexAssets["mappings.wasm"].source); + //writeFileSync(__dirname + "/../dist/ncc/mappings.wasm", indexAssets["mappings.wasm"].source); 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); diff --git a/src/index.js b/src/index.js index 39f5050c..d8982c50 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,6 @@ const terser = require("terser"); const JSON5 = require("json5"); const shebangRegEx = require('./utils/shebang'); const nccCacheDir = require("./utils/ncc-cache-dir"); -const { JsConfigPathsPlugin } = require('./jsconfig-paths-plugin'); const { LicenseWebpackPlugin } = require('license-webpack-plugin'); const { version: nccVersion } = require('../package.json'); const { hasTypeModule } = require('./utils/has-type-module'); @@ -329,17 +328,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: { - allowSyntheticDefaultImports: true, - module: 'esnext', - target: 'esnext', - ...compilerOptions, - 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: false, // TODO: 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 ??? + } } } }] diff --git a/src/jsconfig-paths-plugin.js b/src/jsconfig-paths-plugin.js deleted file mode 100644 index b02b8e55..00000000 --- a/src/jsconfig-paths-plugin.js +++ /dev/null @@ -1,226 +0,0 @@ -/** - * This webpack resolver is largely from Next.js - * https://github.com/vercel/next.js/blob/29ab433222adc879e7ccaa23b29bed674e123ec4/packages/next/build/webpack/plugins/jsconfig-paths-plugin.ts#L1 - */ -const path = require('path') - -const asterisk = 0x2a - -function hasZeroOrOneAsteriskCharacter(str) { - let seenAsterisk = false - for (let i = 0; i < str.length; i++) { - if (str.charCodeAt(i) === asterisk) { - if (!seenAsterisk) { - seenAsterisk = true - } else { - // have already seen asterisk - return false - } - } - } - return true -} - -/** - * Determines whether a path starts with a relative path component (i.e. `.` or `..`). - */ -function pathIsRelative(testPath) { - return /^\.\.?($|[\\/])/.test(testPath) -} - -function tryParsePattern(pattern) { - // This should be verified outside of here and a proper error thrown. - const indexOfStar = pattern.indexOf('*') - return indexOfStar === -1 - ? undefined - : { - prefix: pattern.substr(0, indexOfStar), - suffix: pattern.substr(indexOfStar + 1), - } - } - -function isPatternMatch({ prefix, suffix }, candidate) { - return ( - candidate.length >= prefix.length + suffix.length && - candidate.startsWith(prefix) && - candidate.endsWith(suffix) - ) -} - -/** Return the object corresponding to the best pattern to match `candidate`. */ -function findBestPatternMatch( - values, - getPattern, - candidate -) { - let matchedValue - // use length of prefix as betterness criteria - let longestMatchPrefixLength = -1 - - for (const v of values) { - const pattern = getPattern(v) - if ( - isPatternMatch(pattern, candidate) && - pattern.prefix.length > longestMatchPrefixLength - ) { - longestMatchPrefixLength = pattern.prefix.length - matchedValue = v - } - } - - return matchedValue -} - -/** -* patternStrings contains both pattern strings (containing "*") and regular strings. -* Return an exact match if possible, or a pattern match, or undefined. -* (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.) -*/ -function matchPatternOrExact( - patternStrings, - candidate -) { - const patterns = [] - for (const patternString of patternStrings) { - if (!hasZeroOrOneAsteriskCharacter(patternString)) continue - const pattern = tryParsePattern(patternString) - if (pattern) { - patterns.push(pattern) - } else if (patternString === candidate) { - // pattern was matched as is - no need to search further - return patternString - } - } - - return findBestPatternMatch(patterns, (_) => _, candidate) -} - -/** -* Tests whether a value is string -*/ -function isString(text) { - return typeof text === 'string' -} - -/** -* Given that candidate matches pattern, returns the text matching the '*'. -* E.g.: matchedText(tryParsePattern("foo*baz"), "foobarbaz") === "bar" -*/ -function matchedText(pattern, candidate) { - return candidate.substring( - pattern.prefix.length, - candidate.length - pattern.suffix.length - ) -} - -function patternText({ prefix, suffix }) { - return `${prefix}*${suffix}` -} - -const NODE_MODULES_REGEX = /node_modules/ - -class JsConfigPathsPlugin { - constructor(paths, resolvedBaseUrl) { - this.paths = paths - this.resolvedBaseUrl = resolvedBaseUrl - console.log('tsconfig.json or jsconfig.json paths: %O', paths) - console.log('resolved baseUrl: %s', resolvedBaseUrl) - } - apply(resolver) { - const paths = this.paths - const pathsKeys = Object.keys(paths) - - // If no aliases are added bail out - if (pathsKeys.length === 0) { - console.log('paths are empty, bailing out') - return - } - - const baseDirectory = this.resolvedBaseUrl - const target = resolver.ensureHook('resolve') - resolver - .getHook('described-resolve') - .tapPromise( - 'JsConfigPathsPlugin', - async (request, resolveContext) => { - const moduleName = request.request - - // Exclude node_modules from paths support (speeds up resolving) - if (request.path.match(NODE_MODULES_REGEX)) { - console.log('skipping request as it is inside node_modules %s', moduleName) - return - } - - if ( - path.posix.isAbsolute(moduleName) || - (process.platform === 'win32' && path.win32.isAbsolute(moduleName)) - ) { - console.log('skipping request as it is an absolute path %s', moduleName) - return - } - - if (pathIsRelative(moduleName)) { - console.log('skipping request as it is a relative path %s', moduleName) - return - } - - // console.log('starting to resolve request %s', moduleName) - - // If the module name does not match any of the patterns in `paths` we hand off resolving to webpack - const matchedPattern = matchPatternOrExact(pathsKeys, moduleName) - if (!matchedPattern) { - console.log('moduleName did not match any paths pattern %s', moduleName) - return - } - - const matchedStar = isString(matchedPattern) - ? undefined - : matchedText(matchedPattern, moduleName) - const matchedPatternText = isString(matchedPattern) - ? matchedPattern - : patternText(matchedPattern) - - let triedPaths = [] - - for (const subst of paths[matchedPatternText]) { - const curPath = matchedStar - ? subst.replace('*', matchedStar) - : subst - - // Ensure .d.ts is not matched - if (curPath.endsWith('.d.ts')) { - continue - } - - const candidate = path.join(baseDirectory, curPath) - const [err, result] = await new Promise((resolve) => { - const obj = Object.assign({}, request, { - request: candidate, - }) - resolver.doResolve( - target, - obj, - `Aliased with tsconfig.json or jsconfig.json ${matchedPatternText} to ${candidate}`, - resolveContext, - (resolverErr, resolverResult) => { - resolve([resolverErr, resolverResult]) - } - ) - }) - - // There's multiple paths values possible, so we first have to iterate them all first before throwing an error - if (err || result === undefined) { - triedPaths.push(candidate) - continue - } - - return result - } - } - ) - } -} - -module.exports = { - JsConfigPathsPlugin -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 16bbf155..d81b2628 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1568,6 +1568,18 @@ semver "^7.3.4" tar "^6.1.0" +"@napi-rs/triples@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c" + integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== + +"@node-rs/helper@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@node-rs/helper/-/helper-1.2.1.tgz#e079b05f21ff4329d82c4e1f71c0290e4ecdc70c" + integrity sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg== + dependencies: + "@napi-rs/triples" "^1.0.3" + "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -1773,6 +1785,86 @@ p-queue "^6.6.1" p-retry "^4.0.0" +"@swc/core-android-arm64@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.88.tgz#ecd527a7e07285501f3d004ced8743d2e9092409" + integrity sha512-XuQIPCRVMHgdVKkIUj5ZQps0VhgopreZgq6dYpTOIf5bHtxvaIMOWFQUkJs1+YacjCskFMUo7t876VCEqZFOhQ== + +"@swc/core-darwin-arm64@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.88.tgz#c0f89591f16c6dace26a7e58d7934d69aadffe65" + integrity sha512-tzzNfGrMk7W6P3HuROHL4AJ4KzJMJJCb3/Ghi8l1ldzNCAfdTWRvbP1hv4aaOt5Lejzx40Gyt4tieHLRPUGNEQ== + +"@swc/core-darwin-x64@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.88.tgz#ce2cf970fc748f32a0a8200cfd82ca314686c1ac" + integrity sha512-illK43lA2Y36NL1cZfutYz/Iu2cWoJt2hveu7uJpy9xdkyjHG4qP+blt8lrNMRlveekFsU46tN566RSEDJ3snw== + +"@swc/core-freebsd-x64@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.88.tgz#bfa66de4469466a2684c24ad0c4e2fd771d98703" + integrity sha512-KQIX5PqhFMlf+qhvmRmQukGdhOY9QRBgt/GVmc4H9NUX78mHDONdraKhNFXJ26bLIJXMFRlnOqE4GQCDgbAAyg== + +"@swc/core-linux-arm-gnueabihf@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.88.tgz#9f13e9fca1f73e92105a559be253bab639fe4713" + integrity sha512-z+bRlZ2VW5ap8tri0vpC8cBtROmvOujOfWVuFhkdx6/+XoyPKEsZJBdW3Z1CSB1eXz4kvtGBGBgOTCNj8i7T1Q== + +"@swc/core-linux-arm64-gnu@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.88.tgz#df6c86c3ba7985ec2c5723dde514804b09a6ab79" + integrity sha512-PxL3zZYE1ktGfwqHqt139oFpg5AzIaExPT1X7UC85+RLiMUuRsfKUNTJgzMkZDfPhV/Crjx5BiBrUfOp9KLzdQ== + +"@swc/core-linux-arm64-musl@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.88.tgz#a6ea5da02a154527b4f2e5042cb5923f288b2836" + integrity sha512-/M9Sb+ETGS4HUZYagQ0gr50yPrDPSaZKdCRlrVfD/GWvpJNvzu/8ILOiR/e2saSQE1vTPFbu+sYjUBaYavtucQ== + +"@swc/core-linux-x64-gnu@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.88.tgz#e3113b7882d5d8547774597f331371241d0c0cba" + integrity sha512-dKCfYQjI+9L62DCXycJS/hBRd6Ta5KOauK7rNk1Md09QoK1ozAtK0t5WSS6qJV6Qz+McGx0DT363VRRsUxItNw== + +"@swc/core-linux-x64-musl@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.88.tgz#99cf927398dc8605412d97b4624d4a0f7eca12c8" + integrity sha512-IgIdLA5xBaAx6VnaxEHtHzumeuVtPTOIneDX7vqLMVf87VF5QzqXNj/PXbRtnutE2Yw0lDoslkz/ABmKWtyiEA== + +"@swc/core-win32-arm64-msvc@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.88.tgz#b4b59028d7872892bfdeae08156c31cefaf2992a" + integrity sha512-cDaYQaSQvTacadfszmzs/ekfEaoLYlK1Pdgc03AUiJFRwPekMQ3i9jsDqPzwttML1FDlLPgkJJHy6FLKuc2omw== + +"@swc/core-win32-ia32-msvc@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.88.tgz#5096c985a4c280cfc5bf18d46604c24c59a280fd" + integrity sha512-4vkyxjmk/zt8GQPfLos1X4BX0W/VudBlVwLU9L4OmuloDhNCdVCEAc2o36Hgw3Q338VrM46xWQ+fB/cPIJEfgg== + +"@swc/core-win32-x64-msvc@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.88.tgz#a42ce013e5690d311fb7eb4ca29e404a0f8c8973" + integrity sha512-8+LhfWO4ytIc2voKbAhd3j6hypdpWDM0xODzrXPceZ3MI91NUyBTSk7o2R+PpOgpyXNmmz9ATQ7EM0BgZGeAAw== + +"@swc/core@^1.2.88": + version "1.2.88" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.88.tgz#6a866d7a3020ef35eb0f1662635a5e2d0ca5683b" + integrity sha512-CTnMGafEKEG8404Av9bKpffUVdKedYrmRPsQShJNg6wY7dPltbqsNcZUuC+8b1lQzY8axG4ypemxNAnOYtbwfg== + dependencies: + "@node-rs/helper" "^1.0.0" + optionalDependencies: + "@swc/core-android-arm64" "^1.2.88" + "@swc/core-darwin-arm64" "^1.2.88" + "@swc/core-darwin-x64" "^1.2.88" + "@swc/core-freebsd-x64" "^1.2.88" + "@swc/core-linux-arm-gnueabihf" "^1.2.88" + "@swc/core-linux-arm64-gnu" "^1.2.88" + "@swc/core-linux-arm64-musl" "^1.2.88" + "@swc/core-linux-x64-gnu" "^1.2.88" + "@swc/core-linux-x64-musl" "^1.2.88" + "@swc/core-win32-arm64-msvc" "^1.2.88" + "@swc/core-win32-ia32-msvc" "^1.2.88" + "@swc/core-win32-x64-msvc" "^1.2.88" + "@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" @@ -3326,6 +3418,11 @@ bcryptjs@^2.1.0: resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + big.js@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537" @@ -5411,6 +5508,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -5450,14 +5552,6 @@ engine.io@~5.1.1: engine.io-parser "~4.0.0" ws "~7.4.2" -enhanced-resolve@^5.0.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== - 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" @@ -9377,6 +9471,15 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -10005,14 +10108,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" @@ -11787,7 +11882,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== @@ -14163,6 +14258,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" @@ -14545,16 +14647,6 @@ ts-invariant@^0.4.0: dependencies: tslib "^1.9.3" -ts-loader@^9.2.5: - version "9.2.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.5.tgz#127733a5e9243bf6dafcb8aa3b8a266d8041dca9" - integrity sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - tslib@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" From 792130ae1fa7e8a8a90b1fe2580dc2a9be59eb01 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 15:43:07 -0400 Subject: [PATCH 05/13] Add missing file --- src/index.js | 10 ---------- src/loaders/swc-loader.js | 1 + 2 files changed, 1 insertion(+), 10 deletions(-) create mode 100644 src/loaders/swc-loader.js diff --git a/src/index.js b/src/index.js index d8982c50..ce6dd779 100644 --- a/src/index.js +++ b/src/index.js @@ -114,16 +114,6 @@ function ncc ( const resolvePlugins = []; const resolveModules = []; const compilerOptions = tsconfig.compilerOptions || {}; - - if (compilerOptions.baseUrl) { - const resolvedBaseUrl = pathResolve(process.cwd(), compilerOptions.baseUrl); - resolveModules.push(resolvedBaseUrl); - if (compilerOptions.paths) { - resolvePlugins.push( - new JsConfigPathsPlugin(compilerOptions.paths, resolvedBaseUrl) - ) - } - } resolvePlugins.push({ apply(resolver) { diff --git a/src/loaders/swc-loader.js b/src/loaders/swc-loader.js new file mode 100644 index 00000000..8b437958 --- /dev/null +++ b/src/loaders/swc-loader.js @@ -0,0 +1 @@ +module.exports = require('swc-loader'); \ No newline at end of file From d38a35f88af0f37b7098237b8679f0d946282bb5 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 15:49:38 -0400 Subject: [PATCH 06/13] Add back resolveModules --- src/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/index.js b/src/index.js index ce6dd779..5da99a10 100644 --- a/src/index.js +++ b/src/index.js @@ -114,6 +114,10 @@ function ncc ( const resolvePlugins = []; const resolveModules = []; const compilerOptions = tsconfig.compilerOptions || {}; + + if (compilerOptions.baseUrl) { + resolveModules.push(pathResolve(process.cwd(), compilerOptions.baseUrl)); + } resolvePlugins.push({ apply(resolver) { From c754575db71fd2963f5d820d6e3005583380d7e4 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 16:02:35 -0400 Subject: [PATCH 07/13] Remove unused ts-loader --- src/loaders/swc-loader.js | 2 +- src/loaders/ts-loader.js | 24 ------------------------ 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 src/loaders/ts-loader.js diff --git a/src/loaders/swc-loader.js b/src/loaders/swc-loader.js index 8b437958..676c7014 100644 --- a/src/loaders/swc-loader.js +++ b/src/loaders/swc-loader.js @@ -1 +1 @@ -module.exports = require('swc-loader'); \ No newline at end of file +module.exports = require("swc-loader"); 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"); From 573b1cf790f29d637891cd66801dc90ed043f4d8 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 16:14:37 -0400 Subject: [PATCH 08/13] Remove ts-loader from build --- scripts/build.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/build.js b/scripts/build.js index 72eb79b7..d3ec232b 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -53,17 +53,17 @@ 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.startsWith('lib/') && !asset.startsWith('typescript/lib'))); const { code: stringifyLoader, assets: stringifyLoaderAssets } = await ncc( __dirname + "/../src/loaders/stringify-loader", @@ -92,7 +92,7 @@ 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/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 +100,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 +109,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")); From c68542c1cefee95923e96e17b8368f4aa40aeb9b Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 17:27:17 -0400 Subject: [PATCH 09/13] Fallback to undefined for resolve.modules instead of empty array --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5da99a10..9484ad57 100644 --- a/src/index.js +++ b/src/index.js @@ -282,7 +282,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, + modules: resolveModules.length > 0 ? resolveModules : undefined, plugins: resolvePlugins }, // https://github.com/vercel/ncc/pull/29#pullrequestreview-177152175 From 4a2ed8f5cf62b061eb51074c33f27b9b13c09231 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 17 Sep 2021 18:05:59 -0400 Subject: [PATCH 10/13] Add back missing assets --- scripts/build.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.js b/scripts/build.js index d3ec232b..a2e08e94 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -85,10 +85,10 @@ async function main() { console.log(assets); } - //writeFileSync(__dirname + "/../dist/ncc/LICENSES.txt", cliAssets["LICENSES.txt"].source); + writeFileSync(__dirname + "/../dist/ncc/LICENSES.txt", cliAssets["LICENSES.txt"].source); writeFileSync(__dirname + "/../dist/ncc/cli.js.cache", cliAssets["cli.js.cache"].source); writeFileSync(__dirname + "/../dist/ncc/index.js.cache", indexAssets["index.js.cache"].source); - //writeFileSync(__dirname + "/../dist/ncc/mappings.wasm", indexAssets["mappings.wasm"].source); + writeFileSync(__dirname + "/../dist/ncc/mappings.wasm", indexAssets["mappings.wasm"].source); 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); From d64de86d57410f813f3060f9a7005c0bd3c5a5d0 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 20 Sep 2021 11:06:50 -0400 Subject: [PATCH 11/13] Use `@swc/wasm` --- package.json | 2 +- scripts/build.js | 5 ++- src/loaders/swc-loader.js | 95 ++++++++++++++++++++++++++++++++++++++- yarn.lock | 93 ++------------------------------------ 4 files changed, 101 insertions(+), 94 deletions(-) diff --git a/package.json b/package.json index dfe285de..4f968915 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@google-cloud/firestore": "^4.14.0", "@sentry/node": "^6.10.0", "@slack/web-api": "^6.3.0", - "@swc/core": "^1.2.88", + "@swc/wasm": "^1.2.88", "@tensorflow/tfjs-node": "^3.8.0", "@vercel/webpack-asset-relocator-loader": "1.6.0", "analytics-node": "^5.0.0", diff --git a/scripts/build.js b/scripts/build.js index a2e08e94..7fcab2fa 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -63,13 +63,13 @@ async function main() { noAssetBuilds: true }, ); - checkUnknownAssets('swc-loader', Object.keys(swcLoaderAssets).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"), @@ -93,6 +93,7 @@ async function main() { 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/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); diff --git a/src/loaders/swc-loader.js b/src/loaders/swc-loader.js index 676c7014..7a764668 100644 --- a/src/loaders/swc-loader.js +++ b/src/loaders/swc-loader.js @@ -1 +1,94 @@ -module.exports = require("swc-loader"); +// 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/yarn.lock b/yarn.lock index d81b2628..648274df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1568,18 +1568,6 @@ semver "^7.3.4" tar "^6.1.0" -"@napi-rs/triples@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c" - integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== - -"@node-rs/helper@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@node-rs/helper/-/helper-1.2.1.tgz#e079b05f21ff4329d82c4e1f71c0290e4ecdc70c" - integrity sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg== - dependencies: - "@napi-rs/triples" "^1.0.3" - "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -1785,85 +1773,10 @@ p-queue "^6.6.1" p-retry "^4.0.0" -"@swc/core-android-arm64@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.88.tgz#ecd527a7e07285501f3d004ced8743d2e9092409" - integrity sha512-XuQIPCRVMHgdVKkIUj5ZQps0VhgopreZgq6dYpTOIf5bHtxvaIMOWFQUkJs1+YacjCskFMUo7t876VCEqZFOhQ== - -"@swc/core-darwin-arm64@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.88.tgz#c0f89591f16c6dace26a7e58d7934d69aadffe65" - integrity sha512-tzzNfGrMk7W6P3HuROHL4AJ4KzJMJJCb3/Ghi8l1ldzNCAfdTWRvbP1hv4aaOt5Lejzx40Gyt4tieHLRPUGNEQ== - -"@swc/core-darwin-x64@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.88.tgz#ce2cf970fc748f32a0a8200cfd82ca314686c1ac" - integrity sha512-illK43lA2Y36NL1cZfutYz/Iu2cWoJt2hveu7uJpy9xdkyjHG4qP+blt8lrNMRlveekFsU46tN566RSEDJ3snw== - -"@swc/core-freebsd-x64@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.88.tgz#bfa66de4469466a2684c24ad0c4e2fd771d98703" - integrity sha512-KQIX5PqhFMlf+qhvmRmQukGdhOY9QRBgt/GVmc4H9NUX78mHDONdraKhNFXJ26bLIJXMFRlnOqE4GQCDgbAAyg== - -"@swc/core-linux-arm-gnueabihf@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.88.tgz#9f13e9fca1f73e92105a559be253bab639fe4713" - integrity sha512-z+bRlZ2VW5ap8tri0vpC8cBtROmvOujOfWVuFhkdx6/+XoyPKEsZJBdW3Z1CSB1eXz4kvtGBGBgOTCNj8i7T1Q== - -"@swc/core-linux-arm64-gnu@^1.2.88": +"@swc/wasm@^1.2.88": version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.88.tgz#df6c86c3ba7985ec2c5723dde514804b09a6ab79" - integrity sha512-PxL3zZYE1ktGfwqHqt139oFpg5AzIaExPT1X7UC85+RLiMUuRsfKUNTJgzMkZDfPhV/Crjx5BiBrUfOp9KLzdQ== - -"@swc/core-linux-arm64-musl@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.88.tgz#a6ea5da02a154527b4f2e5042cb5923f288b2836" - integrity sha512-/M9Sb+ETGS4HUZYagQ0gr50yPrDPSaZKdCRlrVfD/GWvpJNvzu/8ILOiR/e2saSQE1vTPFbu+sYjUBaYavtucQ== - -"@swc/core-linux-x64-gnu@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.88.tgz#e3113b7882d5d8547774597f331371241d0c0cba" - integrity sha512-dKCfYQjI+9L62DCXycJS/hBRd6Ta5KOauK7rNk1Md09QoK1ozAtK0t5WSS6qJV6Qz+McGx0DT363VRRsUxItNw== - -"@swc/core-linux-x64-musl@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.88.tgz#99cf927398dc8605412d97b4624d4a0f7eca12c8" - integrity sha512-IgIdLA5xBaAx6VnaxEHtHzumeuVtPTOIneDX7vqLMVf87VF5QzqXNj/PXbRtnutE2Yw0lDoslkz/ABmKWtyiEA== - -"@swc/core-win32-arm64-msvc@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.88.tgz#b4b59028d7872892bfdeae08156c31cefaf2992a" - integrity sha512-cDaYQaSQvTacadfszmzs/ekfEaoLYlK1Pdgc03AUiJFRwPekMQ3i9jsDqPzwttML1FDlLPgkJJHy6FLKuc2omw== - -"@swc/core-win32-ia32-msvc@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.88.tgz#5096c985a4c280cfc5bf18d46604c24c59a280fd" - integrity sha512-4vkyxjmk/zt8GQPfLos1X4BX0W/VudBlVwLU9L4OmuloDhNCdVCEAc2o36Hgw3Q338VrM46xWQ+fB/cPIJEfgg== - -"@swc/core-win32-x64-msvc@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.88.tgz#a42ce013e5690d311fb7eb4ca29e404a0f8c8973" - integrity sha512-8+LhfWO4ytIc2voKbAhd3j6hypdpWDM0xODzrXPceZ3MI91NUyBTSk7o2R+PpOgpyXNmmz9ATQ7EM0BgZGeAAw== - -"@swc/core@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.88.tgz#6a866d7a3020ef35eb0f1662635a5e2d0ca5683b" - integrity sha512-CTnMGafEKEG8404Av9bKpffUVdKedYrmRPsQShJNg6wY7dPltbqsNcZUuC+8b1lQzY8axG4ypemxNAnOYtbwfg== - dependencies: - "@node-rs/helper" "^1.0.0" - optionalDependencies: - "@swc/core-android-arm64" "^1.2.88" - "@swc/core-darwin-arm64" "^1.2.88" - "@swc/core-darwin-x64" "^1.2.88" - "@swc/core-freebsd-x64" "^1.2.88" - "@swc/core-linux-arm-gnueabihf" "^1.2.88" - "@swc/core-linux-arm64-gnu" "^1.2.88" - "@swc/core-linux-arm64-musl" "^1.2.88" - "@swc/core-linux-x64-gnu" "^1.2.88" - "@swc/core-linux-x64-musl" "^1.2.88" - "@swc/core-win32-arm64-msvc" "^1.2.88" - "@swc/core-win32-ia32-msvc" "^1.2.88" - "@swc/core-win32-x64-msvc" "^1.2.88" + resolved "https://registry.yarnpkg.com/@swc/wasm/-/wasm-1.2.88.tgz#5ec7e7392e9fe99f46b78e9832f172b22b2194d4" + integrity sha512-4xYvIPHeGitRyYXpgA9HE7TiGz+z+wjOnaNVFwOoBbDUWxYrB7iZqiolgchvtbeuOtLD3P6IhAM0vOhRN+HCcw== "@szmarczak/http-timer@^1.1.2": version "1.1.2" From 50449d43bb36fd1d25a95d57f6bd2d1fa41595d8 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 20 Sep 2021 12:22:50 -0400 Subject: [PATCH 12/13] Fix tsconfig.json detection --- src/index.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index 9484ad57..54d0f155 100644 --- a/src/index.js +++ b/src/index.js @@ -106,18 +106,20 @@ function ncc ( let tsconfig = {}; try { - const configPath = join(process.cwd(), 'tsconfig.json'); + const configPath = walkParentDirs({ + base: process.cwd(), + start: dirname(entry), + filename: 'tsconfig.json', + }); 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 || {}; - - if (compilerOptions.baseUrl) { - resolveModules.push(pathResolve(process.cwd(), compilerOptions.baseUrl)); - } + resolvePlugins.push({ apply(resolver) { @@ -332,7 +334,7 @@ function ncc ( strict: false, strictMode: true, lazy: false, - noInterop: false, // TODO: esModuleInterop?? + noInterop: !compilerOptions.esModuleInterop }, jsc: { externalHelpers: false, From 3fa8528ffb57b07240b0515c2b034ec627d52d85 Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 21 Sep 2021 17:55:20 -0400 Subject: [PATCH 13/13] Bump `@swc/wasm@1.2.89` --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4f968915..a6eb8fbc 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@google-cloud/firestore": "^4.14.0", "@sentry/node": "^6.10.0", "@slack/web-api": "^6.3.0", - "@swc/wasm": "^1.2.88", + "@swc/wasm": "^1.2.89", "@tensorflow/tfjs-node": "^3.8.0", "@vercel/webpack-asset-relocator-loader": "1.6.0", "analytics-node": "^5.0.0", diff --git a/yarn.lock b/yarn.lock index 648274df..b2871b2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1773,10 +1773,10 @@ p-queue "^6.6.1" p-retry "^4.0.0" -"@swc/wasm@^1.2.88": - version "1.2.88" - resolved "https://registry.yarnpkg.com/@swc/wasm/-/wasm-1.2.88.tgz#5ec7e7392e9fe99f46b78e9832f172b22b2194d4" - integrity sha512-4xYvIPHeGitRyYXpgA9HE7TiGz+z+wjOnaNVFwOoBbDUWxYrB7iZqiolgchvtbeuOtLD3P6IhAM0vOhRN+HCcw== +"@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"