First pass polyfill
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
export function getKeys(object) {
|
||||
const keys = [];
|
||||
|
||||
for (const key in object) keys.push(key);
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
export default function cloneObject(target, newObject = {}, keys) {
|
||||
if (!Array.isArray(keys)) keys = getKeys(target);
|
||||
|
||||
return keys.reduce((clone, key) => {
|
||||
if (typeof(target[key]) === "object" && !Array.isArray(target[key]) && target[key] !== null) clone[key] = cloneObject(target[key], {});
|
||||
else if (typeof target[key] === "function") clone[key] = target[key].bind(target);
|
||||
else clone[key] = target[key];
|
||||
|
||||
return clone;
|
||||
}, newObject);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
import Logger from "./logger";
|
||||
|
||||
export default class EventEmitter {
|
||||
static get EventEmitter() {return EventEmitter;}
|
||||
|
||||
constructor() {
|
||||
this.events = {};
|
||||
}
|
||||
|
||||
setMaxListeners() {}
|
||||
|
||||
on(event, callback) {
|
||||
if (!this.events[event]) this.events[event] = new Set();
|
||||
|
||||
this.events[event].add(callback);
|
||||
}
|
||||
|
||||
emit(event, ...args) {
|
||||
if (!this.events[event]) return;
|
||||
|
||||
for (const [index, listener] of this.events[event].entries()) {
|
||||
try {
|
||||
listener(...args);
|
||||
}
|
||||
catch (error) {
|
||||
Logger.error("Emitter", `Cannot fire listener for event ${event} at position ${index}:`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
off(event, callback) {
|
||||
if (!this.events[event]) return;
|
||||
|
||||
return this.events[event].delete(callback);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user