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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env node
"use strict";
/**
* Set the title.
*/
process.title = 'node-pre-gyp';
/**
* Module dependencies.
*/
var node_pre_gyp = require('../');
var log = require('npmlog');
/**
* Process and execute the selected commands.
*/
var prog = new node_pre_gyp.Run();
var completed = false;
prog.parseArgv(process.argv);
if (prog.todo.length === 0) {
if (~process.argv.indexOf('-v') || ~process.argv.indexOf('--version')) {
console.log('v%s', prog.version);
return process.exit(0);
} else if (~process.argv.indexOf('-h') || ~process.argv.indexOf('--help')) {
console.log('%s', prog.usage());
return process.exit(0);
}
console.log('%s', prog.usage());
return process.exit(1);
}
// if --no-color is passed
if (prog.opts && prog.opts.hasOwnProperty('color') && !prog.opts.color) {
log.disableColor();
}
log.info('it worked if it ends with', 'ok');
log.verbose('cli', process.argv);
log.info('using', process.title + '@%s', prog.version);
log.info('using', 'node@%s | %s | %s', process.versions.node, process.platform, process.arch);
/**
* Change dir if -C/--directory was passed.
*/
var dir = prog.opts.directory;
if (dir) {
var fs = require('fs');
try {
var stat = fs.statSync(dir);
if (stat.isDirectory()) {
log.info('chdir', dir);
process.chdir(dir);
} else {
log.warn('chdir', dir + ' is not a directory');
}
} catch (e) {
if (e.code === 'ENOENT') {
log.warn('chdir', dir + ' is not a directory');
} else {
log.warn('chdir', 'error during chdir() "%s"', e.message);
}
}
}
function run () {
var command = prog.todo.shift();
if (!command) {
// done!
completed = true;
log.info('ok');
return;
}
prog.commands[command.name](command.args, function (err) {
if (err) {
log.error(command.name + ' error');
log.error('stack', err.stack);
errorMessage();
log.error('not ok');
console.log(err.message);
return process.exit(1);
}
var args_array = [].slice.call(arguments, 1);
if (args_array.length) {
console.log.apply(console, args_array);
}
// now run the next command in the queue
process.nextTick(run);
});
}
process.on('exit', function (code) {
if (!completed && !code) {
log.error('Completion callback never invoked!');
issueMessage();
process.exit(6);
}
});
process.on('uncaughtException', function (err) {
log.error('UNCAUGHT EXCEPTION');
log.error('stack', err.stack);
issueMessage();
process.exit(7);
});
function errorMessage () {
// copied from npm's lib/util/error-handler.js
var os = require('os');
log.error('System', os.type() + ' ' + os.release());
log.error('command', process.argv.map(JSON.stringify).join(' '));
log.error('cwd', process.cwd());
log.error('node -v', process.version);
log.error(process.title+' -v', 'v' + prog.package.version);
}
function issueMessage () {
errorMessage();
log.error('', [ 'This is a bug in `'+process.title+'`.',
'Try to update '+process.title+' and file an issue if it does not help:',
' <https://github.com/mapbox/'+process.title+'/issues>',
].join('\n'));
}
// start running the given commands!
run();