@resolveio/server-lib 20.7.117 → 20.7.119

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.
@@ -1,2 +1,2 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,t,o,a){return new(o=o||Promise)(function(n,r){function fulfilled(e){try{step(a.next(e))}catch(e){r(e)}}function rejected(e){try{step(a.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?n(e.value):((r=e.value)instanceof o?r:new o(function(e){e(r)})).then(fulfilled,rejected)}step((a=a.apply(e,t||[])).next())})},__generator=this&&this.__generator||function(t,o){var a,s,i,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},c={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function verb(n){return function(e){var r=[n,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(a=1,s&&(i=2&r[0]?s.return:r[0]?s.throw||((i=s.return)&&i.call(s),0):s.next)&&!(i=i.call(s,r[1])).done)return i;switch(s=0,(r=i?[2&r[0],i.value]:r)[0]){case 0:case 1:i=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,s=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(i=0<(i=l.trys).length&&i[i.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3]))l.label=r[1];else if(6===r[0]&&l.label<i[1])l.label=i[1],i=r;else{if(!(i&&l.label<i[2])){i[2]&&l.ops.pop(),l.trys.pop();continue}l.label=i[2],l.ops.push(r)}}r=o.call(t,l)}catch(e){r=[6,e],s=0}finally{a=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__read=this&&this.__read||function(e,r){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var t,o,a=n.call(e),s=[];try{for(;(void 0===r||0<r--)&&!(t=a.next()).done;)s.push(t.value)}catch(e){o={error:e}}finally{try{t&&!t.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return s},__spreadArray=this&&this.__spreadArray||function(e,r,n){if(n||2===arguments.length)for(var t,o=0,a=r.length;o<a;o++)!t&&o in r||((t=t||Array.prototype.slice.call(r,0,o))[o]=r[o]);return e.concat(t||Array.prototype.slice.call(r))},WebSocket=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerServerManager=void 0,require("ws")),common_1=require("../util/common"),method_manager_1=require("./method.manager"),WorkerServerManager=function(){function WorkerServerManager(){this._runningTasks=[]}return WorkerServerManager.create=function(e,r){var n=new WorkerServerManager;return n.initialize(e,r),n},WorkerServerManager.prototype.initialize=function(e,r){this._methodManager=e,this._serverConfig=r,this.startWorkerInstance()},WorkerServerManager.prototype.startWorkerInstance=function(){var e=this,r=(console.log(new Date,"Worker instance started, connecting to main server via WebSocket..."),this._serverConfig.SERVER_URL+"/websocket?workerToken="+this._serverConfig.WORKER_TOKEN),t=new WebSocket(r),o=null,n=null,a=!1,s=setTimeout(function(){a||(console.error(new Date,"WebSocket connection timeout. Retrying..."),t.terminate())},1e4);t.on("open",function(){a=!0,clearTimeout(s),console.log(new Date,"Connected to main server as worker",process.env.WORKER_INDEX,process.env.NODE_APP_INSTANCE),e.sendWorkerResponse(t,"ping"),n=setInterval(function(){o?(o=null,e.sendWorkerResponse(t,"ping")):t.close()},15e3)}),t.on("message",function(n){return __awaiter(e,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return(this._methodManager.getEnableDebug()&&console.log(new Date,"Message Recv",n),"ping"!==(n="string"!=typeof n?n.toString():n))?[3,1]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Ping, Sending Pong"),this.sendWorkerResponse(t,"pong"),[3,4]);case 1:return"pong"!==n?[3,2]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Pong"),o=new Date,[3,4]);case 2:r=void 0;try{r=JSON.parse(n,common_1.dateReviver)}catch(e){return console.error("Worker parse error",e),[2]}return"task"!==r.type?[3,4]:[4,this.handleIncomingTask(t,r)];case 3:e.sent(),e.label=4;case 4:return[2]}})})}),t.on("close",function(){console.log(new Date,"Disconnected from main server. Reconnecting in 1s..."),setTimeout(function(){e.startWorkerInstance()},1e3),n&&clearInterval(n),clearTimeout(s)}),t.on("error",function(e){console.error(new Date,"Worker WS error:",e),t.close()})},WorkerServerManager.prototype.handleIncomingTask=function(g,h){return __awaiter(this,void 0,void 0,function(){var r,n,t,o,a,s,i,l,c,u=this;return __generator(this,function(e){switch(e.label){case 0:if(r=h.taskId,n=h.messageId,t=h.method,o=h.params,a=h.userContext,this._runningTasks.push(r),!r||!t)return this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:"Invalid task"}),[2];s=!1,i=setTimeout(function(){return __awaiter(u,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return s=!0,console.error(new Date,"Worker timed out on task:",r,"Method:",t),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:"Task timed out"}),[4,this._methodManager.callMethod("insertErrorLog","Timeout in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2)))];case 1:return e.sent(),[2]}})})},12e4),e.label=1;case 1:return e.trys.push([1,3,,5]),l=Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:(null==a?void 0:a.id_user)||"",user:(null==a?void 0:a.user)||"",id_ws:(null==a?void 0:a.id_ws)||""}),this._methodManager.getEnableDebug()&&console.log(new Date,"Running method",t),[4,(c=this._methodManager.callMethod).call.apply(c,__spreadArray([l,t],__read(o),!1))];case 2:return c=e.sent(),this._methodManager.getEnableDebug()&&console.log(new Date,"Finished method",t),s||(clearTimeout(i),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!1,result:c})),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),this._methodManager.getEnableDebug()&&console.log(new Date,"Done with Task",JSON.stringify(this._runningTasks,null,2)),[3,5];case 3:if(l=e.sent(),s)return console.error(new Date,"Error in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2))),[4,this._methodManager.callMethod("insertErrorLog","Error in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2)))];throw clearTimeout(i),console.error("Worker failed task:",r,"Method:",t,l),l.message="Worker failed task:"+r+" Method:"+t+" - "+l.message,this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:l||"Unknown error"}),l;case 4:return e.sent(),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),[3,5];case 5:return[2]}})})},WorkerServerManager.prototype.sendWorkerResponse=function(e,r){if("string"!=typeof r&&(r=JSON.stringify(r)),this._methodManager.getEnableDebug()&&console.log(new Date,"Sending",r),e&&e.readyState===e.OPEN)try{e.send(r)}catch(e){console.error("Failed to send worker response:",e)}else e&&e.close()},WorkerServerManager}();exports.WorkerServerManager=WorkerServerManager;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,n,o,a){return new(o=o||Promise)(function(t,r){function fulfilled(e){try{step(a.next(e))}catch(e){r(e)}}function rejected(e){try{step(a.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?t(e.value):((r=e.value)instanceof o?r:new o(function(e){e(r)})).then(fulfilled,rejected)}step((a=a.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(n,o){var a,s,i,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},c={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function verb(t){return function(e){var r=[t,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(a=1,s&&(i=2&r[0]?s.return:r[0]?s.throw||((i=s.return)&&i.call(s),0):s.next)&&!(i=i.call(s,r[1])).done)return i;switch(s=0,(r=i?[2&r[0],i.value]:r)[0]){case 0:case 1:i=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,s=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(i=0<(i=l.trys).length&&i[i.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3]))l.label=r[1];else if(6===r[0]&&l.label<i[1])l.label=i[1],i=r;else{if(!(i&&l.label<i[2])){i[2]&&l.ops.pop(),l.trys.pop();continue}l.label=i[2],l.ops.push(r)}}r=o.call(n,l)}catch(e){r=[6,e],s=0}finally{a=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__read=this&&this.__read||function(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,a=t.call(e),s=[];try{for(;(void 0===r||0<r--)&&!(n=a.next()).done;)s.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=a.return)&&t.call(a)}finally{if(o)throw o.error}}return s},__spreadArray=this&&this.__spreadArray||function(e,r,t){if(t||2===arguments.length)for(var n,o=0,a=r.length;o<a;o++)!n&&o in r||((n=n||Array.prototype.slice.call(r,0,o))[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))},WebSocket=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerServerManager=void 0,require("ws")),common_1=require("../util/common"),method_manager_1=require("./method.manager"),WorkerServerManager=function(){function WorkerServerManager(){this._runningTasks=[]}return WorkerServerManager.create=function(e,r){var t=new WorkerServerManager;return t.initialize(e,r),t},WorkerServerManager.prototype.initialize=function(e,r){this._methodManager=e,this._serverConfig=r,this.startWorkerInstance()},WorkerServerManager.prototype.startWorkerInstance=function(){var e=this,r=(console.log(new Date,"Worker instance started, connecting to main server via WebSocket..."),(this._serverConfig.SERVER_URL_INTERNAL||this._serverConfig.SERVER_URL)+"/websocket?workerToken="+this._serverConfig.WORKER_TOKEN),n=new WebSocket(r),o=null,t=null,a=!1,s=setTimeout(function(){a||(console.error(new Date,"WebSocket connection timeout. Retrying..."),n.terminate())},1e4);n.on("open",function(){a=!0,clearTimeout(s),console.log(new Date,"Connected to main server as worker",process.env.WORKER_INDEX,process.env.NODE_APP_INSTANCE),e.sendWorkerResponse(n,"ping"),t=setInterval(function(){o?(o=null,e.sendWorkerResponse(n,"ping")):n.close()},15e3)}),n.on("message",function(t){return __awaiter(e,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return(this._methodManager.getEnableDebug()&&console.log(new Date,"Message Recv",t),"ping"!==(t="string"!=typeof t?t.toString():t))?[3,1]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Ping, Sending Pong"),this.sendWorkerResponse(n,"pong"),[3,4]);case 1:return"pong"!==t?[3,2]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Pong"),o=new Date,[3,4]);case 2:r=void 0;try{r=JSON.parse(t,common_1.dateReviver)}catch(e){return console.error("Worker parse error",e),[2]}return"task"!==r.type?[3,4]:[4,this.handleIncomingTask(n,r)];case 3:e.sent(),e.label=4;case 4:return[2]}})})}),n.on("close",function(){console.log(new Date,"Disconnected from main server. Reconnecting in 1s..."),setTimeout(function(){e.startWorkerInstance()},1e3),t&&clearInterval(t),clearTimeout(s)}),n.on("error",function(e){console.error(new Date,"Worker WS error:",e),n.close()})},WorkerServerManager.prototype.handleIncomingTask=function(g,h){return __awaiter(this,void 0,void 0,function(){var r,t,n,o,a,s,i,l,c,u=this;return __generator(this,function(e){switch(e.label){case 0:if(r=h.taskId,t=h.messageId,n=h.method,o=h.params,a=h.userContext,this._runningTasks.push(r),!r||!n)return this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:t,error:!0,result:"Invalid task"}),[2];s=!1,i=setTimeout(function(){return __awaiter(u,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return s=!0,console.error(new Date,"Worker timed out on task:",r,"Method:",n),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:t,error:!0,result:"Task timed out"}),[4,this._methodManager.callMethod("insertErrorLog","Timeout in Method: ".concat(n," - ").concat(JSON.stringify(h,null,2)))];case 1:return e.sent(),[2]}})})},this._methodManager.getMethod(n).timeoutOverride||12e4),e.label=1;case 1:return e.trys.push([1,3,,5]),l=Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:(null==a?void 0:a.id_user)||"",user:(null==a?void 0:a.user)||"",id_ws:(null==a?void 0:a.id_ws)||""}),this._methodManager.getEnableDebug()&&console.log(new Date,"Running method",n),[4,(c=this._methodManager.callMethod).call.apply(c,__spreadArray([l,n],__read(o),!1))];case 2:return c=e.sent(),this._methodManager.getEnableDebug()&&console.log(new Date,"Finished method",n),s||(clearTimeout(i),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:t,error:!1,result:c})),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),this._methodManager.getEnableDebug()&&console.log(new Date,"Done with Task",JSON.stringify(this._runningTasks,null,2)),[3,5];case 3:if(l=e.sent(),s)return console.error(new Date,"Error in Method: ".concat(n," - ").concat(JSON.stringify(h,null,2))),[4,this._methodManager.callMethod("insertErrorLog","Error in Method: ".concat(n," - ").concat(JSON.stringify(h,null,2)))];throw clearTimeout(i),console.error("Worker failed task:",r,"Method:",n,l),l.message="Worker failed task:"+r+" Method:"+n+" - "+l.message,this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:t,error:!0,result:l||"Unknown error"}),l;case 4:return e.sent(),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),[3,5];case 5:return[2]}})})},WorkerServerManager.prototype.sendWorkerResponse=function(e,r){if("string"!=typeof r&&(r=JSON.stringify(r)),this._methodManager.getEnableDebug()&&console.log(new Date,"Sending",r),e&&e.readyState===e.OPEN)try{e.send(r)}catch(e){console.error("Failed to send worker response:",e)}else e&&e.close()},WorkerServerManager}();exports.WorkerServerManager=WorkerServerManager;
2
2
  //# sourceMappingURL=worker-server.manager.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/worker-server.manager.ts"],"names":["WebSocket","require","common_1","method_manager_1","WorkerServerManager","this","_runningTasks","create","methodManager","serverConfig","workerServerManager","initialize","prototype","_methodManager","_serverConfig","startWorkerInstance","_this","wsUrl","console","log","Date","ws","lastComm","interval","opened","openTimeout","setTimeout","error","terminate","on","clearTimeout","process","env","WORKER_INDEX","NODE_APP_INSTANCE","sendWorkerResponse","setInterval","close","rawData","__awaiter","getEnableDebug","toString","msg","JSON","parse","dateReviver","e","type","handleIncomingTask","_a","sent","clearInterval","err","data","taskId","messageId","method","params","userContext","push","result","timedOut","timeoutHandle","callMethod","concat","stringify","managerThis","Object","assign","MethodManager","id_user","user","id_ws","call","apply","__spreadArray","__read","_b","filter","a","err_1","message","payload","readyState","OPEN","send","exports"],"mappings":"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","file":"worker-server.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver } from '../util/common';\nimport { MethodManager } from './method.manager';\n\nexport class WorkerServerManager {\n private _methodManager;\n private _serverConfig;\n private _runningTasks = [];\n\n constructor() {}\n \n static create(methodManager: MethodManager, serverConfig) {\n const workerServerManager = new WorkerServerManager();\n workerServerManager.initialize(methodManager, serverConfig);\n return workerServerManager;\n }\n\n public initialize(methodManager: MethodManager, serverConfig) {\n this._methodManager = methodManager;\n this._serverConfig = serverConfig;\n this.startWorkerInstance();\n }\n\n private startWorkerInstance() {\n console.log(new Date(), 'Worker instance started, connecting to main server via WebSocket...');\n \n let wsUrl = this._serverConfig['SERVER_URL'] + '/websocket?workerToken=' + this._serverConfig['WORKER_TOKEN'];\n const ws = new WebSocket(wsUrl);\n \n let lastComm = null;\n let interval = null;\n let openTimeout = null;\n let opened = false;\n \n // Set timeout if the socket never opens\n openTimeout = setTimeout(() => {\n if (!opened) {\n console.error(new Date(), 'WebSocket connection timeout. Retrying...');\n ws.terminate(); // force close if still connecting\n }\n }, 10000); // 10 seconds timeout\n \n ws.on('open', () => {\n opened = true;\n clearTimeout(openTimeout);\n \n console.log(new Date(), 'Connected to main server as worker', process.env.WORKER_INDEX, process.env.NODE_APP_INSTANCE);\n this.sendWorkerResponse(ws, 'ping');\n \n interval = setInterval(() => {\n if (!lastComm) {\n ws.close();\n }\n else {\n lastComm = null;\n this.sendWorkerResponse(ws, 'ping');\n }\n }, 15000);\n });\n \n ws.on('message', async (rawData: any) => {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Message Recv', rawData);\n }\n \n if (typeof rawData !== 'string') {\n rawData = rawData.toString();\n }\n \n if (rawData === 'ping') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Ping, Sending Pong');\n }\n \n this.sendWorkerResponse(ws, 'pong');\n }\n else if (rawData === 'pong') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Pong');\n }\n lastComm = new Date();\n }\n else {\n let msg: any;\n try {\n msg = JSON.parse(rawData, dateReviver);\n }\n catch (e) {\n console.error('Worker parse error', e);\n return;\n }\n \n if (msg.type === 'task') {\n await this.handleIncomingTask(ws, msg);\n }\n }\n });\n \n ws.on('close', () => {\n console.log(new Date(), 'Disconnected from main server. Reconnecting in 1s...');\n setTimeout(() => {\n this.startWorkerInstance();\n }, 1000);\n \n if (interval) {\n clearInterval(interval);\n }\n clearTimeout(openTimeout);\n });\n \n ws.on('error', (err) => {\n console.error(new Date(), 'Worker WS error:', err);\n ws.close();\n });\n }\n\n private async handleIncomingTask(ws: WebSocket.WebSocket, data: TaskPayload) {\n let { taskId, messageId, method, params, userContext } = data;\n this._runningTasks.push(taskId);\n if (!taskId || !method) {\n // console.log('Invalid task message received', data);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Invalid task'\n });\n\n return;\n }\n\n let timedOut = false;\n let timeoutHandle = setTimeout(async () => {\n timedOut = true;\n console.error(new Date(), 'Worker timed out on task:', taskId, 'Method:', method);\n\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Task timed out'\n });\n\n await this._methodManager.callMethod('insertErrorLog', `Timeout in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n }, (1000 * 60 * 2));\n\n try {\n let managerThis = Object.assign({}, this._methodManager, MethodManager.prototype, {\n id_user: userContext?.id_user || '',\n user: userContext?.user || '',\n id_ws: userContext?.id_ws || ''\n });\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Running method', method);\n }\n\n let result = await this._methodManager.callMethod.call(managerThis, method, ...params);\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Finished method', method);\n }\n\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: false,\n result\n });\n }\n\n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n \n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Done with Task', JSON.stringify(this._runningTasks, null, 2));\n }\n }\n catch (err) {\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n console.error('Worker failed task:', taskId, 'Method:', method, err);\n err.message = 'Worker failed task:' + taskId + ' Method:' + method + ' - ' + err.message;\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: err || 'Unknown error'\n });\n throw err;\n }\n\n console.error(new Date(), `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n await this._methodManager.callMethod('insertErrorLog', `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n }\n }\n\n public sendWorkerResponse(ws, payload: TaskResponse | string) {\n if (typeof payload !== 'string') {\n payload = JSON.stringify(payload);\n }\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Sending', payload);\n }\n\n if (ws && ws.readyState === ws.OPEN) {\n try {\n ws.send(payload);\n }\n catch (err) {\n console.error('Failed to send worker response:', err);\n }\n }\n else if (ws) {\n ws.close();\n }\n }\n}"]}
1
+ {"version":3,"sources":["../../src/managers/worker-server.manager.ts"],"names":["WebSocket","require","common_1","method_manager_1","WorkerServerManager","this","_runningTasks","create","methodManager","serverConfig","workerServerManager","initialize","prototype","_methodManager","_serverConfig","startWorkerInstance","_this","wsUrl","console","log","Date","ws","lastComm","interval","opened","openTimeout","setTimeout","error","terminate","on","clearTimeout","process","env","WORKER_INDEX","NODE_APP_INSTANCE","sendWorkerResponse","setInterval","close","rawData","__awaiter","getEnableDebug","toString","msg","JSON","parse","dateReviver","e","type","handleIncomingTask","_a","sent","clearInterval","err","data","taskId","messageId","method","params","userContext","push","result","timedOut","timeoutHandle","callMethod","concat","stringify","getMethod","timeoutOverride","managerThis","Object","assign","MethodManager","id_user","user","id_ws","call","apply","__spreadArray","__read","_b","filter","a","err_1","message","payload","readyState","OPEN","send","exports"],"mappings":"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","file":"worker-server.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver } from '../util/common';\nimport { MethodManager } from './method.manager';\n\nexport class WorkerServerManager {\n private _methodManager: MethodManager;\n private _serverConfig;\n private _runningTasks = [];\n\n constructor() {}\n \n static create(methodManager: MethodManager, serverConfig) {\n const workerServerManager = new WorkerServerManager();\n workerServerManager.initialize(methodManager, serverConfig);\n return workerServerManager;\n }\n\n public initialize(methodManager: MethodManager, serverConfig) {\n this._methodManager = methodManager;\n this._serverConfig = serverConfig;\n this.startWorkerInstance();\n }\n\n private startWorkerInstance() {\n console.log(new Date(), 'Worker instance started, connecting to main server via WebSocket...');\n \n let wsUrl = (this._serverConfig['SERVER_URL_INTERNAL'] ? this._serverConfig['SERVER_URL_INTERNAL'] : this._serverConfig['SERVER_URL']) + '/websocket?workerToken=' + this._serverConfig['WORKER_TOKEN'];\n const ws = new WebSocket(wsUrl);\n \n let lastComm = null;\n let interval = null;\n let openTimeout = null;\n let opened = false;\n \n // Set timeout if the socket never opens\n openTimeout = setTimeout(() => {\n if (!opened) {\n console.error(new Date(), 'WebSocket connection timeout. Retrying...');\n ws.terminate(); // force close if still connecting\n }\n }, 10000); // 10 seconds timeout\n \n ws.on('open', () => {\n opened = true;\n clearTimeout(openTimeout);\n \n console.log(new Date(), 'Connected to main server as worker', process.env.WORKER_INDEX, process.env.NODE_APP_INSTANCE);\n this.sendWorkerResponse(ws, 'ping');\n \n interval = setInterval(() => {\n if (!lastComm) {\n ws.close();\n }\n else {\n lastComm = null;\n this.sendWorkerResponse(ws, 'ping');\n }\n }, 15000);\n });\n \n ws.on('message', async (rawData: any) => {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Message Recv', rawData);\n }\n \n if (typeof rawData !== 'string') {\n rawData = rawData.toString();\n }\n \n if (rawData === 'ping') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Ping, Sending Pong');\n }\n \n this.sendWorkerResponse(ws, 'pong');\n }\n else if (rawData === 'pong') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Pong');\n }\n lastComm = new Date();\n }\n else {\n let msg: any;\n try {\n msg = JSON.parse(rawData, dateReviver);\n }\n catch (e) {\n console.error('Worker parse error', e);\n return;\n }\n \n if (msg.type === 'task') {\n await this.handleIncomingTask(ws, msg);\n }\n }\n });\n \n ws.on('close', () => {\n console.log(new Date(), 'Disconnected from main server. Reconnecting in 1s...');\n setTimeout(() => {\n this.startWorkerInstance();\n }, 1000);\n \n if (interval) {\n clearInterval(interval);\n }\n clearTimeout(openTimeout);\n });\n \n ws.on('error', (err) => {\n console.error(new Date(), 'Worker WS error:', err);\n ws.close();\n });\n }\n\n private async handleIncomingTask(ws: WebSocket.WebSocket, data: TaskPayload) {\n let { taskId, messageId, method, params, userContext } = data;\n this._runningTasks.push(taskId);\n if (!taskId || !method) {\n // console.log('Invalid task message received', data);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Invalid task'\n });\n\n return;\n }\n\n let timedOut = false;\n let timeoutHandle = setTimeout(async () => {\n timedOut = true;\n console.error(new Date(), 'Worker timed out on task:', taskId, 'Method:', method);\n\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Task timed out'\n });\n\n await this._methodManager.callMethod('insertErrorLog', `Timeout in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n }, this._methodManager.getMethod(method).timeoutOverride || (1000 * 60 * 2));\n\n try {\n let managerThis = Object.assign({}, this._methodManager, MethodManager.prototype, {\n id_user: userContext?.id_user || '',\n user: userContext?.user || '',\n id_ws: userContext?.id_ws || ''\n });\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Running method', method);\n }\n\n let result = await this._methodManager.callMethod.call(managerThis, method, ...params);\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Finished method', method);\n }\n\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: false,\n result\n });\n }\n\n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n \n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Done with Task', JSON.stringify(this._runningTasks, null, 2));\n }\n }\n catch (err) {\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n console.error('Worker failed task:', taskId, 'Method:', method, err);\n err.message = 'Worker failed task:' + taskId + ' Method:' + method + ' - ' + err.message;\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: err || 'Unknown error'\n });\n throw err;\n }\n\n console.error(new Date(), `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n await this._methodManager.callMethod('insertErrorLog', `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n }\n }\n\n public sendWorkerResponse(ws, payload: TaskResponse | string) {\n if (typeof payload !== 'string') {\n payload = JSON.stringify(payload);\n }\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Sending', payload);\n }\n\n if (ws && ws.readyState === ws.OPEN) {\n try {\n ws.send(payload);\n }\n catch (err) {\n console.error('Failed to send worker response:', err);\n }\n }\n else if (ws) {\n ws.close();\n }\n }\n}"]}
@@ -14,4 +14,5 @@ export interface MethodAllModel {
14
14
  workerTaskWeight?: number;
15
15
  skipWorker?: boolean;
16
16
  bypassSession?: boolean;
17
+ timeoutOverride?: number;
17
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.7.117",
3
+ "version": "20.7.119",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
package/util/common.d.ts CHANGED
@@ -26,3 +26,4 @@ export declare function randomString(length: any, chars: any): string;
26
26
  export declare function toTitleCase(str: any): any;
27
27
  export declare function isObject(item: any): boolean;
28
28
  export declare function mergeDeep(target: any, ...sources: any[]): any;
29
+ export declare function generateSearchTokensFromFields(doc: any, fields: string[]): string[];
package/util/common.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},__read=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,i=r.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(o=i.next()).done;)a.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},__values=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&o>=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},__spreadArray=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var o,n=0,i=t.length;n<i;n++)!o&&n in t||((o=o||Array.prototype.slice.call(t,0,n))[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},rusDiff=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeDeep=exports.isObject=exports.toTitleCase=exports.randomString=exports.pad=exports.getBinarySize=exports.deepDiffDetails=exports.applyMongoUpdate=exports.getDeepDiff=exports.mergeUpdates=exports.getMongoMergeUpdatedDoc=exports.getMongoUpdates=exports.dateReviver=exports.deepCopy=exports.floorPrecision=exports.round=exports.roundPrecision=exports.throwErr=exports.buildRbLookups=exports.buildRbSchema=exports.objectIdHexString=void 0,require("rus-diff")),deepDiff=require("deep-diff").diff,deep_object_diff_1=require("deep-object-diff"),moment=require("moment-timezone"),mongodb_1=require("mongodb"),clone=require("clone");function objectIdHexString(){return(new mongodb_1.ObjectId).toHexString()}function buildRbSchema(t){return Object.keys(t).forEach(function(e){t[e].type===Object?(t[e].type="Object",t[e].rbType="Object"):t[e].type===Array?(t[e].type="Array",t[e].rbType="Array"):t[e].type===String?(t[e].type="String",t[e].rbType="String"):t[e].type===Date?(t[e].type="Date",t[e].rbType="Date"):t[e].type===Number?(t[e].type="Number",t[e].rbType="Number"):t[e].type===Boolean&&(t[e].rbType="Boolean",t[e].type="Boolean")}),Object.keys(t).forEach(function(e){delete t[e].type}),t}function buildRbLookups(e,a,t){void 0===t&&(t=[]),e.forEach(function(e){var t,r="",o="",n="",i=toTitleCase(e.lookup.replace(/\_/g," "))+" ("+toTitleCase(e.local_key.replace("id_","").replace(/\_/g," ").replace(/\.\$\./g," -> ").replace(/\./g," -> "))+") (Lookup)",i=(e.local_key.match(/\./)?(t=e.local_key.replace(/\.\$/g,""),o=(n=e.local_key.replace(/^(.+\.).*$/,"$1")).replace(/\.$/,"")):t=e.local_key,n=n+i,a[e.local_key]?a[e.local_key].type!==String&&(r+="--local_key: '"+e.local_key+"' MUST be a String! "):r+="--local_key: '"+e.local_key+"' MUST be a valid schema path! ",{lookup_collection:e.lookup,lookup_collection_alias:i,local_key:t,field_path:o,lookup_as:n,lookup_key:"_id",type:"Object"});a[n]=i,r&&throwErr(r,e,i,n)});for(var r=0;r<t.length;r++)a[t[r]]={},a[t[r]].default_checked=!0,Object.assign(a[t[r]],a.tree[t[r]]);return a}function throwErr(e,t,r,o){void 0===o&&(o=""),console.log("------- ERROR thrown by rbLookups: "),console.log(e),console.log("---item: "),console.log(t),console.log("---Attempted to create rbSchema['"+o+"']: "),console.log(r),process.exit(1)}function roundPrecision(e,t){void 0===t&&(t=0);e=e.toString(),e.includes(".")&&("0"===e[0]&&(t+=1),t-=e.indexOf(".")),t=Math.pow(10,t);return Math.round(parseFloat(e)*t)/t}function round(e,t){void 0===t&&(t=0);t=Math.pow(10,t);return Math.round(e*t+1e-6)/t}function floorPrecision(e,t){void 0===t&&(t=0);e=e.toString(),e.includes(".")&&("0"===e[0]&&(t+=1),t-=e.indexOf(".")),t=Math.pow(10,t);return Math.floor(parseFloat(e)*t)/t}function deepCopy(e){return clone(e)}function dateReviver(e,t){if("string"==typeof t){var r=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(t);if(r)return new Date(Date.UTC(+r[1],+r[2]-1,+r[3],+r[4],+r[5],+r[6].split(".")[0],+r[6].split(".")[1]))}return t}function getMongoUpdates(e,t,r){e.createdAt&&(t.createdAt=e.createdAt),e.updatedAt&&(t.updatedAt=e.updatedAt);e=rusDiff.diff(e,t);return e?(e.$set&&!Object.keys(e.$set).length&&delete e.$set,r&&(e.$inc={__v:1})):r&&(e={$inc:{__v:1}}),e}function getMongoMergeUpdatedDoc(e,t,r){var o=deepCopy(t),t=(o.__v=t.__v,getDeepDiff(r,t));return applyMongoUpdate(o,mergeUpdates(getDeepDiff(r,e),t)),o}function mergeUpdates(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r={$set:{},$unset:{},$inc:{},$push:{},$pull:{}};return e.filter(Boolean).forEach(function(e){e.forEach(function(e){var t=e.path.join(".");switch(e.kind){case"E":handleEditedChange(r,t,e);break;case"A":handleArrayChange(r,t,e)}})}),r}function handleEditedChange(e,t,r){"number"==typeof r.rhs&&(t.includes("quantity")||t.includes("qty"))?e.$inc[t]=(e.$inc[t]||0)+r.rhs-r.lhs:e.$set[t]=r.rhs}function handleArrayChange(e,t,r){"N"===r.item.kind?(e.$push[t]||(e.$push[t]={$each:[]}),e.$push[t].$each.some(function(e){return JSON.stringify(e)===JSON.stringify(r.item.rhs)})||e.$push[t].$each.push(r.item.rhs)):"D"===r.item.kind&&(e.$pull[t]||(e.$pull[t]=[]),e.$pull[t].some(function(e){return JSON.stringify(e)===JSON.stringify(r.item.lhs)})||e.$pull[t].push(r.item.lhs))}function getDeepDiff(e,t){return delete e._id,delete e.__v,e.updatedAt&&delete e.updatedAt,e.createdAt&&delete e.createdAt,delete t._id,delete t.__v,t.updatedAt&&delete t.updatedAt,t.createdAt&&delete t.createdAt,deepDiff(e,t)}function applyMongoUpdate(e,t){var r=deepCopy(e);return t&&(t.$rename&&handleRename(e,t.$rename),t.$set&&handleSet(e,t.$set),t.$inc&&handleInc(e,t.$inc),t.$unset&&handleUnset(e,t.$unset),t.$pull&&handlePull(e,r,t.$pull),t.$push)&&handlePush(e,t.$push),e}function handleRename(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r),2),i=n[0],n=n[1],a=__read(resolve(e,o),2),l=a[0],a=a[1];i&&1===n.length?l&&1===a.length?(l[a[0]]=i[n[0]],delete i[n[0]]):logError(l,a,e,o):logError(i,n,e,r)}}function handleSet(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r,{force:!0}),2),i=n[0],n=n[1];i&&1===n.length?i[n[0]]=o:logError(i,n,e,r)}}function handleInc(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r,{force:!0}),2),i=n[0],n=n[1];i&&1===n.length?("number"!=typeof i[n[0]]&&(i[n[0]]=0),i[n[0]]+=o):logError(i,n,e,r)}}function handleUnset(e,t){for(var r in t){var o=__read(resolve(e,r),2),n=o[0],o=o[1];n&&1===o.length?delete n[o[0]]:logError(n,o,e,r)}}function handlePull(i,a,e){var t,r,l;for(l in e){var o=e[l];try{t=void 0;for(var n=__values(o),s=n.next();!s.done;s=n.next())!function(t){var e=__read(resolve(i,l),2),r=e[0],e=e[1],o=__read(resolve(a,l),2),n=o[0],o=o[1];r&&1===e.length?-1!==(n=n[o[0]].findIndex(function(e){return JSON.stringify(e)===JSON.stringify(t)}))&&r[e[0]].splice(n,1):logError(r,e,i,l)}(s.value)}catch(e){t={error:e}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}}}function handlePush(e,t){var r,o,n;for(n in t){var i=t[n];try{r=void 0;for(var a=__values(i),l=a.next();!l.done;l=a.next()){var s=l.value,c=__read(resolve(e,n),2),d=c[0],p=c[1];d&&1===p.length?d[p[0]].push(s):logError(d,p,e,n)}}catch(e){r={error:e}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}}}function logError(e,t,r,o){console.log("Error",e+"/"+t+" - couldn't resolve for "+JSON.stringify(r)+" "+o)}function resolve(e,t,r){void 0===r&&(r={});for(var o=arrize(t),n=[],i=(0<o.length&&n.unshift(o.pop()),e);0<o.length;){var a=o.shift();if(void 0===i[a]){if(!r.force){n.unshift(a),n=o.concat(n);break}var l="number"==typeof o[0],s=0===o.length&&"number"==typeof n[0];i[a]=l||s?[]:{}}i=i[a]}return[i,n]}function arrize(e,t){return void 0===t&&(t="."),Array.isArray(e)?e.slice():null==e||!1===e||""===e?[]:e.toString().split(t).map(function(e){return[void 0,null,!1,""].includes(e)?null:e.toString()}).filter(function(e){return null!==e})}function deepDiffDetails(e,t){var r=deepCopy(e),o=deepCopy(t),n=(0,deep_object_diff_1.detailedDiff)(r,o),i="",l=function(t){return t instanceof Date?moment(t).format("llll"):"object"==typeof t&&null!==t?(Object.keys(t).filter(function(e){return e.startsWith("_id")||e.startsWith("id_")}).forEach(function(e){delete t[e]}),JSON.stringify(t)):"string"==typeof t?'"'.concat(t,'"'):String(t)},s=function(o,n){if(null===o||null===n||"object"!=typeof o||"object"!=typeof n)return"from: ".concat(l(o)," to: ").concat(l(n));if(Array.isArray(o)||Array.isArray(n)){for(var e=Array.isArray(o)?o:[],t=Array.isArray(n)?n:[],r=[],i=Math.max(e.length,t.length),a=0;a<i;a++)e[a]&&!t[a]?r.push("Removed at index ".concat(a,": ").concat(l(e[a]))):!e[a]&&t[a]?r.push("Added at index ".concat(a,": ").concat(l(t[a]))):e[a]&&t[a]&&JSON.stringify(e[a])!==JSON.stringify(t[a])&&r.push("Changed at index ".concat(a,": {").concat(s(e[a],t[a]),"}"));return r.join(", ")}return Object.keys(__assign(__assign({},o),n)).filter(function(e){return!e.startsWith("_id")&&!e.startsWith("id_")}).map(function(e){var t=o?o[e]:void 0,r=n?n[e]:void 0;return"".concat(toTitleCase(e),": ").concat(s(t,r))}).join(", ")};return["added","deleted","updated"].forEach(function(t){var e;0<Object.keys(n[t]).length&&(e=Object.keys(n[t]).filter(function(e){return"added"===t||("deleted"===t?!n.added[e]:!n.added[e]&&!n.deleted[e])}).filter(function(e){return!e.startsWith("_id")&&!e.startsWith("id_")}).map(function(e){return"\n".concat(toTitleCase(e),": ").concat(s(r[e],o[e]))}).join(","),i+=e?"".concat(e):"")}),i}function getBinarySize(e){return e?Buffer.byteLength(e,"utf8"):0}function pad(e,t){for(var r=e+"";r.length<t;)r="0"+r;return r}function randomString(e,t){for(var r="",o=e;0<o;--o)r+=t[Math.floor(Math.random()*t.length)];return r}function toTitleCase(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}function mergeDeep(e){for(var t,r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];if(!r.length)return e;var n=r.shift();if(isObject(e)&&isObject(n))for(var i in n)isObject(n[i])?(e[i]||Object.assign(e,((t={})[i]={},t)),mergeDeep(e[i],n[i])):Object.assign(e,((t={})[i]=n[i],t));return mergeDeep.apply(void 0,__spreadArray([e],__read(r),!1))}exports.objectIdHexString=objectIdHexString,exports.buildRbSchema=buildRbSchema,exports.buildRbLookups=buildRbLookups,exports.throwErr=throwErr,exports.roundPrecision=roundPrecision,exports.round=round,exports.floorPrecision=floorPrecision,exports.deepCopy=deepCopy,exports.dateReviver=dateReviver,exports.getMongoUpdates=getMongoUpdates,exports.getMongoMergeUpdatedDoc=getMongoMergeUpdatedDoc,exports.mergeUpdates=mergeUpdates,exports.getDeepDiff=getDeepDiff,exports.applyMongoUpdate=applyMongoUpdate,exports.deepDiffDetails=deepDiffDetails,exports.getBinarySize=getBinarySize,exports.pad=pad,exports.randomString=randomString,exports.toTitleCase=toTitleCase,exports.isObject=isObject,exports.mergeDeep=mergeDeep;
1
+ "use strict";var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},__read=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,i=r.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(o=i.next()).done;)a.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},__values=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&o>=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},__spreadArray=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var o,n=0,i=t.length;n<i;n++)!o&&n in t||((o=o||Array.prototype.slice.call(t,0,n))[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},rusDiff=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateSearchTokensFromFields=exports.mergeDeep=exports.isObject=exports.toTitleCase=exports.randomString=exports.pad=exports.getBinarySize=exports.deepDiffDetails=exports.applyMongoUpdate=exports.getDeepDiff=exports.mergeUpdates=exports.getMongoMergeUpdatedDoc=exports.getMongoUpdates=exports.dateReviver=exports.deepCopy=exports.floorPrecision=exports.round=exports.roundPrecision=exports.throwErr=exports.buildRbLookups=exports.buildRbSchema=exports.objectIdHexString=void 0,require("rus-diff")),deepDiff=require("deep-diff").diff,deep_object_diff_1=require("deep-object-diff"),moment=require("moment-timezone"),mongodb_1=require("mongodb"),clone=require("clone");function objectIdHexString(){return(new mongodb_1.ObjectId).toHexString()}function buildRbSchema(t){return Object.keys(t).forEach(function(e){t[e].type===Object?(t[e].type="Object",t[e].rbType="Object"):t[e].type===Array?(t[e].type="Array",t[e].rbType="Array"):t[e].type===String?(t[e].type="String",t[e].rbType="String"):t[e].type===Date?(t[e].type="Date",t[e].rbType="Date"):t[e].type===Number?(t[e].type="Number",t[e].rbType="Number"):t[e].type===Boolean&&(t[e].rbType="Boolean",t[e].type="Boolean")}),Object.keys(t).forEach(function(e){delete t[e].type}),t}function buildRbLookups(e,a,t){void 0===t&&(t=[]),e.forEach(function(e){var t,r="",o="",n="",i=toTitleCase(e.lookup.replace(/\_/g," "))+" ("+toTitleCase(e.local_key.replace("id_","").replace(/\_/g," ").replace(/\.\$\./g," -> ").replace(/\./g," -> "))+") (Lookup)",i=(e.local_key.match(/\./)?(t=e.local_key.replace(/\.\$/g,""),o=(n=e.local_key.replace(/^(.+\.).*$/,"$1")).replace(/\.$/,"")):t=e.local_key,n=n+i,a[e.local_key]?a[e.local_key].type!==String&&(r+="--local_key: '"+e.local_key+"' MUST be a String! "):r+="--local_key: '"+e.local_key+"' MUST be a valid schema path! ",{lookup_collection:e.lookup,lookup_collection_alias:i,local_key:t,field_path:o,lookup_as:n,lookup_key:"_id",type:"Object"});a[n]=i,r&&throwErr(r,e,i,n)});for(var r=0;r<t.length;r++)a[t[r]]={},a[t[r]].default_checked=!0,Object.assign(a[t[r]],a.tree[t[r]]);return a}function throwErr(e,t,r,o){void 0===o&&(o=""),console.log("------- ERROR thrown by rbLookups: "),console.log(e),console.log("---item: "),console.log(t),console.log("---Attempted to create rbSchema['"+o+"']: "),console.log(r),process.exit(1)}function roundPrecision(e,t){void 0===t&&(t=0);e=e.toString(),e.includes(".")&&("0"===e[0]&&(t+=1),t-=e.indexOf(".")),t=Math.pow(10,t);return Math.round(parseFloat(e)*t)/t}function round(e,t){void 0===t&&(t=0);t=Math.pow(10,t);return Math.round(e*t+1e-6)/t}function floorPrecision(e,t){void 0===t&&(t=0);e=e.toString(),e.includes(".")&&("0"===e[0]&&(t+=1),t-=e.indexOf(".")),t=Math.pow(10,t);return Math.floor(parseFloat(e)*t)/t}function deepCopy(e){return clone(e)}function dateReviver(e,t){if("string"==typeof t){var r=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(t);if(r)return new Date(Date.UTC(+r[1],+r[2]-1,+r[3],+r[4],+r[5],+r[6].split(".")[0],+r[6].split(".")[1]))}return t}function getMongoUpdates(e,t,r){e.createdAt&&(t.createdAt=e.createdAt),e.updatedAt&&(t.updatedAt=e.updatedAt);e=rusDiff.diff(e,t);return e?(e.$set&&!Object.keys(e.$set).length&&delete e.$set,r&&(e.$inc={__v:1})):r&&(e={$inc:{__v:1}}),e}function getMongoMergeUpdatedDoc(e,t,r){var o=deepCopy(t),t=(o.__v=t.__v,getDeepDiff(r,t));return applyMongoUpdate(o,mergeUpdates(getDeepDiff(r,e),t)),o}function mergeUpdates(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r={$set:{},$unset:{},$inc:{},$push:{},$pull:{}};return e.filter(Boolean).forEach(function(e){e.forEach(function(e){var t=e.path.join(".");switch(e.kind){case"E":handleEditedChange(r,t,e);break;case"A":handleArrayChange(r,t,e)}})}),r}function handleEditedChange(e,t,r){"number"==typeof r.rhs&&(t.includes("quantity")||t.includes("qty"))?e.$inc[t]=(e.$inc[t]||0)+r.rhs-r.lhs:e.$set[t]=r.rhs}function handleArrayChange(e,t,r){"N"===r.item.kind?(e.$push[t]||(e.$push[t]={$each:[]}),e.$push[t].$each.some(function(e){return JSON.stringify(e)===JSON.stringify(r.item.rhs)})||e.$push[t].$each.push(r.item.rhs)):"D"===r.item.kind&&(e.$pull[t]||(e.$pull[t]=[]),e.$pull[t].some(function(e){return JSON.stringify(e)===JSON.stringify(r.item.lhs)})||e.$pull[t].push(r.item.lhs))}function getDeepDiff(e,t){return delete e._id,delete e.__v,e.updatedAt&&delete e.updatedAt,e.createdAt&&delete e.createdAt,delete t._id,delete t.__v,t.updatedAt&&delete t.updatedAt,t.createdAt&&delete t.createdAt,deepDiff(e,t)}function applyMongoUpdate(e,t){var r=deepCopy(e);return t&&(t.$rename&&handleRename(e,t.$rename),t.$set&&handleSet(e,t.$set),t.$inc&&handleInc(e,t.$inc),t.$unset&&handleUnset(e,t.$unset),t.$pull&&handlePull(e,r,t.$pull),t.$push)&&handlePush(e,t.$push),e}function handleRename(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r),2),i=n[0],n=n[1],a=__read(resolve(e,o),2),l=a[0],a=a[1];i&&1===n.length?l&&1===a.length?(l[a[0]]=i[n[0]],delete i[n[0]]):logError(l,a,e,o):logError(i,n,e,r)}}function handleSet(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r,{force:!0}),2),i=n[0],n=n[1];i&&1===n.length?i[n[0]]=o:logError(i,n,e,r)}}function handleInc(e,t){for(var r in t){var o=t[r],n=__read(resolve(e,r,{force:!0}),2),i=n[0],n=n[1];i&&1===n.length?("number"!=typeof i[n[0]]&&(i[n[0]]=0),i[n[0]]+=o):logError(i,n,e,r)}}function handleUnset(e,t){for(var r in t){var o=__read(resolve(e,r),2),n=o[0],o=o[1];n&&1===o.length?delete n[o[0]]:logError(n,o,e,r)}}function handlePull(i,a,e){var t,r,l;for(l in e){var o=e[l];try{t=void 0;for(var n=__values(o),s=n.next();!s.done;s=n.next())!function(t){var e=__read(resolve(i,l),2),r=e[0],e=e[1],o=__read(resolve(a,l),2),n=o[0],o=o[1];r&&1===e.length?-1!==(n=n[o[0]].findIndex(function(e){return JSON.stringify(e)===JSON.stringify(t)}))&&r[e[0]].splice(n,1):logError(r,e,i,l)}(s.value)}catch(e){t={error:e}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}}}function handlePush(e,t){var r,o,n;for(n in t){var i=t[n];try{r=void 0;for(var a=__values(i),l=a.next();!l.done;l=a.next()){var s=l.value,c=__read(resolve(e,n),2),d=c[0],p=c[1];d&&1===p.length?d[p[0]].push(s):logError(d,p,e,n)}}catch(e){r={error:e}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}}}function logError(e,t,r,o){console.log("Error",e+"/"+t+" - couldn't resolve for "+JSON.stringify(r)+" "+o)}function resolve(e,t,r){void 0===r&&(r={});for(var o=arrize(t),n=[],i=(0<o.length&&n.unshift(o.pop()),e);0<o.length;){var a=o.shift();if(void 0===i[a]){if(!r.force){n.unshift(a),n=o.concat(n);break}var l="number"==typeof o[0],s=0===o.length&&"number"==typeof n[0];i[a]=l||s?[]:{}}i=i[a]}return[i,n]}function arrize(e,t){return void 0===t&&(t="."),Array.isArray(e)?e.slice():null==e||!1===e||""===e?[]:e.toString().split(t).map(function(e){return[void 0,null,!1,""].includes(e)?null:e.toString()}).filter(function(e){return null!==e})}function deepDiffDetails(e,t){var r=deepCopy(e),o=deepCopy(t),n=(0,deep_object_diff_1.detailedDiff)(r,o),i="",l=function(t){return t instanceof Date?moment(t).format("llll"):"object"==typeof t&&null!==t?(Object.keys(t).filter(function(e){return e.startsWith("_id")||e.startsWith("id_")}).forEach(function(e){delete t[e]}),JSON.stringify(t)):"string"==typeof t?'"'.concat(t,'"'):String(t)},s=function(o,n){if(null===o||null===n||"object"!=typeof o||"object"!=typeof n)return"from: ".concat(l(o)," to: ").concat(l(n));if(Array.isArray(o)||Array.isArray(n)){for(var e=Array.isArray(o)?o:[],t=Array.isArray(n)?n:[],r=[],i=Math.max(e.length,t.length),a=0;a<i;a++)e[a]&&!t[a]?r.push("Removed at index ".concat(a,": ").concat(l(e[a]))):!e[a]&&t[a]?r.push("Added at index ".concat(a,": ").concat(l(t[a]))):e[a]&&t[a]&&JSON.stringify(e[a])!==JSON.stringify(t[a])&&r.push("Changed at index ".concat(a,": {").concat(s(e[a],t[a]),"}"));return r.join(", ")}return Object.keys(__assign(__assign({},o),n)).filter(function(e){return!e.startsWith("_id")&&!e.startsWith("id_")}).map(function(e){var t=o?o[e]:void 0,r=n?n[e]:void 0;return"".concat(toTitleCase(e),": ").concat(s(t,r))}).join(", ")};return["added","deleted","updated"].forEach(function(t){var e;0<Object.keys(n[t]).length&&(e=Object.keys(n[t]).filter(function(e){return"added"===t||("deleted"===t?!n.added[e]:!n.added[e]&&!n.deleted[e])}).filter(function(e){return!e.startsWith("_id")&&!e.startsWith("id_")}).map(function(e){return"\n".concat(toTitleCase(e),": ").concat(s(r[e],o[e]))}).join(","),i+=e?"".concat(e):"")}),i}function getBinarySize(e){return e?Buffer.byteLength(e,"utf8"):0}function pad(e,t){for(var r=e+"";r.length<t;)r="0"+r;return r}function randomString(e,t){for(var r="",o=e;0<o;--o)r+=t[Math.floor(Math.random()*t.length)];return r}function toTitleCase(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}function mergeDeep(e){for(var t,r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];if(!r.length)return e;var n=r.shift();if(isObject(e)&&isObject(n))for(var i in n)isObject(n[i])?(e[i]||Object.assign(e,((t={})[i]={},t)),mergeDeep(e[i],n[i])):Object.assign(e,((t={})[i]=n[i],t));return mergeDeep.apply(void 0,__spreadArray([e],__read(r),!1))}function generateSearchTokensFromFields(t,e){var r=new Set;return e.forEach(function(e){e=t[e];"string"==typeof e&&e.trim().length&&e.toLowerCase().split(/\s+/).forEach(function(e){for(var t=3;t<=e.length;t++)r.add(e.slice(0,t))})}),Array.from(r)}exports.objectIdHexString=objectIdHexString,exports.buildRbSchema=buildRbSchema,exports.buildRbLookups=buildRbLookups,exports.throwErr=throwErr,exports.roundPrecision=roundPrecision,exports.round=round,exports.floorPrecision=floorPrecision,exports.deepCopy=deepCopy,exports.dateReviver=dateReviver,exports.getMongoUpdates=getMongoUpdates,exports.getMongoMergeUpdatedDoc=getMongoMergeUpdatedDoc,exports.mergeUpdates=mergeUpdates,exports.getDeepDiff=getDeepDiff,exports.applyMongoUpdate=applyMongoUpdate,exports.deepDiffDetails=deepDiffDetails,exports.getBinarySize=getBinarySize,exports.pad=pad,exports.randomString=randomString,exports.toTitleCase=toTitleCase,exports.isObject=isObject,exports.mergeDeep=mergeDeep,exports.generateSearchTokensFromFields=generateSearchTokensFromFields;
2
2
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/common.ts"],"names":["rusDiff","require","deepDiff","diff","deep_object_diff_1","moment","mongodb_1","clone","objectIdHexString","ObjectId","toHexString","buildRbSchema","rbSchema","Object","keys","forEach","key","type","rbType","Array","String","Date","Number","Boolean","buildRbLookups","rbLookups","defaultSchema","default_checked_array","lkp","localKey","errString","localKeyDir","localKeyDirDot","collectionAlias","toTitleCase","lookup","replace","local_key","lookupNode","match","newPropertyName","lookup_collection","lookup_collection_alias","field_path","lookup_as","lookup_key","throwErr","ii","length","assign","err","console","log","process","exit","roundPrecision","value","precision","stringValue","toString","includes","indexOf","exponent","Math","pow","round","parseFloat","power","floorPrecision","floor","deepCopy","dateReviver","a","exec","UTC","split","getMongoUpdates","currDoc","modifiedDoc","incVersion","createdAt","updatedAt","updates","$set","$inc","__v","getMongoMergeUpdatedDoc","f_doc","currentDoc","oldDoc","upDoc","diff_1","getDeepDiff","applyMongoUpdate","mergeUpdates","updatesToMerge","_i","arguments","merged","$unset","$push","$pull","filter","anUpdate","change","path","join","kind","handleEditedChange","handleArrayChange","rhs","lhs","item","$each","some","JSON","stringify","push","doc1","doc2","_id","uDoc","delta","orig","$rename","handleRename","handleSet","handleInc","handleUnset","handlePull","handlePush","renameMap","k","v","_a","__read","resolve","o1","n1","_b","o2","n2","logError","setMap","force","o","n","incMap","unsetMap","pullMap","pathk","pullValues","e_1","pullValues_1","__values","pullValues_1_1","next","done","vk","_c","index","findIndex","z","splice","pushMap","pushValues","e_2","pushValues_1","pushValues_1_1","options","stack","arrize","last","e","unshift","pop","shift","concat","isNextNum","isLastNum","glue","isArray","slice","map","deepDiffDetails","object1","object2","obj1","obj2","detailedDiff","diffString","formatValue","format","startsWith","formatObjectDiff","customArrayDiff","arr1","arr2","arrayDiffResults","maxLength","max","i","__assign","obj1Val","undefined","obj2Val","diffType","getBinarySize","string","Buffer","byteLength","pad","num","size","s","randomString","chars","result","random","str","txt","charAt","toUpperCase","substr","toLowerCase","isObject","mergeDeep","target","sources","source","apply","__spreadArray","exports"],"mappings":"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","file":"common.js","sourcesContent":["/* eslint-disable no-restricted-properties */\nlet rusDiff = require('rus-diff');\nlet deepDiff = require('deep-diff').diff;\nimport { detailedDiff } from 'deep-object-diff';\nimport * as moment from 'moment-timezone';\nimport { ObjectId } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nlet clone = require('clone');\n\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\n}\n\nexport function buildRbSchema(rbSchema: any) {\n\tObject.keys(rbSchema).forEach(key => {\n\t\tif (rbSchema[key].type === Object) {\n\t\t\trbSchema[key].type = 'Object';\n\t\t\trbSchema[key].rbType = 'Object';\n\t\t}\n\t\telse if (rbSchema[key].type === Array) {\n\t\t\trbSchema[key].type = 'Array';\n\t\t\trbSchema[key].rbType = 'Array';\n\t\t}\n\t\telse if (rbSchema[key].type === String) {\n\t\t\trbSchema[key].type = 'String';\n\t\t\trbSchema[key].rbType = 'String';\n\t\t}\n\t\telse if (rbSchema[key].type === Date) {\n\t\t\trbSchema[key].type = 'Date';\n\t\t\trbSchema[key].rbType = 'Date';\n\t\t}\n\t\telse if (rbSchema[key].type === Number) {\n\t\t\trbSchema[key].type = 'Number';\n\t\t\trbSchema[key].rbType = 'Number';\n\t\t}\n\t\telse if (rbSchema[key].type === Boolean) {\n\t\t\trbSchema[key].rbType = 'Boolean';\n\t\t\trbSchema[key].type = 'Boolean';\n\t\t}\n\t});\n\n\tObject.keys(rbSchema).forEach(key => {\n\t\tdelete rbSchema[key].type;\n\t});\n\n\treturn rbSchema;\n}\n\nexport function buildRbLookups(rbLookups: LookupTables[], defaultSchema: object, default_checked_array: string[] = []) {\n\t// Remember: lkp.local_key will be removed later on, because it has 'id_'\n\t\n\trbLookups.forEach(lkp => {\n\t\tlet errString = '';\n\t\tlet localKey, newPropertyName;\n\t\tlet localKeyDir = '';\n\t\tlet localKeyDirDot = '';\n\t\tlet collectionAlias = toTitleCase(lkp.lookup.replace(/\\_/g, ' ')) + ' (' + toTitleCase(lkp.local_key.replace('id_', '').replace(/\\_/g, ' ').replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ')) + ') (Lookup)';\n\n\t\tif (lkp.local_key.match(/\\./)) {\n\t\t\tlocalKey = lkp.local_key.replace(/\\.\\$/g, '');\n\t\t\tlocalKeyDirDot = lkp.local_key.replace(/^(.+\\.).*$/, '$1');\n\t\t\tlocalKeyDir = localKeyDirDot.replace(/\\.$/, '');\n\t\t}\n\t\telse {\n\t\t\t// local_key is a root leaf node.\n\t\t\tlocalKey = lkp.local_key;\n\t\t}\n\t\tnewPropertyName = localKeyDirDot + collectionAlias;\n\t\t\n\t\tif (!defaultSchema[lkp.local_key]) {\n\t\t\terrString += '--local_key: \\'' + lkp.local_key + '\\' MUST be a valid schema path! ';\n\t\t}\n\t\telse if (defaultSchema[lkp.local_key].type !== String) {\n\t\t\terrString += '--local_key: \\'' + lkp.local_key + '\\' MUST be a String! ';\n\t\t}\n\t\tlet lookupNode = {\n\t\t\tlookup_collection: lkp.lookup,\n\t\t\tlookup_collection_alias: collectionAlias,\n\t\t\tlocal_key: localKey,\n\t\t\tfield_path: localKeyDir,\n\t\t\tlookup_as: newPropertyName,\n\t\t\tlookup_key: '_id',\n\t\t\ttype: 'Object',\n\t\t};\n\n\t\tdefaultSchema[newPropertyName] = lookupNode;\n\n\t\tif (errString) {\n\t\t\tthrowErr(errString, lkp, lookupNode, newPropertyName);\n\t\t}\n\t});\n\n\tfor (let ii = 0; ii < default_checked_array.length; ii++) {\n\t\tdefaultSchema[default_checked_array[ii]] = {};\n\t\tdefaultSchema[default_checked_array[ii]]['default_checked'] = true;\n\t\tObject.assign(defaultSchema[default_checked_array[ii]], defaultSchema['tree'][default_checked_array[ii]]);\n\t}\n\n\treturn defaultSchema;\n}\n\nexport function throwErr(err: any, lkp, lookupNode, newPropertyName = '') {\n\t// err could be from a try/throw/catch\n\tconsole.log('------- ERROR thrown by rbLookups: ');\n\tconsole.log(err);\n\tconsole.log('---item: ');\n\tconsole.log(lkp);\n\tconsole.log('---Attempted to create rbSchema[\\'' + newPropertyName + '\\']: ');\n\tconsole.log(lookupNode);\n\tprocess.exit(1);\n}\n\nexport function roundPrecision(value: number, precision = 0) {\n\tlet stringValue = value.toString();\n\t\n\tif (stringValue.includes('.')) {\n\t\tif (stringValue[0] === '0') {\n\t\t\tprecision += 1;\n\t\t}\n\t\t\n\t\tprecision -= stringValue.indexOf('.');\n\t}\n\n\tconst exponent = Math.pow(10, precision);\n\treturn Math.round(parseFloat(stringValue) * exponent) / exponent;\n}\n\nexport function round(value, precision = 0) {\n\tconst power = Math.pow(10, precision);\n\tconst adjustment = 1e-6;\n\treturn Math.round( (value * power) + adjustment) / power;\n}\n\nexport function floorPrecision(value: number, precision = 0) {\n\tlet stringValue = value.toString();\n\t\n\tif (stringValue.includes('.')) {\n\t\tif (stringValue[0] === '0') {\n\t\t\tprecision += 1;\n\t\t}\n\t\t\n\t\tprecision -= stringValue.indexOf('.');\n\t}\n\n\tconst exponent = Math.pow(10, precision);\n\treturn Math.floor(parseFloat(stringValue) * exponent) / exponent;\n}\n\nexport function deepCopy(value) {\n\treturn clone(value);\n}\n\nexport function dateReviver(key, value) {\n\tif (typeof value === 'string') {\n\t\tlet a = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t\tif (a) {\n\t\t\treturn new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6].split('.')[0], +a[6].split('.')[1]));\n\t\t}\n\t}\n\treturn value;\n}\n\nexport function getMongoUpdates(currDoc, modifiedDoc, incVersion) {\n\tif (currDoc.createdAt) {\n\t\tmodifiedDoc.createdAt = currDoc.createdAt;\n\t}\n\n\tif (currDoc.updatedAt) {\n\t\tmodifiedDoc.updatedAt = currDoc.updatedAt;\n\t}\n\n\tlet updates = rusDiff.diff(currDoc, modifiedDoc);\n\n\tif (updates) {\n\t\tif (updates.$set && !Object.keys(updates.$set).length) {\n\t\t\tdelete updates.$set;\n\t\t}\n\n\t\tif (incVersion) {\n\t\t\tupdates.$inc = {__v: 1};\n\t\t}\n\t}\n\telse {\n\t\tif (incVersion) {\n\t\t\tupdates = {\n\t\t\t\t$inc: {__v: 1}\n\t\t\t};\n\t\t}\n\t}\n\n\treturn updates;\n}\n\nexport function getMongoMergeUpdatedDoc(f_doc, currentDoc, oldDoc) {\n\tlet upDoc = deepCopy(currentDoc); // was oldDoc\n\tupDoc.__v = currentDoc.__v;\n\n\tlet diff_1 = getDeepDiff(oldDoc, currentDoc);\n\tlet diff_2 = getDeepDiff(oldDoc, f_doc);\n\n\tlet updates = mergeUpdates(diff_2, diff_1);\n\tapplyMongoUpdate(upDoc, updates);\n\treturn upDoc;\n}\n\n\nexport function mergeUpdates(...updatesToMerge) {\n const merged = {\n $set: {},\n $unset: {},\n $inc: {},\n $push: {},\n $pull: {}\n };\n\n updatesToMerge.filter(Boolean).forEach(anUpdate => {\n anUpdate.forEach(change => {\n const path = change.path.join('.');\n\n switch (change.kind) {\n case 'E':\n handleEditedChange(merged, path, change);\n break;\n case 'A':\n handleArrayChange(merged, path, change);\n break;\n default:\n break;\n }\n });\n });\n\n return merged;\n}\n\nfunction handleEditedChange(merged, path, change) {\n\t// Later diffs override earlier ones\n\tif (typeof(change.rhs) === 'number' && (path.includes('quantity') || path.includes('qty'))) {\n\t\tmerged.$inc[path] = (merged.$inc[path] || 0) + change.rhs - change.lhs;\n\t}\n\telse {\n\t\tmerged.$set[path] = change.rhs;\n\t}\n}\n\n\nfunction handleArrayChange(merged, path, change) {\n\tif (change.item.kind === 'N') {\n\t\tif (!merged.$push[path]) merged.$push[path] = { $each: [] };\n\n\t\tif (!merged.$push[path].$each.some(a => JSON.stringify(a) === JSON.stringify(change.item.rhs))) {\n\t\t\tmerged.$push[path].$each.push(change.item.rhs);\n\t\t}\n\t}\n\telse if (change.item.kind === 'D') {\n\t\tif (!merged.$pull[path]) merged.$pull[path] = [];\n\n\t\tif (!merged.$pull[path].some(a => JSON.stringify(a) === JSON.stringify(change.item.lhs))) {\n\t\t\tmerged.$pull[path].push(change.item.lhs);\n\t\t}\n\t}\n}\n\nexport function getDeepDiff(doc1, doc2) {\n\tdelete doc1._id;\n\tdelete doc1.__v;\n\n\tif (doc1.updatedAt) {\n\t\tdelete doc1.updatedAt;\n\t}\n\n\tif (doc1.createdAt) {\n\t\tdelete doc1.createdAt;\n\t}\n\n\tdelete doc2._id;\n\tdelete doc2.__v;\n\n\tif (doc2.updatedAt) {\n\t\tdelete doc2.updatedAt;\n\t}\n\n\tif (doc2.createdAt) {\n\t\tdelete doc2.createdAt;\n\t}\n\n\treturn deepDiff(doc1, doc2);\n}\n\nexport function applyMongoUpdate(uDoc: any, delta: any): any {\n const orig = deepCopy(uDoc);\n\n if (delta) {\n if (delta.$rename) handleRename(uDoc, delta.$rename);\n if (delta.$set) handleSet(uDoc, delta.$set);\n if (delta.$inc) handleInc(uDoc, delta.$inc);\n if (delta.$unset) handleUnset(uDoc, delta.$unset);\n if (delta.$pull) handlePull(uDoc, orig, delta.$pull);\n if (delta.$push) handlePush(uDoc, delta.$push);\n }\n\n return uDoc;\n}\n\nfunction handleRename(uDoc: any, renameMap: any) {\n for (const k in renameMap) {\n const v = renameMap[k];\n const [o1, n1] = resolve(uDoc, k);\n const [o2, n2] = resolve(uDoc, v);\n if (o1 && n1.length === 1) {\n if (o2 && n2.length === 1) {\n o2[n2[0]] = o1[n1[0]];\n delete o1[n1[0]];\n } else {\n logError(o2, n2, uDoc, v);\n }\n } else {\n logError(o1, n1, uDoc, k);\n }\n }\n}\n\nfunction handleSet(uDoc: any, setMap: any) {\n for (const k in setMap) {\n const v = setMap[k];\n const [o, n] = resolve(uDoc, k, { force: true });\n if (o && n.length === 1) {\n o[n[0]] = v;\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handleInc(uDoc: any, incMap: any) {\n for (const k in incMap) {\n const v = incMap[k];\n const [o, n] = resolve(uDoc, k, { force: true });\n if (o && n.length === 1) {\n\t\t\tif (typeof o[n[0]] !== 'number') {\n\t\t\t\to[n[0]] = 0;\n\t\t\t}\n\t\t\to[n[0]] += v;\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handleUnset(uDoc: any, unsetMap: any) {\n for (const k in unsetMap) {\n const [o, n] = resolve(uDoc, k);\n if (o && n.length === 1) {\n delete o[n[0]];\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handlePull(uDoc: any, orig: any, pullMap: any) {\n for (const pathk in pullMap) {\n const pullValues = pullMap[pathk];\n for (let vk of pullValues) {\n const [o, n] = resolve(uDoc, pathk);\n const [o2, n2] = resolve(orig, pathk);\n if (o && n.length === 1) {\n\t\t\t\tconst index = (<Array<any>>o2[n2[0]]).findIndex(z => JSON.stringify(z) === JSON.stringify(vk));\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\to[n[0]].splice(index, 1);\n\t\t\t\t}\n } else {\n logError(o, n, uDoc, pathk);\n }\n }\n }\n}\n\nfunction handlePush(uDoc: any, pushMap: any) {\n for (const pathk in pushMap) {\n const pushValues = pushMap[pathk];\n for (let vk of pushValues) {\n const [o, n] = resolve(uDoc, pathk);\n if (o && n.length === 1) {\n o[n[0]].push(vk);\n } else {\n logError(o, n, uDoc, pathk);\n }\n }\n }\n}\n\nfunction logError(o: any, n: any, uDoc: any, key: any) {\n console.log('Error', o + '/' + n + ' - couldn\\'t resolve for ' + JSON.stringify(uDoc) + ' ' + key);\n}\n\nfunction resolve(a: any, path: string, options: any = {}): [any, any] {\n const stack = arrize(path);\n let last = [];\n\n if (stack.length > 0) {\n last.unshift(stack.pop());\n }\n\n let e = a;\n while (stack.length > 0) {\n const k = stack.shift();\n if (e[k] !== void 0) {\n e = e[k];\n } else {\n if (!options.force) {\n last.unshift(k);\n last = stack.concat(last);\n break;\n }\n const isNextNum = typeof stack[0] === 'number';\n const isLastNum = stack.length === 0 && typeof last[0] === 'number';\n e[k] = isNextNum || isLastNum ? [] : {};\n e = e[k];\n }\n }\n\n return [e, last];\n}\n\nfunction arrize(path: any, glue: string = '.'): string[] {\n if (Array.isArray(path)) {\n return path.slice();\n }\n\n if (path === void 0 || path === null || path === false || path === '') {\n return [];\n }\n\n return path.toString().split(glue)\n .map(e => {\n if ([void 0, null, false, ''].includes(e)) {\n return null;\n }\n return e.toString();\n })\n .filter(e => e !== null);\n}\n\nexport function deepDiffDetails(object1: Object, object2: Object): string {\n let obj1 = deepCopy(object1);\n\tlet obj2 = deepCopy(object2);\n\n\tlet diff = detailedDiff(obj1, obj2);\n\tlet diffString = '';\n\n\tconst formatValue = (value: any): string => {\n\t\tif (value instanceof Date) {\n\t\t\treturn moment(value).format('llll');\n\t\t} \n\t\telse if (typeof value === 'object' && value !== null) {\n\t\t\tObject.keys(value).filter(a => a.startsWith('_id') || a.startsWith('id_')).forEach(key => {\n\t\t\t\tdelete value[key];\n\t\t\t});\n\t\t\treturn JSON.stringify(value); // Pretty print objects\n\t\t} \n\t\telse {\n\t\t\treturn typeof value === 'string' ? `\"${value}\"` : String(value);\n\t\t}\n\t};\n\n\tconst customArrayDiff = (arr1: any[], arr2: any[]): string => {\n let arrayDiffResults = [];\n const maxLength = Math.max(arr1.length, arr2.length);\n\n for (let i = 0; i < maxLength; i++) {\n if (arr1[i] && !arr2[i]) {\n arrayDiffResults.push(`Removed at index ${i}: ${formatValue(arr1[i])}`);\n } \n\t\t\telse if (!arr1[i] && arr2[i]) {\n arrayDiffResults.push(`Added at index ${i}: ${formatValue(arr2[i])}`);\n } \n\t\t\telse if (arr1[i] && arr2[i] && JSON.stringify(arr1[i]) !== JSON.stringify(arr2[i])) {\n arrayDiffResults.push(`Changed at index ${i}: {${formatObjectDiff(arr1[i], arr2[i])}}`);\n }\n }\n\n return arrayDiffResults.join(', ');\n };\n\n\tconst formatObjectDiff = (obj1: any, obj2: any): string => {\n\t\tif (obj1 === null || obj2 === null || typeof obj1 !== 'object' || typeof obj2 !== 'object') {\n\t\t\treturn `from: ${formatValue(obj1)} to: ${formatValue(obj2)}`;\n\t\t}\n\n\t\tif (Array.isArray(obj1) || Array.isArray(obj2)) {\n\t\t\treturn customArrayDiff(Array.isArray(obj1) ? obj1 : [], Array.isArray(obj2) ? obj2 : []);\n\t\t}\n\n\t\treturn Object.keys({...obj1, ...obj2}).filter(a => !a.startsWith('_id') && !a.startsWith('id_')).map(key => {\n\t\t\tconst obj1Val = obj1 ? obj1[key] : undefined;\n\t\t\tconst obj2Val = obj2 ? obj2[key] : undefined;\n\t\t\treturn `${toTitleCase(key)}: ${formatObjectDiff(obj1Val, obj2Val)}`;\n\t\t}).join(', ');\n\t};\n\n\t// Handle each diff type\n\t['added', 'deleted', 'updated'].forEach(diffType => {\n\t\tif (Object.keys(diff[diffType]).length > 0) {\n\t\t\tconst updates = Object.keys(diff[diffType])\n\t\t\t\t.filter(key => diffType === 'added' ? true : (diffType === 'deleted' ? !diff['added'][key] : !diff['added'][key] && !diff['deleted'][key]))\n\t\t\t\t.filter(key => !key.startsWith('_id') && !key.startsWith('id_'))\n\t\t\t\t.map(key => `\\n${toTitleCase(key)}: ${formatObjectDiff(obj1[key], obj2[key])}`)\n\t\t\t\t.join(',');\n\n\t\t\tdiffString += updates ? `${updates}` : '';\n\t\t}\n\t});\n\n\treturn diffString;\n}\n\nexport function getBinarySize(string) {\n\tif (string) {\n\t\treturn Buffer.byteLength(string, 'utf8');\n\t}\n\telse {\n\t\treturn 0;\n\t}\n}\n\nexport function pad(num, size) {\n\tlet s = num + '';\n\twhile (s.length < size) { s = '0' + s; }\n\treturn s;\n}\n\nexport function randomString(length, chars) {\n\tlet result = '';\n\tfor (let i = length; i > 0; --i) { result += chars[Math.floor(Math.random() * chars.length)]; }\n\treturn result;\n}\n\nexport function toTitleCase(str) {\n\treturn str.replace(/\\w\\S*/g, function(txt){\n\t\treturn txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n\t});\n}\n\nexport function isObject(item) {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\nexport function mergeDeep(target, ...sources) {\n\tif (!sources.length) {\n\t\treturn target;\n\t}\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) {\n\t\t\t\t\tObject.assign(target, { [key]: {} });\n\t\t\t\t}\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} \n\t\t\telse {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn mergeDeep(target, ...sources);\n}"]}
1
+ {"version":3,"sources":["../../src/util/common.ts"],"names":["rusDiff","require","deepDiff","diff","deep_object_diff_1","moment","mongodb_1","clone","objectIdHexString","ObjectId","toHexString","buildRbSchema","rbSchema","Object","keys","forEach","key","type","rbType","Array","String","Date","Number","Boolean","buildRbLookups","rbLookups","defaultSchema","default_checked_array","lkp","localKey","errString","localKeyDir","localKeyDirDot","collectionAlias","toTitleCase","lookup","replace","local_key","lookupNode","match","newPropertyName","lookup_collection","lookup_collection_alias","field_path","lookup_as","lookup_key","throwErr","ii","length","assign","err","console","log","process","exit","roundPrecision","value","precision","stringValue","toString","includes","indexOf","exponent","Math","pow","round","parseFloat","power","floorPrecision","floor","deepCopy","dateReviver","a","exec","UTC","split","getMongoUpdates","currDoc","modifiedDoc","incVersion","createdAt","updatedAt","updates","$set","$inc","__v","getMongoMergeUpdatedDoc","f_doc","currentDoc","oldDoc","upDoc","diff_1","getDeepDiff","applyMongoUpdate","mergeUpdates","updatesToMerge","_i","arguments","merged","$unset","$push","$pull","filter","anUpdate","change","path","join","kind","handleEditedChange","handleArrayChange","rhs","lhs","item","$each","some","JSON","stringify","push","doc1","doc2","_id","uDoc","delta","orig","$rename","handleRename","handleSet","handleInc","handleUnset","handlePull","handlePush","renameMap","k","v","_a","__read","resolve","o1","n1","_b","o2","n2","logError","setMap","force","o","n","incMap","unsetMap","pullMap","pathk","pullValues","e_1","pullValues_1","__values","pullValues_1_1","next","done","vk","_c","index","findIndex","z","splice","pushMap","pushValues","e_2","pushValues_1","pushValues_1_1","options","stack","arrize","last","e","unshift","pop","shift","concat","isNextNum","isLastNum","glue","isArray","slice","map","deepDiffDetails","object1","object2","obj1","obj2","detailedDiff","diffString","formatValue","format","startsWith","formatObjectDiff","customArrayDiff","arr1","arr2","arrayDiffResults","maxLength","max","i","__assign","obj1Val","undefined","obj2Val","diffType","getBinarySize","string","Buffer","byteLength","pad","num","size","s","randomString","chars","result","random","str","txt","charAt","toUpperCase","substr","toLowerCase","isObject","mergeDeep","target","sources","source","apply","__spreadArray","generateSearchTokensFromFields","doc","fields","tokens","Set","field","val","trim","word","add","from","exports"],"mappings":"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","file":"common.js","sourcesContent":["/* eslint-disable no-restricted-properties */\nlet rusDiff = require('rus-diff');\nlet deepDiff = require('deep-diff').diff;\nimport { detailedDiff } from 'deep-object-diff';\nimport * as moment from 'moment-timezone';\nimport { ObjectId } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nlet clone = require('clone');\n\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\n}\n\nexport function buildRbSchema(rbSchema: any) {\n\tObject.keys(rbSchema).forEach(key => {\n\t\tif (rbSchema[key].type === Object) {\n\t\t\trbSchema[key].type = 'Object';\n\t\t\trbSchema[key].rbType = 'Object';\n\t\t}\n\t\telse if (rbSchema[key].type === Array) {\n\t\t\trbSchema[key].type = 'Array';\n\t\t\trbSchema[key].rbType = 'Array';\n\t\t}\n\t\telse if (rbSchema[key].type === String) {\n\t\t\trbSchema[key].type = 'String';\n\t\t\trbSchema[key].rbType = 'String';\n\t\t}\n\t\telse if (rbSchema[key].type === Date) {\n\t\t\trbSchema[key].type = 'Date';\n\t\t\trbSchema[key].rbType = 'Date';\n\t\t}\n\t\telse if (rbSchema[key].type === Number) {\n\t\t\trbSchema[key].type = 'Number';\n\t\t\trbSchema[key].rbType = 'Number';\n\t\t}\n\t\telse if (rbSchema[key].type === Boolean) {\n\t\t\trbSchema[key].rbType = 'Boolean';\n\t\t\trbSchema[key].type = 'Boolean';\n\t\t}\n\t});\n\n\tObject.keys(rbSchema).forEach(key => {\n\t\tdelete rbSchema[key].type;\n\t});\n\n\treturn rbSchema;\n}\n\nexport function buildRbLookups(rbLookups: LookupTables[], defaultSchema: object, default_checked_array: string[] = []) {\n\t// Remember: lkp.local_key will be removed later on, because it has 'id_'\n\t\n\trbLookups.forEach(lkp => {\n\t\tlet errString = '';\n\t\tlet localKey, newPropertyName;\n\t\tlet localKeyDir = '';\n\t\tlet localKeyDirDot = '';\n\t\tlet collectionAlias = toTitleCase(lkp.lookup.replace(/\\_/g, ' ')) + ' (' + toTitleCase(lkp.local_key.replace('id_', '').replace(/\\_/g, ' ').replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ')) + ') (Lookup)';\n\n\t\tif (lkp.local_key.match(/\\./)) {\n\t\t\tlocalKey = lkp.local_key.replace(/\\.\\$/g, '');\n\t\t\tlocalKeyDirDot = lkp.local_key.replace(/^(.+\\.).*$/, '$1');\n\t\t\tlocalKeyDir = localKeyDirDot.replace(/\\.$/, '');\n\t\t}\n\t\telse {\n\t\t\t// local_key is a root leaf node.\n\t\t\tlocalKey = lkp.local_key;\n\t\t}\n\t\tnewPropertyName = localKeyDirDot + collectionAlias;\n\t\t\n\t\tif (!defaultSchema[lkp.local_key]) {\n\t\t\terrString += '--local_key: \\'' + lkp.local_key + '\\' MUST be a valid schema path! ';\n\t\t}\n\t\telse if (defaultSchema[lkp.local_key].type !== String) {\n\t\t\terrString += '--local_key: \\'' + lkp.local_key + '\\' MUST be a String! ';\n\t\t}\n\t\tlet lookupNode = {\n\t\t\tlookup_collection: lkp.lookup,\n\t\t\tlookup_collection_alias: collectionAlias,\n\t\t\tlocal_key: localKey,\n\t\t\tfield_path: localKeyDir,\n\t\t\tlookup_as: newPropertyName,\n\t\t\tlookup_key: '_id',\n\t\t\ttype: 'Object',\n\t\t};\n\n\t\tdefaultSchema[newPropertyName] = lookupNode;\n\n\t\tif (errString) {\n\t\t\tthrowErr(errString, lkp, lookupNode, newPropertyName);\n\t\t}\n\t});\n\n\tfor (let ii = 0; ii < default_checked_array.length; ii++) {\n\t\tdefaultSchema[default_checked_array[ii]] = {};\n\t\tdefaultSchema[default_checked_array[ii]]['default_checked'] = true;\n\t\tObject.assign(defaultSchema[default_checked_array[ii]], defaultSchema['tree'][default_checked_array[ii]]);\n\t}\n\n\treturn defaultSchema;\n}\n\nexport function throwErr(err: any, lkp, lookupNode, newPropertyName = '') {\n\t// err could be from a try/throw/catch\n\tconsole.log('------- ERROR thrown by rbLookups: ');\n\tconsole.log(err);\n\tconsole.log('---item: ');\n\tconsole.log(lkp);\n\tconsole.log('---Attempted to create rbSchema[\\'' + newPropertyName + '\\']: ');\n\tconsole.log(lookupNode);\n\tprocess.exit(1);\n}\n\nexport function roundPrecision(value: number, precision = 0) {\n\tlet stringValue = value.toString();\n\t\n\tif (stringValue.includes('.')) {\n\t\tif (stringValue[0] === '0') {\n\t\t\tprecision += 1;\n\t\t}\n\t\t\n\t\tprecision -= stringValue.indexOf('.');\n\t}\n\n\tconst exponent = Math.pow(10, precision);\n\treturn Math.round(parseFloat(stringValue) * exponent) / exponent;\n}\n\nexport function round(value, precision = 0) {\n\tconst power = Math.pow(10, precision);\n\tconst adjustment = 1e-6;\n\treturn Math.round( (value * power) + adjustment) / power;\n}\n\nexport function floorPrecision(value: number, precision = 0) {\n\tlet stringValue = value.toString();\n\t\n\tif (stringValue.includes('.')) {\n\t\tif (stringValue[0] === '0') {\n\t\t\tprecision += 1;\n\t\t}\n\t\t\n\t\tprecision -= stringValue.indexOf('.');\n\t}\n\n\tconst exponent = Math.pow(10, precision);\n\treturn Math.floor(parseFloat(stringValue) * exponent) / exponent;\n}\n\nexport function deepCopy(value) {\n\treturn clone(value);\n}\n\nexport function dateReviver(key, value) {\n\tif (typeof value === 'string') {\n\t\tlet a = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t\tif (a) {\n\t\t\treturn new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6].split('.')[0], +a[6].split('.')[1]));\n\t\t}\n\t}\n\treturn value;\n}\n\nexport function getMongoUpdates(currDoc, modifiedDoc, incVersion) {\n\tif (currDoc.createdAt) {\n\t\tmodifiedDoc.createdAt = currDoc.createdAt;\n\t}\n\n\tif (currDoc.updatedAt) {\n\t\tmodifiedDoc.updatedAt = currDoc.updatedAt;\n\t}\n\n\tlet updates = rusDiff.diff(currDoc, modifiedDoc);\n\n\tif (updates) {\n\t\tif (updates.$set && !Object.keys(updates.$set).length) {\n\t\t\tdelete updates.$set;\n\t\t}\n\n\t\tif (incVersion) {\n\t\t\tupdates.$inc = {__v: 1};\n\t\t}\n\t}\n\telse {\n\t\tif (incVersion) {\n\t\t\tupdates = {\n\t\t\t\t$inc: {__v: 1}\n\t\t\t};\n\t\t}\n\t}\n\n\treturn updates;\n}\n\nexport function getMongoMergeUpdatedDoc(f_doc, currentDoc, oldDoc) {\n\tlet upDoc = deepCopy(currentDoc); // was oldDoc\n\tupDoc.__v = currentDoc.__v;\n\n\tlet diff_1 = getDeepDiff(oldDoc, currentDoc);\n\tlet diff_2 = getDeepDiff(oldDoc, f_doc);\n\n\tlet updates = mergeUpdates(diff_2, diff_1);\n\tapplyMongoUpdate(upDoc, updates);\n\treturn upDoc;\n}\n\n\nexport function mergeUpdates(...updatesToMerge) {\n const merged = {\n $set: {},\n $unset: {},\n $inc: {},\n $push: {},\n $pull: {}\n };\n\n updatesToMerge.filter(Boolean).forEach(anUpdate => {\n anUpdate.forEach(change => {\n const path = change.path.join('.');\n\n switch (change.kind) {\n case 'E':\n handleEditedChange(merged, path, change);\n break;\n case 'A':\n handleArrayChange(merged, path, change);\n break;\n default:\n break;\n }\n });\n });\n\n return merged;\n}\n\nfunction handleEditedChange(merged, path, change) {\n\t// Later diffs override earlier ones\n\tif (typeof(change.rhs) === 'number' && (path.includes('quantity') || path.includes('qty'))) {\n\t\tmerged.$inc[path] = (merged.$inc[path] || 0) + change.rhs - change.lhs;\n\t}\n\telse {\n\t\tmerged.$set[path] = change.rhs;\n\t}\n}\n\n\nfunction handleArrayChange(merged, path, change) {\n\tif (change.item.kind === 'N') {\n\t\tif (!merged.$push[path]) merged.$push[path] = { $each: [] };\n\n\t\tif (!merged.$push[path].$each.some(a => JSON.stringify(a) === JSON.stringify(change.item.rhs))) {\n\t\t\tmerged.$push[path].$each.push(change.item.rhs);\n\t\t}\n\t}\n\telse if (change.item.kind === 'D') {\n\t\tif (!merged.$pull[path]) merged.$pull[path] = [];\n\n\t\tif (!merged.$pull[path].some(a => JSON.stringify(a) === JSON.stringify(change.item.lhs))) {\n\t\t\tmerged.$pull[path].push(change.item.lhs);\n\t\t}\n\t}\n}\n\nexport function getDeepDiff(doc1, doc2) {\n\tdelete doc1._id;\n\tdelete doc1.__v;\n\n\tif (doc1.updatedAt) {\n\t\tdelete doc1.updatedAt;\n\t}\n\n\tif (doc1.createdAt) {\n\t\tdelete doc1.createdAt;\n\t}\n\n\tdelete doc2._id;\n\tdelete doc2.__v;\n\n\tif (doc2.updatedAt) {\n\t\tdelete doc2.updatedAt;\n\t}\n\n\tif (doc2.createdAt) {\n\t\tdelete doc2.createdAt;\n\t}\n\n\treturn deepDiff(doc1, doc2);\n}\n\nexport function applyMongoUpdate(uDoc: any, delta: any): any {\n const orig = deepCopy(uDoc);\n\n if (delta) {\n if (delta.$rename) handleRename(uDoc, delta.$rename);\n if (delta.$set) handleSet(uDoc, delta.$set);\n if (delta.$inc) handleInc(uDoc, delta.$inc);\n if (delta.$unset) handleUnset(uDoc, delta.$unset);\n if (delta.$pull) handlePull(uDoc, orig, delta.$pull);\n if (delta.$push) handlePush(uDoc, delta.$push);\n }\n\n return uDoc;\n}\n\nfunction handleRename(uDoc: any, renameMap: any) {\n for (const k in renameMap) {\n const v = renameMap[k];\n const [o1, n1] = resolve(uDoc, k);\n const [o2, n2] = resolve(uDoc, v);\n if (o1 && n1.length === 1) {\n if (o2 && n2.length === 1) {\n o2[n2[0]] = o1[n1[0]];\n delete o1[n1[0]];\n } else {\n logError(o2, n2, uDoc, v);\n }\n } else {\n logError(o1, n1, uDoc, k);\n }\n }\n}\n\nfunction handleSet(uDoc: any, setMap: any) {\n for (const k in setMap) {\n const v = setMap[k];\n const [o, n] = resolve(uDoc, k, { force: true });\n if (o && n.length === 1) {\n o[n[0]] = v;\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handleInc(uDoc: any, incMap: any) {\n for (const k in incMap) {\n const v = incMap[k];\n const [o, n] = resolve(uDoc, k, { force: true });\n if (o && n.length === 1) {\n\t\t\tif (typeof o[n[0]] !== 'number') {\n\t\t\t\to[n[0]] = 0;\n\t\t\t}\n\t\t\to[n[0]] += v;\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handleUnset(uDoc: any, unsetMap: any) {\n for (const k in unsetMap) {\n const [o, n] = resolve(uDoc, k);\n if (o && n.length === 1) {\n delete o[n[0]];\n } else {\n logError(o, n, uDoc, k);\n }\n }\n}\n\nfunction handlePull(uDoc: any, orig: any, pullMap: any) {\n for (const pathk in pullMap) {\n const pullValues = pullMap[pathk];\n for (let vk of pullValues) {\n const [o, n] = resolve(uDoc, pathk);\n const [o2, n2] = resolve(orig, pathk);\n if (o && n.length === 1) {\n\t\t\t\tconst index = (<Array<any>>o2[n2[0]]).findIndex(z => JSON.stringify(z) === JSON.stringify(vk));\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\to[n[0]].splice(index, 1);\n\t\t\t\t}\n } else {\n logError(o, n, uDoc, pathk);\n }\n }\n }\n}\n\nfunction handlePush(uDoc: any, pushMap: any) {\n for (const pathk in pushMap) {\n const pushValues = pushMap[pathk];\n for (let vk of pushValues) {\n const [o, n] = resolve(uDoc, pathk);\n if (o && n.length === 1) {\n o[n[0]].push(vk);\n } else {\n logError(o, n, uDoc, pathk);\n }\n }\n }\n}\n\nfunction logError(o: any, n: any, uDoc: any, key: any) {\n console.log('Error', o + '/' + n + ' - couldn\\'t resolve for ' + JSON.stringify(uDoc) + ' ' + key);\n}\n\nfunction resolve(a: any, path: string, options: any = {}): [any, any] {\n const stack = arrize(path);\n let last = [];\n\n if (stack.length > 0) {\n last.unshift(stack.pop());\n }\n\n let e = a;\n while (stack.length > 0) {\n const k = stack.shift();\n if (e[k] !== void 0) {\n e = e[k];\n } else {\n if (!options.force) {\n last.unshift(k);\n last = stack.concat(last);\n break;\n }\n const isNextNum = typeof stack[0] === 'number';\n const isLastNum = stack.length === 0 && typeof last[0] === 'number';\n e[k] = isNextNum || isLastNum ? [] : {};\n e = e[k];\n }\n }\n\n return [e, last];\n}\n\nfunction arrize(path: any, glue: string = '.'): string[] {\n if (Array.isArray(path)) {\n return path.slice();\n }\n\n if (path === void 0 || path === null || path === false || path === '') {\n return [];\n }\n\n return path.toString().split(glue)\n .map(e => {\n if ([void 0, null, false, ''].includes(e)) {\n return null;\n }\n return e.toString();\n })\n .filter(e => e !== null);\n}\n\nexport function deepDiffDetails(object1: Object, object2: Object): string {\n let obj1 = deepCopy(object1);\n\tlet obj2 = deepCopy(object2);\n\n\tlet diff = detailedDiff(obj1, obj2);\n\tlet diffString = '';\n\n\tconst formatValue = (value: any): string => {\n\t\tif (value instanceof Date) {\n\t\t\treturn moment(value).format('llll');\n\t\t} \n\t\telse if (typeof value === 'object' && value !== null) {\n\t\t\tObject.keys(value).filter(a => a.startsWith('_id') || a.startsWith('id_')).forEach(key => {\n\t\t\t\tdelete value[key];\n\t\t\t});\n\t\t\treturn JSON.stringify(value); // Pretty print objects\n\t\t} \n\t\telse {\n\t\t\treturn typeof value === 'string' ? `\"${value}\"` : String(value);\n\t\t}\n\t};\n\n\tconst customArrayDiff = (arr1: any[], arr2: any[]): string => {\n let arrayDiffResults = [];\n const maxLength = Math.max(arr1.length, arr2.length);\n\n for (let i = 0; i < maxLength; i++) {\n if (arr1[i] && !arr2[i]) {\n arrayDiffResults.push(`Removed at index ${i}: ${formatValue(arr1[i])}`);\n } \n\t\t\telse if (!arr1[i] && arr2[i]) {\n arrayDiffResults.push(`Added at index ${i}: ${formatValue(arr2[i])}`);\n } \n\t\t\telse if (arr1[i] && arr2[i] && JSON.stringify(arr1[i]) !== JSON.stringify(arr2[i])) {\n arrayDiffResults.push(`Changed at index ${i}: {${formatObjectDiff(arr1[i], arr2[i])}}`);\n }\n }\n\n return arrayDiffResults.join(', ');\n };\n\n\tconst formatObjectDiff = (obj1: any, obj2: any): string => {\n\t\tif (obj1 === null || obj2 === null || typeof obj1 !== 'object' || typeof obj2 !== 'object') {\n\t\t\treturn `from: ${formatValue(obj1)} to: ${formatValue(obj2)}`;\n\t\t}\n\n\t\tif (Array.isArray(obj1) || Array.isArray(obj2)) {\n\t\t\treturn customArrayDiff(Array.isArray(obj1) ? obj1 : [], Array.isArray(obj2) ? obj2 : []);\n\t\t}\n\n\t\treturn Object.keys({...obj1, ...obj2}).filter(a => !a.startsWith('_id') && !a.startsWith('id_')).map(key => {\n\t\t\tconst obj1Val = obj1 ? obj1[key] : undefined;\n\t\t\tconst obj2Val = obj2 ? obj2[key] : undefined;\n\t\t\treturn `${toTitleCase(key)}: ${formatObjectDiff(obj1Val, obj2Val)}`;\n\t\t}).join(', ');\n\t};\n\n\t// Handle each diff type\n\t['added', 'deleted', 'updated'].forEach(diffType => {\n\t\tif (Object.keys(diff[diffType]).length > 0) {\n\t\t\tconst updates = Object.keys(diff[diffType])\n\t\t\t\t.filter(key => diffType === 'added' ? true : (diffType === 'deleted' ? !diff['added'][key] : !diff['added'][key] && !diff['deleted'][key]))\n\t\t\t\t.filter(key => !key.startsWith('_id') && !key.startsWith('id_'))\n\t\t\t\t.map(key => `\\n${toTitleCase(key)}: ${formatObjectDiff(obj1[key], obj2[key])}`)\n\t\t\t\t.join(',');\n\n\t\t\tdiffString += updates ? `${updates}` : '';\n\t\t}\n\t});\n\n\treturn diffString;\n}\n\nexport function getBinarySize(string) {\n\tif (string) {\n\t\treturn Buffer.byteLength(string, 'utf8');\n\t}\n\telse {\n\t\treturn 0;\n\t}\n}\n\nexport function pad(num, size) {\n\tlet s = num + '';\n\twhile (s.length < size) { s = '0' + s; }\n\treturn s;\n}\n\nexport function randomString(length, chars) {\n\tlet result = '';\n\tfor (let i = length; i > 0; --i) { result += chars[Math.floor(Math.random() * chars.length)]; }\n\treturn result;\n}\n\nexport function toTitleCase(str) {\n\treturn str.replace(/\\w\\S*/g, function(txt){\n\t\treturn txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n\t});\n}\n\nexport function isObject(item) {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\nexport function mergeDeep(target, ...sources) {\n\tif (!sources.length) {\n\t\treturn target;\n\t}\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) {\n\t\t\t\t\tObject.assign(target, { [key]: {} });\n\t\t\t\t}\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} \n\t\t\telse {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn mergeDeep(target, ...sources);\n}\n\nexport function generateSearchTokensFromFields(doc: any, fields: string[]): string[] {\n\tconst tokens = new Set<string>();\n\n\tfields.forEach(field => {\n\t\tconst val = doc[field];\n\t\tif (typeof val === 'string' && val.trim().length) {\n\t\t\tconst words = val.toLowerCase().split(/\\s+/);\n\t\t\twords.forEach(word => {\n\t\t\t\tfor (let i = 3; i <= word.length; i++) {\n\t\t\t\t\ttokens.add(word.slice(0, i)); // prefix-based tokens only\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\treturn Array.from(tokens);\n}"]}