@resolveio/server-lib 12.5.53 → 12.5.54

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.
Files changed (400) hide show
  1. package/.nodemon.json +5 -0
  2. package/.vscode/settings.json +3 -0
  3. package/README.md +22 -0
  4. package/compileDTS.pl +64 -0
  5. package/gulpfile.js +127 -0
  6. package/mongodbensurers.js +2 -0
  7. package/mongostop.js +3 -0
  8. package/package.json +1 -1
  9. package/settings.development.json +13 -0
  10. package/src/client-server-app.ts +7 -0
  11. package/src/collections/app-status.collection.ts +51 -0
  12. package/src/collections/counter.collection.ts +54 -0
  13. package/src/collections/cron-job-history.collection.ts +82 -0
  14. package/src/collections/cron-job.collection.ts +85 -0
  15. package/src/collections/email-history.collection.ts +66 -0
  16. package/src/collections/email-verified.collection.ts +61 -0
  17. package/src/collections/file.collection.ts +73 -0
  18. package/src/collections/flag.collection.ts +56 -0
  19. package/src/collections/log-method-latency.collection.ts +64 -0
  20. package/src/collections/log-subscription.collection.ts +68 -0
  21. package/src/collections/log-ts.collection.ts +78 -0
  22. package/src/collections/log.collection.ts +77 -0
  23. package/src/collections/logged-in-users.collection.ts +65 -0
  24. package/src/collections/method-response.collection.ts +66 -0
  25. package/src/collections/monitor-cpu.collection.ts +63 -0
  26. package/src/collections/monitor-memory.collection.ts +75 -0
  27. package/src/collections/monitor-mongo.collection.ts +69 -0
  28. package/src/collections/notification.collection.ts +51 -0
  29. package/src/collections/report-builder-dashboard-builder.collection.ts +109 -0
  30. package/src/collections/report-builder-library.collection.ts +89 -0
  31. package/src/collections/report-builder-report.collection.ts +149 -0
  32. package/src/collections/user-group.collection.ts +90 -0
  33. package/src/collections/user-guide.collection.ts +57 -0
  34. package/src/collections/user.collection.ts +259 -0
  35. package/src/cron/cron.ts +188 -0
  36. package/src/fixtures/cron-jobs.ts +25 -0
  37. package/src/fixtures/init.ts +10 -0
  38. package/src/http/auth.ts +732 -0
  39. package/src/http/health.ts +7 -0
  40. package/src/http/home.ts +71 -0
  41. package/src/index.ts +71 -0
  42. package/src/managers/cron.manager.ts +208 -0
  43. package/src/managers/method.manager.ts +607 -0
  44. package/src/managers/mongo.manager.ts +2282 -0
  45. package/src/managers/monitor.manager.ts +323 -0
  46. package/src/managers/subscription.manager.ts +1196 -0
  47. package/{managers/subscription.performance.js → src/managers/subscription.performance.ts} +68 -33
  48. package/src/methods/accounts.ts +202 -0
  49. package/src/methods/aws.ts +507 -0
  50. package/src/methods/collections.ts +512 -0
  51. package/src/methods/counters.ts +75 -0
  52. package/src/methods/cron-jobs.ts +1454 -0
  53. package/src/methods/flags.ts +7 -0
  54. package/src/methods/logs.ts +327 -0
  55. package/src/methods/monitor.ts +548 -0
  56. package/src/methods/pdf.ts +615 -0
  57. package/src/methods/report-builder.ts +876 -0
  58. package/src/methods/support.ts +146 -0
  59. package/{models/app-status.model.d.ts → src/models/app-status.model.ts} +3 -2
  60. package/{models/billing-logged-in-users.model.d.ts → src/models/billing-logged-in-users.model.ts} +5 -4
  61. package/src/models/collection-document.model.ts +22 -0
  62. package/{models/counter.model.d.ts → src/models/counter.model.ts} +4 -3
  63. package/src/models/cron-job-history.model.ts +13 -0
  64. package/src/models/cron-job.model.ts +14 -0
  65. package/src/models/dialog.model.ts +25 -0
  66. package/{models/email-history.model.d.ts → src/models/email-history.model.ts} +8 -7
  67. package/{models/email-verified.model.d.ts → src/models/email-verified.model.ts} +6 -5
  68. package/{models/file.model.d.ts → src/models/file.model.ts} +8 -7
  69. package/{models/flag.model.d.ts → src/models/flag.model.ts} +4 -3
  70. package/{models/log-method-latency.model.d.ts → src/models/log-method-latency.model.ts} +5 -4
  71. package/{models/log-subscription.model.d.ts → src/models/log-subscription.model.ts} +8 -6
  72. package/{models/log.model.d.ts → src/models/log.model.ts} +12 -10
  73. package/{models/logged-in-users.model.d.ts → src/models/logged-in-users.model.ts} +6 -5
  74. package/{models/method-response.model.d.ts → src/models/method-response.model.ts} +7 -6
  75. package/src/models/method.model.ts +11 -0
  76. package/{models/monitor-cpu.model.d.ts → src/models/monitor-cpu.model.ts} +9 -7
  77. package/src/models/monitor-memory.model.ts +17 -0
  78. package/src/models/monitor-mongo.model.ts +15 -0
  79. package/{models/notification.model.d.ts → src/models/notification.model.ts} +3 -2
  80. package/src/models/pagination.model.ts +30 -0
  81. package/src/models/permission.model.ts +14 -0
  82. package/src/models/report-builder-dashboard-builder.model.ts +29 -0
  83. package/src/models/report-builder-library.model.ts +20 -0
  84. package/src/models/report-builder-report.model.ts +110 -0
  85. package/src/models/report-builder.model.ts +68 -0
  86. package/src/models/select-data-label.model.ts +9 -0
  87. package/src/models/server-response.model.ts +5 -0
  88. package/src/models/subscription.model.ts +64 -0
  89. package/src/models/support-ticket.model.ts +81 -0
  90. package/src/models/user-group.model.ts +23 -0
  91. package/{models/user-guide.model.d.ts → src/models/user-guide.model.ts} +5 -4
  92. package/src/models/user.model.ts +79 -0
  93. package/{public_api.d.ts → src/public_api.ts} +1 -1
  94. package/src/publications/app-status.ts +13 -0
  95. package/src/publications/cron-jobs.ts +30 -0
  96. package/src/publications/files.ts +34 -0
  97. package/src/publications/flags.ts +20 -0
  98. package/src/publications/logs.ts +164 -0
  99. package/src/publications/method-responses.ts +13 -0
  100. package/src/publications/notifications.ts +13 -0
  101. package/src/publications/report-builder-dashboard-builders.ts +39 -0
  102. package/src/publications/report-builder-libraries.ts +41 -0
  103. package/src/publications/report-builder-reports.ts +48 -0
  104. package/src/publications/super-admin.ts +13 -0
  105. package/src/publications/user-groups.ts +12 -0
  106. package/src/publications/user-guides.ts +12 -0
  107. package/src/server-app.ts +769 -0
  108. package/src/util/common.ts +519 -0
  109. package/src/util/schema-report-builder.ts +413 -0
  110. package/tsconfig.json +30 -0
  111. package/tslint.json +143 -0
  112. package/client-server-app.d.ts +0 -1
  113. package/client-server-app.js +0 -48
  114. package/client-server-app.js.map +0 -1
  115. package/collections/app-status.collection.d.ts +0 -3
  116. package/collections/app-status.collection.js +0 -51
  117. package/collections/app-status.collection.js.map +0 -1
  118. package/collections/counter.collection.d.ts +0 -3
  119. package/collections/counter.collection.js +0 -54
  120. package/collections/counter.collection.js.map +0 -1
  121. package/collections/cron-job-history.collection.d.ts +0 -3
  122. package/collections/cron-job-history.collection.js +0 -82
  123. package/collections/cron-job-history.collection.js.map +0 -1
  124. package/collections/cron-job.collection.d.ts +0 -3
  125. package/collections/cron-job.collection.js +0 -85
  126. package/collections/cron-job.collection.js.map +0 -1
  127. package/collections/email-history.collection.d.ts +0 -3
  128. package/collections/email-history.collection.js +0 -66
  129. package/collections/email-history.collection.js.map +0 -1
  130. package/collections/email-verified.collection.d.ts +0 -3
  131. package/collections/email-verified.collection.js +0 -61
  132. package/collections/email-verified.collection.js.map +0 -1
  133. package/collections/file.collection.d.ts +0 -3
  134. package/collections/file.collection.js +0 -73
  135. package/collections/file.collection.js.map +0 -1
  136. package/collections/flag.collection.d.ts +0 -3
  137. package/collections/flag.collection.js +0 -56
  138. package/collections/flag.collection.js.map +0 -1
  139. package/collections/log-method-latency.collection.d.ts +0 -3
  140. package/collections/log-method-latency.collection.js +0 -64
  141. package/collections/log-method-latency.collection.js.map +0 -1
  142. package/collections/log-subscription.collection.d.ts +0 -3
  143. package/collections/log-subscription.collection.js +0 -68
  144. package/collections/log-subscription.collection.js.map +0 -1
  145. package/collections/log-ts.collection.d.ts +0 -3
  146. package/collections/log-ts.collection.js +0 -78
  147. package/collections/log-ts.collection.js.map +0 -1
  148. package/collections/log.collection.d.ts +0 -3
  149. package/collections/log.collection.js +0 -77
  150. package/collections/log.collection.js.map +0 -1
  151. package/collections/logged-in-users.collection.d.ts +0 -3
  152. package/collections/logged-in-users.collection.js +0 -65
  153. package/collections/logged-in-users.collection.js.map +0 -1
  154. package/collections/method-response.collection.d.ts +0 -3
  155. package/collections/method-response.collection.js +0 -66
  156. package/collections/method-response.collection.js.map +0 -1
  157. package/collections/monitor-cpu.collection.d.ts +0 -3
  158. package/collections/monitor-cpu.collection.js +0 -63
  159. package/collections/monitor-cpu.collection.js.map +0 -1
  160. package/collections/monitor-memory.collection.d.ts +0 -3
  161. package/collections/monitor-memory.collection.js +0 -75
  162. package/collections/monitor-memory.collection.js.map +0 -1
  163. package/collections/monitor-mongo.collection.d.ts +0 -3
  164. package/collections/monitor-mongo.collection.js +0 -69
  165. package/collections/monitor-mongo.collection.js.map +0 -1
  166. package/collections/notification.collection.d.ts +0 -3
  167. package/collections/notification.collection.js +0 -51
  168. package/collections/notification.collection.js.map +0 -1
  169. package/collections/report-builder-dashboard-builder.collection.d.ts +0 -3
  170. package/collections/report-builder-dashboard-builder.collection.js +0 -109
  171. package/collections/report-builder-dashboard-builder.collection.js.map +0 -1
  172. package/collections/report-builder-library.collection.d.ts +0 -3
  173. package/collections/report-builder-library.collection.js +0 -87
  174. package/collections/report-builder-library.collection.js.map +0 -1
  175. package/collections/report-builder-report.collection.d.ts +0 -4
  176. package/collections/report-builder-report.collection.js +0 -149
  177. package/collections/report-builder-report.collection.js.map +0 -1
  178. package/collections/user-group.collection.d.ts +0 -4
  179. package/collections/user-group.collection.js +0 -90
  180. package/collections/user-group.collection.js.map +0 -1
  181. package/collections/user-guide.collection.d.ts +0 -3
  182. package/collections/user-guide.collection.js +0 -57
  183. package/collections/user-guide.collection.js.map +0 -1
  184. package/collections/user.collection.d.ts +0 -4
  185. package/collections/user.collection.js +0 -259
  186. package/collections/user.collection.js.map +0 -1
  187. package/cron/cron.d.ts +0 -5
  188. package/cron/cron.js +0 -162
  189. package/cron/cron.js.map +0 -1
  190. package/fixtures/cron-jobs.d.ts +0 -1
  191. package/fixtures/cron-jobs.js +0 -73
  192. package/fixtures/cron-jobs.js.map +0 -1
  193. package/fixtures/init.d.ts +0 -1
  194. package/fixtures/init.js +0 -59
  195. package/fixtures/init.js.map +0 -1
  196. package/http/auth.d.ts +0 -2
  197. package/http/auth.js +0 -763
  198. package/http/auth.js.map +0 -1
  199. package/http/health.d.ts +0 -1
  200. package/http/health.js +0 -12
  201. package/http/health.js.map +0 -1
  202. package/http/home.d.ts +0 -2
  203. package/http/home.js +0 -66
  204. package/http/home.js.map +0 -1
  205. package/index.d.ts +0 -23
  206. package/index.js +0 -127
  207. package/index.js.map +0 -1
  208. package/managers/cron.manager.d.ts +0 -17
  209. package/managers/cron.manager.js +0 -242
  210. package/managers/cron.manager.js.map +0 -1
  211. package/managers/method.manager.d.ts +0 -38
  212. package/managers/method.manager.js +0 -595
  213. package/managers/method.manager.js.map +0 -1
  214. package/managers/mongo.manager.d.ts +0 -178
  215. package/managers/mongo.manager.js +0 -2221
  216. package/managers/mongo.manager.js.map +0 -1
  217. package/managers/monitor.manager.d.ts +0 -59
  218. package/managers/monitor.manager.js +0 -351
  219. package/managers/monitor.manager.js.map +0 -1
  220. package/managers/subscription.manager.d.ts +0 -50
  221. package/managers/subscription.manager.js +0 -1091
  222. package/managers/subscription.manager.js.map +0 -1
  223. package/managers/subscription.performance.d.ts +0 -1
  224. package/managers/subscription.performance.js.map +0 -1
  225. package/methods/accounts.d.ts +0 -2
  226. package/methods/accounts.js +0 -274
  227. package/methods/accounts.js.map +0 -1
  228. package/methods/aws.d.ts +0 -2
  229. package/methods/aws.js +0 -617
  230. package/methods/aws.js.map +0 -1
  231. package/methods/collections.d.ts +0 -2
  232. package/methods/collections.js +0 -499
  233. package/methods/collections.js.map +0 -1
  234. package/methods/counters.d.ts +0 -2
  235. package/methods/counters.js +0 -122
  236. package/methods/counters.js.map +0 -1
  237. package/methods/cron-jobs.d.ts +0 -2
  238. package/methods/cron-jobs.js +0 -1315
  239. package/methods/cron-jobs.js.map +0 -1
  240. package/methods/flags.d.ts +0 -2
  241. package/methods/flags.js +0 -9
  242. package/methods/flags.js.map +0 -1
  243. package/methods/logs.d.ts +0 -2
  244. package/methods/logs.js +0 -371
  245. package/methods/logs.js.map +0 -1
  246. package/methods/monitor.d.ts +0 -2
  247. package/methods/monitor.js +0 -565
  248. package/methods/monitor.js.map +0 -1
  249. package/methods/pdf.d.ts +0 -2
  250. package/methods/pdf.js +0 -468
  251. package/methods/pdf.js.map +0 -1
  252. package/methods/report-builder.d.ts +0 -2
  253. package/methods/report-builder.js +0 -858
  254. package/methods/report-builder.js.map +0 -1
  255. package/methods/support.d.ts +0 -2
  256. package/methods/support.js +0 -246
  257. package/methods/support.js.map +0 -1
  258. package/models/app-status.model.js +0 -4
  259. package/models/app-status.model.js.map +0 -1
  260. package/models/billing-logged-in-users.model.js +0 -4
  261. package/models/billing-logged-in-users.model.js.map +0 -1
  262. package/models/collection-document.model.d.ts +0 -19
  263. package/models/collection-document.model.js +0 -4
  264. package/models/collection-document.model.js.map +0 -1
  265. package/models/counter.model.js +0 -4
  266. package/models/counter.model.js.map +0 -1
  267. package/models/cron-job-history.model.d.ts +0 -12
  268. package/models/cron-job-history.model.js +0 -4
  269. package/models/cron-job-history.model.js.map +0 -1
  270. package/models/cron-job.model.d.ts +0 -13
  271. package/models/cron-job.model.js +0 -4
  272. package/models/cron-job.model.js.map +0 -1
  273. package/models/dialog.model.d.ts +0 -23
  274. package/models/dialog.model.js +0 -4
  275. package/models/dialog.model.js.map +0 -1
  276. package/models/email-history.model.js +0 -4
  277. package/models/email-history.model.js.map +0 -1
  278. package/models/email-verified.model.js +0 -4
  279. package/models/email-verified.model.js.map +0 -1
  280. package/models/file.model.js +0 -4
  281. package/models/file.model.js.map +0 -1
  282. package/models/flag.model.js +0 -4
  283. package/models/flag.model.js.map +0 -1
  284. package/models/log-method-latency.model.js +0 -4
  285. package/models/log-method-latency.model.js.map +0 -1
  286. package/models/log-subscription.model.js +0 -4
  287. package/models/log-subscription.model.js.map +0 -1
  288. package/models/log.model.js +0 -4
  289. package/models/log.model.js.map +0 -1
  290. package/models/logged-in-users.model.js +0 -4
  291. package/models/logged-in-users.model.js.map +0 -1
  292. package/models/method-response.model.js +0 -4
  293. package/models/method-response.model.js.map +0 -1
  294. package/models/method.model.d.ts +0 -9
  295. package/models/method.model.js +0 -4
  296. package/models/method.model.js.map +0 -1
  297. package/models/monitor-cpu.model.js +0 -4
  298. package/models/monitor-cpu.model.js.map +0 -1
  299. package/models/monitor-memory.model.d.ts +0 -15
  300. package/models/monitor-memory.model.js +0 -4
  301. package/models/monitor-memory.model.js.map +0 -1
  302. package/models/monitor-mongo.model.d.ts +0 -13
  303. package/models/monitor-mongo.model.js +0 -4
  304. package/models/monitor-mongo.model.js.map +0 -1
  305. package/models/notification.model.js +0 -4
  306. package/models/notification.model.js.map +0 -1
  307. package/models/pagination.model.d.ts +0 -10
  308. package/models/pagination.model.js +0 -24
  309. package/models/pagination.model.js.map +0 -1
  310. package/models/permission.model.d.ts +0 -12
  311. package/models/permission.model.js +0 -4
  312. package/models/permission.model.js.map +0 -1
  313. package/models/report-builder-dashboard-builder.model.d.ts +0 -25
  314. package/models/report-builder-dashboard-builder.model.js +0 -4
  315. package/models/report-builder-dashboard-builder.model.js.map +0 -1
  316. package/models/report-builder-library.model.d.ts +0 -17
  317. package/models/report-builder-library.model.js +0 -4
  318. package/models/report-builder-library.model.js.map +0 -1
  319. package/models/report-builder-report.model.d.ts +0 -98
  320. package/models/report-builder-report.model.js +0 -4
  321. package/models/report-builder-report.model.js.map +0 -1
  322. package/models/report-builder.model.d.ts +0 -61
  323. package/models/report-builder.model.js +0 -4
  324. package/models/report-builder.model.js.map +0 -1
  325. package/models/select-data-label.model.d.ts +0 -9
  326. package/models/select-data-label.model.js +0 -4
  327. package/models/select-data-label.model.js.map +0 -1
  328. package/models/server-response.model.d.ts +0 -5
  329. package/models/server-response.model.js +0 -4
  330. package/models/server-response.model.js.map +0 -1
  331. package/models/subscription.model.d.ts +0 -23
  332. package/models/subscription.model.js +0 -4
  333. package/models/subscription.model.js.map +0 -1
  334. package/models/support-ticket.model.d.ts +0 -72
  335. package/models/support-ticket.model.js +0 -4
  336. package/models/support-ticket.model.js.map +0 -1
  337. package/models/user-group.model.d.ts +0 -19
  338. package/models/user-group.model.js +0 -4
  339. package/models/user-group.model.js.map +0 -1
  340. package/models/user-guide.model.js +0 -4
  341. package/models/user-guide.model.js.map +0 -1
  342. package/models/user.model.d.ts +0 -70
  343. package/models/user.model.js +0 -4
  344. package/models/user.model.js.map +0 -1
  345. package/public_api.js +0 -75
  346. package/public_api.js.map +0 -1
  347. package/publications/app-status.d.ts +0 -2
  348. package/publications/app-status.js +0 -17
  349. package/publications/app-status.js.map +0 -1
  350. package/publications/cron-jobs.d.ts +0 -2
  351. package/publications/cron-jobs.js +0 -33
  352. package/publications/cron-jobs.js.map +0 -1
  353. package/publications/files.d.ts +0 -2
  354. package/publications/files.js +0 -37
  355. package/publications/files.js.map +0 -1
  356. package/publications/flags.d.ts +0 -2
  357. package/publications/flags.js +0 -23
  358. package/publications/flags.js.map +0 -1
  359. package/publications/logs.d.ts +0 -2
  360. package/publications/logs.js +0 -165
  361. package/publications/logs.js.map +0 -1
  362. package/publications/method-responses.d.ts +0 -2
  363. package/publications/method-responses.js +0 -17
  364. package/publications/method-responses.js.map +0 -1
  365. package/publications/notifications.d.ts +0 -2
  366. package/publications/notifications.js +0 -17
  367. package/publications/notifications.js.map +0 -1
  368. package/publications/report-builder-dashboard-builders.d.ts +0 -2
  369. package/publications/report-builder-dashboard-builders.js +0 -43
  370. package/publications/report-builder-dashboard-builders.js.map +0 -1
  371. package/publications/report-builder-libraries.d.ts +0 -2
  372. package/publications/report-builder-libraries.js +0 -90
  373. package/publications/report-builder-libraries.js.map +0 -1
  374. package/publications/report-builder-reports.d.ts +0 -2
  375. package/publications/report-builder-reports.js +0 -51
  376. package/publications/report-builder-reports.js.map +0 -1
  377. package/publications/super-admin.d.ts +0 -2
  378. package/publications/super-admin.js +0 -17
  379. package/publications/super-admin.js.map +0 -1
  380. package/publications/user-groups.d.ts +0 -1
  381. package/publications/user-groups.js +0 -17
  382. package/publications/user-groups.js.map +0 -1
  383. package/publications/user-guides.d.ts +0 -1
  384. package/publications/user-guides.js +0 -17
  385. package/publications/user-guides.js.map +0 -1
  386. package/server-app.d.ts +0 -52
  387. package/server-app.js +0 -739
  388. package/server-app.js.map +0 -1
  389. package/util/common.d.ts +0 -24
  390. package/util/common.js +0 -511
  391. package/util/common.js.map +0 -1
  392. package/util/schema-report-builder.d.ts +0 -6
  393. package/util/schema-report-builder.js +0 -453
  394. package/util/schema-report-builder.js.map +0 -1
  395. /package/{private → src/private}/email-templates/enrollment.html +0 -0
  396. /package/{private → src/private}/email-templates/forgot-password.html +0 -0
  397. /package/{private → src/private}/email-templates/support-ticket-deleted.html +0 -0
  398. /package/{private → src/private}/email-templates/support-ticket-modified.html +0 -0
  399. /package/{private → src/private}/email-templates/support-ticket.html +0 -0
  400. /package/{private → src/private}/images/ResolveIO.png +0 -0
@@ -0,0 +1,519 @@
1
+ let rusDiff = require('rus-diff');
2
+ let deepDiff = require('deep-diff').diff;
3
+ import { LookupTables } from '../models/report-builder.model';
4
+ let clone = require('clone');
5
+
6
+ export function buildRbSchema(rbSchema: any) {
7
+ Object.keys(rbSchema).forEach(key => {
8
+ if (rbSchema[key].type === Object) {
9
+ rbSchema[key].type = 'Object';
10
+ rbSchema[key].rbType = 'Object';
11
+ }
12
+ else if (rbSchema[key].type === Array) {
13
+ rbSchema[key].type = 'Array';
14
+ rbSchema[key].rbType = 'Array';
15
+ }
16
+ else if (rbSchema[key].type === String) {
17
+ rbSchema[key].type = 'String';
18
+ rbSchema[key].rbType = 'String';
19
+ }
20
+ else if (rbSchema[key].type === Date) {
21
+ rbSchema[key].type = 'Date';
22
+ rbSchema[key].rbType = 'Date';
23
+ }
24
+ else if (rbSchema[key].type === Number) {
25
+ rbSchema[key].type = 'Number';
26
+ rbSchema[key].rbType = 'Number';
27
+ }
28
+ else if (rbSchema[key].type === Boolean) {
29
+ rbSchema[key].rbType = 'Boolean';
30
+ rbSchema[key].type = 'Boolean';
31
+ }
32
+ });
33
+
34
+ Object.keys(rbSchema).forEach(key => {
35
+ delete rbSchema[key].type;
36
+ });
37
+
38
+ return rbSchema;
39
+ }
40
+
41
+ export function buildRbLookups(rbLookups: LookupTables[], defaultSchema: object, default_checked_array: string[] = []) {
42
+ // Remember: lkp.local_key will be removed later on, because it has 'id_'
43
+
44
+ rbLookups.forEach(lkp => {
45
+ let errString = '';
46
+ let localKey, newPropertyName;
47
+ let localKeyDir = '';
48
+ let localKeyDirDot = '';
49
+ let collectionAlias = toTitleCase(lkp.lookup.replace(/\_/g, ' ')) + ' (' + toTitleCase(lkp.local_key.replace('id_', '').replace(/\_/g, ' ').replace(/\.\$\./g, ' -> ').replace(/\./g, ' -> ')) + ') (Lookup)';
50
+
51
+ if (lkp.local_key.match(/\./)) {
52
+ localKey = lkp.local_key.replace(/\.\$/g, '');
53
+ localKeyDirDot = lkp.local_key.replace(/^(.+\.).*$/, '$1');
54
+ localKeyDir = localKeyDirDot.replace(/\.$/, '');
55
+ }
56
+ else {
57
+ // local_key is a root leaf node.
58
+ localKey = lkp.local_key;
59
+ }
60
+ newPropertyName = localKeyDirDot + collectionAlias;
61
+
62
+ if (!defaultSchema[lkp.local_key]) {
63
+ errString += '--local_key: \'' + lkp.local_key + '\' MUST be a valid schema path! ';
64
+ }
65
+ else if (defaultSchema[lkp.local_key].type !== String) {
66
+ errString += '--local_key: \'' + lkp.local_key + '\' MUST be a String! ';
67
+ }
68
+ let lookupNode = {
69
+ lookup_collection: lkp.lookup,
70
+ lookup_collection_alias: collectionAlias,
71
+ local_key: localKey,
72
+ field_path: localKeyDir,
73
+ lookup_as: newPropertyName,
74
+ lookup_key: '_id',
75
+ type: 'Object',
76
+ };
77
+
78
+ defaultSchema[newPropertyName] = lookupNode;
79
+
80
+ if (errString) {
81
+ throwErr(errString, lkp, lookupNode, newPropertyName);
82
+ }
83
+ });
84
+
85
+ for (let ii = 0; ii < default_checked_array.length; ii++) {
86
+ defaultSchema[default_checked_array[ii]] = {};
87
+ defaultSchema[default_checked_array[ii]]['default_checked'] = true;
88
+ Object.assign(defaultSchema[default_checked_array[ii]], defaultSchema['tree'][default_checked_array[ii]]);
89
+ }
90
+
91
+ return defaultSchema;
92
+ }
93
+
94
+ export function throwErr(err: any, lkp, lookupNode, newPropertyName = '') {
95
+ // err could be from a try/throw/catch
96
+ console.log('------- ERROR thrown by rbLookups: ');
97
+ console.log(err);
98
+ console.log('---item: ');
99
+ console.log(lkp);
100
+ console.log('---Attempted to create rbSchema[\'' + newPropertyName + '\']: ');
101
+ console.log(lookupNode);
102
+ process.exit(1);
103
+ }
104
+
105
+ export function roundPrecision(value: number, precision = 0) {
106
+ let stringValue = value.toString();
107
+
108
+ if (stringValue.includes('.')) {
109
+ if (stringValue[0] === '0') {
110
+ precision += 1;
111
+ }
112
+
113
+ precision -= stringValue.indexOf('.');
114
+ }
115
+
116
+ const exponent = Math.pow(10, precision);
117
+ return Math.round(parseFloat(stringValue) * exponent) / exponent;
118
+ }
119
+
120
+ export function deepCopy(value) {
121
+ return clone(value);
122
+ }
123
+
124
+ export function dateReviver(key, value) {
125
+ if (typeof value === 'string') {
126
+ let a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
127
+ if (a) {
128
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6].split('.')[0], +a[6].split('.')[1]));
129
+ }
130
+ }
131
+ return value;
132
+ }
133
+
134
+ export function getMongoUpdates(currDoc, modifiedDoc, incVersion) {
135
+ if (currDoc.createdAt) {
136
+ modifiedDoc.createdAt = currDoc.createdAt;
137
+ }
138
+
139
+ if (currDoc.updatedAt) {
140
+ modifiedDoc.updatedAt = currDoc.updatedAt;
141
+ }
142
+
143
+ let updates = rusDiff.diff(currDoc, modifiedDoc);
144
+
145
+ if (updates) {
146
+ if (updates.$set && !Object.keys(updates.$set).length) {
147
+ delete updates.$set;
148
+ }
149
+
150
+ if (incVersion) {
151
+ updates.$inc = {__v: 1};
152
+ }
153
+ }
154
+ else {
155
+ if (incVersion) {
156
+ updates = {
157
+ $inc: {__v: 1}
158
+ };
159
+ }
160
+ }
161
+
162
+ return updates;
163
+ }
164
+
165
+ export function getMongoMergeUpdatedDoc(f_doc, currentDoc, oldDoc) {
166
+ let upDoc = deepCopy(oldDoc);
167
+ upDoc.__v = currentDoc.__v;
168
+ let diff_1 = getDeepDiff(oldDoc, currentDoc);
169
+ let diff_2 = getDeepDiff(oldDoc, f_doc);
170
+ let updates = mergeUpdates(diff_2, diff_1);
171
+ applyMongoUpdate(upDoc, updates);
172
+ return upDoc;
173
+ }
174
+
175
+ export function mergeUpdates(...updatesToMerge) {
176
+ let merged = {
177
+ $set: {},
178
+ $unset: {},
179
+ $inc: {},
180
+ $push: {},
181
+ $pull: {}
182
+ };
183
+
184
+ updatesToMerge.filter(a => a).forEach(anUpdate => {
185
+ anUpdate.forEach(change => {
186
+ let path = change.path[0];
187
+
188
+ for (let i = 1; i < change.path.length; i++) {
189
+ path += '.' + change.path[i];
190
+ }
191
+
192
+ if (change.kind === 'E') {
193
+ if (typeof(change.rhs) === 'number' && path.endsWith('quantity')) {
194
+ if (merged.$inc[path]) {
195
+ merged.$inc[path] += change.rhs - change.lhs;
196
+ }
197
+ else {
198
+ merged.$inc[path] = change.rhs - change.lhs;
199
+ }
200
+ }
201
+ else {
202
+ merged.$set[path] = change.rhs;
203
+ }
204
+ }
205
+ else if (change.kind === 'A') {
206
+ if (change.item.kind === 'N') {
207
+
208
+ if (!merged.$push[path] || JSON.stringify(merged.$push[path]) !== JSON.stringify(change.item.rhs)) {
209
+ if (!merged.$push[path]) {
210
+ merged.$push[path] = [];
211
+ }
212
+
213
+ if (!merged.$push[path].filter(a => JSON.stringify(a) === JSON.stringify(change.item.rhs)).length) {
214
+ merged.$push[path].push(change.item.rhs);
215
+ }
216
+ }
217
+ }
218
+ else if (change.item.kind === 'D') {
219
+ if (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {
220
+ if (!merged.$pull[path]) {
221
+ merged.$pull[path] = [];
222
+ }
223
+
224
+ if (!merged.$pull[path].filter(a => JSON.stringify(a) === JSON.stringify(change.item.lhs)).length) {
225
+ merged.$pull[path].push(change.item.lhs);
226
+ }
227
+ }
228
+ }
229
+ else if (change.item.kind === 'E') {
230
+ console.log('Condition E not satisfied.');
231
+ // if (!merged.$pull[path] || JSON.stringify(merged.$pull[path]) !== JSON.stringify(change.item.lhs)) {
232
+ // merged.$pull[path] = change.item.lhs;
233
+ // }
234
+ }
235
+ }
236
+ });
237
+ });
238
+
239
+ return merged;
240
+ }
241
+
242
+ export function getDeepDiff(doc1, doc2) {
243
+ delete doc1._id;
244
+ delete doc1.__v;
245
+
246
+ if (doc1.updatedAt) {
247
+ delete doc1.updatedAt;
248
+ }
249
+
250
+ if (doc1.createdAt) {
251
+ delete doc1.createdAt;
252
+ }
253
+
254
+ delete doc2._id;
255
+ delete doc2.__v;
256
+
257
+ if (doc2.updatedAt) {
258
+ delete doc2.updatedAt;
259
+ }
260
+
261
+ if (doc2.createdAt) {
262
+ delete doc2.createdAt;
263
+ }
264
+
265
+ return deepDiff(doc1, doc2);
266
+ }
267
+
268
+ export function applyMongoUpdate(uDoc, delta) {
269
+ let 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;
270
+
271
+ orig = deepCopy(uDoc);
272
+
273
+ if (delta != null) {
274
+ if (delta.$rename != null) {
275
+ ref = delta.$rename;
276
+ // tslint:disable-next-line:forin
277
+ for (k in ref) {
278
+ v = ref[k];
279
+ ref1 = resolve(uDoc, k), o1 = ref1[0], n1 = ref1[1];
280
+ ref2 = resolve(uDoc, v), o2 = ref2[0], n2 = ref2[1];
281
+ if ((o1 != null) && n1.length === 1) {
282
+ if ((o2 != null) && n2.length === 1) {
283
+ o2[n2[0]] = o1[n1[0]];
284
+ delete o1[n1[0]];
285
+ }
286
+ else {
287
+ // throw new Error(o2 + '/' + n2 + ' - couldn\'t resolve first for ' + uDoc + ' ' + v);
288
+ console.log('Error', o2 + '/' + n2 + ' - couldn\'t resolve first for ' + uDoc + ' ' + v);
289
+ }
290
+ }
291
+ else {
292
+ // throw new Error(o1 + '/' + n1 + ' - couldn\'t resolve second for ' + uDoc + ' ' + k);
293
+ console.log('Error', o1 + '/' + n1 + ' - couldn\'t resolve second for ' + uDoc + ' ' + k);
294
+ }
295
+ }
296
+ }
297
+ if (delta.$set != null) {
298
+ ref3 = delta.$set;
299
+ // tslint:disable-next-line:forin
300
+ for (k in ref3) {
301
+ v = ref3[k];
302
+ ref4 = resolve(uDoc, k, {
303
+ force: true
304
+ }), o = ref4[0], n = ref4[1];
305
+ if ((o != null) && n.length === 1) {
306
+ o[n[0]] = v;
307
+ }
308
+ else {
309
+ // throw new Error(o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
310
+ console.log('Error', o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
311
+ }
312
+ }
313
+ }
314
+ if (delta.$inc != null) {
315
+ ref5 = delta.$inc;
316
+ // tslint:disable-next-line:forin
317
+ for (k in ref5) {
318
+ v = ref5[k];
319
+ ref6 = resolve(uDoc, k, {
320
+ force: true
321
+ }), o = ref6[0], n = ref6[1];
322
+ if ((o != null) && n.length === 1) {
323
+ if (o[name = n[0]] == null) {
324
+ o[name] = 0;
325
+ }
326
+ o[n[0]] += v;
327
+ }
328
+ else {
329
+ // throw new Error(o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
330
+ console.log('Error', o + '/' + n + ' - couldn\'t set for ' + uDoc + ' ' + k);
331
+ }
332
+ }
333
+ }
334
+ if (delta.$unset != null) {
335
+ ref7 = delta.$unset;
336
+ // tslint:disable-next-line:forin
337
+ for (k in ref7) {
338
+ v = ref7[k];
339
+ ref8 = resolve(uDoc, k), o = ref8[0], n = ref8[1];
340
+ if ((o != null) && n.length === 1) {
341
+ delete o[n[0]];
342
+ }
343
+ else {
344
+ // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + k);
345
+ console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + k);
346
+ }
347
+ }
348
+ }
349
+ if (delta.$pull != null) {
350
+ ref9a = delta.$pull;
351
+ // tslint:disable-next-line:forin
352
+ for (pathk in ref9a) { // should only loop 1 time
353
+ ref9b = ref9a[pathk];
354
+ for (let kk = (ref9b.length - 1); kk >= 0; kk--) {
355
+ vk = ref9b[kk];
356
+
357
+ ref10 = resolve(uDoc, pathk), o = ref10[0], n = ref10[1];
358
+ ref11 = resolve(orig, pathk), o2 = ref11[0], n2 = ref11[1];
359
+ if ((o != null) && n.length === 1) {
360
+ o[n[0]].splice((<Array<any>>o2[n2[0]]).findIndex(z => JSON.stringify(z) === JSON.stringify(vk)), 1);
361
+ }
362
+ else {
363
+ // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
364
+ console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
365
+ }
366
+ }
367
+ }
368
+ }
369
+ if (delta.$push != null) {
370
+ ref12a = delta.$push;
371
+ // tslint:disable-next-line:forin
372
+ for (pathk in ref12a) { // should only loop 1 time
373
+ ref12b = ref12a[pathk];
374
+ // for (let kk = 0; kk < ref12b.length; kk++) {
375
+ for (let kk = (ref12b.length - 1); kk >= 0; kk--) {
376
+ vk = ref12b[kk];
377
+
378
+ ref13 = resolve(uDoc, pathk), o = ref13[0], n = ref13[1];
379
+ if ((o != null) && n.length === 1) {
380
+ o[n[0]].push(vk);
381
+ }
382
+ else {
383
+ // throw new Error(o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
384
+ console.log('Error', o + '/' + n + ' - couldn\'t unset for ' + uDoc + ' ' + pathk);
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+ return uDoc;
391
+ }
392
+
393
+ function resolve(a, path, options?) {
394
+ let e, k, last, stack;
395
+ if (options == null) {
396
+ options = {};
397
+ }
398
+ stack = arrize(path);
399
+ last = [];
400
+ if (stack.length > 0) {
401
+ last.unshift(stack.pop());
402
+ }
403
+ e = a;
404
+ if (e !== null) {
405
+ while ((k = stack.shift()) !== void 0) {
406
+ if (e[k] !== void 0) {
407
+ e = e[k];
408
+ } else {
409
+ stack.unshift(k);
410
+ break;
411
+ }
412
+ }
413
+ }
414
+ if (options.force) {
415
+ while ((k = stack.shift()) !== void 0) {
416
+ if ((typeof stack[0] === 'number') || ((stack.length === 0) && (typeof last[0] === 'number'))) {
417
+ e[k] = [];
418
+ } else {
419
+ e[k] = {};
420
+ }
421
+ e = e[k];
422
+ }
423
+ }
424
+ else {
425
+ while ((k = stack.pop()) !== void 0) {
426
+ last.unshift(k);
427
+ }
428
+ }
429
+ return [e, last];
430
+ }
431
+
432
+ function arrize(path, glue?) {
433
+ if (glue == null) {
434
+ glue = '.';
435
+ }
436
+ return ((function() {
437
+ if (Array.isArray(path)) {
438
+ return path.slice(0);
439
+ }
440
+ else {
441
+ switch (path) {
442
+ case void 0:
443
+ case null:
444
+ case false:
445
+ case '':
446
+ return [];
447
+ default:
448
+ return path.toString().split(glue);
449
+ }
450
+ }
451
+ })()).map(function(e) {
452
+ switch (e) {
453
+ case void 0:
454
+ case null:
455
+ case false:
456
+ case '':
457
+ return null;
458
+ default:
459
+ return e.toString();
460
+ }
461
+ }).filter(function(e) {
462
+ return e != null;
463
+ });
464
+ }
465
+
466
+
467
+ export function getBinarySize(string) {
468
+ if (string) {
469
+ return Buffer.byteLength(string, 'utf8');
470
+ }
471
+ else {
472
+ return 0;
473
+ }
474
+ }
475
+
476
+ export function pad(num, size) {
477
+ let s = num + '';
478
+ while (s.length < size) { s = '0' + s; }
479
+ return s;
480
+ }
481
+
482
+ export function randomString(length, chars) {
483
+ let result = '';
484
+ for (let i = length; i > 0; --i) { result += chars[Math.floor(Math.random() * chars.length)]; }
485
+ return result;
486
+ }
487
+
488
+ export function toTitleCase(str) {
489
+ return str.replace(/\w\S*/g, function(txt){
490
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
491
+ });
492
+ }
493
+
494
+ export function isObject(item) {
495
+ return (item && typeof item === 'object' && !Array.isArray(item));
496
+ }
497
+
498
+ export function mergeDeep(target, ...sources) {
499
+ if (!sources.length) {
500
+ return target;
501
+ }
502
+ const source = sources.shift();
503
+
504
+ if (isObject(target) && isObject(source)) {
505
+ for (const key in source) {
506
+ if (isObject(source[key])) {
507
+ if (!target[key]) {
508
+ Object.assign(target, { [key]: {} });
509
+ }
510
+ mergeDeep(target[key], source[key]);
511
+ }
512
+ else {
513
+ Object.assign(target, { [key]: source[key] });
514
+ }
515
+ }
516
+ }
517
+
518
+ return mergeDeep(target, ...sources);
519
+ }