-
Notifications
You must be signed in to change notification settings - Fork 1
/
bootstrap.js
120 lines (98 loc) · 3.39 KB
/
bootstrap.js
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
109
110
111
112
113
114
115
116
117
118
119
var modules = {};
var PROCESS = process;
var NODE_FS = require("fs");
var SYS = require("sys");
var FS, SYSTEM, ENGINE;
// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
// This file is an anonymous function expression. The file is executed in
// node_narwhal.cc to produce a Function. The function is called in
// node_narwhal.cc with a module memo that has been "primed" with native
// modules to avoid communicating dependencies through the transitive
// globals.
function main () {
var natives = PROCESS.binding("natives");
Object.keys(natives).forEach(function (name) {
if (name === "assert")
return; // narwhal has its own
if (name === "file")
return; // narwhal also has a deprecated module by this name
Object.defineProperty(modules, name, {
"get": function () {
return require(name);
}
});
});
var text = FS.read(ENGINE.prefix + "/narwhal.js");
var factory = PROCESS.compile(text, "$NARWHAL/narwhal.js", 1);
factory(modules);
}
// module "system"
(function (exports) {
exports.env = PROCESS.env;
exports.args = [PROCESS.argv[0]].concat(PROCESS.argv.slice(2));
exports.print = SYS.puts;
})(SYSTEM = modules['system'] = {});
// module "narwhal/engine"
(function (exports) {
exports.global = this;
exports.engine = "node";
exports.engines = ["node", "default"];
exports.debug = +SYSTEM.env["NARWHAL_DEBUG"];
exports.verbose = +SYSTEM.env["NARWHAL_VERBOSE"];
exports.strict = +SYSTEM.env["NARWHAL_STRICT"];
exports.os = undefined; // XXX TODO
exports.enginePrefix = SYSTEM.env["NARWHAL_ENGINE_HOME"];
exports.prefix = SYSTEM.env["NARWHAL_HOME"];
exports.prefixes = [exports.prefix];
ENGINE.compile = PROCESS.compile;
exports.Module = function (text, fileName, lineNo) {
var factory = function (inject) {
var names = [];
for (var name in inject)
if (Object.prototype.hasOwnProperty.call(inject, name))
names.push(name);
var factory;
try {
factory = PROCESS.compile(
Array(lineNo).join("\n") +
"(function(" + names.join(",") + "){" + text + "\n})",
fileName
);
} catch (exception) {
throw new Error(
exception + " while compiling " +
fileName + ":" + lineNo
);
}
factory.apply(null, names.map(function (name) {
return inject[name];
}));
};
return factory;
};
ENGINE.loaders = [
[".node", {
"load": function (path) {
return function (inject) {
var exports = require(path);
for (var name in exports) {
inject.exports[name] = exports[name];
}
};
},
"reload": function (path) {
}
}]
];
})(ENGINE = modules['narwhal/engine'] = {});
// module "narwhal/fs"
(function (exports) {
exports.read = NODE_FS.readFileSync;
exports.isFile = function (path) {
try {
var stat = NODE_FS.statSync(path);
} catch (x) {}
return stat && stat.isFile();
};
})(FS = modules['narwhal/fs'] = {});
main();