yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
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
77
78
79
80
81
82
83
84
85
86
87
exports.config = function(config){
    // summary:
    //      This module provides bootstrap configuration for running dojo in node.js
 
    // any command line arguments with the load flag are pushed into deps
    for(var deps = [], args = [], i = 0; i < process.argv.length; i++){
        var arg = (process.argv[i] + "").split("=");
        if(arg[0] == "load"){
            deps.push(arg[1]);
        }else{
            args.push(arg);
        }
    }
 
    var fs = require("fs");
 
    // make sure global require exists
    //if (typeof global.require=="undefined"){
    //  global.require= {};
    //}
 
    // reset the has cache with node-appropriate values;
    var hasCache = {
        "host-node":1,
        "host-browser":0,
        "dom":0,
        "dojo-has-api":1,
        "dojo-xhr-factory":0,
        "dojo-inject-api":1,
        "dojo-timeout-api":0,
        "dojo-trace-api":1,
        "dojo-dom-ready-api":0,
        "dojo-publish-privates":1,
        "dojo-sniff":0,
        "dojo-loader":1,
        "dojo-test-xd":0,
        "dojo-test-sniff":0
    };
    for(var p in hasCache){
        config.hasCache[p] = hasCache[p];
    }
 
    var vm = require('vm'),
        path = require('path');
 
    // reset some configuration switches with node-appropriate values
    var nodeConfig = {
        baseUrl: path.dirname(process.argv[1]),
        commandLineArgs:args,
        deps:deps,
        timeout:0,
 
        // TODO: really get the locale
        locale:"en-us",
 
        loaderPatch: {
            log:function(item){
                // define debug for console messages during dev instead of console.log
                // (node's heavy async makes console.log confusing sometimes)
                var util = require("util");
                util.debug(util.inspect(item));
            },
 
            eval: function(__text, __urlHint){
                return vm.runInThisContext(__text, __urlHint);
            },
 
            injectUrl: function(url, callback){
                try{
                    vm.runInThisContext(fs.readFileSync(url, "utf8"), url);
                    callback();
                }catch(e){
                    this.log("failed to load resource (" + url + ")");
                    this.log(e);
                }
            },
 
            getText: function(url, sync, onLoad){
                // TODO: implement async and http/https handling
                onLoad(fs.readFileSync(url, "utf8"));
            }
        }
    };
    for(p in nodeConfig){
        config[p] = nodeConfig[p];
    }
};