@resolveio/server-lib 12.6.4 → 12.6.6

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.
@@ -73,6 +73,7 @@ var CronManager = /** @class */ (function () {
73
73
  else if (doc.operationType === 'replace' || doc.operationType === 'update') {
74
74
  if (doc.fullDocument) {
75
75
  if (this._jobs.some(function (a) { return a._id === doc.documentKey['_id']; })) {
76
+ doc.fullDocument.next_run = null;
76
77
  this._jobs.splice(this._jobs.map(function (a) { return a._id; }).indexOf(doc.documentKey['_id']), 1, doc.fullDocument);
77
78
  this.updateCronJob(doc.fullDocument);
78
79
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/cron.manager.ts"],"names":[],"mappings":"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","file":"cron.manager.js","sourcesContent":["import { CronJobModel } from '../models/cron-job.model';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport ResolveIOMainServer from '../server-app';\nimport { CronJobManager } from '../cron/cron';\nimport * as moment from 'moment';\nimport { ChangeStream, ChangeStreamDocument } from 'mongodb';\n\nexport class CronManager {\n\tprivate _cronManager: CronJobManager;\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _watchCrons$: ChangeStream;\n\tprivate _jobs: CronJobModel[] = [];\n\n\tconstructor(mainServer) {\n\t\tthis._mainServer = mainServer;\n\t\tthis._cronManager = new CronJobManager();\n\n\t\tthis.watchCrons();\n\t}\n\n\tpublic async watchCrons() {\n\t\tif (!this._watchCrons$ || this._watchCrons$.closed) {\n\t\t\tCronJobs.find().then(res => {\n\t\t\t\tthis._jobs = res;\n\n\t\t\t\tthis._jobs.forEach(job => {\n\t\t\t\t\tthis.addCronJob(job);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis._watchCrons$ = CronJobs.watchCollection([], {fullDocument: 'updateLookup'});\n\n\t\t\tthis._watchCrons$.on('change', async (doc: ChangeStreamDocument<CronJobModel>) => {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (!this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.addCronJob(doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'replace' || doc.operationType === 'update') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1, doc.fullDocument);\n\t\t\t\t\t\t\tthis.updateCronJob(doc.fullDocument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t\tthis.addCronJob(doc.fullDocument);\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\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tlet job = this._jobs.filter(a => a._id === <any>doc.documentKey['_id'])[0];\n\t\t\t\t\t\t\tthis.removeCronJob(job.name);\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t\t}\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 (this._jobs.some(a => a._id === (<any>doc).documentKey['_id'])) {\n\t\t\t\t\t\tlet job = this._jobs.filter(a => a._id === <any>doc.documentKey['_id'])[0];\n\t\t\t\t\t\tthis.removeCronJob(job.name);\n\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', (err) => {\n\t\t\t\tthis._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('end', () => {\n\t\t\t\tthis._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('close', () => {\n\t\t\t\tthis._watchCrons$ = null;\n\t\t\t\tthis.watchCrons();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._watchCrons$.close();\n\t\t}\n\t}\n\n\tprivate doesCronJobExist(cron: CronJobModel) {\n\t\treturn this._cronManager.exists(cron.name);\n\t}\n\n\tprivate doesCronJobNameExist(cron_name: string) {\n\t\treturn this._cronManager.exists(cron_name);\n\t}\n\n\tprivate addCronJob(cron: CronJobModel) {\n\t\tif (cron.running) {\n\t\t\tCronJobs.updateOne({_id: cron._id}, {$set: {running: false, next_run: null}});\n\t\t}\n\t\telse if (cron.next_run) {\n\t\t\tCronJobs.updateOne({_id: cron._id}, {$set: {next_run: null}});\n\t\t}\n\t\t\n\t\tif (!this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.add(\n\t\t\t\tcron.name,\n\t\t\t\tcron.time_to_run,\n\t\t\t\t() => this.runCronJob(cron),\n\t\t\t\tnull,\n\t\t\t\ttrue,\n\t\t\t\tcron.timezone,\n\t\t\t\tnull, \n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate updateCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.update(cron.name, cron.time_to_run, () => this.runCronJob(cron));\n\t\t}\n\t}\n\n\tprivate removeCronJob(cron_name: string) {\n\t\tif (this.doesCronJobNameExist(cron_name)) {\n\t\t\tthis._cronManager.delete(cron_name);\n\t\t}\n\t}\n\n\tprivate startCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.start(cron.name);\n\t\t}\n\t}\n\n\tprivate stopCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.stop(cron.name);\n\t\t}\n\t}\n\n\tprivate stopAllCronJobs() {\n\t\tthis._cronManager.stopAll();\n\t}\n\n\tprivate runCronJob(cron: CronJobModel) {\n\t\tlet now = new Date();\n\n\t\tif (!cron.next_run || now.getTime() >= cron.next_run.getTime()) {\n\n\t\t\tCronJobs.findOneAndUpdate({\n\t\t\t\t$and: [\n\t\t\t\t\t{_id: cron._id},\n\t\t\t\t\t{running: false},\n\t\t\t\t\t{\n\t\t\t\t\t\t$or: [\n\t\t\t\t\t\t\t{next_run: {$exists: false}},\n\t\t\t\t\t\t\t{next_run: null},\n\t\t\t\t\t\t\t{next_run: {$lte: now}}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}, {$set: {running: true}}).then(async res => {\n\t\t\t\tif (res) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (res.method_run_data) {\n\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_run, res.method_run_data);\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_run);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (res.method_complete) {\n\t\t\t\t\t\t\tif (res.method_complete_data) {\n\t\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_complete, res.method_complete_data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_complete);\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\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Cron Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (res.repeat) {\n\t\t\t\t\t\tlet nextDate = moment(this._cronManager.getJob(res.name).nextDate()).second(0).millisecond(0).toDate();\n\t\t\t\t\t\tCronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t\t} \n\t\t\t\t\telse {\n\t\t\t\t\t\tCronJobs.deleteOne({_id: res._id});\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/managers/cron.manager.ts"],"names":[],"mappings":"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","file":"cron.manager.js","sourcesContent":["import { CronJobModel } from '../models/cron-job.model';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport ResolveIOMainServer from '../server-app';\nimport { CronJobManager } from '../cron/cron';\nimport * as moment from 'moment';\nimport { ChangeStream, ChangeStreamDocument } from 'mongodb';\n\nexport class CronManager {\n\tprivate _cronManager: CronJobManager;\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _watchCrons$: ChangeStream;\n\tprivate _jobs: CronJobModel[] = [];\n\n\tconstructor(mainServer) {\n\t\tthis._mainServer = mainServer;\n\t\tthis._cronManager = new CronJobManager();\n\n\t\tthis.watchCrons();\n\t}\n\n\tpublic async watchCrons() {\n\t\tif (!this._watchCrons$ || this._watchCrons$.closed) {\n\t\t\tCronJobs.find().then(res => {\n\t\t\t\tthis._jobs = res;\n\n\t\t\t\tthis._jobs.forEach(job => {\n\t\t\t\t\tthis.addCronJob(job);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis._watchCrons$ = CronJobs.watchCollection([], {fullDocument: 'updateLookup'});\n\n\t\t\tthis._watchCrons$.on('change', async (doc: ChangeStreamDocument<CronJobModel>) => {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (!this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.addCronJob(doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'replace' || doc.operationType === 'update') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tdoc.fullDocument.next_run = null;\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1, doc.fullDocument);\n\t\t\t\t\t\t\tthis.updateCronJob(doc.fullDocument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t\tthis.addCronJob(doc.fullDocument);\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\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tlet job = this._jobs.filter(a => a._id === <any>doc.documentKey['_id'])[0];\n\t\t\t\t\t\t\tthis.removeCronJob(job.name);\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t\t}\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 (this._jobs.some(a => a._id === (<any>doc).documentKey['_id'])) {\n\t\t\t\t\t\tlet job = this._jobs.filter(a => a._id === <any>doc.documentKey['_id'])[0];\n\t\t\t\t\t\tthis.removeCronJob(job.name);\n\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', (err) => {\n\t\t\t\tthis._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('end', () => {\n\t\t\t\tthis._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('close', () => {\n\t\t\t\tthis._watchCrons$ = null;\n\t\t\t\tthis.watchCrons();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._watchCrons$.close();\n\t\t}\n\t}\n\n\tprivate doesCronJobExist(cron: CronJobModel) {\n\t\treturn this._cronManager.exists(cron.name);\n\t}\n\n\tprivate doesCronJobNameExist(cron_name: string) {\n\t\treturn this._cronManager.exists(cron_name);\n\t}\n\n\tprivate addCronJob(cron: CronJobModel) {\n\t\tif (cron.running) {\n\t\t\tCronJobs.updateOne({_id: cron._id}, {$set: {running: false, next_run: null}});\n\t\t}\n\t\telse if (cron.next_run) {\n\t\t\tCronJobs.updateOne({_id: cron._id}, {$set: {next_run: null}});\n\t\t}\n\t\t\n\t\tif (!this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.add(\n\t\t\t\tcron.name,\n\t\t\t\tcron.time_to_run,\n\t\t\t\t() => this.runCronJob(cron),\n\t\t\t\tnull,\n\t\t\t\ttrue,\n\t\t\t\tcron.timezone,\n\t\t\t\tnull, \n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate updateCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.update(cron.name, cron.time_to_run, () => this.runCronJob(cron));\n\t\t}\n\t}\n\n\tprivate removeCronJob(cron_name: string) {\n\t\tif (this.doesCronJobNameExist(cron_name)) {\n\t\t\tthis._cronManager.delete(cron_name);\n\t\t}\n\t}\n\n\tprivate startCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.start(cron.name);\n\t\t}\n\t}\n\n\tprivate stopCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.stop(cron.name);\n\t\t}\n\t}\n\n\tprivate stopAllCronJobs() {\n\t\tthis._cronManager.stopAll();\n\t}\n\n\tprivate runCronJob(cron: CronJobModel) {\n\t\tlet now = new Date();\n\n\t\tif (!cron.next_run || now.getTime() >= cron.next_run.getTime()) {\n\n\t\t\tCronJobs.findOneAndUpdate({\n\t\t\t\t$and: [\n\t\t\t\t\t{_id: cron._id},\n\t\t\t\t\t{running: false},\n\t\t\t\t\t{\n\t\t\t\t\t\t$or: [\n\t\t\t\t\t\t\t{next_run: {$exists: false}},\n\t\t\t\t\t\t\t{next_run: null},\n\t\t\t\t\t\t\t{next_run: {$lte: now}}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}, {$set: {running: true}}).then(async res => {\n\t\t\t\tif (res) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (res.method_run_data) {\n\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_run, res.method_run_data);\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_run);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (res.method_complete) {\n\t\t\t\t\t\t\tif (res.method_complete_data) {\n\t\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_complete, res.method_complete_data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait this._mainServer.getMethodManager().callMethodCron(res.method_complete);\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\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Cron Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (res.repeat) {\n\t\t\t\t\t\tlet nextDate = moment(this._cronManager.getJob(res.name).nextDate()).second(0).millisecond(0).toDate();\n\t\t\t\t\t\tCronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t\t} \n\t\t\t\t\telse {\n\t\t\t\t\t\tCronJobs.deleteOne({_id: res._id});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, () => {});\n\t\t}\n\t}\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "12.6.4",
3
+ "version": "12.6.6",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "npm run build-prod && npm pack ./dist",
package/util/common.d.ts CHANGED
@@ -16,8 +16,8 @@ export declare function mergeUpdates(...updatesToMerge: any[]): {
16
16
  $pull: {};
17
17
  };
18
18
  export declare function getDeepDiff(doc1: any, doc2: any): any;
19
- export declare function deepDiffDetails(obj1: Object, obj2: Object): string;
20
19
  export declare function applyMongoUpdate(uDoc: any, delta: any): any;
20
+ export declare function deepDiffDetails(obj1: Object, obj2: Object): string;
21
21
  export declare function getBinarySize(string: any): number;
22
22
  export declare function pad(num: any, size: any): string;
23
23
  export declare function randomString(length: any, chars: any): string;
package/util/common.js CHANGED
@@ -9,7 +9,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
9
  return to.concat(ar || Array.prototype.slice.call(from));
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.mergeDeep = exports.isObject = exports.toTitleCase = exports.randomString = exports.pad = exports.getBinarySize = exports.applyMongoUpdate = exports.deepDiffDetails = exports.getDeepDiff = exports.mergeUpdates = exports.getMongoMergeUpdatedDoc = exports.getMongoUpdates = exports.dateReviver = exports.deepCopy = exports.floorPrecision = exports.roundPrecision = exports.throwErr = exports.buildRbLookups = exports.buildRbSchema = void 0;
12
+ 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.roundPrecision = exports.throwErr = exports.buildRbLookups = exports.buildRbSchema = void 0;
13
13
  var rusDiff = require('rus-diff');
14
14
  var deepDiff = require('deep-diff').diff;
15
15
  var deep_object_diff_1 = require("deep-object-diff");
@@ -195,58 +195,46 @@ function mergeUpdates() {
195
195
  $push: {},
196
196
  $pull: {}
197
197
  };
198
- updatesToMerge.filter(function (a) { return a; }).forEach(function (anUpdate) {
198
+ updatesToMerge.filter(Boolean).forEach(function (anUpdate) {
199
199
  anUpdate.forEach(function (change) {
200
- var path = change.path[0];
201
- for (var i = 1; i < change.path.length; i++) {
202
- path += '.' + change.path[i];
203
- }
204
- if (change.kind === 'E') {
205
- if (typeof (change.rhs) === 'number' && path.endsWith('quantity')) {
206
- if (merged.$inc[path]) {
207
- merged.$inc[path] += change.rhs - change.lhs;
208
- }
209
- else {
210
- merged.$inc[path] = change.rhs - change.lhs;
211
- }
212
- }
213
- else {
214
- merged.$set[path] = change.rhs;
215
- }
216
- }
217
- else if (change.kind === 'A') {
218
- if (change.item.kind === 'N') {
219
- if (!merged.$push[path] || JSON.stringify(merged.$push[path]) !== JSON.stringify(change.item.rhs)) {
220
- if (!merged.$push[path]) {
221
- merged.$push[path] = [];
222
- }
223
- if (!merged.$push[path].filter(function (a) { return JSON.stringify(a) === JSON.stringify(change.item.rhs); }).length) {
224
- merged.$push[path].push(change.item.rhs);
225
- }
226
- }
227
- }
228
- else if (change.item.kind === 'D') {
229
- if (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {
230
- if (!merged.$pull[path]) {
231
- merged.$pull[path] = [];
232
- }
233
- if (!merged.$pull[path].filter(function (a) { return JSON.stringify(a) === JSON.stringify(change.item.lhs); }).length) {
234
- merged.$pull[path].push(change.item.lhs);
235
- }
236
- }
237
- }
238
- else if (change.item.kind === 'E') {
239
- console.log('Condition E not satisfied.');
240
- // if (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {
241
- // merged.$pull[path] = change.item.lhs;
242
- // }
243
- }
200
+ var path = change.path.join('.');
201
+ switch (change.kind) {
202
+ case 'E':
203
+ handleEditedChange(merged, path, change);
204
+ break;
205
+ case 'A':
206
+ handleArrayChange(merged, path, change);
207
+ break;
208
+ default:
209
+ break;
244
210
  }
245
211
  });
246
212
  });
247
213
  return merged;
248
214
  }
249
215
  exports.mergeUpdates = mergeUpdates;
216
+ function handleEditedChange(merged, path, change) {
217
+ if (typeof (change.rhs) === 'number' && (path.includes('quantity') || path.includes('qty'))) {
218
+ merged.$inc[path] = (merged.$inc[path] || 0) + change.rhs - change.lhs;
219
+ }
220
+ else {
221
+ merged.$set[path] = change.rhs;
222
+ }
223
+ }
224
+ function handleArrayChange(merged, path, change) {
225
+ if (change.item.kind === 'N') {
226
+ merged.$push[path] = merged.$push[path] || [];
227
+ if (!merged.$push[path].some(function (a) { return JSON.stringify(a) === JSON.stringify(change.item.rhs); })) {
228
+ merged.$push[path].push(change.item.rhs);
229
+ }
230
+ }
231
+ else if (change.item.kind === 'D') {
232
+ merged.$pull[path] = merged.$pull[path] || [];
233
+ if (!merged.$pull[path].some(function (a) { return JSON.stringify(a) === JSON.stringify(change.item.lhs); })) {
234
+ merged.$pull[path].push(change.item.lhs);
235
+ }
236
+ }
237
+ }
250
238
  function getDeepDiff(doc1, doc2) {
251
239
  delete doc1._id;
252
240
  delete doc1.__v;
@@ -267,10 +255,167 @@ function getDeepDiff(doc1, doc2) {
267
255
  return deepDiff(doc1, doc2);
268
256
  }
269
257
  exports.getDeepDiff = getDeepDiff;
258
+ function applyMongoUpdate(uDoc, delta) {
259
+ var orig = deepCopy(uDoc);
260
+ if (delta) {
261
+ if (delta.$rename)
262
+ handleRename(uDoc, delta.$rename);
263
+ if (delta.$set)
264
+ handleSet(uDoc, delta.$set);
265
+ if (delta.$inc)
266
+ handleInc(uDoc, delta.$inc);
267
+ if (delta.$unset)
268
+ handleUnset(uDoc, delta.$unset);
269
+ if (delta.$pull)
270
+ handlePull(uDoc, orig, delta.$pull);
271
+ if (delta.$push)
272
+ handlePush(uDoc, delta.$push);
273
+ }
274
+ return uDoc;
275
+ }
276
+ exports.applyMongoUpdate = applyMongoUpdate;
277
+ function handleRename(uDoc, renameMap) {
278
+ for (var k in renameMap) {
279
+ var v = renameMap[k];
280
+ var _a = resolve(uDoc, k), o1 = _a[0], n1 = _a[1];
281
+ var _b = resolve(uDoc, v), o2 = _b[0], n2 = _b[1];
282
+ if (o1 && n1.length === 1) {
283
+ if (o2 && n2.length === 1) {
284
+ o2[n2[0]] = o1[n1[0]];
285
+ delete o1[n1[0]];
286
+ }
287
+ else {
288
+ logError(o2, n2, uDoc, v);
289
+ }
290
+ }
291
+ else {
292
+ logError(o1, n1, uDoc, k);
293
+ }
294
+ }
295
+ }
296
+ function handleSet(uDoc, setMap) {
297
+ for (var k in setMap) {
298
+ var v = setMap[k];
299
+ var _a = resolve(uDoc, k, { force: true }), o = _a[0], n = _a[1];
300
+ if (o && n.length === 1) {
301
+ o[n[0]] = v;
302
+ }
303
+ else {
304
+ logError(o, n, uDoc, k);
305
+ }
306
+ }
307
+ }
308
+ function handleInc(uDoc, incMap) {
309
+ for (var k in incMap) {
310
+ var v = incMap[k];
311
+ var _a = resolve(uDoc, k, { force: true }), o = _a[0], n = _a[1];
312
+ if (o && n.length === 1) {
313
+ o[n[0]] = (o[n[0]] || 0) + v;
314
+ }
315
+ else {
316
+ logError(o, n, uDoc, k);
317
+ }
318
+ }
319
+ }
320
+ function handleUnset(uDoc, unsetMap) {
321
+ for (var k in unsetMap) {
322
+ var _a = resolve(uDoc, k), o = _a[0], n = _a[1];
323
+ if (o && n.length === 1) {
324
+ delete o[n[0]];
325
+ }
326
+ else {
327
+ logError(o, n, uDoc, k);
328
+ }
329
+ }
330
+ }
331
+ function handlePull(uDoc, orig, pullMap) {
332
+ for (var pathk in pullMap) {
333
+ var pullValues = pullMap[pathk];
334
+ var _loop_1 = function (vk) {
335
+ var _a = resolve(uDoc, pathk), o = _a[0], n = _a[1];
336
+ var _b = resolve(orig, pathk), o2 = _b[0], n2 = _b[1];
337
+ if (o && n.length === 1) {
338
+ o[n[0]].splice(o2[n2[0]].findIndex(function (z) { return JSON.stringify(z) === JSON.stringify(vk); }), 1);
339
+ }
340
+ else {
341
+ logError(o, n, uDoc, pathk);
342
+ }
343
+ };
344
+ for (var _i = 0, pullValues_1 = pullValues; _i < pullValues_1.length; _i++) {
345
+ var vk = pullValues_1[_i];
346
+ _loop_1(vk);
347
+ }
348
+ }
349
+ }
350
+ function handlePush(uDoc, pushMap) {
351
+ for (var pathk in pushMap) {
352
+ var pushValues = pushMap[pathk];
353
+ for (var _i = 0, pushValues_1 = pushValues; _i < pushValues_1.length; _i++) {
354
+ var vk = pushValues_1[_i];
355
+ var _a = resolve(uDoc, pathk), o = _a[0], n = _a[1];
356
+ if (o && n.length === 1) {
357
+ o[n[0]].push(vk);
358
+ }
359
+ else {
360
+ logError(o, n, uDoc, pathk);
361
+ }
362
+ }
363
+ }
364
+ }
365
+ function logError(o, n, uDoc, key) {
366
+ console.log('Error', o + '/' + n + ' - couldn\'t resolve for ' + JSON.stringify(uDoc) + ' ' + key);
367
+ }
368
+ function resolve(a, path, options) {
369
+ if (options === void 0) { options = {}; }
370
+ var stack = arrize(path);
371
+ var last = [];
372
+ if (stack.length > 0) {
373
+ last.unshift(stack.pop());
374
+ }
375
+ var e = a;
376
+ while (stack.length > 0) {
377
+ var k = stack.shift();
378
+ if (e[k] !== void 0) {
379
+ e = e[k];
380
+ }
381
+ else {
382
+ if (!options.force) {
383
+ last.unshift(k);
384
+ last = stack.concat(last);
385
+ break;
386
+ }
387
+ var isNextNum = typeof stack[0] === 'number';
388
+ var isLastNum = stack.length === 0 && typeof last[0] === 'number';
389
+ e[k] = isNextNum || isLastNum ? [] : {};
390
+ e = e[k];
391
+ }
392
+ }
393
+ return [e, last];
394
+ }
395
+ function arrize(path, glue) {
396
+ if (glue === void 0) { glue = '.'; }
397
+ if (Array.isArray(path)) {
398
+ return path.slice();
399
+ }
400
+ if (path === void 0 || path === null || path === false || path === '') {
401
+ return [];
402
+ }
403
+ return path.toString().split(glue)
404
+ .map(function (e) {
405
+ if ([void 0, null, false, ''].includes(e)) {
406
+ return null;
407
+ }
408
+ return e.toString();
409
+ })
410
+ .filter(function (e) { return e !== null; });
411
+ }
270
412
  function deepDiffDetails(obj1, obj2) {
271
413
  var diff = (0, deep_object_diff_1.detailedDiff)(obj2, obj1);
272
414
  var diffString = '';
273
415
  var formatObjectDiff = function (obj1, obj2) {
416
+ if (typeof obj1 === 'string' && typeof obj2 === 'string') {
417
+ return "from: \"".concat(obj1, "\" to: \"").concat(obj2, "\"");
418
+ }
274
419
  if (!obj1 || !obj2)
275
420
  return '';
276
421
  return Object.keys(obj1)
@@ -305,200 +450,6 @@ function deepDiffDetails(obj1, obj2) {
305
450
  return diffString;
306
451
  }
307
452
  exports.deepDiffDetails = deepDiffDetails;
308
- function applyMongoUpdate(uDoc, delta) {
309
- var orig, k, pathk, vk, n, n1, n2, name, o, o1, o2, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9a, ref9b, ref10, ref11, ref12a, ref12b, ref13, v;
310
- orig = deepCopy(uDoc);
311
- if (delta != null) {
312
- if (delta.$rename != null) {
313
- ref = delta.$rename;
314
- // tslint:disable-next-line:forin
315
- for (k in ref) {
316
- v = ref[k];
317
- ref1 = resolve(uDoc, k), o1 = ref1[0], n1 = ref1[1];
318
- ref2 = resolve(uDoc, v), o2 = ref2[0], n2 = ref2[1];
319
- if ((o1 != null) && n1.length === 1) {
320
- if ((o2 != null) && n2.length === 1) {
321
- o2[n2[0]] = o1[n1[0]];
322
- delete o1[n1[0]];
323
- }
324
- else {
325
- // throw new Error(o2 + '/' + n2 + ' - couldn\'t resolve first for ' + uDoc + ' ' + v);
326
- console.log('Error', o2 + '/' + n2 + ' - couldn\'t resolve first for ' + uDoc + ' ' + v);
327
- }
328
- }
329
- else {
330
- // throw new Error(o1 + '/' + n1 + ' - couldn\'t resolve second for ' + uDoc + ' ' + k);
331
- console.log('Error', o1 + '/' + n1 + ' - couldn\'t resolve second for ' + uDoc + ' ' + k);
332
- }
333
- }
334
- }
335
- if (delta.$set != null) {
336
- ref3 = delta.$set;
337
- // tslint:disable-next-line:forin
338
- for (k in ref3) {
339
- v = ref3[k];
340
- ref4 = resolve(uDoc, k, {
341
- force: true
342
- }), o = ref4[0], n = ref4[1];
343
- if ((o != null) && n.length === 1) {
344
- o[n[0]] = v;
345
- }
346
- else {
347
- // throw new Error(o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
348
- console.log('Error', o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
349
- }
350
- }
351
- }
352
- if (delta.$inc != null) {
353
- ref5 = delta.$inc;
354
- // tslint:disable-next-line:forin
355
- for (k in ref5) {
356
- v = ref5[k];
357
- ref6 = resolve(uDoc, k, {
358
- force: true
359
- }), o = ref6[0], n = ref6[1];
360
- if ((o != null) && n.length === 1) {
361
- if (o[name = n[0]] == null) {
362
- o[name] = 0;
363
- }
364
- o[n[0]] += v;
365
- }
366
- else {
367
- // throw new Error(o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
368
- console.log('Error', o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
369
- }
370
- }
371
- }
372
- if (delta.$unset != null) {
373
- ref7 = delta.$unset;
374
- // tslint:disable-next-line:forin
375
- for (k in ref7) {
376
- v = ref7[k];
377
- ref8 = resolve(uDoc, k), o = ref8[0], n = ref8[1];
378
- if ((o != null) && n.length === 1) {
379
- delete o[n[0]];
380
- }
381
- else {
382
- // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + k);
383
- console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + k);
384
- }
385
- }
386
- }
387
- if (delta.$pull != null) {
388
- ref9a = delta.$pull;
389
- // tslint:disable-next-line:forin
390
- for (pathk in ref9a) { // should only loop 1 time
391
- ref9b = ref9a[pathk];
392
- for (var kk = (ref9b.length - 1); kk >= 0; kk--) {
393
- vk = ref9b[kk];
394
- ref10 = resolve(uDoc, pathk), o = ref10[0], n = ref10[1];
395
- ref11 = resolve(orig, pathk), o2 = ref11[0], n2 = ref11[1];
396
- if ((o != null) && n.length === 1) {
397
- o[n[0]].splice(o2[n2[0]].findIndex(function (z) { return JSON.stringify(z) === JSON.stringify(vk); }), 1);
398
- }
399
- else {
400
- // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
401
- console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
402
- }
403
- }
404
- }
405
- }
406
- if (delta.$push != null) {
407
- ref12a = delta.$push;
408
- // tslint:disable-next-line:forin
409
- for (pathk in ref12a) { // should only loop 1 time
410
- ref12b = ref12a[pathk];
411
- // for (let kk = 0; kk < ref12b.length; kk++) {
412
- for (var kk = (ref12b.length - 1); kk >= 0; kk--) {
413
- vk = ref12b[kk];
414
- ref13 = resolve(uDoc, pathk), o = ref13[0], n = ref13[1];
415
- if ((o != null) && n.length === 1) {
416
- o[n[0]].push(vk);
417
- }
418
- else {
419
- // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
420
- console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
421
- }
422
- }
423
- }
424
- }
425
- }
426
- return uDoc;
427
- }
428
- exports.applyMongoUpdate = applyMongoUpdate;
429
- function resolve(a, path, options) {
430
- var e, k, last, stack;
431
- if (options == null) {
432
- options = {};
433
- }
434
- stack = arrize(path);
435
- last = [];
436
- if (stack.length > 0) {
437
- last.unshift(stack.pop());
438
- }
439
- e = a;
440
- if (e !== null) {
441
- while ((k = stack.shift()) !== void 0) {
442
- if (e[k] !== void 0) {
443
- e = e[k];
444
- }
445
- else {
446
- stack.unshift(k);
447
- break;
448
- }
449
- }
450
- }
451
- if (options.force) {
452
- while ((k = stack.shift()) !== void 0) {
453
- if ((typeof stack[0] === 'number') || ((stack.length === 0) && (typeof last[0] === 'number'))) {
454
- e[k] = [];
455
- }
456
- else {
457
- e[k] = {};
458
- }
459
- e = e[k];
460
- }
461
- }
462
- else {
463
- while ((k = stack.pop()) !== void 0) {
464
- last.unshift(k);
465
- }
466
- }
467
- return [e, last];
468
- }
469
- function arrize(path, glue) {
470
- if (glue == null) {
471
- glue = '.';
472
- }
473
- return ((function () {
474
- if (Array.isArray(path)) {
475
- return path.slice(0);
476
- }
477
- else {
478
- switch (path) {
479
- case void 0:
480
- case null:
481
- case false:
482
- case '':
483
- return [];
484
- default:
485
- return path.toString().split(glue);
486
- }
487
- }
488
- })()).map(function (e) {
489
- switch (e) {
490
- case void 0:
491
- case null:
492
- case false:
493
- case '':
494
- return null;
495
- default:
496
- return e.toString();
497
- }
498
- }).filter(function (e) {
499
- return e != null;
500
- });
501
- }
502
453
  function getBinarySize(string) {
503
454
  if (string) {
504
455
  return Buffer.byteLength(string, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/common.ts"],"names":[],"mappings":"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","file":"common.js","sourcesContent":["let rusDiff = require('rus-diff');\nlet deepDiff = require('deep-diff').diff;\nimport { detailedDiff } from 'deep-object-diff';\nimport { LookupTables } from '../models/report-builder.model';\nlet clone = require('clone');\nimport * as moment from 'moment';\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 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(oldDoc);\n\tupDoc.__v = currentDoc.__v;\n\tlet diff_1 = getDeepDiff(oldDoc, currentDoc);\n\tlet diff_2 = getDeepDiff(oldDoc, f_doc);\n\tlet updates = mergeUpdates(diff_2, diff_1);\n\tapplyMongoUpdate(upDoc, updates);\n\treturn upDoc;\n}\n\nexport function mergeUpdates(...updatesToMerge) {\n\tlet merged = {\n\t\t$set: {},\n\t\t$unset: {},\n\t\t$inc: {},\n\t\t$push: {},\n\t\t$pull: {}\n\t};\n\n\tupdatesToMerge.filter(a => a).forEach(anUpdate => {\n\t\tanUpdate.forEach(change => {\n\t\t\tlet path = change.path[0];\n\n\t\t\tfor (let i = 1; i < change.path.length; i++) {\n\t\t\t\tpath += '.' + change.path[i];\n\t\t\t}\n\n\t\t\tif (change.kind === 'E') {\n\t\t\t\tif (typeof(change.rhs) === 'number' && path.endsWith('quantity')) {\n\t\t\t\t\tif (merged.$inc[path]) {\n\t\t\t\t\t\tmerged.$inc[path] += change.rhs - change.lhs;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tmerged.$inc[path] = change.rhs - change.lhs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmerged.$set[path] = change.rhs;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (change.kind === 'A') {\n\t\t\t\tif (change.item.kind === 'N') {\n\t\t\t\t\t\n\t\t\t\t\tif (!merged.$push[path] || JSON.stringify(merged.$push[path]) !== JSON.stringify(change.item.rhs)) {\n\t\t\t\t\t\tif (!merged.$push[path]) {\n\t\t\t\t\t\t\tmerged.$push[path] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!merged.$push[path].filter(a => JSON.stringify(a) === JSON.stringify(change.item.rhs)).length) {\n\t\t\t\t\t\t\tmerged.$push[path].push(change.item.rhs);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (change.item.kind === 'D') {\n\t\t\t\t\tif (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {\n\t\t\t\t\t\tif (!merged.$pull[path]) {\n\t\t\t\t\t\t\tmerged.$pull[path] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!merged.$pull[path].filter(a => JSON.stringify(a) === JSON.stringify(change.item.lhs)).length) {\n\t\t\t\t\t\t\tmerged.$pull[path].push(change.item.lhs);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (change.item.kind === 'E') {\n\t\t\t\t\tconsole.log('Condition E not satisfied.');\n\t\t\t\t\t// if (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {\n\t\t\t\t\t// \tmerged.$pull[path] = change.item.lhs;\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\treturn merged;\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 deepDiffDetails(obj1: Object, obj2: Object): string {\n let diff = detailedDiff(obj2, obj1);\n let diffString = '';\n\n const formatObjectDiff = (obj1: any, obj2: any): string => {\n if (!obj1 || !obj2) return '';\n\n return Object.keys(obj1)\n .map(key => {\n if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {\n const arrayDiff = obj1[key].map((item: any, index: number) => \n typeof item === 'object' && obj2[key][index] \n ? `{${formatObjectDiff(item, obj2[key][index])}}`\n : `\"${item}\" to \"${obj2[key][index]}\"`\n ).join(', ');\n\n return `${toTitleCase(key)}: [${arrayDiff}]`;\n } \n\n if (typeof obj1[key] === 'object' && obj2[key]) {\n return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;\n }\n\n return `${toTitleCase(key)}: \"${obj1[key]}\" to \"${obj2[key]}\"`;\n })\n .join(', ');\n };\n\n if (Object.keys(diff.updated).length > 0) {\n diffString += 'Updated:\\n';\n\n const updates = Object.keys(diff.updated)\n .filter(key => key.substr(0, 2) !== 'id' && diff.updated[key] !== obj2[key])\n .map(key => \n moment.isDate(diff.updated[key])\n ? `${toTitleCase(key)}: \"${moment(diff.updated[key]).format('llll')}\" to \"${moment(obj2[key]).format('llll')}\"`\n : `${toTitleCase(key)}: {${formatObjectDiff(diff.updated[key], obj2[key])}}`\n )\n .join(',\\n');\n\n diffString += updates ? `${updates}\\n` : '';\n }\n\n return diffString;\n}\n\nexport function applyMongoUpdate(uDoc, delta) {\n\tlet orig, k, pathk, vk, n, n1, n2, name, o, o1, o2, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9a, ref9b, ref10, ref11, ref12a, ref12b, ref13, v;\n\n\torig = deepCopy(uDoc);\n\n\tif (delta != null) {\n\t\tif (delta.$rename != null) {\n\t\t\tref = delta.$rename;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (k in ref) {\n\t\t\t\tv = ref[k];\n\t\t\t\tref1 = resolve(uDoc, k), o1 = ref1[0], n1 = ref1[1];\n\t\t\t\tref2 = resolve(uDoc, v), o2 = ref2[0], n2 = ref2[1];\n\t\t\t\tif ((o1 != null) && n1.length === 1) {\n\t\t\t\t\tif ((o2 != null) && n2.length === 1) {\n\t\t\t\t\t\to2[n2[0]] = o1[n1[0]];\n\t\t\t\t\t\tdelete o1[n1[0]];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// throw new Error(o2 + '/' + n2 + ' - couldn\\'t resolve first for ' + uDoc + ' ' + v);\n\t\t\t\t\t\tconsole.log('Error', o2 + '/' + n2 + ' - couldn\\'t resolve first for ' + uDoc + ' ' + v);\n\t\t\t\t\t}\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\t// throw new Error(o1 + '/' + n1 + ' - couldn\\'t resolve second for ' + uDoc + ' ' + k);\n\t\t\t\t\tconsole.log('Error', o1 + '/' + n1 + ' - couldn\\'t resolve second for ' + uDoc + ' ' + k);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (delta.$set != null) {\n\t\t\tref3 = delta.$set;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (k in ref3) {\n\t\t\t\tv = ref3[k];\n\t\t\t\tref4 = resolve(uDoc, k, {\n\t\t\t\t\tforce: true\n\t\t\t\t}), o = ref4[0], n = ref4[1];\n\t\t\t\tif ((o != null) && n.length === 1) {\n\t\t\t\t\to[n[0]] = v;\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\t// throw new Error(o + '/' + n + ' - couldn\\'t set for ' + uDoc + ' ' + k);\n\t\t\t\t\tconsole.log('Error', o + '/' + n + ' - couldn\\'t set for ' + uDoc + ' ' + k);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (delta.$inc != null) {\n\t\t\tref5 = delta.$inc;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (k in ref5) {\n\t\t\t\tv = ref5[k];\n\t\t\t\tref6 = resolve(uDoc, k, {\n\t\t\t\tforce: true\n\t\t\t\t}), o = ref6[0], n = ref6[1];\n\t\t\t\tif ((o != null) && n.length === 1) {\n\t\t\t\t\tif (o[name = n[0]] == null) {\n\t\t\t\t\t\to[name] = 0;\n\t\t\t\t\t}\n\t\t\t\t\to[n[0]] += v;\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\t// throw new Error(o + '/' + n + ' - couldn\\'t set for ' + uDoc + ' ' + k);\n\t\t\t\t\tconsole.log('Error', o + '/' + n + ' - couldn\\'t set for ' + uDoc + ' ' + k);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (delta.$unset != null) {\n\t\t\tref7 = delta.$unset;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (k in ref7) {\n\t\t\t\tv = ref7[k];\n\t\t\t\tref8 = resolve(uDoc, k), o = ref8[0], n = ref8[1];\n\t\t\t\tif ((o != null) && n.length === 1) {\n\t\t\t\t\tdelete o[n[0]];\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\t// throw new Error(o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + k);\n\t\t\t\t\tconsole.log('Error', o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + k);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (delta.$pull != null) {\n\t\t\tref9a = delta.$pull;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (pathk in ref9a) { // should only loop 1 time\n\t\t\t\tref9b = ref9a[pathk];\n\t\t\t\tfor (let kk = (ref9b.length - 1); kk >= 0; kk--) {\n\t\t\t\t\tvk = ref9b[kk];\n\t\t\t\t\t\n\t\t\t\t\tref10 = resolve(uDoc, pathk), o = ref10[0], n = ref10[1];\n\t\t\t\t\tref11 = resolve(orig, pathk), o2 = ref11[0], n2 = ref11[1];\n\t\t\t\t\tif ((o != null) && n.length === 1) {\n\t\t\t\t\t\to[n[0]].splice((<Array<any>>o2[n2[0]]).findIndex(z => JSON.stringify(z) === JSON.stringify(vk)), 1);\n\t\t\t\t\t} \n\t\t\t\t\telse {\n\t\t\t\t\t\t// throw new Error(o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + pathk);\n\t\t\t\t\t\tconsole.log('Error', o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + pathk);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (delta.$push != null) {\n\t\t\tref12a = delta.$push;\n\t\t\t// tslint:disable-next-line:forin\n\t\t\tfor (pathk in ref12a) { // should only loop 1 time\n\t\t\t\tref12b = ref12a[pathk];\n\t\t\t\t// for (let kk = 0; kk < ref12b.length; kk++) {\n\t\t\t\tfor (let kk = (ref12b.length - 1); kk >= 0; kk--) {\n\t\t\t\t\t\tvk = ref12b[kk];\n\n\t\t\t\t\tref13 = resolve(uDoc, pathk), o = ref13[0], n = ref13[1];\n\t\t\t\t\tif ((o != null) && n.length === 1) {\n\t\t\t\t\t\to[n[0]].push(vk);\n\t\t\t\t\t} \n\t\t\t\t\telse {\n\t\t\t\t\t\t// throw new Error(o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + pathk);\n\t\t\t\t\t\tconsole.log('Error', o + '/' + n + ' - couldn\\'t unset for ' + uDoc + ' ' + pathk);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn uDoc;\n}\n\nfunction resolve(a, path, options?) {\n\tlet e, k, last, stack;\n\tif (options == null) {\n\t\toptions = {};\n\t}\n\tstack = arrize(path);\n\tlast = [];\n\tif (stack.length > 0) {\n\t\tlast.unshift(stack.pop());\n\t}\n\te = a;\n\tif (e !== null) {\n\t\twhile ((k = stack.shift()) !== void 0) {\n\t\t\tif (e[k] !== void 0) {\n\t\t\te = e[k];\n\t\t\t} else {\n\t\t\tstack.unshift(k);\n\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (options.force) {\n\t\twhile ((k = stack.shift()) !== void 0) {\n\t\t\tif ((typeof stack[0] === 'number') || ((stack.length === 0) && (typeof last[0] === 'number'))) {\n\t\t\te[k] = [];\n\t\t\t} else {\n\t\t\te[k] = {};\n\t\t\t}\n\t\t\te = e[k];\n\t\t}\n\t} \n\telse {\n\t\twhile ((k = stack.pop()) !== void 0) {\n\t\t\tlast.unshift(k);\n\t\t}\n\t}\n\treturn [e, last];\n}\n\nfunction arrize(path, glue?) {\n\tif (glue == null) {\n\t\tglue = '.';\n\t}\n\treturn ((function() {\n\t\tif (Array.isArray(path)) {\n\t\t\treturn path.slice(0);\n\t\t} \n\t\telse {\n\t\t\tswitch (path) {\n\t\t\tcase void 0:\n\t\t\tcase null:\n\t\t\tcase false:\n\t\t\tcase '':\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\treturn path.toString().split(glue);\n\t\t\t}\n\t\t}\n\t})()).map(function(e) {\n\t\tswitch (e) {\n\t\t\tcase void 0:\n\t\t\tcase null:\n\t\t\tcase false:\n\t\t\tcase '':\n\t\t\treturn null;\n\t\t\tdefault:\n\t\t\treturn e.toString();\n\t\t}\n\t}).filter(function(e) {\n\t\treturn e != null;\n\t});\n}\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":[],"mappings":"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","file":"common.js","sourcesContent":["let rusDiff = require('rus-diff');\nlet deepDiff = require('deep-diff').diff;\nimport { detailedDiff } from 'deep-object-diff';\nimport { LookupTables } from '../models/report-builder.model';\nlet clone = require('clone');\nimport * as moment from 'moment';\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 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(oldDoc);\n\tupDoc.__v = currentDoc.__v;\n\tlet diff_1 = getDeepDiff(oldDoc, currentDoc);\n\tlet diff_2 = getDeepDiff(oldDoc, f_doc);\n\tlet updates = mergeUpdates(diff_2, diff_1);\n\tapplyMongoUpdate(upDoc, updates);\n\treturn upDoc;\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 if (typeof(change.rhs) === 'number' && (path.includes('quantity') || path.includes('qty'))) {\n merged.$inc[path] = (merged.$inc[path] || 0) + change.rhs - change.lhs;\n } else {\n merged.$set[path] = change.rhs;\n }\n}\n\nfunction handleArrayChange(merged, path, change) {\n if (change.item.kind === 'N') {\n merged.$push[path] = merged.$push[path] || [];\n if (!merged.$push[path].some(a => JSON.stringify(a) === JSON.stringify(change.item.rhs))) {\n merged.$push[path].push(change.item.rhs);\n }\n } else if (change.item.kind === 'D') {\n merged.$pull[path] = merged.$pull[path] || [];\n if (!merged.$pull[path].some(a => JSON.stringify(a) === JSON.stringify(change.item.lhs))) {\n merged.$pull[path].push(change.item.lhs);\n }\n }\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 o[n[0]] = (o[n[0]] || 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 o[n[0]].splice((<Array<any>>o2[n2[0]]).findIndex(z => JSON.stringify(z) === JSON.stringify(vk)), 1);\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(obj1: Object, obj2: Object): string {\n let diff = detailedDiff(obj2, obj1);\n let diffString = '';\n\n const formatObjectDiff = (obj1: any, obj2: any): string => {\n if (typeof obj1 === 'string' && typeof obj2 === 'string') {\n return `from: \"${obj1}\" to: \"${obj2}\"`;\n }\n\n if (!obj1 || !obj2) return '';\n\n return Object.keys(obj1)\n .map(key => {\n if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {\n const arrayDiff = obj1[key].map((item: any, index: number) => \n typeof item === 'object' && obj2[key][index] \n ? `{${formatObjectDiff(item, obj2[key][index])}}`\n : `\"${item}\" to \"${obj2[key][index]}\"`\n ).join(', ');\n\n return `${toTitleCase(key)}: [${arrayDiff}]`;\n } \n\n if (typeof obj1[key] === 'object' && obj2[key]) {\n return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;\n }\n\n return `${toTitleCase(key)}: \"${obj1[key]}\" to \"${obj2[key]}\"`;\n })\n .join(', ');\n };\n\n if (Object.keys(diff.updated).length > 0) {\n diffString += 'Updated:\\n';\n\n const updates = Object.keys(diff.updated)\n .filter(key => key.substr(0, 2) !== 'id' && diff.updated[key] !== obj2[key])\n .map(key => \n moment.isDate(diff.updated[key])\n ? `${toTitleCase(key)}: \"${moment(diff.updated[key]).format('llll')}\" to \"${moment(obj2[key]).format('llll')}\"`\n : `${toTitleCase(key)}: {${formatObjectDiff(diff.updated[key], obj2[key])}}`\n )\n .join(',\\n');\n\n diffString += updates ? `${updates}\\n` : '';\n }\n\n return 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}"]}