diff --git a/dist/util/Database.js b/dist/util/Database.js
index 9ac6eeeb..01b1b57c 100644
--- a/dist/util/Database.js
+++ b/dist/util/Database.js
@@ -1,10 +1,75 @@
"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
Object.defineProperty(exports, "__esModule", { value: true });
-const lambert_db_1 = require("lambert-db");
-// TODO: load url from config
-const db = new lambert_db_1.MongoDatabase("mongodb://127.0.0.1:27017/lambert?readPreference=secondaryPreferred", {
- useNewUrlParser: true,
- useUnifiedTopology: false,
-});
-exports.default = db;
+exports.MongooseCache = void 0;
+require("./MongoBigInt");
+const mongoose_1 = __importDefault(require("mongoose"));
+const mongodb_1 = require("mongodb");
+const events_1 = __importDefault(require("events"));
+const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
+const connection = mongoose_1.default.createConnection(uri, { autoIndex: true });
+exports.default = connection;
+class MongooseCache extends events_1.default {
+ constructor(collection, pipeline, opts) {
+ super();
+ this.collection = collection;
+ this.pipeline = pipeline;
+ this.opts = opts;
+ this.change = (doc) => {
+ // @ts-ignore
+ if (doc.fullDocument) {
+ // @ts-ignore
+ if (!this.opts.onlyEvents)
+ this.data = doc.fullDocument;
+ }
+ switch (doc.operationType) {
+ case "dropDatabase":
+ return this.destroy();
+ case "drop":
+ return this.destroy();
+ case "delete":
+ return this.emit("delete", doc.documentKey._id.toHexString());
+ case "insert":
+ return this.emit("insert", doc.fullDocument);
+ case "update":
+ case "replace":
+ return this.emit("change", doc.fullDocument);
+ case "invalidate":
+ return this.destroy();
+ default:
+ return;
+ }
+ };
+ }
+ async init() {
+ this.stream = this.collection.watch(this.pipeline, { fullDocument: "updateLookup" });
+ this.stream.on("change", this.change);
+ this.stream.on("close", this.destroy);
+ this.stream.on("error", console.error);
+ if (!this.opts.onlyEvents) {
+ const arr = await this.collection.aggregate(this.pipeline).toArray();
+ this.data = arr.length ? arr[0] : arr;
+ }
+ }
+ convertResult(obj) {
+ if (obj instanceof mongodb_1.Long)
+ return BigInt(obj.toString());
+ if (typeof obj === "object") {
+ Object.keys(obj).forEach((key) => {
+ obj[key] = this.convertResult(obj[key]);
+ });
+ }
+ return obj;
+ }
+ destroy() {
+ this.stream.off("change", this.change);
+ this.emit("close");
+ if (this.stream.isClosed())
+ return;
+ return this.stream.close();
+ }
+}
+exports.MongooseCache = MongooseCache;
//# sourceMappingURL=Database.js.map
\ No newline at end of file
|