Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vitonsky/arrival-time
Simple and powerful progress time estimation (ETA) for JavaScript
https://github.com/vitonsky/arrival-time
backend cli estimate estimation eta frontend nodejs progress progress-bar
Last synced: 3 days ago
JSON representation
Simple and powerful progress time estimation (ETA) for JavaScript
- Host: GitHub
- URL: https://github.com/vitonsky/arrival-time
- Owner: vitonsky
- License: mit
- Created: 2024-08-03T21:38:50.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2024-09-09T15:16:45.000Z (2 months ago)
- Last Synced: 2024-09-09T18:49:35.476Z (2 months ago)
- Topics: backend, cli, estimate, estimation, eta, frontend, nodejs, progress, progress-bar
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/arrival-time
- Size: 1.3 MB
- Stars: 112
- Watchers: 2
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Simple and powerful time estimation (ETA).
Ideal to draw progress in CLI, web and mobile.
- Zero dependencies. Works everywhere - node, browsers, toaster, etc.
- ETA, speed measurements and average step time estimation![](./docs/eta.gif)
# Usage
Install with `npm i arrival-time` or `yarn add arrival-time`
```js
import { Estimation } from 'arrival-time';const estimation = new Estimation();
// Update progress to 25 of 100, and get measurements
const measure1 = estimation.update(25, 100);
console.log("Estimated time", measure1.estimate); // Estimated time 0.11754299999961404
console.log("Estimated speed", measure1.speed); // Estimated speed 638064.3679355322console.log(measure1);
// {
// timeDelta: 0.039180999999871347,
// averageTime: 0.0015672399999948539,
// progressLeft: 75,
// speed: 638064.3679355322,
// estimate: 0.11754299999961404
// }console.log(estimation.update(50, 100))
// {
// timeDelta: 12.311336999999867,
// averageTime: 0.24622673999999733,
// progressLeft: 50,
// speed: 4061.297322947178,
// estimate: 12.311336999999867
// }
```# API
### constructor
```ts
type Options = {
// Current progress (default 0)
progress?: number;
// Total progress (default 100)
total?: number;
// Time to start count from (default - current time)
startTime?: number;
// Optionally, you may provide your own clock implementation,
// that will return time as number
timeFetcher?: TimeFetcher;
};
```### update(progress: number, total?: number)
Update current progress, and optionally update total progress.
Returns updated object with measurements.
### measure(tick = 1000)
Return measurements object
```ts
type Measurements = {
/**
* Time delta between start time and current time
*/
timeDelta: number;
/**
* Average time per one progress step
*/
averageTime: number;
/**
* Left progress
*/
progressLeft: number;
/**
* Progression per `tick` (default 1000ms)
*/
speed: number;
/**
* Estimated time in ms until complete
*/
estimate: number;
};
```### estimate()
Return `estimate` value
### reset(time?: number)
Reset start time to provided or current time
### now()
Return current timestamp
# Related projects
- [humanize-duration](https://www.npmjs.com/package/humanize-duration) - converts time in ms to human readable time
- [log-update](https://www.npmjs.com/package/log-update) - print and redraw messages to stdout