Add async EventEmitter and deep clone

This commit is contained in:
Samuel Elliott 2018-03-01 18:42:53 +00:00
parent ecf7f872cb
commit 9a72a7425e
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
3 changed files with 59 additions and 0 deletions

View File

@ -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();
});
}
}

View File

@ -1,3 +1,4 @@
export { ClientIPC } from './bdipc';
export * from './utils';
export { ClientLogger } from './logger';
export { default as AsyncEventEmitter } from './async-eventemitter';

View File

@ -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 {