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

__set__.js « lib - github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 7de8eec6417450a0bd687027598107f44db3773b (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
"use strict"; // run code in ES5 strict mode

/**
 * This function will be stringified and then injected into every rewired module.
 * Then you can set private variables by calling myModule.__set__("myPrivateVar", newValue);
 *
 * @param {!String|!Object} varName name of the variable to set
 * @param {String} varValue new value
 * @throws {TypeError}
 * @return {*}
 */
module.exports = function __set__(varName, varValue) {
    var key,
        env,
        src = "";

    function checkExistsSrc(varName) {
        return "if (typeof " + varName + " === 'undefined') { throw new ReferenceError('" + varName + " is not defined');} ";
    }

    if (typeof varName === "object") {
        env = varName;
        if (!env || Array.isArray(env)) {
            throw new TypeError("__set__ expects an object as env");
        }
        for (key in env) {
            if (env.hasOwnProperty(key)) {
                src += checkExistsSrc(key) + key + " = env." + key + ";";
            }
        }
    } else if (typeof varName === "string") {
        if (!varName) {
            throw new TypeError("__set__ expects a non-empty string as a variable name");
        }
        src = checkExistsSrc(varName) + varName + " = varValue;"
    } else {
        throw new TypeError("__set__ expects an environment object or a non-empty string as a variable name");
    }

    eval(src);
};