From 958a2c7f51820abba52e55a0b786b978124f6aa8 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Thu, 7 Nov 2019 16:29:15 -0500 Subject: [PATCH 1/4] add node resoultion for transformer --- bin/asinit | 0 cli/asc.js | 14 +++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) mode change 100644 => 100755 bin/asinit diff --git a/bin/asinit b/bin/asinit old mode 100644 new mode 100755 diff --git a/cli/asc.js b/cli/asc.js index 6fd5a61925..596f9d4d56 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -24,6 +24,14 @@ const mkdirp = require("./util/mkdirp"); const EOL = process.platform === "win32" ? "\r\n" : "\n"; const SEP = process.platform === "win32" ? "\\" : "/"; +function _require(m) { + try { + return require(m); + } catch (e) { + return e; + } +} + // global.Binaryen = require("../lib/binaryen"); // Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional @@ -220,7 +228,11 @@ exports.main = function main(argv, options, callback) { : path.join(process.cwd(), filename); if (/\.ts$/.test(filename)) require("ts-node").register({ transpileOnly: true, skipProject: true }); try { - const classOrModule = require(filename); + let classOrModule = _require(filename); + classOrModule = (classOrModule instanceof Error) ? _require(transformArgs[i]) : classOrModule; + if (classOrModule instanceof Error) { + return callback(classOrModule); + } if (typeof classOrModule === "function") { Object.assign(classOrModule.prototype, { baseDir, From 45ea5d9997b7c220f9002e5fc655fe60c7bf8d06 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Thu, 7 Nov 2019 18:11:41 -0500 Subject: [PATCH 2/4] Switch to checking if path resolves before requiring --- cli/asc.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cli/asc.js b/cli/asc.js index 596f9d4d56..f6f381f081 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -24,11 +24,12 @@ const mkdirp = require("./util/mkdirp"); const EOL = process.platform === "win32" ? "\r\n" : "\n"; const SEP = process.platform === "win32" ? "\\" : "/"; -function _require(m) { +function pathResolves(m) { try { - return require(m); + require.resolve(m); + return true } catch (e) { - return e; + return false; } } @@ -228,11 +229,7 @@ exports.main = function main(argv, options, callback) { : path.join(process.cwd(), filename); if (/\.ts$/.test(filename)) require("ts-node").register({ transpileOnly: true, skipProject: true }); try { - let classOrModule = _require(filename); - classOrModule = (classOrModule instanceof Error) ? _require(transformArgs[i]) : classOrModule; - if (classOrModule instanceof Error) { - return callback(classOrModule); - } + const classOrModule = require(pathResolves(filename) ? filename : transformArgs[i]); if (typeof classOrModule === "function") { Object.assign(classOrModule.prototype, { baseDir, From 2d80b4eeb33c83598f5af4fa5e03eb1da85c57fe Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Fri, 8 Nov 2019 15:44:24 -0500 Subject: [PATCH 3/4] Switch to using resolve with custom paths --- cli/asc.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/cli/asc.js b/cli/asc.js index f6f381f081..94b0b7fe61 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -24,13 +24,8 @@ const mkdirp = require("./util/mkdirp"); const EOL = process.platform === "win32" ? "\r\n" : "\n"; const SEP = process.platform === "win32" ? "\\" : "/"; -function pathResolves(m) { - try { - require.resolve(m); - return true - } catch (e) { - return false; - } +function _require(m, paths) { + return require(require.resolve(m, {paths})); } // global.Binaryen = require("../lib/binaryen"); @@ -223,13 +218,10 @@ exports.main = function main(argv, options, callback) { if (args.transform) { let transformArgs = args.transform; for (let i = 0, k = transformArgs.length; i < k; ++i) { - let filename = transformArgs[i]; - filename = path.isAbsolute(filename = filename.trim()) - ? filename - : path.join(process.cwd(), filename); + let filename = transformArgs[i].trim(); if (/\.ts$/.test(filename)) require("ts-node").register({ transpileOnly: true, skipProject: true }); try { - const classOrModule = require(pathResolves(filename) ? filename : transformArgs[i]); + const classOrModule = _require(filename, [baseDir, process.cwd()]); if (typeof classOrModule === "function") { Object.assign(classOrModule.prototype, { baseDir, From 493230f552a38bf3f9ac34425e8fd7676afe9974 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Sat, 16 Nov 2019 16:11:42 -0500 Subject: [PATCH 4/4] Inlined function call --- cli/asc.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cli/asc.js b/cli/asc.js index d94a4e8e82..8b64c4352f 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -25,10 +25,6 @@ const find = require("./util/find"); const EOL = process.platform === "win32" ? "\r\n" : "\n"; const SEP = process.platform === "win32" ? "\\" : "/"; -function _require(m, paths) { - return require(require.resolve(m, {paths})); -} - // global.Binaryen = require("../lib/binaryen"); // Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional @@ -225,7 +221,7 @@ exports.main = function main(argv, options, callback) { let filename = transformArgs[i].trim(); if (/\.ts$/.test(filename)) require("ts-node").register({ transpileOnly: true, skipProject: true }); try { - const classOrModule = _require(filename, [baseDir, process.cwd()]); + const classOrModule = require(require.resolve(filename, { paths: [baseDir, process.cwd()] })); if (typeof classOrModule === "function") { Object.assign(classOrModule.prototype, { baseDir,