c2-mongoose 2.1.283 → 2.1.284

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.
@@ -31,6 +31,7 @@ declare class SearcherFlow<D> {
31
31
  extractFieldsOfType(schema: Schema, typing?: string, parent?: string): string[];
32
32
  buildCondition(key: string, value: any): any;
33
33
  buildDefaultFilters(objectSearch: any): any;
34
+ normalizeValue(key: string, value: any): any;
34
35
  isValidObjectId(value: string): boolean;
35
36
  buildOrdenation(): any;
36
37
  buildRegex(searchText: string): RegExp;
@@ -304,7 +304,7 @@ var SearcherFlow = /** @class */ (function () {
304
304
  var _this = this;
305
305
  // Recuperar todos os campos do tipo String
306
306
  var camposString = (0, Utils_1.isEmpty)(this.searchTextFields) ? this.extractFieldsOfType(this.model.schema, 'String') : this.searchTextFields;
307
- var filters = { $and: [] };
307
+ var andQueriesParam = [];
308
308
  Object.entries(objectSearch).forEach(function (_a) {
309
309
  var key = _a[0], value = _a[1];
310
310
  if ((0, Utils_1.isNotEmpty)(value) || value === null) {
@@ -341,7 +341,7 @@ var SearcherFlow = /** @class */ (function () {
341
341
  value = false;
342
342
  }
343
343
  var condition = _this.buildCondition(key, value);
344
- filters.$and.push(condition);
344
+ andQueriesParam.push(condition);
345
345
  }
346
346
  });
347
347
  if ((0, Utils_1.isNotEmpty)(this.searchText) && (0, Utils_1.isNotEmpty)(camposString)) {
@@ -353,34 +353,55 @@ var SearcherFlow = /** @class */ (function () {
353
353
  conditionAux[fieldString] = { $regex: regex };
354
354
  conditions.$or.push(conditionAux);
355
355
  }
356
- filters.$and.push(conditions);
356
+ andQueriesParam.push(conditions);
357
357
  }
358
- if (filters.$and.length === 0)
359
- delete filters['$and'];
358
+ // if (filters.$and.length === 0)
359
+ // delete filters['$and']
360
+ var orPayload = [];
360
361
  if (objectSearch === null || objectSearch === void 0 ? void 0 : objectSearch.or) {
362
+ var _loop_1 = function (clause) {
363
+ if (clause.and && Array.isArray(clause.and)) {
364
+ var clauseAnd_1 = [];
365
+ Object.entries(clause.and).forEach(function (_a) {
366
+ var key = _a[0], value = _a[1];
367
+ if ((0, Utils_1.isEmpty)(value))
368
+ return;
369
+ value = _this.normalizeValue(key, value);
370
+ var condition = _this.buildCondition(key, value);
371
+ clauseAnd_1.push(condition);
372
+ });
373
+ orPayload.push(clauseAnd_1);
374
+ }
375
+ };
361
376
  for (var _b = 0, _c = objectSearch === null || objectSearch === void 0 ? void 0 : objectSearch.or; _b < _c.length; _b++) {
362
377
  var clause = _c[_b];
363
- if (!filters.$or)
364
- filters.$or = [];
365
- Object.entries(clause).forEach(function (_a) {
366
- var key = _a[0], value = _a[1];
367
- if ((0, Utils_1.isEmpty)(value))
368
- return;
369
- if (typeof value === 'string' && _this.isValidObjectId(value) && key !== 'owner') {
370
- value = new mongoose_1.Types.ObjectId(value);
371
- }
372
- if (value === 'true') {
373
- value = true;
374
- }
375
- if (value === 'false') {
376
- value = false;
377
- }
378
- var condition = _this.buildCondition(key, value);
379
- filters.$or.push(condition);
380
- });
378
+ _loop_1(clause);
381
379
  }
382
380
  }
383
- return filters;
381
+ var filtersFinal = {};
382
+ if (andQueriesParam.length > 0) {
383
+ if (!filtersFinal.$or)
384
+ filtersFinal.$or = [];
385
+ filtersFinal.$or = __spreadArray(__spreadArray([], filtersFinal.$or, true), [{ $and: __spreadArray([], andQueriesParam, true) }], false);
386
+ }
387
+ if (orPayload.length > 0) {
388
+ if (!filtersFinal.$or)
389
+ filtersFinal.$or = [];
390
+ filtersFinal.$or = __spreadArray(__spreadArray([], filtersFinal.$or, true), [{ $and: __spreadArray([], orPayload, true) }], false);
391
+ }
392
+ return filtersFinal;
393
+ };
394
+ SearcherFlow.prototype.normalizeValue = function (key, value) {
395
+ if (typeof value === 'string' && this.isValidObjectId(value) && key !== 'owner') {
396
+ value = new mongoose_1.Types.ObjectId(value);
397
+ }
398
+ if (value === 'true') {
399
+ value = true;
400
+ }
401
+ if (value === 'false') {
402
+ value = false;
403
+ }
404
+ return value;
384
405
  };
385
406
  SearcherFlow.prototype.isValidObjectId = function (value) {
386
407
  var objectIdPattern = /^[0-9a-fA-F]{24}$/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c2-mongoose",
3
- "version": "2.1.283",
3
+ "version": "2.1.284",
4
4
  "description": "Lib to make any search in database mongoose and use as basic crud",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -285,7 +285,7 @@ class SearcherFlow<D> {
285
285
  const camposString = isEmpty(this.searchTextFields) ? this.extractFieldsOfType(this.model.schema, 'String') : this.searchTextFields
286
286
 
287
287
 
288
- let filters = { $and: [] } as any
288
+ const andQueriesParam = []
289
289
  Object.entries(objectSearch).forEach(([key, value]) => {
290
290
  if (isNotEmpty(value) || value === null) {
291
291
  if ([
@@ -324,7 +324,7 @@ class SearcherFlow<D> {
324
324
  }
325
325
 
326
326
  const condition = this.buildCondition(key, value)
327
- filters.$and.push(condition)
327
+ andQueriesParam.push(condition)
328
328
  }
329
329
  })
330
330
 
@@ -337,40 +337,59 @@ class SearcherFlow<D> {
337
337
 
338
338
  conditions.$or.push(conditionAux)
339
339
  }
340
- filters.$and.push(conditions)
340
+ andQueriesParam.push(conditions)
341
341
  }
342
342
 
343
- if (filters.$and.length === 0)
344
- delete filters['$and']
343
+ // if (filters.$and.length === 0)
344
+ // delete filters['$and']
345
345
 
346
+ const orPayload: any[] = []
346
347
  if (objectSearch?.or) {
347
348
  for (const clause of objectSearch?.or) {
348
- if (!filters.$or) filters.$or = []
349
-
350
- Object.entries(clause).forEach(([key, value]) => {
351
-
352
- if (isEmpty(value)) return
353
-
354
- if (typeof value === 'string' && this.isValidObjectId(value as string) && key !== 'owner') {
355
- value = new Types.ObjectId(value as string)
356
- }
357
-
358
- if (value === 'true') {
359
- value = true
360
- }
361
-
362
- if (value === 'false') {
363
- value = false
364
- }
365
-
366
- const condition = this.buildCondition(key, value)
367
- filters.$or.push(condition)
368
- })
349
+ if (clause.and && Array.isArray(clause.and)) {
350
+ const clauseAnd: any[] = []
351
+ Object.entries(clause.and).forEach(([key, value]) => {
352
+ if (isEmpty(value)) return
353
+ value = this.normalizeValue(key, value)
354
+ const condition = this.buildCondition(key, value)
355
+ clauseAnd.push(condition)
356
+ })
357
+
358
+ orPayload.push(clauseAnd)
359
+ }
369
360
  }
370
- }
361
+ }
362
+
363
+ const filtersFinal = {} as any
371
364
 
365
+ if (andQueriesParam.length > 0) {
366
+ if (!filtersFinal.$or) filtersFinal.$or = []
367
+ filtersFinal.$or = [...filtersFinal.$or, { $and: [...andQueriesParam] }]
368
+ }
369
+
370
+ if (orPayload.length > 0) {
371
+ if (!filtersFinal.$or) filtersFinal.$or = []
372
+ filtersFinal.$or = [...filtersFinal.$or, { $and: [...orPayload] }]
373
+ }
374
+
375
+
376
+ return filtersFinal
377
+ }
378
+
379
+ public normalizeValue(key: string, value: any): any {
380
+ if (typeof value === 'string' && this.isValidObjectId(value as string) && key !== 'owner') {
381
+ value = new Types.ObjectId(value as string)
382
+ }
383
+
384
+ if (value === 'true') {
385
+ value = true
386
+ }
387
+
388
+ if (value === 'false') {
389
+ value = false
390
+ }
372
391
 
373
- return filters
392
+ return value
374
393
  }
375
394
 
376
395
  public isValidObjectId(value: string) {