summaryrefslogtreecommitdiff
path: root/lib/dojo/_base/configNode.js
blob: fbcec916e9cf02a346765783c151486e5625d4dd (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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 if(arg[0] == "mapPackage") {
			var parts = arg[1].split(":"),
				name = parts[0],
				location=parts[1],
				isPrexisting = false;

			for (var j = 0; j < config.packages.length; j++) {
				var pkg = config.packages[j];
				if (pkg.name === name) {
					pkg.location = location;
					isPrexisting = true;
					break;
				}
			}

			if (!isPrexisting) {
				config.packages.push({
					name: name,
					location: location
				});
			}
		}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.debuglog(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];
	}
};