Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorjeroenvalcke <valcke_jeroen@hotmail.com>2017-11-13 19:43:47 +0300
committerjeroenvalcke <valcke_jeroen@hotmail.com>2017-11-13 19:43:47 +0300
commit0a77533c6b7a41606975303be2327c250cd77d19 (patch)
tree58b7025a7f49f19d8015720601410c857eeaf495 /lib
parentc176d025b57ff616d2a63989a685fe70651e33d3 (diff)
parentcce2de832c99e1f1491c9766bc6a2f1b4d0a3bd2 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'lib')
-rw-r--r--lib/index.js4
-rw-r--r--lib/moduleEnv.js49
-rw-r--r--lib/rewire.js23
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;
}