Skip to content
This repository has been archived by the owner on Dec 20, 2022. It is now read-only.

lifaon74/rx-js-light

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

29 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

npm (scoped) npm NPM npm type definitions

⚑ rx-js-light

rx-js-light is simply the fastest and smallest javascript library for Reactive Programming, providing different tools to generate, consume, and pipe Observables and Observers.

If Reactive Programming does not tell you much or is a new concept to you, you may take a look at this tutorial. In a few words, if you deal frequently with async programming like events, timeouts, promises or streams (ex: front-end development), then rx-js-light is the perfect candidate for you.

Example: emulate double click

const subscribe = pipe$$(fromEventTarget(window, 'click'), [
  bufferTime$$$(500),
  filter$$$((events: PointerEvent[]) => events.length === 2),
  map$$$((events: PointerEvent[]) => events[events.length - 1]),
]);

subscribe((event: PointerEvent) => {
  console.log('double click', event);
});

Click here to see the live demo

Give it a try, and you'll love it !

πŸ“– Table of content

πŸ“¦ Installation

yarn add @lifaon/rx-js-light
# or
npm install @lifaon/rx-js-light --save

Click here to read the installation manual

πŸ“• Documentation

Most of public functions or interfaces have their own documentation into a .md file in their respective directories.

🧲️ Pick the right function

I want to:

create an Observable from

without notifications

with notifications

convert an Observable to

without notifications

with notifications

create an ObservablePipe which

without notifications

with notifications

emit a value myself => create a Source which emits values to

create an io stream

others

πŸ”₯: most important functions

Can't find a function that suits your needs ? Open a discussion, or create your own and share it !

Differences with RxJS:

  • no classes: this choice allows blazing fast performances and very small bundle size. Indeed, creating a class with the new keyword is slow, and method names can't be mangled (minimized), where function calls are really well optimized by javascript engines. However, it has a minor cost: chaining operators or method calls are done through functions, which is a little less elegant (in terms of code readability).

  • no next, complete and error: instead this lib uses notifications. In reality, not all Observables require to emit a final state. For example, the RxJS interval never reaches a complete state. It just sends numbers. Moreover, some Observables may want to emit more than this 3 events: we may imagine an XHR Observable which emits an upload-progress and download-progress events.

  • some concepts / operators / methods may have a different behaviour or name. Take care to read the documentation before any hasty use.