sip.js
Version:
A SIP library for JavaScript
68 lines (67 loc) • 2.12 kB
JavaScript
/**
* An {@link Emitter} implementation.
* @internal
*/
export class EmitterImpl {
constructor() {
this.listeners = new Array();
}
/**
* Sets up a function that will be called whenever the target changes.
* @param listener - Callback function.
* @param options - An options object that specifies characteristics about the listener.
* If once true, indicates that the listener should be invoked at most once after being added.
* If once true, the listener would be automatically removed when invoked.
*/
addListener(listener, options) {
const onceWrapper = (data) => {
this.removeListener(onceWrapper);
listener(data);
};
(options === null || options === void 0 ? void 0 : options.once) === true ? this.listeners.push(onceWrapper) : this.listeners.push(listener);
}
/**
* Emit change.
* @param data - Data to emit.
*/
emit(data) {
this.listeners.slice().forEach((listener) => listener(data));
}
/**
* Removes all listeners previously registered with addListener.
*/
removeAllListeners() {
this.listeners = [];
}
/**
* Removes a listener previously registered with addListener.
* @param listener - Callback function.
*/
removeListener(listener) {
this.listeners = this.listeners.filter((l) => l !== listener);
}
/**
* Registers a listener.
* @param listener - Callback function.
* @deprecated Use addListener.
*/
on(listener) {
return this.addListener(listener);
}
/**
* Unregisters a listener.
* @param listener - Callback function.
* @deprecated Use removeListener.
*/
off(listener) {
return this.removeListener(listener);
}
/**
* Registers a listener then unregisters the listener after one event emission.
* @param listener - Callback function.
* @deprecated Use addListener.
*/
once(listener) {
return this.addListener(listener, { once: true });
}
}