Skip to content

Commit

Permalink
Merge ec2175b into fff5037
Browse files Browse the repository at this point in the history
  • Loading branch information
jhnns committed Nov 11, 2017
2 parents fff5037 + ec2175b commit 888257f
Show file tree
Hide file tree
Showing 13 changed files with 642 additions and 18 deletions.
6 changes: 3 additions & 3 deletions .travis.yml
@@ -1,9 +1,9 @@
language: node_js
node_js:
- "0.10"
- "0.12"
- "4"
- "5"
- "6"
- "8"
- "9"

script:
- npm test
Expand Down
3 changes: 0 additions & 3 deletions README.md
Expand Up @@ -139,9 +139,6 @@ myModule.__with__({
Limitations
-----------

**Using `const`**<br>
It's not possible to rewire `const` (see [#79](https://github.com/jhnns/rewire/issues/79)). This can probably be solved with [proxies](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy) someday but requires further research.

**Transpilers**<br>
Some transpilers, like babel, rename variables in order to emulate certain language features. Rewire will not work in these cases (see [#62](https://github.com/jhnns/rewire/issues/62)). A possible solution might be switching to [babel-plugin-rewire](https://github.com/speedskater/babel-plugin-rewire).

Expand Down
2 changes: 1 addition & 1 deletion lib/index.js
Expand Up @@ -13,4 +13,4 @@ function rewire(filename) {

module.exports = rewire;

delete require.cache[__filename]; // deleting self from module cache so the parent module is always up to date
delete require.cache[__filename]; // deleting self from module cache so the parent module is always up to date
31 changes: 29 additions & 2 deletions lib/moduleEnv.js
Expand Up @@ -2,12 +2,15 @@

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;

Expand All @@ -26,7 +29,6 @@ function load(targetModule) {
function reset() {
Module.wrapper[0] = moduleWrapper0;
Module.wrapper[1] = moduleWrapper1;
restoreExtensions();
}

function inject(prelude, appendix) {
Expand All @@ -47,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
Expand Down
1 change: 1 addition & 0 deletions lib/rewire.js
@@ -1,5 +1,6 @@
var Module = require("module"),
fs = require("fs"),
path = require("path"),
getImportGlobalsSrc = require("./getImportGlobalsSrc.js"),
getDefinePropertySrc = require("./getDefinePropertySrc.js"),
detectStrictMode = require("./detectStrictMode.js"),
Expand Down

0 comments on commit 888257f

Please sign in to comment.