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

browserifyRewire.js « browserify « lib - github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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;