forked from npkgz/cli-progress
/
options.js
104 lines (73 loc) · 3.72 KB
/
options.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// utility to merge defaults
function mergeOption(v, defaultValue){
if (typeof v === 'undefined' || v === null){
return defaultValue;
}else{
return v;
}
}
module.exports = {
// set global options
parse: function parse(rawOptions, preset){
// options storage
const options = {};
// merge preset
const opt = Object.assign({}, preset, rawOptions);
// the max update rate in fps (redraw will only triggered on value change)
options.throttleTime = 1000 / (mergeOption(opt.fps, 10));
// the output stream to write on
options.stream = mergeOption(opt.stream, process.stderr);
// external terminal provided ?
options.terminal = mergeOption(opt.terminal, null);
// clear on finish ?
options.clearOnComplete = mergeOption(opt.clearOnComplete, false);
// stop on finish ?
options.stopOnComplete = mergeOption(opt.stopOnComplete, false);
// size of the progressbar in chars
options.barsize = mergeOption(opt.barsize, 40);
// position of the progress bar - 'left' (default), 'right' or 'center'
options.align = mergeOption(opt.align, 'left');
// hide the cursor ?
options.hideCursor = mergeOption(opt.hideCursor, false);
// disable linewrapping ?
options.linewrap = mergeOption(opt.linewrap, false);
options.barCompleteChar = mergeOption(opt.barCompleteChar, '=');
options.barIncompleteChar = mergeOption(opt.barIncompleteChar, '-');
// pre-render bar strings (performance)
options.barCompleteString = options.barCompleteChar.repeat(options.barsize);
options.barIncompleteString = options.barIncompleteChar.repeat(options.barsize);
// glue sequence (control chars) between bar elements ?
options.barGlue = mergeOption(opt.barGlue, '');
// the bar format
options.format = mergeOption(opt.format, 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}');
// external time-format provided ?
options.formatTime = mergeOption(opt.formatTime, null);
// external value-format provided ?
options.formatValue = mergeOption(opt.formatValue, null);
// external bar-format provided ?
options.formatBar = mergeOption(opt.formatBar, null);
// the number of results to average ETA over
options.etaBufferLength = mergeOption(opt.etaBuffer, 10);
// automatic eta updates based on fps
options.etaAsynchronousUpdate = mergeOption(opt.etaAsynchronousUpdate, false);
// progress calculation relative to start value ? default start at 0
options.progressCalculationRelative = mergeOption(opt.progressCalculationRelative, false);
// allow synchronous updates ?
options.synchronousUpdate = mergeOption(opt.synchronousUpdate, true);
// notty mode
options.noTTYOutput = mergeOption(opt.noTTYOutput, false);
// schedule - 2s
options.notTTYSchedule = mergeOption(opt.notTTYSchedule, 2000);
// emptyOnZero - false
options.emptyOnZero = mergeOption(opt.emptyOnZero, false);
// force bar redraw even if progress did not change
options.forceRedraw = mergeOption(opt.forceRedraw, false);
// automated padding to fixed width ?
options.autopadding = mergeOption(opt.autopadding, false);
// autopadding character - empty in case autopadding is disabled
options.autopaddingChar = options.autopadding ? mergeOption(opt.autopaddingChar, ' ') : '';
// stop bar on SIGINT/SIGTERM to restore cursor settings ?
options.gracefulExit = mergeOption(opt.gracefulExit, false);
return options;
}
};