Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c5d8fab

Browse files
author
Johannes
committed
- Introduced webpack bundler for rewire (work in progress, some tests are not running)
1 parent 657b9e8 commit c5d8fab

23 files changed

+747
-450
lines changed

lib/browserify/browserifyMiddleware.js

Lines changed: 0 additions & 100 deletions
This file was deleted.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
var setterSrc = require("../../__set__.js").toString(),
2+
getterSrc = require("../../__get__.js").toString(),
3+
path = require("path"),
4+
injectRewire = require("../injectRewire.js"),
5+
getRewireRequires = require("../getRewireRequires.js"),
6+
7+
rewireIndex = path.resolve(__dirname, "../../index.js"),
8+
settersAndGettersSrc;
9+
10+
function browserifyMiddleware(b) {
11+
function doInjectRewire(src, filename) {
12+
var rewireRequires;
13+
14+
// Search for all rewire() statements an return the required path.
15+
rewireRequires = getRewireRequires(src);
16+
17+
// Add all modules that are loaded by rewire() manually to browserify because browserify's
18+
// require-sniffing doesn't work here.
19+
rewireRequires.forEach(function forEachRewireRequire(requirePath) {
20+
// Resolve absolute paths
21+
if (requirePath.charAt(0) === ".") {
22+
requirePath = path.resolve(path.dirname(filename), requirePath);
23+
}
24+
b.require(requirePath);
25+
});
26+
27+
src = injectRewire(src, filename, settersAndGettersSrc);
28+
29+
return src;
30+
}
31+
32+
function forwardBrowserifyRewire(filename) {
33+
if (filename === rewireIndex) {
34+
filename = __dirname + "/browserifyRewire.js";
35+
}
36+
37+
return filename;
38+
}
39+
40+
// Register file handler
41+
b.register(".js", doInjectRewire);
42+
b.register("path", forwardBrowserifyRewire);
43+
44+
return b;
45+
}
46+
47+
/**
48+
* This string gets injected at the beginning of every module. Its purpose is to
49+
* - register the setters and getters according to the module's filename
50+
* - override the internal require with a require proxy.
51+
*
52+
* @private
53+
* @type {String}
54+
*/
55+
settersAndGettersSrc = (
56+
'var rewire = require("rewire"); ' +
57+
// Registers the setters and getters of every module according to their filename. The setters and getters must be
58+
// injected as string here to gain access to the private scope of the module.
59+
'rewire.register(__filename, module, ' + setterSrc + ', ' + getterSrc + ');' +
60+
// Overrides the module internal require with a require proxy. This proxy is necessary to call rewire with the
61+
// module's filename at the first parameter to resolve the path. This way rewire() works exactly like require().
62+
'require = rewire.getProxy(require, __dirname);' +
63+
// Cleaning up
64+
'rewire = undefined;'
65+
).replace(/\s+/g, " "); // strip out unnecessary spaces to be unobtrusive in the debug view
66+
67+
module.exports = browserifyMiddleware;

0 commit comments

Comments
 (0)