1.2.1 • Published 3 years ago
@lifaon/rx-js-light-shortcuts v1.2.1
🚝 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);