1 | #!/usr/bin/env node
|
2 |
|
3 | import chalk from 'chalk';
|
4 | import _ from 'underscore';
|
5 |
|
6 | import formatSize from './format-size.js';
|
7 | import parseArgv from './parse-argv.js';
|
8 | import run from './run.js';
|
9 |
|
10 | ['SIGTERM', 'SIGINT'].forEach(sig => process.once(sig, () => process.exit()));
|
11 |
|
12 | const argv = parseArgv(process.argv);
|
13 | const { color, silent } = argv;
|
14 | const { blue, gray, green, magenta, red, yellow } = new chalk.Instance({
|
15 | level: color ? 1 : 0
|
16 | });
|
17 |
|
18 | let built;
|
19 | let failed;
|
20 | let start;
|
21 | let totalSize;
|
22 | let unchanged;
|
23 |
|
24 | const log = silent ? _.noop : console.log.bind(console);
|
25 |
|
26 | const onError = er => {
|
27 | console.error(red(er));
|
28 | if (!argv.watchPaths) process.exit(1);
|
29 | };
|
30 |
|
31 | const onStart = () => {
|
32 | log(gray('Building...'));
|
33 | built = failed = totalSize = unchanged = 0;
|
34 | start = _.now();
|
35 | };
|
36 |
|
37 | const onResult = ({ didChange, error, size, sourcePath, targetPath }) => {
|
38 | if (error) {
|
39 | ++failed;
|
40 | return console.error(red(`Failed to build ${sourcePath}\n${error}`));
|
41 | }
|
42 |
|
43 | totalSize += size;
|
44 |
|
45 | if (!didChange) return ++unchanged;
|
46 |
|
47 | ++built;
|
48 | log(
|
49 | [
|
50 | magenta(`${formatSize(size)}`),
|
51 | green(sourcePath),
|
52 | gray('->'),
|
53 | blue(targetPath)
|
54 | ].join(' ')
|
55 | );
|
56 | };
|
57 |
|
58 | const onEnd = () => {
|
59 | log(
|
60 | [
|
61 | magenta(`${formatSize(totalSize)}`),
|
62 | green(`${built} built`),
|
63 | blue(`${unchanged} unchanged`),
|
64 | red(`${failed} failed`),
|
65 | yellow(`${((_.now() - start) / 1000).toFixed(1)}s`)
|
66 | ].join(gray(' | '))
|
67 | );
|
68 | if (!argv.watchPaths && failed) {
|
69 | onError(new Error(`${failed} build${failed > 1 ? 's' : ''} failed`));
|
70 | }
|
71 | };
|
72 |
|
73 | const options = _.extend(_.omit(argv, 'color', 'silent'), {
|
74 | onEnd,
|
75 | onError,
|
76 | onStart,
|
77 | onResult
|
78 | });
|
79 |
|
80 | run(options).catch(onError);
|