New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

evx

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

evx

Handy dandy persistent-state pub/sub with multi & wildcard subscriptions.

latest
Source
npmnpm
Version
1.1.1
Version published
Weekly downloads
3K
-0.03%
Maintainers
1
Weekly downloads
 
Created
Source

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

Keywords

keystroke

FAQs

Package last updated on 11 Jun 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts