rusty-duration
v0.1.0
Published
A library for managing durations inspired on Rust's `std::time::Duration`
Downloads
2
Readme
rusty-duration
A rust-inspired library for working with durations in javascript/typescript.
Installation
You can use your favorite package manager to install rusty-duration via npmjs.org packages. For example:
$ npm install rusty-duration
Usage
The library exports a single class, Duration
, which can be used to represent a duration of time and a number of constants that can be used to convert between different units of time.
Since the methods are the same as in the rust standard library, you can refer to the rust documentation for information on how to use the class. Some methods might not be implemented (see Usage notes).
Usage notes
- In opposition to the rust standard library, the
Duration
class methods are incamelCase
, following the javascript convention. - Due to the lack of error handling in typescript, methods like
Duration::checked_*
andDuration::saturating_*
are not implemented. Instead, you do can usetry
andcatch
blocks and constants likeDuration.MAX
,Duration.MIN
orDuratION.ZERO
to achieve the same effect. - Most methods assume that both
seconds
andnanos
are valid numbers for that field. This means that manually changing them can lead to unexpected behaviour. If you want to change the fields, use methods likeDuration.add
orDuration.sub
instead to create a newDuration
.
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. If using bun, you can run tests with bun test
. Most of the work is automated by husky (with the pre-comit
hook) that you can install with bun run prepare
or npm run prepare
. Please make sure to update tests as appropriate.
This project uses prettier for code formatting and biomejs for linting. Both have their respective scripts in package.json
. For versioning, follow the Semantic Versioning guidelines.
Although optional, it is recommended to use gitmoji (https://gitmoji.carloscuesta.me/) or cm (https://github.com/Brian3647/cm) for commit messages.
License
This project is licensed under the MIT License - see the LICENSE file for details