drapcode-utility 1.9.6 → 1.9.78

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.
@@ -48,12 +48,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
48
48
  return (mod && mod.__esModule) ? mod : { "default": mod };
49
49
  };
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.getMinMaxValue = exports.isFixedValueQuery = exports.isEntityInCondition = exports.queryParser = void 0;
51
+ exports.isEntityInCondition = exports.queryParser = void 0;
52
52
  var moment_1 = __importDefault(require("moment"));
53
53
  var drapcode_constant_1 = require("drapcode-constant");
54
54
  var date_util_1 = require("./date-util");
55
55
  var util_1 = require("./util");
56
56
  var prepare_query_1 = require("./prepare-query");
57
+ var query_utils_1 = require("./query-utils");
57
58
  var queryParser = function (collectionName, query, constants, externalParams, currentUser, timezone, searchObj, refCollectionFieldsInItems, searchQueryTypeObj, currentTenant, currentUserSetting, currentSubTenant, lookupConfig, rowLevelSecurityFilter) {
58
59
  if (currentUser === void 0) { currentUser = {}; }
59
60
  if (searchObj === void 0) { searchObj = null; }
@@ -99,7 +100,7 @@ var queryParser = function (collectionName, query, constants, externalParams, cu
99
100
  (filterQuery[0].$and && filterQuery[0].$and.length))) {
100
101
  searchQueryObj = null;
101
102
  if (searchObj) {
102
- _a = getSearchObjQuery(searchObj, searchQueryTypeObj, timezone), searchAggregateQuery = _a.searchAggregateQuery, likeQuery = _a.likeQuery;
103
+ _a = (0, query_utils_1.getSearchObjQuery)(searchObj, searchQueryTypeObj, timezone), searchAggregateQuery = _a.searchAggregateQuery, likeQuery = _a.likeQuery;
103
104
  aggregateQuery = __spreadArray(__spreadArray([], aggregateQuery, true), searchAggregateQuery, true);
104
105
  console.log("likeQuery after getSearchObjQuery", JSON.stringify(likeQuery));
105
106
  if (likeQuery && likeQuery.length > 0) {
@@ -139,7 +140,7 @@ var queryParser = function (collectionName, query, constants, externalParams, cu
139
140
  }
140
141
  else if (searchObj) {
141
142
  console.log("I donot have filter query");
142
- _b = getSearchObjQuery(searchObj, searchQueryTypeObj, timezone), searchAggregateQuery = _b.searchAggregateQuery, likeQuery = _b.likeQuery;
143
+ _b = (0, query_utils_1.getSearchObjQuery)(searchObj, searchQueryTypeObj, timezone), searchAggregateQuery = _b.searchAggregateQuery, likeQuery = _b.likeQuery;
143
144
  aggregateQuery = __spreadArray(__spreadArray([], aggregateQuery, true), searchAggregateQuery, true);
144
145
  if (likeQuery.length) {
145
146
  aggregateQuery.push({ $match: { $and: likeQuery } });
@@ -148,7 +149,7 @@ var queryParser = function (collectionName, query, constants, externalParams, cu
148
149
  console.log("aggregateQuery", JSON.stringify(aggregateQuery));
149
150
  console.log("==> query", query);
150
151
  console.log("lookupConfig", lookupConfig);
151
- projection = mongoSelectQuery(query);
152
+ projection = (0, query_utils_1.mongoSelectQuery)(query);
152
153
  finder = query.finder, sortBy = query.sortBy, orderBy = query.orderBy;
153
154
  if (!(finder != "COUNT" && refCollectionFieldsInItems)) return [3 /*break*/, 2];
154
155
  return [4 /*yield*/, Promise.all(refCollectionFieldsInItems.map(function (field) {
@@ -190,20 +191,6 @@ var queryParser = function (collectionName, query, constants, externalParams, cu
190
191
  });
191
192
  };
192
193
  exports.queryParser = queryParser;
193
- var toBoolean = function (value) {
194
- if (!value) {
195
- return false;
196
- }
197
- switch (value.toLocaleLowerCase()) {
198
- case "true":
199
- case "1":
200
- case "on":
201
- case "yes":
202
- return true;
203
- default:
204
- return false;
205
- }
206
- };
207
194
  var mongoFilterQuery = function (query, externalParams, constants, currentUser, currentTenant, currentUserSetting, currentSubTenant, timezone) {
208
195
  if (currentUser === void 0) { currentUser = {}; }
209
196
  if (currentTenant === void 0) { currentTenant = {}; }
@@ -242,49 +229,7 @@ var mongoFilterQuery = function (query, externalParams, constants, currentUser,
242
229
  });
243
230
  console.log("==> *** filterQuery mongoFilterQuery :>> ", filterQuery);
244
231
  var hasAndQueryConjunction = queryConjunctions.includes("AND");
245
- var resultQuery = modifyQuery(filterQuery, hasAndQueryConjunction);
246
- console.log("=>> resultQuery :>> ", resultQuery);
247
- console.log("=>> JSON.stringify(resultQuery) :>> ", JSON.stringify(resultQuery));
248
- return resultQuery;
249
- };
250
- var mongoSelectQuery = function (query) {
251
- if (query === void 0) { query = {}; }
252
- var projection = {};
253
- var fieldsInclude = query.fieldsInclude, fieldsExclude = query.fieldsExclude, finder = query.finder;
254
- if (!fieldsExclude)
255
- fieldsExclude = [];
256
- if (fieldsInclude[0] === "*") {
257
- fieldsExclude.map(function (field) {
258
- if (field)
259
- return (projection["".concat(field)] = 0);
260
- });
261
- }
262
- else {
263
- if (["FIND_ALL", "FIND"].includes(finder))
264
- fieldsInclude = (0, util_1.processFieldsInlcude)(fieldsInclude);
265
- fieldsInclude.map(function (field) {
266
- if (field)
267
- return (projection["".concat(field)] = 1);
268
- });
269
- }
270
- return projection;
271
- };
272
- var modifyQuery = function (obj, hasAndQueryConjunction) {
273
- if (obj === void 0) { obj = {}; }
274
- if (hasAndQueryConjunction === void 0) { hasAndQueryConjunction = false; }
275
- var arr = [];
276
- console.log("🚀 ~ file: query-parser.ts:294 ~ modifyQuery ~ hasAndQueryConjunction:", hasAndQueryConjunction);
277
- Object.entries(obj).forEach(function (_a) {
278
- var key = _a[0], value = _a[1];
279
- if (hasAndQueryConjunction) {
280
- arr.push({ $and: value });
281
- }
282
- else {
283
- arr.push({ $or: value });
284
- }
285
- });
286
- console.log("🚀 ~ file: query-parser.ts:303 ~ Object.entries ~ arr:", arr);
287
- return arr;
232
+ return (0, query_utils_1.modifyQuery)(filterQuery, hasAndQueryConjunction);
288
233
  };
289
234
  var queryToMongo = function (query, requiredExternal, externalParams, constants, currentUser, currentTenant, currentUserSetting, currentSubTenant, timezone) {
290
235
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13;
@@ -309,17 +254,12 @@ var queryToMongo = function (query, requiredExternal, externalParams, constants,
309
254
  fieldValue = "random_string_since_field_not_present_".concat((0, moment_1.default)(1318874398806).valueOf());
310
255
  }
311
256
  console.log("fieldValue queryToMongo 1", fieldValue);
312
- var isDate = checkDate(fieldValue);
257
+ var isDate = (0, query_utils_1.checkDate)(fieldValue);
313
258
  console.log("isDate queryToMongo 2", isDate);
314
259
  // Todo: Remove if it's working properly
315
260
  // if (isDate) fieldValue = new Date(fieldValue);
316
261
  console.log("fieldValue queryToMongo 1", fieldValue);
317
- var condition = [
318
- drapcode_constant_1.FieldTypes.dynamic_option.id,
319
- drapcode_constant_1.FieldTypes.reference.id,
320
- drapcode_constant_1.FieldTypes.static_option.id,
321
- drapcode_constant_1.FieldTypes.belongsTo.id,
322
- ].includes(fieldType);
262
+ var condition = __spreadArray(__spreadArray([], drapcode_constant_1.OptionTypeFields, true), drapcode_constant_1.BelongsToReferenceField, true).includes(fieldType);
323
263
  if (condition && key === drapcode_constant_1.EQUALS && !isDate) {
324
264
  if (!Array.isArray(fieldValue)) {
325
265
  fieldValue = [fieldValue];
@@ -386,22 +326,6 @@ var queryToMongo = function (query, requiredExternal, externalParams, constants,
386
326
  $lt: (0, date_util_1.nextDayDate)(fieldValue),
387
327
  },
388
328
  _r;
389
- // Todo: Remove this if works properly
390
- // if (DateConstant.some((cnst) => value.includes(cnst))) {
391
- // return {
392
- // [field]: {
393
- // $gte: fieldValue,
394
- // },
395
- // };
396
- // } else {
397
- // //TODO: Handle timezone here
398
- // return {
399
- // [field]: {
400
- // $gte: fieldValue,
401
- // $lt: new Date(nextDayDate(fieldValue)),
402
- // },
403
- // };
404
- // }
405
329
  }
406
330
  if (key === drapcode_constant_1.EQUALS_OR_IGNORE && isDate) {
407
331
  return !fieldValue.includes("random_string_since_field_not_present_1318874398806")
@@ -493,7 +417,7 @@ var queryToMongo = function (query, requiredExternal, externalParams, constants,
493
417
  },
494
418
  _12;
495
419
  if (key == drapcode_constant_1.BETWEEN) {
496
- var _14 = (0, exports.getMinMaxValue)(fieldValue), startValue = _14.startValue, endValue = _14.endValue, isInteger = _14.isInteger;
420
+ var _14 = (0, query_utils_1.getMinMaxValue)(fieldValue), startValue = _14.startValue, endValue = _14.endValue, isInteger = _14.isInteger;
497
421
  return _13 = {},
498
422
  _13[field] = {
499
423
  $gte: isInteger ? +startValue : startValue,
@@ -517,32 +441,14 @@ var isEntityInCondition = function (value) {
517
441
  return isEntity;
518
442
  };
519
443
  exports.isEntityInCondition = isEntityInCondition;
520
- // TODO: can be refactor with entity condition
521
- var isFixedValueQuery = function (value) {
522
- var isFixeValue = false;
523
- if (value && Array.isArray(value)) {
524
- value.forEach(function (val) {
525
- if (typeof val === "string" || val instanceof String)
526
- isFixeValue = val.startsWith("FIXED_VALUE::");
527
- });
528
- }
529
- else {
530
- if (value && (typeof value === "string" || value instanceof String))
531
- isFixeValue = value.startsWith("FIXED_VALUE::");
532
- }
533
- return isFixeValue;
534
- };
535
- exports.isFixedValueQuery = isFixedValueQuery;
536
444
  var replaceExternalParams = function (query, requiredExternal, externalParams, constants, currentUser, currentTenant, currentUserSetting, currentSubTenant, timezone) {
537
445
  var key = query.key, value = query.value, fieldType = query.fieldType;
538
446
  if (fieldType &&
539
447
  !requiredExternal &&
540
- [drapcode_constant_1.FieldTypes.dynamic_option.id, drapcode_constant_1.FieldTypes.reference.id, drapcode_constant_1.FieldTypes.static_option.id, drapcode_constant_1.FieldTypes.belongsTo.id].includes(fieldType)) {
541
- //Todo: Remove if filter is working properly
542
- // return value === CURRENT_USER ? currentUser["uuid"] : value;
448
+ __spreadArray(__spreadArray([], drapcode_constant_1.OptionTypeFields, true), drapcode_constant_1.BelongsToReferenceField, true).includes(fieldType)) {
543
449
  var refCollection = query.refCollection, refField = query.refField;
544
450
  var finalValue = "";
545
- if ([drapcode_constant_1.FieldTypes.dynamic_option.id, drapcode_constant_1.FieldTypes.static_option.id].includes(fieldType)) {
451
+ if (drapcode_constant_1.OptionTypeFields.includes(fieldType)) {
546
452
  if (!value) {
547
453
  if (refCollection === drapcode_constant_1.CURRENT_USER) {
548
454
  finalValue = currentUser[refField];
@@ -601,7 +507,7 @@ var replaceExternalParams = function (query, requiredExternal, externalParams, c
601
507
  return valueList_1;
602
508
  }
603
509
  if (key === drapcode_constant_1.BETWEEN) {
604
- var _a = (0, exports.getMinMaxValue)(value), startValue_1 = _a.startValue, endValue_1 = _a.endValue, isInteger = _a.isInteger, isFixedValue = _a.isFixedValue;
510
+ var _a = (0, query_utils_1.getMinMaxValue)(value), startValue_1 = _a.startValue, endValue_1 = _a.endValue, isFixedValue = _a.isFixedValue;
605
511
  if (requiredExternal) {
606
512
  startValue_1 = "".concat(externalParams[startValue_1]);
607
513
  endValue_1 = "".concat(externalParams[endValue_1]);
@@ -610,26 +516,24 @@ var replaceExternalParams = function (query, requiredExternal, externalParams, c
610
516
  if (__spreadArray([drapcode_constant_1.CURRENT_USER], drapcode_constant_1.DateConstant, true).some(function (cnst) {
611
517
  return startValue_1.includes(cnst);
612
518
  })) {
613
- startValue_1 = getValueOfProjectConstant(startValue_1, currentUser, timezone);
519
+ startValue_1 = (0, query_utils_1.getValueOfProjectConstant)(startValue_1, currentUser, timezone);
614
520
  }
615
521
  else if (!isFixedValue) {
616
522
  startValue_1 = constants.filter(function (constant) { return constant.name == startValue_1; });
617
523
  }
618
524
  if (__spreadArray([drapcode_constant_1.CURRENT_USER], drapcode_constant_1.DateConstant, true).some(function (cnst) { return endValue_1.includes(cnst); })) {
619
- endValue_1 = getValueOfProjectConstant(endValue_1, currentUser, timezone);
525
+ endValue_1 = (0, query_utils_1.getValueOfProjectConstant)(endValue_1, currentUser, timezone);
620
526
  }
621
527
  else if (!isFixedValue) {
622
528
  endValue_1 = constants.filter(function (constant) { return constant.name == endValue_1; });
623
529
  }
624
530
  }
625
- //TODO: Need to test constant from collection and when this below if will run
626
531
  if (Array.isArray(startValue_1)) {
627
532
  startValue_1 = startValue_1[0].value;
628
533
  }
629
534
  if (Array.isArray(endValue_1)) {
630
535
  endValue_1 = endValue_1[0].value;
631
536
  }
632
- //TODO: Need to figure out the params should be treated as number/string
633
537
  if (!isNaN(startValue_1)) {
634
538
  return "".concat(startValue_1, "---").concat(endValue_1, "^");
635
539
  }
@@ -652,13 +556,13 @@ var replaceExternalParams = function (query, requiredExternal, externalParams, c
652
556
  if (currentSubTenantValue)
653
557
  return currentSubTenantValue;
654
558
  if (drapcode_constant_1.DateConstant.some(function (cnst) { return value.includes(cnst); })) {
655
- return getValueOfProjectConstant(value, {}, timezone);
559
+ return (0, query_utils_1.getValueOfProjectConstant)(value, {}, timezone);
656
560
  }
657
561
  if ((0, exports.isEntityInCondition)(value)) {
658
562
  var key_1 = value.replace("ENTITY::", "");
659
563
  return externalParams[key_1] ? externalParams[key_1] : "";
660
564
  }
661
- if ((0, exports.isFixedValueQuery)(value))
565
+ if ((0, query_utils_1.isFixedValueQuery)(value))
662
566
  return value.replace("FIXED_VALUE::", "");
663
567
  //TODO: This is just to confirm if external then it should be get from externalParams
664
568
  if (requiredExternal) {
@@ -672,174 +576,6 @@ var replaceExternalParams = function (query, requiredExternal, externalParams, c
672
576
  var constantArr = constants.filter(function (constant) { return constant.name == value; });
673
577
  return constantArr.length ? "" + constantArr[0].value : "";
674
578
  };
675
- var checkDate = function (queryValue) {
676
- return ("" + queryValue).match(date_util_1.DATE_REGEX);
677
- };
678
- var getMinMaxValue = function (value) {
679
- var isFixedValue = (0, exports.isFixedValueQuery)(value);
680
- if (isFixedValue)
681
- value = value.replace("FIXED_VALUE::", "");
682
- var isValid = value && value.includes("---");
683
- if (isValid) {
684
- var isInteger = value.includes("^");
685
- var result = value.split("---");
686
- var endValue = result[1];
687
- if (isInteger && result.length)
688
- endValue = endValue.slice(0, -1);
689
- return { startValue: result[0], endValue: endValue, isInteger: isInteger, isFixedValue: isFixedValue };
690
- }
691
- else {
692
- return { startValue: "", endValue: "", isFixedValue: isFixedValue };
693
- }
694
- };
695
- exports.getMinMaxValue = getMinMaxValue;
696
- var getValueOfProjectConstant = function (value, currentUser, timezone) {
697
- if (!timezone)
698
- timezone = "(GMT+5:30)";
699
- timezone = timezone.substring(4, 10);
700
- var result;
701
- if (value === drapcode_constant_1.CURRENT_USER)
702
- return currentUser["uuid"];
703
- if (value === drapcode_constant_1.CURRENT_DATE)
704
- result = (0, date_util_1.createLoggerDateFormat)(timezone);
705
- if ([drapcode_constant_1.CURRENT_TIME, drapcode_constant_1.CURRENT_DATE_TIME].includes(value))
706
- result = (0, date_util_1.createLogsDateFormat)(timezone);
707
- if (drapcode_constant_1.DateTimeUnit.some(function (cnst) { return value.includes(cnst); }))
708
- result = (0, date_util_1.getDateValue)(value, timezone);
709
- return result;
710
- };
711
- var getSearchObjQuery = function (searchObj, searchQueryTypeObj, timezone) {
712
- var searchAggregateQuery = [];
713
- var likeQuery = [];
714
- Object.entries(searchObj).forEach(function (_a) {
715
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
716
- var key = _a[0], value = _a[1];
717
- if (value) {
718
- var searchQueryTypeKey = searchQueryTypeObj[key];
719
- if (searchQueryTypeKey) {
720
- if (searchQueryTypeKey === "boolean") {
721
- // if input is string and db field type is boolean
722
- searchAggregateQuery.push({
723
- $addFields: (_b = {},
724
- _b["_".concat(key)] = "$".concat(key),
725
- _b),
726
- });
727
- likeQuery.push((_c = {},
728
- _c["_".concat(key)] = toBoolean(value),
729
- _c));
730
- }
731
- else if ([
732
- drapcode_constant_1.FieldTypes.static_option.id,
733
- drapcode_constant_1.FieldTypes.dynamic_option.id,
734
- drapcode_constant_1.FieldTypes.reference.id,
735
- drapcode_constant_1.FieldTypes.belongsTo.id,
736
- ].includes(searchQueryTypeKey)) {
737
- // if input is string and db field type is array
738
- searchAggregateQuery.push({
739
- $addFields: (_d = {},
740
- _d["_".concat(key)] = "$".concat(key),
741
- _d),
742
- });
743
- likeQuery.push((_e = {},
744
- _e["_".concat(key)] = { $all: [value] },
745
- _e));
746
- }
747
- else if (searchQueryTypeKey === "tel") {
748
- // handling value when db field type is tel
749
- searchAggregateQuery.push({
750
- $addFields: (_f = {},
751
- _f["_".concat(key)] = { $toString: "$".concat(key) },
752
- _f),
753
- });
754
- likeQuery.push((_g = {},
755
- _g["_".concat(key)] = {
756
- $regex: value.startsWith("+") ? value.replace("+", "") : value,
757
- $options: "i",
758
- },
759
- _g));
760
- }
761
- else if (searchQueryTypeKey === "number") {
762
- if (key.startsWith("min_") || key.startsWith("max_")) {
763
- var fieldKey = key.replace("min_", "");
764
- fieldKey = fieldKey.replace("max_", "");
765
- var numericValue = Number(value);
766
- if (key.startsWith("min_")) {
767
- likeQuery.push((_h = {}, _h["".concat(fieldKey)] = { $gte: numericValue }, _h));
768
- }
769
- else if (key.startsWith("max_")) {
770
- likeQuery.push((_j = {}, _j["".concat(fieldKey)] = { $lte: numericValue }, _j));
771
- }
772
- }
773
- else {
774
- // handling value when db field type is Double/Int
775
- searchAggregateQuery.push({
776
- $addFields: (_k = {},
777
- _k["_".concat(key)] = { $toString: { $toLong: "$".concat(key) } },
778
- _k),
779
- });
780
- likeQuery.push((_l = {},
781
- _l["_".concat(key)] = {
782
- $regex: value,
783
- $options: "i",
784
- },
785
- _l));
786
- }
787
- }
788
- else if (__spreadArray(__spreadArray([drapcode_constant_1.FieldTypes.date.id], drapcode_constant_1.systemDateField, true), [drapcode_constant_1.FieldTypes.time_slot.id], false).includes(searchQueryTypeKey)) {
789
- if (key.startsWith("start_") || key.startsWith("end_")) {
790
- var fieldKey = key.replace("start_", "");
791
- fieldKey = fieldKey.replace("end_", "");
792
- searchAggregateQuery.push({
793
- $addFields: (_m = {},
794
- _m["_".concat(key)] = { $toString: "$".concat(fieldKey) },
795
- _m),
796
- });
797
- if (key.startsWith("start_")) {
798
- likeQuery.push((_o = {},
799
- _o["_".concat(key)] = {
800
- $gte: (0, date_util_1.timezoneDateParse)(value, true, true),
801
- },
802
- _o));
803
- }
804
- else if (key.startsWith("end_")) {
805
- likeQuery.push((_p = {},
806
- _p["_".concat(key)] = {
807
- $lt: (0, date_util_1.timezoneDateParse)(value, true),
808
- },
809
- _p));
810
- }
811
- }
812
- }
813
- else {
814
- // if input is string and db field type is number
815
- // converting db field to string first
816
- searchAggregateQuery.push({
817
- $addFields: (_q = {},
818
- _q["_".concat(key)] = { $toString: "$".concat(key) },
819
- _q),
820
- });
821
- likeQuery.push((_r = {},
822
- _r["_".concat(key)] = {
823
- $regex: value,
824
- $options: "i",
825
- },
826
- _r));
827
- }
828
- }
829
- else {
830
- likeQuery.push((_s = {},
831
- _s[key] = {
832
- $regex: value,
833
- $options: "i",
834
- },
835
- _s));
836
- }
837
- }
838
- });
839
- console.log("==> searchAggregateQuery", JSON.stringify(searchAggregateQuery));
840
- console.log("==> likeQuery", JSON.stringify(likeQuery));
841
- return { searchAggregateQuery: searchAggregateQuery, likeQuery: likeQuery };
842
- };
843
579
  var getCurrentDataValueFrom = function (value, constantName, data, isMultiRef) {
844
580
  if (isMultiRef === void 0) { isMultiRef = false; }
845
581
  if (value.includes(constantName)) {
@@ -0,0 +1,20 @@
1
+ export declare const getSearchObjQuery: (searchObj: any, searchQueryTypeObj: any, timezone: string) => {
2
+ searchAggregateQuery: any;
3
+ likeQuery: any;
4
+ };
5
+ export declare const mongoSelectQuery: (query?: any) => any;
6
+ export declare const modifyQuery: (obj?: {}, hasAndQueryConjunction?: boolean) => any[];
7
+ export declare const checkDate: (queryValue: string) => RegExpMatchArray | null;
8
+ export declare const getMinMaxValue: (value: any) => {
9
+ startValue: any;
10
+ endValue: any;
11
+ isInteger: any;
12
+ isFixedValue: boolean;
13
+ } | {
14
+ startValue: string;
15
+ endValue: string;
16
+ isFixedValue: boolean;
17
+ isInteger?: undefined;
18
+ };
19
+ export declare const isFixedValueQuery: (value: any) => boolean;
20
+ export declare const getValueOfProjectConstant: (value: any, currentUser: any, timezone: string) => any;