summary refs log tree commit diff
path: root/dist/util/Database.js
diff options
context:
space:
mode:
Diffstat (limited to 'dist/util/Database.js')
-rw-r--r--dist/util/Database.js79
1 files changed, 72 insertions, 7 deletions
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