From cc58237696069292ac61ba6c3931d22f52dec837 Mon Sep 17 00:00:00 2001 From: Flummi Date: Tue, 20 Aug 2019 18:01:01 +0000 Subject: [PATCH] dynamic libimport and more --- index.mjs | 38 --------------- package.json | 2 +- .../{discord.mjs => discord.mjs.unused} | 0 src/clients/irc.mjs | 2 +- src/clients/tg.mjs | 2 +- src/index.mjs | 46 +++++++++++++++++++ 6 files changed, 49 insertions(+), 41 deletions(-) delete mode 100644 index.mjs rename src/clients/{discord.mjs => discord.mjs.unused} (100%) create mode 100644 src/index.mjs diff --git a/index.mjs b/index.mjs deleted file mode 100644 index d0ef6b7..0000000 --- a/index.mjs +++ /dev/null @@ -1,38 +0,0 @@ -import { irc as irclib } from "./src/clients/irc"; -import { tg as tglib } from "./src/clients/tg"; - -import EventEmitter from "events"; - -const clients = []; - -export default class cuffeo extends EventEmitter { - constructor(cfg) { - super(); - for (let srv in cfg) { - if(cfg[srv].enabled) { - switch (cfg[srv].type) { - case "irc": - clients.push({ - name: cfg[srv].network, - type: "irc", - client: new irclib(cfg[srv]) - }); - break; - case "tg": - clients.push({ - name: "tg", - type: "tg", - client: new tglib(cfg[srv]) - }); - break; - } - } - } - - clients.forEach(client => { - client.client.on("data", e => { - this.emit(e[0], e[1]); - }); - }); - } -}; diff --git a/package.json b/package.json index 372c231..99f184b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "cuffeo", "version": "1.0.1", "description": "lul", - "main": "index.mjs", + "main": "src/index.mjs", "scripts": { }, "repository": { diff --git a/src/clients/discord.mjs b/src/clients/discord.mjs.unused similarity index 100% rename from src/clients/discord.mjs rename to src/clients/discord.mjs.unused diff --git a/src/clients/irc.mjs b/src/clients/irc.mjs index 53c0c77..673b541 100644 --- a/src/clients/irc.mjs +++ b/src/clients/irc.mjs @@ -35,7 +35,7 @@ const replaceColor = (match, color, text) => { return text; }; -export class irc extends EventEmitter { +export default class irc extends EventEmitter { constructor(options) { super(); this.options = options || {}; diff --git a/src/clients/tg.mjs b/src/clients/tg.mjs index 8a7e0d5..b454f94 100644 --- a/src/clients/tg.mjs +++ b/src/clients/tg.mjs @@ -1,7 +1,7 @@ import fetch from "flumm-fetch-cookies"; import EventEmitter from "events"; -export class tg extends EventEmitter { +export default class tg extends EventEmitter { constructor(options) { super(); this.options = options || {}; diff --git a/src/index.mjs b/src/index.mjs new file mode 100644 index 0000000..9f05438 --- /dev/null +++ b/src/index.mjs @@ -0,0 +1,46 @@ +import _fs from "fs"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import EventEmitter from "events"; + +const fs = _fs.promises; +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default class cuffeo extends EventEmitter { + constructor(cfg) { + super(); + this.clients = []; + this.libs = {}; + + return (async () => { + await this.loadLibs(); + this.clients = await this.init(cfg); + return this; + })(); + } + async loadLibs() { + const _clients = (await fs.readdir(`${__dirname}/clients`)).filter(f => f.endsWith(".mjs")); + for(const client of _clients) { + const lib = await import(`./clients/${client}`); + this.libs[lib.default.name] = lib.default; + } + return; + } + async init(cfg) { + const clients = []; + for (const srv in cfg) { + if(!cfg[srv].enabled) + return new Error("not enabled"); + if(!Object.keys(this.libs).includes(cfg[srv].type)) + return new Error("not supported client"); + + clients.push({ + name: cfg[srv].network, + type: cfg[srv].type, + client: new this.libs[cfg[srv].type](cfg[srv]) + }); + } + clients.forEach(client => client.client.on("data", e => this.emit(e[0], e[1]))); + return clients; + } +};