nigerian-mobile-validator
Version:
The most rigorous, up-to-date library for validating Nigerian mobile numbers. Fully NCC-compliant, and security-focused, with enterprise-grade features to prevent the business risks of validation failures in regulated industries.
60 lines (59 loc) • 2.13 kB
JavaScript
// src/events/event-emitter.ts
import { EventEmitter } from 'events';
import { CurrentEnvironment, RuntimeEnvironment } from '../utils/runtime-environment';
/**
* Create an environment-agnostic event emitter
* This ensures compatibility with both browser and server environments
*/
export function createEventEmitter() {
// In browsers or Node.js, use the EventEmitter from the 'events' package
if (RuntimeEnvironment.currentEnvironment == CurrentEnvironment.Browser || RuntimeEnvironment.currentEnvironment == CurrentEnvironment.Node) {
return new EventEmitter();
}
// In server environments without Node.js (rare case), create a minimal implementation
return {
_events: new Map(),
on(event, listener) {
if (!this._events.has(event)) {
this._events.set(event, []);
}
this._events.get(event).push(listener);
return this;
},
off(event, listener) {
if (!this._events.has(event))
return this;
const listeners = this._events.get(event);
const index = listeners.indexOf(listener);
if (index !== -1) {
listeners.splice(index, 1);
}
return this;
},
emit(event, ...args) {
if (!this._events.has(event))
return false;
const listeners = this._events.get(event);
// Properly type the listener function and add error handling
listeners.forEach((listener) => {
try {
listener(...args);
}
catch (error) {
console.error(`Error in event listener for "${event}":`, error);
// Optionally, we could also emit an 'error' event here
}
});
return true;
},
removeAllListeners(event) {
if (event) {
this._events.delete(event);
}
else {
this._events.clear();
}
return this;
}
};
}