
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Handy dandy persistent-state pub/sub with multi, wildcard, and single-property subscriptions. 400 bytes gzipped.
npm i evx --save
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
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 }
Subscribers return a function that will unsubscribe from that event:
const unsubscribe = on('foo', () => {})
emit('foo') // will fire
unsubscribe()
emit('foo') // will not fire
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' })
MIT License © Eric Bailey
FAQs
Handy dandy persistent-state pub/sub with multi & wildcard subscriptions.
The npm package evx receives a total of 2,671 weekly downloads. As such, evx popularity was classified as popular.
We found that evx demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.