Compare commits

..

10 Commits

Author SHA1 Message Date
8b6c26f45a 3.1.53 2020-10-19 16:37:45 +00:00
97e82ed75a fix(core): update 2020-10-19 16:37:44 +00:00
03baffd9fd 3.1.52 2020-09-25 21:05:22 +00:00
f29ae67580 fix(core): update 2020-09-25 21:05:21 +00:00
e550a8dbd6 3.1.51 2020-09-25 20:42:39 +00:00
cf6ef25a8d fix(core): update 2020-09-25 20:42:38 +00:00
29c512b0cc 3.1.50 2020-09-24 14:10:55 +00:00
105f69d1c9 fix(core): update 2020-09-24 14:10:54 +00:00
4c375f8465 3.1.49 2020-09-10 10:36:01 +00:00
9466af6a4a fix(core): update 2020-09-10 10:36:00 +00:00
6 changed files with 57 additions and 40 deletions

42
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/smartdata", "name": "@pushrocks/smartdata",
"version": "3.1.48", "version": "3.1.53",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -2402,9 +2402,9 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "14.6.4", "version": "14.11.2",
"resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-14.6.4.tgz", "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-14.11.2.tgz",
"integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==" "integrity": "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA=="
}, },
"@types/parcel-bundler": { "@types/parcel-bundler": {
"version": "1.12.1", "version": "1.12.1",
@ -7673,11 +7673,11 @@
} }
}, },
"mongodb": { "mongodb": {
"version": "3.6.1", "version": "3.6.2",
"resolved": "https://verdaccio.lossless.one/mongodb/-/mongodb-3.6.1.tgz", "resolved": "https://verdaccio.lossless.one/mongodb/-/mongodb-3.6.2.tgz",
"integrity": "sha512-uH76Zzr5wPptnjEKJRQnwTsomtFOU/kQEU8a9hKHr2M7y9qVk7Q4Pkv0EQVp88742z9+RwvsdTw6dRjDZCNu1g==", "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==",
"requires": { "requires": {
"bl": "^2.2.0", "bl": "^2.2.1",
"bson": "^1.1.4", "bson": "^1.1.4",
"denque": "^1.4.1", "denque": "^1.4.1",
"require_optional": "^1.0.1", "require_optional": "^1.0.1",
@ -7686,18 +7686,18 @@
} }
}, },
"mongodb-memory-server": { "mongodb-memory-server": {
"version": "6.7.0", "version": "6.8.0",
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server/-/mongodb-memory-server-6.7.0.tgz", "resolved": "https://verdaccio.lossless.one/mongodb-memory-server/-/mongodb-memory-server-6.8.0.tgz",
"integrity": "sha512-vCXvDfi2Sbvg6/Ww0LBRbp5FZtqeFA1zLJeF4wlwU7IBwcop3zI75nq+dm6hlMzLGVIsLhN5fb1Ps8hztz3TFw==", "integrity": "sha512-jAJwx9yrRjB3XDFDA0DBYSHbMSvhPssDdnbEg70O2gp0qfTRtgQTaAUvTGCawj2d/iDuEJgFHJkuczHQG33a0Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"mongodb-memory-server-core": "6.7.0" "mongodb-memory-server-core": "6.8.0"
} }
}, },
"mongodb-memory-server-core": { "mongodb-memory-server-core": {
"version": "6.7.0", "version": "6.8.0",
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server-core/-/mongodb-memory-server-core-6.7.0.tgz", "resolved": "https://verdaccio.lossless.one/mongodb-memory-server-core/-/mongodb-memory-server-core-6.8.0.tgz",
"integrity": "sha512-N6pQqS6KjOGcfdydDgJ0ddaaifM8Ee6BtP+nFQIDjon76pvOtPuR8PddXM/tWeSv5fNhPx00/ILZCmpE8IiwLw==", "integrity": "sha512-cw8TX3iKhmXPiPQDcmIftHl1WvuCn970nomeQKgpcJZOYIUI87zD97apNIWfajkEduIe+24yYoqIwbwLbA19gQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/tmp": "^0.2.0", "@types/tmp": "^0.2.0",
@ -7711,9 +7711,9 @@
"lockfile": "^1.0.4", "lockfile": "^1.0.4",
"md5-file": "^5.0.0", "md5-file": "^5.0.0",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"mongodb": "3.6.1", "mongodb": "3.6.2",
"semver": "^7.3.2", "semver": "^7.3.2",
"tar-stream": "^2.1.3", "tar-stream": "^2.1.4",
"tmp": "^0.2.1", "tmp": "^0.2.1",
"uuid": "8.3.0", "uuid": "8.3.0",
"yauzl": "^2.10.0" "yauzl": "^2.10.0"
@ -10434,12 +10434,12 @@
"dev": true "dev": true
}, },
"tar-stream": { "tar-stream": {
"version": "2.1.3", "version": "2.1.4",
"resolved": "https://verdaccio.lossless.one/tar-stream/-/tar-stream-2.1.3.tgz", "resolved": "https://verdaccio.lossless.one/tar-stream/-/tar-stream-2.1.4.tgz",
"integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==",
"dev": true, "dev": true,
"requires": { "requires": {
"bl": "^4.0.1", "bl": "^4.0.3",
"end-of-stream": "^1.4.1", "end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0", "fs-constants": "^1.0.0",
"inherits": "^2.0.3", "inherits": "^2.0.3",

View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/smartdata", "name": "@pushrocks/smartdata",
"version": "3.1.48", "version": "3.1.53",
"private": false, "private": false,
"description": "do more with data", "description": "do more with data",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
@ -29,7 +29,7 @@
"@types/lodash": "^4.14.161", "@types/lodash": "^4.14.161",
"@types/mongodb": "^3.5.27", "@types/mongodb": "^3.5.27",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"mongodb": "^3.6.1", "mongodb": "^3.6.2",
"runtime-type-checks": "0.0.4" "runtime-type-checks": "0.0.4"
}, },
"devDependencies": { "devDependencies": {
@ -39,9 +39,9 @@
"@pushrocks/smartunique": "^3.0.3", "@pushrocks/smartunique": "^3.0.3",
"@pushrocks/tapbundle": "^3.2.9", "@pushrocks/tapbundle": "^3.2.9",
"@types/mongodb-memory-server": "^2.3.0", "@types/mongodb-memory-server": "^2.3.0",
"@types/node": "^14.6.4", "@types/node": "^14.11.2",
"@types/shortid": "0.0.29", "@types/shortid": "0.0.29",
"mongodb-memory-server": "^6.7.0", "mongodb-memory-server": "^6.8.0",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0" "tslint-config-prettier": "^1.18.0"
}, },

View File

@ -27,7 +27,7 @@ tap.skip.test('should create a testinstance as database', async () => {
smartdataOptions = { smartdataOptions = {
mongoDbName: await mongod.getDbName(), mongoDbName: await mongod.getDbName(),
mongoDbPass: '', mongoDbPass: '',
mongoDbUrl: await mongod.getConnectionString(), mongoDbUrl: await mongod.getUri(),
}; };
console.log(smartdataOptions); console.log(smartdataOptions);
testDb = new smartdata.SmartdataDb(smartdataOptions); testDb = new smartdata.SmartdataDb(smartdataOptions);
@ -88,33 +88,41 @@ tap.test('should save the car to the db', async () => {
let counter = 0; let counter = 0;
const totalCars = 2000;
do { do {
const myCar3 = new Car('red', 'Renault'); const myCar3 = new Car('red', 'Renault');
await myCar3.save(); await myCar3.save();
counter++; counter++;
} while (counter < 2000); if (counter%100 === 0) {
console.log(`Filled database with ${counter} of ${totalCars} Cars`);
}
} while (counter < totalCars);
}); });
tap.test('expect to get instance of Car', async () => { tap.test('expect to get instance of Car with shallow match', async () => {
let counter = 0; let counter = 0;
do { do {
const timeStart = Date.now(); const timeStart = Date.now();
const myCars = await Car.getInstances<Car>({ const myCars = await Car.getInstances<Car>({
brand: 'Renault', brand: 'Renault',
}); });
console.log(`took ${Date.now() - timeStart}`); console.log(`took ${Date.now() - timeStart}ms to query a set of 2000`);
expect(myCars[0].deepData.sodeep).to.equal('yes');
expect(myCars[0].brand).to.equal('Renault');
counter++; counter++;
} while (counter < 30); } while (counter < 30);
}); });
tap.test('expect to get instance of Car', async () => { tap.test('expect to get instance of Car with deep match', async () => {
let counter = 0; let counter = 0;
do { do {
const timeStart = Date.now(); const timeStart = Date.now();
const myCars2 = await Car.getInstances<Car>({ const myCars2 = await Car.getInstances<Car>({
'deepData.sodeep': 'yes', 'deepData.sodeep': 'yes',
} as any); } as any);
console.log(`took ${Date.now() - timeStart}`); console.log(`took ${Date.now() - timeStart}ms to query a set of 2000`);
expect(myCars2[0].deepData.sodeep).to.equal('yes');
expect(myCars2[0].brand).to.equal('Volvo');
counter++; counter++;
} while (counter < 30); } while (counter < 30);
}); });
@ -129,11 +137,15 @@ tap.test('expect to get instance of Car and update it', async () => {
}); });
tap.test('should be able to delete an instance of car', async () => { tap.test('should be able to delete an instance of car', async () => {
const myCar = await Car.getInstance<Car>({ const myCars = await Car.getInstances<Car>({
brand: 'Volvo', brand: 'Volvo',
color: 'blue'
}); });
expect(myCar.color).to.equal('blue'); console.log(myCars);
await myCar.delete(); expect(myCars[0].color).to.equal('blue');
for (const myCar of myCars) {
await myCar.delete();
}
const myCar2 = await Car.getInstance<Car>({ const myCar2 = await Car.getInstance<Car>({
brand: 'Volvo', brand: 'Volvo',

View File

@ -131,11 +131,12 @@ export class SmartdataCollection<T> {
} }
updateableObject[key] = saveableObject[key]; updateableObject[key] = saveableObject[key];
} }
this.mongoDbCollection.updateOne( const result = await this.mongoDbCollection.updateOne(
identifiableObject, identifiableObject,
{ $set: updateableObject }, { $set: updateableObject },
{ upsert: true } { upsert: true }
); );
return result;
} }
public async delete(dbDocArg: T & SmartDataDbDoc<T, unknown>): Promise<any> { public async delete(dbDocArg: T & SmartDataDbDoc<T, unknown>): Promise<any> {

View File

@ -32,6 +32,8 @@ export class SmartdataDb {
const finalConnectionUrl = this.smartdataOptions.mongoDbUrl const finalConnectionUrl = this.smartdataOptions.mongoDbUrl
.replace('<USERNAME>', this.smartdataOptions.mongoDbUser) .replace('<USERNAME>', this.smartdataOptions.mongoDbUser)
.replace('<username>', this.smartdataOptions.mongoDbUser) .replace('<username>', this.smartdataOptions.mongoDbUser)
.replace('<USER>', this.smartdataOptions.mongoDbUser)
.replace('<user>', this.smartdataOptions.mongoDbUser)
.replace('<PASSWORD>', this.smartdataOptions.mongoDbPass) .replace('<PASSWORD>', this.smartdataOptions.mongoDbPass)
.replace('<password>', this.smartdataOptions.mongoDbPass) .replace('<password>', this.smartdataOptions.mongoDbPass)
.replace('<DBNAME>', this.smartdataOptions.mongoDbName) .replace('<DBNAME>', this.smartdataOptions.mongoDbName)

View File

@ -12,7 +12,7 @@ export type TDocCreation = 'db' | 'new' | 'mixed';
*/ */
export function svDb() { export function svDb() {
return (target: SmartDataDbDoc<unknown, unknown>, key: string) => { return (target: SmartDataDbDoc<unknown, unknown>, key: string) => {
console.log(`called svDb() on ${key}`); console.log(`called svDb() on >${target.constructor.name}.${key}<`);
if (!target.saveableProperties) { if (!target.saveableProperties) {
target.saveableProperties = []; target.saveableProperties = [];
} }
@ -25,7 +25,7 @@ export function svDb() {
*/ */
export function unI() { export function unI() {
return (target: SmartDataDbDoc<unknown, unknown>, key: string) => { return (target: SmartDataDbDoc<unknown, unknown>, key: string) => {
console.log('called unI'); console.log(`called unI on >>${target.constructor.name}.${key}<<`);
// mark the index as unique // mark the index as unique
if (!target.uniqueIndexes) { if (!target.uniqueIndexes) {
@ -41,7 +41,7 @@ export function unI() {
}; };
} }
export class SmartDataDbDoc<T, TImplements> { export class SmartDataDbDoc<T extends TImplements, TImplements> {
/** /**
* the collection object an Doc belongs to * the collection object an Doc belongs to
*/ */
@ -110,17 +110,19 @@ export class SmartDataDbDoc<T, TImplements> {
public async save() { public async save() {
// tslint:disable-next-line: no-this-assignment // tslint:disable-next-line: no-this-assignment
const self: any = this; const self: any = this;
let dbResult: any;
switch (this.creationStatus) { switch (this.creationStatus) {
case 'db': case 'db':
await this.collection.update(self); dbResult = await this.collection.update(self);
break; break;
case 'new': case 'new':
const writeResult = await this.collection.insert(self); dbResult = await this.collection.insert(self);
this.creationStatus = 'db'; this.creationStatus = 'db';
break; break;
default: default:
console.error('neither new nor in db?'); console.error('neither new nor in db?');
} }
return dbResult;
} }
/** /**