### Install EventEmitter3 Source: https://github.com/primus/eventemitter3/blob/master/README.md Install the eventemitter3 package using npm. ```bash $ npm install --save eventemitter3 ``` -------------------------------- ### Require EventEmitter3 Source: https://github.com/primus/eventemitter3/blob/master/README.md Require the eventemitter3 module after installation to create EventEmitter instances. ```javascript var EventEmitter = require('eventemitter3'); ``` -------------------------------- ### Get Listeners with listeners() Source: https://context7.com/primus/eventemitter3/llms.txt Returns an array of listener functions registered for the given event. Returns an empty array if no listeners exist. The returned array is a copy, so modifications do not affect the emitter. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); function handleClick() { console.log('Clicked!'); } function handleClickAlt() { console.log('Also clicked!'); } // No listeners initially console.log('Listeners (empty):', emitter.listeners('click')); // Output: [] emitter.on('click', handleClick); emitter.on('click', handleClickAlt); const clickListeners = emitter.listeners('click'); console.log('Number of click listeners:', clickListeners.length); // Output: 2 console.log('First listener:', clickListeners[0] === handleClick); // Output: true console.log('Second listener:', clickListeners[1] === handleClickAlt); // Output: true // The returned array is a copy, modifications don't affect the emitter clickListeners.length = 0; console.log('Actual listeners still exist:', emitter.listenerCount('click')); // Output: 2 ``` -------------------------------- ### Include EventEmitter3 via CDN Source: https://context7.com/primus/eventemitter3/llms.txt Load the library directly in the browser using a script tag. ```html ``` -------------------------------- ### Extend EventEmitter3 using inheritance patterns Source: https://context7.com/primus/eventemitter3/llms.txt Shows how to create custom event-emitting classes using both ES6 class syntax and the legacy Node.js util.inherits pattern. ```javascript const EventEmitter = require('eventemitter3'); const util = require('util'); // ES6 Class inheritance class MyEmitter extends EventEmitter { constructor() { super(); this.value = 0; } increment() { this.value++; this.emit('changed', this.value); } } const counter = new MyEmitter(); counter.on('changed', (val) => console.log('Value changed to:', val)); counter.increment(); // Output: Value changed to: 1 counter.increment(); // Output: Value changed to: 2 // Node.js util.inherits pattern function LegacyEmitter() { EventEmitter.call(this); this.status = 'ready'; } util.inherits(LegacyEmitter, EventEmitter); LegacyEmitter.prototype.setStatus = function(status) { this.status = status; this.emit('status', status); }; const legacy = new LegacyEmitter(); legacy.on('status', (s) => console.log('Status:', s)); legacy.setStatus('active'); // Output: Status: active ``` -------------------------------- ### Retrieve registered event names with eventNames() Source: https://context7.com/primus/eventemitter3/llms.txt Demonstrates how to list all registered event names, including support for string and Symbol keys. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); console.log('Initial events:', emitter.eventNames()); // Output: [] emitter.on('message', () => {}); emitter.on('error', () => {}); emitter.on('close', () => {}); console.log('Events:', emitter.eventNames()); // Output: ['message', 'error', 'close'] // Works with ES6 Symbols const privateEvent = Symbol('private'); emitter.on(privateEvent, () => {}); const events = emitter.eventNames(); console.log('Includes symbol:', events.includes(privateEvent)); // Output: true // Clean up and verify emitter.removeAllListeners('message'); console.log('After removal:', emitter.eventNames()); // Output: ['error', 'close', Symbol(private)] ``` -------------------------------- ### Inheritance Pattern Source: https://context7.com/primus/eventemitter3/llms.txt Demonstrates how to extend the EventEmitter3 class to create custom event-emitting objects using ES6 classes or Node.js util.inherits. ```APIDOC ## Inheritance Pattern ### Description EventEmitter3 can be extended using class inheritance or Node.js util.inherits for creating custom event-emitting classes. ``` -------------------------------- ### TypeScript Usage Source: https://context7.com/primus/eventemitter3/llms.txt Provides guidance on using EventEmitter3 with TypeScript, including defining event interfaces for type-safe listeners and emission. ```APIDOC ## TypeScript Usage ### Description EventEmitter3 includes TypeScript definitions with full generic support for type-safe event handling. ``` -------------------------------- ### Emit events with emit() Source: https://context7.com/primus/eventemitter3/llms.txt Triggers all listeners registered for a specific event, passing provided arguments to each. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); emitter.on('data', function(a, b, c) { console.log('Received:', a, b, c); }); // Emit with multiple arguments const hadListeners = emitter.emit('data', 'foo', 42, { key: 'value' }); console.log('Had listeners:', hadListeners); // Output: // Received: foo 42 { key: 'value' } // Had listeners: true // Emit event with no listeners const result = emitter.emit('unknown-event', 'test'); console.log('Had listeners:', result); // Output: Had listeners: false // Multiple listeners receive the same arguments emitter.on('message', (text) => console.log('Handler 1:', text)); emitter.on('message', (text) => console.log('Handler 2:', text)); emitter.emit('message', 'Hello!'); // Output: // Handler 1: Hello! // Handler 2: Hello! ``` -------------------------------- ### Count Listeners with listenerCount() Source: https://context7.com/primus/eventemitter3/llms.txt Returns the number of listeners registered for a given event. This count decreases when a `once` listener is emitted. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); console.log('Initial count:', emitter.listenerCount('data')); // Output: 0 emitter.on('data', () => {}); console.log('After one listener:', emitter.listenerCount('data')); // Output: 1 emitter.on('data', () => {}); emitter.on('data', () => {}); console.log('After three listeners:', emitter.listenerCount('data')); // Output: 3 emitter.once('data', () => {}); console.log('After once listener:', emitter.listenerCount('data')); // Output: 4 emitter.emit('data'); console.log('After emit (once removed):', emitter.listenerCount('data')); // Output: 3 ``` -------------------------------- ### listeners Source: https://context7.com/primus/eventemitter3/llms.txt Returns an array of listener functions registered for the given event. Returns an empty array if no listeners exist. ```APIDOC ## listeners(event) ### Description Returns an array of listener functions registered for the given event. Returns an empty array if no listeners exist. ### Method `listeners` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); function handleClick() { console.log('Clicked!'); } emitter.on('click', handleClick); const clickListeners = emitter.listeners('click'); console.log(clickListeners.length); // Output: 1 console.log(clickListeners[0] === handleClick); // Output: true ``` ### Response #### Success Response (200) - **listeners** (Array) - An array of listener functions. #### Response Example ```json { "listeners": [ "function handleClick() { console.log('Clicked!'); }" ] } ``` ``` -------------------------------- ### EventEmitter3 - emit Source: https://context7.com/primus/eventemitter3/llms.txt Calls each listener registered for the event with the supplied arguments. Returns `true` if the event had listeners, `false` otherwise. ```APIDOC ## emit(event, ...args) ### Description Calls each listener registered for the event with the supplied arguments. Returns `true` if the event had listeners, `false` otherwise. ### Method POST ### Endpoint /eventemitter3/emit ### Parameters #### Path Parameters - None #### Query Parameters - None #### Request Body - **event** (string) - Required - The name of the event to emit. - **args** (array) - Optional - An array of arguments to pass to the listeners. ### Request Example ```json { "event": "data", "args": ["foo", 42, {"key": "value"}] } ``` ### Response #### Success Response (200) - **hadListeners** (boolean) - `true` if the event had listeners, `false` otherwise. #### Response Example ```json { "hadListeners": true } ``` ``` -------------------------------- ### Register event listeners with on() Source: https://context7.com/primus/eventemitter3/llms.txt Adds a persistent listener to an event, optionally binding a custom context to avoid fn.bind() overhead. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); // Basic listener emitter.on('message', function(data) { console.log('Received:', data); }); // Listener with custom context const handler = { name: 'MessageHandler', process: function(data) { console.log(`${this.name} received: ${data}`); } }; emitter.on('message', handler.process, handler); emitter.emit('message', 'Hello World'); // Output: // Received: Hello World // MessageHandler received: Hello World // Method chaining emitter .on('error', (err) => console.error('Error:', err.message)) .on('data', (chunk) => console.log('Data:', chunk)); ``` -------------------------------- ### eventNames() Source: https://context7.com/primus/eventemitter3/llms.txt Retrieves an array of all event names currently registered with the emitter, including string and Symbol identifiers. ```APIDOC ## eventNames() ### Description Returns an array of event names for which the emitter has registered listeners. Supports both string and Symbol event names. ### Response - **Returns** (Array) - An array containing all event names that have active listeners. ``` -------------------------------- ### Register one-time listeners with once() Source: https://context7.com/primus/eventemitter3/llms.txt Adds a listener that is automatically removed after the first time the event is emitted. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); let callCount = 0; emitter.once('connect', function() { callCount++; console.log('Connected! Call count:', callCount); }); emitter.emit('connect'); // Output: Connected! Call count: 1 emitter.emit('connect'); // No output - listener was removed emitter.emit('connect'); // No output console.log('Total calls:', callCount); // Output: Total calls: 1 console.log('Listeners remaining:', emitter.listenerCount('connect')); // Output: Listeners remaining: 0 // With context const session = { id: 'abc123' }; emitter.once('authenticated', function(user) { console.log(`Session ${this.id} authenticated for ${user}`); }, session); emitter.emit('authenticated', 'john@example.com'); // Output: Session abc123 authenticated for john@example.com ``` -------------------------------- ### listenerCount Source: https://context7.com/primus/eventemitter3/llms.txt Returns the number of listeners registered for a given event. ```APIDOC ## listenerCount(event) ### Description Returns the number of listeners registered for a given event. ### Method `listenerCount` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); emitter.on('data', () => {}); emitter.on('data', () => {}); console.log(emitter.listenerCount('data')); // Output: 2 emitter.once('data', () => {}); console.log(emitter.listenerCount('data')); // Output: 3 ``` ### Response #### Success Response (200) - **count** (Number) - The number of listeners for the specified event. #### Response Example ```json { "count": 3 } ``` ``` -------------------------------- ### Contextual Emits with EventEmitter3 Source: https://github.com/primus/eventemitter3/blob/master/README.md Use the extended `on`, `once`, and `removeListener` methods to specify a custom context (this value) for emitted events, avoiding the need for `fn.bind`. ```javascript var EE = new EventEmitter() , context = { foo: 'bar' }; function emitted() { console.log(this === context); // true } EE.once('event-name', emitted, context); EE.on('another-event', emitted, context); EE.removeListener('another-event', emitted, context); ``` -------------------------------- ### EventEmitter3 - once Source: https://context7.com/primus/eventemitter3/llms.txt Adds a one-time listener function that will be automatically removed after being called once. Useful for events that should only trigger a single response. ```APIDOC ## once(event, fn, context) ### Description Adds a one-time listener function that will be automatically removed after being called once. This is useful for events that should only trigger a single response. ### Method POST ### Endpoint /eventemitter3/once ### Parameters #### Path Parameters - None #### Query Parameters - None #### Request Body - **event** (string) - Required - The name of the event to listen for. - **fn** (function) - Required - The listener function to execute once. - **context** (object) - Optional - The context (`this` value) for the listener function. ### Request Example ```json { "event": "connect", "fn": "function() { console.log('Connected!'); }", "context": "{ id: 'abc123' }" } ``` ### Response #### Success Response (200) - **status** (string) - Indicates the operation was successful. #### Response Example ```json { "status": "One-time listener added successfully" } ``` ``` -------------------------------- ### Implement type-safe events with TypeScript Source: https://context7.com/primus/eventemitter3/llms.txt Utilizes generic interfaces to enforce type safety for event names and listener arguments. ```typescript import EventEmitter from 'eventemitter3'; // Define typed events interface MyEvents { 'user:login': (userId: string, timestamp: Date) => void; 'user:logout': (userId: string) => void; 'error': (error: Error) => void; } const emitter = new EventEmitter(); // Type-safe event listeners emitter.on('user:login', (userId, timestamp) => { // userId is typed as string, timestamp as Date console.log(`User ${userId} logged in at ${timestamp.toISOString()}`); }); emitter.on('error', (error) => { // error is typed as Error console.error('Error occurred:', error.message); }); // Type-safe emit emitter.emit('user:login', 'user123', new Date()); emitter.emit('error', new Error('Connection failed')); // Compilation error examples (uncomment to see TypeScript errors): // emitter.emit('user:login', 123); // Error: userId must be string // emitter.emit('unknown'); // Error: 'unknown' is not a valid event ``` -------------------------------- ### EventEmitter3 - on Source: https://context7.com/primus/eventemitter3/llms.txt Adds a listener function to an event. The listener will be called every time the event is emitted. An optional context parameter sets the `this` value for the listener function. ```APIDOC ## on(event, fn, context) ### Description Adds a listener function to an event. The listener will be called every time the event is emitted. An optional context parameter sets the `this` value for the listener function, avoiding the overhead of `fn.bind()`. ### Method POST ### Endpoint /eventemitter3/on ### Parameters #### Path Parameters - None #### Query Parameters - None #### Request Body - **event** (string) - Required - The name of the event to listen for. - **fn** (function) - Required - The listener function to execute. - **context** (object) - Optional - The context (`this` value) for the listener function. ### Request Example ```json { "event": "message", "fn": "function(data) { console.log('Received:', data); }", "context": "{ name: 'MessageHandler', process: function(data) { console.log(`${this.name} received: ${data}`); } }" } ``` ### Response #### Success Response (200) - **status** (string) - Indicates the operation was successful. #### Response Example ```json { "status": "Listener added successfully" } ``` ``` -------------------------------- ### removeAllListeners Source: https://context7.com/primus/eventemitter3/llms.txt Removes all listeners for the specified event, or all listeners entirely if no event is specified. ```APIDOC ## removeAllListeners(event) ### Description Removes all listeners for the specified event, or all listeners entirely if no event is specified. ### Method `removeAllListeners` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); emitter.on('foo', () => console.log('foo handler')); emitter.on('bar', () => console.log('bar handler')); emitter.removeAllListeners('foo'); // Removes all listeners for 'foo' emitter.removeAllListeners(); // Removes all listeners for all events ``` ### Response #### Success Response (200) N/A (This is a method call, not an HTTP endpoint) #### Response Example N/A ``` -------------------------------- ### Remove All Listeners with removeAllListeners Source: https://context7.com/primus/eventemitter3/llms.txt Removes all listeners for the specified event, or all listeners entirely if no event is specified. Returns `false` if no listeners were emitted. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); emitter.on('foo', () => console.log('foo handler')); emitter.on('foo', () => console.log('foo handler 2')); emitter.on('bar', () => console.log('bar handler')); emitter.on('baz', () => console.log('baz handler')); console.log('Events:', emitter.eventNames()); // Output: ['foo', 'bar', 'baz'] // Remove all listeners for 'foo' emitter.removeAllListeners('foo'); console.log('After removing foo:', emitter.eventNames()); // Output: ['bar', 'baz'] // Remove ALL listeners emitter.removeAllListeners(); console.log('After removing all:', emitter.eventNames()); // Output: [] // Verify emit returns false console.log('emit foo:', emitter.emit('foo')); // Output: false console.log('emit bar:', emitter.emit('bar')); // Output: false ``` -------------------------------- ### removeListener / off Source: https://context7.com/primus/eventemitter3/llms.txt Removes listener(s) for a given event. Can filter by function, context, and whether the listener was added with `once()`. ```APIDOC ## removeListener(event, fn, context, once) / off() ### Description Removes listener(s) for a given event. If no function is specified, all listeners for that event are removed. Can filter by context and whether the listener was added with `once()`. ### Method `removeListener` or `off` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); function onData(data) { console.log('Data:', data); } emitter.on('data', onData); emitter.removeListener('data', onData); emitter.on('message', () => console.log('A')); emitter.on('message', () => console.log('B')); emitter.removeListener('message'); // Removes all listeners for 'message' const ctx1 = { name: 'ctx1' }; function handler() { console.log('Handler called with context:', this.name); } emitter.on('event', handler, ctx1); emitter.removeListener('event', handler, ctx1); ``` ### Response #### Success Response (200) N/A (This is a method call, not an HTTP endpoint) #### Response Example N/A ``` -------------------------------- ### Remove Specific Listeners with removeListener/off Source: https://context7.com/primus/eventemitter3/llms.txt Removes listener(s) for a given event. If no function is specified, all listeners for that event are removed. Can filter by context and whether the listener was added with `once()`. ```javascript const EventEmitter = require('eventemitter3'); const emitter = new EventEmitter(); function onData(data) { console.log('Data:', data); } function onDataBackup(data) { console.log('Backup:', data); } emitter.on('data', onData); emitter.on('data', onDataBackup); console.log('Listeners before:', emitter.listenerCount('data')); // Output: 2 // Remove specific listener emitter.removeListener('data', onData); console.log('Listeners after removing onData:', emitter.listenerCount('data')); // Output: 1 emitter.emit('data', 'test'); // Output: Backup: test // Using off() alias emitter.off('data', onDataBackup); console.log('Listeners after off():', emitter.listenerCount('data')); // Output: 0 // Remove all listeners for an event (no function specified) emitter.on('message', () => console.log('A')); emitter.on('message', () => console.log('B')); emitter.removeListener('message'); console.log('Listeners for message:', emitter.listenerCount('message')); // Output: 0 // Context-specific removal const ctx1 = { name: 'ctx1' }; const ctx2 = { name: 'ctx2' }; function handler() { console.log('Handler called with context:', this.name); } emitter.on('event', handler, ctx1); emitter.on('event', handler, ctx2); emitter.removeListener('event', handler, ctx1); // Only removes ctx1 listener emitter.emit('event'); // Output: Handler called with context: ctx2 ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.