@colyseus/mongoose-driver
Version:
<div align="center"> <a href="https://github.com/colyseus/colyseus"> <img src="media/logo.svg?raw=true" width="60%" height="300" /> </a> <br> <br> <a href="https://npmjs.com/package/colyseus"> <img src="https://img.shields.io/npm/dm/coly
128 lines (126 loc) • 4.44 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/drivers/mongoose-driver/src/index.ts
var index_exports = {};
__export(index_exports, {
MongooseDriver: () => MongooseDriver
});
module.exports = __toCommonJS(index_exports);
var import_core = require("@colyseus/core");
var import_mongoose = __toESM(require("mongoose"), 1);
var RoomCacheSchema = new import_mongoose.Schema({
clients: { type: Number, default: 0 },
locked: { type: Boolean, default: false },
maxClients: { type: Number, default: Infinity },
metadata: import_mongoose.Schema.Types.Mixed,
name: String,
private: { type: Boolean, default: false },
publicAddress: String,
processId: String,
roomId: String,
unlisted: { type: Boolean, default: false }
// used for default LobbyRoom (prevent from showing up on room listing)
}, {
strict: false,
timestamps: true,
versionKey: false
});
RoomCacheSchema.index({ name: 1, locked: -1 });
RoomCacheSchema.index({ roomId: 1 });
var RoomCache = import_mongoose.default.model("RoomCache", RoomCacheSchema);
var MongooseDriver = class {
constructor(connectionURI) {
if (import_mongoose.default.connection.readyState === import_mongoose.default.STATES.disconnected) {
connectionURI = connectionURI || process.env.MONGO_URI || "mongodb://127.0.0.1:27017/colyseus";
import_mongoose.default.connect(connectionURI, {
autoIndex: true,
autoCreate: true
});
(0, import_core.debugDriver)("\u{1F5C4}\uFE0F Connected to", connectionURI);
}
}
createInstance(initialValues = {}) {
return new RoomCache(initialValues);
}
async has(roomId) {
return !!await RoomCache.findOne({ roomId });
}
query(conditions, sortOptions = {}) {
let query = RoomCache.find(conditions, {
_id: false,
clients: true,
createdAt: true,
locked: true,
maxClients: true,
metadata: true,
name: true,
roomId: true
});
if (sortOptions) {
query = query.sort(sortOptions);
}
return query;
}
findOne(conditions, sortOptions) {
let query = RoomCache.findOne(conditions, { _id: 0 });
if (sortOptions) {
query = query.sort(sortOptions);
}
return query;
}
async clear() {
await RoomCache.deleteMany({});
}
async cleanup(processId) {
await RoomCache.deleteMany({ processId });
}
async remove(roomId) {
const result = await RoomCache.deleteOne({ roomId });
return result.deletedCount > 0;
}
async update(room, operations) {
const result = await RoomCache.updateOne({ roomId: room.roomId }, operations);
return result.modifiedCount > 0;
}
async persist(room, create = false) {
if (create) {
await RoomCache.create(room);
return true;
}
const result = await RoomCache.updateOne({ roomId: room.roomId }, { $set: room });
return result.modifiedCount > 0 || result.matchedCount > 0;
}
async shutdown() {
await import_mongoose.default.disconnect();
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
MongooseDriver
});