diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2dc59bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,101 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+coverage/
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+build/
+
+# Dependency directories
+*node_modules/
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TypeScript output
+dist
+out
+
+# Azure Functions artifacts
+bin
+obj
+appsettings.json
+local.settings.json
+
+# VS Code
+.vscode
+.vscode-test
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..e25fb31
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,106 @@
+# github assets and repo files
+assets/
+index.js
+.gitignore
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+coverage/
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+build/
+
+# Dependency directories
+*node_modules/
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TypeScript output
+dist
+out
+
+# Azure Functions artifacts
+bin
+obj
+appsettings.json
+local.settings.json
+
+# VS Code
+.vscode
+.vscode-test
diff --git a/README.md b/README.md
index e769771..90c066d 100644
--- a/README.md
+++ b/README.md
@@ -11,18 +11,29 @@ If you want to have a metrics that will show you the current iteration number of
along with a cool cli progress bar, and even notify you with an alert sound when the job ends, then you are at the right place!
Here is a running demo of the cli progress bar below:
+
![running demo](./assets/style04-running-demo.gif)
+
# Features
The function progressBar() can be applied to any deterministic loop with finite and determined loop_len.
-It has the following parameters and features:
-- **currentStep**: the current iteration number in the loop. eg: i, index or count
-- **totalSteps**: total number of steps that the loop will run for
-- **startTime**: pass the start time of the loop. It should be a Date object. eg: 'new Date()'
-- **clearScreenEvery**: console to be cleared off every ith itheration of this value. default: 1
-- **barLength**: the length of the progress bar. default: 50
-- **style**: choose styles from 0 - 4
-- **notify**: set true for sound alert notofocation when complete. false to turn it off
+
+It has the following features:
+- you can change and modify the progress bar length
+- you can choose from the list of available cli ascii styles for the progress bar
+- you can resume the progress from the ith iteration (see examples)
+- you can set notify for the progress bar to alert and notify you with sound when the task is complete
+- you can choose to print out every iteration of the progress bar without clearing out the console screen
+- all time information in the progress bar matrices are converted and printed in human readable time
+
+Available matrices:
+ - iteration (current-step / total-step)
+ - number of iter / sec
+ - percentage completion
+ - time elapsed
+ - estimated time to completion
+ - estimated total time
+
Here are some of the ascii styles you can choose from:
@@ -42,9 +53,15 @@ Here are some of the ascii styles you can choose from:
![style 4](./assets/style04.png)
+# Installation
+```cmd
+npm i progress-bar-cli
+```
+
+
# Usage
```node
-const progressBar = require("./progress-bar");
+const progressBar = require("progress-bar-cli");
let loop_len = 1000;
let startTime = new Date();
@@ -65,7 +82,7 @@ If the job get's haulted in the middle or if the Job was multiple API calls in a
you can trace the last iteration of the running job from log files (if you are maintaining any), and resume the job from that ith iteration using the following code:
```node
-const progressBar = require("./progress-bar");
+const progressBar = require("progress-bar-cli");
let resumeFrom = 50;
let loop_len = 1000;
@@ -89,12 +106,27 @@ for (i = 0; i < loop_len; ++i) {
```
+# Function Parameters
+Parameter Name | Data Type | default value | description
+---------------|-----------|---------------|-------------
+currentStep | {Number} | *required | the current iteration number in the loop. eg: i, index or count
+totalSteps | {Number} | *required | total number of steps that the loop will run for.
+startTime | {Date} | *required | pass the start time of the loop. It should be a Date object. eg: 'new Date()'
+clearScreenEvery | {Number} | 1 | console to be cleared off every ith iteration of this value.
+barLength | {Number} | 50 | the length of the progress bar.
+style | {Number} | 4 | choose styles from 0 - 4.
+notify | {Boolean} | true | set true for sound alert notification when complete. false to turn it off
+**function return** | {Number} | NA | currentStep++
+
+**Please Note**: * are the three required parameters for the function
+
+
# Example
Below are some of the example codes where progressBar is used.
1. using for loop:
```node
-const progressBar = require("./progress-bar");
+const progressBar = require("progress-bar-cli");
// Main for testing the Progress Bar!
let loop_len = 100;
@@ -121,7 +153,7 @@ console.timeEnd("total system time");
2. using while loop
```node
-const progressBar = require("./progress-bar");
+const progressBar = require("progress-bar-cli");
// Main for testing the Progress Bar!
let loop_len = 100;
@@ -140,6 +172,10 @@ console.timeEnd("total system time");
```
-TODO: add examples for forEach, for/in, for/of, do/while and other types of loops in js and node
+
+# Planned features for upcoming version
+TODO: add examples in readme for forEach, for/in, for/of, do/while and other types of loops in js and node
TODO: add support for async loops in js and node
+TODO: add support for macOS
+TODO: make the cli ui even better