rez_core 4.0.98 → 4.0.100

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 (385) hide show
  1. package/.prettierrc +3 -3
  2. package/.vscode/extensions.json +5 -0
  3. package/README.md +99 -99
  4. package/dist/module/auth/guards/role.guard.js +3 -3
  5. package/dist/module/auth/services/auth.service.js +2 -2
  6. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  7. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  8. package/dist/module/filter/service/filter.service.js +22 -22
  9. package/dist/module/integration/examples/usage.example.js +9 -9
  10. package/dist/module/integration/service/integration.service.js +1 -1
  11. package/dist/module/integration/service/wrapper.service.js +25 -25
  12. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  13. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  14. package/dist/module/mapper/service/mapper.service.js +2 -2
  15. package/dist/module/meta/service/entity-dynamic.service.js +25 -20
  16. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  17. package/dist/module/meta/service/entity-list.service.js +3 -3
  18. package/dist/module/meta/service/entity-master.service.js +3 -3
  19. package/dist/module/meta/service/entity-relation.service.js +11 -11
  20. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  21. package/dist/module/meta/service/resolver.service.js +3 -3
  22. package/dist/module/module/repository/menu.repository.js +12 -12
  23. package/dist/module/notification/service/notification.service.js +9 -9
  24. package/dist/module/user/controller/login.controller.js +18 -18
  25. package/dist/module/user/service/role.service.js +4 -4
  26. package/dist/module/user/service/user-session.service.js +2 -2
  27. package/dist/module/workflow/repository/action.repository.js +20 -20
  28. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  29. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  30. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  31. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  32. package/dist/module/workflow/repository/stage.repository.js +8 -8
  33. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  34. package/dist/module/workflow/service/action.service.js +7 -7
  35. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  36. package/dist/module/workflow/service/stage-group.service.js +2 -2
  37. package/dist/module/workflow/service/stage.service.js +2 -2
  38. package/dist/module/workflow/service/task.service.js +28 -28
  39. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  40. package/dist/module/workflow/service/workflow-meta.service.js +35 -35
  41. package/dist/module/workflow/service/workflow.service.js +2 -2
  42. package/dist/tsconfig.build.tsbuildinfo +1 -1
  43. package/dist/utils/service/reflection-helper.service.js +2 -2
  44. package/docs/modules/event-driven-integration-design.md +91 -91
  45. package/docs/modules/integration.md +250 -250
  46. package/eslint.config.mjs +34 -34
  47. package/nest-cli.json +14 -14
  48. package/package.json +118 -118
  49. package/src/app.controller.ts +12 -12
  50. package/src/app.module.ts +49 -49
  51. package/src/app.service.ts +8 -8
  52. package/src/config/config.module.ts +18 -18
  53. package/src/config/database.config.ts +23 -23
  54. package/src/constant/global.constant.ts +67 -67
  55. package/src/core.module.ts +81 -81
  56. package/src/decorators/roles.decorator.ts +7 -7
  57. package/src/dtos/response.dto.ts +6 -6
  58. package/src/dtos/response.ts +5 -5
  59. package/src/index.ts +1 -1
  60. package/src/module/auth/auth.module.ts +49 -49
  61. package/src/module/auth/controller/auth.controller.ts +28 -28
  62. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  63. package/src/module/auth/guards/jwt.guard.ts +22 -22
  64. package/src/module/auth/guards/role.guard.ts +68 -68
  65. package/src/module/auth/services/auth.service.ts +50 -50
  66. package/src/module/auth/services/jwt.service.ts +11 -11
  67. package/src/module/auth/strategies/google.strategy.ts +54 -54
  68. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  69. package/src/module/auth/strategies/local.strategy.ts +13 -13
  70. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  71. package/src/module/dashboard/dashboard.module.ts +21 -21
  72. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  73. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  74. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  75. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  76. package/src/module/dev/dev.module.ts +12 -12
  77. package/src/module/dev/service/dev.service.ts +7 -7
  78. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  79. package/src/module/enterprise/enterprise.module.ts +30 -30
  80. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  81. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  82. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  83. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  84. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  85. package/src/module/enterprise/repository/school.repository.ts +278 -278
  86. package/src/module/enterprise/service/brand.service.ts +5 -5
  87. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  88. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  89. package/src/module/enterprise/service/organization.service.ts +145 -145
  90. package/src/module/filter/controller/filter.controller.ts +84 -84
  91. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  92. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  93. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  94. package/src/module/filter/filter.module.ts +31 -31
  95. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  96. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  97. package/src/module/filter/service/filter.service.ts +941 -941
  98. package/src/module/filter/service/saved-filter.service.ts +170 -170
  99. package/src/module/ics/controller/ics.controller.ts +21 -21
  100. package/src/module/ics/dto/ics.dto.ts +55 -55
  101. package/src/module/ics/ics.module.ts +13 -13
  102. package/src/module/ics/service/ics.service.ts +57 -57
  103. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  104. package/src/module/integration/controller/integration.controller.ts +662 -662
  105. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  106. package/src/module/integration/dto/create-config.dto.ts +526 -526
  107. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  108. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  109. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  110. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  111. package/src/module/integration/examples/usage.example.ts +338 -338
  112. package/src/module/integration/factories/base.factory.ts +7 -7
  113. package/src/module/integration/factories/email.factory.ts +49 -49
  114. package/src/module/integration/factories/integration.factory.ts +121 -121
  115. package/src/module/integration/factories/sms.factory.ts +51 -51
  116. package/src/module/integration/factories/telephone.factory.ts +41 -41
  117. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  118. package/src/module/integration/integration.module.ts +110 -110
  119. package/src/module/integration/service/calendar-event.service.ts +118 -118
  120. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  121. package/src/module/integration/service/integration-queue.service.ts +229 -229
  122. package/src/module/integration/service/integration.service.ts +2633 -2633
  123. package/src/module/integration/service/oauth.service.ts +224 -224
  124. package/src/module/integration/service/wrapper.service.ts +493 -493
  125. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  126. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  127. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  128. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  129. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  130. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  131. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  132. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  133. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  134. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  135. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  136. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  137. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  138. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  139. package/src/module/layout/controller/layout.controller.ts +47 -47
  140. package/src/module/layout/entity/header-items.entity.ts +28 -28
  141. package/src/module/layout/entity/header-section.entity.ts +19 -19
  142. package/src/module/layout/layout.module.ts +21 -21
  143. package/src/module/layout/repository/header-items.repository.ts +18 -18
  144. package/src/module/layout/repository/header-section.repository.ts +22 -22
  145. package/src/module/layout/service/header-section.service.ts +25 -25
  146. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  147. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  148. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  149. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  150. package/src/module/layout_preference/service/layout_preference.service.ts +184 -184
  151. package/src/module/lead/controller/lead.controller.ts +30 -30
  152. package/src/module/lead/lead.module.ts +14 -14
  153. package/src/module/lead/repository/lead.repository.ts +41 -41
  154. package/src/module/lead/service/lead.service.ts +54 -54
  155. package/src/module/listmaster/controller/list-master.controller.ts +187 -187
  156. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  157. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  158. package/src/module/listmaster/listmaster.module.ts +44 -44
  159. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  160. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  161. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  162. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  163. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  164. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  165. package/src/module/listmaster/service/list-master.service.ts +441 -441
  166. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  167. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  168. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  169. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  170. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  171. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  172. package/src/module/mapper/mapper.module.ts +34 -34
  173. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  174. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  175. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  176. package/src/module/mapper/service/field-mapper.service.ts +266 -266
  177. package/src/module/mapper/service/mapper.service.ts +79 -79
  178. package/src/module/master/controller/master.controller.ts +74 -74
  179. package/src/module/master/service/master.service.ts +483 -483
  180. package/src/module/meta/controller/app-master.controller.ts +38 -38
  181. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  182. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  183. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  184. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  185. package/src/module/meta/controller/entity.controller.ts +392 -392
  186. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  187. package/src/module/meta/controller/media.controller.ts +107 -107
  188. package/src/module/meta/controller/meta.controller.ts +96 -96
  189. package/src/module/meta/controller/view-master.controller.ts +86 -86
  190. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  191. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  192. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  193. package/src/module/meta/entity/app-master.entity.ts +34 -34
  194. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  195. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  196. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  197. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  198. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  199. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  200. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  201. package/src/module/meta/entity/media-data.entity.ts +32 -32
  202. package/src/module/meta/entity/preference.entity.ts +62 -62
  203. package/src/module/meta/entity/view-master.entity.ts +41 -41
  204. package/src/module/meta/entity.module.ts +158 -158
  205. package/src/module/meta/repository/app-master.repository.ts +20 -20
  206. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  207. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  208. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  209. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  210. package/src/module/meta/repository/media-data.repository.ts +50 -50
  211. package/src/module/meta/repository/preference.repository.ts +20 -20
  212. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  213. package/src/module/meta/repository/view-master.repository.ts +42 -42
  214. package/src/module/meta/service/app-master.service.ts +37 -37
  215. package/src/module/meta/service/attribute-master.service.ts +117 -117
  216. package/src/module/meta/service/common.service.ts +9 -9
  217. package/src/module/meta/service/entity-dynamic.service.ts +818 -809
  218. package/src/module/meta/service/entity-list.service.ts +205 -205
  219. package/src/module/meta/service/entity-master.service.ts +169 -169
  220. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  221. package/src/module/meta/service/entity-relation.service.ts +69 -69
  222. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  223. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  224. package/src/module/meta/service/entity-table.service.ts +150 -150
  225. package/src/module/meta/service/entity-validation.service.ts +187 -187
  226. package/src/module/meta/service/entity.service.ts +67 -67
  227. package/src/module/meta/service/field-group.service.ts +103 -103
  228. package/src/module/meta/service/media-data.service.ts +507 -507
  229. package/src/module/meta/service/populate-meta.service.ts +193 -193
  230. package/src/module/meta/service/preference.service.ts +16 -16
  231. package/src/module/meta/service/resolver.service.ts +267 -267
  232. package/src/module/meta/service/section-master.service.ts +104 -104
  233. package/src/module/meta/service/update-form-json.service.ts +22 -22
  234. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  235. package/src/module/meta/service/view-master.service.ts +127 -127
  236. package/src/module/module/controller/menu.controller.ts +15 -15
  237. package/src/module/module/controller/module-access.controller.ts +134 -134
  238. package/src/module/module/entity/menu.entity.ts +43 -43
  239. package/src/module/module/entity/module-access.entity.ts +25 -25
  240. package/src/module/module/entity/module-action.entity.ts +17 -17
  241. package/src/module/module/entity/module.entity.ts +52 -52
  242. package/src/module/module/module.module.ts +42 -42
  243. package/src/module/module/repository/menu.repository.ts +184 -184
  244. package/src/module/module/repository/module-access.repository.ts +344 -344
  245. package/src/module/module/service/menu.service.ts +82 -82
  246. package/src/module/module/service/module-access.service.ts +209 -209
  247. package/src/module/notification/controller/notification.controller.ts +58 -58
  248. package/src/module/notification/controller/otp.controller.ts +117 -117
  249. package/src/module/notification/entity/notification.entity.ts +26 -26
  250. package/src/module/notification/entity/otp.entity.ts +28 -28
  251. package/src/module/notification/firebase-admin.config.ts +22 -22
  252. package/src/module/notification/notification.module.ts +69 -69
  253. package/src/module/notification/repository/otp.repository.ts +27 -27
  254. package/src/module/notification/service/email.service.ts +127 -127
  255. package/src/module/notification/service/notification.service.ts +163 -163
  256. package/src/module/notification/service/otp.service.ts +132 -132
  257. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  258. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  259. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  260. package/src/module/third-party-module/third-party.module.ts +12 -12
  261. package/src/module/user/controller/login.controller.ts +197 -197
  262. package/src/module/user/controller/user.controller.ts +40 -40
  263. package/src/module/user/dto/create-user.dto.ts +62 -62
  264. package/src/module/user/dto/update-user.dto.ts +4 -4
  265. package/src/module/user/entity/role.entity.ts +33 -33
  266. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  267. package/src/module/user/entity/user-session.entity.ts +73 -73
  268. package/src/module/user/entity/user.entity.ts +59 -59
  269. package/src/module/user/repository/role.repository.ts +96 -96
  270. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  271. package/src/module/user/repository/user.repository.ts +50 -50
  272. package/src/module/user/repository/userSession.repository.ts +33 -33
  273. package/src/module/user/service/login.service.ts +284 -284
  274. package/src/module/user/service/role.service.ts +189 -189
  275. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  276. package/src/module/user/service/user-session.service.ts +168 -168
  277. package/src/module/user/service/user.service.ts +365 -365
  278. package/src/module/user/user.module.ts +65 -65
  279. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  280. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  281. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  282. package/src/module/workflow/controller/action.controller.ts +111 -111
  283. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  284. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  285. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  286. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  287. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  288. package/src/module/workflow/controller/stage.controller.ts +50 -50
  289. package/src/module/workflow/controller/task.controller.ts +77 -77
  290. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  291. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  292. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  293. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  294. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  295. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  296. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  297. package/src/module/workflow/entity/action.entity.ts +50 -50
  298. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  299. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  300. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  301. package/src/module/workflow/entity/form.entity.ts +25 -25
  302. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  303. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  304. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  305. package/src/module/workflow/entity/stage.entity.ts +20 -20
  306. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  307. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  308. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  309. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  310. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  311. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  312. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  313. package/src/module/workflow/repository/action.repository.ts +323 -323
  314. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  315. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  316. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  317. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  318. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  319. package/src/module/workflow/repository/stage.repository.ts +172 -172
  320. package/src/module/workflow/repository/task.repository.ts +127 -127
  321. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  322. package/src/module/workflow/service/action-category.service.ts +33 -33
  323. package/src/module/workflow/service/action-data.service.ts +62 -62
  324. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  325. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  326. package/src/module/workflow/service/action.service.ts +279 -279
  327. package/src/module/workflow/service/activity-log.service.ts +107 -107
  328. package/src/module/workflow/service/comm-template.service.ts +180 -180
  329. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  330. package/src/module/workflow/service/form-master.service.ts +35 -35
  331. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  332. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  333. package/src/module/workflow/service/stage-group.service.ts +319 -319
  334. package/src/module/workflow/service/stage.service.ts +199 -199
  335. package/src/module/workflow/service/task.service.ts +560 -560
  336. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  337. package/src/module/workflow/service/workflow-meta.service.ts +640 -640
  338. package/src/module/workflow/service/workflow.service.ts +205 -205
  339. package/src/module/workflow/workflow.module.ts +176 -176
  340. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  341. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  342. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  343. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  344. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  345. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  346. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  347. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  348. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  349. package/src/resources/dev.properties.yaml +30 -30
  350. package/src/resources/local.properties.yaml +27 -27
  351. package/src/resources/properties.module.ts +12 -12
  352. package/src/resources/properties.yaml.ts +11 -11
  353. package/src/resources/uat.properties.yaml +31 -31
  354. package/src/table.config.ts +126 -126
  355. package/src/utils/dto/excel-data.dto.ts +14 -14
  356. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  357. package/src/utils/service/base64util.service.ts +18 -18
  358. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  359. package/src/utils/service/codeGenerator.service.ts +22 -22
  360. package/src/utils/service/dateUtil.service.ts +17 -17
  361. package/src/utils/service/encryptUtil.service.ts +97 -97
  362. package/src/utils/service/excel-helper.service.ts +72 -72
  363. package/src/utils/service/excelUtil.service.ts +15 -15
  364. package/src/utils/service/file-util.service.ts +11 -11
  365. package/src/utils/service/json-util.service.ts +23 -23
  366. package/src/utils/service/loggingUtil.service.ts +34 -34
  367. package/src/utils/service/reflection-helper.service.ts +62 -62
  368. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  369. package/src/utils/utils.module.ts +25 -25
  370. package/tsconfig.build.json +4 -4
  371. package/tsconfig.json +24 -24
  372. package/.claude/settings.local.json +0 -26
  373. package/.idea/250218_nodejs_core.iml +0 -9
  374. package/.idea/codeStyles/Project.xml +0 -59
  375. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  376. package/.idea/copilot.data.migration.agent.xml +0 -6
  377. package/.idea/copilot.data.migration.ask.xml +0 -6
  378. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  379. package/.idea/copilot.data.migration.edit.xml +0 -6
  380. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  381. package/.idea/misc.xml +0 -6
  382. package/.idea/modules.xml +0 -8
  383. package/.idea/prettier.xml +0 -6
  384. package/.idea/vcs.xml +0 -6
  385. package/server.log +0 -850
@@ -1,18 +1,18 @@
1
- export class Base64Util {
2
- static encode(byteArray: Uint8Array): string {
3
- return Buffer.from(byteArray).toString('base64');
4
- }
5
-
6
- static decode(base64String: string): Uint8Array {
7
- if (typeof Buffer !== 'undefined') {
8
- return Uint8Array.from(Buffer.from(base64String, 'base64'));
9
- }
10
-
11
- const binaryString = atob(base64String);
12
- const byteArray = new Uint8Array(binaryString.length);
13
- for (let i = 0; i < binaryString.length; i++) {
14
- byteArray[i] = binaryString.charCodeAt(i);
15
- }
16
- return byteArray;
17
- }
18
- }
1
+ export class Base64Util {
2
+ static encode(byteArray: Uint8Array): string {
3
+ return Buffer.from(byteArray).toString('base64');
4
+ }
5
+
6
+ static decode(base64String: string): Uint8Array {
7
+ if (typeof Buffer !== 'undefined') {
8
+ return Uint8Array.from(Buffer.from(base64String, 'base64'));
9
+ }
10
+
11
+ const binaryString = atob(base64String);
12
+ const byteArray = new Uint8Array(binaryString.length);
13
+ for (let i = 0; i < binaryString.length; i++) {
14
+ byteArray[i] = binaryString.charCodeAt(i);
15
+ }
16
+ return byteArray;
17
+ }
18
+ }
@@ -1,21 +1,21 @@
1
- import { Injectable } from '@nestjs/common';
2
-
3
- @Injectable()
4
- export class ClockIDGenService {
5
- private _counter = 0n;
6
- private timestampBits = 42;
7
- private timestampMask = BigInt(
8
- Math.floor(Math.pow(2, this.timestampBits)) - 1,
9
- );
10
- private counterBits = 10;
11
- private counterMask = BigInt(Math.floor(Math.pow(2, this.counterBits)) - 1);
12
-
13
- idGenerator(prefix?: string): string {
14
- const timestamp = BigInt(Date.now()) & this.timestampMask;
15
- const counter = BigInt(this._counter++) & this.counterMask;
16
- let now = timestamp << BigInt(this.counterBits);
17
- now = now | counter;
18
- const id = now.toString(36).toUpperCase();
19
- return prefix ? prefix + id : id;
20
- }
21
- }
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ @Injectable()
4
+ export class ClockIDGenService {
5
+ private _counter = 0n;
6
+ private timestampBits = 42;
7
+ private timestampMask = BigInt(
8
+ Math.floor(Math.pow(2, this.timestampBits)) - 1,
9
+ );
10
+ private counterBits = 10;
11
+ private counterMask = BigInt(Math.floor(Math.pow(2, this.counterBits)) - 1);
12
+
13
+ idGenerator(prefix?: string): string {
14
+ const timestamp = BigInt(Date.now()) & this.timestampMask;
15
+ const counter = BigInt(this._counter++) & this.counterMask;
16
+ let now = timestamp << BigInt(this.counterBits);
17
+ now = now | counter;
18
+ const id = now.toString(36).toUpperCase();
19
+ return prefix ? prefix + id : id;
20
+ }
21
+ }
@@ -1,22 +1,22 @@
1
- export class CodeGeneratorService {
2
- static generateCode(input_string: string) {
3
- if (!input_string) {
4
- throw new Error('Input string cannot be empty');
5
- }
6
-
7
- // Step 1: Trim, to lowercase
8
- let code = input_string.trim().toLowerCase();
9
-
10
- // Step 2: Replace all whitespace with underscores
11
- code = code.replace(/\s+/g, '_');
12
-
13
- // Step 3: Remove all non-alphanumeric and non-underscore characters
14
- const sanitizedCode = code.replace(/[^a-z0-9_]/g, '');
15
-
16
- if (!sanitizedCode) {
17
- throw new Error('Invalid input string, cannot generate code');
18
- }
19
-
20
- return sanitizedCode;
21
- }
22
- }
1
+ export class CodeGeneratorService {
2
+ static generateCode(input_string: string) {
3
+ if (!input_string) {
4
+ throw new Error('Input string cannot be empty');
5
+ }
6
+
7
+ // Step 1: Trim, to lowercase
8
+ let code = input_string.trim().toLowerCase();
9
+
10
+ // Step 2: Replace all whitespace with underscores
11
+ code = code.replace(/\s+/g, '_');
12
+
13
+ // Step 3: Remove all non-alphanumeric and non-underscore characters
14
+ const sanitizedCode = code.replace(/[^a-z0-9_]/g, '');
15
+
16
+ if (!sanitizedCode) {
17
+ throw new Error('Invalid input string, cannot generate code');
18
+ }
19
+
20
+ return sanitizedCode;
21
+ }
22
+ }
@@ -1,17 +1,17 @@
1
- import { Injectable } from '@nestjs/common';
2
-
3
- @Injectable()
4
- export class DateUtil {
5
- static formatDate(date: Date, format: string): string {
6
- const map: { [key: string]: string } = {
7
- dd: String(date.getDate()).padStart(2, '0'),
8
- MM: String(date.getMonth() + 1).padStart(2, '0'),
9
- yyyy: String(date.getFullYear()),
10
- HH: String(date.getHours()).padStart(2, '0'),
11
- mm: String(date.getMinutes()).padStart(2, '0'),
12
- ss: String(date.getSeconds()).padStart(2, '0'),
13
- };
14
-
15
- return format.replace(/dd|MM|yyyy|HH|mm|ss/g, (matched) => map[matched]);
16
- }
17
- }
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ @Injectable()
4
+ export class DateUtil {
5
+ static formatDate(date: Date, format: string): string {
6
+ const map: { [key: string]: string } = {
7
+ dd: String(date.getDate()).padStart(2, '0'),
8
+ MM: String(date.getMonth() + 1).padStart(2, '0'),
9
+ yyyy: String(date.getFullYear()),
10
+ HH: String(date.getHours()).padStart(2, '0'),
11
+ mm: String(date.getMinutes()).padStart(2, '0'),
12
+ ss: String(date.getSeconds()).padStart(2, '0'),
13
+ };
14
+
15
+ return format.replace(/dd|MM|yyyy|HH|mm|ss/g, (matched) => map[matched]);
16
+ }
17
+ }
@@ -1,97 +1,97 @@
1
- import { Injectable, InternalServerErrorException } from '@nestjs/common';
2
- import * as crypto from 'crypto';
3
-
4
- const CryptoJS = require('crypto-js');
5
- const encryptionType = 'aes-256-cbc';
6
-
7
- @Injectable()
8
- export class EncryptUtilService {
9
- constructor() {}
10
-
11
- static encryptGCM(data: any, Datakey: string, Dataiv: string) {
12
- try {
13
- const cipher = crypto.createCipheriv('aes-256-gcm', Datakey, Dataiv);
14
- const encrypted = Buffer.concat([
15
- cipher.update(data, 'utf8'),
16
- cipher.final(),
17
- ]);
18
- const tag = cipher.getAuthTag();
19
- return Buffer.concat([encrypted, tag]).toString('base64');
20
- } catch (error) {
21
- throw new InternalServerErrorException('Encryption process failed');
22
- }
23
- }
24
-
25
- static decryptGCM(data: any, Datakey: any, Dataiv: any) {
26
- try {
27
- data = Buffer.from(data, 'base64');
28
- const decipher = crypto.createDecipheriv('aes-256-gcm', Datakey, Dataiv);
29
- const tag = data.slice(data.length - 16);
30
- decipher.setAuthTag(tag);
31
- data = data.slice(0, data.length - 16);
32
- const decrypted = decipher.update(data, 'utf8') + decipher.final('utf8');
33
- return decrypted;
34
- } catch (error) {
35
- throw new InternalServerErrorException('Decryption process failed');
36
- }
37
- }
38
-
39
- static encryptCBC(data: any, Datakey: any, Dataiv: any) {
40
- let encryptedRequest;
41
- try {
42
- const cipher = CryptoJS.AES.encrypt(data, Datakey, {
43
- iv: Dataiv,
44
- mode: CryptoJS.mode.CBC,
45
- });
46
- encryptedRequest = cipher.toString();
47
- } catch (error) {
48
- console.log(error);
49
- throw new InternalServerErrorException('Encryption process failed');
50
- }
51
- return encryptedRequest;
52
- }
53
-
54
- static decryptCBC(data: any, Datakey: any, Dataiv: any) {
55
- let decryptRequest;
56
- try {
57
- const cipher = CryptoJS.AES.decrypt(data, Datakey, {
58
- iv: Dataiv,
59
- mode: CryptoJS.mode.CBC,
60
- });
61
- decryptRequest = cipher.toString(CryptoJS.enc.Utf8);
62
- } catch (error) {
63
- throw new InternalServerErrorException('Encryption process failed');
64
- }
65
- return decryptRequest;
66
- }
67
-
68
- static encryptRequest(data: any, Datakey: any, Dataiv: any, type?: any) {
69
- try {
70
- switch (type) {
71
- case 'GCM':
72
- return this.encryptGCM(data, Datakey, Dataiv);
73
- case 'CBC':
74
- return this.encryptCBC(data, Datakey, Dataiv);
75
- default:
76
- return this.encryptCBC(data, Datakey, Dataiv);
77
- }
78
- } catch (error) {
79
- throw new InternalServerErrorException('Encryption process failed');
80
- }
81
- }
82
-
83
- static decryptRequest(data: any, Datakey: any, Dataiv: any, type?: any) {
84
- try {
85
- switch (type) {
86
- case 'GCM':
87
- return this.decryptGCM(data, Datakey, Dataiv);
88
- case 'CBC':
89
- return this.decryptCBC(data, Datakey, Dataiv);
90
- default:
91
- return this.decryptCBC(data, Datakey, Dataiv);
92
- }
93
- } catch (error) {
94
- throw new InternalServerErrorException('Encryption process failed');
95
- }
96
- }
97
- }
1
+ import { Injectable, InternalServerErrorException } from '@nestjs/common';
2
+ import * as crypto from 'crypto';
3
+
4
+ const CryptoJS = require('crypto-js');
5
+ const encryptionType = 'aes-256-cbc';
6
+
7
+ @Injectable()
8
+ export class EncryptUtilService {
9
+ constructor() {}
10
+
11
+ static encryptGCM(data: any, Datakey: string, Dataiv: string) {
12
+ try {
13
+ const cipher = crypto.createCipheriv('aes-256-gcm', Datakey, Dataiv);
14
+ const encrypted = Buffer.concat([
15
+ cipher.update(data, 'utf8'),
16
+ cipher.final(),
17
+ ]);
18
+ const tag = cipher.getAuthTag();
19
+ return Buffer.concat([encrypted, tag]).toString('base64');
20
+ } catch (error) {
21
+ throw new InternalServerErrorException('Encryption process failed');
22
+ }
23
+ }
24
+
25
+ static decryptGCM(data: any, Datakey: any, Dataiv: any) {
26
+ try {
27
+ data = Buffer.from(data, 'base64');
28
+ const decipher = crypto.createDecipheriv('aes-256-gcm', Datakey, Dataiv);
29
+ const tag = data.slice(data.length - 16);
30
+ decipher.setAuthTag(tag);
31
+ data = data.slice(0, data.length - 16);
32
+ const decrypted = decipher.update(data, 'utf8') + decipher.final('utf8');
33
+ return decrypted;
34
+ } catch (error) {
35
+ throw new InternalServerErrorException('Decryption process failed');
36
+ }
37
+ }
38
+
39
+ static encryptCBC(data: any, Datakey: any, Dataiv: any) {
40
+ let encryptedRequest;
41
+ try {
42
+ const cipher = CryptoJS.AES.encrypt(data, Datakey, {
43
+ iv: Dataiv,
44
+ mode: CryptoJS.mode.CBC,
45
+ });
46
+ encryptedRequest = cipher.toString();
47
+ } catch (error) {
48
+ console.log(error);
49
+ throw new InternalServerErrorException('Encryption process failed');
50
+ }
51
+ return encryptedRequest;
52
+ }
53
+
54
+ static decryptCBC(data: any, Datakey: any, Dataiv: any) {
55
+ let decryptRequest;
56
+ try {
57
+ const cipher = CryptoJS.AES.decrypt(data, Datakey, {
58
+ iv: Dataiv,
59
+ mode: CryptoJS.mode.CBC,
60
+ });
61
+ decryptRequest = cipher.toString(CryptoJS.enc.Utf8);
62
+ } catch (error) {
63
+ throw new InternalServerErrorException('Encryption process failed');
64
+ }
65
+ return decryptRequest;
66
+ }
67
+
68
+ static encryptRequest(data: any, Datakey: any, Dataiv: any, type?: any) {
69
+ try {
70
+ switch (type) {
71
+ case 'GCM':
72
+ return this.encryptGCM(data, Datakey, Dataiv);
73
+ case 'CBC':
74
+ return this.encryptCBC(data, Datakey, Dataiv);
75
+ default:
76
+ return this.encryptCBC(data, Datakey, Dataiv);
77
+ }
78
+ } catch (error) {
79
+ throw new InternalServerErrorException('Encryption process failed');
80
+ }
81
+ }
82
+
83
+ static decryptRequest(data: any, Datakey: any, Dataiv: any, type?: any) {
84
+ try {
85
+ switch (type) {
86
+ case 'GCM':
87
+ return this.decryptGCM(data, Datakey, Dataiv);
88
+ case 'CBC':
89
+ return this.decryptCBC(data, Datakey, Dataiv);
90
+ default:
91
+ return this.decryptCBC(data, Datakey, Dataiv);
92
+ }
93
+ } catch (error) {
94
+ throw new InternalServerErrorException('Encryption process failed');
95
+ }
96
+ }
97
+ }
@@ -1,72 +1,72 @@
1
- import * as ExcelJS from 'exceljs';
2
- import { ExcelData } from '../dto/excel-data.dto';
3
- import * as XLSX from 'xlsx';
4
-
5
- export class ExcelHelper {
6
- static getHeader(filePath: string, sheetName: string): string[] {
7
- const rows = this.readExcel(filePath, 'HEADER', sheetName);
8
- return rows.length > 0 ? rows[0] : [];
9
- }
10
-
11
- static readExcel(
12
- filePath: string,
13
- rowLevel: string,
14
- sheetName: string,
15
- ): string[][] {
16
- const workbook = new ExcelJS.Workbook();
17
- workbook.xlsx.readFile(filePath);
18
- const sheet = workbook.getWorksheet(sheetName);
19
- if (!sheet) throw new Error(`Sheet ${sheetName} not found`);
20
-
21
- const result: string[][] = [];
22
- sheet.eachRow((row, rowNumber) => {
23
- if (rowLevel === 'HEADER' && rowNumber > 1) return;
24
- if (rowLevel === 'ROWDATA' && rowNumber === 1) return;
25
-
26
- const rowData: string[] = (row.values as any[]).slice(1).map((value) => {
27
- return value !== undefined ? String(value).trim() : '';
28
- });
29
- result.push(rowData);
30
- result.push(rowData);
31
- });
32
-
33
- return result;
34
- }
35
-
36
- static getRowData(filePath: string, sheetName: string): string[][] {
37
- return this.readExcel(filePath, 'ROWDATA', sheetName);
38
- }
39
-
40
- static getJSONStringFromList(header: string[], rowData: string[][]): string {
41
- return JSON.stringify(
42
- rowData.map((row) =>
43
- Object.fromEntries(header.map((col, i) => [col, row[i] || ''])),
44
- ),
45
- );
46
- }
47
-
48
- static getDataObjectListFromXLS<T>(
49
- filePath: string,
50
- sheetName: string,
51
- classType: new () => T,
52
- ): T[] {
53
- const header = this.getHeader(filePath, sheetName);
54
- const rowData = this.getRowData(filePath, sheetName);
55
- const jsonString = this.getJSONStringFromList(header, rowData);
56
- return JSON.parse(jsonString) as T[];
57
- }
58
-
59
- static writeExcel(excelData: ExcelData) {
60
- const wb = XLSX.utils.book_new();
61
-
62
- for (const sheetData of excelData.sheetList) {
63
- const ws = XLSX.utils.aoa_to_sheet([
64
- sheetData.headers,
65
- ...sheetData.rowList,
66
- ]);
67
- XLSX.utils.book_append_sheet(wb, ws, sheetData.sheetName || 'Sheet1');
68
- }
69
-
70
- XLSX.writeFile(wb, excelData.filePath);
71
- }
72
- }
1
+ import * as ExcelJS from 'exceljs';
2
+ import { ExcelData } from '../dto/excel-data.dto';
3
+ import * as XLSX from 'xlsx';
4
+
5
+ export class ExcelHelper {
6
+ static getHeader(filePath: string, sheetName: string): string[] {
7
+ const rows = this.readExcel(filePath, 'HEADER', sheetName);
8
+ return rows.length > 0 ? rows[0] : [];
9
+ }
10
+
11
+ static readExcel(
12
+ filePath: string,
13
+ rowLevel: string,
14
+ sheetName: string,
15
+ ): string[][] {
16
+ const workbook = new ExcelJS.Workbook();
17
+ workbook.xlsx.readFile(filePath);
18
+ const sheet = workbook.getWorksheet(sheetName);
19
+ if (!sheet) throw new Error(`Sheet ${sheetName} not found`);
20
+
21
+ const result: string[][] = [];
22
+ sheet.eachRow((row, rowNumber) => {
23
+ if (rowLevel === 'HEADER' && rowNumber > 1) return;
24
+ if (rowLevel === 'ROWDATA' && rowNumber === 1) return;
25
+
26
+ const rowData: string[] = (row.values as any[]).slice(1).map((value) => {
27
+ return value !== undefined ? String(value).trim() : '';
28
+ });
29
+ result.push(rowData);
30
+ result.push(rowData);
31
+ });
32
+
33
+ return result;
34
+ }
35
+
36
+ static getRowData(filePath: string, sheetName: string): string[][] {
37
+ return this.readExcel(filePath, 'ROWDATA', sheetName);
38
+ }
39
+
40
+ static getJSONStringFromList(header: string[], rowData: string[][]): string {
41
+ return JSON.stringify(
42
+ rowData.map((row) =>
43
+ Object.fromEntries(header.map((col, i) => [col, row[i] || ''])),
44
+ ),
45
+ );
46
+ }
47
+
48
+ static getDataObjectListFromXLS<T>(
49
+ filePath: string,
50
+ sheetName: string,
51
+ classType: new () => T,
52
+ ): T[] {
53
+ const header = this.getHeader(filePath, sheetName);
54
+ const rowData = this.getRowData(filePath, sheetName);
55
+ const jsonString = this.getJSONStringFromList(header, rowData);
56
+ return JSON.parse(jsonString) as T[];
57
+ }
58
+
59
+ static writeExcel(excelData: ExcelData) {
60
+ const wb = XLSX.utils.book_new();
61
+
62
+ for (const sheetData of excelData.sheetList) {
63
+ const ws = XLSX.utils.aoa_to_sheet([
64
+ sheetData.headers,
65
+ ...sheetData.rowList,
66
+ ]);
67
+ XLSX.utils.book_append_sheet(wb, ws, sheetData.sheetName || 'Sheet1');
68
+ }
69
+
70
+ XLSX.writeFile(wb, excelData.filePath);
71
+ }
72
+ }
@@ -1,15 +1,15 @@
1
- import * as xlsx from 'xlsx';
2
-
3
- export class ExcelUtil {
4
- static readExcel(fileBuffer: Buffer): Record<string, any[]> {
5
- const workbook = xlsx.read(fileBuffer, { type: 'buffer' });
6
- const data: Record<string, any[]> = {};
7
-
8
- workbook.SheetNames.forEach((sheetName) => {
9
- const sheet = workbook.Sheets[sheetName];
10
- data[sheetName] = xlsx.utils.sheet_to_json(sheet);
11
- });
12
-
13
- return data;
14
- }
15
- }
1
+ import * as xlsx from 'xlsx';
2
+
3
+ export class ExcelUtil {
4
+ static readExcel(fileBuffer: Buffer): Record<string, any[]> {
5
+ const workbook = xlsx.read(fileBuffer, { type: 'buffer' });
6
+ const data: Record<string, any[]> = {};
7
+
8
+ workbook.SheetNames.forEach((sheetName) => {
9
+ const sheet = workbook.Sheets[sheetName];
10
+ data[sheetName] = xlsx.utils.sheet_to_json(sheet);
11
+ });
12
+
13
+ return data;
14
+ }
15
+ }
@@ -1,11 +1,11 @@
1
- import * as fs from 'node:fs';
2
-
3
- export class FileUtil {
4
- static deleteFile(path: string) {
5
- fs.unlink(path, (err) => {
6
- if (err) {
7
- console.log(`Error deleting file ${path}:`, err);
8
- }
9
- });
10
- }
11
- }
1
+ import * as fs from 'node:fs';
2
+
3
+ export class FileUtil {
4
+ static deleteFile(path: string) {
5
+ fs.unlink(path, (err) => {
6
+ if (err) {
7
+ console.log(`Error deleting file ${path}:`, err);
8
+ }
9
+ });
10
+ }
11
+ }
@@ -1,23 +1,23 @@
1
- export class JsonUtil {
2
- static merge(mainNode: any, updatedNode: any): any {
3
- if (typeof mainNode !== 'object' || typeof updatedNode !== 'object') {
4
- return updatedNode;
5
- }
6
-
7
- const mergedNode: any = {};
8
-
9
- for (const key in updatedNode) {
10
- if (updatedNode.hasOwnProperty(key)) {
11
- mergedNode[key] = this.merge(mainNode[key], updatedNode[key]);
12
- }
13
- }
14
-
15
- for (const key in mainNode) {
16
- if (mainNode.hasOwnProperty(key) && !updatedNode.hasOwnProperty(key)) {
17
- mergedNode[key] = mainNode[key];
18
- }
19
- }
20
-
21
- return mergedNode;
22
- }
23
- }
1
+ export class JsonUtil {
2
+ static merge(mainNode: any, updatedNode: any): any {
3
+ if (typeof mainNode !== 'object' || typeof updatedNode !== 'object') {
4
+ return updatedNode;
5
+ }
6
+
7
+ const mergedNode: any = {};
8
+
9
+ for (const key in updatedNode) {
10
+ if (updatedNode.hasOwnProperty(key)) {
11
+ mergedNode[key] = this.merge(mainNode[key], updatedNode[key]);
12
+ }
13
+ }
14
+
15
+ for (const key in mainNode) {
16
+ if (mainNode.hasOwnProperty(key) && !updatedNode.hasOwnProperty(key)) {
17
+ mergedNode[key] = mainNode[key];
18
+ }
19
+ }
20
+
21
+ return mergedNode;
22
+ }
23
+ }