A super simple and lightweight event emitter.
Repository ✦ Package ✦ Releases ✦ Discussions
pnpm add @hypernym/emitter
- TypeScript friendly
- Fully tree-shakeable
- No dependencies
Package size:~321 B
minified,~226 B
gzip
Here are some examples of how to integrate Emitter from a CDN via a script tag.
Also, it is possible to download files manually and serve them accordingly.
<script type="module">
import { createEmitter } from 'https://unpkg.com/@hypernym/emitter/dist/index.min.mjs'
const emitter = createEmitter()
</script>
<script src="https://unpkg.com/@hypernym/emitter/dist/index.iife.js"></script>
<script>
const { createEmitter } = Emitter
const emitter = createEmitter()
</script>
<script src="https://unpkg.com/@hypernym/emitter/dist/index.umd.js"></script>
<script>
const { createEmitter } = Emitter
const emitter = createEmitter()
</script>
import { createEmitter } from '@hypernym/emitter'
const emitter = createEmitter()
emitter.on('event-id', (e) => console.log(e.x, e.y))
emitter.emit('event-id', { x: 0, y: 0 })
import { createEmitter, type Emitter } from '@hypernym/emitter'
type Events = {
'event-id': { x: number; y: number }
// ...
}
const emitter: Emitter<Events> = createEmitter<Events>()
emitter.on('event-id', (e) => console.log(e.x, e.y))
emitter.emit('event-id', { x: 0, y: 0 })
Registers an event listener for a specific event type.
Returns a cleanup function that removes the listener when called.
emitter.on<K>(id: K, callback: (event: Events[K]) => void): () => void
// Adds scroll listener
const off = emitter.on('scroll', ({ x, y }) => {
console.log(x, y)
})
// Removes the listener
off()
Removes event listeners.
emitter.off<K>(id?: K | undefined, callback?: ((event: Events[K]) => void) | undefined): void
// Removes all event listeners across all event types
emitter.off()
// Removes all click listeners
emitter.off('click')
// Custom scroll callback
const scrollCallback = ({ x, y }) => {
console.log(x, y)
}
// Adds specific scroll listener
emitter.on('scroll', scrollCallback)
// Removes specific scroll callback
emitter.off('scroll', scrollCallback)
Emits a specific event.
emitter.emit<K>(id: K, ...event: Events[K] extends undefined ? [event?: Events[K]] : [event: Events[K]]): void
// Emits scroll event with position data
emitter.emit('scroll', { x: window.scrollX, y: window.scrollY })
// Emits event without second parameter
emitter.emit('eventWithoutData')
Main events map.
Stores all registered events.
emitter.events
Checks if a specific event by id
exists in the map.
emitter.events.has(id: string | symbol)
Gets a specific event by id
from the map.
emitter.events.get(id: string | symbol)
Deletes a specific event by id
from the map.
emitter.events.delete(id: string | symbol)
Removes all events from the map.
emitter.events.clear()
Indicates the number of registered events in the map.
emitter.events.size
Feel free to ask questions or share new ideas.
Use the official discussions to get involved.
Developed in ðŸ‡ðŸ‡· Croatia, © Hypernym Studio.
Released under the MIT license.