diff options
author | jeroenvalcke <valcke_jeroen@hotmail.com> | 2017-11-13 19:43:47 +0300 |
---|---|---|
committer | jeroenvalcke <valcke_jeroen@hotmail.com> | 2017-11-13 19:43:47 +0300 |
commit | 0a77533c6b7a41606975303be2327c250cd77d19 (patch) | |
tree | 58b7025a7f49f19d8015720601410c857eeaf495 /lib | |
parent | c176d025b57ff616d2a63989a685fe70651e33d3 (diff) | |
parent | cce2de832c99e1f1491c9766bc6a2f1b4d0a3bd2 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'lib')
-rw-r--r-- | lib/index.js | 4 | ||||
-rw-r--r-- | lib/moduleEnv.js | 49 | ||||
-rw-r--r-- | lib/rewire.js | 23 |
3 files changed, 34 insertions, 42 deletions
diff --git a/lib/index.js b/lib/index.js index 765de10..0edcd2c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -7,8 +7,8 @@ var rewireModule = require("./rewire.js"); * @param {!String} filename Path to the module that shall be rewired. Use it exactly like require(). * @return {*} the rewired module */ -function rewire(filename, opts) { - return rewireModule(module.parent, filename, opts); +function rewire(filename) { + return rewireModule(module.parent, filename); } module.exports = rewire; diff --git a/lib/moduleEnv.js b/lib/moduleEnv.js index 29c407c..789ea2f 100644 --- a/lib/moduleEnv.js +++ b/lib/moduleEnv.js @@ -3,47 +3,32 @@ var Module = require("module"), fs = require("fs"), babelCore = require("babel-core"), + // Requiring the babel plugin here because otherwise it will be lazy-loaded by Babel during rewire() + transformBlockScoping = require("babel-plugin-transform-es2015-block-scoping"), coffee; - // caching original wrapper var moduleWrapper0 = Module.wrapper[0], moduleWrapper1 = Module.wrapper[1], originalExtensions = {}, + matchCoffeeExt = /\.coffee$/, nodeRequire, currentModule; -function load(targetModule, isTransform) { +function load(targetModule) { nodeRequire = targetModule.require; targetModule.require = requireProxy; currentModule = targetModule; registerExtensions(); - targetModule.load(targetModule.id); // This is only necessary if nothing has been required within the module reset(); } -function compile(targetModule, src, filename) { - nodeRequire = targetModule.require; - targetModule.require = requireProxy; - targetModule.filename = filename; - currentModule = targetModule; - - var convertedSrc = babelCore.transform(stripBOM(src), { - plugins: ["transform-es2015-constants"] - }); - - targetModule._compile(convertedSrc.code, filename); - - reset(); -} - function reset() { Module.wrapper[0] = moduleWrapper0; Module.wrapper[1] = moduleWrapper1; - restoreExtensions(); } function inject(prelude, appendix) { @@ -64,23 +49,48 @@ function requireProxy(path) { } function registerExtensions() { + var originalJsExtension = require.extensions[".js"]; var originalCoffeeExtension = require.extensions[".coffee"]; + if (originalJsExtension) { + originalExtensions.js = originalJsExtension; + } if (originalCoffeeExtension) { originalExtensions.coffee = originalCoffeeExtension; } + require.extensions[".js"] = jsExtension; require.extensions[".coffee"] = coffeeExtension; } function restoreExtensions() { + if ("js" in originalExtensions) { + require.extensions[".js"] = originalExtensions.js; + } if ("coffee" in originalExtensions) { require.extensions[".coffee"] = originalExtensions.coffee; } } +function jsExtension(module, filename) { + var _compile = module._compile; + + module._compile = function (content, filename) { + content = babelCore.transform(content, { + plugins: ["transform-es2015-block-scoping"], + retainLines: true, + filename: filename + }).code; + _compile.call(module, content, filename); + }; + + restoreExtensions(); + originalExtensions.js(module, filename); +} + function coffeeExtension(module, filename) { var content = stripBOM(fs.readFileSync(filename, "utf8")); + restoreExtensions(); content = coffee.compile(content, { filename: filename, bare: true @@ -108,5 +118,4 @@ try { } exports.load = load; -exports.compile = compile; exports.inject = inject; diff --git a/lib/rewire.js b/lib/rewire.js index 1d240d4..e678f37 100644 --- a/lib/rewire.js +++ b/lib/rewire.js @@ -9,15 +9,11 @@ var Module = require("module"), /** * Does actual rewiring the module. For further documentation @see index.js */ -function internalRewire(parentModulePath, targetPath, opts) { +function internalRewire(parentModulePath, targetPath) { var targetModule, prelude, appendix, - src, - isTransform; - - opts = typeof opts === "object" ? opts : {}; - isTransform = !!opts.convertConst; + src; // Checking params if (typeof targetPath !== "string") { @@ -27,14 +23,6 @@ function internalRewire(parentModulePath, targetPath, opts) { // Resolve full filename relative to the parent module targetPath = Module._resolveFilename(targetPath, parentModulePath); - // Special support for older node versions that returned an array on Module._resolveFilename - // @see https://github.com/joyent/node/blob/865b077819a9271a29f982faaef99dc635b57fbc/lib/module.js#L319 - // TODO Remove this switch on the next major release - /* istanbul ignore next because it will be removed soon */ - if (Array.isArray(targetPath)) { - targetPath = targetPath[1]; - } - // Create testModule as it would be created by require() targetModule = new Module(targetPath, parentModulePath); @@ -59,12 +47,7 @@ function internalRewire(parentModulePath, targetPath, opts) { } moduleEnv.inject(prelude, appendix); - - if(isTransform) { - moduleEnv.compile(targetModule, src, targetPath); - } else { - moduleEnv.load(targetModule); - } + moduleEnv.load(targetModule); return targetModule.exports; } |