@resolveio/server-lib 20.12.59 → 20.12.61

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.
@@ -35,12 +35,78 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
35
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
36
  }
37
37
  };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
38
54
  Object.defineProperty(exports, "__esModule", { value: true });
39
55
  exports.loadCollectionMethods = loadCollectionMethods;
40
56
  var simpl_schema_1 = require("simpl-schema");
41
57
  var pagination_model_1 = require("../models/pagination.model");
42
58
  var resolveio_server_app_1 = require("../resolveio-server-app");
43
59
  var common_1 = require("../util/common");
60
+ var ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/;
61
+ function coerceDateValue(value) {
62
+ if (value instanceof Date) {
63
+ return value;
64
+ }
65
+ if (typeof value !== 'string' || !ISO_DATE_REGEX.test(value)) {
66
+ return value;
67
+ }
68
+ var parsed = new Date(value);
69
+ return Number.isNaN(parsed.getTime()) ? value : parsed;
70
+ }
71
+ function coerceDatePath(target, segments) {
72
+ if (!target || !segments.length) {
73
+ return;
74
+ }
75
+ var _a = __read(segments), segment = _a[0], rest = _a.slice(1);
76
+ if (segment === '$') {
77
+ if (Array.isArray(target)) {
78
+ target.forEach(function (item) { return coerceDatePath(item, rest); });
79
+ }
80
+ return;
81
+ }
82
+ if (!Object.prototype.hasOwnProperty.call(target, segment)) {
83
+ return;
84
+ }
85
+ if (rest.length === 0) {
86
+ var updatedValue = coerceDateValue(target[segment]);
87
+ if (updatedValue !== target[segment]) {
88
+ target[segment] = updatedValue;
89
+ }
90
+ return;
91
+ }
92
+ coerceDatePath(target[segment], rest);
93
+ }
94
+ function coerceDateFields(collectionRef, doc) {
95
+ if (!collectionRef || !collectionRef.simplschema || !doc) {
96
+ return;
97
+ }
98
+ var schema = collectionRef.simplschema;
99
+ var schemaKeys = Object.keys(schema.schema());
100
+ schemaKeys.forEach(function (schemaKey) {
101
+ var _a;
102
+ var definition = schema.schema(schemaKey);
103
+ var typeDefs = (_a = definition === null || definition === void 0 ? void 0 : definition.type) === null || _a === void 0 ? void 0 : _a.definitions;
104
+ if (!typeDefs || !typeDefs.some(function (typeDef) { return typeDef.type === Date; })) {
105
+ return;
106
+ }
107
+ coerceDatePath(doc, schemaKey.split('.'));
108
+ });
109
+ }
44
110
  function loadCollectionMethods(methodManager) {
45
111
  methodManager.methods({
46
112
  collectionListAll: {
@@ -221,13 +287,16 @@ function loadCollectionMethods(methodManager) {
221
287
  }),
222
288
  function: function (collection, f_document) {
223
289
  return __awaiter(this, void 0, void 0, function () {
290
+ var collectionRef;
224
291
  return __generator(this, function (_a) {
225
292
  switch (_a.label) {
226
293
  case 0:
227
- if (!resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection)) {
294
+ collectionRef = resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection);
295
+ if (!collectionRef) {
228
296
  throw new Error('Error in Update Document Collection: Invalid collection');
229
297
  }
230
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: f_document['_id'] }, f_document)];
298
+ coerceDateFields(collectionRef, f_document);
299
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: f_document['_id'] }, f_document)];
231
300
  case 1:
232
301
  _a.sent();
233
302
  return [2 /*return*/, true];
@@ -262,13 +331,14 @@ function loadCollectionMethods(methodManager) {
262
331
  }),
263
332
  function: function (collection, doc_id, updateParams, doc__v) {
264
333
  return __awaiter(this, void 0, void 0, function () {
265
- var currDoc, modifiedDoc_1, oldDoc, newCurrDocId, newCurrDocV, updatedDoc;
334
+ var collectionRef, currDoc, modifiedDoc_1, oldDoc, newCurrDocId, newCurrDocV, updatedDoc;
266
335
  return __generator(this, function (_a) {
267
336
  switch (_a.label) {
268
337
  case 0:
269
- if (!!resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection)) return [3 /*break*/, 1];
338
+ collectionRef = resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection);
339
+ if (!!collectionRef) return [3 /*break*/, 1];
270
340
  throw new Error('Error in Update Document Props Collection: Invalid collection');
271
- case 1: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).findOne({ _id: doc_id })];
341
+ case 1: return [4 /*yield*/, collectionRef.findOne({ _id: doc_id })];
272
342
  case 2:
273
343
  currDoc = _a.sent();
274
344
  if (!currDoc) return [3 /*break*/, 11];
@@ -277,7 +347,8 @@ function loadCollectionMethods(methodManager) {
277
347
  modifiedDoc_1[data.prop] = data.data;
278
348
  });
279
349
  if (!(!doc__v || modifiedDoc_1.__v === doc__v)) return [3 /*break*/, 4];
280
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: modifiedDoc_1._id }, modifiedDoc_1, {}, false, false, currDoc)];
350
+ coerceDateFields(collectionRef, modifiedDoc_1);
351
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: modifiedDoc_1._id }, modifiedDoc_1, {}, false, false, currDoc)];
281
352
  case 3:
282
353
  _a.sent();
283
354
  return [3 /*break*/, 10];
@@ -300,7 +371,8 @@ function loadCollectionMethods(methodManager) {
300
371
  updatedDoc.__v = newCurrDocV;
301
372
  currDoc._id = newCurrDocId;
302
373
  currDoc.__v = newCurrDocV;
303
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
374
+ coerceDateFields(collectionRef, updatedDoc);
375
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
304
376
  case 6:
305
377
  _a.sent();
306
378
  return [3 /*break*/, 8];
@@ -330,18 +402,20 @@ function loadCollectionMethods(methodManager) {
330
402
  }),
331
403
  function: function (collection, f_document) {
332
404
  return __awaiter(this, void 0, void 0, function () {
333
- var currDoc, newCurrDocId, newCurrDocV, oldDocV, oldDoc, updatedDoc;
405
+ var collectionRef, currDoc, newCurrDocId, newCurrDocV, oldDocV, oldDoc, updatedDoc;
334
406
  return __generator(this, function (_a) {
335
407
  switch (_a.label) {
336
408
  case 0:
337
- if (!!resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection)) return [3 /*break*/, 1];
409
+ collectionRef = resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection);
410
+ if (!!collectionRef) return [3 /*break*/, 1];
338
411
  throw new Error('Error in Update Document Offline Collection: Invalid collection');
339
- case 1: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).findOne({ _id: f_document['_id'] })];
412
+ case 1: return [4 /*yield*/, collectionRef.findOne({ _id: f_document['_id'] })];
340
413
  case 2:
341
414
  currDoc = _a.sent();
342
415
  if (!currDoc) return [3 /*break*/, 11];
343
416
  if (!(currDoc.__v === f_document['__v'])) return [3 /*break*/, 4];
344
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: f_document['_id'] }, f_document, {}, false, false, currDoc)];
417
+ coerceDateFields(collectionRef, f_document);
418
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: f_document['_id'] }, f_document, {}, false, false, currDoc)];
345
419
  case 3:
346
420
  _a.sent();
347
421
  return [3 /*break*/, 10];
@@ -365,7 +439,8 @@ function loadCollectionMethods(methodManager) {
365
439
  updatedDoc.__v = newCurrDocV;
366
440
  currDoc._id = newCurrDocId;
367
441
  currDoc.__v = newCurrDocV;
368
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
442
+ coerceDateFields(collectionRef, updatedDoc);
443
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
369
444
  case 6:
370
445
  _a.sent();
371
446
  return [3 /*break*/, 8];
@@ -405,13 +480,14 @@ function loadCollectionMethods(methodManager) {
405
480
  }),
406
481
  function: function (collection, doc_id, updateParams, doc__v) {
407
482
  return __awaiter(this, void 0, void 0, function () {
408
- var currDoc, modifiedDoc_2, newCurrDocId, newCurrDocV, oldDoc, updatedDoc;
483
+ var collectionRef, currDoc, modifiedDoc_2, newCurrDocId, newCurrDocV, oldDoc, updatedDoc;
409
484
  return __generator(this, function (_a) {
410
485
  switch (_a.label) {
411
486
  case 0:
412
- if (!!resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection)) return [3 /*break*/, 1];
487
+ collectionRef = resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection);
488
+ if (!!collectionRef) return [3 /*break*/, 1];
413
489
  throw new Error('Error in Update Document Props Offline Collection: Invalid collection');
414
- case 1: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).findOne({ _id: doc_id }, null, true)];
490
+ case 1: return [4 /*yield*/, collectionRef.findOne({ _id: doc_id }, null, true)];
415
491
  case 2:
416
492
  currDoc = _a.sent();
417
493
  if (!currDoc) return [3 /*break*/, 11];
@@ -420,7 +496,8 @@ function loadCollectionMethods(methodManager) {
420
496
  modifiedDoc_2[data.prop] = data.data;
421
497
  });
422
498
  if (!(modifiedDoc_2.__v === doc__v)) return [3 /*break*/, 4];
423
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: modifiedDoc_2._id }, modifiedDoc_2, {}, false, false, currDoc)];
499
+ coerceDateFields(collectionRef, modifiedDoc_2);
500
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: modifiedDoc_2._id }, modifiedDoc_2, {}, false, false, currDoc)];
424
501
  case 3:
425
502
  _a.sent();
426
503
  return [3 /*break*/, 10];
@@ -443,7 +520,8 @@ function loadCollectionMethods(methodManager) {
443
520
  updatedDoc.__v = newCurrDocV;
444
521
  currDoc._id = newCurrDocId;
445
522
  currDoc.__v = newCurrDocV;
446
- return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collection).replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
523
+ coerceDateFields(collectionRef, updatedDoc);
524
+ return [4 /*yield*/, collectionRef.replaceOne({ _id: newCurrDocId }, updatedDoc, {}, false, false, currDoc)];
447
525
  case 6:
448
526
  _a.sent();
449
527
  return [3 /*break*/, 8];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/collections.ts"],"names":[],"mappings":"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","file":"collections.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\n\nexport function loadCollectionMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tcollectionListAll: {\n\t\t\tfunction: function() {\n\t\t\t\treturn Promise.resolve(ResolveIOServer.getMongoManager().collections().map(a => a.collectionName).sort((a, b) => a.localeCompare(b)));\n\t\t\t}\n\t\t},\n\t\tcollectionListRB: {\n\t\t\tfunction: function() {\n\t\t\t\treturn Promise.resolve(ResolveIOServer.getMongoManager().collections().filter(a => a.useRB).map(a => a.collectionName).sort((a, b) => a.localeCompare(b)));\n\t\t\t}\n\t\t},\n\t\t// Query database for any collection and query\n\t\tfindOne: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query = {}) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find One Collection: Invalid collection');\n\t\t\t\t}\n\n\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).findOne(query);\n\t\t\t}\n\t\t},\n\t\tfind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tsort: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query = {}, sortQuery = {}) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).find(query, {sort: sortQuery});\n\t\t\t}\n\t\t},\n\t\tfindWithOptions: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query: Object, options: PaginationOptions) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find With Options Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet optionsQuery = {};\n\n\t\t\t\t\tif (options.fields && Object.keys(options.fields).length) {\n\t\t\t\t\t\toptionsQuery['projection'] = options.fields;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.sort && Object.keys(options.sort).length) {\n\t\t\t\t\t\toptionsQuery['sort'] = options.sort;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.limit) {\n\t\t\t\t\t\toptionsQuery['limit'] = options.limit;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.skip) {\n\t\t\t\t\t\toptionsQuery['skip'] = options.skip;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).find(query, optionsQuery);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Insert 1 document\n\t\t// @Inputs: collection, document\n\t\t// @Outputs: res = _id of new document, err = not inserted\n\t\tinsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, document: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Insert Document Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet id = objectIdHexString();\n\t\t\t\t\tdocument['_id'] = id;\n\t\t\t\t\tdocument['__v'] = 0;\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).insertOne(document);\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Insert 1 document\n\t\t// @Inputs: collection, document\n\t\t// @Outputs: res = _id of new document, err = not inserted\n\t\tinsertManyDocuments: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocuments: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'documents.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, documents: Object[]) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Insert Many Documents Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocuments.forEach(document => {\n\t\t\t\t\t\tdocument['_id'] = objectIdHexString();\n\t\t\t\t\t\tdocument['__v'] = 0;\n\t\t\t\t\t});\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).insertMany(documents);\n\t\t\t\t\treturn documents.map(a => a['_id']);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Replaces 1 document with new document (from _id)\n\t\t// @Inputs: collection, document id\n\t\t// @Outputs: res = 1 (updated 1), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update\n\t\tupdateDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tf_document: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, f_document: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Update Document Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: f_document['_id']}, f_document);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Updates 1 document's props (from _id)\n\t\t// @Inputs: collection, document id, document version, update paramters ({prop: 'xxx', data: 'yyy})\n\t\t// @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update props\n\t\tupdateDocumentProps: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tupdateParams: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'updateParams.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdoc__v: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string, updateParams: any[], doc__v?: number) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Update Document Props Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await ResolveIOServer.getMongoManager().collection(collection).findOne({_id: doc_id});\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tlet modifiedDoc = deepCopy(currDoc);\n\n\t\t\t\t\t\tupdateParams.forEach(data => {\n\t\t\t\t\t\t\tmodifiedDoc[data.prop] = data.data;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!doc__v || modifiedDoc.__v === doc__v) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: modifiedDoc._id}, modifiedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'invalid version - ' + collection, currDoc.__v, doc__v);\n\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: currDoc._id,\n\t\t\t\t\t\t\t\t\t\t__v: doc__v\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(modifiedDoc, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// throw new Error('Error In Update Document Props Collections: Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v);\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error In Update Document Props Collections: Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error In Update Document Props Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Props Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tupdateDocumentOffline: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tf_document: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, f_document: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Update Document Offline Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await ResolveIOServer.getMongoManager().collection(collection).findOne({_id: f_document['_id']});\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tif (currDoc.__v === f_document['__v']) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: f_document['_id']}, f_document, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('OFFLINE - invalid version - ' + collection, currDoc.__v, f_document['__v']);\n\n\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\t\t\t\t\t\t\tlet oldDocV = f_document['__v'];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: newCurrDocId,\n\t\t\t\t\t\t\t\t\t\t__v: oldDocV\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(f_document, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: OFFLINE - Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + oldDocV);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Updates 1 document's props (from _id)\n\t\t// @Inputs: collection, document id, document version, update paramters ({prop: 'xxx', data: 'yyy})\n\t\t// @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update props\n\t\tupdateDocumentPropsOffline: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tupdateParams: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'updateParams.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdoc__v: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string, updateParams: any[], doc__v: number) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await ResolveIOServer.getMongoManager().collection(collection).findOne({_id: doc_id}, null, true);\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tlet modifiedDoc = deepCopy(currDoc);\n\n\t\t\t\t\t\tupdateParams.forEach(data => {\n\t\t\t\t\t\t\tmodifiedDoc[data.prop] = data.data;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (modifiedDoc.__v === doc__v) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: modifiedDoc._id}, modifiedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('OFFLINE - invalid version - ' + collection, currDoc.__v, doc__v);\n\n\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: currDoc._id,\n\t\t\t\t\t\t\t\t\t\t__v: doc__v\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(modifiedDoc, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: OFFLINE - Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Removes 1 document (from _id)\n\t\t// @Inputs: collection, document id\n\t\t// @Outputs: res = 1 (deleted), res = 0 (not deleted), err = not deleted\n\t\t// Search for doc, if found then try and remove\n\t\tremoveDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Document Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteOne({_id: doc_id});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tremoveDocumentWithQuery: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, query: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Document With Query Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteOne(query);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tremoveDocumentsWithQuery: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, query: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Documents With Query Collections: Invalid Collection');\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteMany(query);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
1
+ {"version":3,"sources":["../../src/methods/collections.ts"],"names":[],"mappings":"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","file":"collections.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\n\nconst ISO_DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$/;\n\nfunction coerceDateValue(value: unknown): unknown {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\n\tif (typeof value !== 'string' || !ISO_DATE_REGEX.test(value)) {\n\t\treturn value;\n\t}\n\n\tconst parsed = new Date(value);\n\treturn Number.isNaN(parsed.getTime()) ? value : parsed;\n}\n\nfunction coerceDatePath(target: any, segments: string[]) {\n\tif (!target || !segments.length) {\n\t\treturn;\n\t}\n\n\tconst [segment, ...rest] = segments;\n\n\tif (segment === '$') {\n\t\tif (Array.isArray(target)) {\n\t\t\ttarget.forEach(item => coerceDatePath(item, rest));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(target, segment)) {\n\t\treturn;\n\t}\n\n\tif (rest.length === 0) {\n\t\tconst updatedValue = coerceDateValue(target[segment]);\n\t\tif (updatedValue !== target[segment]) {\n\t\t\ttarget[segment] = updatedValue;\n\t\t}\n\t\treturn;\n\t}\n\n\tcoerceDatePath(target[segment], rest);\n}\n\nfunction coerceDateFields(collectionRef: any, doc: any) {\n\tif (!collectionRef || !collectionRef.simplschema || !doc) {\n\t\treturn;\n\t}\n\n\tconst schema = collectionRef.simplschema;\n\tconst schemaKeys = Object.keys(schema.schema());\n\n\tschemaKeys.forEach(schemaKey => {\n\t\tconst definition = schema.schema(schemaKey);\n\t\tconst typeDefs = definition?.type?.definitions;\n\t\tif (!typeDefs || !typeDefs.some(typeDef => typeDef.type === Date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tcoerceDatePath(doc, schemaKey.split('.'));\n\t});\n}\n\nexport function loadCollectionMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tcollectionListAll: {\n\t\t\tfunction: function() {\n\t\t\t\treturn Promise.resolve(ResolveIOServer.getMongoManager().collections().map(a => a.collectionName).sort((a, b) => a.localeCompare(b)));\n\t\t\t}\n\t\t},\n\t\tcollectionListRB: {\n\t\t\tfunction: function() {\n\t\t\t\treturn Promise.resolve(ResolveIOServer.getMongoManager().collections().filter(a => a.useRB).map(a => a.collectionName).sort((a, b) => a.localeCompare(b)));\n\t\t\t}\n\t\t},\n\t\t// Query database for any collection and query\n\t\tfindOne: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query = {}) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find One Collection: Invalid collection');\n\t\t\t\t}\n\n\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).findOne(query);\n\t\t\t}\n\t\t},\n\t\tfind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tsort: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query = {}, sortQuery = {}) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).find(query, {sort: sortQuery});\n\t\t\t}\n\t\t},\n\t\tfindWithOptions: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection: string, query: Object, options: PaginationOptions) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Find With Options Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet optionsQuery = {};\n\n\t\t\t\t\tif (options.fields && Object.keys(options.fields).length) {\n\t\t\t\t\t\toptionsQuery['projection'] = options.fields;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.sort && Object.keys(options.sort).length) {\n\t\t\t\t\t\toptionsQuery['sort'] = options.sort;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.limit) {\n\t\t\t\t\t\toptionsQuery['limit'] = options.limit;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.skip) {\n\t\t\t\t\t\toptionsQuery['skip'] = options.skip;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ResolveIOServer.getMongoManager().collection(collection).find(query, optionsQuery);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Insert 1 document\n\t\t// @Inputs: collection, document\n\t\t// @Outputs: res = _id of new document, err = not inserted\n\t\tinsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, document: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Insert Document Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet id = objectIdHexString();\n\t\t\t\t\tdocument['_id'] = id;\n\t\t\t\t\tdocument['__v'] = 0;\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).insertOne(document);\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Insert 1 document\n\t\t// @Inputs: collection, document\n\t\t// @Outputs: res = _id of new document, err = not inserted\n\t\tinsertManyDocuments: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocuments: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'documents.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, documents: Object[]) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Insert Many Documents Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocuments.forEach(document => {\n\t\t\t\t\t\tdocument['_id'] = objectIdHexString();\n\t\t\t\t\t\tdocument['__v'] = 0;\n\t\t\t\t\t});\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).insertMany(documents);\n\t\t\t\t\treturn documents.map(a => a['_id']);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Replaces 1 document with new document (from _id)\n\t\t// @Inputs: collection, document id\n\t\t// @Outputs: res = 1 (updated 1), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update\n\t\tupdateDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tf_document: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, f_document: Object) {\n\t\t\t\tconst collectionRef = ResolveIOServer.getMongoManager().collection(collection);\n\t\t\t\tif (!collectionRef) {\n\t\t\t\t\tthrow new Error('Error in Update Document Collection: Invalid collection');\n\t\t\t\t}\n\n\t\t\t\tcoerceDateFields(collectionRef, f_document);\n\t\t\t\tawait collectionRef.replaceOne({_id: f_document['_id']}, f_document);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Updates 1 document's props (from _id)\n\t\t// @Inputs: collection, document id, document version, update paramters ({prop: 'xxx', data: 'yyy})\n\t\t// @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update props\n\t\tupdateDocumentProps: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tupdateParams: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'updateParams.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdoc__v: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string, updateParams: any[], doc__v?: number) {\n\t\t\t\tconst collectionRef = ResolveIOServer.getMongoManager().collection(collection);\n\t\t\t\tif (!collectionRef) {\n\t\t\t\t\tthrow new Error('Error in Update Document Props Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await collectionRef.findOne({_id: doc_id});\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tlet modifiedDoc = deepCopy(currDoc);\n\n\t\t\t\t\t\tupdateParams.forEach(data => {\n\t\t\t\t\t\t\tmodifiedDoc[data.prop] = data.data;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!doc__v || modifiedDoc.__v === doc__v) {\n\t\t\t\t\t\t\tcoerceDateFields(collectionRef, modifiedDoc);\n\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: modifiedDoc._id}, modifiedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'invalid version - ' + collection, currDoc.__v, doc__v);\n\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: currDoc._id,\n\t\t\t\t\t\t\t\t\t\t__v: doc__v\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(modifiedDoc, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tcoerceDateFields(collectionRef, updatedDoc);\n\t\t\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// throw new Error('Error In Update Document Props Collections: Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v);\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error In Update Document Props Collections: Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error In Update Document Props Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Props Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tupdateDocumentOffline: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tf_document: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, f_document: Object) {\n\t\t\t\tconst collectionRef = ResolveIOServer.getMongoManager().collection(collection);\n\t\t\t\tif (!collectionRef) {\n\t\t\t\t\tthrow new Error('Error in Update Document Offline Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await collectionRef.findOne({_id: f_document['_id']});\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tif (currDoc.__v === f_document['__v']) {\n\t\t\t\t\t\t\tcoerceDateFields(collectionRef, f_document);\n\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: f_document['_id']}, f_document, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('OFFLINE - invalid version - ' + collection, currDoc.__v, f_document['__v']);\n\n\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\t\t\t\t\t\t\tlet oldDocV = f_document['__v'];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: newCurrDocId,\n\t\t\t\t\t\t\t\t\t\t__v: oldDocV\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(f_document, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tcoerceDateFields(collectionRef, updatedDoc);\n\t\t\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: OFFLINE - Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + oldDocV);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Offline Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Updates 1 document's props (from _id)\n\t\t// @Inputs: collection, document id, document version, update paramters ({prop: 'xxx', data: 'yyy})\n\t\t// @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version\n\t\t// Search for doc, check version, if found then try and update props\n\t\tupdateDocumentPropsOffline: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tupdateParams: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'updateParams.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdoc__v: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string, updateParams: any[], doc__v: number) {\n\t\t\t\tconst collectionRef = ResolveIOServer.getMongoManager().collection(collection);\n\t\t\t\tif (!collectionRef) {\n\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet currDoc = await collectionRef.findOne({_id: doc_id}, null, true);\n\t\t\t\t\tif (currDoc) {\n\t\t\t\t\t\tlet modifiedDoc = deepCopy(currDoc);\n\n\t\t\t\t\t\tupdateParams.forEach(data => {\n\t\t\t\t\t\t\tmodifiedDoc[data.prop] = data.data;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (modifiedDoc.__v === doc__v) {\n\t\t\t\t\t\t\tcoerceDateFields(collectionRef, modifiedDoc);\n\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: modifiedDoc._id}, modifiedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('OFFLINE - invalid version - ' + collection, currDoc.__v, doc__v);\n\n\t\t\t\t\t\t\tlet newCurrDocId = currDoc._id;\n\t\t\t\t\t\t\tlet newCurrDocV = currDoc.__v;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (ResolveIOServer.getMongoManager().collection(collection + '.versions')) {\n\t\t\t\t\t\t\t\tlet oldDoc = await ResolveIOServer.getMongoManager().collection(collection + '.versions').findOne({\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\t_id: currDoc._id,\n\t\t\t\t\t\t\t\t\t\t__v: doc__v\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\t\t\tlet updatedDoc = getMongoMergeUpdatedDoc(modifiedDoc, currDoc, oldDoc);\n\t\t\t\t\t\t\t\t\tupdatedDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tupdatedDoc.__v = newCurrDocV;\n\t\t\t\t\t\t\t\t\tcurrDoc._id = newCurrDocId;\n\t\t\t\t\t\t\t\t\tcurrDoc.__v = newCurrDocV;\n\n\t\t\t\t\t\t\t\t\tcoerceDateFields(collectionRef, updatedDoc);\n\t\t\t\t\t\t\t\t\tawait collectionRef.replaceOne({_id: newCurrDocId}, updatedDoc, {}, false, false, currDoc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: OFFLINE - Invalid Version And Could Not Find History Props - DB: ' + newCurrDocV + ', Trying to update with :' + doc__v);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: Invalid Version And We Are NOT Using Versions On This Collection!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Update Document Props Offline Collections: No Document');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t// Removes 1 document (from _id)\n\t\t// @Inputs: collection, document id\n\t\t// @Outputs: res = 1 (deleted), res = 0 (not deleted), err = not deleted\n\t\t// Search for doc, if found then try and remove\n\t\tremoveDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, doc_id: string) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Document Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteOne({_id: doc_id});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tremoveDocumentWithQuery: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, query: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Document With Query Collection: Invalid collection');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteOne(query);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tremoveDocumentsWithQuery: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(collection: string, query: Object) {\n\t\t\t\tif (!ResolveIOServer.getMongoManager().collection(collection)) {\n\t\t\t\t\tthrow new Error('Error in Remove Documents With Query Collections: Invalid Collection');\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\tawait ResolveIOServer.getMongoManager().collection(collection).deleteMany(query);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
@@ -276,7 +276,7 @@ function loadReportBuilderMethods(methodManager) {
276
276
  }),
277
277
  function: function (reportType_1, rootCollectionName_1, rootOptions_1) {
278
278
  return __awaiter(this, arguments, void 0, function (reportType, rootCollectionName, rootOptions, filters, filterArrays, filterArrayFields, selectedFields, customFields, groupsRow, fieldsTotal, fieldsLink, date_field, date_interval, displayType) {
279
- var modelCollection, lookupAliases, _a, rootFilters_1, lookupFilters_1, additionalCollectionsMap_1, additionalCollections, unionQuery_1, _b, sortToUse, layoutSortAdd, remappedFilters, remappedArrayFilters, postMatchAnd, res_1, err_1, tmpTotals_1, resultsOut, tmpRes_1, query_1, initialQueryMatchCondition_1, sizes_1, divFields_1, queryMatchConditionLookup_1, queryGroup_1, groupedSorts_1, dateFieldPath, queryProjection_1, _loop_1, i, res_2, err_2, tmpTotals_2, tmpRes;
279
+ var modelCollection, datePaths, lookupAliases, _a, rootFilters_1, lookupFilters_1, additionalCollectionsMap_1, additionalCollections, unionQuery_1, _b, sortToUse, layoutSortAdd, remappedFilters, remappedArrayFilters, postMatchAnd, res_1, err_1, tmpTotals_1, resultsOut, tmpRes_1, query_1, initialQueryMatchCondition_1, sizes_1, divFields_1, queryMatchConditionLookup_1, queryGroup_1, groupedSorts_1, dateFieldPath, queryProjection_1, _loop_1, i, res_2, err_2, tmpTotals_2, tmpRes;
280
280
  if (filters === void 0) { filters = []; }
281
281
  if (filterArrays === void 0) { filterArrays = []; }
282
282
  if (filterArrayFields === void 0) { filterArrayFields = []; }
@@ -297,6 +297,11 @@ function loadReportBuilderMethods(methodManager) {
297
297
  case 1:
298
298
  filters = expandLayoutColumnFilters(filters, selectedFields);
299
299
  filterArrays = expandLayoutColumnFilters(filterArrays, selectedFields);
300
+ datePaths = collectRootDatePaths(rootCollectionName);
301
+ if (datePaths.size) {
302
+ coerceDateFilters(filters, datePaths);
303
+ coerceDateFilters(filterArrays, datePaths);
304
+ }
300
305
  lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);
301
306
  _a = splitFiltersByLookup(filters, lookupAliases), rootFilters_1 = _a.rootFilters, lookupFilters_1 = _a.lookupFilters;
302
307
  additionalCollectionsMap_1 = new Map();
@@ -999,7 +1004,6 @@ function loadReportBuilderMethods(methodManager) {
999
1004
  }
1000
1005
  if (this.serverConfig['ROOT_URL'] === 'http://localhost:4200') {
1001
1006
  console.log('_____________ query __________');
1002
- console.log(query_1);
1003
1007
  console.log(JSON.stringify(query_1, null, 2));
1004
1008
  }
1005
1009
  res_2 = null;
@@ -1262,6 +1266,75 @@ function extractLookupAlias(path) {
1262
1266
  function normalizeLookupAlias(alias) {
1263
1267
  return (alias || '').replace(/\.\$/g, '').trim();
1264
1268
  }
1269
+ function collectRootDatePaths(collectionName) {
1270
+ var out = new Set();
1271
+ var collection = resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(collectionName);
1272
+ var schema = (collection === null || collection === void 0 ? void 0 : collection.rbSchema) || {};
1273
+ Object.keys(schema).forEach(function (path) {
1274
+ var _a;
1275
+ if (((_a = schema[path]) === null || _a === void 0 ? void 0 : _a.rbType) === 'Date') {
1276
+ out.add(path.replace(/\.\$/g, ''));
1277
+ }
1278
+ });
1279
+ return out;
1280
+ }
1281
+ function coerceDateFilters(filters, datePaths) {
1282
+ if (filters === void 0) { filters = []; }
1283
+ var coerceDateValue = function (value) {
1284
+ if (value instanceof Date) {
1285
+ return value;
1286
+ }
1287
+ if (Array.isArray(value)) {
1288
+ return value.map(coerceDateValue);
1289
+ }
1290
+ if (typeof value === 'string' || typeof value === 'number') {
1291
+ var parsed = new Date(value);
1292
+ if (!isNaN(parsed.getTime())) {
1293
+ return parsed;
1294
+ }
1295
+ }
1296
+ return value;
1297
+ };
1298
+ var coerceFilterObject = function (obj) {
1299
+ if (!obj || typeof obj !== 'object') {
1300
+ return obj;
1301
+ }
1302
+ if (Array.isArray(obj)) {
1303
+ obj.forEach(coerceFilterObject);
1304
+ return obj;
1305
+ }
1306
+ if (obj.$or) {
1307
+ obj.$or = obj.$or.map(coerceFilterObject).filter(Boolean);
1308
+ return obj;
1309
+ }
1310
+ if (obj.$and) {
1311
+ obj.$and = obj.$and.map(coerceFilterObject).filter(Boolean);
1312
+ return obj;
1313
+ }
1314
+ Object.keys(obj).forEach(function (key) {
1315
+ if (key.startsWith('$')) {
1316
+ return;
1317
+ }
1318
+ var normalizedKey = key.replace(/\.\$/g, '');
1319
+ if (!datePaths.has(normalizedKey)) {
1320
+ return;
1321
+ }
1322
+ var value = obj[key];
1323
+ if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
1324
+ Object.keys(value).forEach(function (op) {
1325
+ if (op.startsWith('$')) {
1326
+ value[op] = coerceDateValue(value[op]);
1327
+ }
1328
+ });
1329
+ }
1330
+ else {
1331
+ obj[key] = coerceDateValue(value);
1332
+ }
1333
+ });
1334
+ return obj;
1335
+ };
1336
+ (filters || []).forEach(coerceFilterObject);
1337
+ }
1265
1338
  // Helpers to support union-based joins (collection_joins without local/foreign key)
1266
1339
  function stripAliasFromPath(path, alias) {
1267
1340
  if (!path) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":"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","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ReportBuilderCollectionJoin } from '../models/report-builder-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, round, toTitleCase } from '../util/common';\nimport { applyLinkFieldUnwinds, ensureLookupLocalKeyUnwinds, normalizeLookupField } from '../util/report-builder-unwinds';\nimport { buildTree, getReportLookupSchemas, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportbuilderreportWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id: string) {\n\t\t\t\treturn ReportBuilderReports.findOne({_id: id});\n\t\t\t}\n\t\t},\n\t\treportBuilderBuildTree: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection_root: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcollectionJoins: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$': {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.collection': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.alias': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.local_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.foreign_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection_root: string, collectionJoins: any[] = []) {\n\t\t\t\tlet baseRootTree = buildCollectionTree(collection_root);\n\n\t\t\t\tlet collectionTrees: any[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\tcollection: collection_root,\n\t\t\t\t\t\talias: toTitleCase(collection_root.replace(/\\_/g, ' ').replace(/-/g, ' ')),\n\t\t\t\t\t\tlookup_as: '',\n\t\t\t\t\t\ttree: deepCopy(baseRootTree)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tlet rootTree = baseRootTree;\n\n\t\t\t\t(collectionJoins || []).forEach((join, joinIndex) => {\n\t\t\t\t\tconst joinLocalKey = join.local_key && join.local_key.trim().length ? join.local_key : '_id';\n\t\t\t\t\tconst joinForeignKey = join.foreign_key && join.foreign_key.trim().length ? join.foreign_key : '_id';\n\n\t\t\t\t\tlet joinAlias = buildJoinAlias(join, joinIndex);\n\t\t\t\t\tlet joinNode = buildJoinLookupNode(collection_root, {...join, local_key: joinLocalKey, foreign_key: joinForeignKey}, joinAlias);\n\n\t\t\t\t\tlet joinTree = buildCollectionTree(join.collection, joinNode);\n\t\t\t\t\tjoinNode.children = joinTree.children;\n\t\t\t\t\tjoinNode.is_join = true;\n\n\t\t\t\t\trootTree.children.push(joinNode);\n\n\t\t\t\t\tcollectionTrees.push({\n\t\t\t\t\t\tcollection: join.collection,\n\t\t\t\t\t\talias: joinAlias,\n\t\t\t\t\t\tlookup_as: joinNode.lookup_as,\n\t\t\t\t\t\ttree: deepCopy(joinTree)\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisLeaf: false,\n\t\t\t\t\tchildren: rootTree.children,\n\t\t\t\t\ttrees: collectionTrees\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\ttreeLeaf: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(treeLeaf) {\n\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\tconst fieldPath = (treeLeaf && typeof treeLeaf.fieldPath === 'string') ? treeLeaf.fieldPath : '';\n\t\t\t\t\tif (fieldPath.includes('(Lookup') || treeLeaf.lookup_collection) {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/^.+\\(.+\\) \\(Lookup.*\\)\\.\\$\\./g, '').replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\treportType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\trootCollectionName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrays: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrays.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrayFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrayFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tselectedFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'selectedFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tcustomFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'customFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tgroupsRow: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'groupsRow.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsTotal: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsTotal.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsLink: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsLink.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdate_field: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdate_interval: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdisplayType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], customFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', displayType = '') {\n\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\tif (!modelCollection) {\n\t\t\t\t\tthrow new Error('Error in Report builder get results: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfilters = expandLayoutColumnFilters(filters, selectedFields);\n\t\t\t\t\tfilterArrays = expandLayoutColumnFilters(filterArrays, selectedFields);\n\n\t\t\t\t\tconst lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);\n\t\t\t\t\tconst {rootFilters, lookupFilters} = splitFiltersByLookup(filters, lookupAliases);\n\n\t\t\t\t\t// Union-based join mode (no local/foreign key): build per-collection pipelines and union them\n\t\t\t\t\t// Union-based join mode should only apply when a \"joined\" collection has no join keys.\n\t\t\t\t\t// Standard lookups (with local/foreign keys) must use the aggregation $lookup pipeline below,\n\t\t\t\t\t// otherwise we'd return unrelated docs from the foreign collection (and root fields like \"well\" go blank).\n\t\t\t\t\tconst additionalCollectionsMap = new Map<string, {collection: string, alias: string}>();\n\t\t\t\t\t(selectedFields || [])\n\t\t\t\t\t\t.filter(f =>\n\t\t\t\t\t\t\tf &&\n\t\t\t\t\t\t\tf.lookup_collection &&\n\t\t\t\t\t\t\t(!f.lookup_local_key || !f.lookup_foreign_key)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.forEach(f => {\n\t\t\t\t\t\t\tconst alias = f.lookup_as || f.lookup_collection;\n\t\t\t\t\t\t\tconst key = `${f.lookup_collection}::${alias}`;\n\t\t\t\t\t\t\tif (!additionalCollectionsMap.has(key)) {\n\t\t\t\t\t\t\t\tadditionalCollectionsMap.set(key, {collection: f.lookup_collection, alias});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\tconst additionalCollections = Array.from(additionalCollectionsMap.values());\n\n\t\t\t\t\tif (additionalCollections.length) {\n\t\t\t\t\t\tlet unionQuery: any[] = buildCollectionPipeline(rootCollectionName, '', selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), true);\n\n\t\t\t\t\t\tadditionalCollections.forEach(cfg => {\n\t\t\t\t\t\t\tunionQuery.push({\n\t\t\t\t\t\t\t\t$unionWith: {\n\t\t\t\t\t\t\t\t\tcoll: cfg.collection,\n\t\t\t\t\t\t\t\t\tpipeline: buildCollectionPipeline(cfg.collection, cfg.alias, selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tconst {sortSpec: sortToUse, addFields: layoutSortAdd} = buildLayoutSortSpec(rootOptions.sort, selectedFields);\n\t\t\t\t\t\t\tif (Object.keys(layoutSortAdd).length) {\n\t\t\t\t\t\t\t\tunionQuery.push({$addFields: layoutSortAdd});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tappendSafeSort(unionQuery, sortToUse, selectedFields, customFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Apply remapped filters on projected field ids after union\n\t\t\t\t\t\tconst remappedFilters = remapFiltersToIds(filters.concat(rootFilters || []), selectedFields);\n\t\t\t\t\t\tconst remappedArrayFilters = remapFiltersToIds(filterArrays.concat(lookupFilters || []), selectedFields);\n\t\t\t\t\t\tconst postMatchAnd: any[] = [];\n\t\t\t\t\t\tif (remappedFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (remappedArrayFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedArrayFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (postMatchAnd.length) {\n\t\t\t\t\t\t\tunionQuery.push({$match: {$and: postMatchAnd}});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet res = null;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(unionQuery, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tconst sum = res.map(a => {\n\t\t\t\t\t\t\t\t\t\tconst raw = a ? a[selField.id] : null;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(raw)) {\n\t\t\t\t\t\t\t\t\t\t\treturn raw\n\t\t\t\t\t\t\t\t\t\t\t\t.map(v => (typeof v === 'number' ? v : Number(v)))\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(v => !isNaN(v))\n\t\t\t\t\t\t\t\t\t\t\t\t.reduce((x, y) => x + y, 0);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst num = typeof raw === 'number' ? raw : (raw !== null && raw !== undefined ? Number(raw) : 0);\n\t\t\t\t\t\t\t\t\t\treturn isNaN(num) ? 0 : num;\n\t\t\t\t\t\t\t\t\t}).reduce((a, b) => a + b, 0);\n\n\t\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = sum;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.length ? round(sum / res.length) : 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet resultsOut = res || [];\n\t\t\t\t\t\tif (rootOptions.skip) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(rootOptions.skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rootOptions.limit) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(0, rootOptions.limit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: resultsOut,\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\treturn tmpRes;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\n\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\n\t\t\t\t\t// \t\t]\n\t\t\t\t\t// \t});\n\t\t\t\t\t// });\n\n\t\t\t\t\tif (rootFilters.length) {\n\t\t\t\t\t\trootFilters.forEach(filter => initialQueryMatchCondition['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\t// if (filters.filter(a => (!a['$or'] && !Object.keys(a).some(b => b.includes('(Lookup'))) || (a['$or'] && !a['$or'].some(b => Object.keys(b).some(c => c.includes('(Lookup)'))))).length || selectedFields.filter(a => !a.fieldPath.includes('(Lookup')).length) {\n\t\t\t\t\tif (initialQueryMatchCondition['$and'].length) {\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add count\n\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\tlet fieldData = filterField.fieldPath.split('.$');\n\n\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (filterField.lookup_collection || fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup')) {\n\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: filterField.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\tconst lookupAs = filterField.lookup_as.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\tfrom: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(filterField.lookup_local_key),\n\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(filterField.lookup_foreign_key),\n\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tconst lookupSizeKey = filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\tsizes.push(lookupSizeKey);\n\t\t\t\t\t\t\t\t\tconst lookupSourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + lookupSizeKey]: {$size: {$cond: [{$isArray: lookupSourceExpr}, lookupSourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\tif (rowField.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = rowField.split('.$');\n\n\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tconst lastSegment = fieldPath.split('.$')[fieldPath.split('.$').length - 1];\n\t\t\t\t\t\t\t\tconst hasLookup = !!row.treeItem?.lookup_collection || (lastSegment || '').includes('(Lookup');\n\n\t\t\t\t\t\t\t\tif (hasLookup && row.treeItem?.lookup_collection && row.treeItem?.lookup_as) {\n\t\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: row.treeItem.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\t\tconst lookupAsRaw = row.treeItem.lookup_as || '';\n\t\t\t\t\t\t\t\t\tconst lookupAs = lookupAsRaw.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(row.treeItem.lookup_local_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(row.treeItem.lookup_foreign_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = lookupAsRaw.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldPath += '.$';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tapplyLinkFieldUnwinds({\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tsizes,\n\t\t\t\t\t\tfieldsLink,\n\t\t\t\t\t\tselectedFields,\n\t\t\t\t\t\tfilterArrayFields,\n\t\t\t\t\t\tgroupsRow\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t// NOTE: lookup-based unwinds are no longer needed for joins; union handled below\n\n\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields[fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (reportType !== 'Dated' && sizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\tsizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$count';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t\tquery.push({$addFields: {[link.id]: {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]}}});\n\t\t\t\t\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t});\n\n\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\tcust.operations.filter(a => a.operation && !a.fields.some(b => (b.field === null || b.field === '') && b.value === null)).forEach((operation, opIndex) => {\n\t\t\t\t\t\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + field.field.replace(/\\.\\$/g, ''));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t$cond: { if: { $or: condCheck }, then: 0, else: {['$' + operation.operation]: tmpOperationFields} }\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $eq: ['$' + cust.selFieldId, null] }, then: 0, else: '$' + cust.selFieldId}});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: '$' + field.field.replace(/\\.\\$/g, '')}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: field.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif (lookupFilters.length) {\n\t\t\t\t\t\tlookupFilters.forEach(filter => queryMatchConditionLookup['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group\n\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t_id: {}\n\t\t\t\t\t};\n\n\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\tqueryGroup._id = '$_id';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (rootOptions.sort) { \n\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\tlet selField = selectedFields.find(a => a.id === sortField);\n\t\n\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\tconst sortPath = (selField && typeof selField.fieldPath === 'string') ? selField.fieldPath.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\t\t\tif (sortPath) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[sortPath] = rootOptions.sort[sortField];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (groupsRow.length && date_field && date_interval) {\n\t\t\t\t\t\t\t\tconst dateFieldPath = (typeof date_field === 'string') ? date_field.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\tif (dateFieldPath) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['second'] = {'$second' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\t\t\tif (!rowField || !row?.id) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + rowField.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$push': {$ifNull: ['$' + fieldPath.replace(/\\.\\$/g, ''), null]}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$push': {$ifNull: ['$' + cust.selFieldId, null]}};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Totals\n\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {['$' + total.type] : '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$group: queryGroup});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//Projection\n\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t_id: 1\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = '$' + cust.selFieldId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Totals\n\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$project: queryProjection});\n\t\t\t\t\t}\n\n\t\t\t\t\t// SORT\n\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\tappendSafeSort(query, rootOptions.sort, selectedFields, customFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.id] = '$' + field.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.selFieldId] = '$' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + selField.id] = '$' + totField.id + '_' + selField.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + field.selFieldId] = '$' + totField.id + '_' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + field.selFieldId] = {['$' + totField.type]: '$' + totField.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (sortKeys.includes('_id.gr_' + (groupIndex + 1))) {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsortKeys.filter(a => !a.startsWith('_id.gr_')).forEach(key => {\n\t\t\t\t\t\t\t\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tappendSafeSort(query, sort, selectedFields, customFields);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\t\t\tconsole.log('_____________ query __________'); console.log(query); console.log(JSON.stringify(query, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tlet res = null;\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = round(res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomFields.forEach(custField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = round(res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn tmpRes;\n\t\t\t\t}\n\t\t\t},\n\t\t\tworkerTaskWeight: 2\n\t\t}\n\t});\n}\n\nfunction buildCollectionTree(collectionName: string, lookupNode?: any) {\n\tlet lookupSchemaData = getReportLookupSchemas(collectionName).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\tlet lookupSchemaTree = lookupSchemaData.find(a => a.is_root === true)?.tree || {};\n\n\tlet treeItems = buildTree(collectionName, lookupSchemaTree, lookupNode);\n\n\tattachLookupChildren(treeItems, lookupSchemaData, lookupSchemaTree);\n\n\treturn {isLeaf: false, children: treeItems};\n}\n\nfunction attachLookupChildren(treeItems: any[], lookupSchemaData: any[], lookupSchemaTree: any) {\n\tObject.keys(lookupSchemaTree || {}).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\tlet field = findFieldByPath(treeItems, lookup);\n\n\t\tif (field) {\n\t\t\tlet lookupTree = lookupSchemaData.find(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection);\n\n\t\t\tif (lookupTree) {\n\t\t\t\tlet childTree = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupTree.tree, field);\n\t\t\t\tattachLookupChildren(childTree, lookupSchemaData, lookupTree.tree);\n\t\t\t\tfield.children = childTree;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction findFieldByPath(treeItems: any[], lookupPath: string) {\n\tlet fieldPath = lookupPath.split('.');\n\tlet field = null;\n\n\tfieldPath.forEach(path => {\n\t\tif (!field) {\n\t\t\tfield = treeItems.find(a => a.fieldName === path);\n\t\t}\n\t\telse if (field.children) {\n\t\t\tfield = field.children.find(a => a.fieldName === path);\n\t\t}\n\t});\n\n\treturn field;\n}\n\nfunction buildJoinLookupNode(collection_root: string, join: ReportBuilderCollectionJoin, alias: string) {\n\treturn {\n\t\tcollection_name: collection_root,\n\t\tcolumnName: alias,\n\t\tfieldName: alias,\n\t\tfieldType: 'Lookup',\n\t\tfieldTypeName: 'Lookup',\n\t\tdistinctFieldValues: [],\n\t\tfieldPath: alias,\n\t\tfieldPathName: alias,\n\t\tpath: alias,\n\t\tlookup_collection: join.collection,\n\t\tlookup_local_key: join.local_key,\n\t\tlookup_foreign_key: join.foreign_key,\n\t\tlookup_as: alias,\n\t\ttext: alias,\n\t\tvalue: alias,\n\t\tisLeaf: false,\n\t\tisActive: false,\n\t\tisSelected: false,\n\t\tis_join: false,\n\t\tdepth: 0,\n\t\tleafValueType: '',\n\t\tleafFormatType: '',\n\t\tchildren: []\n\t};\n}\n\nfunction buildJoinAlias(join: ReportBuilderCollectionJoin, joinIndex: number) {\n\tif (join.alias && join.alias.trim()) {\n\t\treturn join.alias.trim();\n\t}\n\n\tlet joinName = toTitleCase(join.collection.replace(/\\_/g, ' ').replace(/-/g, ' '));\n\tlet joinPath = toTitleCase(join.local_key.replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ').replace(/\\_/g, ' '));\n\n\treturn `${joinName} (${joinPath || 'Join'}) (Lookup ${joinIndex + 1})`;\n}\n\nfunction appendSafeSort(query: any[], sortSpec: any, selectedFields: any[] = [], customFields: any[] = []) {\n\tif (!sortSpec || !Object.keys(sortSpec).length) {\n\t\treturn;\n\t}\n\n\tconst safeAddFields = {};\n\tconst safeSort = {};\n\n\tObject.keys(sortSpec).forEach(key => {\n\t\tif (key.startsWith('_id.')) {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t\treturn;\n\t\t}\n\n\t\tif (isArrayLikeField(key, selectedFields, customFields)) {\n\t\t\tconst safeKey = 'sort_' + key.replace(/\\./g, '_');\n\t\t\tsafeAddFields[safeKey] = {\n\t\t\t\t$cond: [\n\t\t\t\t\t{$isArray: '$' + key},\n\t\t\t\t\t{$size: {$ifNull: ['$' + key, []]}},\n\t\t\t\t\t'$' + key\n\t\t\t\t]\n\t\t\t};\n\t\t\tsafeSort[safeKey] = sortSpec[key];\n\t\t}\n\t\telse {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t}\n\t});\n\n\tif (Object.keys(safeAddFields).length) {\n\t\tquery.push({$addFields: safeAddFields});\n\t}\n\n\tif (Object.keys(safeSort).length) {\n\t\tquery.push({$sort: safeSort});\n\t}\n}\n\nfunction isArrayLikeField(sortKey: string, selectedFields: any[] = [], customFields: any[] = []) {\n\tconst field = selectedFields.find(a => a.id === sortKey);\n\tconst custom = customFields.find(a => a.selFieldId === sortKey);\n\n\tconst leafValueType = field ? field.leafValueType : (custom ? custom.leafValueType : '');\n\n\treturn leafValueType !== 'Average' &&\n\t\tleafValueType !== 'Sum' &&\n\t\tleafValueType !== 'Count' &&\n\t\tleafValueType !== 'Minimum' &&\n\t\tleafValueType !== 'Maximum' &&\n\t\tleafValueType !== 'First' &&\n\t\tleafValueType !== 'Last' &&\n\t\tleafValueType !== 'Unique';\n}\n\nfunction collectLookupAliases(selectedFields: any[] = [], filterArrayFields: any[] = [], groupsRow: any[] = []) {\n\tconst aliases = new Set<string>();\n\n\tconst addAlias = (alias: string) => {\n\t\tconst normalized = normalizeLookupAlias(alias);\n\t\tif (normalized) {\n\t\t\taliases.add(normalized);\n\t\t}\n\t};\n\n\t(selectedFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(filterArrayFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(groupsRow || []).forEach(group => {\n\t\tif (group?.treeItem && (group.treeItem.lookup_collection || (group.treeItem.fieldPath && group.treeItem.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(group.treeItem.lookup_as || extractLookupAlias(group.treeItem.fieldPath));\n\t\t}\n\t});\n\n\treturn aliases;\n}\n\nfunction splitFiltersByLookup(filters: any[] = [], lookupAliases: Set<string> = new Set()) {\n\tconst rootFilters = [];\n\tconst lookupFilters = [];\n\n\t(filters || []).forEach(filter => {\n\t\tconst summary = summarizeFilterTargets(filter, lookupAliases);\n\n\t\tif (summary.hasLookup) {\n\t\t\t// If the filter mixes root + lookup, keep it together in lookupFilters so it stays a single $match/$or\n\t\t\tlookupFilters.push(filter);\n\t\t}\n\t\telse {\n\t\t\trootFilters.push(filter);\n\t\t}\n\t});\n\n\treturn {rootFilters, lookupFilters};\n}\n\nfunction summarizeFilterTargets(filter: any, lookupAliases: Set<string>) {\n\tconst result = {hasLookup: false, hasRoot: false};\n\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn result;\n\t}\n\n\tObject.keys(filter).forEach(key => {\n\t\tif (key === '$or' || key === '$and') {\n\t\t\tconst branch = filter[key];\n\t\t\tif (Array.isArray(branch)) {\n\t\t\t\tbranch.forEach(child => {\n\t\t\t\t\tconst childSummary = summarizeFilterTargets(child, lookupAliases);\n\t\t\t\t\tresult.hasLookup = result.hasLookup || childSummary.hasLookup;\n\t\t\t\t\tresult.hasRoot = result.hasRoot || childSummary.hasRoot;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst isLookup = isLookupPath(key, lookupAliases);\n\t\t\tif (isLookup) {\n\t\t\t\tresult.hasLookup = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult.hasRoot = true;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction isLookupPath(path: string, lookupAliases: Set<string>) {\n\tif (!path) {\n\t\treturn false;\n\t}\n\n\tconst normalizedPath = path.replace(/\\.\\$/g, '');\n\n\tif (normalizedPath.includes('(Lookup')) {\n\t\treturn true;\n\t}\n\n\tconst rootKey = normalizedPath.split('.')[0];\n\treturn lookupAliases.has(rootKey);\n}\n\nfunction extractLookupAlias(path: string) {\n\tif (!path || !path.includes('(Lookup')) {\n\t\treturn '';\n\t}\n\n\treturn path.replace(/\\.\\$/g, '').split('.')[0];\n}\n\nfunction normalizeLookupAlias(alias: string) {\n\treturn (alias || '').replace(/\\.\\$/g, '').trim();\n}\n\n// Helpers to support union-based joins (collection_joins without local/foreign key)\nfunction stripAliasFromPath(path: string, alias: string) {\n\tif (!path) {\n\t\treturn path;\n\t}\n\n\tconst cleanAlias = alias.replace(/\\.\\$/g, '');\n\tconst cleanPath = path.replace(/\\.\\$/g, '');\n\n\tif (cleanPath.startsWith(cleanAlias + '.')) {\n\t\treturn cleanPath.substring(cleanAlias.length + 1);\n\t}\n\n\treturn cleanPath;\n}\n\nfunction buildCollectionPipeline(collectionName: string, alias: string, selectedFields: any[] = [], filters: any[] = [], filterArrays: any[] = [], isRoot = false) {\n\tconst pipeline: any[] = [];\n\tconst matchClauses: any[] = [];\n\tconst matchArrayClauses: any[] = [];\n\n\tconst targetAlias = isRoot ? '' : alias.replace(/\\.\\$/g, '');\n\n\tconst mapFilterForCollection = (filterObj: any, toArray: boolean) => {\n\t\tif (!filterObj || typeof filterObj !== 'object') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mapped = mapFilterPaths(filterObj, targetAlias, isRoot);\n\t\tif (mapped) {\n\t\t\t(toArray ? matchArrayClauses : matchClauses).push(mapped);\n\t\t}\n\t};\n\n\t(filters || []).forEach(f => mapFilterForCollection(f, false));\n\t(filterArrays || []).forEach(f => mapFilterForCollection(f, true));\n\n\tif (matchClauses.length || matchArrayClauses.length) {\n\t\tconst match: any = {$and: [...matchClauses, ...matchArrayClauses]};\n\t\tpipeline.push({$match: match});\n\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tconsole.info('RB debug: collection pipeline match', {\n\t\t\t\tcollection: collectionName,\n\t\t\t\talias: targetAlias || collectionName,\n\t\t\t\tmatchJson: JSON.stringify(match, null, 2)\n\t\t\t});\n\t\t}\n\t}\n\n\t// Projection mapping selected fields for this collection\n\tconst projection: any = {_id: 1, __rb_collection: targetAlias || collectionName};\n\t(selectedFields || [])\n\t\t.filter(f => isFieldForCollection(f, collectionName, targetAlias))\n\t\t.forEach(f => {\n\t\t\tconst mappedPath = stripAliasFromPath(f.fieldPath || '', targetAlias || f.lookup_as || '');\n\t\t\tif (f.leafValueType === 'Average') {\n\t\t\t\tprojection[f.id] = {$avg: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Sum') {\n\t\t\t\tprojection[f.id] = {$sum: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Count') {\n\t\t\t\tprojection[f.id] = {$sum: 1};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Minimum') {\n\t\t\t\tprojection[f.id] = {$min: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Maximum') {\n\t\t\t\tprojection[f.id] = {$max: '$' + mappedPath};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprojection[f.id] = '$' + mappedPath;\n\t\t\t}\n\t\t});\n\n\tpipeline.push({$project: projection});\n\n\treturn pipeline;\n}\n\nfunction isFieldForCollection(field: any, collectionName: string, alias: string) {\n\tif (!field) {\n\t\treturn false;\n\t}\n\n\t// Root collection check\n\tif (!alias) {\n\t\treturn field.collection_name === collectionName && (!field.lookup_collection || field.lookup_collection === '');\n\t}\n\n\t// Joined collection check\n\treturn field.lookup_collection === collectionName || (field.lookup_as && field.lookup_as.replace(/\\.\\$/g, '') === alias);\n}\n\nfunction mapFilterPaths(filter: any, alias: string, isRoot: boolean) {\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\treturn filter.map(f => mapFilterPaths(f, alias, isRoot));\n\t}\n\n\tif (filter.$or) {\n\t\tconst mapped = filter.$or.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$or: mapped} : null;\n\t}\n\n\tif (filter.$and) {\n\t\tconst mapped = filter.$and.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$and: mapped} : null;\n\t}\n\n\tconst out: any = {};\n\tObject.keys(filter).forEach(key => {\n\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\n\t\tif (!alias) {\n\t\t\t// root collection: ignore keys that start with a lookup alias\n\t\t\tif (cleanKey.includes('(Lookup')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (lookupAliasMatches(cleanKey, alias)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tout[cleanKey] = filter[key];\n\t\t}\n\t\telse {\n\t\t\tif (cleanKey.startsWith(alias + '.')) {\n\t\t\t\tout[cleanKey.substring(alias.length + 1)] = filter[key];\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Object.keys(out).length ? out : null;\n}\n\nfunction lookupAliasMatches(path: string, alias: string) {\n\tif (!path || !alias) {\n\t\treturn false;\n\t}\n\treturn path.startsWith(alias + '.') || path === alias;\n}\n\nfunction buildLayoutSortSpec(sortSpec: any = {}, selectedFields: any[] = []) {\n\tconst outSort: any = {...sortSpec};\n\tconst addFields: any = {};\n\n\tObject.keys(sortSpec || {}).forEach(key => {\n\t\tif (!key.startsWith('layout_col_')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalized = key.replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (isNaN(idx)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst layoutFields = (selectedFields || []).filter(f => typeof f?.layoutColumnIndex !== 'undefined' && f.layoutColumnIndex === idx).map(f => f.id).filter(Boolean);\n\n\t\tif (!layoutFields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build nested $ifNull chain to coalesce across layout column targets\n\t\tlet coalesce: any = '';\n\t\tfor (let i = layoutFields.length - 1; i >= 0; i--) {\n\t\t\tconst fieldPath = '$' + layoutFields[i];\n\t\t\tif (i === layoutFields.length - 1) {\n\t\t\t\tcoalesce = fieldPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcoalesce = {$ifNull: [fieldPath, coalesce]};\n\t\t\t}\n\t\t}\n\n\t\tconst sortKey = 'sort_' + key;\n\t\taddFields[sortKey] = coalesce;\n\n\t\tdelete outSort[key];\n\t\toutSort[sortKey] = sortSpec[key];\n\t});\n\n\treturn {sortSpec: outSort, addFields};\n}\n\nfunction remapFiltersToIds(filters: any[] = [], selectedFields: any[] = []) {\n\tconst byPath = new Map<string, string>();\n\tconst layoutMap = new Map<number, string[]>();\n\t(selectedFields || []).forEach(f => {\n\t\tif (f?.fieldPath && f?.id) {\n\t\t\tbyPath.set(f.fieldPath.replace(/\\.\\$/g, ''), f.id);\n\t\t}\n\n\t\tif (typeof f?.layoutColumnIndex !== 'undefined') {\n\t\t\tconst arr = layoutMap.get(f.layoutColumnIndex) || [];\n\t\t\tarr.push(f.id);\n\t\t\tlayoutMap.set(f.layoutColumnIndex, arr);\n\t\t}\n\t});\n\n\tconst remapObj = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(remapObj);\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tconst mapped = obj.$or.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$or: mapped} : null;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tconst mapped = obj.$and.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$and: mapped} : null;\n\t\t}\n\n\t\tconst out: any = {};\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (cleanKey.startsWith('layout_col_')) {\n\t\t\t\t// map to all field ids in that layout column index\n\t\t\t\tconst normalized = cleanKey.replace(/^layout_col_/, '');\n\t\t\t\tconst parts = normalized.split('_');\n\t\t\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\t\t\t\tconst targets = layoutMap.get(idx) || [];\n\n\t\t\t\tif (targets.length) {\n\t\t\t\t\tconst mappedVal = remapObj(obj[key]);\n\t\t\t\t\tout.$or = targets.map(id => ({[id]: mappedVal}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst mappedKey = byPath.get(cleanKey) || cleanKey;\n\t\t\tout[mappedKey] = remapObj(obj[key]);\n\t\t});\n\n\t\treturn Object.keys(out).length ? out : null;\n\t};\n\n\treturn (filters || []).map(remapObj).filter(Boolean);\n}\n\nfunction expandLayoutColumnFilters(filters: any[] = [], selectedFields: any[] = []) {\n\tconst layoutCache: {[key: string]: string[]} = {};\n\n\tconst resolveLayoutPaths = (layoutKey: string) => {\n\t\tif (layoutCache[layoutKey]) {\n\t\t\treturn layoutCache[layoutKey];\n\t\t}\n\n\t\tlet paths: string[] = [];\n\t\tconst normalized = (layoutKey || '').replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (!isNaN(idx)) {\n\t\t\tpaths = (selectedFields || [])\n\t\t\t\t.filter(f => f && (f.layoutColumnIndex === idx || (f.id || '').includes(`f_layout_${idx}_`)))\n\t\t\t\t.map(f => f.fieldPath ? f.fieldPath.replace(/\\.\\$/g, '') : '')\n\t\t\t\t.filter(p => !!p);\n\t\t}\n\n\t\tlayoutCache[layoutKey] = paths;\n\t\treturn paths;\n\t};\n\n\tconst expandFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\treturn {$or: obj.$or.map(expandFilterObject)};\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\treturn {$and: obj.$and.map(expandFilterObject)};\n\t\t}\n\n\t\tlet expanded: any = {};\n\t\tlet replaced = false;\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst val = obj[key];\n\n\t\t\tif (key.startsWith('layout_col_')) {\n\t\t\t\tconst paths = resolveLayoutPaths(key);\n\n\t\t\t\tif (paths.length) {\n\t\t\t\t\treplaced = true;\n\t\t\t\t\texpanded.$or = paths.map(path => ({[path]: val}));\n\t\t\t\t\t// Use console to trace layout filter expansion without requiring a logger on ResolveIOServer\n\t\t\t\t\tconsole.info('RB layout filter expansion', {layoutKey: key, paths});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn('RB layout filter expansion failed', {layoutKey: key, selectedFields});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\texpanded[key] = val;\n\t\t\t}\n\t\t});\n\n\t\treturn replaced ? expanded : obj;\n\t};\n\n\treturn (filters || []).map(expandFilterObject);\n}\n"]}
1
+ {"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":"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","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ReportBuilderCollectionJoin } from '../models/report-builder-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, round, toTitleCase } from '../util/common';\nimport { applyLinkFieldUnwinds, ensureLookupLocalKeyUnwinds, normalizeLookupField } from '../util/report-builder-unwinds';\nimport { buildTree, getReportLookupSchemas, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportbuilderreportWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id: string) {\n\t\t\t\treturn ReportBuilderReports.findOne({_id: id});\n\t\t\t}\n\t\t},\n\t\treportBuilderBuildTree: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection_root: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcollectionJoins: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$': {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.collection': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.alias': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.local_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.foreign_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection_root: string, collectionJoins: any[] = []) {\n\t\t\t\tlet baseRootTree = buildCollectionTree(collection_root);\n\n\t\t\t\tlet collectionTrees: any[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\tcollection: collection_root,\n\t\t\t\t\t\talias: toTitleCase(collection_root.replace(/\\_/g, ' ').replace(/-/g, ' ')),\n\t\t\t\t\t\tlookup_as: '',\n\t\t\t\t\t\ttree: deepCopy(baseRootTree)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tlet rootTree = baseRootTree;\n\n\t\t\t\t(collectionJoins || []).forEach((join, joinIndex) => {\n\t\t\t\t\tconst joinLocalKey = join.local_key && join.local_key.trim().length ? join.local_key : '_id';\n\t\t\t\t\tconst joinForeignKey = join.foreign_key && join.foreign_key.trim().length ? join.foreign_key : '_id';\n\n\t\t\t\t\tlet joinAlias = buildJoinAlias(join, joinIndex);\n\t\t\t\t\tlet joinNode = buildJoinLookupNode(collection_root, {...join, local_key: joinLocalKey, foreign_key: joinForeignKey}, joinAlias);\n\n\t\t\t\t\tlet joinTree = buildCollectionTree(join.collection, joinNode);\n\t\t\t\t\tjoinNode.children = joinTree.children;\n\t\t\t\t\tjoinNode.is_join = true;\n\n\t\t\t\t\trootTree.children.push(joinNode);\n\n\t\t\t\t\tcollectionTrees.push({\n\t\t\t\t\t\tcollection: join.collection,\n\t\t\t\t\t\talias: joinAlias,\n\t\t\t\t\t\tlookup_as: joinNode.lookup_as,\n\t\t\t\t\t\ttree: deepCopy(joinTree)\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisLeaf: false,\n\t\t\t\t\tchildren: rootTree.children,\n\t\t\t\t\ttrees: collectionTrees\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\ttreeLeaf: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(treeLeaf) {\n\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\tconst fieldPath = (treeLeaf && typeof treeLeaf.fieldPath === 'string') ? treeLeaf.fieldPath : '';\n\t\t\t\t\tif (fieldPath.includes('(Lookup') || treeLeaf.lookup_collection) {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/^.+\\(.+\\) \\(Lookup.*\\)\\.\\$\\./g, '').replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\treportType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\trootCollectionName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrays: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrays.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrayFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrayFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tselectedFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'selectedFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tcustomFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'customFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tgroupsRow: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'groupsRow.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsTotal: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsTotal.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsLink: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsLink.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdate_field: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdate_interval: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdisplayType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], customFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', displayType = '') {\n\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\tif (!modelCollection) {\n\t\t\t\t\tthrow new Error('Error in Report builder get results: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfilters = expandLayoutColumnFilters(filters, selectedFields);\n\t\t\t\t\tfilterArrays = expandLayoutColumnFilters(filterArrays, selectedFields);\n\t\t\t\t\tconst datePaths = collectRootDatePaths(rootCollectionName);\n\t\t\t\t\tif (datePaths.size) {\n\t\t\t\t\t\tcoerceDateFilters(filters, datePaths);\n\t\t\t\t\t\tcoerceDateFilters(filterArrays, datePaths);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);\n\t\t\t\t\tconst {rootFilters, lookupFilters} = splitFiltersByLookup(filters, lookupAliases);\n\n\t\t\t\t\t// Union-based join mode (no local/foreign key): build per-collection pipelines and union them\n\t\t\t\t\t// Union-based join mode should only apply when a \"joined\" collection has no join keys.\n\t\t\t\t\t// Standard lookups (with local/foreign keys) must use the aggregation $lookup pipeline below,\n\t\t\t\t\t// otherwise we'd return unrelated docs from the foreign collection (and root fields like \"well\" go blank).\n\t\t\t\t\tconst additionalCollectionsMap = new Map<string, {collection: string, alias: string}>();\n\t\t\t\t\t(selectedFields || [])\n\t\t\t\t\t\t.filter(f =>\n\t\t\t\t\t\t\tf &&\n\t\t\t\t\t\t\tf.lookup_collection &&\n\t\t\t\t\t\t\t(!f.lookup_local_key || !f.lookup_foreign_key)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.forEach(f => {\n\t\t\t\t\t\t\tconst alias = f.lookup_as || f.lookup_collection;\n\t\t\t\t\t\t\tconst key = `${f.lookup_collection}::${alias}`;\n\t\t\t\t\t\t\tif (!additionalCollectionsMap.has(key)) {\n\t\t\t\t\t\t\t\tadditionalCollectionsMap.set(key, {collection: f.lookup_collection, alias});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\tconst additionalCollections = Array.from(additionalCollectionsMap.values());\n\n\t\t\t\t\tif (additionalCollections.length) {\n\t\t\t\t\t\tlet unionQuery: any[] = buildCollectionPipeline(rootCollectionName, '', selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), true);\n\n\t\t\t\t\t\tadditionalCollections.forEach(cfg => {\n\t\t\t\t\t\t\tunionQuery.push({\n\t\t\t\t\t\t\t\t$unionWith: {\n\t\t\t\t\t\t\t\t\tcoll: cfg.collection,\n\t\t\t\t\t\t\t\t\tpipeline: buildCollectionPipeline(cfg.collection, cfg.alias, selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tconst {sortSpec: sortToUse, addFields: layoutSortAdd} = buildLayoutSortSpec(rootOptions.sort, selectedFields);\n\t\t\t\t\t\t\tif (Object.keys(layoutSortAdd).length) {\n\t\t\t\t\t\t\t\tunionQuery.push({$addFields: layoutSortAdd});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tappendSafeSort(unionQuery, sortToUse, selectedFields, customFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Apply remapped filters on projected field ids after union\n\t\t\t\t\t\tconst remappedFilters = remapFiltersToIds(filters.concat(rootFilters || []), selectedFields);\n\t\t\t\t\t\tconst remappedArrayFilters = remapFiltersToIds(filterArrays.concat(lookupFilters || []), selectedFields);\n\t\t\t\t\t\tconst postMatchAnd: any[] = [];\n\t\t\t\t\t\tif (remappedFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (remappedArrayFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedArrayFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (postMatchAnd.length) {\n\t\t\t\t\t\t\tunionQuery.push({$match: {$and: postMatchAnd}});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet res = null;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(unionQuery, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tconst sum = res.map(a => {\n\t\t\t\t\t\t\t\t\t\tconst raw = a ? a[selField.id] : null;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(raw)) {\n\t\t\t\t\t\t\t\t\t\t\treturn raw\n\t\t\t\t\t\t\t\t\t\t\t\t.map(v => (typeof v === 'number' ? v : Number(v)))\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(v => !isNaN(v))\n\t\t\t\t\t\t\t\t\t\t\t\t.reduce((x, y) => x + y, 0);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst num = typeof raw === 'number' ? raw : (raw !== null && raw !== undefined ? Number(raw) : 0);\n\t\t\t\t\t\t\t\t\t\treturn isNaN(num) ? 0 : num;\n\t\t\t\t\t\t\t\t\t}).reduce((a, b) => a + b, 0);\n\n\t\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = sum;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.length ? round(sum / res.length) : 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet resultsOut = res || [];\n\t\t\t\t\t\tif (rootOptions.skip) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(rootOptions.skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rootOptions.limit) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(0, rootOptions.limit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: resultsOut,\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\treturn tmpRes;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\n\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\n\t\t\t\t\t// \t\t]\n\t\t\t\t\t// \t});\n\t\t\t\t\t// });\n\n\t\t\t\t\tif (rootFilters.length) {\n\t\t\t\t\t\trootFilters.forEach(filter => initialQueryMatchCondition['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\t// if (filters.filter(a => (!a['$or'] && !Object.keys(a).some(b => b.includes('(Lookup'))) || (a['$or'] && !a['$or'].some(b => Object.keys(b).some(c => c.includes('(Lookup)'))))).length || selectedFields.filter(a => !a.fieldPath.includes('(Lookup')).length) {\n\t\t\t\t\tif (initialQueryMatchCondition['$and'].length) {\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add count\n\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\tlet fieldData = filterField.fieldPath.split('.$');\n\n\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (filterField.lookup_collection || fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup')) {\n\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: filterField.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\tconst lookupAs = filterField.lookup_as.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\tfrom: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(filterField.lookup_local_key),\n\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(filterField.lookup_foreign_key),\n\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tconst lookupSizeKey = filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\tsizes.push(lookupSizeKey);\n\t\t\t\t\t\t\t\t\tconst lookupSourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + lookupSizeKey]: {$size: {$cond: [{$isArray: lookupSourceExpr}, lookupSourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\tif (rowField.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = rowField.split('.$');\n\n\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tconst lastSegment = fieldPath.split('.$')[fieldPath.split('.$').length - 1];\n\t\t\t\t\t\t\t\tconst hasLookup = !!row.treeItem?.lookup_collection || (lastSegment || '').includes('(Lookup');\n\n\t\t\t\t\t\t\t\tif (hasLookup && row.treeItem?.lookup_collection && row.treeItem?.lookup_as) {\n\t\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: row.treeItem.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\t\tconst lookupAsRaw = row.treeItem.lookup_as || '';\n\t\t\t\t\t\t\t\t\tconst lookupAs = lookupAsRaw.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(row.treeItem.lookup_local_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(row.treeItem.lookup_foreign_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = lookupAsRaw.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldPath += '.$';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tapplyLinkFieldUnwinds({\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tsizes,\n\t\t\t\t\t\tfieldsLink,\n\t\t\t\t\t\tselectedFields,\n\t\t\t\t\t\tfilterArrayFields,\n\t\t\t\t\t\tgroupsRow\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t// NOTE: lookup-based unwinds are no longer needed for joins; union handled below\n\n\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields[fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (reportType !== 'Dated' && sizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\tsizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$count';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t\tquery.push({$addFields: {[link.id]: {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]}}});\n\t\t\t\t\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t});\n\n\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\tcust.operations.filter(a => a.operation && !a.fields.some(b => (b.field === null || b.field === '') && b.value === null)).forEach((operation, opIndex) => {\n\t\t\t\t\t\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + field.field.replace(/\\.\\$/g, ''));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t$cond: { if: { $or: condCheck }, then: 0, else: {['$' + operation.operation]: tmpOperationFields} }\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $eq: ['$' + cust.selFieldId, null] }, then: 0, else: '$' + cust.selFieldId}});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: '$' + field.field.replace(/\\.\\$/g, '')}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: field.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif (lookupFilters.length) {\n\t\t\t\t\t\tlookupFilters.forEach(filter => queryMatchConditionLookup['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group\n\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t_id: {}\n\t\t\t\t\t};\n\n\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\tqueryGroup._id = '$_id';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (rootOptions.sort) { \n\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\tlet selField = selectedFields.find(a => a.id === sortField);\n\t\n\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\tconst sortPath = (selField && typeof selField.fieldPath === 'string') ? selField.fieldPath.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\t\t\tif (sortPath) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[sortPath] = rootOptions.sort[sortField];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (groupsRow.length && date_field && date_interval) {\n\t\t\t\t\t\t\t\tconst dateFieldPath = (typeof date_field === 'string') ? date_field.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\tif (dateFieldPath) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['second'] = {'$second' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': process.env.TZ_CLIENT || 'America/Chicago'}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\t\t\tif (!rowField || !row?.id) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + rowField.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$push': {$ifNull: ['$' + fieldPath.replace(/\\.\\$/g, ''), null]}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$push': {$ifNull: ['$' + cust.selFieldId, null]}};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Totals\n\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {['$' + total.type] : '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$group: queryGroup});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//Projection\n\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t_id: 1\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = '$' + cust.selFieldId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Totals\n\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$project: queryProjection});\n\t\t\t\t\t}\n\n\t\t\t\t\t// SORT\n\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\tappendSafeSort(query, rootOptions.sort, selectedFields, customFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.id] = '$' + field.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.selFieldId] = '$' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + selField.id] = '$' + totField.id + '_' + selField.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + field.selFieldId] = '$' + totField.id + '_' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + field.selFieldId] = {['$' + totField.type]: '$' + totField.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (sortKeys.includes('_id.gr_' + (groupIndex + 1))) {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsortKeys.filter(a => !a.startsWith('_id.gr_')).forEach(key => {\n\t\t\t\t\t\t\t\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tappendSafeSort(query, sort, selectedFields, customFields);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\t\t\tconsole.log('_____________ query __________'); console.log(JSON.stringify(query, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tlet res = null;\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = round(res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomFields.forEach(custField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = round(res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn tmpRes;\n\t\t\t\t}\n\t\t\t},\n\t\t\tworkerTaskWeight: 2\n\t\t}\n\t});\n}\n\nfunction buildCollectionTree(collectionName: string, lookupNode?: any) {\n\tlet lookupSchemaData = getReportLookupSchemas(collectionName).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\tlet lookupSchemaTree = lookupSchemaData.find(a => a.is_root === true)?.tree || {};\n\n\tlet treeItems = buildTree(collectionName, lookupSchemaTree, lookupNode);\n\n\tattachLookupChildren(treeItems, lookupSchemaData, lookupSchemaTree);\n\n\treturn {isLeaf: false, children: treeItems};\n}\n\nfunction attachLookupChildren(treeItems: any[], lookupSchemaData: any[], lookupSchemaTree: any) {\n\tObject.keys(lookupSchemaTree || {}).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\tlet field = findFieldByPath(treeItems, lookup);\n\n\t\tif (field) {\n\t\t\tlet lookupTree = lookupSchemaData.find(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection);\n\n\t\t\tif (lookupTree) {\n\t\t\t\tlet childTree = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupTree.tree, field);\n\t\t\t\tattachLookupChildren(childTree, lookupSchemaData, lookupTree.tree);\n\t\t\t\tfield.children = childTree;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction findFieldByPath(treeItems: any[], lookupPath: string) {\n\tlet fieldPath = lookupPath.split('.');\n\tlet field = null;\n\n\tfieldPath.forEach(path => {\n\t\tif (!field) {\n\t\t\tfield = treeItems.find(a => a.fieldName === path);\n\t\t}\n\t\telse if (field.children) {\n\t\t\tfield = field.children.find(a => a.fieldName === path);\n\t\t}\n\t});\n\n\treturn field;\n}\n\nfunction buildJoinLookupNode(collection_root: string, join: ReportBuilderCollectionJoin, alias: string) {\n\treturn {\n\t\tcollection_name: collection_root,\n\t\tcolumnName: alias,\n\t\tfieldName: alias,\n\t\tfieldType: 'Lookup',\n\t\tfieldTypeName: 'Lookup',\n\t\tdistinctFieldValues: [],\n\t\tfieldPath: alias,\n\t\tfieldPathName: alias,\n\t\tpath: alias,\n\t\tlookup_collection: join.collection,\n\t\tlookup_local_key: join.local_key,\n\t\tlookup_foreign_key: join.foreign_key,\n\t\tlookup_as: alias,\n\t\ttext: alias,\n\t\tvalue: alias,\n\t\tisLeaf: false,\n\t\tisActive: false,\n\t\tisSelected: false,\n\t\tis_join: false,\n\t\tdepth: 0,\n\t\tleafValueType: '',\n\t\tleafFormatType: '',\n\t\tchildren: []\n\t};\n}\n\nfunction buildJoinAlias(join: ReportBuilderCollectionJoin, joinIndex: number) {\n\tif (join.alias && join.alias.trim()) {\n\t\treturn join.alias.trim();\n\t}\n\n\tlet joinName = toTitleCase(join.collection.replace(/\\_/g, ' ').replace(/-/g, ' '));\n\tlet joinPath = toTitleCase(join.local_key.replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ').replace(/\\_/g, ' '));\n\n\treturn `${joinName} (${joinPath || 'Join'}) (Lookup ${joinIndex + 1})`;\n}\n\nfunction appendSafeSort(query: any[], sortSpec: any, selectedFields: any[] = [], customFields: any[] = []) {\n\tif (!sortSpec || !Object.keys(sortSpec).length) {\n\t\treturn;\n\t}\n\n\tconst safeAddFields = {};\n\tconst safeSort = {};\n\n\tObject.keys(sortSpec).forEach(key => {\n\t\tif (key.startsWith('_id.')) {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t\treturn;\n\t\t}\n\n\t\tif (isArrayLikeField(key, selectedFields, customFields)) {\n\t\t\tconst safeKey = 'sort_' + key.replace(/\\./g, '_');\n\t\t\tsafeAddFields[safeKey] = {\n\t\t\t\t$cond: [\n\t\t\t\t\t{$isArray: '$' + key},\n\t\t\t\t\t{$size: {$ifNull: ['$' + key, []]}},\n\t\t\t\t\t'$' + key\n\t\t\t\t]\n\t\t\t};\n\t\t\tsafeSort[safeKey] = sortSpec[key];\n\t\t}\n\t\telse {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t}\n\t});\n\n\tif (Object.keys(safeAddFields).length) {\n\t\tquery.push({$addFields: safeAddFields});\n\t}\n\n\tif (Object.keys(safeSort).length) {\n\t\tquery.push({$sort: safeSort});\n\t}\n}\n\nfunction isArrayLikeField(sortKey: string, selectedFields: any[] = [], customFields: any[] = []) {\n\tconst field = selectedFields.find(a => a.id === sortKey);\n\tconst custom = customFields.find(a => a.selFieldId === sortKey);\n\n\tconst leafValueType = field ? field.leafValueType : (custom ? custom.leafValueType : '');\n\n\treturn leafValueType !== 'Average' &&\n\t\tleafValueType !== 'Sum' &&\n\t\tleafValueType !== 'Count' &&\n\t\tleafValueType !== 'Minimum' &&\n\t\tleafValueType !== 'Maximum' &&\n\t\tleafValueType !== 'First' &&\n\t\tleafValueType !== 'Last' &&\n\t\tleafValueType !== 'Unique';\n}\n\nfunction collectLookupAliases(selectedFields: any[] = [], filterArrayFields: any[] = [], groupsRow: any[] = []) {\n\tconst aliases = new Set<string>();\n\n\tconst addAlias = (alias: string) => {\n\t\tconst normalized = normalizeLookupAlias(alias);\n\t\tif (normalized) {\n\t\t\taliases.add(normalized);\n\t\t}\n\t};\n\n\t(selectedFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(filterArrayFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(groupsRow || []).forEach(group => {\n\t\tif (group?.treeItem && (group.treeItem.lookup_collection || (group.treeItem.fieldPath && group.treeItem.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(group.treeItem.lookup_as || extractLookupAlias(group.treeItem.fieldPath));\n\t\t}\n\t});\n\n\treturn aliases;\n}\n\nfunction splitFiltersByLookup(filters: any[] = [], lookupAliases: Set<string> = new Set()) {\n\tconst rootFilters = [];\n\tconst lookupFilters = [];\n\n\t(filters || []).forEach(filter => {\n\t\tconst summary = summarizeFilterTargets(filter, lookupAliases);\n\n\t\tif (summary.hasLookup) {\n\t\t\t// If the filter mixes root + lookup, keep it together in lookupFilters so it stays a single $match/$or\n\t\t\tlookupFilters.push(filter);\n\t\t}\n\t\telse {\n\t\t\trootFilters.push(filter);\n\t\t}\n\t});\n\n\treturn {rootFilters, lookupFilters};\n}\n\nfunction summarizeFilterTargets(filter: any, lookupAliases: Set<string>) {\n\tconst result = {hasLookup: false, hasRoot: false};\n\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn result;\n\t}\n\n\tObject.keys(filter).forEach(key => {\n\t\tif (key === '$or' || key === '$and') {\n\t\t\tconst branch = filter[key];\n\t\t\tif (Array.isArray(branch)) {\n\t\t\t\tbranch.forEach(child => {\n\t\t\t\t\tconst childSummary = summarizeFilterTargets(child, lookupAliases);\n\t\t\t\t\tresult.hasLookup = result.hasLookup || childSummary.hasLookup;\n\t\t\t\t\tresult.hasRoot = result.hasRoot || childSummary.hasRoot;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst isLookup = isLookupPath(key, lookupAliases);\n\t\t\tif (isLookup) {\n\t\t\t\tresult.hasLookup = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult.hasRoot = true;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction isLookupPath(path: string, lookupAliases: Set<string>) {\n\tif (!path) {\n\t\treturn false;\n\t}\n\n\tconst normalizedPath = path.replace(/\\.\\$/g, '');\n\n\tif (normalizedPath.includes('(Lookup')) {\n\t\treturn true;\n\t}\n\n\tconst rootKey = normalizedPath.split('.')[0];\n\treturn lookupAliases.has(rootKey);\n}\n\nfunction extractLookupAlias(path: string) {\n\tif (!path || !path.includes('(Lookup')) {\n\t\treturn '';\n\t}\n\n\treturn path.replace(/\\.\\$/g, '').split('.')[0];\n}\n\nfunction normalizeLookupAlias(alias: string) {\n\treturn (alias || '').replace(/\\.\\$/g, '').trim();\n}\n\nfunction collectRootDatePaths(collectionName: string) {\n\tconst out = new Set<string>();\n\tconst collection = ResolveIOServer.getMongoManager().collection(collectionName);\n\tconst schema = collection?.rbSchema || {};\n\n\tObject.keys(schema).forEach(path => {\n\t\tif (schema[path]?.rbType === 'Date') {\n\t\t\tout.add(path.replace(/\\.\\$/g, ''));\n\t\t}\n\t});\n\n\treturn out;\n}\n\nfunction coerceDateFilters(filters: any[] = [], datePaths: Set<string>) {\n\tconst coerceDateValue = (value: any): any => {\n\t\tif (value instanceof Date) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(coerceDateValue);\n\t\t}\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\tconst parsed = new Date(value);\n\t\t\tif (!isNaN(parsed.getTime())) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t};\n\n\tconst coerceFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tobj.forEach(coerceFilterObject);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tobj.$or = obj.$or.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tobj.$and = obj.$and.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tif (key.startsWith('$')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst normalizedKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (!datePaths.has(normalizedKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = obj[key];\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n\t\t\t\tObject.keys(value).forEach(op => {\n\t\t\t\t\tif (op.startsWith('$')) {\n\t\t\t\t\t\tvalue[op] = coerceDateValue(value[op]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tobj[key] = coerceDateValue(value);\n\t\t\t}\n\t\t});\n\n\t\treturn obj;\n\t};\n\n\t(filters || []).forEach(coerceFilterObject);\n}\n\n// Helpers to support union-based joins (collection_joins without local/foreign key)\nfunction stripAliasFromPath(path: string, alias: string) {\n\tif (!path) {\n\t\treturn path;\n\t}\n\n\tconst cleanAlias = alias.replace(/\\.\\$/g, '');\n\tconst cleanPath = path.replace(/\\.\\$/g, '');\n\n\tif (cleanPath.startsWith(cleanAlias + '.')) {\n\t\treturn cleanPath.substring(cleanAlias.length + 1);\n\t}\n\n\treturn cleanPath;\n}\n\nfunction buildCollectionPipeline(collectionName: string, alias: string, selectedFields: any[] = [], filters: any[] = [], filterArrays: any[] = [], isRoot = false) {\n\tconst pipeline: any[] = [];\n\tconst matchClauses: any[] = [];\n\tconst matchArrayClauses: any[] = [];\n\n\tconst targetAlias = isRoot ? '' : alias.replace(/\\.\\$/g, '');\n\n\tconst mapFilterForCollection = (filterObj: any, toArray: boolean) => {\n\t\tif (!filterObj || typeof filterObj !== 'object') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mapped = mapFilterPaths(filterObj, targetAlias, isRoot);\n\t\tif (mapped) {\n\t\t\t(toArray ? matchArrayClauses : matchClauses).push(mapped);\n\t\t}\n\t};\n\n\t(filters || []).forEach(f => mapFilterForCollection(f, false));\n\t(filterArrays || []).forEach(f => mapFilterForCollection(f, true));\n\n\tif (matchClauses.length || matchArrayClauses.length) {\n\t\tconst match: any = {$and: [...matchClauses, ...matchArrayClauses]};\n\t\tpipeline.push({$match: match});\n\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tconsole.info('RB debug: collection pipeline match', {\n\t\t\t\tcollection: collectionName,\n\t\t\t\talias: targetAlias || collectionName,\n\t\t\t\tmatchJson: JSON.stringify(match, null, 2)\n\t\t\t});\n\t\t}\n\t}\n\n\t// Projection mapping selected fields for this collection\n\tconst projection: any = {_id: 1, __rb_collection: targetAlias || collectionName};\n\t(selectedFields || [])\n\t\t.filter(f => isFieldForCollection(f, collectionName, targetAlias))\n\t\t.forEach(f => {\n\t\t\tconst mappedPath = stripAliasFromPath(f.fieldPath || '', targetAlias || f.lookup_as || '');\n\t\t\tif (f.leafValueType === 'Average') {\n\t\t\t\tprojection[f.id] = {$avg: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Sum') {\n\t\t\t\tprojection[f.id] = {$sum: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Count') {\n\t\t\t\tprojection[f.id] = {$sum: 1};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Minimum') {\n\t\t\t\tprojection[f.id] = {$min: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Maximum') {\n\t\t\t\tprojection[f.id] = {$max: '$' + mappedPath};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprojection[f.id] = '$' + mappedPath;\n\t\t\t}\n\t\t});\n\n\tpipeline.push({$project: projection});\n\n\treturn pipeline;\n}\n\nfunction isFieldForCollection(field: any, collectionName: string, alias: string) {\n\tif (!field) {\n\t\treturn false;\n\t}\n\n\t// Root collection check\n\tif (!alias) {\n\t\treturn field.collection_name === collectionName && (!field.lookup_collection || field.lookup_collection === '');\n\t}\n\n\t// Joined collection check\n\treturn field.lookup_collection === collectionName || (field.lookup_as && field.lookup_as.replace(/\\.\\$/g, '') === alias);\n}\n\nfunction mapFilterPaths(filter: any, alias: string, isRoot: boolean) {\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\treturn filter.map(f => mapFilterPaths(f, alias, isRoot));\n\t}\n\n\tif (filter.$or) {\n\t\tconst mapped = filter.$or.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$or: mapped} : null;\n\t}\n\n\tif (filter.$and) {\n\t\tconst mapped = filter.$and.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$and: mapped} : null;\n\t}\n\n\tconst out: any = {};\n\tObject.keys(filter).forEach(key => {\n\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\n\t\tif (!alias) {\n\t\t\t// root collection: ignore keys that start with a lookup alias\n\t\t\tif (cleanKey.includes('(Lookup')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (lookupAliasMatches(cleanKey, alias)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tout[cleanKey] = filter[key];\n\t\t}\n\t\telse {\n\t\t\tif (cleanKey.startsWith(alias + '.')) {\n\t\t\t\tout[cleanKey.substring(alias.length + 1)] = filter[key];\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Object.keys(out).length ? out : null;\n}\n\nfunction lookupAliasMatches(path: string, alias: string) {\n\tif (!path || !alias) {\n\t\treturn false;\n\t}\n\treturn path.startsWith(alias + '.') || path === alias;\n}\n\nfunction buildLayoutSortSpec(sortSpec: any = {}, selectedFields: any[] = []) {\n\tconst outSort: any = {...sortSpec};\n\tconst addFields: any = {};\n\n\tObject.keys(sortSpec || {}).forEach(key => {\n\t\tif (!key.startsWith('layout_col_')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalized = key.replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (isNaN(idx)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst layoutFields = (selectedFields || []).filter(f => typeof f?.layoutColumnIndex !== 'undefined' && f.layoutColumnIndex === idx).map(f => f.id).filter(Boolean);\n\n\t\tif (!layoutFields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build nested $ifNull chain to coalesce across layout column targets\n\t\tlet coalesce: any = '';\n\t\tfor (let i = layoutFields.length - 1; i >= 0; i--) {\n\t\t\tconst fieldPath = '$' + layoutFields[i];\n\t\t\tif (i === layoutFields.length - 1) {\n\t\t\t\tcoalesce = fieldPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcoalesce = {$ifNull: [fieldPath, coalesce]};\n\t\t\t}\n\t\t}\n\n\t\tconst sortKey = 'sort_' + key;\n\t\taddFields[sortKey] = coalesce;\n\n\t\tdelete outSort[key];\n\t\toutSort[sortKey] = sortSpec[key];\n\t});\n\n\treturn {sortSpec: outSort, addFields};\n}\n\nfunction remapFiltersToIds(filters: any[] = [], selectedFields: any[] = []) {\n\tconst byPath = new Map<string, string>();\n\tconst layoutMap = new Map<number, string[]>();\n\t(selectedFields || []).forEach(f => {\n\t\tif (f?.fieldPath && f?.id) {\n\t\t\tbyPath.set(f.fieldPath.replace(/\\.\\$/g, ''), f.id);\n\t\t}\n\n\t\tif (typeof f?.layoutColumnIndex !== 'undefined') {\n\t\t\tconst arr = layoutMap.get(f.layoutColumnIndex) || [];\n\t\t\tarr.push(f.id);\n\t\t\tlayoutMap.set(f.layoutColumnIndex, arr);\n\t\t}\n\t});\n\n\tconst remapObj = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(remapObj);\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tconst mapped = obj.$or.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$or: mapped} : null;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tconst mapped = obj.$and.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$and: mapped} : null;\n\t\t}\n\n\t\tconst out: any = {};\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (cleanKey.startsWith('layout_col_')) {\n\t\t\t\t// map to all field ids in that layout column index\n\t\t\t\tconst normalized = cleanKey.replace(/^layout_col_/, '');\n\t\t\t\tconst parts = normalized.split('_');\n\t\t\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\t\t\t\tconst targets = layoutMap.get(idx) || [];\n\n\t\t\t\tif (targets.length) {\n\t\t\t\t\tconst mappedVal = remapObj(obj[key]);\n\t\t\t\t\tout.$or = targets.map(id => ({[id]: mappedVal}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst mappedKey = byPath.get(cleanKey) || cleanKey;\n\t\t\tout[mappedKey] = remapObj(obj[key]);\n\t\t});\n\n\t\treturn Object.keys(out).length ? out : null;\n\t};\n\n\treturn (filters || []).map(remapObj).filter(Boolean);\n}\n\nfunction expandLayoutColumnFilters(filters: any[] = [], selectedFields: any[] = []) {\n\tconst layoutCache: {[key: string]: string[]} = {};\n\n\tconst resolveLayoutPaths = (layoutKey: string) => {\n\t\tif (layoutCache[layoutKey]) {\n\t\t\treturn layoutCache[layoutKey];\n\t\t}\n\n\t\tlet paths: string[] = [];\n\t\tconst normalized = (layoutKey || '').replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (!isNaN(idx)) {\n\t\t\tpaths = (selectedFields || [])\n\t\t\t\t.filter(f => f && (f.layoutColumnIndex === idx || (f.id || '').includes(`f_layout_${idx}_`)))\n\t\t\t\t.map(f => f.fieldPath ? f.fieldPath.replace(/\\.\\$/g, '') : '')\n\t\t\t\t.filter(p => !!p);\n\t\t}\n\n\t\tlayoutCache[layoutKey] = paths;\n\t\treturn paths;\n\t};\n\n\tconst expandFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\treturn {$or: obj.$or.map(expandFilterObject)};\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\treturn {$and: obj.$and.map(expandFilterObject)};\n\t\t}\n\n\t\tlet expanded: any = {};\n\t\tlet replaced = false;\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst val = obj[key];\n\n\t\t\tif (key.startsWith('layout_col_')) {\n\t\t\t\tconst paths = resolveLayoutPaths(key);\n\n\t\t\t\tif (paths.length) {\n\t\t\t\t\treplaced = true;\n\t\t\t\t\texpanded.$or = paths.map(path => ({[path]: val}));\n\t\t\t\t\t// Use console to trace layout filter expansion without requiring a logger on ResolveIOServer\n\t\t\t\t\tconsole.info('RB layout filter expansion', {layoutKey: key, paths});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn('RB layout filter expansion failed', {layoutKey: key, selectedFields});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\texpanded[key] = val;\n\t\t\t}\n\t\t});\n\n\t\treturn replaced ? expanded : obj;\n\t};\n\n\treturn (filters || []).map(expandFilterObject);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.12.59",
3
+ "version": "20.12.61",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",