Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
4c375f8465 | |||
9466af6a4a | |||
c5aa747f42 | |||
b5f2474f65 | |||
85f0d99934 | |||
3b2d3d9072 | |||
3ff5c36fdf | |||
a5acc2fe4e | |||
9c81257101 | |||
f7342962f4 | |||
bcd10205d3 | |||
6cab20f32d | |||
5aaa6ad2d6 | |||
635256f2f6 | |||
f799d3efa5 | |||
f74020ba96 |
154
package-lock.json
generated
154
package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/smartdata",
|
||||
"version": "3.1.41",
|
||||
"version": "3.1.49",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@ -1646,9 +1646,9 @@
|
||||
}
|
||||
},
|
||||
"@pushrocks/smartlog": {
|
||||
"version": "2.0.36",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.36.tgz",
|
||||
"integrity": "sha512-guM03567UFZebx3urBQdiQecZwKvrR8c8fzt7EDPrI1ihArZc7ab6MQEu9yklPKqJMGLEz8t0oExgQ8804r73g==",
|
||||
"version": "2.0.39",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.39.tgz",
|
||||
"integrity": "sha512-fHCoBLwKM+F3jN5nZH6QEcEVWtgyESN+ysT9KLxmM/wrhIibG98yLxp6kwfZZbv6aKmHWbtKEvBmv+Vd4Hfwlg==",
|
||||
"requires": {
|
||||
"@pushrocks/isounique": "^1.0.4",
|
||||
"@pushrocks/smartlog-interfaces": "^2.0.20"
|
||||
@ -2177,9 +2177,9 @@
|
||||
}
|
||||
},
|
||||
"@tsclass/tsclass": {
|
||||
"version": "3.0.24",
|
||||
"resolved": "https://verdaccio.lossless.one/@tsclass%2ftsclass/-/tsclass-3.0.24.tgz",
|
||||
"integrity": "sha512-fzmTQOkSqoUWhNSadbb5qxfjph3csZFiryBn24an1j+euFWYxEaaeSPBqPV3flxoHXzk68BTkho1ffmiypX5Kw==",
|
||||
"version": "3.0.25",
|
||||
"resolved": "https://verdaccio.lossless.one/@tsclass%2ftsclass/-/tsclass-3.0.25.tgz",
|
||||
"integrity": "sha512-CGfjdltByZYXyV+6WFOhBELjXDoes37Ww4w35D3MlCxT7MAKoxJn+PnIZ7Add4rJcJwziLuftYVKwKnY+FRRgA==",
|
||||
"requires": {
|
||||
"@pushrocks/tapbundle": "^3.2.9",
|
||||
"type-fest": "^0.16.0"
|
||||
@ -2264,27 +2264,6 @@
|
||||
"@types/express": "*"
|
||||
}
|
||||
},
|
||||
"@types/cross-spawn": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fcross-spawn/-/cross-spawn-6.0.2.tgz",
|
||||
"integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/debug": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fdebug/-/debug-4.1.5.tgz",
|
||||
"integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/dedent": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fdedent/-/dedent-0.7.0.tgz",
|
||||
"integrity": "sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/default-gateway": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fdefault-gateway/-/default-gateway-3.0.1.tgz",
|
||||
@ -2344,21 +2323,6 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/find-cache-dir": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2ffind-cache-dir/-/find-cache-dir-3.2.0.tgz",
|
||||
"integrity": "sha512-+JeT9qb2Jwzw72WdjU+TSvD5O1QRPWCeRpDJV+guiIq+2hwR0DFGw+nZNbTFjMIVe6Bf4GgAKeB/6Ytx6+MbeQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/find-package-json": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2ffind-package-json/-/find-package-json-1.1.1.tgz",
|
||||
"integrity": "sha512-XMCocYkg6VUpkbOQMKa3M5cgc3MvU/LJKQwd3VUJrWZbLr2ARUggupsCAF8DxjEEIuSO6HlnH+vl+XV4bgVeEQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/form-data": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fform-data/-/form-data-2.5.0.tgz",
|
||||
@ -2397,22 +2361,10 @@
|
||||
"@types/uglify-js": "*"
|
||||
}
|
||||
},
|
||||
"@types/lockfile": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2flockfile/-/lockfile-1.0.1.tgz",
|
||||
"integrity": "sha512-65WZedEm4AnOsBDdsapJJG42MhROu3n4aSSiu87JXF/pSdlubxZxp3S1yz3kTfkJ2KBPud4CpjoHVAptOm9Zmw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/lodash": {
|
||||
"version": "4.14.159",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2flodash/-/lodash-4.14.159.tgz",
|
||||
"integrity": "sha512-gF7A72f7WQN33DpqOWw9geApQPh4M3PxluMtaHxWHXEGSN12/WbcEk/eNSqWNQcQhF66VSZ06vCF94CrHwXJDg=="
|
||||
},
|
||||
"@types/md5-file": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fmd5-file/-/md5-file-4.0.2.tgz",
|
||||
"integrity": "sha512-8gacRfEqLrmZ6KofpFfxyjsm/LYepeWUWUJGaf5A9W9J5B2/dRZMdkDqFDL6YDa9IweH12IO76jO7mpsK2B3wg==",
|
||||
"dev": true
|
||||
"version": "4.14.161",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2flodash/-/lodash-4.14.161.tgz",
|
||||
"integrity": "sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA=="
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "2.0.3",
|
||||
@ -2431,19 +2383,10 @@
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fminimatch/-/minimatch-3.0.3.tgz",
|
||||
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
|
||||
},
|
||||
"@types/mkdirp": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fmkdirp/-/mkdirp-1.0.1.tgz",
|
||||
"integrity": "sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/mongodb": {
|
||||
"version": "3.5.26",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fmongodb/-/mongodb-3.5.26.tgz",
|
||||
"integrity": "sha512-p0X2VJgIBNHfNBdZdzzG8eQ/3bf6mQoXDT0UhVyVEdSzXEa1+2pFcwGvEZp72sjztyBwfRKlgrXMjCVavLcuGg==",
|
||||
"version": "3.5.27",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fmongodb/-/mongodb-3.5.27.tgz",
|
||||
"integrity": "sha512-1jxKDgdfJEOO9zp+lv43p8jOqRs02xPrdUTzAZIVK9tVEySfCEmktL2jEu9A3wOBEOs18yKzpVIKUh8b8ALk3w==",
|
||||
"requires": {
|
||||
"@types/bson": "*",
|
||||
"@types/node": "*"
|
||||
@ -2459,9 +2402,9 @@
|
||||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "14.6.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-14.6.0.tgz",
|
||||
"integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA=="
|
||||
"version": "14.6.4",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-14.6.4.tgz",
|
||||
"integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ=="
|
||||
},
|
||||
"@types/parcel-bundler": {
|
||||
"version": "1.12.1",
|
||||
@ -3049,9 +2992,9 @@
|
||||
}
|
||||
},
|
||||
"bl": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/bl/-/bl-2.2.0.tgz",
|
||||
"integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://verdaccio.lossless.one/bl/-/bl-2.2.1.tgz",
|
||||
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.3.5",
|
||||
"safe-buffer": "^5.1.1"
|
||||
@ -4388,12 +4331,6 @@
|
||||
"mimic-response": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"dedent": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://verdaccio.lossless.one/dedent/-/dedent-0.7.0.tgz",
|
||||
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
|
||||
"dev": true
|
||||
},
|
||||
"deep-eql": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/deep-eql/-/deep-eql-3.0.1.tgz",
|
||||
@ -7736,9 +7673,9 @@
|
||||
}
|
||||
},
|
||||
"mongodb": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb/-/mongodb-3.6.0.tgz",
|
||||
"integrity": "sha512-/XWWub1mHZVoqEsUppE0GV7u9kanLvHxho6EvBxQbShXTKYF9trhZC2NzbulRGeG7xMJHD8IOWRcdKx5LPjAjQ==",
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb/-/mongodb-3.6.1.tgz",
|
||||
"integrity": "sha512-uH76Zzr5wPptnjEKJRQnwTsomtFOU/kQEU8a9hKHr2M7y9qVk7Q4Pkv0EQVp88742z9+RwvsdTw6dRjDZCNu1g==",
|
||||
"requires": {
|
||||
"bl": "^2.2.0",
|
||||
"bson": "^1.1.4",
|
||||
@ -7749,34 +7686,24 @@
|
||||
}
|
||||
},
|
||||
"mongodb-memory-server": {
|
||||
"version": "6.6.4",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server/-/mongodb-memory-server-6.6.4.tgz",
|
||||
"integrity": "sha512-GCtrlUDpq6oPkdlkmIgh0Q6vJYf7njzw8AJnbg/gime2NxuUtqcOK2n+9L3qeDzt6EZxdtP/+1u/80wfjwc5mA==",
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server/-/mongodb-memory-server-6.7.2.tgz",
|
||||
"integrity": "sha512-isWtb1HM8z9wdLgOe4YZJjJGPRsDQfPh4X1cJfdUJcdRDl0A5Ullck6Yby2JYnTH9SFQaUePhi4RQnmQW98eNQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mongodb-memory-server-core": "6.6.4"
|
||||
"mongodb-memory-server-core": "6.7.2"
|
||||
}
|
||||
},
|
||||
"mongodb-memory-server-core": {
|
||||
"version": "6.6.4",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server-core/-/mongodb-memory-server-core-6.6.4.tgz",
|
||||
"integrity": "sha512-g4WMmXp2Gg305eKETaE9Nnp2eR3mTMKSTZJsxpXhsx+Mhl2IQoMLa78ny7eFPN7FORnLxQsmLMANv4b0bP+RDA==",
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://verdaccio.lossless.one/mongodb-memory-server-core/-/mongodb-memory-server-core-6.7.2.tgz",
|
||||
"integrity": "sha512-SZ2Nw+4xZvRJ9r2q3mcE0rf8fz8u5FP1qvFydom6Q1VfDGR+rlunVPw/raw2JvuprbkxzpA1RQSiutnk4YLnCQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cross-spawn": "^6.0.2",
|
||||
"@types/debug": "^4.1.5",
|
||||
"@types/dedent": "^0.7.0",
|
||||
"@types/find-cache-dir": "^3.2.0",
|
||||
"@types/find-package-json": "^1.1.1",
|
||||
"@types/lockfile": "^1.0.1",
|
||||
"@types/md5-file": "^4.0.2",
|
||||
"@types/mkdirp": "^1.0.1",
|
||||
"@types/tmp": "^0.2.0",
|
||||
"@types/uuid": "^8.0.0",
|
||||
"camelcase": "^6.0.0",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"debug": "^4.1.1",
|
||||
"dedent": "^0.7.0",
|
||||
"find-cache-dir": "^3.3.1",
|
||||
"find-package-json": "^1.2.0",
|
||||
"get-port": "^5.1.1",
|
||||
@ -7784,19 +7711,14 @@
|
||||
"lockfile": "^1.0.4",
|
||||
"md5-file": "^5.0.0",
|
||||
"mkdirp": "^1.0.4",
|
||||
"mongodb": "^3.5.9",
|
||||
"mongodb": "3.6.1",
|
||||
"semver": "^7.3.2",
|
||||
"tar-stream": "^2.1.3",
|
||||
"tmp": "^0.2.1",
|
||||
"uuid": "^8.2.0",
|
||||
"uuid": "8.3.0",
|
||||
"yauzl": "^2.10.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/uuid": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fuuid/-/uuid-8.3.0.tgz",
|
||||
"integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==",
|
||||
"dev": true
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/agent-base/-/agent-base-6.0.1.tgz",
|
||||
@ -7851,6 +7773,12 @@
|
||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||
"dev": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://verdaccio.lossless.one/semver/-/semver-7.3.2.tgz",
|
||||
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
|
||||
"dev": true
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
@ -10519,9 +10447,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"bl": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/bl/-/bl-4.0.2.tgz",
|
||||
"integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==",
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/bl/-/bl-4.0.3.tgz",
|
||||
"integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer": "^5.5.0",
|
||||
|
16
package.json
16
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/smartdata",
|
||||
"version": "3.1.41",
|
||||
"version": "3.1.49",
|
||||
"private": false,
|
||||
"description": "do more with data",
|
||||
"main": "dist_ts/index.js",
|
||||
@ -22,14 +22,14 @@
|
||||
"homepage": "https://gitlab.com/pushrocks/smartdata#README",
|
||||
"dependencies": {
|
||||
"@pushrocks/lik": "^4.0.17",
|
||||
"@pushrocks/smartlog": "^2.0.36",
|
||||
"@pushrocks/smartlog": "^2.0.39",
|
||||
"@pushrocks/smartpromise": "^3.0.6",
|
||||
"@pushrocks/smartstring": "^3.0.18",
|
||||
"@tsclass/tsclass": "^3.0.24",
|
||||
"@types/lodash": "^4.14.159",
|
||||
"@types/mongodb": "^3.5.26",
|
||||
"@tsclass/tsclass": "^3.0.25",
|
||||
"@types/lodash": "^4.14.161",
|
||||
"@types/mongodb": "^3.5.27",
|
||||
"lodash": "^4.17.20",
|
||||
"mongodb": "^3.6.0",
|
||||
"mongodb": "^3.6.1",
|
||||
"runtime-type-checks": "0.0.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -39,9 +39,9 @@
|
||||
"@pushrocks/smartunique": "^3.0.3",
|
||||
"@pushrocks/tapbundle": "^3.2.9",
|
||||
"@types/mongodb-memory-server": "^2.3.0",
|
||||
"@types/node": "^14.6.0",
|
||||
"@types/node": "^14.6.4",
|
||||
"@types/shortid": "0.0.29",
|
||||
"mongodb-memory-server": "^6.6.4",
|
||||
"mongodb-memory-server": "^6.7.2",
|
||||
"tslint": "^6.1.3",
|
||||
"tslint-config-prettier": "^1.18.0"
|
||||
},
|
||||
|
46
test/test.ts
46
test/test.ts
@ -66,6 +66,11 @@ class Car extends smartdata.SmartDataDbDoc<Car, Car> {
|
||||
@smartdata.svDb()
|
||||
public brand: string;
|
||||
|
||||
@smartdata.svDb()
|
||||
deepData = {
|
||||
sodeep: 'yes'
|
||||
};
|
||||
|
||||
constructor(colorArg: string, brandArg: string) {
|
||||
super();
|
||||
this.color = colorArg;
|
||||
@ -80,15 +85,42 @@ tap.test('should save the car to the db', async () => {
|
||||
const myCar2 = new Car('red', 'Volvo');
|
||||
await myCar2.save();
|
||||
|
||||
const myCar3 = new Car('red', 'Renault');
|
||||
await myCar3.save();
|
||||
|
||||
|
||||
let counter = 0;
|
||||
do {
|
||||
const myCar3 = new Car('red', 'Renault');
|
||||
await myCar3.save();
|
||||
counter++;
|
||||
} while (counter < 2000);
|
||||
});
|
||||
|
||||
tap.test('expect to get instance of Car', async () => {
|
||||
const myCars = await Car.getInstances<Car>({
|
||||
brand: 'Volvo',
|
||||
});
|
||||
expect(myCars[0].color).to.equal('red');
|
||||
tap.test('expect to get instance of Car with shallow match', async () => {
|
||||
let counter = 0;
|
||||
do {
|
||||
const timeStart = Date.now();
|
||||
const myCars = await Car.getInstances<Car>({
|
||||
brand: 'Renault',
|
||||
});
|
||||
console.log(`took ${Date.now() - timeStart}`);
|
||||
expect(myCars[0].deepData.sodeep).to.equal('yes');
|
||||
expect(myCars[0].brand).to.equal('Renault');
|
||||
counter++;
|
||||
} while (counter < 30);
|
||||
});
|
||||
|
||||
tap.test('expect to get instance of Car with deep match', async () => {
|
||||
let counter = 0;
|
||||
do {
|
||||
const timeStart = Date.now();
|
||||
const myCars2 = await Car.getInstances<Car>({
|
||||
'deepData.sodeep': 'yes',
|
||||
} as any);
|
||||
console.log(`took ${Date.now() - timeStart}`);
|
||||
expect(myCars2[0].deepData.sodeep).to.equal('yes');
|
||||
expect(myCars2[0].brand).to.equal('Volvo');
|
||||
counter++;
|
||||
} while (counter < 30);
|
||||
});
|
||||
|
||||
tap.test('expect to get instance of Car and update it', async () => {
|
||||
|
@ -1,6 +1,7 @@
|
||||
import * as plugins from './smartdata.plugins';
|
||||
import { SmartdataDb } from './smartdata.classes.db';
|
||||
import { SmartDataDbDoc } from './smartdata.classes.doc';
|
||||
import { CollectionFactory } from './smartdata.classes.collectionfactory';
|
||||
|
||||
export interface IFindOptions {
|
||||
limit?: number;
|
||||
@ -15,23 +16,26 @@ export interface IDocValidationFunc<T> {
|
||||
|
||||
export type TDelayedDbCreation = () => SmartdataDb;
|
||||
|
||||
const collectionFactory = new CollectionFactory();
|
||||
|
||||
/**
|
||||
* This is a decorator that will tell the decorated class what dbTable to use
|
||||
* @param dbArg
|
||||
*/
|
||||
export function Collection(dbArg: SmartdataDb | TDelayedDbCreation) {
|
||||
return function (constructor) {
|
||||
if (dbArg instanceof SmartdataDb) {
|
||||
// tslint:disable-next-line: no-string-literal
|
||||
constructor['smartdataCollection'] = new SmartdataCollection(constructor, dbArg);
|
||||
} else {
|
||||
constructor['smartdataDelayedCollection'] = () => {
|
||||
return new SmartdataCollection(constructor, dbArg());
|
||||
};
|
||||
}
|
||||
return function classDecorator<T extends { new (...args: any[]): {} }>(constructor: T) {
|
||||
return class extends constructor {
|
||||
public static get collection() {
|
||||
return collectionFactory.getCollection(constructor.name, dbArg);
|
||||
}
|
||||
public get collection() {
|
||||
return collectionFactory.getCollection(constructor.name, dbArg);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// tslint:disable-next-line: max-classes-per-file
|
||||
export class SmartdataCollection<T> {
|
||||
/**
|
||||
* the collection that is used
|
||||
@ -42,13 +46,13 @@ export class SmartdataCollection<T> {
|
||||
public smartdataDb: SmartdataDb;
|
||||
public uniqueIndexes: string[] = [];
|
||||
|
||||
constructor(collectedClassArg: T & SmartDataDbDoc<T, unknown>, smartDataDbArg: SmartdataDb) {
|
||||
constructor(classNameArg: string, smartDataDbArg: SmartdataDb) {
|
||||
// tell the collection where it belongs
|
||||
this.collectionName = collectedClassArg.name;
|
||||
this.collectionName = classNameArg;
|
||||
this.smartdataDb = smartDataDbArg;
|
||||
|
||||
// tell the db class about it (important since Db uses different systems under the hood)
|
||||
this.smartdataDb.addTable(this);
|
||||
this.smartdataDb.addCollection(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,9 +67,9 @@ export class SmartdataCollection<T> {
|
||||
});
|
||||
if (!wantedCollection) {
|
||||
await this.smartdataDb.mongoDb.createCollection(this.collectionName);
|
||||
console.log(`Successfully initiated Collection ${this.collectionName}`);
|
||||
}
|
||||
this.mongoDbCollection = await this.smartdataDb.mongoDb.collection(this.collectionName);
|
||||
// console.log(`Successfully initiated Collection ${this.collectionName}`);
|
||||
this.mongoDbCollection = this.smartdataDb.mongoDb.collection(this.collectionName);
|
||||
}
|
||||
}
|
||||
|
||||
|
22
ts/smartdata.classes.collectionfactory.ts
Normal file
22
ts/smartdata.classes.collectionfactory.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import * as plugins from './smartdata.plugins';
|
||||
import { SmartdataCollection } from './smartdata.classes.collection';
|
||||
import { SmartdataDb } from './smartdata.classes.db';
|
||||
|
||||
export class CollectionFactory {
|
||||
public collections: {[key: string]: SmartdataCollection<any>} = {};
|
||||
|
||||
public getCollection = (nameArg: string, dbArg: SmartdataDb | (() => SmartdataDb)): SmartdataCollection<any> => {
|
||||
if (!this.collections[nameArg]) {
|
||||
this.collections[nameArg] = (() => {
|
||||
if (dbArg instanceof SmartdataDb) {
|
||||
// tslint:disable-next-line: no-string-literal
|
||||
return new SmartdataCollection(nameArg, dbArg);
|
||||
} else {
|
||||
dbArg = dbArg();
|
||||
return new SmartdataCollection(nameArg, dbArg);
|
||||
}
|
||||
})();
|
||||
}
|
||||
return this.collections[nameArg];
|
||||
}
|
||||
}
|
@ -40,6 +40,8 @@ export class SmartdataDb {
|
||||
this.mongoDbClient = await plugins.mongodb.MongoClient.connect(finalConnectionUrl, {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true,
|
||||
maxPoolSize: 100,
|
||||
maxIdleTimeMS: 10
|
||||
});
|
||||
this.mongoDb = this.mongoDbClient.db(this.smartdataOptions.mongoDbName);
|
||||
this.status = 'connected';
|
||||
@ -57,7 +59,7 @@ export class SmartdataDb {
|
||||
|
||||
// handle table to class distribution
|
||||
|
||||
public addTable(SmartdataCollectionArg: SmartdataCollection<any>) {
|
||||
public addCollection(SmartdataCollectionArg: SmartdataCollection<any>) {
|
||||
this.smartdataCollectionMap.add(SmartdataCollectionArg);
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,8 @@ export class SmartDataDbDoc<T, TImplements> {
|
||||
/**
|
||||
* the collection object an Doc belongs to
|
||||
*/
|
||||
public collection: SmartdataCollection<T>;
|
||||
public static collection: SmartdataCollection<any>;
|
||||
public collection: SmartdataCollection<any>;
|
||||
|
||||
/**
|
||||
* how the Doc in memory was created, may prove useful later.
|
||||
@ -75,32 +76,12 @@ export class SmartDataDbDoc<T, TImplements> {
|
||||
/**
|
||||
* class constructor
|
||||
*/
|
||||
constructor() {
|
||||
this.name = this.constructor['name'];
|
||||
if (this.constructor['smartdataCollection']) {
|
||||
// tslint:disable-next-line: no-string-literal
|
||||
this.collection = this.constructor['smartdataCollection'];
|
||||
// tslint:disable-next-line: no-string-literal
|
||||
} else if (typeof this.constructor['smartdataDelayedCollection'] === 'function') {
|
||||
// tslint:disable-next-line: no-string-literal
|
||||
this.collection = this.constructor['smartdataDelayedCollection']();
|
||||
} else {
|
||||
console.error('Could not determine collection for DbDoc');
|
||||
}
|
||||
}
|
||||
constructor() {}
|
||||
|
||||
public static async getInstances<T>(
|
||||
filterArg: plugins.tsclass.typeFest.PartialDeep<T>
|
||||
): Promise<T[]> {
|
||||
const self: any = this; // fool typesystem
|
||||
let referenceMongoDBCollection: SmartdataCollection<T>;
|
||||
|
||||
if (self.smartdataCollection) {
|
||||
referenceMongoDBCollection = self.smartdataCollection;
|
||||
} else if (self.smartdataDelayedCollection) {
|
||||
referenceMongoDBCollection = self.smartdataDelayedCollection();
|
||||
}
|
||||
const foundDocs = await referenceMongoDBCollection.find(filterArg);
|
||||
const foundDocs = await this.collection.find(filterArg);
|
||||
const returnArray = [];
|
||||
for (const item of foundDocs) {
|
||||
const newInstance = new this();
|
||||
@ -146,8 +127,7 @@ export class SmartDataDbDoc<T, TImplements> {
|
||||
* deletes a document from the database
|
||||
*/
|
||||
public async delete() {
|
||||
const self: any = this;
|
||||
await this.collection.delete(self);
|
||||
await this.collection.delete(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user