From 3671fe4df46c78af7c3ee2cc4aec4e87dd3bb417 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Fri, 12 Jan 2018 01:22:58 +0100 Subject: [PATCH] feat(add RethinkDB as main driver and revert to docs in README): --- README.md | 10 +-- dist/smartdata.classes.db.d.ts | 4 + dist/smartdata.classes.db.js | 22 ++++- dist/smartdata.classes.dbcollection.d.ts | 18 ++-- dist/smartdata.classes.dbcollection.js | 63 +++++++++----- dist/smartdata.classes.dbdoc.d.ts | 9 +- dist/smartdata.classes.dbdoc.js | 46 +++++++--- dist/smartdata.classes.dbobjectdoc.d.ts | 3 - dist/smartdata.classes.dbobjectdoc.js | 11 --- dist/smartdata.plugins.d.ts | 4 +- dist/smartdata.plugins.js | 5 +- package.json | 4 +- qenv.yml | 9 +- test/test.class.ts | 53 ------------ test/test.ts | 73 +++++++--------- ts/smartdata.classes.db.ts | 21 ++++- ts/smartdata.classes.dbcollection.ts | 75 ++++++++++------ ts/smartdata.classes.dbdoc.ts | 32 +++++-- ts/smartdata.plugins.ts | 5 +- yarn.lock | 105 ++++++++--------------- 20 files changed, 294 insertions(+), 278 deletions(-) delete mode 100644 dist/smartdata.classes.dbobjectdoc.d.ts delete mode 100644 dist/smartdata.classes.dbobjectdoc.js delete mode 100644 test/test.class.ts diff --git a/README.md b/README.md index 3437079..b8e17ed 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ do more with data and RethinkDB [![Dependency Status](https://david-dm.org/pushrocks/smartdata.svg)](https://david-dm.org/pushrocks/smartdata) [![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartdata/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartdata/master/dependencies/npm) [![bitHound Code](https://www.bithound.io/github/pushrocks/smartdata/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartdata) +[![Known Vulnerabilities](https://snyk.io/test/npm/smartdata/badge.svg)](https://snyk.io/test/npm/smartdata) [![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) @@ -29,7 +30,7 @@ There are many ODMs out there, however when we searched for an ODM that uses Typ acts smart while still embracing the NoSQL idea we didn't find a matching solution. This is why we started smartdata. -How MongoDB terms map to smartdata classes +How RethinkDB's terms map to the ones of smartdata: RethinkDB term | smartdata class --- | --- @@ -42,8 +43,7 @@ represents a Database. Naturally it has .connect() etc. methods on it. ```javascript import * as smartdata from 'smartdata' -// mongodb -let myDb1 = new smartdata.Db({ +let myRethinkDb1 = new smartdata.Db({ // rethinkDb connection options here }) @@ -59,7 +59,7 @@ So to get to get access to a specific collection you document ```javascript // continues from the block before... -@Collection(myDb1) +@Collection(myRethinkDb1) class MyObject extends smartdata.DbDoc { // read the next block about DbDoc @smartdata.svDb() property1: string // @smartdata.svDb() marks the property for db save property2: number // this one is not marked, so it won't be save upon calling this.save() @@ -70,7 +70,7 @@ class MyObject extends smartdata.DbDoc { // read the next block about super() } } -let myCollection = myDb1.getCollectionByName(myObject) +let myCollection = myRethinkDb1.getCollectionByName(myObject) // start to instantiate instances of classes from scratch or database diff --git a/dist/smartdata.classes.db.d.ts b/dist/smartdata.classes.db.d.ts index ba81bdf..d46a94f 100644 --- a/dist/smartdata.classes.db.d.ts +++ b/dist/smartdata.classes.db.d.ts @@ -13,6 +13,10 @@ export declare class Db { status: TConnectionStatus; dbTablesMap: Objectmap>; constructor(connectionOptionsArg: ConnectionOptions); + /** + * supply additional SSl options + */ + setSsl(certificateStringArg: string, formatArg: 'base64' | 'clearText'): void; /** * connects to the database that was specified during instance creation */ diff --git a/dist/smartdata.classes.db.js b/dist/smartdata.classes.db.js index 472be65..9a5c57b 100644 --- a/dist/smartdata.classes.db.js +++ b/dist/smartdata.classes.db.js @@ -17,6 +17,21 @@ class Db { this.connectionOptions = connectionOptionsArg; this.status = 'initial'; } + /** + * supply additional SSl options + */ + setSsl(certificateStringArg, formatArg) { + let certificateString; + if (formatArg = 'base64') { + certificateString = plugins.smartstring.base64.decode(certificateStringArg); + } + else { + certificateString = certificateStringArg; + } + this.connectionOptions['ssl'] = { + ca: Buffer.from(certificateString) + }; + } // basic connection stuff ---------------------------------------------- /** * connects to the database that was specified during instance creation @@ -24,6 +39,7 @@ class Db { connect() { return __awaiter(this, void 0, void 0, function* () { this.dbConnection = yield plugins.rethinkDb.connect(this.connectionOptions); + this.dbConnection.use(this.dbName); this.status = 'connected'; plugins.beautylog.ok(`Connected to database ${this.dbName}`); }); @@ -35,7 +51,7 @@ class Db { return __awaiter(this, void 0, void 0, function* () { yield this.dbConnection.close(); this.status = 'disconnected'; - plugins.beautylog.ok(`disconnected to database ${this.dbName}`); + plugins.beautylog.ok(`disconnected from database ${this.dbName}`); }); } // handle table to class distribution @@ -47,7 +63,7 @@ class Db { getDbTableByName(nameArg) { return __awaiter(this, void 0, void 0, function* () { let resultCollection = this.dbTablesMap.find((dbCollectionArg) => { - return dbCollectionArg.name === nameArg; + return dbCollectionArg.tableName === nameArg; }); return resultCollection; }); @@ -57,4 +73,4 @@ class Db { } } exports.Db = Db; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQThDO0FBQzlDLDZCQUErQjtBQVkvQjtJQU9FLFlBQVksb0JBQXVDO1FBRm5ELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQWdCLENBQUE7UUFHekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLENBQUE7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFBO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO0lBQ3pCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7O09BRUc7SUFDRyxPQUFPOztZQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQTtZQUN6QixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDOUQsQ0FBQztLQUFBO0lBRUQ7O09BRUc7SUFDRyxLQUFLOztZQUNULE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQTtZQUM1QixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDakUsQ0FBQztLQUFBO0lBRUQscUNBQXFDO0lBRXJDOzs7O09BSUc7SUFDRyxnQkFBZ0IsQ0FBSSxPQUFlOztZQUN2QyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQy9ELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQTtZQUN6QyxDQUFDLENBQUMsQ0FBQTtZQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQTtRQUN6QixDQUFDO0tBQUE7SUFFRCxRQUFRLENBQUUsZUFBNkI7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDdkMsQ0FBQztDQUNGO0FBbERELGdCQWtEQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQThDO0FBQzlDLDZCQUErQjtBQVcvQjtJQU9FLFlBQVksb0JBQXVDO1FBRm5ELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQWdCLENBQUE7UUFHekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLENBQUE7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFBO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBRSxvQkFBNEIsRUFBRSxTQUFpQztRQUNyRSxJQUFJLGlCQUF5QixDQUFBO1FBQzdCLEVBQUUsQ0FBQSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzdFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLGlCQUFpQixHQUFHLG9CQUFvQixDQUFBO1FBQzFDLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDOUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDbkMsQ0FBQTtJQUNILENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7O09BRUc7SUFDRyxPQUFPOztZQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUMzRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUE7WUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMseUJBQXlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQzlELENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0csS0FBSzs7WUFDVCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUE7WUFDNUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsOEJBQThCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLENBQUM7S0FBQTtJQUVELHFDQUFxQztJQUVyQzs7OztPQUlHO0lBQ0csZ0JBQWdCLENBQUksT0FBZTs7WUFDdkMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUMvRCxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUE7WUFDOUMsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUE7UUFDekIsQ0FBQztLQUFBO0lBRUQsUUFBUSxDQUFFLGVBQTZCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7Q0FDRjtBQWxFRCxnQkFrRUMifQ== \ No newline at end of file diff --git a/dist/smartdata.classes.dbcollection.d.ts b/dist/smartdata.classes.dbcollection.d.ts index d58d7a2..fa54ec9 100644 --- a/dist/smartdata.classes.dbcollection.d.ts +++ b/dist/smartdata.classes.dbcollection.d.ts @@ -1,6 +1,7 @@ import * as plugins from './smartdata.plugins'; import { Db } from './smartdata.classes.db'; import { DbDoc } from './smartdata.classes.dbdoc'; +import { WriteResult, Cursor } from 'rethinkdb'; export interface IFindOptions { limit?: number; } @@ -15,9 +16,10 @@ export declare class DbTable { */ table: plugins.rethinkDb.Table; objectValidation: IDocValidation; - name: string; + tableName: string; db: Db; constructor(collectedClassArg: T & DbDoc, dbArg: Db); + init(): Promise; /** * adds a validation function that all newly inserted and updated objects have to pass */ @@ -25,17 +27,19 @@ export declare class DbTable { /** * finds an object in the DbCollection */ - find(docMatchArg: T | any, optionsArg?: IFindOptions): Promise; + find(): Promise; + /** + * create an object in the database + */ + insert(dbDocArg: T & DbDoc): Promise; /** * inserts object into the DbCollection */ - insertOne(docArg: T): Promise; - /** - * inserts many objects at once into the DbCollection - */ - insertMany(docArrayArg: T[]): Promise; + update(dbDocArg: T & DbDoc): Promise; /** * checks a Doc for constraints + * if this.objectValidation is not set it passes. */ private checkDoc(docArg); + extractKey(writeResult: WriteResult): void; } diff --git a/dist/smartdata.classes.dbcollection.js b/dist/smartdata.classes.dbcollection.js index 19340e5..147f4a7 100644 --- a/dist/smartdata.classes.dbcollection.js +++ b/dist/smartdata.classes.dbcollection.js @@ -19,13 +19,29 @@ class DbTable { constructor(collectedClassArg, dbArg) { this.objectValidation = null; // tell the collection where it belongs - this.name = collectedClassArg.name; + this.tableName = collectedClassArg.name; this.db = dbArg; - // connect this instance to a RethinkDB table - this.table = plugins.rethinkDb.db(this.db.dbName).table(this.name); // tell the db class about it (important since Db uses different systems under the hood) this.db.addTable(this); } + init() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.table) { + // connect this instance to a RethinkDB table + const availableTables = yield plugins.rethinkDb + .db(this.db.dbName) + .tableList() + .run(this.db.dbConnection); + if (availableTables.indexOf(this.tableName)) { + yield plugins.rethinkDb + .db(this.db.dbName) + .tableCreate(this.tableName) + .run(this.db.dbConnection); + } + } + this.table = plugins.rethinkDb.table(this.tableName); + }); + } /** * adds a validation function that all newly inserted and updated objects have to pass */ @@ -35,35 +51,36 @@ class DbTable { /** * finds an object in the DbCollection */ - find(docMatchArg, optionsArg) { + find() { return __awaiter(this, void 0, void 0, function* () { + yield this.init(); + return yield plugins.rethinkDb.table(this.tableName).filter({}).run(this.db.dbConnection); + }); + } + /** + * create an object in the database + */ + insert(dbDocArg) { + return __awaiter(this, void 0, void 0, function* () { + yield this.init(); + yield this.checkDoc(dbDocArg); + return yield plugins.rethinkDb.table(this.tableName).insert(dbDocArg.createSavableObject()).run(this.db.dbConnection); }); } /** * inserts object into the DbCollection */ - insertOne(docArg) { + update(dbDocArg) { return __awaiter(this, void 0, void 0, function* () { - yield this.checkDoc(docArg); + yield this.init(); + yield this.checkDoc(dbDocArg); + console.log(this.tableName, dbDocArg.createSavableObject()); + return yield plugins.rethinkDb.table(this.tableName).update(dbDocArg.createSavableObject()).run(this.db.dbConnection); }); } - /** - * inserts many objects at once into the DbCollection - */ - insertMany(docArrayArg) { - let done = plugins.smartq.defer(); - let checkDocPromiseArray = []; - for (let docArg of docArrayArg) { - checkDocPromiseArray.push(this.checkDoc(docArg)); - } - Promise.all(checkDocPromiseArray).then(() => { - this.table.insertMany(docArrayArg) - .then(() => { done.resolve(); }); - }); - return done.promise; - } /** * checks a Doc for constraints + * if this.objectValidation is not set it passes. */ checkDoc(docArg) { let done = plugins.smartq.defer(); @@ -79,6 +96,8 @@ class DbTable { } return done.promise; } + extractKey(writeResult) { + } } exports.DbTable = DbTable; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwrQ0FBOEM7QUFZOUMsb0JBQTRCLEVBQU07SUFDaEMsTUFBTSxDQUFDLFVBQVUsV0FBVztRQUMxQixXQUFXLENBQUUsY0FBYyxDQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUMsQ0FBQTtBQUNILENBQUM7QUFKRCxnQ0FJQztBQUVEO0lBVUUsWUFBYSxpQkFBK0IsRUFBRSxLQUFTO1FBSnZELHFCQUFnQixHQUFzQixJQUFJLENBQUE7UUFLeEMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBRWYsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWxFLHdGQUF3RjtRQUN4RixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBRSxPQUEwQjtRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFBO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNHLElBQUksQ0FBRSxXQUFvQixFQUFFLFVBQXlCOztRQUUzRCxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNHLFNBQVMsQ0FBRSxNQUFTOztZQUN4QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsQ0FBQztLQUFBO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUUsV0FBZ0I7UUFDMUIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQVEsQ0FBQTtRQUN2QyxJQUFJLG9CQUFvQixHQUFvQixFQUFFLENBQUE7UUFDOUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMvQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2xELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7aUJBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNLLFFBQVEsQ0FBRSxNQUFTO1FBQ3pCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFRLENBQUE7UUFDdkMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7UUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUMxQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDaEIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBQ2xELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0NBQ0Y7QUEzRUQsMEJBMkVDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwrQ0FBOEM7QUFlOUMsb0JBQTRCLEVBQU07SUFDaEMsTUFBTSxDQUFDLFVBQVUsV0FBVztRQUMxQixXQUFXLENBQUUsY0FBYyxDQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUMsQ0FBQTtBQUNILENBQUM7QUFKRCxnQ0FJQztBQUVEO0lBVUUsWUFBYSxpQkFBK0IsRUFBRSxLQUFTO1FBSnZELHFCQUFnQixHQUFzQixJQUFJLENBQUE7UUFLeEMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBRWYsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFSyxJQUFJOztZQUNSLEVBQUUsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsNkNBQTZDO2dCQUM3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTO3FCQUM1QyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7cUJBQ2xCLFNBQVMsRUFBRTtxQkFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDNUIsRUFBRSxDQUFBLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxNQUFNLE9BQU8sQ0FBQyxTQUFTO3lCQUN0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 \ No newline at end of file diff --git a/dist/smartdata.classes.dbdoc.d.ts b/dist/smartdata.classes.dbdoc.d.ts index accd9f1..85f43ea 100644 --- a/dist/smartdata.classes.dbdoc.d.ts +++ b/dist/smartdata.classes.dbdoc.d.ts @@ -13,7 +13,7 @@ export declare class DbDoc { /** * how the Doc in memory was created, may prove useful later. */ - creationType: TDocCreation; + creationStatus: TDocCreation; /** * an array of saveable properties of a doc */ @@ -22,6 +22,10 @@ export declare class DbDoc { * name */ name: string; + /** + * primary id in the database + */ + dbId: string; /** * class constructor */ @@ -30,10 +34,11 @@ export declare class DbDoc { * saves this instance but not any connected items * may lead to data inconsistencies, but is faster */ - save(): void; + save(): Promise; /** * also store any referenced objects to DB * better for data consistency */ saveDeep(savedMapArg?: Objectmap>): void; + createSavableObject(): any; } diff --git a/dist/smartdata.classes.dbdoc.js b/dist/smartdata.classes.dbdoc.js index fee2336..0c22412 100644 --- a/dist/smartdata.classes.dbdoc.js +++ b/dist/smartdata.classes.dbdoc.js @@ -1,4 +1,12 @@ "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", { value: true }); const lik_1 = require("lik"); /** @@ -19,6 +27,10 @@ class DbDoc { * class constructor */ constructor() { + /** + * how the Doc in memory was created, may prove useful later. + */ + this.creationStatus = 'new'; this.name = this.constructor['name']; this.collection = this.constructor['dbCollection']; } @@ -27,17 +39,20 @@ class DbDoc { * may lead to data inconsistencies, but is faster */ save() { - let saveableObject = {}; // is not exposed to outside, so any is ok here - for (let propertyNameString of this.saveableProperties) { - saveableObject[propertyNameString] = this[propertyNameString]; - } - switch (this.creationType) { - case 'db': - this.collection; // TODO implement collection.update() - break; - case 'new': - this.collection.insertOne(saveableObject); - } + return __awaiter(this, void 0, void 0, function* () { + let self = this; + switch (this.creationStatus) { + case 'db': + yield this.collection.update(self); + break; + case 'new': + let writeResult = yield this.collection.insert(self); + this.creationStatus = 'db'; + break; + default: + console.error('neither new nor in db?'); + } + }); } /** * also store any referenced objects to DB @@ -56,6 +71,13 @@ class DbDoc { } } } + createSavableObject() { + let saveableObject = {}; // is not exposed to outside, so any is ok here + for (let propertyNameString of this.saveableProperties) { + saveableObject[propertyNameString] = this[propertyNameString]; + } + return saveableObject; + } } exports.DbDoc = DbDoc; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDZCQUErQjtBQU8vQjs7R0FFRztBQUNIO0lBQ0UsTUFBTSxDQUFDLENBQUMsTUFBa0IsRUFBRSxHQUFXLEVBQUUsRUFBRTtRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDckMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQU5ELG9CQU1DO0FBRUQ7SUFzQkU7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUUsY0FBYyxDQUFFLENBQUE7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUk7UUFDRixJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUEsQ0FBQywrQ0FBK0M7UUFDNUUsR0FBRyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELGNBQWMsQ0FBRSxrQkFBa0IsQ0FBRSxHQUFHLElBQUksQ0FBRSxrQkFBa0IsQ0FBRSxDQUFBO1FBQ25FLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMxQixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLHFDQUFxQztnQkFDckQsS0FBSyxDQUFBO1lBQ1AsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFFLGNBQXFDLElBQUk7UUFDakQsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLFdBQVcsR0FBRyxJQUFJLGVBQVMsRUFBYyxDQUFBO1FBQzNDLENBQUM7UUFDRCxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxRQUFRLEdBQVEsSUFBSSxDQUFFLFdBQVcsQ0FBRSxDQUFBO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsWUFBWSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNoQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWpFRCxzQkFpRUMifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRUEsNkJBQStCO0FBTy9COztHQUVHO0FBQ0g7SUFDRSxNQUFNLENBQUMsQ0FBQyxNQUFrQixFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUFDLENBQUM7UUFDbEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUE7QUFDSCxDQUFDO0FBTkQsb0JBTUM7QUFFRDtJQTJCRTs7T0FFRztJQUNIO1FBdkJBOztXQUVHO1FBQ0gsbUJBQWMsR0FBaUIsS0FBSyxDQUFBO1FBcUJsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFFLGNBQWMsQ0FBRSxDQUFBO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDRyxJQUFJOztZQUNSLElBQUksSUFBSSxHQUFRLElBQUksQ0FBQTtZQUNwQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxJQUFJO29CQUNQLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ2xDLEtBQUssQ0FBQTtnQkFDUCxLQUFLLEtBQUs7b0JBQ1IsSUFBSSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUE7b0JBQzFCLEtBQUssQ0FBQztnQkFDUjtvQkFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7WUFDM0MsQ0FBQztRQUNILENBQUM7S0FBQTtJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBRSxjQUFxQyxJQUFJO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixXQUFXLEdBQUcsSUFBSSxlQUFTLEVBQWMsQ0FBQTtRQUMzQyxDQUFDO1FBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksUUFBUSxHQUFRLElBQUksQ0FBRSxXQUFXLENBQUUsQ0FBQTtZQUN2QyxFQUFFLENBQUMsQ0FBQyxRQUFRLFlBQVksS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDaEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQSxDQUFDLCtDQUErQztRQUM1RSxHQUFHLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDdkQsY0FBYyxDQUFFLGtCQUFrQixDQUFFLEdBQUcsSUFBSSxDQUFFLGtCQUFrQixDQUFFLENBQUE7UUFDbkUsQ0FBQztRQUNELE1BQU0sQ0FBQyxjQUFjLENBQUE7SUFDdkIsQ0FBQztDQUNGO0FBL0VELHNCQStFQyJ9 \ No newline at end of file diff --git a/dist/smartdata.classes.dbobjectdoc.d.ts b/dist/smartdata.classes.dbobjectdoc.d.ts deleted file mode 100644 index 4512a74..0000000 --- a/dist/smartdata.classes.dbobjectdoc.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Db } from './smartdata.classes.db'; -import { DbDoc } from './smartdata.classes.dbdoc'; -export declare let getObjectDoc: (nameArg: any, dbArg: Db) => DbDoc<{}>; diff --git a/dist/smartdata.classes.dbobjectdoc.js b/dist/smartdata.classes.dbobjectdoc.js deleted file mode 100644 index c3bc19c..0000000 --- a/dist/smartdata.classes.dbobjectdoc.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const smartdata_classes_dbdoc_1 = require("./smartdata.classes.dbdoc"); -const smartdata_classes_dbcollection_1 = require("./smartdata.classes.dbcollection"); -exports.getObjectDoc = (nameArg, dbArg) => { - let objectDoc = new smartdata_classes_dbdoc_1.DbDoc(); - objectDoc.name = nameArg; - objectDoc.collection = new smartdata_classes_dbcollection_1.DbTable(objectDoc, dbArg); - return objectDoc; -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJvYmplY3Rkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYm9iamVjdGRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLHVFQUFpRDtBQUNqRCxxRkFBMEQ7QUFFL0MsUUFBQSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUMsS0FBUyxFQUFFLEVBQUU7SUFDOUMsSUFBSSxTQUFTLEdBQUcsSUFBSSwrQkFBSyxFQUFFLENBQUE7SUFDM0IsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7SUFDeEIsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLHdDQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3BELE1BQU0sQ0FBQyxTQUFTLENBQUE7QUFDbEIsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/dist/smartdata.plugins.d.ts b/dist/smartdata.plugins.d.ts index c228726..57c764d 100644 --- a/dist/smartdata.plugins.d.ts +++ b/dist/smartdata.plugins.d.ts @@ -1,7 +1,7 @@ -import 'typings-global'; import * as assert from 'assert'; import * as beautylog from 'beautylog'; import * as lodash from 'lodash'; import * as rethinkDb from 'rethinkdb'; import * as smartq from 'smartq'; -export { assert, beautylog, lodash, smartq, rethinkDb }; +import * as smartstring from 'smartstring'; +export { assert, beautylog, lodash, smartq, rethinkDb, smartstring }; diff --git a/dist/smartdata.plugins.js b/dist/smartdata.plugins.js index f8f2023..7f2cc3d 100644 --- a/dist/smartdata.plugins.js +++ b/dist/smartdata.plugins.js @@ -1,6 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -require("typings-global"); const assert = require("assert"); exports.assert = assert; const beautylog = require("beautylog"); @@ -11,4 +10,6 @@ const rethinkDb = require("rethinkdb"); exports.rethinkDb = rethinkDb; const smartq = require("smartq"); exports.smartq = smartq; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVix1Q0FBc0M7QUFPbEMsOEJBQVM7QUFOYixpQ0FBZ0M7QUFPNUIsd0JBQU07QUFOVix1Q0FBc0M7QUFRbEMsOEJBQVM7QUFQYixpQ0FBZ0M7QUFNNUIsd0JBQU0ifQ== \ No newline at end of file +const smartstring = require("smartstring"); +exports.smartstring = smartstring; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFnQztBQVE1Qix3QkFBTTtBQVBWLHVDQUFzQztBQVFsQyw4QkFBUztBQVBiLGlDQUFnQztBQVE1Qix3QkFBTTtBQVBWLHVDQUFzQztBQVNsQyw4QkFBUztBQVJiLGlDQUFnQztBQU81Qix3QkFBTTtBQU5WLDJDQUEwQztBQVF0QyxrQ0FBVyJ9 \ No newline at end of file diff --git a/package.json b/package.json index 81971c0..ece28aa 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "lodash": "^4.17.4", "rethinkdb": "^2.3.3", "runtime-type-checks": "0.0.4", - "smartq": "^1.1.6" + "smartq": "^1.1.6", + "smartstring": "^2.0.28" }, "devDependencies": { "@types/node": "^8.5.7", @@ -34,7 +35,6 @@ "cz-conventional-changelog": "^2.1.0", "qenv": "^1.1.7", "shelljs": "^0.7.8", - "smartstring": "^2.0.24", "tapbundle": "^1.1.1" }, "config": { diff --git a/qenv.yml b/qenv.yml index 159c464..8ca8fe4 100644 --- a/qenv.yml +++ b/qenv.yml @@ -1,4 +1,7 @@ vars: - - MONGO_USER - - MONGO_PASS - - MONGO_DATABASE + - RDB_DB + - RDB_HOST + - RDB_USER + - RDB_PASS + - RDB_PORT + - RDB_CERT diff --git a/test/test.class.ts b/test/test.class.ts deleted file mode 100644 index 9849250..0000000 --- a/test/test.class.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { tap, expect } from 'tapbundle' -import * as smartq from 'smartq' -import { Qenv } from 'qenv' - -let testQenv = new Qenv(process.cwd(), process.cwd() + '/.nogit/') - -// the tested module -import * as smartdata from '../ts/index' - -let mongoChildProcess -let testDb: smartdata.Db - -tap.test('should establish a connection to mongodb', async () => { - // testDb = new smartdata.Db(`mongodb://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@sandbox-shard-00-00-uyw7y.mongodb.net:27017,sandbox-shard-00-01-uyw7y.mongodb.net:27017,sandbox-shard-00-02-uyw7y.mongodb.net:27017/${process.env.MONGO_DATABASE}?ssl=true&replicaSet=sandbox-shard-0&authSource=admin`) - testDb = new smartdata.Db(`mongodb://localhost:27017/${process.env.MONGO_DATABASE}`) - await testDb.connect() -}) - -let testCarInstance - -tap.test('should create an extended class', async () => { - @smartdata.Collection(testDb) - class TestCar extends smartdata.DbDoc { - @smartdata.svDb() - color: string - constructor (optionsArg: { - color: string, - property2: number - }) { - super() - this.color = optionsArg.color - } - } - testCarInstance = new TestCar({ - color: 'red', - property2: 2 - }) - expect(testCarInstance.name).to.equal('TestCar') - expect(testCarInstance.saveableProperties[ 0 ]).equal('color') - expect(testCarInstance.collection).be.instanceof(smartdata.DbTable) - expect(testCarInstance).be.instanceof(smartdata.DbDoc) - if (!process.env.CI) { console.log(TestCar) } -}) - -tap.test('should save testCar', async () => { - await testCarInstance.save() -}) - -tap.test('should close the db Connection', async () => { - await testDb.close() -}) - -tap.start() diff --git a/test/test.ts b/test/test.ts index 36ac6a6..dcfb9c9 100644 --- a/test/test.ts +++ b/test/test.ts @@ -6,22 +6,23 @@ let testQenv = new Qenv(process.cwd(), process.cwd() + '/.nogit/') // the tested module import * as smartdata from '../ts/index' +import { smartstring } from '../ts/smartdata.plugins'; -let mongoChildProcess -let testDb: smartdata.Db +// ======================================= +// Connecting to the database server +// ======================================= -interface ITestObject1 { - value1: string - value2?: number - value3?: string -} +let testDb = new smartdata.Db({ + db: process.env.RDB_DB, + host: process.env.RDB_HOST, + user: process.env.RDB_USER, + password: process.env.RDB_PASS, + port: parseInt(process.env.RDB_PORT) +}) +testDb.setSsl(process.env.RDB_CERT, 'base64') -tap.test('should establish a connection to mongodb', async () => { - // testDb = new smartdata.Db(`mongodb://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@sandbox-shard-00-00-uyw7y.mongodb.net:27017,sandbox-shard-00-01-uyw7y.mongodb.net:27017,sandbox-shard-00-02-uyw7y.mongodb.net:27017/${process.env.MONGO_DATABASE}?ssl=true&replicaSet=sandbox-shard-0&authSource=admin`) - testDb = new smartdata.Db({ - db: 'test', - host: '' - }) +tap.test('should establish a connection to the rethink Db cluster', async () => { + await testDb.connect() }) @@ -32,40 +33,28 @@ tap.test('should establish a connection to mongodb', async () => { // ------ // Collections // ------ -let testDbTable: smartdata.DbTable -tap.test('should give me a collection', async () => { - testDbTable = await testDb.getTableByName('testTable') -}) +@smartdata.Collection(testDb) +class Car extends smartdata.DbDoc { + @smartdata.svDb() color: string + @smartdata.svDb() brand: string + constructor (colorArg: string, brandArg: string) { + super() + this.color = colorArg + this.brand = brandArg + } +} -tap.test('should insert a doc into the collection', async () => { - await testDbTable.insertOne({ value1: 'test' }) -}) - -tap.test('should find all docs of testDbCollection', async () => { - await testDbTable.find({}).then(async (resultArray) => { - console.log(resultArray) - expect(resultArray[ 0 ].value1).equal('test') - }) -}) - -tap.test('should insert many docs into the collection', async () => { - await testDbTable.insertMany([ - { value1: 'test2' }, - { value1: 'test', value2: 3, value3: 'hi' } - ]) -}) - -tap.test('should find a specified doc', async () => { - await testDbTable.find({ 'value3': { '$exists': true } }).then((resultArray) => { - console.log(resultArray) - expect(resultArray[ 0 ].value3).equal('hi') - }) +tap.test('should save the car to the db', async () => { + const myCar = new Car('red','Volvo') + await myCar.save() }) - -tap.test('should close the db Connection', async () => { +// ======================================= +// close the database connection +// ======================================= +tap.test('should close the database connection', async (tools) => { await testDb.close() }) diff --git a/ts/smartdata.classes.db.ts b/ts/smartdata.classes.db.ts index 16053c9..9497b6a 100644 --- a/ts/smartdata.classes.db.ts +++ b/ts/smartdata.classes.db.ts @@ -2,7 +2,6 @@ import * as plugins from './smartdata.plugins' import { Objectmap } from 'lik' import { DbTable } from './smartdata.classes.dbcollection' -import { getObjectDoc } from './smartdata.classes.dbobjectdoc' import { Connection as dbConnection, ConnectionOptions } from 'rethinkdb' @@ -24,6 +23,21 @@ export class Db { this.status = 'initial' } + /** + * supply additional SSl options + */ + setSsl (certificateStringArg: string, formatArg: 'base64' | 'clearText') { + let certificateString: string + if(formatArg = 'base64') { + certificateString = plugins.smartstring.base64.decode(certificateStringArg) + } else { + certificateString = certificateStringArg + } + this.connectionOptions['ssl'] = { + ca: Buffer.from(certificateString) + } + } + // basic connection stuff ---------------------------------------------- /** @@ -31,6 +45,7 @@ export class Db { */ async connect (): Promise { this.dbConnection = await plugins.rethinkDb.connect(this.connectionOptions) + this.dbConnection.use(this.dbName) this.status = 'connected' plugins.beautylog.ok(`Connected to database ${this.dbName}`) } @@ -41,7 +56,7 @@ export class Db { async close (): Promise { await this.dbConnection.close() this.status = 'disconnected' - plugins.beautylog.ok(`disconnected to database ${this.dbName}`) + plugins.beautylog.ok(`disconnected from database ${this.dbName}`) } // handle table to class distribution @@ -53,7 +68,7 @@ export class Db { */ async getDbTableByName(nameArg: string): Promise> { let resultCollection = this.dbTablesMap.find((dbCollectionArg) => { - return dbCollectionArg.name === nameArg + return dbCollectionArg.tableName === nameArg }) return resultCollection } diff --git a/ts/smartdata.classes.dbcollection.ts b/ts/smartdata.classes.dbcollection.ts index 70d6a6f..854594b 100644 --- a/ts/smartdata.classes.dbcollection.ts +++ b/ts/smartdata.classes.dbcollection.ts @@ -2,6 +2,9 @@ import * as plugins from './smartdata.plugins' import { Db } from './smartdata.classes.db' import { DbDoc } from './smartdata.classes.dbdoc' +// RethinkDb Interfaces +import { WriteResult, Cursor } from 'rethinkdb' + export interface IFindOptions { limit?: number } @@ -23,21 +26,35 @@ export class DbTable { */ table: plugins.rethinkDb.Table objectValidation: IDocValidation = null - name: string + tableName: string db: Db constructor (collectedClassArg: T & DbDoc, dbArg: Db) { // tell the collection where it belongs - this.name = collectedClassArg.name + this.tableName = collectedClassArg.name this.db = dbArg - // connect this instance to a RethinkDB table - this.table = plugins.rethinkDb.db(this.db.dbName).table(this.name) - // tell the db class about it (important since Db uses different systems under the hood) this.db.addTable(this) } + async init() { + if(!this.table) { + // connect this instance to a RethinkDB table + const availableTables = await plugins.rethinkDb + .db(this.db.dbName) + .tableList() + .run(this.db.dbConnection) + if(availableTables.indexOf(this.tableName)) { + await plugins.rethinkDb + .db(this.db.dbName) + .tableCreate(this.tableName) + .run(this.db.dbConnection) + } + } + this.table = plugins.rethinkDb.table(this.tableName) + } + /** * adds a validation function that all newly inserted and updated objects have to pass */ @@ -48,35 +65,39 @@ export class DbTable { /** * finds an object in the DbCollection */ - async find (docMatchArg: T | any, optionsArg?: IFindOptions): Promise { - + async find (): Promise { + await this.init() + return await plugins.rethinkDb.table(this.tableName).filter({ + /* TODO: */ + }).run(this.db.dbConnection) + } + + /** + * create an object in the database + */ + async insert (dbDocArg: T & DbDoc): Promise { + await this.init() + await this.checkDoc(dbDocArg) + return await plugins.rethinkDb.table(this.tableName).insert( + dbDocArg.createSavableObject() + ).run(this.db.dbConnection) } /** * inserts object into the DbCollection */ - async insertOne (docArg: T): Promise { - await this.checkDoc(docArg) - } - - /** - * inserts many objects at once into the DbCollection - */ - insertMany (docArrayArg: T[]): Promise { - let done = plugins.smartq.defer() - let checkDocPromiseArray: Promise[] = [] - for (let docArg of docArrayArg) { - checkDocPromiseArray.push(this.checkDoc(docArg)) - } - Promise.all(checkDocPromiseArray).then(() => { - this.table.insertMany(docArrayArg) - .then(() => { done.resolve() }) - }) - return done.promise + async update (dbDocArg: T & DbDoc): Promise { + await this.init() + await this.checkDoc(dbDocArg) + console.log(this.tableName, dbDocArg.createSavableObject()) + return await plugins.rethinkDb.table(this.tableName).update( + dbDocArg.createSavableObject() + ).run(this.db.dbConnection) } /** * checks a Doc for constraints + * if this.objectValidation is not set it passes. */ private checkDoc (docArg: T): Promise { let done = plugins.smartq.defer() @@ -91,4 +112,8 @@ export class DbTable { } return done.promise } + + extractKey (writeResult: WriteResult) { + + } } diff --git a/ts/smartdata.classes.dbdoc.ts b/ts/smartdata.classes.dbdoc.ts index 76f999b..0cff3f8 100644 --- a/ts/smartdata.classes.dbdoc.ts +++ b/ts/smartdata.classes.dbdoc.ts @@ -28,7 +28,7 @@ export class DbDoc { /** * how the Doc in memory was created, may prove useful later. */ - creationType: TDocCreation + creationStatus: TDocCreation = 'new' /** * an array of saveable properties of a doc @@ -40,6 +40,11 @@ export class DbDoc { */ name: string + /** + * primary id in the database + */ + dbId: string + /** * class constructor */ @@ -52,17 +57,18 @@ export class DbDoc { * saves this instance but not any connected items * may lead to data inconsistencies, but is faster */ - save () { - let saveableObject: any = {} // is not exposed to outside, so any is ok here - for (let propertyNameString of this.saveableProperties) { - saveableObject[ propertyNameString ] = this[ propertyNameString ] - } - switch (this.creationType) { + async save () { + let self: any = this + switch (this.creationStatus) { case 'db': - this.collection // TODO implement collection.update() + await this.collection.update(self) break case 'new': - this.collection.insertOne(saveableObject) + let writeResult = await this.collection.insert(self) + this.creationStatus = 'db' + break; + default: + console.error('neither new nor in db?') } } @@ -83,4 +89,12 @@ export class DbDoc { } } } + + createSavableObject () { + let saveableObject: any = {} // is not exposed to outside, so any is ok here + for (let propertyNameString of this.saveableProperties) { + saveableObject[ propertyNameString ] = this[ propertyNameString ] + } + return saveableObject + } } diff --git a/ts/smartdata.plugins.ts b/ts/smartdata.plugins.ts index b77bce5..e54dd7f 100644 --- a/ts/smartdata.plugins.ts +++ b/ts/smartdata.plugins.ts @@ -1,14 +1,15 @@ -import 'typings-global' import * as assert from 'assert' import * as beautylog from 'beautylog' import * as lodash from 'lodash' import * as rethinkDb from 'rethinkdb' import * as smartq from 'smartq' +import * as smartstring from 'smartstring' export { assert, beautylog, lodash, smartq, - rethinkDb + rethinkDb, + smartstring } diff --git a/yarn.lock b/yarn.lock index 8edf125..7d09fcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,36 +6,33 @@ version "4.0.3" resolved "https://registry.yarnpkg.com/@types/code/-/code-4.0.3.tgz#9c4de39f86eb3eba070146d2dab7dbc3f8eac35f" +"@types/events@*": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-1.1.0.tgz#93b1be91f63c184450385272c47b6496fd028e02" + "@types/fs-extra@4.x.x": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.5.tgz#8aa6033c0e87c653b09a6711686916864b48ec9e" + version "4.0.7" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.7.tgz#02533262386b5a6b9a49797dc82feffdf269140a" dependencies: "@types/node" "*" "@types/glob@*": - version "5.0.33" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.33.tgz#3dff7c6ce09d65abe919c7961dc3dee016f36ad7" + version "5.0.34" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.34.tgz#ee626c9be3da877d717911c6101eee0a9871bbf4" dependencies: + "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" -"@types/lodash@^4.14.55", "@types/lodash@^4.14.74": - version "4.14.85" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.85.tgz#a16fbf942422f6eca5622b6910492c496c35069b" - -"@types/lodash@^4.14.92": +"@types/lodash@^4.14.55", "@types/lodash@^4.14.74", "@types/lodash@^4.14.92": version "4.14.92" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.92.tgz#6e3cb0b71a1e12180a47a42a744e856c3ae99a57" "@types/minimatch@*", "@types/minimatch@3.x.x": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.1.tgz#b683eb60be358304ef146f5775db4c0e3696a550" + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" -"@types/node@*", "@types/node@^8.0.33": - version "8.0.53" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" - -"@types/node@^8.5.7": +"@types/node@*", "@types/node@^8.0.33", "@types/node@^8.5.7": version "8.5.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.7.tgz#9c498c35af354dcfbca3790fb2e81129e93cf0e2" @@ -46,22 +43,18 @@ "@types/node" "*" "@types/shelljs@^0.7.4": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.6.tgz#4ac7ca01c191ba65b8e2bf50543c5560084d8d27" + version "0.7.7" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.7.tgz#1f7bfa28947661afea06365db9b1135bbc903ec4" dependencies: "@types/glob" "*" "@types/node" "*" "@types/vinyl@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.1.tgz#6b414dfdcd4a785e8e76e87565ed29e79490d9b7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.2.tgz#4f3b8dae8f5828d3800ef709b0cff488ee852de3" dependencies: "@types/node" "*" -"@types/which@^1.0.28": - version "1.0.28" - resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6" - ansi-256-colors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a" @@ -207,8 +200,8 @@ early@^2.1.1: typings-global "^1.0.16" es-abstract@^1.5.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -225,8 +218,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es6-error@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98" + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" escape-string-regexp@^1.0.2: version "1.0.5" @@ -251,8 +244,8 @@ foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" fs-extra@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -315,8 +308,8 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" interpret@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" is-buffer@^1.1.5: version "1.1.6" @@ -354,13 +347,9 @@ isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - js-base64@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" + version "2.4.0" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa" js-yaml@^3.10.0: version "3.10.0" @@ -398,8 +387,8 @@ leakage@^0.3.0: pretty-bytes "^4.0.2" left-pad@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" lik@^2.0.2: version "2.0.2" @@ -598,10 +587,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - shelljs@^0.7.8: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" @@ -668,23 +653,12 @@ smartq@^1.1.1, smartq@^1.1.6: util.promisify "^1.0.0" smartrequest@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/smartrequest/-/smartrequest-1.0.6.tgz#a006454332453b0a70d38a003a29963d039a7783" + version "1.0.8" + resolved "https://registry.yarnpkg.com/smartrequest/-/smartrequest-1.0.8.tgz#9af18dde34efa7d43b4ecfc92ccb157a98eda3b1" dependencies: smartq "^1.1.1" - typings-global "^1.0.17" -smartshell@^1.0.6: - version "1.0.19" - resolved "https://registry.yarnpkg.com/smartshell/-/smartshell-1.0.19.tgz#459c7a9fab8a25007848ffc711b7a817dd6ffc00" - dependencies: - "@types/which" "^1.0.28" - shelljs "^0.7.8" - smartq "^1.1.6" - typings-global "^1.0.23" - which "^1.3.0" - -smartstring@^2.0.24: +smartstring@^2.0.28: version "2.0.28" resolved "https://registry.yarnpkg.com/smartstring/-/smartstring-2.0.28.tgz#384b808dc3780eff0031ce7925c1b1668abbcad5" dependencies: @@ -761,12 +735,9 @@ through2@^2.0.1: readable-stream "^2.1.5" xtend "~4.0.1" -typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.17, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.23: - version "1.0.23" - resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.23.tgz#cdd085803049dd07d95b2e1475243c6b2db378ab" - dependencies: - semver "^5.3.0" - smartshell "^1.0.6" +typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19, typings-global@^1.0.20: + version "1.0.28" + resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.28.tgz#e28cc965476564cbc00e438739e0aa0735d323d4" universalify@^0.1.0: version "0.1.1" @@ -804,12 +775,6 @@ vinyl@^2.0.1: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - word-wrap@^1.0.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"