# An overview of my Javascript packages

This is a list of Javascript and Node.js packages that I have written and/or maintain. The list is incomplete and not exhaustive; it mainly contains the stuff that's likely to be useful to someone else, divided into rough categories. I'll be updating it over time to add more of my packages.

## High-level tools

- [bhttp](https://www.npmjs.com/package/bhttp): A HTTP client library that's easy to work with, both for streaming and non-streaming requests.
- [Validatem](https://validatem.cryto.net/): A universal validation library. Validates anything against any rules of any kind, with *useful* error messages; it's trivial to write custom validators (with equally good error reporting), and unlike other validation libraries you're not stuck with built-in validators that never *quite* match what you need.
- [Promistreams](https://wiki.slightly.tech/books/projects/page/what-are-promistreams): Universal streams for Javascript, both Node.js and browser, that can interoperate with any other streams system. Currently in beta.

## Asynchronous control flow

- [p-listen](https://www.npmjs.com/package/p-listen): Kind of like a one-off event listener, but as a Promise. Calling the listen method in one or more places gets you Promises that all resolve once notify is called from a different place.
- [push-buffer](https://www.npmjs.com/package/push-buffer): A multi-purpose abstraction for wrangling reads/requests for values, and push- or pull based value providers. It can be used to convert a push-based interface to a pull-based interface, to match requests to responses, to forcibly sequentialize requests, to mirror values to different readers with built-in buffering, and various other usecases depending on the exact configuration. If you're dealing with a complicated asynchronous series of values, this package will probably be useful to you in some way.