update to mongodb
This commit is contained in:
		
							
								
								
									
										29
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								README.md
									
									
									
									
									
								
							@@ -37,11 +37,11 @@ This is why we started smartdata.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
How RethinkDB's terms map to the ones of smartdata:
 | 
					How RethinkDB's terms map to the ones of smartdata:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| RethinkDB term | smartdata class   |
 | 
					| MongoDb term   | smartdata class               |
 | 
				
			||||||
| -------------- | ----------------- |
 | 
					| -------------- | ------------------------------|
 | 
				
			||||||
| Database       | smartdata.Db      |
 | 
					| Database       | smartdata.SmartdataDb         |
 | 
				
			||||||
| Table          | smartdata.DbTable |
 | 
					| Collection     | smartdata.SmartdataCollection |
 | 
				
			||||||
| Document       | smartdata.DbDoc   |
 | 
					| Document       | smartdata.SmartadataDoc       |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### class Db
 | 
					### class Db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,18 +50,13 @@ represents a Database. Naturally it has .connect() etc. methods on it.
 | 
				
			|||||||
```typescript
 | 
					```typescript
 | 
				
			||||||
import * as smartdata from 'smartdata';
 | 
					import * as smartdata from 'smartdata';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let myRethinkDb1 = new smartdata.Db({
 | 
					const smartdataDb = new smartdata.SmartdataDb({
 | 
				
			||||||
  db: 'test',
 | 
					  mongoDbUrl: '//someurl',
 | 
				
			||||||
  host: 'https://some',
 | 
					  mongoDbName: 'myDatabase',
 | 
				
			||||||
  user: 'testuser',
 | 
					  mongoDbPass: 'mypassword'
 | 
				
			||||||
  password: 'testpass',
 | 
					 | 
				
			||||||
  port: 1234
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// in case you need to support a proprietory ssl cert (e.g. compose.com):
 | 
					smartdataDb.connect();
 | 
				
			||||||
myRethinkDb1.setSsl(process.env.RDB_CERT, 'base64');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
myDb1.connect();
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### class DbCollection
 | 
					### class DbCollection
 | 
				
			||||||
@@ -74,8 +69,8 @@ So to get to get access to a specific collection you document
 | 
				
			|||||||
```typescript
 | 
					```typescript
 | 
				
			||||||
// continues from the block before...
 | 
					// continues from the block before...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@smartdata.Table(myRethinkDb1)
 | 
					@smartdata.Collection(smartdataDb)
 | 
				
			||||||
class MyObject extends smartdata.DbDoc<myObject> {
 | 
					class MyObject extends smartdata.DbDoc<MyObject> {
 | 
				
			||||||
  // read the next block about DbDoc
 | 
					  // read the next block about DbDoc
 | 
				
			||||||
  @smartdata.svDb() property1: string; // @smartdata.svDb() marks the property for db save
 | 
					  @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()
 | 
					  property2: number; // this one is not marked, so it won't be save upon calling this.save()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								dist/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								dist/index.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +0,0 @@
 | 
				
			|||||||
export * from "./smartdata.classes.db";
 | 
					 | 
				
			||||||
export * from "./smartdata.classes.dbtable";
 | 
					 | 
				
			||||||
export * from "./smartdata.classes.dbdoc";
 | 
					 | 
				
			||||||
							
								
								
									
										9
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							@@ -1,9 +0,0 @@
 | 
				
			|||||||
"use strict";
 | 
					 | 
				
			||||||
function __export(m) {
 | 
					 | 
				
			||||||
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
__export(require("./smartdata.classes.db"));
 | 
					 | 
				
			||||||
__export(require("./smartdata.classes.dbtable"));
 | 
					 | 
				
			||||||
__export(require("./smartdata.classes.dbdoc"));
 | 
					 | 
				
			||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF1QztBQUN2QyxpREFBNEM7QUFDNUMsK0NBQTBDIn0=
 | 
					 | 
				
			||||||
							
								
								
									
										36
									
								
								dist/smartdata.classes.db.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								dist/smartdata.classes.db.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,36 +0,0 @@
 | 
				
			|||||||
import * as plugins from "./smartdata.plugins";
 | 
					 | 
				
			||||||
import { Objectmap } from "lik";
 | 
					 | 
				
			||||||
import { DbTable } from "./smartdata.classes.dbtable";
 | 
					 | 
				
			||||||
import { ConnectionOptions as IConnectionOptions } from "rethinkdb";
 | 
					 | 
				
			||||||
export { IConnectionOptions };
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * interface - indicates the connection status of the db
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export declare type TConnectionStatus = "initial" | "disconnected" | "connected" | "failed";
 | 
					 | 
				
			||||||
export declare class Db {
 | 
					 | 
				
			||||||
    dbName: string;
 | 
					 | 
				
			||||||
    connectionOptions: plugins.rethinkDb.ConnectionOptions;
 | 
					 | 
				
			||||||
    dbConnection: plugins.rethinkDb.Connection;
 | 
					 | 
				
			||||||
    status: TConnectionStatus;
 | 
					 | 
				
			||||||
    dbTablesMap: Objectmap<DbTable<any>>;
 | 
					 | 
				
			||||||
    constructor(connectionOptionsArg: IConnectionOptions);
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * supply additional SSl options needed to connect to certain Rethink DB servers (e.g. compose.io)
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    setSsl(certificateStringArg: string, formatArg: "base64" | "clearText"): void;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * connects to the database that was specified during instance creation
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    connect(): Promise<any>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * closes the connection to the databse
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    close(): Promise<any>;
 | 
					 | 
				
			||||||
    addTable(dbTableArg: DbTable<any>): void;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets a table's name and returns smartdata's DbTable class
 | 
					 | 
				
			||||||
     * @param nameArg
 | 
					 | 
				
			||||||
     * @returns DbTable
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getDbTableByName<T>(nameArg: string): Promise<DbTable<T>>;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										76
									
								
								dist/smartdata.classes.db.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								dist/smartdata.classes.db.js
									
									
									
									
										vendored
									
									
								
							@@ -1,76 +0,0 @@
 | 
				
			|||||||
"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 plugins = require("./smartdata.plugins");
 | 
					 | 
				
			||||||
const lik_1 = require("lik");
 | 
					 | 
				
			||||||
class Db {
 | 
					 | 
				
			||||||
    constructor(connectionOptionsArg) {
 | 
					 | 
				
			||||||
        this.dbTablesMap = new lik_1.Objectmap();
 | 
					 | 
				
			||||||
        this.dbName = connectionOptionsArg.db;
 | 
					 | 
				
			||||||
        this.connectionOptions = connectionOptionsArg;
 | 
					 | 
				
			||||||
        this.status = "initial";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * supply additional SSl options needed to connect to certain Rethink DB servers (e.g. compose.io)
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    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
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    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}`);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * closes the connection to the databse
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    close() {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            yield this.dbConnection.close();
 | 
					 | 
				
			||||||
            this.status = "disconnected";
 | 
					 | 
				
			||||||
            plugins.beautylog.ok(`disconnected from database ${this.dbName}`);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // handle table to class distribution
 | 
					 | 
				
			||||||
    addTable(dbTableArg) {
 | 
					 | 
				
			||||||
        this.dbTablesMap.add(dbTableArg);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets a table's name and returns smartdata's DbTable class
 | 
					 | 
				
			||||||
     * @param nameArg
 | 
					 | 
				
			||||||
     * @returns DbTable
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getDbTableByName(nameArg) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            let resultCollection = this.dbTablesMap.find(dbTableArg => {
 | 
					 | 
				
			||||||
                return dbTableArg.tableName === nameArg;
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            return resultCollection;
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
exports.Db = Db;
 | 
					 | 
				
			||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQStDO0FBQy9DLDZCQUFnQztBQW1CaEM7SUFPRSxZQUFZLG9CQUF3QztRQUZwRCxnQkFBVyxHQUFHLElBQUksZUFBUyxFQUFnQixDQUFDO1FBRzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsb0JBQTRCLEVBQUUsU0FBaUM7UUFDcEUsSUFBSSxpQkFBeUIsQ0FBQztRQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNuRCxvQkFBb0IsQ0FDckIsQ0FBQztRQUNKLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDOUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7O09BRUc7SUFDRyxPQUFPOztZQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDMUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMseUJBQXlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0csS0FBSzs7WUFDVCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7WUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsOEJBQThCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7S0FBQTtJQUVELHFDQUFxQztJQUVyQyxRQUFRLENBQUMsVUFBd0I7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDRyxnQkFBZ0IsQ0FBSSxPQUFlOztZQUN2QyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDMUIsQ0FBQztLQUFBO0NBQ0Y7QUFwRUQsZ0JBb0VDIn0=
 | 
					 | 
				
			||||||
							
								
								
									
										46
									
								
								dist/smartdata.classes.dbdoc.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								dist/smartdata.classes.dbdoc.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,46 +0,0 @@
 | 
				
			|||||||
import { Objectmap } from "lik";
 | 
					 | 
				
			||||||
import { DbTable } from "./smartdata.classes.dbtable";
 | 
					 | 
				
			||||||
export declare type TDocCreation = "db" | "new" | "mixed";
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * saveable - saveable decorator to be used on class properties
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export declare function svDb(): (target: DbDoc<any>, key: string) => void;
 | 
					 | 
				
			||||||
export declare class DbDoc<T> {
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * the collection object an Doc belongs to
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    collection: DbTable<T>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * how the Doc in memory was created, may prove useful later.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    creationStatus: TDocCreation;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * an array of saveable properties of a doc
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    saveableProperties: string[];
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * name
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    name: string;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * primary id in the database
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    dbId: string;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * class constructor
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    constructor();
 | 
					 | 
				
			||||||
    static getInstances<T>(filterArg: any): Promise<T[]>;
 | 
					 | 
				
			||||||
    static getInstance<T>(filterArg: any): Promise<T>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * saves this instance but not any connected items
 | 
					 | 
				
			||||||
     * may lead to data inconsistencies, but is faster
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    save(): Promise<void>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * also store any referenced objects to DB
 | 
					 | 
				
			||||||
     * better for data consistency
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    saveDeep(savedMapArg?: Objectmap<DbDoc<any>>): void;
 | 
					 | 
				
			||||||
    createSavableObject(): any;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										109
									
								
								dist/smartdata.classes.dbdoc.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										109
									
								
								dist/smartdata.classes.dbdoc.js
									
									
									
									
										vendored
									
									
								
							@@ -1,109 +0,0 @@
 | 
				
			|||||||
"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");
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * saveable - saveable decorator to be used on class properties
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function svDb() {
 | 
					 | 
				
			||||||
    return (target, key) => {
 | 
					 | 
				
			||||||
        console.log("called sva");
 | 
					 | 
				
			||||||
        if (!target.saveableProperties) {
 | 
					 | 
				
			||||||
            target.saveableProperties = [];
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        target.saveableProperties.push(key);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
exports.svDb = svDb;
 | 
					 | 
				
			||||||
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["dbTable"];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    static getInstances(filterArg) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            let self = this; // fool typesystem
 | 
					 | 
				
			||||||
            let referenceTable = self.dbTable;
 | 
					 | 
				
			||||||
            const foundDocs = yield referenceTable.find(filterArg);
 | 
					 | 
				
			||||||
            const returnArray = [];
 | 
					 | 
				
			||||||
            for (let item of foundDocs) {
 | 
					 | 
				
			||||||
                let newInstance = new this();
 | 
					 | 
				
			||||||
                for (let key in item) {
 | 
					 | 
				
			||||||
                    if (key !== 'id') {
 | 
					 | 
				
			||||||
                        newInstance[key] = item[key];
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                returnArray.push(newInstance);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return returnArray;
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    static getInstance(filterArg) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            let result = yield this.getInstances(filterArg);
 | 
					 | 
				
			||||||
            if (result && result.length > 0) {
 | 
					 | 
				
			||||||
                return result[0];
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * saves this instance but not any connected items
 | 
					 | 
				
			||||||
     * may lead to data inconsistencies, but is faster
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    save() {
 | 
					 | 
				
			||||||
        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
 | 
					 | 
				
			||||||
     * better for data consistency
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    saveDeep(savedMapArg = null) {
 | 
					 | 
				
			||||||
        if (!savedMapArg) {
 | 
					 | 
				
			||||||
            savedMapArg = new lik_1.Objectmap();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        savedMapArg.add(this);
 | 
					 | 
				
			||||||
        this.save();
 | 
					 | 
				
			||||||
        for (let propertyKey in this) {
 | 
					 | 
				
			||||||
            let property = this[propertyKey];
 | 
					 | 
				
			||||||
            if (property instanceof DbDoc && !savedMapArg.checkForObject(property)) {
 | 
					 | 
				
			||||||
                property.saveDeep(savedMapArg);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEuY2xhc3Nlcy5kYmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRUEsNkJBQWdDO0FBT2hDOztHQUVHO0FBQ0g7SUFDRSxNQUFNLENBQUMsQ0FBQyxNQUFrQixFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVJELG9CQVFDO0FBRUQ7SUEwQkU7O09BRUc7SUFDSDtRQXZCQTs7V0FFRztRQUNILG1CQUFjLEdBQWlCLEtBQUssQ0FBQztRQXFCbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxDQUFPLFlBQVksQ0FBSSxTQUFTOztZQUNwQyxJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsQ0FBQyxrQkFBa0I7WUFDeEMsSUFBSSxjQUFjLEdBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLFNBQVMs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
 | 
					 | 
				
			||||||
							
								
								
									
										51
									
								
								dist/smartdata.classes.dbtable.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								dist/smartdata.classes.dbtable.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,51 +0,0 @@
 | 
				
			|||||||
import * as plugins from "./smartdata.plugins";
 | 
					 | 
				
			||||||
import { Db } from "./smartdata.classes.db";
 | 
					 | 
				
			||||||
import { DbDoc } from "./smartdata.classes.dbdoc";
 | 
					 | 
				
			||||||
import { WriteResult } from "rethinkdb";
 | 
					 | 
				
			||||||
export interface IFindOptions {
 | 
					 | 
				
			||||||
    limit?: number;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export interface IDocValidationFunc<T> {
 | 
					 | 
				
			||||||
    (doc: T): boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * This is a decorator that will tell the decorated class what dbTable to use
 | 
					 | 
				
			||||||
 * @param db
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export declare function Table(db: Db): (constructor: any) => void;
 | 
					 | 
				
			||||||
export declare class DbTable<T> {
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * the collection that is used
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    table: plugins.rethinkDb.Table;
 | 
					 | 
				
			||||||
    objectValidation: IDocValidationFunc<T>;
 | 
					 | 
				
			||||||
    tableName: string;
 | 
					 | 
				
			||||||
    db: Db;
 | 
					 | 
				
			||||||
    constructor(collectedClassArg: T & DbDoc<T>, dbArg: Db);
 | 
					 | 
				
			||||||
    init(): Promise<void>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * adds a validation function that all newly inserted and updated objects have to pass
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    addDocValidation(funcArg: IDocValidationFunc<T>): void;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * finds an object in the DbCollection
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    find(filterObject: any): Promise<any>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * create an object in the database
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    insert(dbDocArg: T & DbDoc<T>): Promise<WriteResult>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * inserts object into the DbCollection
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    update(dbDocArg: T & DbDoc<T>): Promise<WriteResult>;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * checks a Doc for constraints
 | 
					 | 
				
			||||||
     * if this.objectValidation is not set it passes.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private checkDoc(docArg);
 | 
					 | 
				
			||||||
    extractKey(writeResult: WriteResult): void;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										116
									
								
								dist/smartdata.classes.dbtable.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								dist/smartdata.classes.dbtable.js
									
									
									
									
										vendored
									
									
								
							@@ -1,116 +0,0 @@
 | 
				
			|||||||
"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 plugins = require("./smartdata.plugins");
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * This is a decorator that will tell the decorated class what dbTable to use
 | 
					 | 
				
			||||||
 * @param db
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function Table(db) {
 | 
					 | 
				
			||||||
    return function (constructor) {
 | 
					 | 
				
			||||||
        constructor["dbTable"] = new DbTable(constructor, db);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
exports.Table = Table;
 | 
					 | 
				
			||||||
class DbTable {
 | 
					 | 
				
			||||||
    constructor(collectedClassArg, dbArg) {
 | 
					 | 
				
			||||||
        this.objectValidation = null;
 | 
					 | 
				
			||||||
        // tell the collection where it belongs
 | 
					 | 
				
			||||||
        this.tableName = collectedClassArg.name;
 | 
					 | 
				
			||||||
        this.db = dbArg;
 | 
					 | 
				
			||||||
        // 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
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    addDocValidation(funcArg) {
 | 
					 | 
				
			||||||
        this.objectValidation = funcArg;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * finds an object in the DbCollection
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    find(filterObject) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            yield this.init();
 | 
					 | 
				
			||||||
            let cursor = yield plugins.rethinkDb
 | 
					 | 
				
			||||||
                .table(this.tableName)
 | 
					 | 
				
			||||||
                .filter(filterObject)
 | 
					 | 
				
			||||||
                .run(this.db.dbConnection);
 | 
					 | 
				
			||||||
            return yield cursor.toArray();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 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
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    update(dbDocArg) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
					 | 
				
			||||||
            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);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * checks a Doc for constraints
 | 
					 | 
				
			||||||
     * if this.objectValidation is not set it passes.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    checkDoc(docArg) {
 | 
					 | 
				
			||||||
        let done = plugins.smartq.defer();
 | 
					 | 
				
			||||||
        let validationResult = true;
 | 
					 | 
				
			||||||
        if (this.objectValidation) {
 | 
					 | 
				
			||||||
            validationResult = this.objectValidation(docArg);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (validationResult) {
 | 
					 | 
				
			||||||
            done.resolve();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            done.reject("validation of object did not pass");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return done.promise;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    extractKey(writeResult) { }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
exports.DbTable = DbTable;
 | 
					 | 
				
			||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJ0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0ZGF0YS5jbGFzc2VzLmRidGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtDQUErQztBQWtCL0M7OztHQUdHO0FBQ0gsZUFBc0IsRUFBTTtJQUMxQixNQUFNLENBQUMsVUFBUyxXQUFXO1FBQ3pCLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUpELHNCQUlDO0FBRUQ7SUFTRSxZQUFZLGlCQUErQixFQUFFLEtBQVM7UUFKdEQscUJBQWdCLEdBQTBCLElBQUksQ0FBQztRQUs3Qyx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFaEIsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFSyxJQUFJOztZQUNSLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLDZDQUE2QztnQkFDN0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUztxQkFDNUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO3FCQUNsQixTQUFTLEVBQUU7cUJBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdCLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxPQUFPLENBQUMsU0FBUzt5QkFDcEIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO3lCQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzt5QkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsQ0FBQztLQUFBO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxPQUE4QjtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNHLElBQUksQ0FBQyxZQUFpQjs7WUFDMUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUztpQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7aUJBQ3JCLE1BQU0sQ0FBQyxZQUFZLENBQUM7aUJBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNHLE1BQU0sQ0FBQyxRQUFzQjs7WUFDakMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxTQUFTO2lCQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNHLE1BQU0sQ0FBQyxRQUFzQjs7WUFDakMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxTQUFTO2lCQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFRDs7O09BR0c7SUFDSyxRQUFRLENBQUMsTUFBUztRQUN4QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBUSxDQUFDO1FBQ3hDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUF3QixJQUFHLENBQUM7Q0FDeEM7QUFsR0QsMEJBa0dDIn0=
 | 
					 | 
				
			||||||
							
								
								
									
										7
									
								
								dist/smartdata.plugins.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								dist/smartdata.plugins.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,7 +0,0 @@
 | 
				
			|||||||
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, smartstring };
 | 
					 | 
				
			||||||
							
								
								
									
										15
									
								
								dist/smartdata.plugins.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								dist/smartdata.plugins.js
									
									
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
				
			|||||||
"use strict";
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
const assert = require("assert");
 | 
					 | 
				
			||||||
exports.assert = assert;
 | 
					 | 
				
			||||||
const beautylog = require("beautylog");
 | 
					 | 
				
			||||||
exports.beautylog = beautylog;
 | 
					 | 
				
			||||||
const lodash = require("lodash");
 | 
					 | 
				
			||||||
exports.lodash = lodash;
 | 
					 | 
				
			||||||
const rethinkDb = require("rethinkdb");
 | 
					 | 
				
			||||||
exports.rethinkDb = rethinkDb;
 | 
					 | 
				
			||||||
const smartq = require("smartq");
 | 
					 | 
				
			||||||
exports.smartq = smartq;
 | 
					 | 
				
			||||||
const smartstring = require("smartstring");
 | 
					 | 
				
			||||||
exports.smartstring = smartstring;
 | 
					 | 
				
			||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhdGEucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQU94Qix3QkFBTTtBQU5mLHVDQUF1QztBQU10Qiw4QkFBUztBQUwxQixpQ0FBaUM7QUFLTCx3QkFBTTtBQUpsQyx1Q0FBdUM7QUFJSyw4QkFBUztBQUhyRCxpQ0FBaUM7QUFHRyx3QkFBTTtBQUYxQywyQ0FBMkM7QUFFWSxrQ0FBVyJ9
 | 
					 | 
				
			||||||
							
								
								
									
										160
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										160
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "smartdata",
 | 
					  "name": "@pushrocks/smartdata",
 | 
				
			||||||
  "version": "3.0.1",
 | 
					  "version": "3.0.1",
 | 
				
			||||||
  "lockfileVersion": 1,
 | 
					  "lockfileVersion": 1,
 | 
				
			||||||
  "requires": true,
 | 
					  "requires": true,
 | 
				
			||||||
@@ -14,6 +14,17 @@
 | 
				
			|||||||
        "nan": "^2.9.2"
 | 
					        "nan": "^2.9.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@gitzone/tsrun": {
 | 
				
			||||||
 | 
					      "version": "1.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@gitzone/tsrun/-/tsrun-1.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-EqzaSd30hGC6wz8blC148nWQzdBFgvmbfAtjpaho7JXiPRaRsgDHv+iH8f2i6Xvpy1GWD0eXCUzwZoLoNvXkJA==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "smartfile": "^4.2.28",
 | 
				
			||||||
 | 
					        "ts-node": "^7.0.0",
 | 
				
			||||||
 | 
					        "typescript": "^2.9.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@pushrocks/smartlog": {
 | 
					    "@pushrocks/smartlog": {
 | 
				
			||||||
      "version": "1.0.6",
 | 
					      "version": "1.0.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@pushrocks/smartlog/-/smartlog-1.0.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@pushrocks/smartlog/-/smartlog-1.0.6.tgz",
 | 
				
			||||||
@@ -78,17 +89,6 @@
 | 
				
			|||||||
        "@types/node": "*"
 | 
					        "@types/node": "*"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "@types/glob": {
 | 
					 | 
				
			||||||
      "version": "5.0.35",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					 | 
				
			||||||
        "@types/events": "*",
 | 
					 | 
				
			||||||
        "@types/minimatch": "*",
 | 
					 | 
				
			||||||
        "@types/node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "@types/lodash": {
 | 
					    "@types/lodash": {
 | 
				
			||||||
      "version": "4.14.110",
 | 
					      "version": "4.14.110",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.110.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.110.tgz",
 | 
				
			||||||
@@ -114,16 +114,6 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q=="
 | 
					      "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "@types/shelljs": {
 | 
					 | 
				
			||||||
      "version": "0.8.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-vs1hCC8RxLHRu2bwumNyYRNrU3o8BtZhLysH5A4I98iYmA2APl6R3uNQb5ihl+WiwH0xdC9LLO+vRrXLs/Kyxg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					 | 
				
			||||||
        "@types/glob": "*",
 | 
					 | 
				
			||||||
        "@types/node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "@types/vinyl": {
 | 
					    "@types/vinyl": {
 | 
				
			||||||
      "version": "2.0.2",
 | 
					      "version": "2.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz",
 | 
				
			||||||
@@ -148,6 +138,12 @@
 | 
				
			|||||||
        "sprintf-js": "~1.0.2"
 | 
					        "sprintf-js": "~1.0.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "arrify": {
 | 
				
			||||||
 | 
					      "version": "1.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "assertion-error": {
 | 
					    "assertion-error": {
 | 
				
			||||||
      "version": "1.1.0",
 | 
					      "version": "1.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
 | 
				
			||||||
@@ -189,6 +185,12 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
 | 
				
			||||||
      "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
 | 
					      "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "buffer-from": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "chai": {
 | 
					    "chai": {
 | 
				
			||||||
      "version": "4.1.2",
 | 
					      "version": "4.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
 | 
				
			||||||
@@ -287,6 +289,12 @@
 | 
				
			|||||||
        "object-keys": "^1.0.8"
 | 
					        "object-keys": "^1.0.8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "diff": {
 | 
				
			||||||
 | 
					      "version": "3.5.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "early": {
 | 
					    "early": {
 | 
				
			||||||
      "version": "2.1.1",
 | 
					      "version": "2.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/early/-/early-2.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/early/-/early-2.1.1.tgz",
 | 
				
			||||||
@@ -427,12 +435,6 @@
 | 
				
			|||||||
      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
 | 
					      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "interpret": {
 | 
					 | 
				
			||||||
      "version": "1.1.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "is-buffer": {
 | 
					    "is-buffer": {
 | 
				
			||||||
      "version": "1.1.6",
 | 
					      "version": "1.1.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
 | 
				
			||||||
@@ -560,6 +562,12 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
 | 
				
			||||||
      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
 | 
					      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "make-error": {
 | 
				
			||||||
 | 
					      "version": "1.3.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "minimatch": {
 | 
					    "minimatch": {
 | 
				
			||||||
      "version": "3.0.4",
 | 
					      "version": "3.0.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
 | 
				
			||||||
@@ -574,6 +582,23 @@
 | 
				
			|||||||
      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
 | 
					      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "mkdirp": {
 | 
				
			||||||
 | 
					      "version": "0.5.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "minimist": "0.0.8"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "minimist": {
 | 
				
			||||||
 | 
					          "version": "0.0.8",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
 | 
				
			||||||
 | 
					          "dev": true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "mongodb": {
 | 
					    "mongodb": {
 | 
				
			||||||
      "version": "3.1.1",
 | 
					      "version": "3.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.1.tgz",
 | 
				
			||||||
@@ -638,12 +663,6 @@
 | 
				
			|||||||
      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
 | 
					      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "path-parse": {
 | 
					 | 
				
			||||||
      "version": "1.0.5",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "pathval": {
 | 
					    "pathval": {
 | 
				
			||||||
      "version": "1.1.0",
 | 
					      "version": "1.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
 | 
				
			||||||
@@ -703,15 +722,6 @@
 | 
				
			|||||||
        "util-deprecate": "~1.0.1"
 | 
					        "util-deprecate": "~1.0.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "rechoir": {
 | 
					 | 
				
			||||||
      "version": "0.6.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					 | 
				
			||||||
        "resolve": "^1.1.6"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "reflect-metadata": {
 | 
					    "reflect-metadata": {
 | 
				
			||||||
      "version": "0.1.12",
 | 
					      "version": "0.1.12",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz",
 | 
				
			||||||
@@ -744,15 +754,6 @@
 | 
				
			|||||||
        "semver": "^5.1.0"
 | 
					        "semver": "^5.1.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "resolve": {
 | 
					 | 
				
			||||||
      "version": "1.8.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					 | 
				
			||||||
        "path-parse": "^1.0.5"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "resolve-from": {
 | 
					    "resolve-from": {
 | 
				
			||||||
      "version": "2.0.0",
 | 
					      "version": "2.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
 | 
				
			||||||
@@ -783,17 +784,6 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
 | 
					      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "shelljs": {
 | 
					 | 
				
			||||||
      "version": "0.8.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					 | 
				
			||||||
        "glob": "^7.0.0",
 | 
					 | 
				
			||||||
        "interpret": "^1.0.0",
 | 
					 | 
				
			||||||
        "rechoir": "^0.6.2"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "smartchai": {
 | 
					    "smartchai": {
 | 
				
			||||||
      "version": "2.0.1",
 | 
					      "version": "2.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/smartchai/-/smartchai-2.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/smartchai/-/smartchai-2.0.1.tgz",
 | 
				
			||||||
@@ -876,6 +866,22 @@
 | 
				
			|||||||
        "typings-global": "^1.0.20"
 | 
					        "typings-global": "^1.0.20"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "source-map": {
 | 
				
			||||||
 | 
					      "version": "0.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "source-map-support": {
 | 
				
			||||||
 | 
					      "version": "0.5.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "buffer-from": "^1.0.0",
 | 
				
			||||||
 | 
					        "source-map": "^0.6.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "sprintf-js": {
 | 
					    "sprintf-js": {
 | 
				
			||||||
      "version": "1.0.3",
 | 
					      "version": "1.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
 | 
				
			||||||
@@ -942,12 +948,34 @@
 | 
				
			|||||||
        "smartq": "^1.1.8"
 | 
					        "smartq": "^1.1.8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "ts-node": {
 | 
				
			||||||
 | 
					      "version": "7.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-klJsfswHP0FuOLsvBZ/zzCfUvakOSSxds78mVeK7I+qP76YWtxf16hEZsp3U+b0kIo82R5UatGFeblYMqabb2Q==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "arrify": "^1.0.0",
 | 
				
			||||||
 | 
					        "buffer-from": "^1.1.0",
 | 
				
			||||||
 | 
					        "diff": "^3.1.0",
 | 
				
			||||||
 | 
					        "make-error": "^1.1.1",
 | 
				
			||||||
 | 
					        "minimist": "^1.2.0",
 | 
				
			||||||
 | 
					        "mkdirp": "^0.5.1",
 | 
				
			||||||
 | 
					        "source-map-support": "^0.5.6",
 | 
				
			||||||
 | 
					        "yn": "^2.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "type-detect": {
 | 
					    "type-detect": {
 | 
				
			||||||
      "version": "4.0.8",
 | 
					      "version": "4.0.8",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
 | 
				
			||||||
      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
 | 
					      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "typescript": {
 | 
				
			||||||
 | 
					      "version": "2.9.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "typings-global": {
 | 
					    "typings-global": {
 | 
				
			||||||
      "version": "1.0.28",
 | 
					      "version": "1.0.28",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/typings-global/-/typings-global-1.0.28.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/typings-global/-/typings-global-1.0.28.tgz",
 | 
				
			||||||
@@ -1006,6 +1034,12 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 | 
					      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "yn": {
 | 
				
			||||||
 | 
					      "version": "2.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
								
							@@ -6,9 +6,9 @@
 | 
				
			|||||||
  "main": "dist/index.js",
 | 
					  "main": "dist/index.js",
 | 
				
			||||||
  "typings": "dist/index.d.ts",
 | 
					  "typings": "dist/index.d.ts",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "test": "(npmts)",
 | 
					    "test": "tsrun test/test.ts",
 | 
				
			||||||
    "testLocal": "(npmdocker)",
 | 
					    "testLocal": "(npmdocker)",
 | 
				
			||||||
    "build": "echo \"Not needed for now\""
 | 
					    "build": "(npmts)"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
@@ -32,15 +32,9 @@
 | 
				
			|||||||
    "smartstring": "^2.0.28"
 | 
					    "smartstring": "^2.0.28"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@gitzone/tsrun": "^1.1.2",
 | 
				
			||||||
    "@types/node": "^10.5.2",
 | 
					    "@types/node": "^10.5.2",
 | 
				
			||||||
    "@types/shelljs": "^0.8.0",
 | 
					 | 
				
			||||||
    "qenv": "^1.1.7",
 | 
					    "qenv": "^1.1.7",
 | 
				
			||||||
    "shelljs": "^0.8.2",
 | 
					 | 
				
			||||||
    "tapbundle": "^2.0.2"
 | 
					    "tapbundle": "^2.0.2"
 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "config": {
 | 
					 | 
				
			||||||
    "commitizen": {
 | 
					 | 
				
			||||||
      "path": "./node_modules/cz-conventional-changelog"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								test/test.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								test/test.ts
									
									
									
									
									
								
							@@ -5,7 +5,7 @@ import { Qenv } from 'qenv';
 | 
				
			|||||||
let testQenv = new Qenv(process.cwd(), process.cwd() + '/.nogit/');
 | 
					let testQenv = new Qenv(process.cwd(), process.cwd() + '/.nogit/');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// the tested module
 | 
					// the tested module
 | 
				
			||||||
import * as smartdata from '../ts/index';
 | 
					import * as smartdata from '../ts';
 | 
				
			||||||
import { smartstring } from '../ts/smartdata.plugins';
 | 
					import { smartstring } from '../ts/smartdata.plugins';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// =======================================
 | 
					// =======================================
 | 
				
			||||||
@@ -15,7 +15,7 @@ import { smartstring } from '../ts/smartdata.plugins';
 | 
				
			|||||||
let testDb = new smartdata.SmartdataDb({
 | 
					let testDb = new smartdata.SmartdataDb({
 | 
				
			||||||
  mongoDbName: process.env.MONGO_DBNAME,
 | 
					  mongoDbName: process.env.MONGO_DBNAME,
 | 
				
			||||||
  mongoDbUrl: process.env.MONGO_URL,
 | 
					  mongoDbUrl: process.env.MONGO_URL,
 | 
				
			||||||
  mongoPass: process.env.MONGO_PASS
 | 
					  mongoDbPass: process.env.MONGO_PASS
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tap.test('should establish a connection to the rethink Db cluster', async () => {
 | 
					tap.test('should establish a connection to the rethink Db cluster', async () => {
 | 
				
			||||||
@@ -30,8 +30,8 @@ tap.test('should establish a connection to the rethink Db cluster', async () =>
 | 
				
			|||||||
// Collections
 | 
					// Collections
 | 
				
			||||||
// ------
 | 
					// ------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@smartdata.Table(testDb)
 | 
					@smartdata.Collection(testDb)
 | 
				
			||||||
class Car extends smartdata.smartDataDbDoc<Car> {
 | 
					class Car extends smartdata.SmartDataDbDoc<Car> {
 | 
				
			||||||
  @smartdata.svDb() color: string;
 | 
					  @smartdata.svDb() color: string;
 | 
				
			||||||
  @smartdata.svDb() brand: string;
 | 
					  @smartdata.svDb() brand: string;
 | 
				
			||||||
  constructor(colorArg: string, brandArg: string) {
 | 
					  constructor(colorArg: string, brandArg: string) {
 | 
				
			||||||
@@ -47,10 +47,10 @@ tap.test('should save the car to the db', async () => {
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tap.test('expect to get instance of Car', async () => {
 | 
					tap.test('expect to get instance of Car', async () => {
 | 
				
			||||||
  let myCar = await Car.getInstances<Car>({
 | 
					  let myCars = await Car.getInstances<Car>({
 | 
				
			||||||
    brand: 'Volvo'
 | 
					    brand: 'Volvo'
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  expect(myCar[0].color).to.equal('red');
 | 
					  expect(myCars[0].color).to.equal('red');
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// =======================================
 | 
					// =======================================
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
export * from './smartdata.classes.db';
 | 
					export * from './smartdata.classes.db';
 | 
				
			||||||
export * from './smartdata.classes.dbtable';
 | 
					export * from './smartdata.classes.collection';
 | 
				
			||||||
export * from './smartdata.classes.dbdoc';
 | 
					export * from './smartdata.classes.doc';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import * as plugins from './smartdata.plugins';
 | 
					import * as plugins from './smartdata.plugins';
 | 
				
			||||||
import { SmartdataDb } from './smartdata.classes.db';
 | 
					import { SmartdataDb } from './smartdata.classes.db';
 | 
				
			||||||
import { smartDataDbDoc } from './smartdata.classes.dbdoc';
 | 
					import { SmartDataDbDoc } from './smartdata.classes.doc';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IFindOptions {
 | 
					export interface IFindOptions {
 | 
				
			||||||
  limit?: number;
 | 
					  limit?: number;
 | 
				
			||||||
@@ -17,9 +17,9 @@ export interface IDocValidationFunc<T> {
 | 
				
			|||||||
 * This is a decorator that will tell the decorated class what dbTable to use
 | 
					 * This is a decorator that will tell the decorated class what dbTable to use
 | 
				
			||||||
 * @param db
 | 
					 * @param db
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function Table(db: SmartdataDb) {
 | 
					export function Collection(db: SmartdataDb) {
 | 
				
			||||||
  return function(constructor) {
 | 
					  return function(constructor) {
 | 
				
			||||||
    constructor['mongoDbCollection'] = new SmartdataCollection(constructor, db);
 | 
					    constructor['smartdataCollection'] = new SmartdataCollection(constructor, db);
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,7 +32,7 @@ export class SmartdataCollection<T> {
 | 
				
			|||||||
  collectionName: string;
 | 
					  collectionName: string;
 | 
				
			||||||
  smartdataDb: SmartdataDb;
 | 
					  smartdataDb: SmartdataDb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(collectedClassArg: T & smartDataDbDoc<T>, smartDataDbArg: SmartdataDb) {
 | 
					  constructor(collectedClassArg: T & SmartDataDbDoc<T>, smartDataDbArg: SmartdataDb) {
 | 
				
			||||||
    // tell the collection where it belongs
 | 
					    // tell the collection where it belongs
 | 
				
			||||||
    this.collectionName = collectedClassArg.name;
 | 
					    this.collectionName = collectedClassArg.name;
 | 
				
			||||||
    this.smartdataDb = smartDataDbArg;
 | 
					    this.smartdataDb = smartDataDbArg;
 | 
				
			||||||
@@ -55,6 +55,7 @@ export class SmartdataCollection<T> {
 | 
				
			|||||||
        await this.smartdataDb.mongoDb.createCollection(this.collectionName);
 | 
					        await this.smartdataDb.mongoDb.createCollection(this.collectionName);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      this.mongoDbCollection = await this.smartdataDb.mongoDb.collection(this.collectionName);
 | 
					      this.mongoDbCollection = await this.smartdataDb.mongoDb.collection(this.collectionName);
 | 
				
			||||||
 | 
					      console.log(`Successfully initiated Collection ${this.collectionName}`)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -70,15 +71,18 @@ export class SmartdataCollection<T> {
 | 
				
			|||||||
   */
 | 
					   */
 | 
				
			||||||
  async find(filterObject: any): Promise<any> {
 | 
					  async find(filterObject: any): Promise<any> {
 | 
				
			||||||
    await this.init();
 | 
					    await this.init();
 | 
				
			||||||
 | 
					    const result = await this.mongoDbCollection.find(filterObject).toArray();
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * create an object in the database
 | 
					   * create an object in the database
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  async insert(dbDocArg: T & smartDataDbDoc<T>): Promise<any> {
 | 
					  async insert(dbDocArg: T & SmartDataDbDoc<T>): Promise<any> {
 | 
				
			||||||
    await this.init();
 | 
					    await this.init();
 | 
				
			||||||
    await this.checkDoc(dbDocArg);
 | 
					    await this.checkDoc(dbDocArg);
 | 
				
			||||||
    const saveableObject = await dbDocArg.createSavableObject();
 | 
					    const saveableObject = await dbDocArg.createSavableObject();
 | 
				
			||||||
 | 
					    console.log(saveableObject);
 | 
				
			||||||
    const result = await this.mongoDbCollection.insertOne(saveableObject);
 | 
					    const result = await this.mongoDbCollection.insertOne(saveableObject);
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -86,7 +90,7 @@ export class SmartdataCollection<T> {
 | 
				
			|||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * inserts object into the DbCollection
 | 
					   * inserts object into the DbCollection
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  async update(dbDocArg: T & smartDataDbDoc<T>): Promise<any> {
 | 
					  async update(dbDocArg: T & SmartDataDbDoc<T>): Promise<any> {
 | 
				
			||||||
    await this.init();
 | 
					    await this.init();
 | 
				
			||||||
    await this.checkDoc(dbDocArg);
 | 
					    await this.checkDoc(dbDocArg);
 | 
				
			||||||
    const saveableObject = await dbDocArg.createSavableObject();
 | 
					    const saveableObject = await dbDocArg.createSavableObject();
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import * as plugins from './smartdata.plugins';
 | 
					import * as plugins from './smartdata.plugins';
 | 
				
			||||||
import { Objectmap } from 'lik';
 | 
					import { Objectmap } from 'lik';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { SmartdataCollection } from './smartdata.classes.dbtable';
 | 
					import { SmartdataCollection } from './smartdata.classes.collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as mongoHelpers from './smartdata.mongohelpers';
 | 
					import * as mongoHelpers from './smartdata.mongohelpers';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,19 +48,20 @@ export class SmartdataDb {
 | 
				
			|||||||
    let finalConnectionUrl = this.smartdataOptions.mongoDbUrl;
 | 
					    let finalConnectionUrl = this.smartdataOptions.mongoDbUrl;
 | 
				
			||||||
    if (this.smartdataOptions.mongoDbPass) {
 | 
					    if (this.smartdataOptions.mongoDbPass) {
 | 
				
			||||||
      finalConnectionUrl = mongoHelpers.addPassword(
 | 
					      finalConnectionUrl = mongoHelpers.addPassword(
 | 
				
			||||||
        this.smartdataOptions.mongoDbName,
 | 
					        this.smartdataOptions.mongoDbUrl,
 | 
				
			||||||
        this.smartdataOptions.mongoDbPass
 | 
					        this.smartdataOptions.mongoDbPass
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    console.log(finalConnectionUrl);
 | 
				
			||||||
    this.mongoDbClient = await plugins.mongodb.MongoClient.connect(
 | 
					    this.mongoDbClient = await plugins.mongodb.MongoClient.connect(
 | 
				
			||||||
      finalConnectionUrl,
 | 
					      finalConnectionUrl,
 | 
				
			||||||
      {}
 | 
					      {
 | 
				
			||||||
 | 
					        useNewUrlParser: true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    this.mongoDb = this.mongoDbClient.db(this.smartdataOptions.mongoDbName);
 | 
					    this.mongoDb = this.mongoDbClient.db(this.smartdataOptions.mongoDbName);
 | 
				
			||||||
    this.status = 'connected';
 | 
					    this.status = 'connected';
 | 
				
			||||||
    plugins.smartlog
 | 
					    console.log(`Connected to database ${this.smartdataOptions.mongoDbName}`);
 | 
				
			||||||
      .getDefaultLogger()
 | 
					 | 
				
			||||||
      .info(`Connected to database ${this.smartdataOptions.mongoDbName}`);
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import * as plugins from './smartdata.plugins';
 | 
				
			|||||||
import { Objectmap } from 'lik';
 | 
					import { Objectmap } from 'lik';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { SmartdataDb } from './smartdata.classes.db';
 | 
					import { SmartdataDb } from './smartdata.classes.db';
 | 
				
			||||||
import { SmartdataCollection } from './smartdata.classes.dbtable';
 | 
					import { SmartdataCollection } from './smartdata.classes.collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type TDocCreation = 'db' | 'new' | 'mixed';
 | 
					export type TDocCreation = 'db' | 'new' | 'mixed';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11,7 +11,7 @@ export type TDocCreation = 'db' | 'new' | 'mixed';
 | 
				
			|||||||
 * saveable - saveable decorator to be used on class properties
 | 
					 * saveable - saveable decorator to be used on class properties
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function svDb() {
 | 
					export function svDb() {
 | 
				
			||||||
  return (target: smartDataDbDoc<any>, key: string) => {
 | 
					  return (target: SmartDataDbDoc<any>, key: string) => {
 | 
				
			||||||
    console.log('called sva');
 | 
					    console.log('called sva');
 | 
				
			||||||
    if (!target.saveableProperties) {
 | 
					    if (!target.saveableProperties) {
 | 
				
			||||||
      target.saveableProperties = [];
 | 
					      target.saveableProperties = [];
 | 
				
			||||||
@@ -20,7 +20,7 @@ export function svDb() {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class smartDataDbDoc<T> {
 | 
					export class SmartDataDbDoc<T> {
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * the collection object an Doc belongs to
 | 
					   * the collection object an Doc belongs to
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
@@ -51,13 +51,13 @@ export class smartDataDbDoc<T> {
 | 
				
			|||||||
   */
 | 
					   */
 | 
				
			||||||
  constructor() {
 | 
					  constructor() {
 | 
				
			||||||
    this.name = this.constructor['name'];
 | 
					    this.name = this.constructor['name'];
 | 
				
			||||||
    this.collection = this.constructor['dbTable'];
 | 
					    this.collection = this.constructor['smartdataCollection'];
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static async getInstances<T>(filterArg): Promise<T[]> {
 | 
					  static async getInstances<T>(filterArg): Promise<T[]> {
 | 
				
			||||||
    let self: any = this; // fool typesystem
 | 
					    let self: any = this; // fool typesystem
 | 
				
			||||||
    let referenceTable: SmartdataCollection<T> = self.dbTable;
 | 
					    let referenceMongoDBCollection: SmartdataCollection<T> = self.smartdataCollection;
 | 
				
			||||||
    const foundDocs = await referenceTable.find(filterArg);
 | 
					    const foundDocs = await referenceMongoDBCollection.find(filterArg);
 | 
				
			||||||
    const returnArray = [];
 | 
					    const returnArray = [];
 | 
				
			||||||
    for (let item of foundDocs) {
 | 
					    for (let item of foundDocs) {
 | 
				
			||||||
      let newInstance = new this();
 | 
					      let newInstance = new this();
 | 
				
			||||||
@@ -101,15 +101,15 @@ export class smartDataDbDoc<T> {
 | 
				
			|||||||
   * also store any referenced objects to DB
 | 
					   * also store any referenced objects to DB
 | 
				
			||||||
   * better for data consistency
 | 
					   * better for data consistency
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  saveDeep(savedMapArg: Objectmap<smartDataDbDoc<any>> = null) {
 | 
					  saveDeep(savedMapArg: Objectmap<SmartDataDbDoc<any>> = null) {
 | 
				
			||||||
    if (!savedMapArg) {
 | 
					    if (!savedMapArg) {
 | 
				
			||||||
      savedMapArg = new Objectmap<smartDataDbDoc<any>>();
 | 
					      savedMapArg = new Objectmap<SmartDataDbDoc<any>>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    savedMapArg.add(this);
 | 
					    savedMapArg.add(this);
 | 
				
			||||||
    this.save();
 | 
					    this.save();
 | 
				
			||||||
    for (let propertyKey in this) {
 | 
					    for (let propertyKey in this) {
 | 
				
			||||||
      let property: any = this[propertyKey];
 | 
					      let property: any = this[propertyKey];
 | 
				
			||||||
      if (property instanceof smartDataDbDoc && !savedMapArg.checkForObject(property)) {
 | 
					      if (property instanceof SmartDataDbDoc && !savedMapArg.checkForObject(property)) {
 | 
				
			||||||
        property.saveDeep(savedMapArg);
 | 
					        property.saveDeep(savedMapArg);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
							
								
								
									
										7
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    "experimentalDecorators": true,
 | 
				
			||||||
 | 
					    "target": "es2017",
 | 
				
			||||||
 | 
					    "module": "commonjs"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user