@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.
@@ -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
+ }
@@ -118,4 +118,5 @@ export declare class QueryParser {
118
118
  * @returns a casted filter
119
119
  */
120
120
  static transformFilter<T = any>(filter: T): T;
121
+ private static isValidDateStr;
121
122
  }
@@ -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 (typeof value === 'object' && !validId && !(0, lodash_1.isNil)(value)) {
268
- // console.log('walking......', key);
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
@@ -12,5 +12,6 @@ export declare class Tester {
12
12
  transformFilter(): void;
13
13
  transformFilterNull(): void;
14
14
  transformFilter2(): void;
15
+ parseNestedFilter(): void;
15
16
  transformFilterAggregate(): void;
16
17
  }
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.26",
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.0",
35
+ "@types/chai": "^5.2.2",
36
36
  "@types/lodash": "^4.17.16",
37
37
  "@types/mocha": "^10.0.10",
38
- "@types/node": "^22.13.10",
38
+ "@types/node": "^22.15.10",
39
39
  "@types/qs": "^6.9.18",
40
- "@typescript-eslint/eslint-plugin": "^8.26.1",
41
- "@typescript-eslint/parser": "^8.26.1",
40
+ "@typescript-eslint/eslint-plugin": "^8.32.0",
41
+ "@typescript-eslint/parser": "^8.32.0",
42
42
  "chai": "^4.5.0",
43
- "eslint": "^9.22.0",
44
- "eslint-config-prettier": "^10.1.1",
45
- "eslint-plugin-prettier": "^5.2.3",
46
- "mocha": "^11.1.0",
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.2"
50
+ "typescript": "^5.8.3"
51
51
  },
52
52
  "dependencies": {
53
53
  "lodash": "^4.17.21",