summary refs log tree commit diff
path: root/src/util/connections/ConnectionLoader.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/connections/ConnectionLoader.ts')
-rw-r--r--src/util/connections/ConnectionLoader.ts65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/util/connections/ConnectionLoader.ts b/src/util/connections/ConnectionLoader.ts
new file mode 100644
index 00000000..d06a6446
--- /dev/null
+++ b/src/util/connections/ConnectionLoader.ts
@@ -0,0 +1,65 @@
+import fs from "fs";
+import path from "path";
+import { OrmUtils } from "../imports";
+import Connection from "./Connection";
+import { ConnectionConfig } from "./ConnectionConfig";
+import { ConnectionStore } from "./ConnectionStore";
+
+const root = "dist/connections";
+let connectionsLoaded = false;
+
+export class ConnectionLoader {
+	public static async loadConnections() {
+		if (connectionsLoaded) return;
+		ConnectionConfig.init();
+		const dirs = fs.readdirSync(root).filter((x) => {
+			try {
+				fs.readdirSync(path.join(root, x));
+				return true;
+			} catch (e) {
+				return false;
+			}
+		});
+
+		dirs.forEach(async (x) => {
+			let modPath = path.resolve(path.join(root, x));
+			console.log(`Loading connection: ${modPath}`);
+			const mod = new (require(modPath).default)() as Connection;
+			ConnectionStore.connections.set(mod.id, mod);
+
+			mod.init();
+			console.log(`[Connections] Loaded connection '${mod.id}'`);
+		});
+	}
+
+	public static getConnectionConfig(id: string, defaults?: any): any {
+		let cfg = ConnectionConfig.get()[id];
+		if (defaults) {
+			if (cfg) cfg = OrmUtils.mergeDeep(defaults, cfg);
+			else cfg = defaults;
+			this.setConnectionConfig(id, cfg);
+		}
+
+		if (!cfg)
+			console.log(
+				`[ConnectionConfig/WARN] Getting connection settings for '${id}' returned null! (Did you forget to add settings?)`,
+			);
+		return cfg;
+	}
+
+	public static async setConnectionConfig(
+		id: string,
+		config: Partial<any>,
+	): Promise<void> {
+		if (!config)
+			console.log(
+				`[ConnectionConfig/WARN] ${id} tried to set config=null!`,
+			);
+		await ConnectionConfig.set({
+			[id]: OrmUtils.mergeDeep(
+				ConnectionLoader.getConnectionConfig(id) || {},
+				config,
+			),
+		});
+	}
+}