import mongodb from "mongodb"; class InvalidObjectError extends Error { constructor(message: string) { super(message); } } export class DatabaseObject { constructor( public database: string, public collection: string, public data: object ) {} } export class DatabaseObjectList { constructor( public database: string, public collection: string, public data: object[] ) {} } export class DatabaseManager { private client: mongodb.MongoClient; constructor(client: mongodb.MongoClient) { this.client = client; } insert( obj: DatabaseObject ): Promise>; insert( objs: DatabaseObjectList ): Promise>; insert( obj: unknown ): | Promise> | Promise> | null { if (obj instanceof DatabaseObject) { return this.client .db(obj.database) .collection(obj.collection) .insertOne(obj.data); } else if (obj instanceof DatabaseObjectList) { return this.client .db(obj.database) .collection(obj.collection) .insertMany(obj.data); } throw new InvalidObjectError( "The object supplied is not a DatabaseObjecct or a DatabaseObjectList!" ); } getObject( searchObj: DatabaseObject ): Promise | null> { return this.client .db(searchObj.database) .collection(searchObj.collection) .findOne(searchObj.data, {}); } getMultipleObjects( searchObj: DatabaseObject ): mongodb.FindCursor> { return this.client .db(searchObj.database) .collection(searchObj.collection) .find(searchObj.data, {}); } }