UNPKG

1.7 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3import chalk from 'chalk';
4import _ from 'underscore';
5
6import formatSize from './format-size.js';
7import parseArgv from './parse-argv.js';
8import run from './run.js';
9
10['SIGTERM', 'SIGINT'].forEach(sig => process.once(sig, () => process.exit()));
11
12const argv = parseArgv(process.argv);
13const { color, silent } = argv;
14const { blue, gray, green, magenta, red, yellow } = new chalk.Instance({
15 level: color ? 1 : 0
16});
17
18let built;
19let failed;
20let start;
21let totalSize;
22let unchanged;
23
24const log = silent ? _.noop : console.log.bind(console);
25
26const onError = er => {
27 console.error(red(er));
28 if (!argv.watchPaths) process.exit(1);
29};
30
31const onStart = () => {
32 log(gray('Building...'));
33 built = failed = totalSize = unchanged = 0;
34 start = _.now();
35};
36
37const 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
58const 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
73const options = _.extend(_.omit(argv, 'color', 'silent'), {
74 onEnd,
75 onError,
76 onStart,
77 onResult
78});
79
80run(options).catch(onError);