|
1 |
| -var path = require('path'); |
2 |
| -var childProcess = require('child_process'); |
3 |
| -var fork = childProcess.fork; |
4 |
| -var resolve = require('resolve').sync; |
5 |
| -var hook = require('./hook'); |
6 |
| -var ipc = require('./ipc'); |
7 |
| -var resolveMain = require('./resolveMain'); |
| 1 | +var path = require('path') |
| 2 | +var childProcess = require('child_process') |
| 3 | +var fork = childProcess.fork |
| 4 | +var resolve = require('resolve').sync |
| 5 | +var hook = require('./hook') |
| 6 | +var ipc = require('./ipc') |
| 7 | +var resolveMain = require('./resolveMain') |
8 | 8 |
|
9 | 9 | // Remove wrap.js from the argv array
|
10 |
| -process.argv.splice(1, 1); |
| 10 | +process.argv.splice(1, 1) |
11 | 11 |
|
12 | 12 | // Resolve the location of the main script relative to cwd
|
13 |
| -var main = resolveMain(process.argv[1]); |
| 13 | +var main = resolveMain(process.argv[1]) |
14 | 14 |
|
15 |
| -var cfg = require('./cfg')(main, {}); |
| 15 | +var cfg = require('./cfg')(main, {}) |
16 | 16 |
|
17 | 17 | // Set NODE_ENV to 'development' unless already set
|
18 |
| -if (!process.env.NODE_ENV) process.env.NODE_ENV = 'development'; |
| 18 | +if (!process.env.NODE_ENV) process.env.NODE_ENV = 'development' |
19 | 19 |
|
20 | 20 | if (process.env.NODE_DEV_PRELOAD) {
|
21 |
| - require(process.env.NODE_DEV_PRELOAD); |
| 21 | + require(process.env.NODE_DEV_PRELOAD) |
22 | 22 | }
|
23 | 23 |
|
24 | 24 | // Listen SIGTERM and exit unless there is another listener
|
25 | 25 | process.on('SIGTERM', function () {
|
26 |
| - if (process.listeners('SIGTERM').length === 1) process.exit(0); |
27 |
| -}); |
| 26 | + if (process.listeners('SIGTERM').length === 1) process.exit(0) |
| 27 | +}) |
28 | 28 |
|
29 | 29 | if (cfg.fork) {
|
30 | 30 | // Overwrite child_process.fork() so that we can hook into forked processes
|
31 | 31 | // too. We also need to relay messages about required files to the parent.
|
32 | 32 | childProcess.fork = function (modulePath, args, options) {
|
33 |
| - var child = fork(__filename, [modulePath].concat(args), options); |
34 |
| - ipc.relay(child); |
35 |
| - return child; |
36 |
| - }; |
| 33 | + var child = fork(__filename, [modulePath].concat(args), options) |
| 34 | + ipc.relay(child) |
| 35 | + return child |
| 36 | + } |
37 | 37 | }
|
38 | 38 |
|
39 | 39 | // Error handler that displays a notification and logs the stack to stderr:
|
40 |
| -var caught = false; |
| 40 | +var caught = false |
41 | 41 | process.on('uncaughtException', function (err) {
|
42 |
| - // Handle exepection only once |
43 |
| - if (caught) return; |
44 |
| - caught = true; |
| 42 | + // NB: err can be null |
| 43 | + // Handle exception only once |
| 44 | + if (caught) return |
| 45 | + caught = true |
45 | 46 | // If there's a custom uncaughtException handler expect it to terminate
|
46 | 47 | // the process.
|
47 |
| - var hasCustomHandler = process.listeners('uncaughtException').length > 1; |
48 |
| - var isTsError = err.message && /TypeScript/.test(err.message) |
49 |
| - if (!hasCustomHandler && !isTsError) { |
50 |
| - console.error(err.stack || err); |
51 |
| - } |
| 48 | + var hasCustomHandler = process.listeners('uncaughtException').length > 1 |
| 49 | + var isTsError = err && err.message && /TypeScript/.test(err.message) |
| 50 | + if (!hasCustomHandler && !isTsError) { |
| 51 | + console.error((err && err.stack) || err) |
| 52 | + } |
52 | 53 | ipc.send({
|
53 |
| - error: isTsError ? '' : err.name || 'Error', |
54 |
| - message: err.message, |
55 |
| - willTerminate: hasCustomHandler |
56 |
| - }); |
57 |
| -}); |
| 54 | + error: isTsError ? '' : err && err.name || 'Error', |
| 55 | + message: err ? err.message : '', |
| 56 | + willTerminate: hasCustomHandler, |
| 57 | + }) |
| 58 | +}) |
58 | 59 |
|
59 | 60 | // Hook into require() and notify the parent process about required files
|
60 | 61 | hook(cfg, module, function (file) {
|
61 |
| - ipc.send({ required: file }); |
62 |
| -}); |
| 62 | + ipc.send({ required: file }) |
| 63 | +}) |
63 | 64 |
|
64 | 65 | // Check if a module is registered for this extension
|
65 |
| -var ext = path.extname(main).slice(1); |
66 |
| -var mod = cfg.extensions[ext]; |
| 66 | +var ext = path.extname(main).slice(1) |
| 67 | +var mod = cfg.extensions[ext] |
67 | 68 |
|
68 | 69 | // Support extensions where 'require' returns a function that accepts options
|
69 | 70 | if (typeof mod == 'object' && mod.name) {
|
70 |
| - var fn = require(resolve(mod.name, { basedir: path.dirname(main) })); |
| 71 | + var fn = require(resolve(mod.name, { basedir: path.dirname(main) })) |
71 | 72 | if (typeof fn == 'function' && mod.options) {
|
72 | 73 | // require returned a function, call it with options
|
73 |
| - fn(mod.options); |
| 74 | + fn(mod.options) |
74 | 75 | }
|
75 | 76 | } else if (typeof mod == 'string') {
|
76 |
| - require(resolve(mod, { basedir: path.dirname(main) })); |
| 77 | + require(resolve(mod, { basedir: path.dirname(main) })) |
77 | 78 | }
|
78 | 79 |
|
79 | 80 | // Execute the wrapped script
|
80 |
| -require(main); |
| 81 | +require(main) |
0 commit comments