blob: 59ba8cf836e635a2055c57c90272903b64555ad4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
var pathUtil = require("path"),
browserifyRequire = window.browserifyRequire;
var registry = {},
rewiredModules = []; // cache for all rewired modules so it can be reset anytime
function rewire(parentModulePath, targetPath, cache) {
var originalModule,
rewiredModule = {},
registeredTargetModule;
if (cache === undefined) {
cache = true;
}
// Make absolute paths
if (targetPath.charAt(0) === ".") {
targetPath = pathUtil.resolve(pathUtil.dirname(parentModulePath), targetPath);
}
// Normalize path with file extensions
targetPath = require.resolve(targetPath);
// Deleting module from cache to trigger execution again
delete browserifyRequire.modules[targetPath]._cached;
// Require module to trigger rewire.register() if it hasnt been required yet
// Putting (require) within brackets is a hack to disable browserifys require sniffing
// @see https://github.com/substack/node-browserify/issues/132#issuecomment-5281470
originalModule = (require)(targetPath);
for (var key in originalModule) {
if (originalModule.hasOwnProperty(key)) {
rewiredModule[key] = originalModule[key];
}
}
if (cache) {
browserifyRequire.modules[targetPath]._cached = rewiredModule;
}
// Get registry entry of the target module
registeredTargetModule = registry[targetPath];
// Apply setter and getters
rewiredModule.__set__ = registeredTargetModule.setter;
rewiredModule.__get__ = registeredTargetModule.getter;
// Store rewired modules for rewire.reset()
rewiredModules.push(targetPath);
return rewiredModule;
}
rewire.register = function (filename, setter, getter) {
registry[filename] = {
setter: setter,
getter: getter
};
};
/**
* Deletes all rewired modules from the cache
*/
rewire.reset = function () {
var modules = browserifyRequire.modules,
i;
for (i = 0; i < rewiredModules.length; i++) {
delete modules[rewiredModules[i]]._cached;
}
rewiredModules = [];
};
module.exports = rewire;
|