@resolveio/server-lib 9.6.6 → 9.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Db, MongoClient } from 'mongodb';
|
|
2
1
|
import { MongoManager } from './managers/mongo.manager';
|
|
3
2
|
import ResolveIOMainServer from './server-app';
|
|
4
3
|
export declare class ResolveIOServer {
|
|
@@ -17,8 +16,8 @@ export declare class ResolveIOServer {
|
|
|
17
16
|
static connectAndRun(): Promise<unknown>;
|
|
18
17
|
static getClientName(): string;
|
|
19
18
|
static getMainServer(): ResolveIOMainServer;
|
|
20
|
-
static getMongoConnection():
|
|
21
|
-
static getMainDB():
|
|
19
|
+
static getMongoConnection(): any;
|
|
20
|
+
static getMainDB(): any;
|
|
22
21
|
static getMongoManager(): MongoManager;
|
|
23
22
|
}
|
|
24
23
|
export * from './public_api';
|
|
@@ -47,14 +47,14 @@ export declare class Collection<T> {
|
|
|
47
47
|
constructor(collectionName: string, schema: object, useReportBuilder: any, reportBuilderLookupTables: LookupTables[], timestamps: any, createLogs: any, checkSchema: any);
|
|
48
48
|
aggregate(pipeline: object[], options?: CollectionAggregationOptions, allowLogs?: boolean): Promise<any[]>;
|
|
49
49
|
aggregateCount(pipeline: object[], options?: CollectionAggregationOptions): Promise<number>;
|
|
50
|
-
aggregateCursor(pipeline: object[], options?: CollectionAggregationOptions):
|
|
51
|
-
aggregateStream(pipeline: object[], options?: CollectionAggregationOptions):
|
|
52
|
-
countDocuments(filter?: FilterQuery<T>, options?: MongoCountPreferences):
|
|
50
|
+
aggregateCursor(pipeline: object[], options?: CollectionAggregationOptions): any;
|
|
51
|
+
aggregateStream(pipeline: object[], options?: CollectionAggregationOptions): any;
|
|
52
|
+
countDocuments(filter?: FilterQuery<T>, options?: MongoCountPreferences): any;
|
|
53
53
|
create(f_docs: T | T[], options?: CollectionInsertManyOptions): Promise<T | T[]>;
|
|
54
|
-
createIndex(fieldOrSpec: any, options?: IndexOptions):
|
|
54
|
+
createIndex(fieldOrSpec: any, options?: IndexOptions): any;
|
|
55
55
|
createIndexes(indexSpecs: IndexSpecification[], options?: {
|
|
56
56
|
session?: ClientSession;
|
|
57
|
-
}):
|
|
57
|
+
}): any;
|
|
58
58
|
deleteMany(filter?: FilterQuery<T>, options?: CommonOptions, bypassLogs?: boolean): Promise<unknown>;
|
|
59
59
|
deleteOne(filter?: FilterQuery<T>, options?: CommonOptions & {
|
|
60
60
|
bypassDocumentValidation?: boolean;
|
|
@@ -62,56 +62,56 @@ export declare class Collection<T> {
|
|
|
62
62
|
distinct(key: string, filter?: FilterQuery<T>, options?: MongoDistinctPreferences): Promise<T[]>;
|
|
63
63
|
drop(options?: {
|
|
64
64
|
session: ClientSession;
|
|
65
|
-
}):
|
|
65
|
+
}): any;
|
|
66
66
|
dropIndex(indexName: string, options?: CommonOptions & {
|
|
67
67
|
maxTimeMS?: number;
|
|
68
|
-
}):
|
|
68
|
+
}): any;
|
|
69
69
|
dropIndexes(options?: {
|
|
70
70
|
session?: ClientSession;
|
|
71
71
|
maxTimeMS?: number;
|
|
72
|
-
}):
|
|
72
|
+
}): any;
|
|
73
73
|
find(filter?: FilterQuery<T>, options?: FindOneOptions<T>, bypassLogs?: boolean): Promise<T[]>;
|
|
74
74
|
findById(id: string, options?: FindOneOptions<T>): Promise<T>;
|
|
75
|
-
findCount(filter?: FilterQuery<T>, options?: FindOneOptions<T>, bypassLogs?: boolean):
|
|
76
|
-
findCursor(filter?: FilterQuery<T>, options?: FindOneOptions<T>):
|
|
77
|
-
findStream(filter?: FilterQuery<T>, options?: FindOneOptions<T>, streamOptions?: any):
|
|
75
|
+
findCount(filter?: FilterQuery<T>, options?: FindOneOptions<T>, bypassLogs?: boolean): any;
|
|
76
|
+
findCursor(filter?: FilterQuery<T>, options?: FindOneOptions<T>): any;
|
|
77
|
+
findStream(filter?: FilterQuery<T>, options?: FindOneOptions<T>, streamOptions?: any): any;
|
|
78
78
|
findOne(filter?: FilterQuery<T>, options?: FindOneOptions<T>, bypassLogs?: boolean): Promise<T>;
|
|
79
79
|
findOneAndDelete(filter?: FilterQuery<T>, options?: FindOneAndDeleteOption<T>, bypassLogs?: boolean): Promise<T>;
|
|
80
80
|
findOneAndReplace(filter: FilterQuery<T>, replacement: T, options?: FindOneAndReplaceOption<T>, bypassLogs?: boolean, bypassCheckSchema?: boolean): Promise<T>;
|
|
81
81
|
findOneAndUpdate(filter: FilterQuery<T>, update: any, options?: FindOneAndUpdateOption<T>, bypassLogs?: boolean, bypassCheckSchema?: boolean): Promise<T>;
|
|
82
82
|
indexes(options?: {
|
|
83
83
|
session: ClientSession;
|
|
84
|
-
}):
|
|
84
|
+
}): any;
|
|
85
85
|
indexExists(indexes: string | string[], options?: {
|
|
86
86
|
session: ClientSession;
|
|
87
|
-
}):
|
|
87
|
+
}): any;
|
|
88
88
|
insertMany(docs: T[], options?: CollectionInsertManyOptions, bypassLogs?: boolean, bypassCheckSchema?: boolean): Promise<T[]>;
|
|
89
89
|
insertOne(doc: T, options?: CollectionInsertOneOptions, bypassLogs?: boolean, bypassCheckSchema?: boolean): Promise<T>;
|
|
90
90
|
listIndexes(options?: {
|
|
91
91
|
batchSize?: number;
|
|
92
92
|
readPreference?: ReadPreferenceOrMode;
|
|
93
93
|
session?: ClientSession;
|
|
94
|
-
}):
|
|
94
|
+
}): any;
|
|
95
95
|
reIndex(options?: {
|
|
96
96
|
session: ClientSession;
|
|
97
|
-
}):
|
|
97
|
+
}): any;
|
|
98
98
|
rename(newName: string, options?: {
|
|
99
99
|
dropTarget?: boolean;
|
|
100
100
|
session?: ClientSession;
|
|
101
|
-
}):
|
|
101
|
+
}): any;
|
|
102
102
|
replaceOne(filter: FilterQuery<T>, replacement: T, options?: ReplaceOneOptions, bypassLogs?: boolean, bypassCheckSchema?: boolean, doc?: T): Promise<number>;
|
|
103
103
|
stats(options?: {
|
|
104
104
|
scale: number;
|
|
105
105
|
session?: ClientSession;
|
|
106
|
-
}):
|
|
106
|
+
}): any;
|
|
107
107
|
updateMany(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateManyOptions, bypassLogs?: boolean, bypassCheckSchema?: boolean, bypassVersions?: boolean): Promise<number>;
|
|
108
108
|
updateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOneOptions, bypassLogs?: boolean, bypassCheckSchema?: boolean): Promise<number>;
|
|
109
109
|
watchCollection(pipeline?: any[], options?: ChangeStreamOptions & {
|
|
110
110
|
session?: ClientSession;
|
|
111
|
-
}):
|
|
111
|
+
}): any;
|
|
112
112
|
watchCollectionWithAggregate(pipeline?: any[], options?: ChangeStreamOptions & {
|
|
113
113
|
session?: ClientSession;
|
|
114
|
-
}):
|
|
114
|
+
}): any;
|
|
115
115
|
}
|
|
116
116
|
export declare class UserCollection<T> extends Collection<T> {
|
|
117
117
|
authenticateStrategy(): (username: any, password: any, cb: any) => Promise<void>;
|
|
@@ -126,5 +126,5 @@ export declare class UserCollection<T> extends Collection<T> {
|
|
|
126
126
|
register(user: any, password: any): Promise<unknown>;
|
|
127
127
|
resetAttempts(user: UserModel): Promise<number>;
|
|
128
128
|
}
|
|
129
|
-
export declare function objectIdHexString():
|
|
129
|
+
export declare function objectIdHexString(): any;
|
|
130
130
|
export {};
|
|
@@ -125,6 +125,13 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
125
125
|
user_guides_1.loadUserGuidePublications(this);
|
|
126
126
|
report_builder_dashboard_builders_1.loadReportBuilderDashboardBuilderPublications(this);
|
|
127
127
|
this.tailOpLog();
|
|
128
|
+
// DEBUG
|
|
129
|
+
// setInterval(() => {
|
|
130
|
+
// console.log('Active Subs:');
|
|
131
|
+
// this._subscriptions.forEach(sub => {
|
|
132
|
+
// console.log(sub.publication, sub.cacheId, sub.cacheValid, sub.collections, JSON.stringify(sub.subscriptionData, null, 2), JSON.stringify(sub.clients, null, 2));
|
|
133
|
+
// })
|
|
134
|
+
// }, 10000);
|
|
128
135
|
setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
129
136
|
var _loop_1, this_1, i, queueArr, i, mongoQueue, j, client, ws;
|
|
130
137
|
var _this = this;
|
|
@@ -571,70 +578,73 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
571
578
|
this._oplog = index_1.ResolveIOServer.getMainDB().watch();
|
|
572
579
|
this._oplog.on('change', function (doc) {
|
|
573
580
|
// let startDate = new Date();
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
581
|
+
if (doc.ns) {
|
|
582
|
+
var collection = doc.ns.coll;
|
|
583
|
+
// console.log(new Date(), 'Op log doc', doc.operationType, collection);
|
|
584
|
+
if (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {
|
|
585
|
+
if (doc.operationType === 'insert') {
|
|
586
|
+
if (collection === 'cron-jobs') {
|
|
587
|
+
_this._mainServer.getCronManager().checkCronJobsForUpdates();
|
|
588
|
+
}
|
|
589
|
+
else if (collection === 'support-tickets') {
|
|
590
|
+
if (_this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {
|
|
591
|
+
_this._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.documentKey._id);
|
|
592
|
+
_this.invalidatePubsCache(collection, 'insert');
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
if (collection !== 'method-responses' && collection !== 'method-calls') {
|
|
583
596
|
_this.invalidatePubsCache(collection, 'insert');
|
|
584
597
|
}
|
|
598
|
+
// let endDate = new Date();
|
|
599
|
+
// this.currentPerfomanceMonitor.push({
|
|
600
|
+
// _id: this.idPerformance++,
|
|
601
|
+
// function: 'oplog',
|
|
602
|
+
// publication: collection,
|
|
603
|
+
// subscriptionData: [doc.documentKey._id],
|
|
604
|
+
// date_start: startDate,
|
|
605
|
+
// date_end: endDate,
|
|
606
|
+
// duration: moment(endDate).diff(moment(startDate), 'milliseconds', false),
|
|
607
|
+
// result: 'Insert'
|
|
608
|
+
// });
|
|
585
609
|
}
|
|
586
|
-
if (
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
}
|
|
605
|
-
if (collection !== 'method-responses' && collection !== 'method-calls') {
|
|
606
|
-
_this.invalidatePubsCache(collection, 'update');
|
|
607
|
-
}
|
|
608
|
-
// let endDate = new Date();
|
|
609
|
-
// this.currentPerfomanceMonitor.push({
|
|
610
|
-
// _id: this.idPerformance++,
|
|
611
|
-
// function: 'oplog',
|
|
612
|
-
// publication: collection,
|
|
613
|
-
// subscriptionData: [doc.documentKey._id],
|
|
614
|
-
// date_start: startDate,
|
|
615
|
-
// date_end: endDate,
|
|
616
|
-
// duration: moment(endDate).diff(moment(startDate), 'milliseconds', false),
|
|
617
|
-
// result: 'Update'
|
|
618
|
-
// });
|
|
619
|
-
}
|
|
620
|
-
else if (doc.operationType === 'delete') {
|
|
621
|
-
if (collection === 'cron-jobs') {
|
|
622
|
-
_this._mainServer.getCronManager().checkCronJobsForUpdates();
|
|
610
|
+
else if (doc.operationType === 'update' || doc.operationType === 'replace') {
|
|
611
|
+
if (collection === 'cron-jobs') {
|
|
612
|
+
_this._mainServer.getCronManager().checkCronJobsForUpdates();
|
|
613
|
+
}
|
|
614
|
+
if (collection !== 'method-responses' && collection !== 'method-calls') {
|
|
615
|
+
_this.invalidatePubsCache(collection, 'update');
|
|
616
|
+
}
|
|
617
|
+
// let endDate = new Date();
|
|
618
|
+
// this.currentPerfomanceMonitor.push({
|
|
619
|
+
// _id: this.idPerformance++,
|
|
620
|
+
// function: 'oplog',
|
|
621
|
+
// publication: collection,
|
|
622
|
+
// subscriptionData: [doc.documentKey._id],
|
|
623
|
+
// date_start: startDate,
|
|
624
|
+
// date_end: endDate,
|
|
625
|
+
// duration: moment(endDate).diff(moment(startDate), 'milliseconds', false),
|
|
626
|
+
// result: 'Update'
|
|
627
|
+
// });
|
|
623
628
|
}
|
|
624
|
-
if (
|
|
625
|
-
|
|
629
|
+
else if (doc.operationType === 'delete') {
|
|
630
|
+
if (collection === 'cron-jobs') {
|
|
631
|
+
_this._mainServer.getCronManager().checkCronJobsForUpdates();
|
|
632
|
+
}
|
|
633
|
+
if (collection !== 'method-responses' && collection !== 'method-calls') {
|
|
634
|
+
_this.invalidatePubsCache(collection, 'delete');
|
|
635
|
+
}
|
|
636
|
+
// let endDate = new Date();
|
|
637
|
+
// this.currentPerfomanceMonitor.push({
|
|
638
|
+
// _id: this.idPerformance++,
|
|
639
|
+
// function: 'oplog',
|
|
640
|
+
// publication: collection,
|
|
641
|
+
// subscriptionData: [doc.documentKey._id],
|
|
642
|
+
// date_start: startDate,
|
|
643
|
+
// date_end: endDate,
|
|
644
|
+
// duration: moment(endDate).diff(moment(startDate), 'milliseconds', false),
|
|
645
|
+
// result: 'Delete'
|
|
646
|
+
// });
|
|
626
647
|
}
|
|
627
|
-
// let endDate = new Date();
|
|
628
|
-
// this.currentPerfomanceMonitor.push({
|
|
629
|
-
// _id: this.idPerformance++,
|
|
630
|
-
// function: 'oplog',
|
|
631
|
-
// publication: collection,
|
|
632
|
-
// subscriptionData: [doc.documentKey._id],
|
|
633
|
-
// date_start: startDate,
|
|
634
|
-
// date_end: endDate,
|
|
635
|
-
// duration: moment(endDate).diff(moment(startDate), 'milliseconds', false),
|
|
636
|
-
// result: 'Delete'
|
|
637
|
-
// });
|
|
638
648
|
}
|
|
639
649
|
}
|
|
640
650
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodCallsPublications } from '../publications/method-calls';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error('THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error('THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodCallsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\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\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\tif (queueArr.length) {\n\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\tentry.running = true;\n\t\t\t\t});\n\n\t\t\t\t// let startDate = new Date();\n\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.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\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t// \tpublication: '',\n\t\t\t\t// \tsubscriptionData: queueArr,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Done'\n\t\t\t\t// });\n\t\t\t}\n\t\t}, 10);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 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});\n\n\t\t\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 60000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// \t\tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tprivate invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tsub.cacheValid = false;\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).then(res => {\n\t\t\tif (!res) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}, () => {\n\t\t\tthis.unsubscribeAll(ws);\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error('No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error('No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error('Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tcacheValid: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheValid) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.insertOne(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('supportCreateBillingUser', {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// \tsubscriptionData: subscriptionData,\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [ws['id_socket']],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate tailOpLog() {\n\t\tthis._oplog = ResolveIOServer.getMainDB().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tlet collection = doc.ns.coll;\n\n\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Delete'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId && subscription.cacheValid) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (subscription.cacheId && this._nodeCache.get(subscription.cacheId) === JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same cache dont send'\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\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > 100000000) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\t\t\t\t\t\tbreak;\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\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\t\t\tdata: err\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\tthis.sendWS(ws, serverRes);\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\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodCallsPublications } from '../publications/method-calls';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error('THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error('THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodCallsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\t// DEBUG\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Active Subs:');\n\t\t// \tthis._subscriptions.forEach(sub => {\n\t\t// \t\tconsole.log(sub.publication, sub.cacheId, sub.cacheValid, sub.collections, JSON.stringify(sub.subscriptionData, null, 2), JSON.stringify(sub.clients, null, 2));\n\t\t// \t})\n\t\t// }, 10000);\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\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\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\tif (queueArr.length) {\n\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\tentry.running = true;\n\t\t\t\t});\n\n\t\t\t\t// let startDate = new Date();\n\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.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\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t// \tpublication: '',\n\t\t\t\t// \tsubscriptionData: queueArr,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Done'\n\t\t\t\t// });\n\t\t\t}\n\t\t}, 10);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 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});\n\n\t\t\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 60000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// \t\tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tprivate invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tsub.cacheValid = false;\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).then(res => {\n\t\t\tif (!res) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}, () => {\n\t\t\tthis.unsubscribeAll(ws);\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error('No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error('No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error('Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tcacheValid: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheValid) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.insertOne(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('supportCreateBillingUser', {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// \tsubscriptionData: subscriptionData,\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [ws['id_socket']],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate tailOpLog() {\n\t\tthis._oplog = ResolveIOServer.getMainDB().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (doc.ns) {\n\t\t\t\tlet collection = doc.ns.coll;\n\t\t\t\t// console.log(new Date(), 'Op log doc', doc.operationType, collection);\n\n\t\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses' && collection !== 'method-calls') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Delete'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId && subscription.cacheValid) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (subscription.cacheId && this._nodeCache.get(subscription.cacheId) === JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same cache dont send'\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\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > 100000000) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\t\t\t\t\t\tbreak;\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\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\t\t\tdata: err\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\tthis.sendWS(ws, serverRes);\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\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
|
|
@@ -223,7 +223,6 @@ function loadReportBuilderMethods(methodManager) {
|
|
|
223
223
|
return __generator(this, function (_a) {
|
|
224
224
|
switch (_a.label) {
|
|
225
225
|
case 0:
|
|
226
|
-
console.log('Selected Fields: ', JSON.stringify(selectedFields, null, 2));
|
|
227
226
|
modelCollection = index_1.ResolveIOServer.getMongoManager().collection(rootCollectionName);
|
|
228
227
|
if (!!modelCollection) return [3 /*break*/, 1];
|
|
229
228
|
reject('Invalid collection');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAwC;AAExC,+DAAwF;AACxF,kCAA2C;AAC3C,uEAAgG;AAEhG,SAAgB,wBAAwB,CAAC,aAA4B;IACpE,aAAa,CAAC,OAAO,CAAC;QACrB,sBAAsB,EAAE;YACvB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,eAAe,EAAE;oBAChB,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,eAAuB;gBAAhC,iBAyBT;gBAxBA,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;wBACpC,gBAAgB,GAAG,8CAAsB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,EAAlD,CAAkD,CAAC,CAAC;wBAC9H,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,KAAK,IAAI,EAAlB,CAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAE5E,SAAS,GAAG,iCAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;wBAE7D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;4BAC/E,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAClC,IAAI,KAAK,GAAG,IAAI,CAAC;4BACjB,SAAS,CAAC,OAAO,CAAC,UAAA,IAAI;gCACrB,IAAI,CAAC,KAAK,EAAE;oCACX,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,IAAI,EAApB,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;iCACvD;qCACI;oCACJ,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,IAAI,EAApB,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;iCAC5D;4BACF,CAAC,CAAC,CAAC;4BACH,KAAK,CAAC,QAAQ,GAAG,iCAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAhE,CAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBACvL,CAAC,CAAC,CAAC;wBAEH,gEAAgE;wBAEhE,OAAO,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;;;qBAC9C,CAAC,CAAC;YACJ,CAAC;SACD;QACD,6BAA6B,EAAE;YAC9B,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,QAAQ;gBAAjB,iBAcT;gBAbA,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;;;qCACpC,CAAA,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAA,EAA/B,wBAA+B;qCAC9B,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAvC,wBAAuC;gCAC1C,KAAA,OAAO,CAAA;gCAAC,qBAAM,oCAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAA;;gCAApJ,kBAAQ,SAA4I,EAAC,CAAC;;;gCAGtJ,KAAA,OAAO,CAAA;gCAAC,qBAAM,oCAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAA;;gCAAzG,kBAAQ,SAAiG,EAAC,CAAC;;;;gCAI5G,OAAO,CAAC,EAAE,CAAC,CAAC;;;;;qBAEb,CAAC,CAAC;YACJ,CAAC;SACD;QACD,uBAAuB,EAAE;YACxB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,UAAU,EAAE;oBACX,IAAI,EAAE,MAAM;iBACZ;gBACD,kBAAkB,EAAE;oBACnB,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,0CAAuB;iBAC7B;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,YAAY,EAAE;oBACb,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,gBAAgB,EAAE;oBACjB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,iBAAiB,EAAE;oBAClB,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,qBAAqB,EAAE;oBACtB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,kBAAkB,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,YAAY,EAAE;oBACb,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,gBAAgB,EAAE;oBACjB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,KAAK;iBACX;gBACD,aAAa,EAAE;oBACd,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,KAAK;iBACX;gBACD,eAAe,EAAE;oBAChB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,KAAK;iBACX;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,aAAa,EAAE;oBACd,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,UAAkB,EAAE,kBAA0B,EAAE,WAA8B,EAAE,OAAmB,EAAE,YAAwB,EAAE,iBAA6B,EAAE,cAA0B,EAAE,YAAwB,EAAE,SAAqB,EAAE,WAAuB,EAAE,UAAsB,EAAE,UAAe,EAAE,aAAkB,EAAE,WAAgB;gBAA1V,iBAgsBT;gBAhsBkG,wBAAA,EAAA,YAAmB;gBAAE,6BAAA,EAAA,iBAAwB;gBAAE,kCAAA,EAAA,sBAA6B;gBAAE,+BAAA,EAAA,mBAA0B;gBAAE,6BAAA,EAAA,iBAAwB;gBAAE,0BAAA,EAAA,cAAqB;gBAAE,4BAAA,EAAA,gBAAuB;gBAAE,2BAAA,EAAA,eAAsB;gBAAE,2BAAA,EAAA,eAAe;gBAAE,8BAAA,EAAA,kBAAkB;gBAAE,4BAAA,EAAA,gBAAgB;gBACnW,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;;;;gCAExC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gCAEtE,eAAe,GAAG,uBAAe,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;qCAEnF,CAAC,eAAe,EAAhB,wBAAgB;gCACnB,MAAM,CAAC,oBAAoB,CAAC,CAAC;;;gCAIzB,UAAQ,EAAE,CAAC;gCAGX,+BAA6B;oCAChC,IAAI,EAAE,EAAE;iCACR,CAAC;gCAEF,0FAA0F;gCAC1F,6CAA6C;gCAC7C,YAAY;gCACZ,6DAA6D;gCAC7D,6DAA6D;gCAC7D,4DAA4D;gCAC5D,MAAM;gCACN,OAAO;gCACP,MAAM;gCAEN,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,MAAM,EAAE;oCACxL,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;wCAC1L,4BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCACjD,CAAC,CAAC,CAAC;iCACH;gCAED,sBAAsB;gCACtB,oQAAoQ;gCACpQ,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,MAAM,EAAE;oCACxL,OAAK,CAAC,IAAI,CAAC;wCACV,MAAM,EAAE,4BAA0B;qCAClC,CAAC,CAAC;iCACH;gCAED,YAAY;gCACZ,OAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC;gCAE9C,UAAQ,EAAE,CAAC;gCAEf,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC,OAAO,CAAC,UAAA,WAAW;;oCAC7D,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oCAElD,IAAI,SAAS,GAAG,EAAE,CAAC;oCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCAE9C,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;wCAE1B,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;4CACjF,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAxE,CAAwE,CAAC,EAAE;gDAC/F,OAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;wDACpB,IAAI,EAAE,WAAW,CAAC,iBAAiB;wDACnC,UAAU,EAAE,WAAW,CAAC,gBAAgB;wDACxC,YAAY,EAAE,WAAW,CAAC,kBAAkB;wDAC5C,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;qDAC9C,EAAC,CAAC,CAAC;gDAEJ,OAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gDAC9E,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;gDAE1M,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;6CACpH;yCACD;6CACI;4CACJ,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;gDAClH,OAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gDAC1C,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;gDAEjH,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;6CACnF;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAEH,qCAAqC;gCACrC,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG;;oCACpB,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wCAC5B,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wCAEtC,IAAI,WAAS,GAAG,EAAE,CAAC;wCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAE9C,WAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;4CAE1B,IAAI,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gDACjF,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAzE,CAAyE,CAAC,EAAE;oDAChG,OAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;4DACpB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,iBAAiB;4DACpC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,gBAAgB;4DACzC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,kBAAkB;4DAC7C,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;yDAC/C,EAAC,CAAC,CAAC;oDAEJ,OAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC/E,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAE5M,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACrH;6CACD;iDACI;gDACJ,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;oDAClH,OAAK,CAAC,IAAI,CAAC,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC1C,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAEjH,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACnF;6CACD;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAEH,8CAA8C;gCAC9C,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;;oCAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wCAClC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wCAE5C,IAAI,WAAS,GAAG,EAAE,CAAC;wCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAE9C,WAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;4CAE1B,IAAI,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gDACjF,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAlE,CAAkE,CAAC,EAAE;oDACzF,OAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;4DACpB,IAAI,EAAE,KAAK,CAAC,iBAAiB;4DAC7B,UAAU,EAAE,KAAK,CAAC,gBAAgB;4DAClC,YAAY,EAAE,KAAK,CAAC,kBAAkB;4DACtC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;yDACxC,EAAC,CAAC,CAAC;oDAEJ,OAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDACxE,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAE9L,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDAC9G;qDACI;oDACJ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;wDACvC,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;4DAClH,OAAK,CAAC,IAAI,CAAC,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;4DAC1C,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;4DAEjH,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;yDACnF;qDACD;iDACD;6CACD;iDACI;gDACJ,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;oDAClH,OAAK,CAAC,IAAI,CAAC,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC1C,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;iDACjH;gDAED,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,OAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,WAAS,EAA/C,CAA+C,CAAC,EAAE;oDACzG,OAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACnF;6CACD;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAGC,cAAY,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC;gCAEjC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,KAAK,EAAhB,CAAgB,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCACtD,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;wCAChG,IAAI,UAAU,GAAG,EAAE,CAAC;wCAEpB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;4CACpC,OAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gDACjB,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;4CAClG,CAAC,CAAC,CAAC;yCACH;6CACI;4CACJ,OAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAnE,CAAmE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/I,CAA+I,CAAC,EAAhX,CAAgX,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gDAC/Y,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;4CAClG,CAAC,CAAC,CAAC;yCACH;wCAED,IAAI,UAAU,CAAC,MAAM,EAAE;4CACtB,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;gDACpC,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG;oDACjD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;iDAC5C,CAAC;6CACF;iDACI;gDACJ,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG;oDACjD,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;iDAC9E,CAAC;6CACF;yCACD;6CACI;4CACJ,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;gDACpC,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;6CAC3D;iDACI;gDACJ,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;6CAC7F;yCACD;oCACF,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAEH,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,KAAK,EAArD,CAAqD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCAC9F,IAAI,UAAU,GAAG,EAAE,CAAC;oCAEpB,OAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/D,CAA+D,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAnE,CAAmE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/I,CAA+I,CAAC,EAAzc,CAAyc,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;wCACxe,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;oCAClG,CAAC,CAAC,CAAC;oCAEH,IAAI,UAAU,CAAC,MAAM,EAAE;wCACtB,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG;4CAC5D,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;yCAC9E,CAAC;qCACF;gCACF,CAAC,CAAC,CAAC;gCAEH,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,aAAa,KAAK,OAAO,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCACpE,IAAI,UAAU,GAAG,EAAE,CAAC;oCAEpB,OAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/D,CAA+D,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAnE,CAAmE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/I,CAA+I,CAAC,EAAzc,CAAyc,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;wCACxe,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;oCAClG,CAAC,CAAC,CAAC;oCAEH,IAAI,UAAU,CAAC,MAAM,EAAE;wCACtB,WAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG;4CACvE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;yCAC5C,CAAC;qCACF;yCACI;wCACJ,IAAI,UAAU,KAAK,OAAO,IAAI,OAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAnD,CAAmD,CAAC,CAAC,MAAM,EAAE;4CAC5G,OAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAnD,CAAmD,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gDAClF,WAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;4CACzF,CAAC,CAAC,CAAC;yCACH;6CACI;4CACJ,WAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;yCACjF;qCACD;gCACF,CAAC,CAAC,CAAC;gCAEH,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,KAAK,EAAhB,CAAgB,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCACtD,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;wCAChG,WAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oCAC9F,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAEH,IAAI,MAAM,CAAC,IAAI,CAAC,WAAS,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oCACjD,OAAK,CAAC,IAAI,CAAC,WAAS,CAAC,CAAC;iCACtB;gCAED,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,EAA/B,CAA+B,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;;oCACnE,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,IAAI,CAAC,EAAE,IAAG,EAAC,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oCAC3I,OAAK,CAAC,IAAI,CAAC,EAAC,MAAM,YAAG,GAAC,IAAI,CAAC,EAAE,IAAG,CAAC,KAAC,EAAC,CAAC,CAAC;gCACtC,CAAC,CAAC,CAAC;gCAEH,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;oCACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAxD,CAAwD,CAAC,EAA5F,CAA4F,CAAC,CAAC,OAAO,CAAC,UAAC,SAAS,EAAE,OAAO;;wCACpJ,IAAI,cAAc,GAAG,EAAE,CAAC;wCAExB,IAAI,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;4CACrC,IAAI,WAAS,GAAG,EAAE,CAAC;4CACnB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDACtE,IAAI,KAAK,CAAC,KAAK,EAAE;oDAChB,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;oDACnE,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;iDACtE;qDACI;oDACJ,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;oDACxC,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;iDAC3C;4CACF,CAAC,CAAC,CAAC;4CAEH,IAAI,OAAO,GAAG,CAAC,EAAE;gDAChB,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;gDAClD,WAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;6CACrD;4CAED,IAAI,oBAAkB,GAAG,EAAE,CAAC;4CAE5B,IAAI,OAAO,GAAG,CAAC,EAAE;gDAChB,oBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;6CAC/C;4CAED,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDACtE,IAAI,KAAK,CAAC,KAAK,EAAE;oDAChB,oBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;iDAChE;qDACI;oDACJ,oBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iDACrC;4CACF,CAAC,CAAC,CAAC;4CAEH,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;gDACjC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,YAAG,GAAC,GAAG,GAAG,SAAS,CAAC,SAAS,IAAG,oBAAkB,KAAC,EAAE;6CACnG,CAAC;yCACF;6CACI;4CACJ,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;gDAC9B,GAAC,GAAG,GAAG,SAAS,CAAC,SAAS,IAAG,EAAE;mDAC/B,CAAC;4CAEF,IAAI,OAAO,GAAG,CAAC,EAAE;gDAChB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU,EAAC,EAAC,CAAC,CAAC;6CAC9J;4CAED,IAAI,QAAM,GAAG,EAAE,CAAC;4CAEhB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDACtE,IAAI,KAAK,CAAC,KAAK,EAAE;oDAChB,QAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;iDACnE;qDACI;oDACJ,QAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;iDACxC;4CACF,CAAC,CAAC,CAAC;4CAEH,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDACtE,IAAI,KAAK,CAAC,KAAK,EAAE;oDAChB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,EAAC,CAAC,CAAC;iDACxJ;qDACI;oDACJ,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAC,EAAC,CAAC,CAAC;iDAC7H;4CACF,CAAC,CAAC,CAAC;yCACH;wCAED,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,cAAc,EAAC,CAAC,CAAC;oCAC1C,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAEH,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;oCACxB,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;;wCACzB,OAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAE,GAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,IAAG,GAAG,GAAG,KAAK,CAAC,UAAU,KAAC,EAAC,CAAC,CAAC;oCACxF,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAGC,8BAA4B;oCAC/B,IAAI,EAAE,EAAE;iCACR,CAAC;gCAEF,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAArJ,CAAqJ,CAAC,CAAC,MAAM,EAAE;oCACtL,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAArJ,CAAqJ,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;wCACxL,2BAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCAChD,CAAC,CAAC,CAAC;iCACH;gCAED,YAAY,CAAC,OAAO,CAAC,UAAA,MAAM;oCAC1B,2BAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAChD,CAAC,CAAC,CAAC;gCAEH,IAAI,2BAAyB,CAAC,IAAI,CAAC,MAAM,EAAE;oCAC1C,OAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,2BAAyB,EAAC,CAAC,CAAC;iCAChD;gCAGG,eAAa;oCAChB,GAAG,EAAE,EAAE;iCACP,CAAC;gCAEF,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,SAAS,EAAE;oCAClE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;wCACtB,YAAU,CAAC,GAAG,GAAG,MAAM,CAAC;qCACxB;yCACI;wCACJ,IAAI,WAAW,CAAC,IAAI,EAAE;4CACjB,iBAAe,EAAE,CAAC;4CACtB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,SAAS;gDAC9C,IAAI,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,SAAS,EAAlB,CAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;gDAEjE,IAAI,QAAQ,EAAE;oDACb,cAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iDACpF;4CACF,CAAC,CAAC,CAAC;4CACH,IAAI,MAAM,CAAC,IAAI,CAAC,cAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gDACzC,OAAK,CAAC,IAAI,CAAC;oDACV,KAAK,EAAE,cAAY;iDACnB,CAAC,CAAC;6CACH;yCACD;qCACD;oCAED,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG;wCACpB,YAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCAE9D,IAAI,UAAU,IAAI,aAAa,EAAE;4CAChC,IAAI,aAAa,KAAK,OAAO,EAAE;gDAC9B,YAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAC,aAAa,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDACrI,YAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,QAAQ,EAAE;gDACpC,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,UAAU,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDACnI,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,cAAc,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CACvI;iDACI,IAAI,aAAa,KAAK,SAAS,EAAE;gDACrC,YAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,WAAW,EAAE;gDACvC,YAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,QAAQ,EAAE;gDACpC,YAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;yCACD;oCACF,CAAC,CAAC,CAAC;oCAEH,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;wCAC3B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CACtC,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;4CACvC,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;4CACzC,IAAI,UAAU,KAAK,OAAO,EAAE;gDAC3B,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;6CACpF;iDACI;gDACJ,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;6CACrF;yCACD;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;4CAC7I,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC9E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE;4CACxC,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC7E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE;4CAC1C,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,WAAW,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCACjF;6CACI;4CACJ,YAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC7E;oCACF,CAAC,CAAC,CAAC;oCAEH,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;wCACxB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;4CACrC,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAC/D;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;4CACtC,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAC/D;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE;4CACxC,IAAI,UAAU,KAAK,OAAO,EAAE;gDAC3B,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAI,IAAI,CAAC,UAAU,EAAE,CAAC;6CACvE;iDACI;gDACJ,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAI,IAAI,CAAC,UAAU,EAAE,CAAC;6CACxE;yCACD;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC1C,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAC/D;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC1C,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAC/D;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE;4CACxC,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,QAAQ,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCACjE;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;4CACvC,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAChE;6CACI,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;4CACzC,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,WAAW,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCACpE;6CACI;4CACJ,YAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAChE;oCACF,CAAC,CAAC,CAAC;oCAEH,SAAS;oCACT,IAAI,WAAW,CAAC,MAAM,EAAE;wCACvB,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;4CACxB,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDAChG,YAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,EAAC,CAAC;4CACjF,CAAC,CAAC,CAAC;4CAEH,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;gDACzB,YAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,EAAC,CAAC;4CACjG,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;qCACH;oCAED,OAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,YAAU,EAAC,CAAC,CAAC;iCACjC;qCACI;oCAEA,oBAAkB;wCACrB,GAAG,EAAE,CAAC;qCACN,CAAC;oCAEF,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;wCAC3B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CACtC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;4CACvC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;4CACzC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC;yCACtC;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI;4CACJ,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;yCACvE;oCACF,CAAC,CAAC,CAAC;oCAEH,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;wCACxB,IAAI,IAAI,KAAK,SAAS,EAAE;4CACvB,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAClE;6CACI,IAAI,IAAI,KAAK,KAAK,EAAE;4CACxB,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAClE;6CACI,IAAI,IAAI,KAAK,OAAO,EAAE;4CAC1B,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC;yCAC7C;6CACI,IAAI,IAAI,KAAK,SAAS,EAAE;4CAC5B,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAClE;6CACI,IAAI,IAAI,KAAK,SAAS,EAAE;4CAC5B,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAI,IAAI,CAAC,UAAU,EAAC,CAAC;yCAClE;6CACI;4CACJ,iBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;yCACzD;oCACF,CAAC,CAAC,CAAC;oCAEH,QAAQ;oCACR,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,CAAC,EAAE;wCAC5E,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;4CACxB,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;;gDAChG,iBAAe,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,aAAI,GAAC,GAAG,GAAG,KAAK,CAAC,IAAI,IAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,KAAC,CAAC;4CACpG,CAAC,CAAC,CAAC;4CAEH,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;;gDACzB,iBAAe,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,aAAI,GAAC,GAAG,GAAG,KAAK,CAAC,IAAI,IAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,KAAC,CAAC;4CACpH,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;qCACH;oCAED,OAAK,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,iBAAe,EAAC,CAAC,CAAC;iCACxC;gCAED,OAAO;gCACP,IAAI,WAAW,CAAC,IAAI,EAAE;oCACrB,OAAK,CAAC,IAAI,CAAC;wCACV,KAAK,EAAE,WAAW,CAAC,IAAI;qCACvB,CAAC,CAAC;iCACH;gCAED,IAAI,UAAU,KAAK,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wDAC1C,CAAC;;wCACT,IAAI,SAAS,GAAG,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC;wCAEzB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;4CAC5B,GAAG,YAAG,GAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAC;yCACnD,CAAC;wCAEF,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4CAC/B,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;gDAC3B,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;4CACvD,CAAC,CAAC,CAAC;4CAEH,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;gDACzB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;4CACvE,CAAC,CAAC,CAAC;yCACH;6CACI;4CACJ,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;yCAC5E;wCAED,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;4CAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;gDACnG,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gDAC/C,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;4CACrG,CAAC,CAAC,CAAC;4CAEH,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;gDACzB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;4CAC/G,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;wCAEH,OAAK,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;wCAElC,IAAI,OAAO,GAAG;4CACb,GAAG,EAAE,EAAE;yCACP,CAAC;wCAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yCACzD;wCAED,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;4CAC1B,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;yCAC5B,CAAC;wCAEF,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;4CAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;;gDACnG,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,aAAI,GAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,KAAC,CAAC;4CAC3G,CAAC,CAAC,CAAC;4CAEH,YAAY,CAAC,OAAO,CAAC,UAAA,KAAK;;gDACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,aAAI,GAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,KAAC,CAAC;4CACrH,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;wCAEH,OAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;wCAE9B,IAAI,WAAW,CAAC,IAAI,EAAE;4CACrB,IAAI,UAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;4CAC7C,IAAI,MAAI,GAAG,EAAE,CAAC;4CAEd,IAAI,aAAW,GAAG,EAAE,CAAC;4CACrB,SAAS,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,UAAU;gDACjC,IAAI,UAAU,GAAG,CAAC,EAAE;oDACnB,aAAW,IAAI,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;iDAC9C;gDAED,IAAI,UAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;oDACpD,MAAI,CAAC,aAAW,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;iDAClG;qDACI;oDACJ,MAAI,CAAC,aAAW,GAAG,SAAS,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iDACrD;4CACF,CAAC,CAAC,CAAC;4CAEH,UAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAxB,CAAwB,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;gDACzD,MAAI,CAAC,aAAW,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4CACjD,CAAC,CAAC,CAAC;4CAEH,OAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,MAAI,EAAC,CAAC,CAAC;yCAC1B;;oCAhFF,KAAS,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gDAArC,CAAC;qCAiFT;iCACD;gCAIG,QAAM,IAAI,CAAC;;;;gCAGR,qBAAM,eAAe,CAAC,SAAS,CAAC,OAAK,EAAE,EAAC,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAC,CAAC,EAAA;;gCAA/F,KAAG,GAAG,SAAyF,CAAC;;;;gCAGhG,OAAO,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC;;;gCAGd,cAAY,EAAE,CAAC;gCAEnB,IAAI,KAAG,EAAE;oCACR,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;wCAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;4CACnG,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDAC5B,WAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAvC,CAAuC,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;6CAC9H;iDACI,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDACjC,WAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAvC,CAAuC,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,GAAG,KAAG,CAAC,MAAM,CAAC,CAAC;6CACvJ;wCACF,CAAC,CAAC,CAAC;wCAEH,YAAY,CAAC,OAAO,CAAC,UAAA,SAAS;4CAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDAC5B,WAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,KAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAhD,CAAgD,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;6CAChJ;iDACI,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDACjC,WAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAhD,CAAgD,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,GAAG,KAAG,CAAC,MAAM,CAAC,CAAC;6CACzK;wCACF,CAAC,CAAC,CAAC;oCACJ,CAAC,CAAC,CAAC;iCACH;gCAEG,MAAM,GAAG,CAAC;wCACb,KAAK,EAAE,KAAG,CAAC,CAAC,CAAC,KAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wCAC3B,OAAO,EAAE,KAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,EAAE;wCAChF,MAAM,EAAE,WAAS;qCACjB,CAAC,CAAC;gCAEH,OAAO,CAAC,MAAM,CAAC,CAAC;;;;;qBAEjB,CAAC,CAAC;YACJ,CAAC;SACD;KACD,CAAC,CAAC;AACJ,CAAC;AAv1BD,4DAu1BC","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../index';\nimport { getReportLookupSchemas, buildTree, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\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}),\n\t\t\tfunction: function(collection_root: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet lookupSchemaData = getReportLookupSchemas(collection_root).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\t\t\t\t\tlet lookupSchemaTree = lookupSchemaData.filter(a => a.is_root === true)[0].tree;\n\n\t\t\t\t\tlet treeItems = buildTree(collection_root, lookupSchemaTree);\n\n\t\t\t\t\tObject.keys(lookupSchemaTree).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\t\t\t\t\tlet fieldPath = lookup.split('.');\n\t\t\t\t\t\tlet field = null;\n\t\t\t\t\t\tfieldPath.forEach(path => {\n\t\t\t\t\t\t\tif (!field) {\n\t\t\t\t\t\t\t\tfield = treeItems.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tfield = field.children.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfield.children = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupSchemaData.filter(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection)[0].tree, field);\n\t\t\t\t\t});\n\n\t\t\t\t\t// console.log('----------- Tree Items -----------', treeItems);\n\n\t\t\t\t\tresolve({isLeaf: false, children: treeItems});\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: function(treeLeaf) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\t\tif (treeLeaf.fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/^.+\\(.+\\) \\(Lookup\\)\\.\\$\\./g, '').replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/\\.\\$/g, '')));\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\tresolve([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\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: 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\treturn new Promise(async (resolve, reject) => {\n\n\t\t\t\t\tconsole.log('Selected Fields: ', JSON.stringify(selectedFields, null, 2));\n\n\t\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\t\tif (!modelCollection) {\n\t\t\t\t\t\treject('Invalid collection');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Query\n\t\t\t\t\t\tlet query = [];\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t\t$and: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\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 (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) {\n\t\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\t\tinitialQueryMatchCondition['$and'].push(filter);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add filter to query\n\t\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\t\tif (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) {\n\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add count\n\t\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\t\tlet fieldData = filterField.fieldPath.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === filterField.lookup_as.replace(/\\.\\$/g, ''))) {\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: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: filterField.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: filterField.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: filterField.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + filterField.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + filterField.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\tif (row.field.includes('$')) {\n\t\t\t\t\t\t\t\tlet fieldData = row.field.split('.$');\n\n\t\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === row.treeItem.lookup_as.replace(/\\.\\$/g, ''))) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\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\t\tlocalField: row.treeItem.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\t\tsizes.push(row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\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\telse {\n\t\t\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\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.fieldPath.includes('$')) {\n\t\t\t\t\t\t\t\tlet fieldData = field.fieldPath.split('.$');\n\n\t\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === field.lookup_as.replace(/\\.\\$/g, ''))) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\t\tsizes.push(field.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + field.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + field.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tif (!fieldData[i].includes('(Lookup)')) {\n\t\t\t\t\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\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\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\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (field.leafValueType !== 'Count' && !query.some(a => a.$unwind && a.$unwind.path === '$' + fieldPath)) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\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\tlet multFields = [];\n\n\t\t\t\t\t\t\t\tif (!field.fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\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\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\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 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\tif (multFields.length) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\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\t$divide: ['$count', {$multiply: multFields}]\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\telse {\n\t\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\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\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\telse {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\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\tdivFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\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\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\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\tdivFields.$addFields[field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\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\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\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\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\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 (reportType !== 'Dated' && sizes.filter(a => field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\t\tsizes.filter(a => field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\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['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$count';\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\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\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\tdivFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\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\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\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\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\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\t\tif (field.field) {\n\t\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\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t\t}\n\t\t\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\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\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\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\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\t}\n\n\t\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\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\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t\t$and: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (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) {\n\t\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Group\n\t\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\t\tqueryGroup._id = '$_id';\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 (rootOptions.sort) { \n\t\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\t\tlet selField = selectedFields.filter(a => a.id === sortField)[0];\n\n\t\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[selField.fieldPath.replace(/\\.\\$/g, '')] = 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\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\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}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\tif (date_field && date_interval) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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\tselectedFields.forEach(field => {\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': '$' + field.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': '$' + field.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\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + field.fieldPath.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\tqueryGroup[field.id] = { '$push': '$count_' + field.fieldPath.replace(/\\.\\$/g, '') };\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 if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + field.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': '$' + field.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' || (!groupsRow.length && (!field.fieldPath.includes('.$') || field.fieldPath.includes('(Lookup)')))) {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + field.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': '$' + field.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': '$' + field.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': '$' + field.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\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\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\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\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 if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\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[cust.selFieldId] = {'$push': '$' + cust.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\t// Totals\n\t\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\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\t\tqueryGroup[total.id + '_' + field.id] = {$sum: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {$sum: '$' + total.id + '_' + field.selFieldId};\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({$group: queryGroup});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t//Projection\n\t\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t\t_id: 1\n\t\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\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + field.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: '$' + field.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: '$' + field.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: '$' + field.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] = '$' + field.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\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + 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\tqueryProjection[cust.selFieldId] = '$' + cust.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\t//Totals\n\t\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\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\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\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({$project: queryProjection});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// SORT\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t$sort: rootOptions.sort\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\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\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\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\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\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\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\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\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\t});\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\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\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\t});\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\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\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\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\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tquery.push({$sort: sort});\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// console.log('_____________ query __________'); console.log(query); console.log(JSON.stringify(query, null, 2));\n\n\t\t\t\t\t\tlet res = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: 'secondary'});\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\tif (totField.type === 'sum') {\n\t\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\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] = Math.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\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(custField => {\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 + '_' + 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\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 + '_' + custField.selFieldId] = Math.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\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 tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\tresolve(tmpRes);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t}\n\t});\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 { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../index';\nimport { getReportLookupSchemas, buildTree, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\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}),\n\t\t\tfunction: function(collection_root: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet lookupSchemaData = getReportLookupSchemas(collection_root).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\t\t\t\t\tlet lookupSchemaTree = lookupSchemaData.filter(a => a.is_root === true)[0].tree;\n\n\t\t\t\t\tlet treeItems = buildTree(collection_root, lookupSchemaTree);\n\n\t\t\t\t\tObject.keys(lookupSchemaTree).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\t\t\t\t\tlet fieldPath = lookup.split('.');\n\t\t\t\t\t\tlet field = null;\n\t\t\t\t\t\tfieldPath.forEach(path => {\n\t\t\t\t\t\t\tif (!field) {\n\t\t\t\t\t\t\t\tfield = treeItems.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tfield = field.children.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfield.children = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupSchemaData.filter(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection)[0].tree, field);\n\t\t\t\t\t});\n\n\t\t\t\t\t// console.log('----------- Tree Items -----------', treeItems);\n\n\t\t\t\t\tresolve({isLeaf: false, children: treeItems});\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: function(treeLeaf) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\t\tif (treeLeaf.fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/^.+\\(.+\\) \\(Lookup\\)\\.\\$\\./g, '').replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/\\.\\$/g, '')));\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\tresolve([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\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: 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\treturn new Promise(async (resolve, reject) => {\n\n\t\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\t\tif (!modelCollection) {\n\t\t\t\t\t\treject('Invalid collection');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Query\n\t\t\t\t\t\tlet query = [];\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t\t$and: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\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 (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) {\n\t\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\t\tinitialQueryMatchCondition['$and'].push(filter);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add filter to query\n\t\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\t\tif (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) {\n\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add count\n\t\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\t\tlet fieldData = filterField.fieldPath.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === filterField.lookup_as.replace(/\\.\\$/g, ''))) {\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: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: filterField.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: filterField.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: filterField.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + filterField.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + filterField.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\tif (row.field.includes('$')) {\n\t\t\t\t\t\t\t\tlet fieldData = row.field.split('.$');\n\n\t\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === row.treeItem.lookup_as.replace(/\\.\\$/g, ''))) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\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\t\tlocalField: row.treeItem.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\t\tsizes.push(row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\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\telse {\n\t\t\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\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.fieldPath.includes('$')) {\n\t\t\t\t\t\t\t\tlet fieldData = field.fieldPath.split('.$');\n\n\t\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === field.lookup_as.replace(/\\.\\$/g, ''))) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\t\tsizes.push(field.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + field.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + field.lookup_as.replace(/\\.\\$/g, '').replace(/\\./g, '_'), []]}}}});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tif (!fieldData[i].includes('(Lookup)')) {\n\t\t\t\t\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\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\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\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (field.leafValueType !== 'Count' && !query.some(a => a.$unwind && a.$unwind.path === '$' + fieldPath)) {\n\t\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\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}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\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\tlet multFields = [];\n\n\t\t\t\t\t\t\t\tif (!field.fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\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\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\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 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\tif (multFields.length) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\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\t$divide: ['$count', {$multiply: multFields}]\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\telse {\n\t\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\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\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\telse {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\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\tdivFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\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\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\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\tdivFields.$addFields[field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\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\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tsizes.filter(a => !field.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\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\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\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\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 (reportType !== 'Dated' && sizes.filter(a => field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\t\tsizes.filter(a => field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\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['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$count';\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\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\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\tdivFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\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\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\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\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\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\t\tif (field.field) {\n\t\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\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t\t}\n\t\t\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\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\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\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\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\t}\n\n\t\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\n\t\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\t\tif (field.field) {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\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\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t\t$and: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (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) {\n\t\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Group\n\t\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\t\tqueryGroup._id = '$_id';\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 (rootOptions.sort) { \n\t\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\t\tlet selField = selectedFields.filter(a => a.id === sortField)[0];\n\n\t\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[selField.fieldPath.replace(/\\.\\$/g, '')] = 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\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\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}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\tif (date_field && date_interval) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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\tselectedFields.forEach(field => {\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': '$' + field.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': '$' + field.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\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + field.fieldPath.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\tqueryGroup[field.id] = { '$push': '$count_' + field.fieldPath.replace(/\\.\\$/g, '') };\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 if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + field.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': '$' + field.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' || (!groupsRow.length && (!field.fieldPath.includes('.$') || field.fieldPath.includes('(Lookup)')))) {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + field.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': '$' + field.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': '$' + field.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': '$' + field.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\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\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\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\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 if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\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[cust.selFieldId] = {'$push': '$' + cust.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\t// Totals\n\t\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\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\t\tqueryGroup[total.id + '_' + field.id] = {$sum: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {$sum: '$' + total.id + '_' + field.selFieldId};\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({$group: queryGroup});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t//Projection\n\t\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t\t_id: 1\n\t\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\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + field.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: '$' + field.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: '$' + field.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: '$' + field.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] = '$' + field.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\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + 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\tqueryProjection[cust.selFieldId] = '$' + cust.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\t//Totals\n\t\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\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\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\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({$project: queryProjection});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// SORT\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t$sort: rootOptions.sort\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\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\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\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\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\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\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\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\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\t});\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\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\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\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\t});\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\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\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\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\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\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\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tquery.push({$sort: sort});\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// console.log('_____________ query __________'); console.log(query); console.log(JSON.stringify(query, null, 2));\n\n\t\t\t\t\t\tlet res = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: 'secondary'});\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\tif (totField.type === 'sum') {\n\t\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\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] = Math.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\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(custField => {\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 + '_' + 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\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 + '_' + custField.selFieldId] = Math.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\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 tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\tresolve(tmpRes);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t}\n\t});\n}"]}
|