No Padding Module

    evx

    1.1.1 • Public • Published

    evx

    Handy dandy persistent-state pub/sub with multi, wildcard, and single-property subscriptions. 400 bytes gzipped.

    Install

    npm i evx --save

    Usage

    evx is just a simple pub/sub bus:

    import { on, emit } from 'evx'
     
    on('foo', () => console.log('foo was emitted!'))
     
    emit('foo')

    But it also allows you to subscribe to multiple events at once:

    // fires once
    on(['foo', 'bar'], () => console.log('foo or bar was emitted!'))
     
    emit('bar')

    And emit multiple events at once:

    // fires twice
    on(['foo', 'bar'], () => console.log('foo or bar was emitted!'))
     
    emit([ 'bar', 'foo' ])

    It has wildcard support:

    on('*', () => console.log('an event was emitted!'))
     
    emit('baz')

    Additionally, you can subscribe to specific property values by passing the property key as the event name:

    on('someProperty', state => {}) // someProperty updated
     
    emit('foo', { someProperty: true }) // will fire
    hydrate({ someProperty: true })() // will also fire

    State

    Additionally, it has a concept of state. In evx state is always an object. Any object passed to emit will be shallowly merged with global state:

    emit('foo', { value: true })

    And all subscribers are passed the full state object:

    on('foo', state => console.log(state.value)) // true

    To emit transient data that does not get merged into the global state, pass an object as the third argument to emit:

    emit('event', null, { message: 'Hello' })

    And access via the second argument subscribers:

    on('event', (state, data) => console.log(data.message)) // Hello

    If you need to add some state but don't want to emit any events, use hydrate:

    import { hydrate } from 'evx'
     
    hydrate({ baz: true })

    But for convenience, hydrate also returns a function that, when called, will emit a '*' event:

    hydrate({ baz: true })()

    The current read-only state is accessible as well:

    import { hydrate, getState } from 'evx'
     
    hydrate({ baz: true })
     
    getState() // { baz: true }

    Cleanup

    Subscribers return a function that will unsubscribe from that event:

    const unsubscribe = on('foo', () => {})
     
    emit('foo') // will fire
     
    unsubscribe()
     
    emit('foo') // will not fire

    Multiple instances

    If you need to create a discrete instance of evx, use create:

    import { create } from 'evx'
     
    const bus = create()

    All methods above are now accessible on bus.

    You can also pass an optional initial state object to create:

    const bus = create({ foo: 'hello' })

    License

    MIT License © Eric Bailey

    Install

    npm i evx

    DownloadsWeekly Downloads

    476

    Version

    1.1.1

    License

    MIT

    Unpacked Size

    15 kB

    Total Files

    8

    Last publish

    Collaborators

    • estrattonbailey