-
-
Notifications
You must be signed in to change notification settings - Fork 132
/
task-bootstrap.js
90 lines (81 loc) · 2.09 KB
/
task-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
const { userAgent } = process.env;
const [compileCachePath, taskPath] = process.argv.slice(2);
const CompileCache = require('./compile-cache');
CompileCache.setCacheDirectory(compileCachePath);
CompileCache.install(`${process.resourcesPath}`, require);
const setupGlobals = function() {
global.attachEvent = function() {};
const console = {
warn() {
return global.emit('task:warn', ...arguments);
},
log() {
return global.emit('task:log', ...arguments);
},
error() {
return global.emit('task:error', ...arguments);
},
trace() {}
};
global.__defineGetter__('console', () => console);
global.document = {
createElement() {
return {
setAttribute() {},
getElementsByTagName() {
return [];
},
appendChild() {}
};
},
documentElement: {
insertBefore() {},
removeChild() {}
},
getElementById() {
return {};
},
createComment() {
return {};
},
createDocumentFragment() {
return {};
}
};
global.emit = (event, ...args) => process.send({ event, args });
global.navigator = { userAgent };
return (global.window = global);
};
const handleEvents = function() {
process.on('uncaughtException', error =>
console.error(error.message, error.stack)
);
return process.on('message', function({ event, args } = {}) {
if (event !== 'start') {
return;
}
let isAsync = false;
const async = function() {
isAsync = true;
return result => global.emit('task:completed', result);
};
const result = handler.bind({ async })(...args);
if (!isAsync) {
return global.emit('task:completed', result);
}
});
};
const setupDeprecations = function() {
const Grim = require('grim');
return Grim.on('updated', function() {
const deprecations = Grim.getDeprecations().map(deprecation =>
deprecation.serialize()
);
Grim.clearDeprecations();
return global.emit('task:deprecations', deprecations);
});
};
setupGlobals();
handleEvents();
setupDeprecations();
const handler = require(taskPath);