1.0.0 • Published 6 years ago

@spirinvladimir/signal v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
6 years ago

:satellite: Signal

Build Status Coverage Status JavaScript Style Guide

micro reactive framework

  • only 3 functions makes you development easy
  • JavaScript Style Guide

Install

npm install spirinvladimir/signal

API

.signal(emitter)

var {signal} = require('signal')
signal(emit => [1 ,2 ,3].forEach(_ => setTimeout(emit, 0, _))).onValue(console.log)
/*
1
2
3
*/

.combine(signals, reducer)

var {signal, combine} = require('signal')
combine(
    [
        signal(emit => [1, 3].forEach(_ => setTimeout(emit, _ * 10, _))),
        signal(emit => [2, 4].forEach(_ => setTimeout(emit, _ * 10, _))),
    ],
    (a, b) => Math.max(a || -Infinity, b || -Infinity)
).onValue(console.log)
/*
1
2
3
4
*/

.map(next)

var {signal, map} = require('signal')
map(
    signal(emit => [1, 2, 3].forEach(_ => setTimeout(emit, 0, _))),
    (value, emit) => emit(value + 1)
).onValue(console.log)
/*
2
3
4
/*

Example UI calculator with operation +

var {signal, combine, map} = require('signal')
var a = document.getElementById('a')
var b = document.getElementById('b')
var c = document.getElementById('c')

map(
    combine(
        [
            signal(emit => a.onchange = () => emit(a.value)),
            signal(emit => b.onchange = () => emit(b.value))
        ],
        (a, b) => [a, b]
    ),
    ([a, b], emit) => a !== undefined && b !== undefined && emit(a + b)
).onValue(value => c.value = value)