2009-10-31 19:02:30 +01:00
|
|
|
(function () { // annonymous namespace
|
|
|
|
|
|
|
|
// deprecation errors
|
|
|
|
|
|
|
|
GLOBAL.include = function () {
|
|
|
|
throw new Error("include() has been removed. Use process.mixin(process, require(file)) to get the same effect.");
|
|
|
|
};
|
|
|
|
|
|
|
|
GLOBAL.puts = function () {
|
|
|
|
throw new Error("puts() has moved. Use require('/sys.js') to bring it back.");
|
|
|
|
}
|
|
|
|
|
|
|
|
GLOBAL.print = function () {
|
|
|
|
throw new Error("print() has moved. Use require('/sys.js') to bring it back.");
|
|
|
|
}
|
|
|
|
|
|
|
|
GLOBAL.p = function () {
|
|
|
|
throw new Error("p() has moved. Use require('/sys.js') to bring it back.");
|
|
|
|
}
|
|
|
|
|
|
|
|
process.debug = function () {
|
|
|
|
throw new Error("process.debug() has moved. Use require('/sys.js') to bring it back.");
|
|
|
|
}
|
|
|
|
|
|
|
|
process.error = function () {
|
|
|
|
throw new Error("process.error() has moved. Use require('/sys.js') to bring it back.");
|
|
|
|
}
|
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.tcp.createServer = function () {
|
|
|
|
throw new Error("process.tcp.createServer() has moved. Use require('/tcp.js') to access it.");
|
2009-06-25 19:13:20 +02:00
|
|
|
};
|
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.createProcess = function () {
|
2009-10-31 19:02:30 +01:00
|
|
|
throw new Error("process.createProcess() has been changed to process.createChildProcess() update your code");
|
2009-06-30 13:40:00 +02:00
|
|
|
};
|
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.exec = function () {
|
|
|
|
throw new Error("process.exec() has moved. Use require('/sys.js') to bring it back.");
|
2009-09-28 12:06:30 +02:00
|
|
|
}
|
2009-09-15 15:42:16 +02:00
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.http.createServer = function () {
|
|
|
|
throw new Error("process.http.createServer() has moved. Use require('/http.js') to access it.");
|
2009-09-28 12:36:36 +02:00
|
|
|
}
|
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.http.createClient = function () {
|
|
|
|
throw new Error("process.http.createClient() has moved. Use require('/http.js') to access it.");
|
2009-09-28 12:36:36 +02:00
|
|
|
}
|
|
|
|
|
2009-10-29 23:34:10 +01:00
|
|
|
process.tcp.createConnection = function (port, host) {
|
|
|
|
throw new Error("process.tcp.createConnection() has moved. Use require('/tcp.js') to access it.");
|
2009-06-30 13:56:52 +02:00
|
|
|
};
|
|
|
|
|
2009-10-09 13:30:27 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
process.createChildProcess = function (file, args, env) {
|
|
|
|
var child = new process.ChildProcess();
|
|
|
|
args = args || [];
|
|
|
|
env = env || process.ENV;
|
|
|
|
var envPairs = [];
|
|
|
|
for (var key in env) {
|
|
|
|
if (env.hasOwnProperty(key)) {
|
|
|
|
envPairs.push(key + "=" + env[key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// TODO Note envPairs is not currently used in child_process.cc. The PATH
|
|
|
|
// needs to be searched for the 'file' command if 'file' does not contain
|
|
|
|
// a '/' character.
|
|
|
|
child.spawn(file, args, envPairs);
|
|
|
|
return child;
|
|
|
|
};
|
|
|
|
|
|
|
|
// From jQuery.extend in the jQuery JavaScript Library v1.3.2
|
|
|
|
// Copyright (c) 2009 John Resig
|
|
|
|
// Dual licensed under the MIT and GPL licenses.
|
|
|
|
// http://docs.jquery.com/License
|
2009-10-29 23:34:10 +01:00
|
|
|
process.mixin = function() {
|
2009-10-05 15:46:31 +02:00
|
|
|
// copy reference to target object
|
|
|
|
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
|
|
|
|
|
|
|
|
// Handle a deep copy situation
|
|
|
|
if ( typeof target === "boolean" ) {
|
|
|
|
deep = target;
|
|
|
|
target = arguments[1] || {};
|
|
|
|
// skip the boolean and the target
|
|
|
|
i = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Handle case when target is a string or something (possible in deep copy)
|
2009-10-29 23:34:10 +01:00
|
|
|
if ( typeof target !== "object" && !process.isFunction(target) )
|
2009-10-05 15:46:31 +02:00
|
|
|
target = {};
|
|
|
|
|
|
|
|
// mixin process itself if only one argument is passed
|
|
|
|
if ( length == i ) {
|
2009-10-29 23:34:10 +01:00
|
|
|
target = GLOBAL;
|
2009-10-05 15:46:31 +02:00
|
|
|
--i;
|
|
|
|
}
|
|
|
|
|
|
|
|
for ( ; i < length; i++ )
|
|
|
|
// Only deal with non-null/undefined values
|
|
|
|
if ( (options = arguments[ i ]) != null )
|
|
|
|
// Extend the base object
|
|
|
|
for ( var name in options ) {
|
|
|
|
var src = target[ name ], copy = options[ name ];
|
|
|
|
|
|
|
|
// Prevent never-ending loop
|
|
|
|
if ( target === copy )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// Recurse if we're merging object values
|
|
|
|
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
|
2009-10-29 23:34:10 +01:00
|
|
|
target[ name ] = process.mixin( deep,
|
2009-10-05 15:46:31 +02:00
|
|
|
// Never move original objects, clone them
|
|
|
|
src || ( copy.length != null ? [ ] : { } )
|
|
|
|
, copy );
|
|
|
|
|
|
|
|
// Don't bring in undefined values
|
|
|
|
else if ( copy !== undefined )
|
|
|
|
target[ name ] = copy;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the modified object
|
|
|
|
return target;
|
|
|
|
};
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
|
|
|
|
|
2009-10-14 17:56:12 -04:00
|
|
|
// Signal Handlers
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
function isSignal (event) {
|
|
|
|
return event.slice(0, 3) === 'SIG' && process.hasOwnProperty(event);
|
|
|
|
};
|
2009-10-14 17:56:12 -04:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
process.addListener("newListener", function (event) {
|
|
|
|
if (isSignal(event) && process.listeners(event).length === 0) {
|
|
|
|
var handler = new process.SignalHandler(process[event]);
|
|
|
|
handler.addListener("signal", function () {
|
|
|
|
process.emit(event);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
2009-10-14 17:56:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
2009-06-08 15:30:10 +02:00
|
|
|
// Timers
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
GLOBAL.setTimeout = function (callback, after) {
|
2009-10-29 23:34:10 +01:00
|
|
|
var timer = new process.Timer();
|
2009-06-29 13:18:30 +02:00
|
|
|
timer.addListener("timeout", callback);
|
2009-06-25 20:25:44 +02:00
|
|
|
timer.start(after, 0);
|
2009-06-08 15:30:10 +02:00
|
|
|
return timer;
|
|
|
|
}
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
GLOBAL.setInterval = function (callback, repeat) {
|
2009-10-29 23:34:10 +01:00
|
|
|
var timer = new process.Timer();
|
2009-06-29 13:18:30 +02:00
|
|
|
timer.addListener("timeout", callback);
|
2009-06-25 20:25:44 +02:00
|
|
|
timer.start(repeat, repeat);
|
2009-06-08 15:30:10 +02:00
|
|
|
return timer;
|
|
|
|
}
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
GLOBAL.clearTimeout = function (timer) {
|
2009-06-08 15:30:10 +02:00
|
|
|
timer.stop();
|
|
|
|
}
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
GLOBAL.clearInterval = GLOBAL.clearTimeout;
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-04-15 10:08:28 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
// Modules
|
2009-04-29 11:00:46 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
var debugLevel = 0;
|
|
|
|
if ("NODE_DEBUG" in process.ENV) debugLevel = 1;
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
function debug (x) {
|
|
|
|
if (debugLevel > 0) {
|
|
|
|
process.stdio.writeError(x + "\n");
|
|
|
|
}
|
2009-09-18 15:45:47 +02:00
|
|
|
}
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
|
|
|
|
// private constructor
|
2009-10-31 19:47:41 +01:00
|
|
|
function Module (id, parent) {
|
|
|
|
this.id = id;
|
2009-10-05 21:01:30 +02:00
|
|
|
this.exports = {};
|
2009-09-18 15:45:47 +02:00
|
|
|
this.parent = parent;
|
2009-04-21 13:52:21 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
this.filename = null;
|
2009-06-08 15:30:10 +02:00
|
|
|
this.loaded = false;
|
2009-08-26 18:02:45 +02:00
|
|
|
this.loadPromise = null;
|
2009-06-08 15:30:10 +02:00
|
|
|
this.exited = false;
|
|
|
|
this.children = [];
|
|
|
|
};
|
2009-04-20 02:55:08 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
var moduleCache = {};
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
function createModule (id, parent) {
|
|
|
|
if (id in moduleCache) {
|
|
|
|
debug("found " + JSON.stringify(id) + " in cache");
|
|
|
|
return moduleCache[id];
|
2009-09-18 15:45:47 +02:00
|
|
|
}
|
2009-10-31 19:47:41 +01:00
|
|
|
debug("didn't found " + JSON.stringify(id) + " in cache. creating new module");
|
|
|
|
var m = new Module(id, parent);
|
|
|
|
moduleCache[id] = m;
|
2009-10-31 19:02:30 +01:00
|
|
|
return m;
|
|
|
|
};
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
function createInternalModule (id, constructor) {
|
|
|
|
var m = createModule(id);
|
2009-10-31 19:02:30 +01:00
|
|
|
constructor(m.exports);
|
|
|
|
m.loaded = true;
|
|
|
|
return m;
|
|
|
|
};
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
var pathModule = createInternalModule("path", function (exports) {
|
|
|
|
exports.join = function () {
|
|
|
|
var joined = "";
|
|
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
|
|
var part = arguments[i].toString();
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
/* Some logic to shorten paths */
|
|
|
|
if (part === ".") continue;
|
|
|
|
while (/^\.\//.exec(part)) part = part.replace(/^\.\//, "");
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
if (i === 0) {
|
|
|
|
part = part.replace(/\/*$/, "/");
|
|
|
|
} else if (i === arguments.length - 1) {
|
|
|
|
part = part.replace(/^\/*/, "");
|
|
|
|
} else {
|
|
|
|
part = part.replace(/^\/*/, "").replace(/\/*$/, "/");
|
2009-09-18 15:45:47 +02:00
|
|
|
}
|
2009-10-31 19:02:30 +01:00
|
|
|
joined += part;
|
|
|
|
}
|
|
|
|
return joined;
|
|
|
|
};
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
exports.dirname = function (path) {
|
|
|
|
if (path.charAt(0) !== "/") path = "./" + path;
|
|
|
|
var parts = path.split("/");
|
|
|
|
return parts.slice(0, parts.length-1).join("/");
|
|
|
|
};
|
2009-09-28 17:12:28 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
exports.filename = function (path) {
|
|
|
|
if (path.charAt(0) !== "/") path = "./" + path;
|
|
|
|
var parts = path.split("/");
|
|
|
|
return parts[parts.length-1];
|
|
|
|
};
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
exports.exists = function (path, callback) {
|
|
|
|
var p = process.fs.stat(path);
|
|
|
|
p.addCallback(function () { callback(true); });
|
|
|
|
p.addErrback(function () { callback(false); });
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
var path = pathModule.exports;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var modulePaths = [ path.join(process.installPrefix, "lib/node/libraries")
|
|
|
|
];
|
|
|
|
|
|
|
|
if (process.ENV["HOME"]) {
|
|
|
|
modulePaths.unshift(path.join(process.ENV["HOME"], ".node_libraries"));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (process.ENV["NODE_PATH"]) {
|
|
|
|
modulePaths = process.ENV["NODE_PATH"].split(":").concat(modulePaths);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
function findModulePath (id, dirs, callback) {
|
2009-10-31 19:02:30 +01:00
|
|
|
process.assert(dirs.constructor == Array);
|
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
if (/.(js|node)$/.exec(id)) {
|
2009-10-31 19:02:30 +01:00
|
|
|
throw new Error("No longer accepting filename extension in module names");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (dirs.length == 0) {
|
|
|
|
callback();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var dir = dirs[0];
|
|
|
|
var rest = dirs.slice(1, dirs.length);
|
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
var js = path.join(dir, id + ".js");
|
|
|
|
var addon = path.join(dir, id + ".node");
|
|
|
|
var indexJs = path.join(dir, id, "index.js");
|
|
|
|
var indexAddon = path.join(dir, id, "index.addon");
|
2009-10-31 19:02:30 +01:00
|
|
|
|
|
|
|
// TODO clean up the following atrocity!
|
|
|
|
|
|
|
|
path.exists(js, function (found) {
|
|
|
|
if (found) {
|
|
|
|
callback(js);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
path.exists(addon, function (found) {
|
|
|
|
if (found) {
|
|
|
|
callback(addon);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
path.exists(indexJs, function (found) {
|
|
|
|
if (found) {
|
|
|
|
callback(indexJs);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
path.exists(indexAddon, function (found) {
|
|
|
|
if (found) {
|
|
|
|
callback(indexAddon);
|
|
|
|
return;
|
2009-09-18 15:45:47 +02:00
|
|
|
}
|
2009-10-31 19:47:41 +01:00
|
|
|
findModulePath(id, rest, callback);
|
2009-09-18 15:45:47 +02:00
|
|
|
});
|
2009-10-31 19:02:30 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadModule (request, parent) {
|
|
|
|
// This is the promise which is actually returned from require.async()
|
|
|
|
var loadPromise = new process.Promise();
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
debug("loadModule REQUEST " + JSON.stringify(request) + " parent: " + JSON.stringify(parent));
|
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
var id, paths;
|
2009-10-31 19:02:30 +01:00
|
|
|
if (request.charAt(0) == "." && request.charAt(1) == "/") {
|
|
|
|
// Relative request
|
2009-10-31 19:47:41 +01:00
|
|
|
id = path.join(path.dirname(parent.id), request);
|
2009-10-31 19:02:30 +01:00
|
|
|
paths = [path.dirname(parent.filename)];
|
|
|
|
} else {
|
2009-10-31 19:47:41 +01:00
|
|
|
id = request;
|
2009-10-31 19:02:30 +01:00
|
|
|
paths = modulePaths;
|
|
|
|
}
|
|
|
|
|
2009-10-31 19:47:41 +01:00
|
|
|
if (id in moduleCache) {
|
|
|
|
debug("found " + JSON.stringify(id) + " in cache");
|
2009-10-31 19:02:30 +01:00
|
|
|
// In cache
|
2009-10-31 19:47:41 +01:00
|
|
|
var module = moduleCache[id];
|
2009-10-31 19:02:30 +01:00
|
|
|
setTimeout(function () {
|
|
|
|
loadPromise.emitSuccess(module.exports);
|
|
|
|
}, 0);
|
|
|
|
} else {
|
2009-10-31 19:47:41 +01:00
|
|
|
debug("looking for " + JSON.stringify(id) + " in " + JSON.stringify(paths));
|
2009-10-31 19:02:30 +01:00
|
|
|
// Not in cache
|
|
|
|
findModulePath(request, paths, function (filename) {
|
|
|
|
if (!filename) {
|
|
|
|
loadPromise.emitError(new Error("Cannot find module '" + request + "'"));
|
2009-09-18 15:45:47 +02:00
|
|
|
} else {
|
2009-10-31 19:47:41 +01:00
|
|
|
var module = createModule(id, parent);
|
2009-10-31 19:02:30 +01:00
|
|
|
module.load(filename, loadPromise);
|
2009-09-18 15:45:47 +02:00
|
|
|
}
|
2009-10-31 19:02:30 +01:00
|
|
|
});
|
|
|
|
}
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
return loadPromise;
|
|
|
|
};
|
|
|
|
|
|
|
|
Module.prototype.load = function (filename, loadPromise) {
|
2009-10-31 19:47:41 +01:00
|
|
|
debug("load " + JSON.stringify(filename) + " for module " + JSON.stringify(this.id));
|
2009-10-31 19:02:30 +01:00
|
|
|
|
|
|
|
process.assert(!this.loaded);
|
|
|
|
process.assert(!this.loadPromise);
|
2009-09-18 15:45:47 +02:00
|
|
|
|
|
|
|
this.loadPromise = loadPromise;
|
2009-10-31 19:02:30 +01:00
|
|
|
this.filename = filename;
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
if (filename.match(/\.node$/)) {
|
|
|
|
this.loadObject(filename, loadPromise);
|
2009-08-31 11:14:34 +02:00
|
|
|
} else {
|
2009-10-31 19:02:30 +01:00
|
|
|
this.loadScript(filename, loadPromise);
|
2009-08-31 11:14:34 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
Module.prototype.loadObject = function (filename, loadPromise) {
|
2009-08-31 11:14:34 +02:00
|
|
|
var self = this;
|
|
|
|
// XXX Not yet supporting loading from HTTP. would need to download the
|
|
|
|
// file, store it to tmp then run dlopen on it.
|
2009-10-31 19:02:30 +01:00
|
|
|
setTimeout(function () {
|
|
|
|
self.loaded = true;
|
|
|
|
process.dlopen(filename, self.exports); // FIXME synchronus
|
|
|
|
loadPromise.emitSuccess(self.exports);
|
|
|
|
}, 0);
|
2009-08-31 11:14:34 +02:00
|
|
|
};
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
Module.prototype.loadScript = function (filename, loadPromise) {
|
2009-06-08 15:30:10 +02:00
|
|
|
var self = this;
|
2009-10-31 19:02:30 +01:00
|
|
|
var catPromise = process.cat(filename);
|
2009-04-15 10:08:28 +02:00
|
|
|
|
2009-09-18 15:45:47 +02:00
|
|
|
catPromise.addErrback(function () {
|
2009-10-31 19:02:30 +01:00
|
|
|
loadPromise.emitError(new Error("Error reading " + filename));
|
2009-06-28 19:05:58 +02:00
|
|
|
});
|
2009-04-21 13:52:21 +02:00
|
|
|
|
2009-09-18 15:45:47 +02:00
|
|
|
catPromise.addCallback(function (content) {
|
2009-08-03 18:39:37 +02:00
|
|
|
// remove shebang
|
|
|
|
content = content.replace(/^\#\!.*/, '');
|
|
|
|
|
2009-09-29 19:28:54 +02:00
|
|
|
function requireAsync (url) {
|
2009-10-31 19:02:30 +01:00
|
|
|
return loadModule(url, self); // new child
|
2009-09-29 19:28:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function require (url) {
|
|
|
|
return requireAsync(url).wait();
|
|
|
|
}
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
require.paths = modulePaths;
|
2009-10-05 20:35:48 +02:00
|
|
|
require.async = requireAsync;
|
|
|
|
|
2009-06-08 15:30:10 +02:00
|
|
|
// create wrapper function
|
2009-10-31 19:02:30 +01:00
|
|
|
var wrapper = "var __wrap__ = function (exports, require, module, __filename) { "
|
2009-10-07 11:53:03 +02:00
|
|
|
+ content
|
|
|
|
+ "\n}; __wrap__;";
|
2009-10-31 19:02:30 +01:00
|
|
|
var compiledWrapper = process.compile(wrapper, filename);
|
2009-08-26 18:02:45 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
compiledWrapper.apply(self.exports, [self.exports, require, self, filename]);
|
2009-08-26 18:02:45 +02:00
|
|
|
|
|
|
|
self.waitChildrenLoad(function () {
|
2009-06-08 15:30:10 +02:00
|
|
|
self.loaded = true;
|
2009-10-05 21:01:30 +02:00
|
|
|
loadPromise.emitSuccess(self.exports);
|
2009-06-08 15:30:10 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2009-04-20 02:55:08 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
Module.prototype.waitChildrenLoad = function (callback) {
|
2009-08-26 18:51:04 +02:00
|
|
|
var nloaded = 0;
|
2009-06-08 15:30:10 +02:00
|
|
|
var children = this.children;
|
|
|
|
for (var i = 0; i < children.length; i++) {
|
|
|
|
var child = children[i];
|
2009-08-26 18:02:45 +02:00
|
|
|
if (child.loaded) {
|
|
|
|
nloaded++;
|
|
|
|
} else {
|
2009-08-31 11:14:34 +02:00
|
|
|
child.loadPromise.addCallback(function () {
|
2009-08-26 18:02:45 +02:00
|
|
|
nloaded++;
|
|
|
|
if (children.length == nloaded && callback) callback();
|
|
|
|
});
|
|
|
|
}
|
2009-04-20 02:55:08 +02:00
|
|
|
}
|
2009-08-26 18:02:45 +02:00
|
|
|
if (children.length == nloaded && callback) callback();
|
2009-06-08 15:30:10 +02:00
|
|
|
};
|
|
|
|
|
2009-09-28 16:50:19 +02:00
|
|
|
|
|
|
|
process.exit = function (code) {
|
|
|
|
process.emit("exit");
|
2009-10-29 23:34:10 +01:00
|
|
|
process.reallyExit(code);
|
2009-09-28 16:50:19 +02:00
|
|
|
};
|
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
var cwd = process.cwd();
|
2009-09-18 15:45:47 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
// Make process.ARGV[0] and process.ARGV[1] into full paths.
|
|
|
|
if (process.ARGV[0].charAt(0) != "/") {
|
|
|
|
process.ARGV[0] = path.join(cwd, process.ARGV[0]);
|
|
|
|
}
|
2009-09-07 14:09:18 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
if (process.ARGV[1].charAt(0) != "/") {
|
|
|
|
process.ARGV[1] = path.join(cwd, process.ARGV[1]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Load the root module--the command line argument.
|
|
|
|
var m = createModule(".");
|
|
|
|
var loadPromise = new process.Promise();
|
|
|
|
m.load(process.ARGV[1], loadPromise);
|
|
|
|
loadPromise.wait();
|
2009-09-07 14:09:18 +02:00
|
|
|
|
2009-10-31 19:02:30 +01:00
|
|
|
}()); // end annonymous namespace
|