-
Notifications
You must be signed in to change notification settings - Fork 48
/
node.js
79 lines (79 loc) · 2.26 KB
/
node.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
var split$ = ''.split;
module.exports = function(Coco){
var fs, path;
fs = require('fs');
path = require('path');
Coco.run = function(code, options, js){
var filename, main, dirname, ref$, e;
if (options != null) {
filename = options.filename;
}
main = require.main;
if (filename) {
dirname = path.dirname(fs.realpathSync(filename = process.argv[1] = path.resolve(filename)));
} else {
dirname = filename = '.';
}
main.paths = main.constructor._nodeModulePaths(dirname);
main.filename = filename;
js || (code = Coco.compile(code, (ref$ = {}, import$(ref$, options), ref$.bare = true, ref$)));
try {
return main._compile(code, filename);
} catch (e$) {
e = e$;
throw hackTrace(e, code, filename);
}
};
importAll$(Coco, require('events').EventEmitter.prototype);
require.extensions['.co'] = function(module, filename){
var js, e;
js = Coco.compile(fs.readFileSync(filename, 'utf8'), {
filename: filename,
bare: true
});
try {
return module._compile(js, filename);
} catch (e$) {
e = e$;
throw hackTrace(e, js, filename);
}
};
};
function hackTrace(error, js, filename){
var stack, traces, i, len$, trace, index, lno, end, length, lines, n, ref$;
if (error != null) {
stack = error.stack;
}
if (!stack) {
return error;
}
traces = split$.call(stack, '\n');
if (!(traces.length > 1)) {
return error;
}
for (i = 0, len$ = traces.length; i < len$; ++i) {
trace = traces[i];
if (0 > (index = trace.indexOf("(" + filename + ":"))) {
continue;
}
lno = (/:(\d+):/.exec(trace.slice(index + filename.length)) || '')[1];
if (!(lno = +lno)) {
continue;
}
length = ('' + (end = lno + 4)).length;
lines || (lines = split$.call(js, '\n'));
for (n = 1 > (ref$ = lno - 4) ? 1 : ref$; n <= end; ++n) {
traces[i] += "\n" + (' ' + n).slice(-length) + "" + '|+'.charAt(n === lno) + " " + [lines[n - 1]];
}
}
return error.stack = traces.join('\n'), error;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
function importAll$(obj, src){
for (var key in src) obj[key] = src[key];
return obj;
}