@ackplus/nest-crud-request 0.0.6 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -5
- package/src/index.js.map +1 -1
- package/src/lib/query-builder.js +2 -7
- package/src/lib/query-builder.js.map +1 -1
- package/src/lib/relation-builder.js.map +1 -1
- package/src/lib/types.js.map +1 -1
- package/src/lib/utils.js +1 -4
- package/src/lib/utils.js.map +1 -1
- package/src/lib/where-builder.js +1 -4
- package/src/lib/where-builder.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -0
- package/LICENSE +0 -21
- package/eslint.config.cjs +0 -22
- package/jest.config.ts +0 -10
- package/project.json +0 -9
- package/src/index.ts +0 -3
- package/src/lib/query-builder.ts +0 -139
- package/src/lib/relation-builder.ts +0 -64
- package/src/lib/types.ts +0 -48
- package/src/lib/utils.ts +0 -11
- package/src/lib/where-builder.ts +0 -124
- package/src/test/query-builder-where.spec.ts +0 -173
- package/src/test/query-builder.spec.ts +0 -149
- package/src/test/relation-builder.spec.ts +0 -32
- package/tsconfig.json +0 -21
- package/tsconfig.lib.json +0 -10
- package/tsconfig.spec.json +0 -15
- package/vite.config.ts +0 -46
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackplus/nest-crud-request",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"type": "
|
|
5
|
-
"main": "./index.js",
|
|
6
|
-
"types": "./index.d.ts",
|
|
3
|
+
"version": "0.0.12",
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/ack-solutions/packages.git"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://github.com/ack-solutions/packages.git#readme",
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
13
16
|
"dependencies": {
|
|
14
17
|
"tslib": "^2.3.0"
|
|
15
18
|
}
|
|
16
|
-
}
|
|
19
|
+
}
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,8DAAoC;AACpC,sDAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nest-crud-request/src/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,8DAAoC;AACpC,sDAA4B"}
|
package/src/lib/query-builder.js
CHANGED
|
@@ -24,10 +24,7 @@ class QueryBuilder {
|
|
|
24
24
|
updatedOptions = (0, utils_1.deepMerge)(this.options, options);
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
updatedOptions = {
|
|
28
|
-
...this.options,
|
|
29
|
-
...options,
|
|
30
|
-
};
|
|
27
|
+
updatedOptions = Object.assign(Object.assign({}, this.options), options);
|
|
31
28
|
}
|
|
32
29
|
this.setOptions(updatedOptions);
|
|
33
30
|
return this;
|
|
@@ -97,9 +94,7 @@ class QueryBuilder {
|
|
|
97
94
|
return this;
|
|
98
95
|
}
|
|
99
96
|
toObject() {
|
|
100
|
-
const options = {
|
|
101
|
-
...this.options,
|
|
102
|
-
};
|
|
97
|
+
const options = Object.assign({}, this.options);
|
|
103
98
|
if (this.whereBuilder.hasConditions()) {
|
|
104
99
|
options.where = this.whereBuilder.toObject();
|
|
105
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["query-builder.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AAErD,mCAAoC;AACpC,mDAAsE;AAGtE,MAAa,YAAY;IAQrB,YAAY,OAA4B;QANhC,YAAO,GAAwB,EAAE,CAAC;QAElC,iBAAY,GAAiB,IAAI,4BAAY,EAAE,CAAC;QAEhD,oBAAe,GAAoB,IAAI,kCAAe,EAAE,CAAC;QAG7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,OAA4B;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,IAAI,kCAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,OAA4B,EAAE,IAAI,GAAG,KAAK;QACnD,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,IAAI,EAAE,CAAC;YACP,cAAc,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,cAAc,
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-builder.js","sourceRoot":"","sources":["relation-builder.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAIxB,YAAY,SAA0C;QAF9C,cAAS,GAA6B,EAAE,CAAC;QAG7C,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,SAAyC;QAClD,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACzB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACjE,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;YACrC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,MAAiB,EAAE,KAA2B;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YACvB,QAAQ;YACR,MAAM;YACN,KAAK;SACR,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,QAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ;QACJ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CAEJ;AA5DD,0CA4DC"}
|
|
1
|
+
{"version":3,"file":"relation-builder.js","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/relation-builder.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAIxB,YAAY,SAA0C;QAF9C,cAAS,GAA6B,EAAE,CAAC;QAG7C,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,SAAyC;QAClD,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACzB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACjE,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;YACrC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,MAAiB,EAAE,KAA2B;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YACvB,QAAQ;YACR,MAAM;YACN,KAAK;SACR,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,QAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ;QACJ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CAEJ;AA5DD,0CA4DC"}
|
package/src/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";;;AASA,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAChC,wCAAY,CAAA;IACZ,sCAAU,CAAA;AACd,CAAC,EAHW,wBAAwB,wCAAxB,wBAAwB,QAGnC;AAED,IAAY,iBAqBX;AArBD,WAAY,iBAAiB;IACzB,+BAAU,CAAA;IACV,mCAAc,CAAA;IACd,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,mCAAc,CAAA;IACd,0CAAqB,CAAA;IACrB,qCAAgB,CAAA;IAChB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;IACnB,+CAA0B,CAAA;IAC1B,yCAAoB,CAAA;IACpB,gDAA2B,CAAA;IAC3B,mCAAc,CAAA;IACd,0CAAqB,CAAA;IACrB,wCAAmB,CAAA;IACnB,0CAAqB,CAAA;AACzB,CAAC,EArBW,iBAAiB,iCAAjB,iBAAiB,QAqB5B;AAED,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,iCAAW,CAAA;IACX,mCAAa,CAAA;AACjB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/types.ts"],"names":[],"mappings":";;;AASA,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAChC,wCAAY,CAAA;IACZ,sCAAU,CAAA;AACd,CAAC,EAHW,wBAAwB,wCAAxB,wBAAwB,QAGnC;AAED,IAAY,iBAqBX;AArBD,WAAY,iBAAiB;IACzB,+BAAU,CAAA;IACV,mCAAc,CAAA;IACd,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,mCAAc,CAAA;IACd,0CAAqB,CAAA;IACrB,qCAAgB,CAAA;IAChB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;IACnB,+CAA0B,CAAA;IAC1B,yCAAoB,CAAA;IACpB,gDAA2B,CAAA;IAC3B,mCAAc,CAAA;IACd,0CAAqB,CAAA;IACrB,wCAAmB,CAAA;IACnB,0CAAqB,CAAA;AACzB,CAAC,EArBW,iBAAiB,iCAAjB,iBAAiB,QAqB5B;AAED,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,iCAAW,CAAA;IACX,mCAAa,CAAA;AACjB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}
|
package/src/lib/utils.js
CHANGED
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":";;AAAA,8BAUC;AAVD,SAAgB,SAAS,CAAC,MAAW,EAAE,MAAW;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/utils.ts"],"names":[],"mappings":";;AAAA,8BAUC;AAVD,SAAgB,SAAS,CAAC,MAAW,EAAE,MAAW;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IACD,uCACO,MAAM,GACN,MAAM,EACX;AACN,CAAC"}
|
package/src/lib/where-builder.js
CHANGED
|
@@ -92,10 +92,7 @@ class WhereBuilder {
|
|
|
92
92
|
}
|
|
93
93
|
updateCondition(condition, type) {
|
|
94
94
|
if (type === null) {
|
|
95
|
-
this.whereObject = {
|
|
96
|
-
...this.whereObject,
|
|
97
|
-
...condition,
|
|
98
|
-
};
|
|
95
|
+
this.whereObject = Object.assign(Object.assign({}, this.whereObject), condition);
|
|
99
96
|
}
|
|
100
97
|
else {
|
|
101
98
|
this.whereObject[type] = [...(this.whereObject[type] || []), condition].filter(Boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where-builder.js","sourceRoot":"","sources":["where-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"where-builder.js","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/where-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"5.7.3"}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 Ack Solutions
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/eslint.config.cjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const baseConfig = require('../../eslint.base.config.js');
|
|
2
|
-
|
|
3
|
-
module.exports = [
|
|
4
|
-
...baseConfig,
|
|
5
|
-
{
|
|
6
|
-
files: ['**/*.json'],
|
|
7
|
-
rules: {
|
|
8
|
-
'@nx/dependency-checks': [
|
|
9
|
-
'error',
|
|
10
|
-
{
|
|
11
|
-
ignoredFiles: [
|
|
12
|
-
'{projectRoot}/eslint.config.{js,cjs,mjs}',
|
|
13
|
-
'{projectRoot}/vite.config.{js,ts,mjs,mts}',
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
languageOptions: {
|
|
19
|
-
parser: require('jsonc-eslint-parser'),
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
];
|
package/jest.config.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
displayName: 'nest-crud-request',
|
|
3
|
-
preset: '../../jest.preset.js',
|
|
4
|
-
testEnvironment: 'node',
|
|
5
|
-
transform: {
|
|
6
|
-
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
|
7
|
-
},
|
|
8
|
-
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
9
|
-
coverageDirectory: '../../coverage/packages/nest-crud-request',
|
|
10
|
-
};
|
package/project.json
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "nest-crud-request",
|
|
3
|
-
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"sourceRoot": "packages/nest-crud-request/src",
|
|
5
|
-
"projectType": "library",
|
|
6
|
-
"tags": [],
|
|
7
|
-
"// targets": "to see all targets run: nx show project nest-crud-request --web",
|
|
8
|
-
"targets": {}
|
|
9
|
-
}
|
package/src/index.ts
DELETED
package/src/lib/query-builder.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { RelationBuilder } from './relation-builder';
|
|
2
|
-
import { QueryBuilderOptions, OrderDirectionEnum } from './types';
|
|
3
|
-
import { deepMerge } from './utils';
|
|
4
|
-
import { WhereBuilder, WhereBuilderCondition } from './where-builder';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export class QueryBuilder {
|
|
8
|
-
|
|
9
|
-
private options: QueryBuilderOptions = {};
|
|
10
|
-
|
|
11
|
-
private whereBuilder: WhereBuilder = new WhereBuilder();
|
|
12
|
-
|
|
13
|
-
private relationBuilder: RelationBuilder = new RelationBuilder();
|
|
14
|
-
|
|
15
|
-
constructor(options: QueryBuilderOptions) {
|
|
16
|
-
this.options = options;
|
|
17
|
-
this.setOptions(options);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
setOptions(options: QueryBuilderOptions): this {
|
|
21
|
-
this.options = options;
|
|
22
|
-
this.whereBuilder = new WhereBuilder(options.where);
|
|
23
|
-
this.relationBuilder = new RelationBuilder(options.relations);
|
|
24
|
-
return this;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
mergeOptions(options: QueryBuilderOptions, deep = false): this {
|
|
28
|
-
let updatedOptions = {};
|
|
29
|
-
if (deep) {
|
|
30
|
-
updatedOptions = deepMerge(this.options, options);
|
|
31
|
-
} else {
|
|
32
|
-
updatedOptions = {
|
|
33
|
-
...this.options,
|
|
34
|
-
...options,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
this.setOptions(updatedOptions);
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
addSelect(fields: string | string[]): this {
|
|
42
|
-
if (!this.options.select) {
|
|
43
|
-
this.options.select = [];
|
|
44
|
-
}
|
|
45
|
-
if (Array.isArray(fields)) {
|
|
46
|
-
this.options.select.push(...fields);
|
|
47
|
-
} else {
|
|
48
|
-
this.options.select.push(fields);
|
|
49
|
-
}
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
removeSelect(fields: string | string[]): this {
|
|
54
|
-
if (this.options.select) {
|
|
55
|
-
if (Array.isArray(fields)) {
|
|
56
|
-
this.options.select = this.options.select.filter(field => !fields.includes(field));
|
|
57
|
-
} else {
|
|
58
|
-
this.options.select = this.options.select.filter(field => field !== fields);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return this;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
addRelation(relation: string, select?: string[], where?: Record<string, any>): this {
|
|
65
|
-
this.relationBuilder.add(relation, select, where);
|
|
66
|
-
return this;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
removeRelation(relation: string): this {
|
|
70
|
-
this.relationBuilder.remove(relation);
|
|
71
|
-
return this;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
where(...args: WhereBuilderCondition): this {
|
|
75
|
-
this.whereBuilder.where(...args);
|
|
76
|
-
return this;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
andWhere(...args: WhereBuilderCondition): this {
|
|
80
|
-
this.whereBuilder.andWhere(...args);
|
|
81
|
-
return this;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
orWhere(...args: WhereBuilderCondition): this {
|
|
85
|
-
this.whereBuilder.orWhere(...args);
|
|
86
|
-
return this;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
addOrder(orderBy: string, order: OrderDirectionEnum): this {
|
|
90
|
-
if (!this.options.order) {
|
|
91
|
-
this.options.order = {};
|
|
92
|
-
}
|
|
93
|
-
this.options.order[orderBy] = order;
|
|
94
|
-
return this;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
removeOrder(orderBy: string): this {
|
|
98
|
-
if (this.options.order) {
|
|
99
|
-
delete this.options.order[orderBy];
|
|
100
|
-
}
|
|
101
|
-
return this;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
setSkip(skip: number): this {
|
|
105
|
-
this.options.skip = skip;
|
|
106
|
-
return this;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
setTake(take: number): this {
|
|
110
|
-
this.options.take = take;
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
toObject() {
|
|
115
|
-
const options = {
|
|
116
|
-
...this.options,
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
if (this.whereBuilder.hasConditions()) {
|
|
120
|
-
options.where = this.whereBuilder.toObject();
|
|
121
|
-
} else {
|
|
122
|
-
delete options.where;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (this.relationBuilder.hasRelations()) {
|
|
126
|
-
options.relations = this.relationBuilder.toObject();
|
|
127
|
-
} else {
|
|
128
|
-
delete options.relations;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return options;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
toJson() {
|
|
135
|
-
const obj = this.toObject();
|
|
136
|
-
return JSON.stringify(obj);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Relation } from './types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export class RelationBuilder {
|
|
5
|
-
|
|
6
|
-
private relations: Record<string, Relation> = {};
|
|
7
|
-
|
|
8
|
-
constructor(relations?: Relation[] | string[] | string) {
|
|
9
|
-
if (relations) {
|
|
10
|
-
this.setRelations(relations);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
setRelations(relations: Relation[] | string[] | string): this {
|
|
15
|
-
if (relations) {
|
|
16
|
-
if (Array.isArray(relations)) {
|
|
17
|
-
relations.forEach(relation => {
|
|
18
|
-
if (typeof relation === 'string') {
|
|
19
|
-
this.add(relation);
|
|
20
|
-
} else {
|
|
21
|
-
this.add(relation.relation, relation.select, relation.where);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
} else if (typeof relations === 'string') {
|
|
25
|
-
this.add(relations);
|
|
26
|
-
} else {
|
|
27
|
-
this.relations = relations || {};
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
clear(): this {
|
|
34
|
-
this.relations = {};
|
|
35
|
-
return this;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
add(relation: string, select?: string[], where?: Record<string, any>): this {
|
|
39
|
-
this.relations[relation] = {
|
|
40
|
-
relation,
|
|
41
|
-
select,
|
|
42
|
-
where,
|
|
43
|
-
};
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
remove(relation: string): this {
|
|
48
|
-
delete this.relations[relation];
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
hasRelations(): boolean {
|
|
53
|
-
return Object.keys(this.relations).length > 0;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
toObject(): Relation[] {
|
|
57
|
-
return Object.values(this.relations);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
toJson(): string {
|
|
61
|
-
return JSON.stringify(this.relations);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
}
|
package/src/lib/types.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export interface QueryBuilderOptions {
|
|
2
|
-
select?: string[];
|
|
3
|
-
relations?: string[] | Relation[];
|
|
4
|
-
where?: Record<string, any>;
|
|
5
|
-
order?: Record<string, OrderDirectionEnum>;
|
|
6
|
-
skip?: number;
|
|
7
|
-
take?: number;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export enum WhereLogicalOperatorEnum {
|
|
11
|
-
AND = '$and',
|
|
12
|
-
OR = '$or',
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export enum WhereOperatorEnum {
|
|
16
|
-
EQ = '$eq',
|
|
17
|
-
NOT_EQ = '$ne',
|
|
18
|
-
GT = '$gt',
|
|
19
|
-
GT_OR_EQ = '$gte',
|
|
20
|
-
LT = '$lt',
|
|
21
|
-
LT_OR_EQ = '$lte',
|
|
22
|
-
IN = '$in',
|
|
23
|
-
NOT_IN = '$notIn',
|
|
24
|
-
LIKE = '$like',
|
|
25
|
-
NOT_LIKE = '$notLike',
|
|
26
|
-
ILIKE = '$iLike',
|
|
27
|
-
NOT_ILIKE = '$notIlike',
|
|
28
|
-
IS_NULL = '$isNull',
|
|
29
|
-
IS_NOT_NULL = '$isNotNull',
|
|
30
|
-
BETWEEN = '$between',
|
|
31
|
-
NOT_BETWEEN = '$notBetween',
|
|
32
|
-
NULL = '$null',
|
|
33
|
-
NOT_NULL = '$notNull',
|
|
34
|
-
IS_TRUE = '$isTrue',
|
|
35
|
-
IS_FALSE = '$isFalse',
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export enum OrderDirectionEnum {
|
|
39
|
-
ASC = 'ASC',
|
|
40
|
-
DESC = 'DESC',
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export interface Relation {
|
|
45
|
-
relation: string;
|
|
46
|
-
select?: string[];
|
|
47
|
-
where?: Record<string, any>;
|
|
48
|
-
}
|
package/src/lib/utils.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function deepMerge(target: any, source: any): any {
|
|
2
|
-
for (const key in source) {
|
|
3
|
-
if (source[key] instanceof Object && key in target) {
|
|
4
|
-
Object.assign(source[key], deepMerge(target[key], source[key]));
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
return {
|
|
8
|
-
...target,
|
|
9
|
-
...source,
|
|
10
|
-
};
|
|
11
|
-
}
|
package/src/lib/where-builder.ts
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { WhereLogicalOperatorEnum, WhereOperatorEnum } from './types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type WhereBuilderCondition = [string, any] | [string, WhereOperatorEnum, any] | [Record<string, any>] | [(builder: WhereBuilder) => void];
|
|
5
|
-
|
|
6
|
-
export class WhereBuilder {
|
|
7
|
-
|
|
8
|
-
private whereObject: Record<string, any> = {};
|
|
9
|
-
|
|
10
|
-
constructor(where?: Record<string, any>) {
|
|
11
|
-
this.whereObject = where || {};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
clear(): this {
|
|
15
|
-
this.whereObject = {};
|
|
16
|
-
return this;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
where(...args: WhereBuilderCondition): this {
|
|
20
|
-
this.parseCondition(null, ...args);
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
andWhere(...args: WhereBuilderCondition): this {
|
|
25
|
-
this.parseCondition(WhereLogicalOperatorEnum.AND, ...args);
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
orWhere(...args: WhereBuilderCondition): this {
|
|
30
|
-
this.parseCondition(WhereLogicalOperatorEnum.OR, ...args);
|
|
31
|
-
return this;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
removeWhere(field: string): this {
|
|
35
|
-
const keys = field.split('.');
|
|
36
|
-
let current = this.whereObject;
|
|
37
|
-
|
|
38
|
-
for (let i = 0; i < keys.length - 1; i++) {
|
|
39
|
-
if (!current[keys[i]]) {
|
|
40
|
-
return this; // If the path doesn't exist, do nothing
|
|
41
|
-
}
|
|
42
|
-
current = current[keys[i]];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
delete current[keys[keys.length - 1]];
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
hasConditions(): boolean {
|
|
50
|
-
return Object.keys(this.whereObject).length > 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
toObject(): Record<string, any> {
|
|
54
|
-
return this.whereObject;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
toJson(): string {
|
|
58
|
-
return JSON.stringify(this.whereObject);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private parseCondition(type: WhereLogicalOperatorEnum | null, ...args: any[]): Record<string, any> {
|
|
62
|
-
let field: string;
|
|
63
|
-
let operator: WhereOperatorEnum;
|
|
64
|
-
let value: any;
|
|
65
|
-
|
|
66
|
-
if (args.length === 0) {
|
|
67
|
-
// Do nothing
|
|
68
|
-
} else if (args.length === 1) {
|
|
69
|
-
const condition = args[0];
|
|
70
|
-
if (typeof condition === 'function') {
|
|
71
|
-
// If the condition is a function, create a new WhereBuilder and call the function with it
|
|
72
|
-
const builder = new WhereBuilder();
|
|
73
|
-
condition(builder);
|
|
74
|
-
this.updateCondition(builder.toObject(), type);
|
|
75
|
-
} else if (condition instanceof WhereBuilder) {
|
|
76
|
-
// If the condition is a WhereBuilder
|
|
77
|
-
this.updateCondition(condition.toObject(), type);
|
|
78
|
-
} else {
|
|
79
|
-
// If the condition is a simple object
|
|
80
|
-
this.updateCondition(condition, type);
|
|
81
|
-
}
|
|
82
|
-
} else if (args.length === 2 || args.length === 3) {
|
|
83
|
-
if (args.length === 2) {
|
|
84
|
-
// if there are only two arguments, the operator is EQ
|
|
85
|
-
field = args[0];
|
|
86
|
-
value = args[1];
|
|
87
|
-
if (typeof value === 'object') {
|
|
88
|
-
const firstKey = Object.keys(value)[0];
|
|
89
|
-
// if the first key is a operator, update the value with the operator
|
|
90
|
-
if (firstKey.startsWith('$')) {
|
|
91
|
-
this.updateCondition({ [field]: value }, type);
|
|
92
|
-
} else {
|
|
93
|
-
this.updateCondition({ [field]: { [WhereOperatorEnum.EQ]: value } }, type);
|
|
94
|
-
}
|
|
95
|
-
} else {
|
|
96
|
-
this.updateCondition({ [field]: { [WhereOperatorEnum.EQ]: value } }, type);
|
|
97
|
-
}
|
|
98
|
-
} else {
|
|
99
|
-
// if there are three arguments, the operator is the second argument
|
|
100
|
-
field = args[0];
|
|
101
|
-
operator = args[1];
|
|
102
|
-
value = args[2];
|
|
103
|
-
this.updateCondition({ [field]: { [operator]: value } }, type);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return this;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// private updateCondition(condition: Record<string, any>, type: '$and' | '$or'): void {
|
|
110
|
-
// this.whereObject[type] = [...(this.whereObject[type] || []), condition].filter(Boolean);
|
|
111
|
-
// }
|
|
112
|
-
|
|
113
|
-
private updateCondition(condition: Record<string, any>, type: WhereLogicalOperatorEnum | null): void {
|
|
114
|
-
if (type === null) {
|
|
115
|
-
this.whereObject = {
|
|
116
|
-
...this.whereObject,
|
|
117
|
-
...condition,
|
|
118
|
-
};
|
|
119
|
-
} else {
|
|
120
|
-
this.whereObject[type] = [...(this.whereObject[type] || []), condition].filter(Boolean);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { QueryBuilder } from '../lib/query-builder';
|
|
2
|
-
import { WhereOperatorEnum } from '../lib/types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
describe('QueryBuilder - Where Conditions', () => {
|
|
6
|
-
let queryBuilder: QueryBuilder;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
queryBuilder = new QueryBuilder({});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('should add where conditions', () => {
|
|
13
|
-
queryBuilder.where('age', 25);
|
|
14
|
-
expect(queryBuilder.toObject().where).toEqual({ age: { $eq: 25 } });
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should add or where conditions', () => {
|
|
18
|
-
queryBuilder.orWhere('age', 25);
|
|
19
|
-
expect(queryBuilder.toObject().where).toEqual({ $or: [{ age: { $eq: 25 } }] });
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should add where conditions with a function', () => {
|
|
23
|
-
queryBuilder.where((builder) => {
|
|
24
|
-
builder.where('age', 25);
|
|
25
|
-
builder.orWhere('name', 'John');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
29
|
-
age: { $eq: 25 },
|
|
30
|
-
$or: [{ name: { $eq: 'John' } }],
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should add or where conditions with a function', () => {
|
|
35
|
-
queryBuilder.orWhere((builder) => {
|
|
36
|
-
builder.where('age', 25);
|
|
37
|
-
builder.orWhere('name', 'John');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
41
|
-
$or: [
|
|
42
|
-
{
|
|
43
|
-
age: { $eq: 25 },
|
|
44
|
-
$or: [{ name: { $eq: 'John' } }],
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('should handle complex where conditions with multiple nested functions', () => {
|
|
51
|
-
queryBuilder.where((builder) => {
|
|
52
|
-
builder.where('age', 25);
|
|
53
|
-
builder.orWhere((innerBuilder) => {
|
|
54
|
-
innerBuilder.where('name', 'John');
|
|
55
|
-
innerBuilder.where('status', 'active');
|
|
56
|
-
});
|
|
57
|
-
builder.where('country', 'USA');
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
61
|
-
age: { $eq: 25 },
|
|
62
|
-
$or: [
|
|
63
|
-
{
|
|
64
|
-
name: { $eq: 'John' },
|
|
65
|
-
status: { $eq: 'active' },
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
country: { $eq: 'USA' },
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should handle complex or where conditions with multiple nested functions', () => {
|
|
73
|
-
queryBuilder.orWhere((builder) => {
|
|
74
|
-
builder.where('age', 25);
|
|
75
|
-
builder.orWhere((innerBuilder) => {
|
|
76
|
-
innerBuilder.where('name', 'John');
|
|
77
|
-
innerBuilder.orWhere('status', 'active');
|
|
78
|
-
});
|
|
79
|
-
builder.orWhere('country', 'USA');
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
83
|
-
$or: [
|
|
84
|
-
{
|
|
85
|
-
age: { $eq: 25 },
|
|
86
|
-
$or: [
|
|
87
|
-
{
|
|
88
|
-
name: { $eq: 'John' },
|
|
89
|
-
$or: [{ status: { $eq: 'active' } }],
|
|
90
|
-
},
|
|
91
|
-
{ country: { $eq: 'USA' } },
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('should handle empty where conditions', () => {
|
|
99
|
-
queryBuilder.where(() => {
|
|
100
|
-
// Do nothing
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
expect(queryBuilder.toObject().where).toEqual(undefined);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('should handle single condition without nesting', () => {
|
|
107
|
-
queryBuilder.where('age', 30);
|
|
108
|
-
|
|
109
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
110
|
-
age: { $eq: 30 },
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should handle multiple conditions with different operators', () => {
|
|
115
|
-
queryBuilder.where((builder) => {
|
|
116
|
-
builder.where('age', 30);
|
|
117
|
-
builder.where('salary', WhereOperatorEnum.GT, 50000);
|
|
118
|
-
builder.orWhere('status', 'employed');
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
122
|
-
age: { $eq: 30 },
|
|
123
|
-
salary: { $gt: 50000 },
|
|
124
|
-
$or: [{ status: { $eq: 'employed' } }],
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('should handle nested orWhere with multiple conditions', () => {
|
|
129
|
-
queryBuilder.orWhere((builder) => {
|
|
130
|
-
builder.where('age', 30);
|
|
131
|
-
builder.orWhere((innerBuilder) => {
|
|
132
|
-
innerBuilder.where('name', 'Alice');
|
|
133
|
-
innerBuilder.orWhere('city', 'New York');
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
138
|
-
$or: [
|
|
139
|
-
{
|
|
140
|
-
age: { $eq: 30 },
|
|
141
|
-
$or: [
|
|
142
|
-
{
|
|
143
|
-
name: { $eq: 'Alice' },
|
|
144
|
-
$or: [{ city: { $eq: 'New York' } }],
|
|
145
|
-
},
|
|
146
|
-
],
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('should handle complex conditions with mixed operators', () => {
|
|
153
|
-
queryBuilder.where((builder) => {
|
|
154
|
-
builder.where('age', { $gte: 18 });
|
|
155
|
-
builder.orWhere((innerBuilder) => {
|
|
156
|
-
innerBuilder.where('name', 'Bob');
|
|
157
|
-
innerBuilder.where('status', { $ne: 'inactive' });
|
|
158
|
-
});
|
|
159
|
-
builder.where('country', { $in: ['USA', 'Canada'] });
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
163
|
-
age: { $gte: 18 },
|
|
164
|
-
$or: [
|
|
165
|
-
{
|
|
166
|
-
name: { $eq: 'Bob' },
|
|
167
|
-
status: { $ne: 'inactive' },
|
|
168
|
-
},
|
|
169
|
-
],
|
|
170
|
-
country: { $in: ['USA', 'Canada'] },
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
});
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { QueryBuilder } from '../lib/query-builder';
|
|
2
|
-
import { OrderDirectionEnum } from '../lib/types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
describe('QueryBuilder', () => {
|
|
6
|
-
let queryBuilder: QueryBuilder;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
queryBuilder = new QueryBuilder({});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('should set options', () => {
|
|
13
|
-
const options = { select: ['name', 'age'] };
|
|
14
|
-
queryBuilder.setOptions(options);
|
|
15
|
-
expect(queryBuilder.toObject().select).toEqual(options.select);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('should merge options shallowly', () => {
|
|
19
|
-
queryBuilder.setOptions({ select: ['name'] });
|
|
20
|
-
queryBuilder.mergeOptions({ select: ['age'] });
|
|
21
|
-
expect(queryBuilder.toObject().select).toEqual(['age']);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('should merge options deeply', () => {
|
|
25
|
-
queryBuilder.setOptions({ where: { age: { $gt: 18 } } });
|
|
26
|
-
queryBuilder.mergeOptions({ where: { name: { $eq: 'John' } } }, true);
|
|
27
|
-
expect(queryBuilder.toObject().where).toEqual({
|
|
28
|
-
age: { $gt: 18 },
|
|
29
|
-
name: { $eq: 'John' },
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should add select fields', () => {
|
|
34
|
-
queryBuilder.addSelect('name');
|
|
35
|
-
queryBuilder.addSelect(['age', 'email']);
|
|
36
|
-
expect(queryBuilder.toObject().select).toEqual([
|
|
37
|
-
'name',
|
|
38
|
-
'age',
|
|
39
|
-
'email',
|
|
40
|
-
]);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should remove select fields', () => {
|
|
44
|
-
queryBuilder.addSelect([
|
|
45
|
-
'name',
|
|
46
|
-
'age',
|
|
47
|
-
'email',
|
|
48
|
-
]);
|
|
49
|
-
queryBuilder.removeSelect('age');
|
|
50
|
-
expect(queryBuilder.toObject().select).toEqual(['name', 'email']);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('should add and remove relations as array of objects', () => {
|
|
54
|
-
queryBuilder.addRelation('profile', ['id', 'bio']);
|
|
55
|
-
queryBuilder.addRelation('posts', ['title', 'content']);
|
|
56
|
-
|
|
57
|
-
const relations = queryBuilder.toObject().relations;
|
|
58
|
-
expect(relations).toEqual(
|
|
59
|
-
expect.arrayContaining([
|
|
60
|
-
expect.objectContaining({
|
|
61
|
-
relation: 'profile',
|
|
62
|
-
select: ['id', 'bio'],
|
|
63
|
-
}),
|
|
64
|
-
expect.objectContaining({
|
|
65
|
-
relation: 'posts',
|
|
66
|
-
select: ['title', 'content'],
|
|
67
|
-
}),
|
|
68
|
-
]),
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
queryBuilder.removeRelation('profile');
|
|
72
|
-
const updatedRelations = queryBuilder.toObject().relations;
|
|
73
|
-
expect(updatedRelations).toEqual(
|
|
74
|
-
expect.arrayContaining([
|
|
75
|
-
expect.objectContaining({
|
|
76
|
-
relation: 'posts',
|
|
77
|
-
select: ['title', 'content'],
|
|
78
|
-
}),
|
|
79
|
-
]),
|
|
80
|
-
);
|
|
81
|
-
expect(updatedRelations).not.toEqual(
|
|
82
|
-
expect.arrayContaining([expect.objectContaining({ relation: 'profile' })]),
|
|
83
|
-
);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should handle null or empty relations', () => {
|
|
87
|
-
queryBuilder.addRelation('profile');
|
|
88
|
-
expect(queryBuilder.toObject().relations).not.toEqual(undefined);
|
|
89
|
-
|
|
90
|
-
queryBuilder.addRelation('profile');
|
|
91
|
-
queryBuilder.removeRelation('profile');
|
|
92
|
-
expect(queryBuilder.toObject().relations).toEqual(undefined);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should add and remove relations as array of strings', () => {
|
|
96
|
-
queryBuilder.addRelation('profile');
|
|
97
|
-
queryBuilder.addRelation('posts');
|
|
98
|
-
|
|
99
|
-
const relations = queryBuilder.toObject().relations;
|
|
100
|
-
expect(relations).toEqual(
|
|
101
|
-
expect.arrayContaining([expect.objectContaining({ relation: 'profile' }), expect.objectContaining({ relation: 'posts' })]),
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
queryBuilder.removeRelation('profile');
|
|
105
|
-
const updatedRelations = queryBuilder.toObject().relations;
|
|
106
|
-
expect(updatedRelations).toEqual(
|
|
107
|
-
expect.arrayContaining([expect.objectContaining({ relation: 'posts' })]),
|
|
108
|
-
);
|
|
109
|
-
expect(updatedRelations).not.toEqual(
|
|
110
|
-
expect.arrayContaining([expect.objectContaining({ relation: 'profile' })]),
|
|
111
|
-
);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should add where conditions', () => {
|
|
115
|
-
queryBuilder.where('age', 25);
|
|
116
|
-
expect(queryBuilder.toObject().where).toEqual({ age: { $eq: 25 } });
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('should handle empty where conditions', () => {
|
|
120
|
-
queryBuilder.where(() => {
|
|
121
|
-
// Do nothing
|
|
122
|
-
});
|
|
123
|
-
expect(queryBuilder.toObject().where).toEqual(undefined);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should add order', () => {
|
|
127
|
-
queryBuilder.addOrder('name', OrderDirectionEnum.ASC);
|
|
128
|
-
expect(queryBuilder.toObject().order).toEqual({ name: OrderDirectionEnum.ASC });
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it('should remove order', () => {
|
|
132
|
-
queryBuilder.addOrder('name', OrderDirectionEnum.ASC);
|
|
133
|
-
queryBuilder.removeOrder('name');
|
|
134
|
-
expect(queryBuilder.toObject().order).toEqual({});
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
it('should set skip and take', () => {
|
|
138
|
-
queryBuilder.setSkip(10);
|
|
139
|
-
queryBuilder.setTake(5);
|
|
140
|
-
expect(queryBuilder.toObject().skip).toBe(10);
|
|
141
|
-
expect(queryBuilder.toObject().take).toBe(5);
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('should convert to JSON', () => {
|
|
145
|
-
queryBuilder.setOptions({ select: ['name'] });
|
|
146
|
-
const json = queryBuilder.toJson();
|
|
147
|
-
expect(json).toBe(JSON.stringify(queryBuilder.toObject()));
|
|
148
|
-
});
|
|
149
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { RelationBuilder } from '../lib/relation-builder';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
describe('RelationBuilder', () => {
|
|
5
|
-
let relationBuilder: RelationBuilder;
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
relationBuilder = new RelationBuilder();
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('should handle empty relations', () => {
|
|
12
|
-
// Initially, the relations should be empty
|
|
13
|
-
expect(relationBuilder.toObject()).toEqual([]);
|
|
14
|
-
|
|
15
|
-
// Clear any relations if set
|
|
16
|
-
relationBuilder.clear();
|
|
17
|
-
expect(relationBuilder.toObject()).toEqual([]);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('should handle setting empty relations', () => {
|
|
21
|
-
// Set empty relations
|
|
22
|
-
relationBuilder.setRelations([]);
|
|
23
|
-
expect(relationBuilder.toObject()).toEqual([]);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('should handle clearing relations', () => {
|
|
27
|
-
// Add some relations and then clear them
|
|
28
|
-
relationBuilder.setRelations(['relation1', 'relation2']);
|
|
29
|
-
relationBuilder.clear();
|
|
30
|
-
expect(relationBuilder.toObject()).toEqual([]);
|
|
31
|
-
});
|
|
32
|
-
});
|
package/tsconfig.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"forceConsistentCasingInFileNames": true,
|
|
6
|
-
"strict": true,
|
|
7
|
-
"noImplicitOverride": true,
|
|
8
|
-
"noImplicitReturns": true,
|
|
9
|
-
"noPropertyAccessFromIndexSignature": true
|
|
10
|
-
},
|
|
11
|
-
"files": [],
|
|
12
|
-
"include": [],
|
|
13
|
-
"references": [
|
|
14
|
-
{
|
|
15
|
-
"path": "./tsconfig.lib.json"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"path": "./tsconfig.spec.json"
|
|
19
|
-
}
|
|
20
|
-
]
|
|
21
|
-
}
|
package/tsconfig.lib.json
DELETED
package/tsconfig.spec.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "../../dist/out-tsc",
|
|
5
|
-
"module": "commonjs",
|
|
6
|
-
"moduleResolution": "node10",
|
|
7
|
-
"types": ["jest", "node"]
|
|
8
|
-
},
|
|
9
|
-
"include": [
|
|
10
|
-
"jest.config.ts",
|
|
11
|
-
"src/**/*.test.ts",
|
|
12
|
-
"src/**/*.spec.ts",
|
|
13
|
-
"src/**/*.d.ts"
|
|
14
|
-
]
|
|
15
|
-
}
|
package/vite.config.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/// <reference types='vitest' />
|
|
2
|
-
import { defineConfig } from 'vite';
|
|
3
|
-
import dts from 'vite-plugin-dts';
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
|
|
6
|
-
import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
|
|
7
|
-
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
root: __dirname,
|
|
10
|
-
cacheDir: '../../node_modules/.vite/packages/nest-crud-request',
|
|
11
|
-
plugins: [
|
|
12
|
-
nxViteTsPaths(),
|
|
13
|
-
nxCopyAssetsPlugin(['*.md']),
|
|
14
|
-
dts({
|
|
15
|
-
entryRoot: 'src',
|
|
16
|
-
tsconfigPath: path.join(__dirname, 'tsconfig.lib.json'),
|
|
17
|
-
}),
|
|
18
|
-
],
|
|
19
|
-
// Uncomment this if you are using workers.
|
|
20
|
-
// worker: {
|
|
21
|
-
// plugins: [ nxViteTsPaths() ],
|
|
22
|
-
// },
|
|
23
|
-
// Configuration for building your library.
|
|
24
|
-
// See: https://vitejs.dev/guide/build.html#library-mode
|
|
25
|
-
build: {
|
|
26
|
-
outDir: '../../dist/packages/nest-crud-request',
|
|
27
|
-
emptyOutDir: true,
|
|
28
|
-
reportCompressedSize: true,
|
|
29
|
-
commonjsOptions: {
|
|
30
|
-
transformMixedEsModules: true,
|
|
31
|
-
},
|
|
32
|
-
lib: {
|
|
33
|
-
// Could also be a dictionary or array of multiple entry points.
|
|
34
|
-
entry: 'src/index.ts',
|
|
35
|
-
name: 'nest-crud-request',
|
|
36
|
-
fileName: 'index',
|
|
37
|
-
// Change this to the formats you want to support.
|
|
38
|
-
// Don't forget to update your package.json as well.
|
|
39
|
-
formats: ['es'],
|
|
40
|
-
},
|
|
41
|
-
rollupOptions: {
|
|
42
|
-
// External packages that should not be bundled into your library.
|
|
43
|
-
external: [],
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
});
|