You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					147 lines
				
				3.4 KiB
			
		
		
			
		
	
	
					147 lines
				
				3.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								Flexible ascii progress bar.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								$ npm install progress
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								First we create a `ProgressBar`, giving it a format string
							 | 
						||
| 
								 | 
							
								as well as the `total`, telling the progress bar when it will
							 | 
						||
| 
								 | 
							
								be considered complete. After that all we need to do is `tick()` appropriately.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var ProgressBar = require('progress');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var bar = new ProgressBar(':bar', { total: 10 });
							 | 
						||
| 
								 | 
							
								var timer = setInterval(function () {
							 | 
						||
| 
								 | 
							
								  bar.tick();
							 | 
						||
| 
								 | 
							
								  if (bar.complete) {
							 | 
						||
| 
								 | 
							
								    console.log('\ncomplete\n');
							 | 
						||
| 
								 | 
							
								    clearInterval(timer);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}, 100);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These are keys in the options object you can pass to the progress bar along with
							 | 
						||
| 
								 | 
							
								`total` as seen in the example above.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `curr` current completed index
							 | 
						||
| 
								 | 
							
								- `total` total number of ticks to complete
							 | 
						||
| 
								 | 
							
								- `width` the displayed width of the progress bar defaulting to total
							 | 
						||
| 
								 | 
							
								- `stream` the output stream defaulting to stderr
							 | 
						||
| 
								 | 
							
								- `head` head character defaulting to complete character
							 | 
						||
| 
								 | 
							
								- `complete` completion character defaulting to "="
							 | 
						||
| 
								 | 
							
								- `incomplete` incomplete character defaulting to "-"
							 | 
						||
| 
								 | 
							
								- `renderThrottle` minimum time between updates in milliseconds defaulting to 16
							 | 
						||
| 
								 | 
							
								- `clear` option to clear the bar on completion defaulting to false
							 | 
						||
| 
								 | 
							
								- `callback` optional function to call when the progress bar completes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Tokens
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These are tokens you can use in the format of your progress bar.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `:bar` the progress bar itself
							 | 
						||
| 
								 | 
							
								- `:current` current tick number
							 | 
						||
| 
								 | 
							
								- `:total` total ticks
							 | 
						||
| 
								 | 
							
								- `:elapsed` time elapsed in seconds
							 | 
						||
| 
								 | 
							
								- `:percent` completion percentage
							 | 
						||
| 
								 | 
							
								- `:eta` estimated completion time in seconds
							 | 
						||
| 
								 | 
							
								- `:rate` rate of ticks per second
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Custom Tokens
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can define custom tokens by adding a `{'name': value}` object parameter to your method (`tick()`, `update()`, etc.) calls.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var bar = new ProgressBar(':current: :token1 :token2', { total: 3 })
							 | 
						||
| 
								 | 
							
								bar.tick({
							 | 
						||
| 
								 | 
							
								  'token1': "Hello",
							 | 
						||
| 
								 | 
							
								  'token2': "World!\n"
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								bar.tick(2, {
							 | 
						||
| 
								 | 
							
								  'token1': "Goodbye",
							 | 
						||
| 
								 | 
							
								  'token2': "World!"
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								The above example would result in the output below.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								1: Hello World!
							 | 
						||
| 
								 | 
							
								3: Goodbye World!
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Examples
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Download
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In our download example each tick has a variable influence, so we pass the chunk
							 | 
						||
| 
								 | 
							
								length which adjusts the progress bar appropriately relative to the total
							 | 
						||
| 
								 | 
							
								length.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var ProgressBar = require('progress');
							 | 
						||
| 
								 | 
							
								var https = require('https');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var req = https.request({
							 | 
						||
| 
								 | 
							
								  host: 'download.github.com',
							 | 
						||
| 
								 | 
							
								  port: 443,
							 | 
						||
| 
								 | 
							
								  path: '/visionmedia-node-jscoverage-0d4608a.zip'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								req.on('response', function(res){
							 | 
						||
| 
								 | 
							
								  var len = parseInt(res.headers['content-length'], 10);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  console.log();
							 | 
						||
| 
								 | 
							
								  var bar = new ProgressBar('  downloading [:bar] :rate/bps :percent :etas', {
							 | 
						||
| 
								 | 
							
								    complete: '=',
							 | 
						||
| 
								 | 
							
								    incomplete: ' ',
							 | 
						||
| 
								 | 
							
								    width: 20,
							 | 
						||
| 
								 | 
							
								    total: len
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  res.on('data', function (chunk) {
							 | 
						||
| 
								 | 
							
								    bar.tick(chunk.length);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  res.on('end', function () {
							 | 
						||
| 
								 | 
							
								    console.log('\n');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								req.end();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The above example result in a progress bar like the one below.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								downloading [=====             ] 39/bps 29% 3.7s
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Interrupt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To display a message during progress bar execution, use `interrupt()`
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var ProgressBar = require('progress');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var bar = new ProgressBar(':bar :current/:total', { total: 10 });
							 | 
						||
| 
								 | 
							
								var timer = setInterval(function () {
							 | 
						||
| 
								 | 
							
								  bar.tick();
							 | 
						||
| 
								 | 
							
								  if (bar.complete) {
							 | 
						||
| 
								 | 
							
								    clearInterval(timer);
							 | 
						||
| 
								 | 
							
								  } else if (bar.curr === 5) {
							 | 
						||
| 
								 | 
							
								      bar.interrupt('this message appears above the progress bar\ncurrent progress is ' + bar.curr + '/' + bar.total);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}, 1000);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can see more examples in the `examples` folder.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MIT
							 |