twreporter-react
Version:
React-Redux site for The Reporter Foundation in Taiwan
38 lines (29 loc) • 1.94 kB
JavaScript
;
var detectStrictMode = require("rewire/lib/detectStrictMode.js"),
getDefinePropertySrc = require("rewire/lib/getDefinePropertySrc.js"),
path = require("path"),
pathToGetImportGlobalsSrc = require.resolve("rewire/lib/getImportGlobalsSrc.js").split(path.sep).join("/");
function rewireLoader(src) {
src =
// Trying to hide the injected line in the debug view with extra whitespaces.
' ' +
'/* this line was injected by rewire() */ ' + // Comment for the curious developer
// Now all global variables are declared with a var statement so they can be changed via __set__()
// without influencing global objects.
'var global = window; ' + // window is our new global object
'eval(require("' + pathToGetImportGlobalsSrc + '")()); ' +
// The module src is wrapped inside a self-executing function.
// This is necessary to separate the module src from the preceding eval(importGlobalsSrc),
// because the module src can be in strict mode.
// In strict mode eval() can only declare vars in the current scope. In this case our setters
// and getters won't work.
// @see https://developer.mozilla.org/en/JavaScript/Strict_mode#Making_eval_and_arguments_simpler
"(function () { " +
// If the module uses strict mode we must ensure that "use strict" stays at the beginning of the function.
(detectStrictMode(src) ? ' "use strict"; ' : ' ') +
src +
// append at least a newline, the source may end with a line comment
"\n" + getDefinePropertySrc() + " })();";
return src;
}
module.exports = rewireLoader;