diff --git a/dist/smartdata.classes.db.d.ts b/dist/smartdata.classes.db.d.ts index 227ee87..a258170 100644 --- a/dist/smartdata.classes.db.d.ts +++ b/dist/smartdata.classes.db.d.ts @@ -7,7 +7,7 @@ import { DbCollection } from './smartdata.classes.dbcollection'; export declare type TConnectionStatus = 'disconnected' | 'connected' | 'failed'; export declare class Db { dbUrl: string; - db: plugins.mongodb.Db; + dbConnection: plugins.rethinkDb.Connection; status: TConnectionStatus; classCollections: Objectmap>; objectCollections: Objectmap>; diff --git a/dist/smartdata.classes.db.js b/dist/smartdata.classes.db.js index 8941859..022736d 100644 --- a/dist/smartdata.classes.db.js +++ b/dist/smartdata.classes.db.js @@ -22,24 +22,16 @@ class Db { * connects to the database that was specified during instance creation */ connect() { - let done = plugins.smartq.defer(); - plugins.mongodb.MongoClient.connect(this.dbUrl, (err, db) => { - if (err) { - console.log(err); - } - plugins.assert.equal(null, err); - this.db = db; - plugins.beautylog.success(`connected to database at ${this.dbUrl}`); - done.resolve(this.db); + return __awaiter(this, void 0, void 0, function* () { + this.dbConnection = yield plugins.rethinkDb.connect('test'); }); - return done.promise; } /** * closes the connection to the databse */ close() { let done = plugins.smartq.defer(); - this.db.close(); + this.dbConnection.close(); plugins.beautylog.ok(`disconnected to database at ${this.dbUrl}`); done.resolve(); return done.promise; @@ -78,4 +70,4 @@ class Db { } } exports.Db = Db; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQThDO0FBQzlDLDZCQUErQjtBQUcvQixtRkFBOEQ7QUFPOUQ7SUFPRSxZQUFhLFFBQWdCO1FBSDdCLHFCQUFnQixHQUFHLElBQUksZUFBUyxFQUFxQixDQUFBO1FBQ3JELHNCQUFpQixHQUFHLElBQUksZUFBUyxFQUFxQixDQUFBO1FBR3BELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUMxRCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtZQUNaLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUE0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQywrQkFBK0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVELDRFQUE0RTtJQUU1RTs7T0FFRztJQUNHLHdCQUF3QixDQUFLLE9BQWU7O1lBQ2hELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUNwRSxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUE7WUFDekMsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUE7UUFDekIsQ0FBQztLQUFBO0lBRUQ7O09BRUc7SUFDRyx5QkFBeUIsQ0FBSyxPQUFlLEVBQUUsS0FBUyxFQUFHLGFBQXNCLEtBQUs7O1lBQzFGLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUNyRSxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUE7WUFDekMsQ0FBQyxDQUFDLENBQUE7WUFDRixFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLGdCQUFnQixHQUFHLDRDQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQTtnQkFDekQsTUFBTSxDQUFDLGdCQUFnQixDQUFBO1lBQ3pCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsZ0JBQWdCLENBQUE7WUFDekIsQ0FBQztRQUNILENBQUM7S0FBQTtJQUVELGFBQWEsQ0FBRSxlQUFrQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzVDLENBQUM7Q0FFRjtBQXRFRCxnQkFzRUMifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQThDO0FBQzlDLDZCQUErQjtBQUcvQixtRkFBOEQ7QUFTOUQ7SUFPRSxZQUFhLFFBQWdCO1FBSDdCLHFCQUFnQixHQUFHLElBQUksZUFBUyxFQUFxQixDQUFBO1FBQ3JELHNCQUFpQixHQUFHLElBQUksZUFBUyxFQUFxQixDQUFBO1FBR3BELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7O09BRUc7SUFDRyxPQUFPOztZQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM3RCxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsK0JBQStCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRCw0RUFBNEU7SUFFNUU7O09BRUc7SUFDRyx3QkFBd0IsQ0FBSyxPQUFlOztZQUNoRCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDcEUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFBO1lBQ3pDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFBO1FBQ3pCLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0cseUJBQXlCLENBQUssT0FBZSxFQUFFLEtBQVMsRUFBRyxhQUFzQixLQUFLOztZQUMxRixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDckUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFBO1lBQ3pDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxnQkFBZ0IsR0FBRyw0Q0FBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUE7Z0JBQ3pELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQTtZQUN6QixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLGdCQUFnQixDQUFBO1lBQ3pCLENBQUM7UUFDSCxDQUFDO0tBQUE7SUFFRCxhQUFhLENBQUUsZUFBa0M7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0NBRUY7QUE5REQsZ0JBOERDIn0= \ No newline at end of file diff --git a/dist/smartdata.plugins.d.ts b/dist/smartdata.plugins.d.ts index f232ef8..c228726 100644 --- a/dist/smartdata.plugins.d.ts +++ b/dist/smartdata.plugins.d.ts @@ -2,6 +2,6 @@ import 'typings-global'; import * as assert from 'assert'; import * as beautylog from 'beautylog'; import * as lodash from 'lodash'; -import * as mongodb from 'mongodb'; +import * as rethinkDb from 'rethinkdb'; import * as smartq from 'smartq'; -export { assert, beautylog, lodash, mongodb, smartq }; +export { assert, beautylog, lodash, smartq, rethinkDb }; diff --git a/dist/smartdata.plugins.js b/dist/smartdata.plugins.js index f62c96a..f8f2023 100644 --- a/dist/smartdata.plugins.js +++ b/dist/smartdata.plugins.js @@ -7,8 +7,8 @@ const beautylog = require("beautylog"); exports.beautylog = beautylog; const lodash = require("lodash"); exports.lodash = lodash; -const mongodb = require("mongodb"); -exports.mongodb = mongodb; +const rethinkDb = require("rethinkdb"); +exports.rethinkDb = rethinkDb; const smartq = require("smartq"); exports.smartq = smartq; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVix1Q0FBc0M7QUFPbEMsOEJBQVM7QUFOYixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVixtQ0FBa0M7QUFPOUIsMEJBQU87QUFOWCxpQ0FBZ0M7QUFPNUIsd0JBQU0ifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVix1Q0FBc0M7QUFPbEMsOEJBQVM7QUFOYixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVix1Q0FBc0M7QUFRbEMsOEJBQVM7QUFQYixpQ0FBZ0M7QUFNNUIsd0JBQU0ifQ== \ No newline at end of file diff --git a/package.json b/package.json index 62fd25f..53725b3 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dependencies": { "@types/lodash": "^4.14.74", "@types/mongodb": "^2.2.11", + "@types/rethinkdb": "^2.3.8", "beautylog": "^6.1.10", "lik": "^1.0.40", "lodash": "^4.17.4", diff --git a/test/test.class.ts b/test/test.class.ts index 9a1a9cf..9849250 100644 --- a/test/test.class.ts +++ b/test/test.class.ts @@ -37,7 +37,7 @@ tap.test('should create an extended class', async () => { }) expect(testCarInstance.name).to.equal('TestCar') expect(testCarInstance.saveableProperties[ 0 ]).equal('color') - expect(testCarInstance.collection).be.instanceof(smartdata.DbCollection) + expect(testCarInstance.collection).be.instanceof(smartdata.DbTable) expect(testCarInstance).be.instanceof(smartdata.DbDoc) if (!process.env.CI) { console.log(TestCar) } }) diff --git a/test/test.ts b/test/test.ts index 48fce90..20a285e 100644 --- a/test/test.ts +++ b/test/test.ts @@ -29,7 +29,7 @@ tap.test('should establish a connection to mongodb', async () => { // ------ // Collections // ------ -let testDbCollection: smartdata.DbCollection +let testDbCollection: smartdata.DbTable tap.test('should give me a collection', async () => { testDbCollection = await testDb.getObjectCollectionByName('TestValue', testDb, true) diff --git a/ts/smartdata.classes.db.ts b/ts/smartdata.classes.db.ts index 6ceebc2..49e5ce4 100644 --- a/ts/smartdata.classes.db.ts +++ b/ts/smartdata.classes.db.ts @@ -1,23 +1,25 @@ import * as plugins from './smartdata.plugins' import { Objectmap } from 'lik' -import { DbCollection } from './smartdata.classes.dbcollection' +import { DbTable } from './smartdata.classes.dbcollection' import { getObjectDoc } from './smartdata.classes.dbobjectdoc' +import { Connection as dbConnection, ConnectionOptions } from 'rethinkdb' + /** * interface - indicates the connection status of the db */ export type TConnectionStatus = 'disconnected' | 'connected' | 'failed' export class Db { - dbUrl: string - db: plugins.mongodb.Db + dbName: string + connectionOptions: plugins.rethinkDb.ConnectionOptions + dbConnection: plugins.rethinkDb.Connection status: TConnectionStatus - classCollections = new Objectmap>() - objectCollections = new Objectmap>() - constructor (dbUrlArg: string) { - this.dbUrl = dbUrlArg + constructor (connectionOptionsArg: ConnectionOptions) { + this.dbName = connectionOptionsArg.db + this.connectionOptions = connectionOptionsArg } // basic connection stuff ---------------------------------------------- @@ -25,16 +27,9 @@ export class Db { /** * connects to the database that was specified during instance creation */ - connect (): Promise { - let done = plugins.smartq.defer() - plugins.mongodb.MongoClient.connect(this.dbUrl, (err, db) => { - if (err) { console.log(err) } - plugins.assert.equal(null, err) - this.db = db - plugins.beautylog.success(`connected to database at ${this.dbUrl}`) - done.resolve(this.db) - }) - return done.promise + async connect (): Promise { + this.dbConnection = await plugins.rethinkDb.connect(this.connectionOptions) + plugins.beautylog.ok(`Connected to database ${this.dbName}`) } /** @@ -42,41 +37,10 @@ export class Db { */ close (): Promise { let done = plugins.smartq.defer() - this.db.close() - plugins.beautylog.ok(`disconnected to database at ${this.dbUrl}`) + this.dbConnection.close() + plugins.beautylog.ok(`disconnected to database ${this.dbName}`) done.resolve() return done.promise } - // advanced communication with the database -------------------------------- - - /** - * gets a class based collection by name: string - */ - async getClassCollectionByName (nameArg: string): Promise> { - let resultCollection = this.classCollections.find((dbCollectionArg) => { - return dbCollectionArg.name === nameArg - }) - return resultCollection - } - - /** - * gets an object collection by name - */ - async getObjectCollectionByName (nameArg: string, dbArg: Db , makeNewArg: boolean = false): Promise> { - let resultCollection = this.objectCollections.find((dbCollectionArg) => { - return dbCollectionArg.name === nameArg - }) - if (!resultCollection && makeNewArg) { - resultCollection = getObjectDoc(nameArg, this).collection - return resultCollection - } else { - return resultCollection - } - } - - addCollection (dbCollectionArg: DbCollection) { - this.classCollections.add(dbCollectionArg) - } - } diff --git a/ts/smartdata.classes.dbcollection.ts b/ts/smartdata.classes.dbcollection.ts index f6f87a9..1153fad 100644 --- a/ts/smartdata.classes.dbcollection.ts +++ b/ts/smartdata.classes.dbcollection.ts @@ -12,16 +12,16 @@ export interface IDocValidation { export function Collection (db: Db) { return function (constructor) { - constructor[ 'dbCollection' ] = new DbCollection(constructor, db) + constructor[ 'dbCollection' ] = new DbTable(constructor, db) } } -export class DbCollection { +export class DbTable { /** * the collection that is used, defaults to mongodb collection, * can be nedb datastore (sub api of mongodb) */ - collection: plugins.mongodb.Collection + table: plugins.rethinkDb.Table collectedClass: T & DbDoc objectValidation: IDocValidation = null name: string @@ -34,7 +34,7 @@ export class DbCollection { this.db = dbArg // make sure it actually exists - this.collection = dbArg.db.collection(this.name) + this.table = dbArg.dbConnection.collection(this.name) // tell the db class about it (important since Db uses different systems under the hood) this.db.addCollection(this) @@ -52,7 +52,7 @@ export class DbCollection { */ find (docMatchArg: T | any, optionsArg?: IFindOptions): Promise { let done = plugins.smartq.defer() - let findCursor = this.collection.find(docMatchArg) + let findCursor = this.table.find(docMatchArg) if (optionsArg) { if (optionsArg.limit) { findCursor = findCursor.limit(1) } } @@ -73,7 +73,7 @@ export class DbCollection { let done = plugins.smartq.defer() this.checkDoc(docArg).then( () => { - this.collection.insertOne(docArg) + this.table.insertOne(docArg) .then(() => { done.resolve() }) }, () => { @@ -92,7 +92,7 @@ export class DbCollection { checkDocPromiseArray.push(this.checkDoc(docArg)) } Promise.all(checkDocPromiseArray).then(() => { - this.collection.insertMany(docArrayArg) + this.table.insertMany(docArrayArg) .then(() => { done.resolve() }) }) return done.promise diff --git a/ts/smartdata.classes.dbdoc.ts b/ts/smartdata.classes.dbdoc.ts index 5a2eaab..76f999b 100644 --- a/ts/smartdata.classes.dbdoc.ts +++ b/ts/smartdata.classes.dbdoc.ts @@ -3,7 +3,7 @@ import * as plugins from './smartdata.plugins' import { Objectmap } from 'lik' import { Db } from './smartdata.classes.db' -import { DbCollection } from './smartdata.classes.dbcollection' +import { DbTable } from './smartdata.classes.dbcollection' export type TDocCreation = 'db' | 'new' | 'mixed' @@ -23,7 +23,7 @@ export class DbDoc { /** * the collection object an Doc belongs to */ - collection: DbCollection + collection: DbTable /** * how the Doc in memory was created, may prove useful later. diff --git a/ts/smartdata.classes.dbobjectdoc.ts b/ts/smartdata.classes.dbobjectdoc.ts index 84554f7..3039cc5 100644 --- a/ts/smartdata.classes.dbobjectdoc.ts +++ b/ts/smartdata.classes.dbobjectdoc.ts @@ -2,11 +2,11 @@ import * as plugins from './smartdata.plugins' import { Db } from './smartdata.classes.db' import { DbDoc } from './smartdata.classes.dbdoc' -import { DbCollection } from './smartdata.classes.dbcollection' +import { DbTable } from './smartdata.classes.dbcollection' export let getObjectDoc = (nameArg,dbArg: Db) => { let objectDoc = new DbDoc() objectDoc.name = nameArg - objectDoc.collection = new DbCollection(objectDoc, dbArg) + objectDoc.collection = new DbTable(objectDoc, dbArg) return objectDoc } diff --git a/yarn.lock b/yarn.lock index 8dad0de..9b8ed45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,6 +44,12 @@ version "8.0.53" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" +"@types/rethinkdb@^2.3.8": + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/rethinkdb/-/rethinkdb-2.3.8.tgz#961f78f0e731668631891bd1199722bb4a2258a8" + dependencies: + "@types/node" "*" + "@types/shelljs@^0.7.4": version "0.7.6" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.6.tgz#4ac7ca01c191ba65b8e2bf50543c5560084d8d27"