https://github.com/mseal/clerx
💁⛑ Timely Suite of RxJS Operators and Observables
https://github.com/mseal/clerx
rate-limiter rate-limiting rxjs semaphore time
Last synced: 5 months ago
JSON representation
💁⛑ Timely Suite of RxJS Operators and Observables
- Host: GitHub
- URL: https://github.com/mseal/clerx
- Owner: MSeal
- License: bsd-3-clause
- Created: 2021-08-09T02:59:28.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2023-07-19T03:38:51.000Z (about 3 years ago)
- Last Synced: 2025-10-09T01:15:12.133Z (10 months ago)
- Topics: rate-limiter, rate-limiting, rxjs, semaphore, time
- Language: TypeScript
- Homepage:
- Size: 259 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# clerx 💁
A Timely Suite of RxJS Operators and Observables
## Install
```
npm install clerx
```
[Try out the example](https://stackblitz.com/edit/ugxk9f-c24puf?devtoolsheight=33&file=index.ts)
## Operators
As defined in the RxJS docs:
>[Operators](https://rxjs.dev/guide/operators) are the essential pieces that
> allow complex asynchronous code to be easily composed in a declarative manner.
> Operators are functions.
### `rateLimiter(count, slidingWindowTime)`
Defer sending events if `count` events occur within `slidingWindowTime` (milliseconds). Optionally, stop deferring if the wait time goes past `timeoutDue`. Returns an Observable.
#### Examples
**Only send two events within three seconds**
In this example, only 2 (`count`) events are sent during a 3 second
(3000 ms `slidingWindowTime`) sliding window. As displayed in the marble
diagram, additional events beyond 2 events in the sliding window will be
deferred.
```
abcdef--g---
> rateLimiter(2, 3000)
ab-cd-ef-g--
```

**Only one event within five seconds**
Similarly, this example limits events to one (`count`) event in a five second
(5000 ms `slidingWindowTime`) window. The marble diagram shows how the events are distributed over time.
```
-(abc)def
> rateLimiter(1, 5000)
-a----b----c----d----e----f----
```

## Observables
As defined in the RxJS docs:
>[Observables](https://rxjs.dev/guide/observable) are lazy Push collections of multiple values.
### `postDelay(event: T, dueTime): Observable`
Creates an observable that emits the `event` then waits `dueTime` (milliseconds) before
closing the observable, like so:
```
event--{ dueTime }--|
```
**Example: Delay 5 seconds after emitting an event**
```
> postDelay("a", 5000)
a----|
```

### `intervalBackoff(backoff: number): Observable`
Creates an Observable that emits sequential numbers in an exponentially increasing interval of time. `backoff` is the starting time interval, in milliseconds, and will exponentially increase with each event.
**Example: Exponentially increase delay starting at a one second interval**
The marble diagram illustrates the exponentially growing duration between events.
```
> intervalBackoff(1000)
01-2---3-------4---------------5
```
