Add async EventEmitter and deep clone
This commit is contained in:
parent
ecf7f872cb
commit
9a72a7425e
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* BetterDiscord Async EventEmitter
|
||||
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||
* All rights reserved.
|
||||
* https://betterdiscord.net
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import EventEmitter from 'events';
|
||||
|
||||
export default class AsyncEventEmitter extends EventEmitter {
|
||||
|
||||
emit(event, ...data) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let listeners = this._events[event] || [];
|
||||
listeners = Array.isArray(listeners) ? listeners : [listeners];
|
||||
|
||||
// Special treatment of internal newListener and removeListener events
|
||||
if(event === 'newListener' || event === 'removeListener') {
|
||||
data = [{
|
||||
event: data,
|
||||
fn: err => {
|
||||
if (err) throw err;
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
for (let listener of listeners) {
|
||||
try {
|
||||
await listener.call(this, ...data);
|
||||
} catch (err) {
|
||||
return reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
export { ClientIPC } from './bdipc';
|
||||
export * from './utils';
|
||||
export { ClientLogger } from './logger';
|
||||
export { default as AsyncEventEmitter } from './async-eventemitter';
|
||||
|
|
|
@ -67,6 +67,22 @@ export class Utils {
|
|||
// value1 and value2 contain the same data
|
||||
return true;
|
||||
}
|
||||
|
||||
static deepclone(value) {
|
||||
if (typeof value === 'object') {
|
||||
if (value instanceof Array) return value.map(i => this.deepclone(i));
|
||||
|
||||
const clone = Object.assign({}, value);
|
||||
|
||||
for (let key in clone) {
|
||||
clone[key] = this.deepclone(clone[key]);
|
||||
}
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
export class FileUtils {
|
||||
|
|
Loading…
Reference in New Issue