@geekbears/gb-mongoose-query-parser 1.3.26 → 1.3.28
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/.vscode/launch.json +18 -0
- package/lib/query-parser-helper.d.ts +1 -0
- package/lib/query-parser-helper.js +11 -2
- package/lib/test.spec.d.ts +1 -0
- package/lib/test.spec.js +26 -0
- package/package.json +10 -10
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
|
3
|
+
// Hover to view descriptions of existing attributes.
|
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
{
|
|
8
|
+
"type": "node",
|
|
9
|
+
"request": "launch",
|
|
10
|
+
"name": "Mocha Test Debugger",
|
|
11
|
+
"skipFiles": ["<node_internals>/**"],
|
|
12
|
+
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
|
|
13
|
+
"args": ["${workspaceFolder}/lib/**/*.spec.js"],
|
|
14
|
+
"preLaunchTask": "tsc: build - tsconfig.json",
|
|
15
|
+
"outputCapture": "std"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -5,6 +5,7 @@ const mongoose_1 = require("mongoose");
|
|
|
5
5
|
const lodash_1 = require("lodash");
|
|
6
6
|
const query_parser_1 = require("./query-parser");
|
|
7
7
|
const class_validator_1 = require("class-validator");
|
|
8
|
+
const moment = require("moment");
|
|
8
9
|
/**
|
|
9
10
|
* Helper class
|
|
10
11
|
* Implements the `MongooseQueryParser` and exposes a single method to execute queries on models
|
|
@@ -264,8 +265,13 @@ class QueryParser {
|
|
|
264
265
|
// console.log(obj);
|
|
265
266
|
// console.log('HERE', key);
|
|
266
267
|
// console.log('obj :>> ', obj);
|
|
267
|
-
if (
|
|
268
|
-
|
|
268
|
+
if (!(0, lodash_1.isNil)(value) &&
|
|
269
|
+
typeof value === 'string' &&
|
|
270
|
+
this.isValidDateStr(value) &&
|
|
271
|
+
moment(value).isValid()) {
|
|
272
|
+
obj[key] = moment(value).toDate();
|
|
273
|
+
}
|
|
274
|
+
else if (typeof value === 'object' && !validId && !(0, lodash_1.isNil)(value)) {
|
|
269
275
|
walk(obj[key]);
|
|
270
276
|
}
|
|
271
277
|
else
|
|
@@ -278,6 +284,9 @@ class QueryParser {
|
|
|
278
284
|
// console.log('res', res.filter);
|
|
279
285
|
return res;
|
|
280
286
|
}
|
|
287
|
+
static isValidDateStr(dateString) {
|
|
288
|
+
return !isNaN(Date.parse(dateString));
|
|
289
|
+
}
|
|
281
290
|
}
|
|
282
291
|
exports.QueryParser = QueryParser;
|
|
283
292
|
//# sourceMappingURL=query-parser-helper.js.map
|
package/lib/test.spec.d.ts
CHANGED
package/lib/test.spec.js
CHANGED
|
@@ -15,6 +15,7 @@ const chai_1 = require("chai");
|
|
|
15
15
|
const _1 = require("./");
|
|
16
16
|
const mongoose_1 = require("mongoose");
|
|
17
17
|
const lodash_1 = require("lodash");
|
|
18
|
+
const moment = require("moment");
|
|
18
19
|
let Tester = class Tester {
|
|
19
20
|
generalParse() {
|
|
20
21
|
const parser = new _1.MongooseQueryParser();
|
|
@@ -197,6 +198,25 @@ let Tester = class Tester {
|
|
|
197
198
|
const transformedFilter = _1.QueryParser.transformFilter(parsed);
|
|
198
199
|
chai_1.assert.isOk((0, mongoose_1.isObjectIdOrHexString)(transformedFilter.filter._tags.$in[0]));
|
|
199
200
|
}
|
|
201
|
+
parseNestedFilter() {
|
|
202
|
+
const parser = new _1.MongooseQueryParser();
|
|
203
|
+
const now = moment();
|
|
204
|
+
const filter = {
|
|
205
|
+
dates: { startDate: { $gte: now.toDate() }, endDate: { $lte: now.add(1, 'day').toDate() } },
|
|
206
|
+
nested: {
|
|
207
|
+
nested1: {
|
|
208
|
+
nested2: { startDate: { $gte: now.toDate() }, endDate: { $lte: now.add(1, 'day').toDate() } },
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
const query = { filter };
|
|
213
|
+
const parsed = parser.parse(query);
|
|
214
|
+
const transformedFilter = _1.QueryParser.transformFilter(parsed);
|
|
215
|
+
chai_1.assert.isOk(transformedFilter.filter.dates.startDate.$gte instanceof Date);
|
|
216
|
+
chai_1.assert.isOk(transformedFilter.filter.dates.endDate.$lte instanceof Date);
|
|
217
|
+
chai_1.assert.isOk(transformedFilter.filter.nested.nested1.nested2.endDate.$lte instanceof Date);
|
|
218
|
+
chai_1.assert.isOk(transformedFilter.filter.nested.nested1.nested2.startDate.$gte instanceof Date);
|
|
219
|
+
}
|
|
200
220
|
transformFilterAggregate() {
|
|
201
221
|
// let parser = new MongooseQueryParser();
|
|
202
222
|
const matchStage = { $match: { _id: new mongoose_1.Types.ObjectId().toString() } };
|
|
@@ -327,6 +347,12 @@ __decorate([
|
|
|
327
347
|
__metadata("design:paramtypes", []),
|
|
328
348
|
__metadata("design:returntype", void 0)
|
|
329
349
|
], Tester.prototype, "transformFilter2", null);
|
|
350
|
+
__decorate([
|
|
351
|
+
(0, mocha_1.test)('should parse nested filter with dates'),
|
|
352
|
+
__metadata("design:type", Function),
|
|
353
|
+
__metadata("design:paramtypes", []),
|
|
354
|
+
__metadata("design:returntype", void 0)
|
|
355
|
+
], Tester.prototype, "parseNestedFilter", null);
|
|
330
356
|
__decorate([
|
|
331
357
|
(0, mocha_1.test)('should use transformFilter in Aggregate'),
|
|
332
358
|
__metadata("design:type", Function),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geekbears/gb-mongoose-query-parser",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.28",
|
|
4
4
|
"description": "Convert url query string to MongooseJs friendly query object including advanced filtering, sorting, population, deep population, string template, type casting and many more...",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -32,22 +32,22 @@
|
|
|
32
32
|
"homepage": "https://gitlab.com/geekbears/utilities/backend/gb-mongoose-query-parser#readme",
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@testdeck/mocha": "^0.3.3",
|
|
35
|
-
"@types/chai": "^5.2.
|
|
35
|
+
"@types/chai": "^5.2.2",
|
|
36
36
|
"@types/lodash": "^4.17.16",
|
|
37
37
|
"@types/mocha": "^10.0.10",
|
|
38
|
-
"@types/node": "^22.
|
|
38
|
+
"@types/node": "^22.15.10",
|
|
39
39
|
"@types/qs": "^6.9.18",
|
|
40
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
41
|
-
"@typescript-eslint/parser": "^8.
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^8.32.0",
|
|
41
|
+
"@typescript-eslint/parser": "^8.32.0",
|
|
42
42
|
"chai": "^4.5.0",
|
|
43
|
-
"eslint": "^9.
|
|
44
|
-
"eslint-config-prettier": "^10.1.
|
|
45
|
-
"eslint-plugin-prettier": "^5.
|
|
46
|
-
"mocha": "^11.
|
|
43
|
+
"eslint": "^9.26.0",
|
|
44
|
+
"eslint-config-prettier": "^10.1.2",
|
|
45
|
+
"eslint-plugin-prettier": "^5.4.0",
|
|
46
|
+
"mocha": "^11.2.2",
|
|
47
47
|
"prettier": "^3.5.3",
|
|
48
48
|
"rimraf": "^6.0.1",
|
|
49
49
|
"ts-node": "^10.9.2",
|
|
50
|
-
"typescript": "^5.8.
|
|
50
|
+
"typescript": "^5.8.3"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"lodash": "^4.17.21",
|