First pass polyfill

This commit is contained in:
2022-09-05 23:58:16 -04:00
parent 9e4f609cbe
commit c87b096459
25 changed files with 893 additions and 223 deletions
+19
View File
@@ -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);
}
+36
View File
@@ -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);
}
}