@v4fire/client
Version:
V4Fire client core library
52 lines (42 loc) • 1.24 kB
text/typescript
/*!
* V4Fire Client Core
* https://github.com/V4Fire/Client
*
* Released under the MIT license
* https://github.com/V4Fire/Client/blob/master/LICENSE
*/
import { EventEmitter2 as EventEmitter, ListenerFn, OnOptions } from 'eventemitter2';
import { componentParams } from 'core/component/const/cache';
/**
* Event emitter to broadcast component initialize events
*/
export const
initEmitter = new EventEmitter({maxListeners: 1e3, newListener: false});
// We need wrap an original "once" function of the emitter
// to attach logic to register smart components
((initEventOnce) => {
initEmitter.once = function once(
event: CanArray<string>,
listener: ListenerFn,
opts?: true | OnOptions
): EventEmitter {
const
events = Array.concat([], event);
for (let i = 0; i < events.length; i++) {
const
el = events[i],
chunks = el.split('.', 2);
if (chunks[0] === 'constructor') {
initEventOnce(el, listener, opts);
const
p = componentParams.get(chunks[1]);
if (p && Object.isPlainObject(p.functional)) {
initEventOnce(`${el}-functional`, listener, opts);
}
} else {
initEventOnce(el, listener, opts);
}
}
return this;
};
})(initEmitter.once.bind(initEmitter));