1.2.1 • Published 3 years ago

@lifaon/rx-js-light-shortcuts v1.2.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

npm (scoped) npm NPM npm type definitions

🚝 rx-js-light-shortcuts

This library provides shortcuts for rx-js-light.

Example

const $inputA$ = let$$('abc');
const $inputB$ = let$$('def');
const $inputC$ = let$$();

const isInputAValid$ = map$$($inputA$.subscribe, (value) => (value.length >= 10));
const isInputBValid$ = map$$($inputB$.subscribe, (value) => (value.length <= 10));
const isInputCValid$ = const$$(true); // let's assume that inputC is always valid

const isFormValid$ = andM$$(isInputAValid$, isInputBValid$, isInputCValid$);

// EQUIVALENT
// const isFormValid$ = function$$((isInputCValid, isInputBValid, isInputCValid) => {
//   return isInputCValid && isInputBValid && isInputCValid;
// }, [isInputAValid$, isInputBValid$, isInputCValid$]);

const isFormValidText$ = map$$(isFormValid$, (valid) => `Form is ${ valid ? 'valid' : 'invalid' }`);

isFormValidText$(console.log.bind(console));

/*--*/

const createAndAppendElement = (tagName) => document.body.appendChild(document.createElement(tagName));

const inputA = createAndAppendElement('input');
inputA.oninput = () => $inputA$.emit(inputA.value);

const inputB = createAndAppendElement('input');
inputB.oninput = () => $inputB$.emit(inputB.value);

const inputC = createAndAppendElement('input');
inputC.oninput = () => $inputC$.emit(inputC.value);

const validityContainer = createAndAppendElement('div');
isFormValidText$((text) => {
  validityContainer.innerText = text;
});

📦 Installation

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

This library supports:

  • common-js (require): transpiled as es5, with .cjs extension, useful for old nodejs versions
  • module (esm import): transpiled as esnext, with .mjs extension (requires node resolution for external packages)

In a node environment the library works immediately (no extra tooling required), however, in a browser environment, you'll need to resolve external imports thought a bundler like snowpack, rollup, webpack, etc... or directly using skypack: https://cdn.skypack.dev/@lifaon/rx-js-light-shortcuts

📜 Naming convention

name$: SubscribeFunction

const value$ = of(5);

name$$: generator of SubscribeFunction

const value$$ = mapSubscribePipe(String);

name$$$: generator of generator of SubscribeFunction (includes all SubscribePipeFunction)

const map$$$ = mapSubscribePipe;

$name: EmitFunction

const $destination = (value: any) => console.log(value);

$$name: generator of EmitFunction

const $$value = mapEmitPipe(String);

$$$name: generator of generator of EmitFunction (includes all EmitPipeFunction)

const $$$map = mapEmitPipe;

$name$: Source

const $value$ = let$$(5);
1.2.1

3 years ago

1.2.0

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago