@openforis/arena-core 2.3.32 → 2.3.34

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 (837) hide show
  1. package/dist/app/appInfo.js.map +1 -1
  2. package/dist/app/index.js.map +1 -1
  3. package/dist/auth/authGroup.js.map +1 -1
  4. package/dist/auth/authGroups.js.map +1 -1
  5. package/dist/auth/authorizer.js +45 -0
  6. package/dist/auth/authorizer.js.map +1 -1
  7. package/dist/auth/factory.js.map +1 -1
  8. package/dist/auth/index.js.map +1 -1
  9. package/dist/auth/permission.js.map +1 -1
  10. package/dist/auth/user.js.map +1 -1
  11. package/dist/auth/userAuth.js.map +1 -1
  12. package/dist/auth/userAuthTokenService.d.ts +28 -0
  13. package/dist/auth/userAuthTokenService.js.map +1 -1
  14. package/dist/auth/userGroup.js.map +1 -1
  15. package/dist/auth/userService.js.map +1 -1
  16. package/dist/auth/users.js +1 -0
  17. package/dist/auth/users.js.map +1 -1
  18. package/dist/category/categories.js.map +1 -1
  19. package/dist/category/category.js.map +1 -1
  20. package/dist/category/categoryImportSummary.js.map +1 -1
  21. package/dist/category/categoryItemGenerator.js.map +1 -1
  22. package/dist/category/categoryItems.js.map +1 -1
  23. package/dist/category/factory.js.map +1 -1
  24. package/dist/category/index.js.map +1 -1
  25. package/dist/category/item.js.map +1 -1
  26. package/dist/category/itemService.js.map +1 -1
  27. package/dist/category/level.js.map +1 -1
  28. package/dist/category/levelService.js.map +1 -1
  29. package/dist/category/service.js.map +1 -1
  30. package/dist/chain/chain.js.map +1 -1
  31. package/dist/chain/chainFactory.js.map +1 -1
  32. package/dist/chain/chainNodeDef.js.map +1 -1
  33. package/dist/chain/chainNodeDefAggregate.js.map +1 -1
  34. package/dist/chain/chainNodeDefFactory.js.map +1 -1
  35. package/dist/chain/chainNodeDefService.js.map +1 -1
  36. package/dist/chain/chainService.js.map +1 -1
  37. package/dist/chain/index.js.map +1 -1
  38. package/dist/common/Dictionary.js.map +1 -1
  39. package/dist/common/factory.js.map +1 -1
  40. package/dist/common/i18n.js.map +1 -1
  41. package/dist/common/index.js.map +1 -1
  42. package/dist/dataExport/ArenaExportInfo.js.map +1 -1
  43. package/dist/dataExport/ArenaExportInfoFactory.js.map +1 -1
  44. package/dist/dataExport/FlatDataExportModel.js +3 -3
  45. package/dist/dataExport/FlatDataExportModel.js.map +1 -1
  46. package/dist/dataExport/FlatDataExportOptions.js.map +1 -1
  47. package/dist/dataExport/FlatDataFiles.js.map +1 -1
  48. package/dist/dataExport/UniqueFileNamesGenerator.d.ts +23 -0
  49. package/dist/dataExport/UniqueFileNamesGenerator.js +26 -1
  50. package/dist/dataExport/UniqueFileNamesGenerator.js.map +1 -1
  51. package/dist/dataExport/index.js.map +1 -1
  52. package/dist/dataQuery/dataQuery.js.map +1 -1
  53. package/dist/dataQuery/dataQuerySummaries.js +3 -0
  54. package/dist/dataQuery/dataQuerySummaries.js.map +1 -1
  55. package/dist/dataQuery/index.js.map +1 -1
  56. package/dist/error/SystemError.js +1 -0
  57. package/dist/error/SystemError.js.map +1 -1
  58. package/dist/error/index.js.map +1 -1
  59. package/dist/esm/app/appInfo.js.map +1 -1
  60. package/dist/esm/app/index.js.map +1 -1
  61. package/dist/esm/auth/authGroup.js.map +1 -1
  62. package/dist/esm/auth/authGroups.js.map +1 -1
  63. package/dist/esm/auth/authorizer.js +45 -0
  64. package/dist/esm/auth/authorizer.js.map +1 -1
  65. package/dist/esm/auth/factory.js.map +1 -1
  66. package/dist/esm/auth/index.js.map +1 -1
  67. package/dist/esm/auth/permission.js.map +1 -1
  68. package/dist/esm/auth/user.js.map +1 -1
  69. package/dist/esm/auth/userAuth.js.map +1 -1
  70. package/dist/esm/auth/userAuthTokenService.js.map +1 -1
  71. package/dist/esm/auth/userGroup.js.map +1 -1
  72. package/dist/esm/auth/userService.js.map +1 -1
  73. package/dist/esm/auth/users.js +1 -0
  74. package/dist/esm/auth/users.js.map +1 -1
  75. package/dist/esm/category/categories.js.map +1 -1
  76. package/dist/esm/category/category.js.map +1 -1
  77. package/dist/esm/category/categoryImportSummary.js.map +1 -1
  78. package/dist/esm/category/categoryItemGenerator.js.map +1 -1
  79. package/dist/esm/category/categoryItems.js.map +1 -1
  80. package/dist/esm/category/factory.js.map +1 -1
  81. package/dist/esm/category/index.js.map +1 -1
  82. package/dist/esm/category/item.js.map +1 -1
  83. package/dist/esm/category/itemService.js.map +1 -1
  84. package/dist/esm/category/level.js.map +1 -1
  85. package/dist/esm/category/levelService.js.map +1 -1
  86. package/dist/esm/category/service.js.map +1 -1
  87. package/dist/esm/chain/chain.js.map +1 -1
  88. package/dist/esm/chain/chainFactory.js.map +1 -1
  89. package/dist/esm/chain/chainNodeDef.js.map +1 -1
  90. package/dist/esm/chain/chainNodeDefAggregate.js.map +1 -1
  91. package/dist/esm/chain/chainNodeDefFactory.js.map +1 -1
  92. package/dist/esm/chain/chainNodeDefService.js.map +1 -1
  93. package/dist/esm/chain/chainService.js.map +1 -1
  94. package/dist/esm/chain/index.js.map +1 -1
  95. package/dist/esm/common/Dictionary.js.map +1 -1
  96. package/dist/esm/common/factory.js.map +1 -1
  97. package/dist/esm/common/i18n.js.map +1 -1
  98. package/dist/esm/common/index.js.map +1 -1
  99. package/dist/esm/dataExport/ArenaExportInfo.js.map +1 -1
  100. package/dist/esm/dataExport/ArenaExportInfoFactory.js.map +1 -1
  101. package/dist/esm/dataExport/FlatDataExportModel.js +3 -3
  102. package/dist/esm/dataExport/FlatDataExportModel.js.map +1 -1
  103. package/dist/esm/dataExport/FlatDataExportOptions.js.map +1 -1
  104. package/dist/esm/dataExport/FlatDataFiles.js.map +1 -1
  105. package/dist/esm/dataExport/UniqueFileNamesGenerator.js +26 -1
  106. package/dist/esm/dataExport/UniqueFileNamesGenerator.js.map +1 -1
  107. package/dist/esm/dataExport/index.js.map +1 -1
  108. package/dist/esm/dataQuery/dataQuery.js.map +1 -1
  109. package/dist/esm/dataQuery/dataQuerySummaries.js +3 -0
  110. package/dist/esm/dataQuery/dataQuerySummaries.js.map +1 -1
  111. package/dist/esm/dataQuery/index.js.map +1 -1
  112. package/dist/esm/error/SystemError.js +1 -0
  113. package/dist/esm/error/SystemError.js.map +1 -1
  114. package/dist/esm/error/index.js.map +1 -1
  115. package/dist/esm/expression/context.js.map +1 -1
  116. package/dist/esm/expression/evaluator.js.map +1 -1
  117. package/dist/esm/expression/function.js.map +1 -1
  118. package/dist/esm/expression/index.js.map +1 -1
  119. package/dist/esm/expression/javascript/evaluator.js +3 -0
  120. package/dist/esm/expression/javascript/evaluator.js.map +1 -1
  121. package/dist/esm/expression/javascript/functionsDefault.js.map +1 -1
  122. package/dist/esm/expression/javascript/global.js.map +1 -1
  123. package/dist/esm/expression/javascript/node/array.js.map +1 -1
  124. package/dist/esm/expression/javascript/node/binary.js +23 -0
  125. package/dist/esm/expression/javascript/node/binary.js.map +1 -1
  126. package/dist/esm/expression/javascript/node/call.js +12 -0
  127. package/dist/esm/expression/javascript/node/call.js.map +1 -1
  128. package/dist/esm/expression/javascript/node/compound.js.map +1 -1
  129. package/dist/esm/expression/javascript/node/conditional.js.map +1 -1
  130. package/dist/esm/expression/javascript/node/identifier.js +7 -0
  131. package/dist/esm/expression/javascript/node/identifier.js.map +1 -1
  132. package/dist/esm/expression/javascript/node/literal.js.map +1 -1
  133. package/dist/esm/expression/javascript/node/member.js +5 -1
  134. package/dist/esm/expression/javascript/node/member.js.map +1 -1
  135. package/dist/esm/expression/javascript/node/sequence.js.map +1 -1
  136. package/dist/esm/expression/javascript/node/this.js.map +1 -1
  137. package/dist/esm/expression/javascript/node/unary.js +8 -0
  138. package/dist/esm/expression/javascript/node/unary.js.map +1 -1
  139. package/dist/esm/expression/javascript/parser/jsep.js +6 -2
  140. package/dist/esm/expression/javascript/parser/jsep.js.map +1 -1
  141. package/dist/esm/expression/javascript/parser/parser.js.map +1 -1
  142. package/dist/esm/expression/node.js.map +1 -1
  143. package/dist/esm/expression/parser.js.map +1 -1
  144. package/dist/esm/expression/variable.js.map +1 -1
  145. package/dist/esm/extraProp/extraProp.js.map +1 -1
  146. package/dist/esm/extraProp/extraProps.js.map +1 -1
  147. package/dist/esm/extraProp/extraPropsDataGenerator.js.map +1 -1
  148. package/dist/esm/extraProp/index.js.map +1 -1
  149. package/dist/esm/geo/index.js.map +1 -1
  150. package/dist/esm/geo/point.js.map +1 -1
  151. package/dist/esm/geo/pointFactory.js.map +1 -1
  152. package/dist/esm/geo/points/bearing.js +11 -0
  153. package/dist/esm/geo/points/bearing.js.map +1 -1
  154. package/dist/esm/geo/points/distance.js +9 -0
  155. package/dist/esm/geo/points/distance.js.map +1 -1
  156. package/dist/esm/geo/points/equals.js.map +1 -1
  157. package/dist/esm/geo/points/getSrs.js.map +1 -1
  158. package/dist/esm/geo/points/index.js.map +1 -1
  159. package/dist/esm/geo/points/isFilled.js.map +1 -1
  160. package/dist/esm/geo/points/isValid.js +1 -1
  161. package/dist/esm/geo/points/isValid.js.map +1 -1
  162. package/dist/esm/geo/points/parse.js +9 -0
  163. package/dist/esm/geo/points/parse.js.map +1 -1
  164. package/dist/esm/geo/points/pointAtDistance.js +10 -0
  165. package/dist/esm/geo/points/pointAtDistance.js.map +1 -1
  166. package/dist/esm/geo/points/toLatLong.js.map +1 -1
  167. package/dist/esm/geo/points/toString.js.map +1 -1
  168. package/dist/esm/geo/points/transform.js +12 -0
  169. package/dist/esm/geo/points/transform.js.map +1 -1
  170. package/dist/esm/index.js.map +1 -1
  171. package/dist/esm/job/JobBase.js +99 -0
  172. package/dist/esm/job/JobBase.js.map +1 -1
  173. package/dist/esm/job/index.js.map +1 -1
  174. package/dist/esm/job/job.js.map +1 -1
  175. package/dist/esm/job/jobContext.js.map +1 -1
  176. package/dist/esm/job/jobEvent.js.map +1 -1
  177. package/dist/esm/job/jobSerialized.js.map +1 -1
  178. package/dist/esm/job/status.js.map +1 -1
  179. package/dist/esm/language/index.js.map +1 -1
  180. package/dist/esm/language/labels.js.map +1 -1
  181. package/dist/esm/language/languageCode.js.map +1 -1
  182. package/dist/esm/language/languages.js.map +1 -1
  183. package/dist/esm/logger/index.js.map +1 -1
  184. package/dist/esm/logger/logger.js.map +1 -1
  185. package/dist/esm/message/index.js.map +1 -1
  186. package/dist/esm/message/message.js.map +1 -1
  187. package/dist/esm/message/messages.js +1 -0
  188. package/dist/esm/message/messages.js.map +1 -1
  189. package/dist/esm/node/factory.js.map +1 -1
  190. package/dist/esm/node/index.js.map +1 -1
  191. package/dist/esm/node/node.js.map +1 -1
  192. package/dist/esm/node/nodePointer.js.map +1 -1
  193. package/dist/esm/node/nodeValue/code.js.map +1 -1
  194. package/dist/esm/node/nodeValue/coordinate.js.map +1 -1
  195. package/dist/esm/node/nodeValue/file.js.map +1 -1
  196. package/dist/esm/node/nodeValue/index.js.map +1 -1
  197. package/dist/esm/node/nodeValue/nodeValueComposite.js.map +1 -1
  198. package/dist/esm/node/nodeValue/taxon.js.map +1 -1
  199. package/dist/esm/node/nodeValueFormatter.js +2 -0
  200. package/dist/esm/node/nodeValueFormatter.js.map +1 -1
  201. package/dist/esm/node/nodeValueProps.js.map +1 -1
  202. package/dist/esm/node/nodeValues.js +20 -0
  203. package/dist/esm/node/nodeValues.js.map +1 -1
  204. package/dist/esm/node/nodes.js +7 -0
  205. package/dist/esm/node/nodes.js.map +1 -1
  206. package/dist/esm/node/service.js.map +1 -1
  207. package/dist/esm/nodeDef/factory.js.map +1 -1
  208. package/dist/esm/nodeDef/index.js.map +1 -1
  209. package/dist/esm/nodeDef/nodeDef.js +1 -0
  210. package/dist/esm/nodeDef/nodeDef.js.map +1 -1
  211. package/dist/esm/nodeDef/nodeDefs.js +18 -0
  212. package/dist/esm/nodeDef/nodeDefs.js.map +1 -1
  213. package/dist/esm/nodeDef/service.js.map +1 -1
  214. package/dist/esm/nodeDef/types/boolean.js.map +1 -1
  215. package/dist/esm/nodeDef/types/code.js.map +1 -1
  216. package/dist/esm/nodeDef/types/coordinate.js.map +1 -1
  217. package/dist/esm/nodeDef/types/date.js.map +1 -1
  218. package/dist/esm/nodeDef/types/decimal.js.map +1 -1
  219. package/dist/esm/nodeDef/types/entity.js.map +1 -1
  220. package/dist/esm/nodeDef/types/file.js.map +1 -1
  221. package/dist/esm/nodeDef/types/formHeader.js.map +1 -1
  222. package/dist/esm/nodeDef/types/integer.js.map +1 -1
  223. package/dist/esm/nodeDef/types/taxon.js.map +1 -1
  224. package/dist/esm/nodeDef/types/text.js.map +1 -1
  225. package/dist/esm/nodeDef/types/time.js.map +1 -1
  226. package/dist/esm/nodeDefExpressionEvaluator/categoryItemProvider.js.map +1 -1
  227. package/dist/esm/nodeDefExpressionEvaluator/context.js.map +1 -1
  228. package/dist/esm/nodeDefExpressionEvaluator/evaluator.js.map +1 -1
  229. package/dist/esm/nodeDefExpressionEvaluator/functions.js +8 -1
  230. package/dist/esm/nodeDefExpressionEvaluator/functions.js.map +1 -1
  231. package/dist/esm/nodeDefExpressionEvaluator/index.js.map +1 -1
  232. package/dist/esm/nodeDefExpressionEvaluator/node/identifier.js +28 -0
  233. package/dist/esm/nodeDefExpressionEvaluator/node/identifier.js.map +1 -1
  234. package/dist/esm/nodeDefExpressionEvaluator/node/member.js +15 -0
  235. package/dist/esm/nodeDefExpressionEvaluator/node/member.js.map +1 -1
  236. package/dist/esm/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js +3 -0
  237. package/dist/esm/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js.map +1 -1
  238. package/dist/esm/nodeDefExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  239. package/dist/esm/nodeDefExpressionEvaluator/taxonProvider.js.map +1 -1
  240. package/dist/esm/nodeDefExpressionEvaluator/validator.js.map +1 -1
  241. package/dist/esm/record/_records/recordCompletion.js +14 -0
  242. package/dist/esm/record/_records/recordCompletion.js.map +1 -1
  243. package/dist/esm/record/_records/recordGetters.js +19 -2
  244. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  245. package/dist/esm/record/_records/recordNodesIndexReader.js.map +1 -1
  246. package/dist/esm/record/_records/recordNodesIndexUpdater.js +17 -0
  247. package/dist/esm/record/_records/recordNodesIndexUpdater.js.map +1 -1
  248. package/dist/esm/record/_records/recordPagesValidation.js +45 -0
  249. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  250. package/dist/esm/record/_records/recordUpdateOptions.js.map +1 -1
  251. package/dist/esm/record/_records/recordUpdater.js +2 -0
  252. package/dist/esm/record/_records/recordUpdater.js.map +1 -1
  253. package/dist/esm/record/_records/recordUtils.js.map +1 -1
  254. package/dist/esm/record/factory.js.map +1 -1
  255. package/dist/esm/record/index.js.map +1 -1
  256. package/dist/esm/record/nodePointers.js.map +1 -1
  257. package/dist/esm/record/record.js.map +1 -1
  258. package/dist/esm/record/recordCloner.js +10 -1
  259. package/dist/esm/record/recordCloner.js.map +1 -1
  260. package/dist/esm/record/recordExpressionEvaluator/context.js.map +1 -1
  261. package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
  262. package/dist/esm/record/recordExpressionEvaluator/index.js.map +1 -1
  263. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +14 -0
  264. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  265. package/dist/esm/record/recordExpressionEvaluator/node/identifier/index.js.map +1 -1
  266. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +6 -0
  267. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  268. package/dist/esm/record/recordExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  269. package/dist/esm/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  270. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  271. package/dist/esm/record/recordFixer.js +16 -0
  272. package/dist/esm/record/recordFixer.js.map +1 -1
  273. package/dist/esm/record/recordNodesUpdater/index.js.map +1 -1
  274. package/dist/esm/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js +6 -0
  275. package/dist/esm/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  276. package/dist/esm/record/recordNodesUpdater/recordExpressionEvaluationContext.js.map +1 -1
  277. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js +5 -0
  278. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  279. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +20 -2
  280. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  281. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +2 -1
  282. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  283. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +13 -1
  284. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  285. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +9 -1
  286. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  287. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +17 -1
  288. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  289. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  290. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +5 -1
  291. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  292. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -2
  293. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  294. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +8 -3
  295. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  296. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  297. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  298. package/dist/esm/record/recordNodesUpdater/recordNodesCreator.js +10 -5
  299. package/dist/esm/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  300. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +7 -0
  301. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  302. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -0
  303. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  304. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js +16 -2
  305. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  306. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js +8 -0
  307. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  308. package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
  309. package/dist/esm/record/recordStep.js.map +1 -1
  310. package/dist/esm/record/recordUpdater.js +1 -0
  311. package/dist/esm/record/recordUpdater.js.map +1 -1
  312. package/dist/esm/record/recordValidations.js.map +1 -1
  313. package/dist/esm/record/recordValidator/attributeKeyValidator.js +3 -0
  314. package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
  315. package/dist/esm/record/recordValidator/attributeTypeValidator.js +3 -0
  316. package/dist/esm/record/recordValidator/attributeTypeValidator.js.map +1 -1
  317. package/dist/esm/record/recordValidator/attributeUniqueValidator.js +2 -0
  318. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  319. package/dist/esm/record/recordValidator/attributeValidator.js +12 -1
  320. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  321. package/dist/esm/record/recordValidator/countVaildator.js +5 -0
  322. package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
  323. package/dist/esm/record/recordValidator/index.js.map +1 -1
  324. package/dist/esm/record/recordValidator/recordValidator.js +3 -0
  325. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  326. package/dist/esm/record/records.js +3 -0
  327. package/dist/esm/record/records.js.map +1 -1
  328. package/dist/esm/record/service.js.map +1 -1
  329. package/dist/esm/registry/index.js.map +1 -1
  330. package/dist/esm/registry/serviceRegistry.js.map +1 -1
  331. package/dist/esm/registry/serviceType.js.map +1 -1
  332. package/dist/esm/srs/factory.js.map +1 -1
  333. package/dist/esm/srs/index.js.map +1 -1
  334. package/dist/esm/srs/srs.js.map +1 -1
  335. package/dist/esm/survey/factory.js +1 -0
  336. package/dist/esm/survey/factory.js.map +1 -1
  337. package/dist/esm/survey/index.js.map +1 -1
  338. package/dist/esm/survey/nodeDefsFixer.js +1 -0
  339. package/dist/esm/survey/nodeDefsFixer.js.map +1 -1
  340. package/dist/esm/survey/refData/factory.js.map +1 -1
  341. package/dist/esm/survey/refData/index.js.map +1 -1
  342. package/dist/esm/survey/refData/refData.js.map +1 -1
  343. package/dist/esm/survey/service.js.map +1 -1
  344. package/dist/esm/survey/survey.js.map +1 -1
  345. package/dist/esm/survey/surveyDocImageFactory.js.map +1 -1
  346. package/dist/esm/survey/surveyDocImages.js.map +1 -1
  347. package/dist/esm/survey/surveyFileFactory.js.map +1 -1
  348. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js +8 -0
  349. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  350. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  351. package/dist/esm/survey/surveys/dependencies.js +11 -2
  352. package/dist/esm/survey/surveys/dependencies.js.map +1 -1
  353. package/dist/esm/survey/surveys/index.js +6 -0
  354. package/dist/esm/survey/surveys/index.js.map +1 -1
  355. package/dist/esm/survey/surveys/nodeDefs.js +12 -0
  356. package/dist/esm/survey/surveys/nodeDefs.js.map +1 -1
  357. package/dist/esm/survey/surveys/refsData.js.map +1 -1
  358. package/dist/esm/survey/surveys/surveyGettersSecurity.js.map +1 -1
  359. package/dist/esm/survey/surveys/surveysGetters.js +3 -1
  360. package/dist/esm/survey/surveys/surveysGetters.js.map +1 -1
  361. package/dist/esm/survey/surveys/surveysUtils.js.map +1 -1
  362. package/dist/esm/taxonomy/factory.js.map +1 -1
  363. package/dist/esm/taxonomy/index.js.map +1 -1
  364. package/dist/esm/taxonomy/service.js.map +1 -1
  365. package/dist/esm/taxonomy/taxa.js.map +1 -1
  366. package/dist/esm/taxonomy/taxon.js.map +1 -1
  367. package/dist/esm/taxonomy/taxonGenerator.js.map +1 -1
  368. package/dist/esm/taxonomy/taxonService.js.map +1 -1
  369. package/dist/esm/taxonomy/taxonVernacularName.js.map +1 -1
  370. package/dist/esm/taxonomy/taxonomies.js.map +1 -1
  371. package/dist/esm/taxonomy/taxonomy.js.map +1 -1
  372. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js +2 -0
  373. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  374. package/dist/esm/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  375. package/dist/esm/tests/builder/recordBuilder/index.js.map +1 -1
  376. package/dist/esm/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  377. package/dist/esm/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  378. package/dist/esm/tests/builder/surveyBuilder/categoryBuilder.js.map +1 -1
  379. package/dist/esm/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  380. package/dist/esm/tests/builder/surveyBuilder/index.js.map +1 -1
  381. package/dist/esm/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  382. package/dist/esm/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  383. package/dist/esm/tests/builder/surveyBuilder/nodeDefCodeBuilder.js.map +1 -1
  384. package/dist/esm/tests/builder/surveyBuilder/nodeDefEntityBuilder.js.map +1 -1
  385. package/dist/esm/tests/builder/surveyBuilder/nodeDefTaxonBuilder.js.map +1 -1
  386. package/dist/esm/tests/builder/surveyBuilder/surveyBuilder.js.map +1 -1
  387. package/dist/esm/tests/builder/surveyBuilder/taxonBuilder.js.map +1 -1
  388. package/dist/esm/tests/builder/surveyBuilder/taxonomyBuilder.js.map +1 -1
  389. package/dist/esm/utils/_objects/assoc.js.map +1 -1
  390. package/dist/esm/utils/_objects/assocPath.js +1 -0
  391. package/dist/esm/utils/_objects/assocPath.js.map +1 -1
  392. package/dist/esm/utils/_objects/camelize.js +9 -0
  393. package/dist/esm/utils/_objects/camelize.js.map +1 -1
  394. package/dist/esm/utils/_objects/deepMerge.js +10 -0
  395. package/dist/esm/utils/_objects/deepMerge.js.map +1 -1
  396. package/dist/esm/utils/_objects/deleteEmptyProps.js.map +1 -1
  397. package/dist/esm/utils/_objects/difference.js.map +1 -1
  398. package/dist/esm/utils/_objects/dissoc.js.map +1 -1
  399. package/dist/esm/utils/_objects/dissocPath.js +1 -0
  400. package/dist/esm/utils/_objects/dissocPath.js.map +1 -1
  401. package/dist/esm/utils/_objects/dissocPathIfEmpty.js.map +1 -1
  402. package/dist/esm/utils/_objects/fromPairs.js.map +1 -1
  403. package/dist/esm/utils/_objects/index.js.map +1 -1
  404. package/dist/esm/utils/_objects/isEmpty.js +8 -0
  405. package/dist/esm/utils/_objects/isEmpty.js.map +1 -1
  406. package/dist/esm/utils/_objects/isEqual.js.map +1 -1
  407. package/dist/esm/utils/_objects/isNil.js +6 -0
  408. package/dist/esm/utils/_objects/isNil.js.map +1 -1
  409. package/dist/esm/utils/_objects/isNotEmpty.js +6 -0
  410. package/dist/esm/utils/_objects/isNotEmpty.js.map +1 -1
  411. package/dist/esm/utils/_objects/parse.js +8 -0
  412. package/dist/esm/utils/_objects/parse.js.map +1 -1
  413. package/dist/esm/utils/_objects/path.js +7 -0
  414. package/dist/esm/utils/_objects/path.js.map +1 -1
  415. package/dist/esm/utils/_objects/propertyOf.js.map +1 -1
  416. package/dist/esm/utils/_objects/setInPath.js.map +1 -1
  417. package/dist/esm/utils/_objects/stringify.js +9 -0
  418. package/dist/esm/utils/_objects/stringify.js.map +1 -1
  419. package/dist/esm/utils/_objects/toPairs.js.map +1 -1
  420. package/dist/esm/utils/arrays.js.map +1 -1
  421. package/dist/esm/utils/dates.js +66 -15
  422. package/dist/esm/utils/dates.js.map +1 -1
  423. package/dist/esm/utils/fileNames.js.map +1 -1
  424. package/dist/esm/utils/fileProcessor.js +5 -1
  425. package/dist/esm/utils/fileProcessor.js.map +1 -1
  426. package/dist/esm/utils/index.js.map +1 -1
  427. package/dist/esm/utils/numbers.js +21 -0
  428. package/dist/esm/utils/numbers.js.map +1 -1
  429. package/dist/esm/utils/promises.js +15 -1
  430. package/dist/esm/utils/promises.js.map +1 -1
  431. package/dist/esm/utils/queue.js +9 -0
  432. package/dist/esm/utils/queue.js.map +1 -1
  433. package/dist/esm/utils/retryProcessor.js +5 -1
  434. package/dist/esm/utils/retryProcessor.js.map +1 -1
  435. package/dist/esm/utils/strings.js.map +1 -1
  436. package/dist/esm/utils/uuids.js.map +1 -1
  437. package/dist/esm/utils/versions.js +4 -0
  438. package/dist/esm/utils/versions.js.map +1 -1
  439. package/dist/esm/validation/factory.js.map +1 -1
  440. package/dist/esm/validation/fieldValidator.js.map +1 -1
  441. package/dist/esm/validation/fieldValidators/email.js +3 -0
  442. package/dist/esm/validation/fieldValidators/email.js.map +1 -1
  443. package/dist/esm/validation/fieldValidators/index.js.map +1 -1
  444. package/dist/esm/validation/fieldValidators/name.js +4 -0
  445. package/dist/esm/validation/fieldValidators/name.js.map +1 -1
  446. package/dist/esm/validation/fieldValidators/notKeyword.js.map +1 -1
  447. package/dist/esm/validation/fieldValidators/numeric.js.map +1 -1
  448. package/dist/esm/validation/fieldValidators/numericPositive.js.map +1 -1
  449. package/dist/esm/validation/fieldValidators/required.js.map +1 -1
  450. package/dist/esm/validation/index.js.map +1 -1
  451. package/dist/esm/validation/validation.js.map +1 -1
  452. package/dist/esm/validation/validationResults.js +1 -1
  453. package/dist/esm/validation/validationResults.js.map +1 -1
  454. package/dist/esm/validation/validations.js +17 -1
  455. package/dist/esm/validation/validations.js.map +1 -1
  456. package/dist/esm/validation/validator.js.map +1 -1
  457. package/dist/esm/validation/validatorErrorKeys.js.map +1 -1
  458. package/dist/expression/context.d.ts +6 -0
  459. package/dist/expression/context.js.map +1 -1
  460. package/dist/expression/evaluator.js.map +1 -1
  461. package/dist/expression/function.d.ts +13 -0
  462. package/dist/expression/function.js.map +1 -1
  463. package/dist/expression/index.js.map +1 -1
  464. package/dist/expression/javascript/evaluator.js +3 -0
  465. package/dist/expression/javascript/evaluator.js.map +1 -1
  466. package/dist/expression/javascript/functionsDefault.js.map +1 -1
  467. package/dist/expression/javascript/global.js.map +1 -1
  468. package/dist/expression/javascript/node/array.js.map +1 -1
  469. package/dist/expression/javascript/node/binary.js +23 -0
  470. package/dist/expression/javascript/node/binary.js.map +1 -1
  471. package/dist/expression/javascript/node/call.js +12 -0
  472. package/dist/expression/javascript/node/call.js.map +1 -1
  473. package/dist/expression/javascript/node/compound.js.map +1 -1
  474. package/dist/expression/javascript/node/conditional.js.map +1 -1
  475. package/dist/expression/javascript/node/identifier.d.ts +7 -0
  476. package/dist/expression/javascript/node/identifier.js +7 -0
  477. package/dist/expression/javascript/node/identifier.js.map +1 -1
  478. package/dist/expression/javascript/node/literal.js.map +1 -1
  479. package/dist/expression/javascript/node/member.js +5 -1
  480. package/dist/expression/javascript/node/member.js.map +1 -1
  481. package/dist/expression/javascript/node/sequence.js.map +1 -1
  482. package/dist/expression/javascript/node/this.js.map +1 -1
  483. package/dist/expression/javascript/node/unary.js +8 -0
  484. package/dist/expression/javascript/node/unary.js.map +1 -1
  485. package/dist/expression/javascript/parser/jsep.js +6 -2
  486. package/dist/expression/javascript/parser/jsep.js.map +1 -1
  487. package/dist/expression/javascript/parser/parser.js.map +1 -1
  488. package/dist/expression/node.js.map +1 -1
  489. package/dist/expression/parser.js.map +1 -1
  490. package/dist/expression/variable.js.map +1 -1
  491. package/dist/extraProp/extraProp.js.map +1 -1
  492. package/dist/extraProp/extraProps.js.map +1 -1
  493. package/dist/extraProp/extraPropsDataGenerator.js.map +1 -1
  494. package/dist/extraProp/index.js.map +1 -1
  495. package/dist/geo/index.js.map +1 -1
  496. package/dist/geo/point.js.map +1 -1
  497. package/dist/geo/pointFactory.js.map +1 -1
  498. package/dist/geo/points/bearing.d.ts +9 -0
  499. package/dist/geo/points/bearing.js +11 -0
  500. package/dist/geo/points/bearing.js.map +1 -1
  501. package/dist/geo/points/distance.d.ts +8 -0
  502. package/dist/geo/points/distance.js +9 -0
  503. package/dist/geo/points/distance.js.map +1 -1
  504. package/dist/geo/points/equals.js.map +1 -1
  505. package/dist/geo/points/getSrs.js.map +1 -1
  506. package/dist/geo/points/index.js.map +1 -1
  507. package/dist/geo/points/isFilled.js.map +1 -1
  508. package/dist/geo/points/isValid.js +1 -1
  509. package/dist/geo/points/isValid.js.map +1 -1
  510. package/dist/geo/points/parse.d.ts +9 -0
  511. package/dist/geo/points/parse.js +9 -0
  512. package/dist/geo/points/parse.js.map +1 -1
  513. package/dist/geo/points/pointAtDistance.d.ts +9 -0
  514. package/dist/geo/points/pointAtDistance.js +10 -0
  515. package/dist/geo/points/pointAtDistance.js.map +1 -1
  516. package/dist/geo/points/toLatLong.js.map +1 -1
  517. package/dist/geo/points/toString.js.map +1 -1
  518. package/dist/geo/points/transform.d.ts +8 -0
  519. package/dist/geo/points/transform.js +12 -0
  520. package/dist/geo/points/transform.js.map +1 -1
  521. package/dist/index.js.map +1 -1
  522. package/dist/job/JobBase.d.ts +81 -0
  523. package/dist/job/JobBase.js +99 -0
  524. package/dist/job/JobBase.js.map +1 -1
  525. package/dist/job/index.js.map +1 -1
  526. package/dist/job/job.d.ts +20 -0
  527. package/dist/job/job.js.map +1 -1
  528. package/dist/job/jobContext.js.map +1 -1
  529. package/dist/job/jobEvent.js.map +1 -1
  530. package/dist/job/jobSerialized.d.ts +3 -0
  531. package/dist/job/jobSerialized.js.map +1 -1
  532. package/dist/job/status.js.map +1 -1
  533. package/dist/language/index.js.map +1 -1
  534. package/dist/language/labels.js.map +1 -1
  535. package/dist/language/languageCode.js.map +1 -1
  536. package/dist/language/languages.js.map +1 -1
  537. package/dist/logger/index.js.map +1 -1
  538. package/dist/logger/logger.js.map +1 -1
  539. package/dist/message/index.js.map +1 -1
  540. package/dist/message/message.d.ts +3 -0
  541. package/dist/message/message.js.map +1 -1
  542. package/dist/message/messages.js +1 -0
  543. package/dist/message/messages.js.map +1 -1
  544. package/dist/node/factory.js.map +1 -1
  545. package/dist/node/index.js.map +1 -1
  546. package/dist/node/node.d.ts +38 -0
  547. package/dist/node/node.js.map +1 -1
  548. package/dist/node/nodePointer.js.map +1 -1
  549. package/dist/node/nodeValue/code.js.map +1 -1
  550. package/dist/node/nodeValue/coordinate.js.map +1 -1
  551. package/dist/node/nodeValue/file.js.map +1 -1
  552. package/dist/node/nodeValue/index.js.map +1 -1
  553. package/dist/node/nodeValue/nodeValueComposite.js.map +1 -1
  554. package/dist/node/nodeValue/taxon.js.map +1 -1
  555. package/dist/node/nodeValueFormatter.js +2 -0
  556. package/dist/node/nodeValueFormatter.js.map +1 -1
  557. package/dist/node/nodeValueProps.js.map +1 -1
  558. package/dist/node/nodeValues.d.ts +4 -0
  559. package/dist/node/nodeValues.js +20 -0
  560. package/dist/node/nodeValues.js.map +1 -1
  561. package/dist/node/nodes.js +7 -0
  562. package/dist/node/nodes.js.map +1 -1
  563. package/dist/node/service.js.map +1 -1
  564. package/dist/nodeDef/factory.js.map +1 -1
  565. package/dist/nodeDef/index.js.map +1 -1
  566. package/dist/nodeDef/nodeDef.js +1 -0
  567. package/dist/nodeDef/nodeDef.js.map +1 -1
  568. package/dist/nodeDef/nodeDefs.js +18 -0
  569. package/dist/nodeDef/nodeDefs.js.map +1 -1
  570. package/dist/nodeDef/service.js.map +1 -1
  571. package/dist/nodeDef/types/boolean.js.map +1 -1
  572. package/dist/nodeDef/types/code.js.map +1 -1
  573. package/dist/nodeDef/types/coordinate.js.map +1 -1
  574. package/dist/nodeDef/types/date.js.map +1 -1
  575. package/dist/nodeDef/types/decimal.js.map +1 -1
  576. package/dist/nodeDef/types/entity.d.ts +1 -0
  577. package/dist/nodeDef/types/entity.js.map +1 -1
  578. package/dist/nodeDef/types/file.js.map +1 -1
  579. package/dist/nodeDef/types/formHeader.js.map +1 -1
  580. package/dist/nodeDef/types/integer.js.map +1 -1
  581. package/dist/nodeDef/types/taxon.js.map +1 -1
  582. package/dist/nodeDef/types/text.js.map +1 -1
  583. package/dist/nodeDef/types/time.js.map +1 -1
  584. package/dist/nodeDefExpressionEvaluator/categoryItemProvider.js.map +1 -1
  585. package/dist/nodeDefExpressionEvaluator/context.d.ts +3 -0
  586. package/dist/nodeDefExpressionEvaluator/context.js.map +1 -1
  587. package/dist/nodeDefExpressionEvaluator/evaluator.js.map +1 -1
  588. package/dist/nodeDefExpressionEvaluator/functions.js +8 -1
  589. package/dist/nodeDefExpressionEvaluator/functions.js.map +1 -1
  590. package/dist/nodeDefExpressionEvaluator/index.js.map +1 -1
  591. package/dist/nodeDefExpressionEvaluator/node/identifier.d.ts +14 -0
  592. package/dist/nodeDefExpressionEvaluator/node/identifier.js +28 -0
  593. package/dist/nodeDefExpressionEvaluator/node/identifier.js.map +1 -1
  594. package/dist/nodeDefExpressionEvaluator/node/member.js +15 -0
  595. package/dist/nodeDefExpressionEvaluator/node/member.js.map +1 -1
  596. package/dist/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js +3 -0
  597. package/dist/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js.map +1 -1
  598. package/dist/nodeDefExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  599. package/dist/nodeDefExpressionEvaluator/taxonProvider.js.map +1 -1
  600. package/dist/nodeDefExpressionEvaluator/validator.js.map +1 -1
  601. package/dist/record/_records/recordCompletion.d.ts +12 -0
  602. package/dist/record/_records/recordCompletion.js +14 -0
  603. package/dist/record/_records/recordCompletion.js.map +1 -1
  604. package/dist/record/_records/recordGetters.d.ts +3 -0
  605. package/dist/record/_records/recordGetters.js +19 -2
  606. package/dist/record/_records/recordGetters.js.map +1 -1
  607. package/dist/record/_records/recordNodesIndexReader.js.map +1 -1
  608. package/dist/record/_records/recordNodesIndexUpdater.js +17 -0
  609. package/dist/record/_records/recordNodesIndexUpdater.js.map +1 -1
  610. package/dist/record/_records/recordPagesValidation.d.ts +39 -0
  611. package/dist/record/_records/recordPagesValidation.js +45 -0
  612. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  613. package/dist/record/_records/recordUpdateOptions.js.map +1 -1
  614. package/dist/record/_records/recordUpdater.js +2 -0
  615. package/dist/record/_records/recordUpdater.js.map +1 -1
  616. package/dist/record/_records/recordUtils.js.map +1 -1
  617. package/dist/record/factory.js.map +1 -1
  618. package/dist/record/index.js.map +1 -1
  619. package/dist/record/nodePointers.js.map +1 -1
  620. package/dist/record/record.d.ts +12 -0
  621. package/dist/record/record.js.map +1 -1
  622. package/dist/record/recordCloner.js +10 -1
  623. package/dist/record/recordCloner.js.map +1 -1
  624. package/dist/record/recordExpressionEvaluator/context.js.map +1 -1
  625. package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
  626. package/dist/record/recordExpressionEvaluator/index.js.map +1 -1
  627. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +14 -0
  628. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  629. package/dist/record/recordExpressionEvaluator/node/identifier/index.js.map +1 -1
  630. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +6 -0
  631. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  632. package/dist/record/recordExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  633. package/dist/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  634. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  635. package/dist/record/recordFixer.js +16 -0
  636. package/dist/record/recordFixer.js.map +1 -1
  637. package/dist/record/recordNodesUpdater/index.js.map +1 -1
  638. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.d.ts +6 -0
  639. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js +6 -0
  640. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  641. package/dist/record/recordNodesUpdater/recordExpressionEvaluationContext.js.map +1 -1
  642. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js +5 -0
  643. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  644. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +20 -2
  645. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  646. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +2 -1
  647. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  648. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +13 -1
  649. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  650. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +9 -1
  651. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  652. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +17 -1
  653. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  654. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  655. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +5 -1
  656. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  657. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -2
  658. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  659. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +8 -3
  660. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  661. package/dist/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  662. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  663. package/dist/record/recordNodesUpdater/recordNodesCreator.js +10 -5
  664. package/dist/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  665. package/dist/record/recordNodesUpdater/recordNodesDeleter.js +7 -0
  666. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  667. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -0
  668. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  669. package/dist/record/recordNodesUpdater/recordNodesUpdater.js +16 -2
  670. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  671. package/dist/record/recordNodesUpdater/recordUpdateResult.d.ts +8 -0
  672. package/dist/record/recordNodesUpdater/recordUpdateResult.js +8 -0
  673. package/dist/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  674. package/dist/record/recordPrettyPrinter.js.map +1 -1
  675. package/dist/record/recordStep.js.map +1 -1
  676. package/dist/record/recordUpdater.js +1 -0
  677. package/dist/record/recordUpdater.js.map +1 -1
  678. package/dist/record/recordValidations.js.map +1 -1
  679. package/dist/record/recordValidator/attributeKeyValidator.d.ts +4 -0
  680. package/dist/record/recordValidator/attributeKeyValidator.js +3 -0
  681. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  682. package/dist/record/recordValidator/attributeTypeValidator.js +3 -0
  683. package/dist/record/recordValidator/attributeTypeValidator.js.map +1 -1
  684. package/dist/record/recordValidator/attributeUniqueValidator.js +2 -0
  685. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  686. package/dist/record/recordValidator/attributeValidator.js +12 -1
  687. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  688. package/dist/record/recordValidator/countVaildator.js +5 -0
  689. package/dist/record/recordValidator/countVaildator.js.map +1 -1
  690. package/dist/record/recordValidator/index.js.map +1 -1
  691. package/dist/record/recordValidator/recordValidator.js +3 -0
  692. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  693. package/dist/record/records.js +3 -0
  694. package/dist/record/records.js.map +1 -1
  695. package/dist/record/service.js.map +1 -1
  696. package/dist/registry/index.js.map +1 -1
  697. package/dist/registry/serviceRegistry.js.map +1 -1
  698. package/dist/registry/serviceType.js.map +1 -1
  699. package/dist/srs/factory.js.map +1 -1
  700. package/dist/srs/index.js.map +1 -1
  701. package/dist/srs/srs.js.map +1 -1
  702. package/dist/survey/factory.js +1 -0
  703. package/dist/survey/factory.js.map +1 -1
  704. package/dist/survey/index.js.map +1 -1
  705. package/dist/survey/nodeDefsFixer.js +1 -0
  706. package/dist/survey/nodeDefsFixer.js.map +1 -1
  707. package/dist/survey/refData/factory.js.map +1 -1
  708. package/dist/survey/refData/index.js.map +1 -1
  709. package/dist/survey/refData/refData.d.ts +15 -0
  710. package/dist/survey/refData/refData.js.map +1 -1
  711. package/dist/survey/service.js.map +1 -1
  712. package/dist/survey/survey.d.ts +9 -0
  713. package/dist/survey/survey.js.map +1 -1
  714. package/dist/survey/surveyDocImageFactory.js.map +1 -1
  715. package/dist/survey/surveyDocImages.js.map +1 -1
  716. package/dist/survey/surveyFileFactory.js.map +1 -1
  717. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js +8 -0
  718. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  719. package/dist/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  720. package/dist/survey/surveys/dependencies.js +11 -2
  721. package/dist/survey/surveys/dependencies.js.map +1 -1
  722. package/dist/survey/surveys/index.js +6 -0
  723. package/dist/survey/surveys/index.js.map +1 -1
  724. package/dist/survey/surveys/nodeDefs.js +12 -0
  725. package/dist/survey/surveys/nodeDefs.js.map +1 -1
  726. package/dist/survey/surveys/refsData.js.map +1 -1
  727. package/dist/survey/surveys/surveyGettersSecurity.js.map +1 -1
  728. package/dist/survey/surveys/surveysGetters.js +3 -1
  729. package/dist/survey/surveys/surveysGetters.js.map +1 -1
  730. package/dist/survey/surveys/surveysUtils.js.map +1 -1
  731. package/dist/taxonomy/factory.js.map +1 -1
  732. package/dist/taxonomy/index.js.map +1 -1
  733. package/dist/taxonomy/service.js.map +1 -1
  734. package/dist/taxonomy/taxa.js.map +1 -1
  735. package/dist/taxonomy/taxon.js.map +1 -1
  736. package/dist/taxonomy/taxonGenerator.js.map +1 -1
  737. package/dist/taxonomy/taxonService.js.map +1 -1
  738. package/dist/taxonomy/taxonVernacularName.js.map +1 -1
  739. package/dist/taxonomy/taxonomies.js.map +1 -1
  740. package/dist/taxonomy/taxonomy.js.map +1 -1
  741. package/dist/tests/builder/recordBuilder/attributeBuilder.js +2 -0
  742. package/dist/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  743. package/dist/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  744. package/dist/tests/builder/recordBuilder/index.js.map +1 -1
  745. package/dist/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  746. package/dist/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  747. package/dist/tests/builder/surveyBuilder/categoryBuilder.js.map +1 -1
  748. package/dist/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  749. package/dist/tests/builder/surveyBuilder/index.js.map +1 -1
  750. package/dist/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  751. package/dist/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  752. package/dist/tests/builder/surveyBuilder/nodeDefCodeBuilder.js.map +1 -1
  753. package/dist/tests/builder/surveyBuilder/nodeDefEntityBuilder.js.map +1 -1
  754. package/dist/tests/builder/surveyBuilder/nodeDefTaxonBuilder.js.map +1 -1
  755. package/dist/tests/builder/surveyBuilder/surveyBuilder.js.map +1 -1
  756. package/dist/tests/builder/surveyBuilder/taxonBuilder.js.map +1 -1
  757. package/dist/tests/builder/surveyBuilder/taxonomyBuilder.js.map +1 -1
  758. package/dist/utils/_objects/assoc.js.map +1 -1
  759. package/dist/utils/_objects/assocPath.js +1 -0
  760. package/dist/utils/_objects/assocPath.js.map +1 -1
  761. package/dist/utils/_objects/camelize.d.ts +9 -0
  762. package/dist/utils/_objects/camelize.js +9 -0
  763. package/dist/utils/_objects/camelize.js.map +1 -1
  764. package/dist/utils/_objects/deepMerge.d.ts +5 -0
  765. package/dist/utils/_objects/deepMerge.js +10 -0
  766. package/dist/utils/_objects/deepMerge.js.map +1 -1
  767. package/dist/utils/_objects/deleteEmptyProps.js.map +1 -1
  768. package/dist/utils/_objects/difference.js.map +1 -1
  769. package/dist/utils/_objects/dissoc.js.map +1 -1
  770. package/dist/utils/_objects/dissocPath.js +1 -0
  771. package/dist/utils/_objects/dissocPath.js.map +1 -1
  772. package/dist/utils/_objects/dissocPathIfEmpty.js.map +1 -1
  773. package/dist/utils/_objects/fromPairs.js.map +1 -1
  774. package/dist/utils/_objects/index.js.map +1 -1
  775. package/dist/utils/_objects/isEmpty.d.ts +6 -0
  776. package/dist/utils/_objects/isEmpty.js +8 -0
  777. package/dist/utils/_objects/isEmpty.js.map +1 -1
  778. package/dist/utils/_objects/isEqual.js.map +1 -1
  779. package/dist/utils/_objects/isNil.d.ts +6 -0
  780. package/dist/utils/_objects/isNil.js +6 -0
  781. package/dist/utils/_objects/isNil.js.map +1 -1
  782. package/dist/utils/_objects/isNotEmpty.d.ts +6 -0
  783. package/dist/utils/_objects/isNotEmpty.js +6 -0
  784. package/dist/utils/_objects/isNotEmpty.js.map +1 -1
  785. package/dist/utils/_objects/parse.d.ts +8 -0
  786. package/dist/utils/_objects/parse.js +8 -0
  787. package/dist/utils/_objects/parse.js.map +1 -1
  788. package/dist/utils/_objects/path.d.ts +6 -0
  789. package/dist/utils/_objects/path.js +7 -0
  790. package/dist/utils/_objects/path.js.map +1 -1
  791. package/dist/utils/_objects/propertyOf.js.map +1 -1
  792. package/dist/utils/_objects/setInPath.js.map +1 -1
  793. package/dist/utils/_objects/stringify.d.ts +9 -0
  794. package/dist/utils/_objects/stringify.js +9 -0
  795. package/dist/utils/_objects/stringify.js.map +1 -1
  796. package/dist/utils/_objects/toPairs.js.map +1 -1
  797. package/dist/utils/arrays.js.map +1 -1
  798. package/dist/utils/dates.d.ts +1 -1
  799. package/dist/utils/dates.js +66 -15
  800. package/dist/utils/dates.js.map +1 -1
  801. package/dist/utils/fileNames.js.map +1 -1
  802. package/dist/utils/fileProcessor.js +5 -1
  803. package/dist/utils/fileProcessor.js.map +1 -1
  804. package/dist/utils/index.js.map +1 -1
  805. package/dist/utils/numbers.js +21 -0
  806. package/dist/utils/numbers.js.map +1 -1
  807. package/dist/utils/promises.js +15 -1
  808. package/dist/utils/promises.js.map +1 -1
  809. package/dist/utils/queue.d.ts +7 -0
  810. package/dist/utils/queue.js +9 -0
  811. package/dist/utils/queue.js.map +1 -1
  812. package/dist/utils/retryProcessor.js +5 -1
  813. package/dist/utils/retryProcessor.js.map +1 -1
  814. package/dist/utils/strings.js.map +1 -1
  815. package/dist/utils/uuids.js.map +1 -1
  816. package/dist/utils/versions.js +4 -0
  817. package/dist/utils/versions.js.map +1 -1
  818. package/dist/validation/factory.js.map +1 -1
  819. package/dist/validation/fieldValidator.js.map +1 -1
  820. package/dist/validation/fieldValidators/email.js +3 -0
  821. package/dist/validation/fieldValidators/email.js.map +1 -1
  822. package/dist/validation/fieldValidators/index.js.map +1 -1
  823. package/dist/validation/fieldValidators/name.js +4 -0
  824. package/dist/validation/fieldValidators/name.js.map +1 -1
  825. package/dist/validation/fieldValidators/notKeyword.js.map +1 -1
  826. package/dist/validation/fieldValidators/numeric.js.map +1 -1
  827. package/dist/validation/fieldValidators/numericPositive.js.map +1 -1
  828. package/dist/validation/fieldValidators/required.js.map +1 -1
  829. package/dist/validation/index.js.map +1 -1
  830. package/dist/validation/validation.js.map +1 -1
  831. package/dist/validation/validationResults.js +1 -1
  832. package/dist/validation/validationResults.js.map +1 -1
  833. package/dist/validation/validations.js +17 -1
  834. package/dist/validation/validations.js.map +1 -1
  835. package/dist/validation/validator.js.map +1 -1
  836. package/dist/validation/validatorErrorKeys.js.map +1 -1
  837. package/package.json +7 -10
@@ -42,27 +42,35 @@ const calculateApplicableNext = (_a) => __awaiter(void 0, [_a], void 0, function
42
42
  const expressionsToEvaluate = nodeDef_1.NodeDefs.getApplicable(nodeDefNodePointer);
43
43
  if (expressionsToEvaluate.length === 0) {
44
44
  if (applicablePrev) {
45
+ // skip nodes that were already applicable and have no applicable expression, as they will remain applicable
45
46
  return undefined;
46
47
  }
47
48
  else {
49
+ // used during survey publishing: node def could have had applicable expression(s) that were removed,
50
+ // and node could have been not applicable, but now it should be applicable, as there are no more applicable expressions
48
51
  return true;
49
52
  }
50
53
  }
51
54
  else {
55
+ // 3. evaluate applicable expression
52
56
  const exprEval = yield expressionEvaluator.evalApplicableExpression(Object.assign(Object.assign({}, params), { record: updateResult.record, nodeCtx, expressions: expressionsToEvaluate }));
53
57
  return (exprEval === null || exprEval === void 0 ? void 0 : exprEval.value) || false;
54
58
  }
55
59
  });
56
60
  const updateDescendantsApplicability = ({ updateResult, nodeCtxChild, applicable, params, recordUpdateOptions, }) => {
57
61
  const { survey, sideEffect = false, clearNonApplicableValues = false } = params;
62
+ // only values entered by the user are reported as cleared (they need a confirmation)
58
63
  let userValuesCleared = false;
59
64
  records_1.Records.visitDescendantsAndSelf({
60
65
  record: updateResult.record,
61
66
  node: nodeCtxChild,
62
67
  visitor: (nodeDescendant) => {
63
68
  const nodeDescendantCleared = clearNonApplicableValues && !applicable && node_1.Nodes.isValueNotBlank(nodeDescendant);
69
+ // values set by expressions (default values, read only attributes) are applied again when applicable: not reported
70
+ // (evaluated before clearing the value: with sideEffect the node is modified in place)
64
71
  const nodeDescendantDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: nodeDescendant.nodeDefUuid });
65
72
  const userValueCleared = nodeDescendantCleared && !nodeDef_1.NodeDefs.isReadOnly(nodeDescendantDef) && node_1.Nodes.hasUserInputValue(nodeDescendant);
73
+ // Clear value if becoming non-applicable and parameter is enabled
66
74
  const nodeDescendantUpdated = nodeDescendantCleared
67
75
  ? node_1.Nodes.assocValue(nodeDescendant, null, sideEffect)
68
76
  : nodeDescendant;
@@ -74,6 +82,7 @@ const updateDescendantsApplicability = ({ updateResult, nodeCtxChild, applicable
74
82
  return false;
75
83
  },
76
84
  });
85
+ // if a multiple entity became not applicable and it's empty, delete it instead of just marking descendants as not applicable
77
86
  if (!applicable && clearNonApplicableValues) {
78
87
  const { uuid: nodeCtxChildUuid, nodeDefUuid: nodeCtxChildDefUuid } = nodeCtxChild;
79
88
  const nodeCtxChildDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: nodeCtxChildDefUuid });
@@ -96,7 +105,8 @@ const createMissingApplicableMultipleEntities = (_a) => __awaiter(void 0, [_a],
96
105
  const missingCount = Math.max(0, minCount - existingChildren.length);
97
106
  for (let index = 0; index < missingCount; index++) {
98
107
  const createParams = Object.assign(Object.assign({}, params), { record: updateResult.record, parentNode, nodeDef });
99
- const childUpdateResult = yield (0, recordNodesCreator_1.createNodeAndDescendants)(createParams);
108
+ // create nodes sequentially: every iteration works on the record updated by the previous one
109
+ const childUpdateResult = yield (0, recordNodesCreator_1.createNodeAndDescendants)(createParams); // NOSONAR
100
110
  updateResult.merge(childUpdateResult);
101
111
  }
102
112
  });
@@ -105,6 +115,7 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
105
115
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
106
116
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
107
117
  const nodeDefUuid = nodeDefNodePointer.uuid;
118
+ // nodeCtx could have been updated in a previous iteration
108
119
  const nodeCtx = (_b = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _b !== void 0 ? _b : nodeCtxNodePointer;
109
120
  const applicablePrev = node_1.Nodes.isChildApplicable(nodeCtx, nodeDefUuid);
110
121
  const applicable = yield calculateApplicableNext({
@@ -124,9 +135,12 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
124
135
  nodeDef: nodeDefNodePointer,
125
136
  });
126
137
  }
138
+ // 4. persist updated applicability if changed, and return updated nodes
127
139
  if (applicablePrev === applicable) {
128
140
  return;
129
141
  }
142
+ // Applicability changed
143
+ // update node and add it to nodes updated
130
144
  const nodeCtxUpdated = node_1.Nodes.assocChildApplicability(nodeCtx, nodeDefUuid, applicable);
131
145
  updateResult.addNode(nodeCtxUpdated, recordUpdateOptions);
132
146
  let nodeCtxChildren = records_1.Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record);
@@ -143,6 +157,7 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
143
157
  nodeCtxChildren = records_1.Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record);
144
158
  }
145
159
  for (const nodeCtxChild of nodeCtxChildren) {
160
+ // add nodeCtxChild and its descendants to nodesUpdated
146
161
  updateDescendantsApplicability({
147
162
  updateResult,
148
163
  nodeCtxChild,
@@ -156,9 +171,12 @@ const updateSelfAndDependentsApplicable = (params) => __awaiter(void 0, void 0,
156
171
  const { survey, record, node, sideEffect = false } = params;
157
172
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
158
173
  const recordUpdateOptions = { sideEffect };
174
+ // 1. fetch dependent nodes
159
175
  const nodePointersToUpdate = extractNodePointersToUpdate({ survey, record, node });
176
+ // 2. update expr to node and dependent nodes
177
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
160
178
  for (const nodePointer of nodePointersToUpdate) {
161
- yield updateNodePointerApplicability({ params, updateResult, nodePointer, recordUpdateOptions });
179
+ yield updateNodePointerApplicability({ params, updateResult, nodePointer, recordUpdateOptions }); // NOSONAR
162
180
  }
163
181
  return updateResult;
164
182
  });
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsApplicableUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsApplicableUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node, NodePointer, Nodes } from '../../node'\nimport { NodeDefEntity, NodeDefs } from '../../nodeDef'\nimport { Surveys } from '../../survey'\nimport { Survey, SurveyDependencyType } from '../../survey/survey'\nimport { Record } from '../record'\nimport { RecordExpressionEvaluator } from '../recordExpressionEvaluator'\nimport { Records, RecordUpdateOptions } from '../records'\nimport { createOrDeleteEnumeratedEntities } from './recordNodeDependentsEnumeratedEntitiesUpdater'\nimport { syncEnumeratingItemsEntities } from './recordNodeDependentsEnumeratingItemsUpdater'\nimport { createNodeAndDescendants } from './recordNodesCreator'\nimport { deleteNodes } from './recordNodesDeleter'\nimport { getDependentNodePointersByType } from './recordNodesDependentsUpdaterCommons'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst expressionEvaluator = new RecordExpressionEvaluator()\n\nconst extractNodePointersToUpdate = (params: { survey: Survey; record: Record; node: Node }) => {\n const { survey, record, node } = params\n\n const nodePointersToUpdate = getDependentNodePointersByType({\n survey,\n record,\n node,\n dependencyType: SurveyDependencyType.applicable,\n includeSelfWhenSourceIsAttribute: true,\n includeNewEntityChildPointers: true,\n })\n return nodePointersToUpdate\n}\n\nconst calculateApplicableNext = async ({\n params,\n updateResult,\n nodePointer,\n nodeCtx,\n}: {\n params: RecordNodeDependentsUpdateParams\n updateResult: RecordUpdateResult\n nodePointer: NodePointer\n nodeCtx: Node\n}): Promise<boolean | undefined> => {\n const { nodeDef: nodeDefNodePointer } = nodePointer\n\n const { uuid: nodeDefUuid } = nodeDefNodePointer\n\n const applicablePrev = Nodes.isChildApplicable(nodeCtx, nodeDefUuid)\n const expressionsToEvaluate = NodeDefs.getApplicable(nodeDefNodePointer)\n if (expressionsToEvaluate.length === 0) {\n if (applicablePrev) {\n // skip nodes that were already applicable and have no applicable expression, as they will remain applicable\n return undefined\n } else {\n // used during survey publishing: node def could have had applicable expression(s) that were removed,\n // and node could have been not applicable, but now it should be applicable, as there are no more applicable expressions\n return true\n }\n } else {\n // 3. evaluate applicable expression\n const exprEval = await expressionEvaluator.evalApplicableExpression({\n ...params,\n record: updateResult.record,\n nodeCtx,\n expressions: expressionsToEvaluate,\n })\n return exprEval?.value || false\n }\n}\n\nconst updateDescendantsApplicability = ({\n updateResult,\n nodeCtxChild,\n applicable,\n params,\n recordUpdateOptions,\n}: {\n updateResult: RecordUpdateResult\n nodeCtxChild: Node\n applicable: boolean\n params: RecordNodeDependentsUpdateParams\n recordUpdateOptions: RecordUpdateOptions\n}): void => {\n const { survey, sideEffect = false, clearNonApplicableValues = false } = params\n\n // only values entered by the user are reported as cleared (they need a confirmation)\n let userValuesCleared = false\n\n Records.visitDescendantsAndSelf({\n record: updateResult.record,\n node: nodeCtxChild,\n visitor: (nodeDescendant): boolean => {\n const nodeDescendantCleared = clearNonApplicableValues && !applicable && Nodes.isValueNotBlank(nodeDescendant)\n // values set by expressions (default values, read only attributes) are applied again when applicable: not reported\n // (evaluated before clearing the value: with sideEffect the node is modified in place)\n const nodeDescendantDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeDescendant.nodeDefUuid })\n const userValueCleared =\n nodeDescendantCleared && !NodeDefs.isReadOnly(nodeDescendantDef) && Nodes.hasUserInputValue(nodeDescendant)\n // Clear value if becoming non-applicable and parameter is enabled\n const nodeDescendantUpdated = nodeDescendantCleared\n ? Nodes.assocValue(nodeDescendant, null, sideEffect)\n : nodeDescendant\n updateResult.addNode(nodeDescendantUpdated, recordUpdateOptions)\n if (userValueCleared) {\n updateResult.addClearedDefUuid(nodeDescendant.nodeDefUuid)\n userValuesCleared = true\n }\n return false\n },\n })\n\n // if a multiple entity became not applicable and it's empty, delete it instead of just marking descendants as not applicable\n if (!applicable && clearNonApplicableValues) {\n const { uuid: nodeCtxChildUuid, nodeDefUuid: nodeCtxChildDefUuid } = nodeCtxChild\n const nodeCtxChildDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeCtxChildDefUuid })\n if (NodeDefs.isMultipleEntity(nodeCtxChildDef) && Records.isNodeEmpty(nodeCtxChild)(updateResult.record)) {\n const deleteResult = deleteNodes([nodeCtxChildUuid], recordUpdateOptions)(updateResult.record)\n updateResult.merge(deleteResult)\n if (userValuesCleared) {\n updateResult.addClearedDefUuid(nodeCtxChildDefUuid)\n }\n }\n }\n}\n\nconst createMissingApplicableMultipleEntities = async ({\n params,\n updateResult,\n parentNode,\n nodeDef,\n}: {\n params: RecordNodeDependentsUpdateParams\n updateResult: RecordUpdateResult\n parentNode: Node\n nodeDef: NodeDefEntity\n}): Promise<void> => {\n if (!NodeDefs.isAutoCreateMinCountItems(nodeDef)) return\n\n const minCount = Nodes.getChildrenMinCount({ parentNode, nodeDef })\n if (Number.isNaN(minCount) || minCount <= 0) return\n\n const existingChildren = Records.getChildren(parentNode, nodeDef.uuid)(updateResult.record)\n const missingCount = Math.max(0, minCount - existingChildren.length)\n\n for (let index = 0; index < missingCount; index++) {\n const createParams = { ...params, record: updateResult.record, parentNode, nodeDef }\n // create nodes sequentially: every iteration works on the record updated by the previous one\n const childUpdateResult = await createNodeAndDescendants(createParams) // NOSONAR\n updateResult.merge(childUpdateResult)\n }\n}\n\nconst updateNodePointerApplicability = async ({\n params,\n updateResult,\n nodePointer,\n recordUpdateOptions,\n}: {\n params: RecordNodeDependentsUpdateParams\n updateResult: RecordUpdateResult\n nodePointer: NodePointer\n recordUpdateOptions: RecordUpdateOptions\n}): Promise<void> => {\n const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer\n\n const nodeCtxUuid = nodeCtxNodePointer.uuid\n const nodeDefUuid = nodeDefNodePointer.uuid\n\n // nodeCtx could have been updated in a previous iteration\n const nodeCtx = updateResult.getNodeByUuid(nodeCtxUuid) ?? nodeCtxNodePointer\n\n const applicablePrev = Nodes.isChildApplicable(nodeCtx, nodeDefUuid)\n const applicable = await calculateApplicableNext({\n params,\n updateResult,\n nodePointer,\n nodeCtx,\n })\n if (applicable === undefined) {\n return\n }\n\n if (applicable && NodeDefs.isMultipleEntity(nodeDefNodePointer)) {\n await createMissingApplicableMultipleEntities({\n params,\n updateResult,\n parentNode: nodeCtx,\n nodeDef: nodeDefNodePointer as NodeDefEntity,\n })\n }\n\n // 4. persist updated applicability if changed, and return updated nodes\n if (applicablePrev === applicable) {\n return\n }\n // Applicability changed\n\n // update node and add it to nodes updated\n const nodeCtxUpdated = Nodes.assocChildApplicability(nodeCtx, nodeDefUuid, applicable)\n updateResult.addNode(nodeCtxUpdated, recordUpdateOptions)\n\n let nodeCtxChildren = Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record)\n\n if (NodeDefs.isMultipleEntity(nodeDefNodePointer) && NodeDefs.isEnumerate(nodeDefNodePointer as NodeDefEntity)) {\n const entityDef = nodeDefNodePointer as NodeDefEntity\n if (NodeDefs.getEnumeratingItemsExpression(entityDef)) {\n await syncEnumeratingItemsEntities({\n ...params,\n parentNode: nodeCtxUpdated,\n entityDef,\n updateResult,\n })\n } else {\n await createOrDeleteEnumeratedEntities({\n ...params,\n parentNode: nodeCtxUpdated,\n entityDef,\n updateResult,\n })\n }\n nodeCtxChildren = Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record)\n }\n for (const nodeCtxChild of nodeCtxChildren) {\n // add nodeCtxChild and its descendants to nodesUpdated\n updateDescendantsApplicability({\n updateResult,\n nodeCtxChild,\n applicable,\n params,\n recordUpdateOptions,\n })\n }\n}\n\nexport const updateSelfAndDependentsApplicable = async (\n params: RecordNodeDependentsUpdateParams\n): Promise<RecordUpdateResult> => {\n const { survey, record, node, sideEffect = false } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n const recordUpdateOptions: RecordUpdateOptions = { sideEffect }\n\n // 1. fetch dependent nodes\n const nodePointersToUpdate = extractNodePointersToUpdate({ survey, record, node })\n\n // 2. update expr to node and dependent nodes\n // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten\n for (const nodePointer of nodePointersToUpdate) {\n await updateNodePointerApplicability({ params, updateResult, nodePointer, recordUpdateOptions }) // NOSONAR\n }\n return updateResult\n}\n"]}
@@ -41,6 +41,7 @@ const updateSelfAndDependentsBoolean = (_a) => __awaiter(void 0, [_a], void 0, f
41
41
  includeNewEntitySelf,
42
42
  includeNewEntityChildPointers: true,
43
43
  });
44
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
44
45
  for (const nodePointer of nodePointersToUpdate) {
45
46
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
46
47
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
@@ -48,7 +49,7 @@ const updateSelfAndDependentsBoolean = (_a) => __awaiter(void 0, [_a], void 0, f
48
49
  const nodeCtx = (_b = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _b !== void 0 ? _b : nodeCtxNodePointer;
49
50
  const valuePrev = getValuePrev(nodeCtx, nodeDefUuid);
50
51
  const calculateParams = { params, updateResult, nodePointer, nodeCtx, getExpressions, getValuePrev };
51
- const value = yield calculateBooleanValueNext(calculateParams);
52
+ const value = yield calculateBooleanValueNext(calculateParams); // NOSONAR
52
53
  if (value === undefined || valuePrev === value) {
53
54
  continue;
54
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsBooleanUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,4EAAwE;AACxE,+FAAsF;AAEtF,6DAAyD;AAEzD,MAAM,mBAAmB,GAAG,IAAI,qDAAyB,EAAE,CAAA;AAW3D,MAAM,yBAAyB,GAAG,KAcD,EAAE,4CAdM,EACvC,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,cAAc,EACd,YAAY,GAQb;IACC,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;IACnD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAA;IAEhD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACpD,MAAM,qBAAqB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IACzD,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,wBAAwB,iCAC9D,MAAM,KACT,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,OAAO,EACP,WAAW,EAAE,qBAAqB,IAClC,CAAA;IACF,OAAO,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,KAAI,KAAK,CAAA;AACjC,CAAC,CAAA,CAAA;AAEM,MAAM,8BAA8B,GAAG,KAOwB,EAAE,4CAPnB,EACnD,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,oBAAoB,GAAG,IAAI,GACU;;IACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAC3D,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,oBAAoB,GAAG,IAAA,oEAA8B,EAAC;QAC1D,MAAM;QACN,MAAM;QACN,IAAI;QACJ,cAAc;QACd,gCAAgC,EAAE,IAAI;QACtC,oBAAoB;QACpB,6BAA6B,EAAE,IAAI;KACpC,CAAC,CAAA;IAGF,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;QAEhF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAE3C,MAAM,OAAO,GAAG,MAAA,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,mCAAI,kBAAkB,CAAA;QAE7E,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACpD,MAAM,eAAe,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA;QACpG,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,eAAe,CAAC,CAAA;QAE9D,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/C,SAAQ;QACV,CAAC;QAED,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAC1E,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA,CAAA;AA3CY,QAAA,8BAA8B,kCA2C1C"}
1
+ {"version":3,"file":"recordNodeDependentsBooleanUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,4EAAwE;AACxE,+FAAsF;AAEtF,6DAAyD;AAEzD,MAAM,mBAAmB,GAAG,IAAI,qDAAyB,EAAE,CAAA;AAW3D,MAAM,yBAAyB,GAAG,KAcD,EAAE,4CAdM,EACvC,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,cAAc,EACd,YAAY,GAQb;IACC,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;IACnD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAA;IAEhD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACpD,MAAM,qBAAqB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IACzD,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,wBAAwB,iCAC9D,MAAM,KACT,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,OAAO,EACP,WAAW,EAAE,qBAAqB,IAClC,CAAA;IACF,OAAO,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,KAAI,KAAK,CAAA;AACjC,CAAC,CAAA,CAAA;AAEM,MAAM,8BAA8B,GAAG,KAOwB,EAAE,4CAPnB,EACnD,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,oBAAoB,GAAG,IAAI,GACU;;IACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAC3D,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,oBAAoB,GAAG,IAAA,oEAA8B,EAAC;QAC1D,MAAM;QACN,MAAM;QACN,IAAI;QACJ,cAAc;QACd,gCAAgC,EAAE,IAAI;QACtC,oBAAoB;QACpB,6BAA6B,EAAE,IAAI;KACpC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;QAEhF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAE3C,MAAM,OAAO,GAAG,MAAA,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,mCAAI,kBAAkB,CAAA;QAE7E,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACpD,MAAM,eAAe,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA;QACpG,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,eAAe,CAAC,CAAA,CAAC,UAAU;QAEzE,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/C,SAAQ;QACV,CAAC;QAED,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAC1E,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA,CAAA;AA3CY,QAAA,8BAA8B,kCA2C1C","sourcesContent":["import { Node, NodePointer } from '../../node'\nimport { NodeDefExpression } from '../../nodeDef'\nimport { SurveyDependencyType } from '../../survey/survey'\nimport { RecordExpressionEvaluator } from '../recordExpressionEvaluator'\nimport { getDependentNodePointersByType } from './recordNodesDependentsUpdaterCommons'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst expressionEvaluator = new RecordExpressionEvaluator()\n\ntype UpdateSelfAndDependentsBooleanParams = {\n params: RecordNodeDependentsUpdateParams\n dependencyType: SurveyDependencyType\n getExpressions: (nodePointer: NodePointer) => NodeDefExpression[]\n getValuePrev: (nodeCtx: Node, nodeDefUuid: string) => boolean\n assocValue: (nodeCtx: Node, nodeDefUuid: string, value: boolean, sideEffect: boolean) => Node\n includeNewEntitySelf?: boolean\n}\n\nconst calculateBooleanValueNext = async ({\n params,\n updateResult,\n nodePointer,\n nodeCtx,\n getExpressions,\n getValuePrev,\n}: {\n params: RecordNodeDependentsUpdateParams\n updateResult: RecordUpdateResult\n nodePointer: NodePointer\n nodeCtx: Node\n getExpressions: (nodePointer: NodePointer) => NodeDefExpression[]\n getValuePrev: (nodeCtx: Node, nodeDefUuid: string) => boolean\n}): Promise<boolean | undefined> => {\n const { nodeDef: nodeDefNodePointer } = nodePointer\n const { uuid: nodeDefUuid } = nodeDefNodePointer\n\n const valuePrev = getValuePrev(nodeCtx, nodeDefUuid)\n const expressionsToEvaluate = getExpressions(nodePointer)\n if (expressionsToEvaluate.length === 0) {\n if (valuePrev) {\n return undefined\n }\n return true\n }\n\n const exprEval = await expressionEvaluator.evalApplicableExpression({\n ...params,\n record: updateResult.record,\n nodeCtx,\n expressions: expressionsToEvaluate,\n })\n return exprEval?.value || false\n}\n\nexport const updateSelfAndDependentsBoolean = async ({\n params,\n dependencyType,\n getExpressions,\n getValuePrev,\n assocValue,\n includeNewEntitySelf = true,\n}: UpdateSelfAndDependentsBooleanParams): Promise<RecordUpdateResult> => {\n const { survey, record, node, sideEffect = false } = params\n const updateResult = new RecordUpdateResult({ record })\n\n const nodePointersToUpdate = getDependentNodePointersByType({\n survey,\n record,\n node,\n dependencyType,\n includeSelfWhenSourceIsAttribute: true,\n includeNewEntitySelf,\n includeNewEntityChildPointers: true,\n })\n\n // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten\n for (const nodePointer of nodePointersToUpdate) {\n const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer\n\n const nodeCtxUuid = nodeCtxNodePointer.uuid\n const nodeDefUuid = nodeDefNodePointer.uuid\n\n const nodeCtx = updateResult.getNodeByUuid(nodeCtxUuid) ?? nodeCtxNodePointer\n\n const valuePrev = getValuePrev(nodeCtx, nodeDefUuid)\n const calculateParams = { params, updateResult, nodePointer, nodeCtx, getExpressions, getValuePrev }\n const value = await calculateBooleanValueNext(calculateParams) // NOSONAR\n\n if (value === undefined || valuePrev === value) {\n continue\n }\n\n const nodeCtxUpdated = assocValue(nodeCtx, nodeDefUuid, value, sideEffect)\n updateResult.addNode(nodeCtxUpdated, { sideEffect })\n }\n\n return updateResult\n}\n"]}
@@ -16,6 +16,15 @@ const survey_1 = require("../../survey");
16
16
  const utils_1 = require("../../utils");
17
17
  const records_1 = require("../records");
18
18
  const recordUpdateResult_1 = require("./recordUpdateResult");
19
+ // A dependent code attribute's stored item is still valid as long as its category item's parent is the
20
+ // (possibly unchanged) item currently selected on the parent code attribute node - so this single check
21
+ // covers both "did the parent's value change" and "is the dependent's value still valid": if the parent's
22
+ // item didn't change, the dependent's item still has the same parent and is left alone.
23
+ //
24
+ // The dependent's item may belong to a "big" category whose items aren't loaded into the survey's
25
+ // in-memory ref data index (e.g. an externally-referenced category) - Surveys.getCategoryItemByUuid only
26
+ // ever looks there, so it falls back to the async categoryItemProvider (same pattern as attribute value
27
+ // validation) before concluding the item doesn't exist.
19
28
  const isDependentCodeAttributeValueStillValid = (params) => __awaiter(void 0, void 0, void 0, function* () {
20
29
  const { survey, parentItemUuid, dependentCodeAttribute, dependentCodeAttributeDef, record, categoryItemProvider } = params;
21
30
  if (!parentItemUuid)
@@ -42,10 +51,12 @@ const updateDependentCodeAttributes = (params) => __awaiter(void 0, void 0, void
42
51
  const { survey, record, node, categoryItemProvider, sideEffect = false } = params;
43
52
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
44
53
  const recordUpdateOptions = { sideEffect };
54
+ // 1. get dependent code attributes
45
55
  const dependentCodeAttributes = records_1.Records.getDependentCodeAttributes(node)(record);
46
56
  if (dependentCodeAttributes.length === 0)
47
57
  return updateResult;
48
58
  const parentItemUuid = node_1.NodeValues.getItemUuid(node);
59
+ // 2. clear dependent code attributes' values that are no longer valid children of the parent's current item
49
60
  for (const dependentCodeAttribute of dependentCodeAttributes) {
50
61
  const dependentCodeAttributeDef = survey_1.Surveys.getNodeDefByUuid({
51
62
  survey,
@@ -61,7 +72,8 @@ const updateDependentCodeAttributes = (params) => __awaiter(void 0, void 0, void
61
72
  record,
62
73
  categoryItemProvider,
63
74
  };
64
- const stillValid = yield isDependentCodeAttributeValueStillValid(validityCheckParams);
75
+ // check attributes sequentially: invalid values are cleared in the record at every iteration
76
+ const stillValid = yield isDependentCodeAttributeValueStillValid(validityCheckParams); // NOSONAR
65
77
  if (stillValid)
66
78
  continue;
67
79
  const nodeUpdated = Object.assign(Object.assign({}, dependentCodeAttribute), { value: null, updated: true, dateModified: utils_1.Dates.nowFormattedForStorage() });
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsCodeAttributesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsCodeAttributesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node, NodeValues, Nodes } from '../../node'\nimport { NodeDefCode, NodeDefs } from '../../nodeDef'\nimport { Surveys } from '../../survey'\nimport { Dates } from '../../utils'\nimport { Records } from '../records'\nimport type { ArenaRecord } from '../record'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\n// A dependent code attribute's stored item is still valid as long as its category item's parent is the\n// (possibly unchanged) item currently selected on the parent code attribute node - so this single check\n// covers both \"did the parent's value change\" and \"is the dependent's value still valid\": if the parent's\n// item didn't change, the dependent's item still has the same parent and is left alone.\n//\n// The dependent's item may belong to a \"big\" category whose items aren't loaded into the survey's\n// in-memory ref data index (e.g. an externally-referenced category) - Surveys.getCategoryItemByUuid only\n// ever looks there, so it falls back to the async categoryItemProvider (same pattern as attribute value\n// validation) before concluding the item doesn't exist.\nconst isDependentCodeAttributeValueStillValid = async (\n params: Pick<RecordNodeDependentsUpdateParams, 'survey' | 'categoryItemProvider'> & {\n parentItemUuid?: string\n dependentCodeAttribute: Node\n dependentCodeAttributeDef: NodeDefCode\n record: ArenaRecord\n }\n): Promise<boolean> => {\n const { survey, parentItemUuid, dependentCodeAttribute, dependentCodeAttributeDef, record, categoryItemProvider } =\n params\n if (!parentItemUuid) return false\n\n const dependentItemUuid = NodeValues.getItemUuid(dependentCodeAttribute)\n if (!dependentItemUuid) return false\n\n let dependentItem = Surveys.getCategoryItemByUuid({ survey, itemUuid: dependentItemUuid })\n if (!dependentItem && categoryItemProvider) {\n const categoryUuid = NodeDefs.getCategoryUuid(dependentCodeAttributeDef)\n if (categoryUuid) {\n const draft = !!record.preview\n dependentItem = await categoryItemProvider.getItemByUuid({\n survey,\n categoryUuid,\n itemUuid: dependentItemUuid,\n draft,\n })\n }\n }\n return dependentItem?.parentUuid === parentItemUuid\n}\n\nexport const updateDependentCodeAttributes = async (params: RecordNodeDependentsUpdateParams) => {\n const { survey, record, node, categoryItemProvider, sideEffect = false } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n const recordUpdateOptions = { sideEffect }\n\n // 1. get dependent code attributes\n const dependentCodeAttributes = Records.getDependentCodeAttributes(node)(record)\n if (dependentCodeAttributes.length === 0) return updateResult\n\n const parentItemUuid = NodeValues.getItemUuid(node)\n\n // 2. clear dependent code attributes' values that are no longer valid children of the parent's current item\n for (const dependentCodeAttribute of dependentCodeAttributes) {\n const dependentCodeAttributeDef = Surveys.getNodeDefByUuid({\n survey,\n uuid: dependentCodeAttribute.nodeDefUuid,\n }) as NodeDefCode\n if (NodeDefs.isReadOnly(dependentCodeAttributeDef) || !Nodes.hasUserInputValue(dependentCodeAttribute)) continue\n\n const validityCheckParams = {\n survey,\n parentItemUuid,\n dependentCodeAttribute,\n dependentCodeAttributeDef,\n record,\n categoryItemProvider,\n }\n // check attributes sequentially: invalid values are cleared in the record at every iteration\n const stillValid = await isDependentCodeAttributeValueStillValid(validityCheckParams) // NOSONAR\n if (stillValid) continue\n\n const nodeUpdated: Node = {\n ...dependentCodeAttribute,\n value: null,\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n updateResult.addNode(nodeUpdated, recordUpdateOptions)\n updateResult.addClearedDefUuid(nodeUpdated.nodeDefUuid)\n }\n\n return updateResult\n}\n"]}
@@ -23,6 +23,7 @@ const updateDependentsCount = (params) => __awaiter(void 0, void 0, void 0, func
23
23
  const { survey, record, node, countType, sideEffect = false } = params;
24
24
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
25
25
  const recordUpdateOptions = { sideEffect };
26
+ // 1. fetch dependent nodes
26
27
  const dependencyType = countType === nodeDef_1.NodeDefCountType.max ? survey_1.SurveyDependencyType.maxCount : survey_1.SurveyDependencyType.minCount;
27
28
  const nodePointersToUpdate = records_1.Records.getDependentNodePointers({
28
29
  survey,
@@ -30,18 +31,25 @@ const updateDependentsCount = (params) => __awaiter(void 0, void 0, void 0, func
30
31
  node,
31
32
  dependencyType,
32
33
  });
34
+ // 2. update expr to node and dependent nodes
35
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
33
36
  for (const nodePointer of nodePointersToUpdate) {
34
37
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
35
38
  const expressionsToEvaluate = nodeDef_1.NodeDefs.getCount(nodeDefNodePointer, countType);
36
39
  if (utils_1.Objects.isEmpty(expressionsToEvaluate) || !Array.isArray(expressionsToEvaluate))
37
40
  continue;
41
+ // 3. evaluate applicable expression
38
42
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
43
+ // nodeCtx could have been updated in a previous iteration
39
44
  const nodeCtx = (_a = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _a !== void 0 ? _a : nodeCtxNodePointer;
40
45
  const evaluateParams = Object.assign(Object.assign({}, params), { record: updateResult.record, nodeCtx, expressions: expressionsToEvaluate });
41
- const countResult = yield expressionEvaluator.evalApplicableExpression(evaluateParams);
46
+ const countResult = yield expressionEvaluator.evalApplicableExpression(evaluateParams); // NOSONAR
42
47
  const count = Number(countResult === null || countResult === void 0 ? void 0 : countResult.value);
48
+ // 4. persist updated count if changed, and return updated nodes
43
49
  const nodeDefUuid = nodeDefNodePointer.uuid;
44
50
  if (node_1.Nodes.getChildrenMinOrMaxCount({ parentNode: nodeCtx, nodeDef: nodeDefNodePointer, countType }) !== count) {
51
+ // count changed
52
+ // 5. update node and add it to nodes updated
45
53
  const nodeCtxUpdated = node_1.Nodes.assocChildrenCount({ node: nodeCtx, nodeDefUuid, count, countType });
46
54
  updateResult.addNode(nodeCtxUpdated, recordUpdateOptions);
47
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsCountUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsCountUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkC;AAClC,2CAA0D;AAC1D,yCAAmD;AACnD,uCAAqC;AACrC,4EAAwE;AACxE,wCAAoC;AAEpC,6DAAyD;AAEzD,MAAM,mBAAmB,GAAG,IAAI,qDAAyB,EAAE,CAAA;AAEpD,MAAM,qBAAqB,GAAG,CACnC,MAEC,EAC4B,EAAE;;IAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAEtE,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,mBAAmB,GAAG,EAAE,UAAU,EAAE,CAAA;IAG1C,MAAM,cAAc,GAClB,SAAS,KAAK,0BAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,6BAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAAoB,CAAC,QAAQ,CAAA;IAEpG,MAAM,oBAAoB,GAAG,iBAAO,CAAC,wBAAwB,CAAC;QAC5D,MAAM;QACN,MAAM;QACN,IAAI;QACJ,cAAc;KACf,CAAC,CAAA;IAIF,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;QAEhF,MAAM,qBAAqB,GAAG,kBAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QAC9E,IAAI,eAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAAE,SAAQ;QAG7F,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAE3C,MAAM,OAAO,GAAG,MAAA,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,mCAAI,kBAAkB,CAAA;QAE7E,MAAM,cAAc,mCAAQ,MAAM,KAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,GAAE,CAAA;QAC9G,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAA;QAEtF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAC,CAAA;QAGxC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAE3C,IAAI,YAAK,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAI9G,MAAM,cAAc,GAAG,YAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACjG,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA,CAAA;AApDY,QAAA,qBAAqB,yBAoDjC"}
1
+ {"version":3,"file":"recordNodeDependentsCountUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsCountUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkC;AAClC,2CAA0D;AAC1D,yCAAmD;AACnD,uCAAqC;AACrC,4EAAwE;AACxE,wCAAoC;AAEpC,6DAAyD;AAEzD,MAAM,mBAAmB,GAAG,IAAI,qDAAyB,EAAE,CAAA;AAEpD,MAAM,qBAAqB,GAAG,CACnC,MAEC,EAC4B,EAAE;;IAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAEtE,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,mBAAmB,GAAG,EAAE,UAAU,EAAE,CAAA;IAE1C,2BAA2B;IAC3B,MAAM,cAAc,GAClB,SAAS,KAAK,0BAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,6BAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAAoB,CAAC,QAAQ,CAAA;IAEpG,MAAM,oBAAoB,GAAG,iBAAO,CAAC,wBAAwB,CAAC;QAC5D,MAAM;QACN,MAAM;QACN,IAAI;QACJ,cAAc;KACf,CAAC,CAAA;IAEF,6CAA6C;IAC7C,4EAA4E;IAC5E,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;QAEhF,MAAM,qBAAqB,GAAG,kBAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QAC9E,IAAI,eAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAAE,SAAQ;QAE7F,oCAAoC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAC3C,0DAA0D;QAC1D,MAAM,OAAO,GAAG,MAAA,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,mCAAI,kBAAkB,CAAA;QAE7E,MAAM,cAAc,mCAAQ,MAAM,KAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,GAAE,CAAA;QAC9G,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAA,CAAC,UAAU;QAEjG,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAC,CAAA;QAExC,gEAAgE;QAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAA;QAE3C,IAAI,YAAK,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAC9G,gBAAgB;YAEhB,6CAA6C;YAC7C,MAAM,cAAc,GAAG,YAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACjG,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA,CAAA;AApDY,QAAA,qBAAqB,yBAoDjC","sourcesContent":["import { Nodes } from '../../node'\nimport { NodeDefCountType, NodeDefs } from '../../nodeDef'\nimport { SurveyDependencyType } from '../../survey'\nimport { Objects } from '../../utils'\nimport { RecordExpressionEvaluator } from '../recordExpressionEvaluator'\nimport { Records } from '../records'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst expressionEvaluator = new RecordExpressionEvaluator()\n\nexport const updateDependentsCount = async (\n params: RecordNodeDependentsUpdateParams & {\n countType: NodeDefCountType\n }\n): Promise<RecordUpdateResult> => {\n const { survey, record, node, countType, sideEffect = false } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n const recordUpdateOptions = { sideEffect }\n\n // 1. fetch dependent nodes\n const dependencyType =\n countType === NodeDefCountType.max ? SurveyDependencyType.maxCount : SurveyDependencyType.minCount\n\n const nodePointersToUpdate = Records.getDependentNodePointers({\n survey,\n record,\n node,\n dependencyType,\n })\n\n // 2. update expr to node and dependent nodes\n // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten\n for (const nodePointer of nodePointersToUpdate) {\n const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer\n\n const expressionsToEvaluate = NodeDefs.getCount(nodeDefNodePointer, countType)\n if (Objects.isEmpty(expressionsToEvaluate) || !Array.isArray(expressionsToEvaluate)) continue\n\n // 3. evaluate applicable expression\n const nodeCtxUuid = nodeCtxNodePointer.uuid\n // nodeCtx could have been updated in a previous iteration\n const nodeCtx = updateResult.getNodeByUuid(nodeCtxUuid) ?? nodeCtxNodePointer\n\n const evaluateParams = { ...params, record: updateResult.record, nodeCtx, expressions: expressionsToEvaluate }\n const countResult = await expressionEvaluator.evalApplicableExpression(evaluateParams) // NOSONAR\n\n const count = Number(countResult?.value)\n\n // 4. persist updated count if changed, and return updated nodes\n const nodeDefUuid = nodeDefNodePointer.uuid\n\n if (Nodes.getChildrenMinOrMaxCount({ parentNode: nodeCtx, nodeDef: nodeDefNodePointer, countType }) !== count) {\n // count changed\n\n // 5. update node and add it to nodes updated\n const nodeCtxUpdated = Nodes.assocChildrenCount({ node: nodeCtx, nodeDefUuid, count, countType })\n updateResult.addNode(nodeCtxUpdated, recordUpdateOptions)\n }\n }\n return updateResult\n}\n"]}
@@ -22,6 +22,9 @@ const recordExpressionValueConverter_1 = require("./recordExpressionValueConvert
22
22
  const recordNodesDependentsUpdaterCommons_1 = require("./recordNodesDependentsUpdaterCommons");
23
23
  const recordUpdateResult_1 = require("./recordUpdateResult");
24
24
  const expressionEvaluator = new recordExpressionEvaluator_1.RecordExpressionEvaluator();
25
+ /**
26
+ * Default value should be reset when a node becomes not applicable, but only if the default value was applied or if the node def is read only (therefore the value can only be set by default value expression)
27
+ */
25
28
  const shouldResetDefaultValue = (params) => {
26
29
  const { survey, record, node } = params;
27
30
  const nodeDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: node.nodeDefUuid });
@@ -51,9 +54,11 @@ const updateDefaultValueInNode = (params) => {
51
54
  if (!canApplyDefaultValue({ record: updateResult.record, nodeDef, node: nodeToUpdate })) {
52
55
  return;
53
56
  }
57
+ // 2. if node value is not changed, do nothing
54
58
  if (utils_1.Objects.isEqual(nodeToUpdate.value, exprValue)) {
55
59
  return;
56
60
  }
61
+ // 3. update node value and meta
57
62
  const defaultValueApplied = !utils_1.Objects.isEmpty(exprValue);
58
63
  const nodeUpdated = node_1.Nodes.mergeNodes(nodeToUpdate, {
59
64
  value: exprValue,
@@ -75,16 +80,22 @@ const updateDefaultValuesInNodes = (params) => __awaiter(void 0, void 0, void 0,
75
80
  const expressionsToEvaluate = nodeDef_1.NodeDefs.getDefaultValues(nodeDef);
76
81
  if (expressionsToEvaluate.length === 0) {
77
82
  if (survey_1.Surveys.isNodeDefEnumerator({ survey, nodeDef })) {
83
+ // if node def is enumerator, its default value is generated using the category items, not with default value expressions
84
+ // so the default value should not be reset or updated using default value expressions
78
85
  return;
79
86
  }
87
+ // no default expressions to evaluate; check if there are dependent nodes with default value applied, as their default value should be removed
80
88
  nodesToUpdate = dependentNodes.filter(node_1.Nodes.isDefaultValueApplied);
81
89
  if (nodesToUpdate.length === 0) {
90
+ // no default expressions to evaluate and no nodes with default value applied, therefore no update needed
82
91
  return;
83
92
  }
84
93
  }
85
94
  else {
95
+ // if there are default value expressions, all dependent nodes should be evaluated, as their default value could change
86
96
  nodesToUpdate = dependentNodes;
87
97
  try {
98
+ // 1. evaluate applicable default value expression
88
99
  const exprEval = yield expressionEvaluator.evalApplicableExpression(Object.assign(Object.assign({}, params), { record,
89
100
  nodeCtx, expressions: expressionsToEvaluate }));
90
101
  const exprEvalValue = exprEval === null || exprEval === void 0 ? void 0 : exprEval.value;
@@ -118,6 +129,9 @@ const updateDefaultValuesInNodes = (params) => __awaiter(void 0, void 0, void 0,
118
129
  const updateSelfAndDependentsDefaultValues = (params) => __awaiter(void 0, void 0, void 0, function* () {
119
130
  const { survey, record, node, sideEffect = false } = params;
120
131
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
132
+ // 1. get dependent node pointers
133
+ // filter nodes to update including itself and (attributes with empty values or with default values applied)
134
+ // therefore attributes with user defined values are excluded
121
135
  const nodePointersFilterFn = (nodePointer) => {
122
136
  const { nodeDef } = nodePointer;
123
137
  if (!nodeDef_1.NodeDefs.isAttribute(nodeDef))
@@ -137,8 +151,10 @@ const updateSelfAndDependentsDefaultValues = (params) => __awaiter(void 0, void
137
151
  includeSelf: true,
138
152
  filterFn: nodePointersFilterFn,
139
153
  });
154
+ // 2. update expr to node and dependent nodes
140
155
  for (const nodePointer of nodePointersToUpdate) {
141
- yield updateDefaultValuesInNodes(Object.assign(Object.assign({}, params), { nodePointer, updateResult, sideEffect }));
156
+ // sequential: each iteration updates the record
157
+ yield updateDefaultValuesInNodes(Object.assign(Object.assign({}, params), { nodePointer, updateResult, sideEffect })); // NOSONAR
142
158
  }
143
159
  return updateResult;
144
160
  });
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsDefaultValuesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsDefaultValuesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node, NodePointer, Nodes } from '../../node'\nimport { NodeDef, NodeDefs } from '../../nodeDef'\nimport { Surveys } from '../../survey'\nimport { Survey, SurveyDependencyType } from '../../survey/survey'\nimport { Dates, Objects } from '../../utils'\nimport { NodePointers } from '../nodePointers'\nimport { Record } from '../record'\nimport { RecordExpressionEvaluator } from '../recordExpressionEvaluator'\nimport { Records } from '../records'\nimport { RecordExpressionValueConverter } from './recordExpressionValueConverter'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { throwError } from './recordNodesDependentsUpdaterCommons'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst expressionEvaluator = new RecordExpressionEvaluator()\n\n/**\n * Default value should be reset when a node becomes not applicable, but only if the default value was applied or if the node def is read only (therefore the value can only be set by default value expression)\n */\nconst shouldResetDefaultValue = (params: { survey: Survey; record: Record; node: Node }): boolean => {\n const { survey, record, node } = params\n const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: node.nodeDefUuid })\n return (\n !Records.isNodeApplicable({ record, node }) &&\n !Nodes.isValueBlank(node) &&\n (Nodes.isDefaultValueApplied(node) || NodeDefs.isReadOnly(nodeDef))\n )\n}\n\nconst canApplyDefaultValue = (params: { record: Record; node: Node; nodeDef: NodeDef<any> }): boolean => {\n const { record, node, nodeDef } = params\n return (\n Records.isNodeApplicable({ record, node }) &&\n (Nodes.isValueBlank(node) ||\n (!NodeDefs.isDefaultValueEvaluatedOneTime(nodeDef) &&\n (Nodes.isDefaultValueApplied(node) || NodeDefs.isReadOnly(nodeDef))))\n )\n}\n\nconst updateDefaultValueInNode = (params: {\n survey: Survey\n updateResult: RecordUpdateResult\n nodeToUpdate: Node\n nodeDef: NodeDef<any>\n exprValue: any\n sideEffect: boolean\n}): void => {\n const { survey, updateResult, nodeToUpdate, nodeDef, exprValue, sideEffect } = params\n if (shouldResetDefaultValue({ survey, record: updateResult.record, node: nodeToUpdate })) {\n const nodeUpdated = Nodes.mergeNodes(nodeToUpdate, {\n value: null,\n meta: { defaultValueApplied: false },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n })\n updateResult.addNode(nodeUpdated, { sideEffect })\n return\n }\n if (!canApplyDefaultValue({ record: updateResult.record, nodeDef, node: nodeToUpdate })) {\n return\n }\n\n // 2. if node value is not changed, do nothing\n if (Objects.isEqual(nodeToUpdate.value, exprValue)) {\n return\n }\n\n // 3. update node value and meta\n const defaultValueApplied = !Objects.isEmpty(exprValue)\n\n const nodeUpdated = Nodes.mergeNodes(nodeToUpdate, {\n value: exprValue,\n meta: { defaultValueApplied },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n })\n updateResult.addNode(nodeUpdated, { sideEffect })\n}\n\nconst updateDefaultValuesInNodes = async (\n params: RecordNodeDependentsUpdateParams & {\n nodePointer: NodePointer\n updateResult: RecordUpdateResult\n }\n): Promise<void> => {\n const { survey, nodePointer, updateResult, timezoneOffset, categoryItemProvider, sideEffect = false } = params\n\n const { nodeCtx, nodeDef } = nodePointer\n\n if (nodeCtx.deleted) return\n\n const { record } = updateResult\n\n let nodesToUpdate: Node[] = []\n const dependentNodes = NodePointers.getNodesFromNodePointers({ record, nodePointers: [nodePointer] })\n let exprValue: any = null\n const expressionsToEvaluate = NodeDefs.getDefaultValues(nodeDef)\n if (expressionsToEvaluate.length === 0) {\n if (Surveys.isNodeDefEnumerator({ survey, nodeDef })) {\n // if node def is enumerator, its default value is generated using the category items, not with default value expressions\n // so the default value should not be reset or updated using default value expressions\n return\n }\n // no default expressions to evaluate; check if there are dependent nodes with default value applied, as their default value should be removed\n nodesToUpdate = dependentNodes.filter(Nodes.isDefaultValueApplied)\n if (nodesToUpdate.length === 0) {\n // no default expressions to evaluate and no nodes with default value applied, therefore no update needed\n return\n }\n } else {\n // if there are default value expressions, all dependent nodes should be evaluated, as their default value could change\n nodesToUpdate = dependentNodes\n try {\n // 1. evaluate applicable default value expression\n const exprEval = await expressionEvaluator.evalApplicableExpression({\n ...params,\n record,\n nodeCtx,\n expressions: expressionsToEvaluate,\n })\n\n const exprEvalValue = exprEval?.value\n exprValue = Objects.isEmpty(exprEvalValue)\n ? null\n : await RecordExpressionValueConverter.toNodeValue({\n survey,\n record,\n nodeDef,\n nodeParent: nodeCtx,\n valueExpr: exprEvalValue,\n timezoneOffset,\n categoryItemProvider,\n })\n } catch (error) {\n throwError({\n error,\n errorKey: 'record.updateSelfAndDependentsDefaultValues',\n expressionType: SurveyDependencyType.defaultValues,\n survey,\n nodeDef,\n expressionsToEvaluate,\n })\n }\n }\n for (const nodeToUpdate of nodesToUpdate) {\n updateDefaultValueInNode({ survey, updateResult, nodeToUpdate, nodeDef, exprValue, sideEffect })\n }\n}\n\nexport const updateSelfAndDependentsDefaultValues = async (\n params: RecordNodeDependentsUpdateParams\n): Promise<RecordUpdateResult> => {\n const { survey, record, node, sideEffect = false } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n // 1. get dependent node pointers\n\n // filter nodes to update including itself and (attributes with empty values or with default values applied)\n // therefore attributes with user defined values are excluded\n const nodePointersFilterFn = (nodePointer: NodePointer): boolean => {\n const { nodeDef } = nodePointer\n if (!NodeDefs.isAttribute(nodeDef)) return false\n\n const referencedNodes = NodePointers.getNodesFromNodePointers({\n record: updateResult.record,\n nodePointers: [nodePointer],\n })\n return referencedNodes.some(\n (referencedNode) =>\n shouldResetDefaultValue({ survey, record: updateResult.record, node: referencedNode }) ||\n canApplyDefaultValue({ record: updateResult.record, node: referencedNode, nodeDef })\n )\n }\n\n const nodePointersToUpdate = Records.getDependentNodePointers({\n survey,\n record,\n node,\n dependencyType: SurveyDependencyType.defaultValues,\n includeSelf: true,\n filterFn: nodePointersFilterFn,\n })\n\n // 2. update expr to node and dependent nodes\n for (const nodePointer of nodePointersToUpdate) {\n // sequential: each iteration updates the record\n await updateDefaultValuesInNodes({ ...params, nodePointer, updateResult, sideEffect }) // NOSONAR\n }\n return updateResult\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsEditableUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkC;AAClC,2CAAwC;AACxC,gDAA0D;AAE1D,6FAAqF;AAG9E,MAAM,+BAA+B,GAAG,CAC7C,MAAwC,EACX,EAAE;IAC/B,OAAO,IAAA,mEAA8B,EAAC;QACpC,MAAM;QACN,cAAc,EAAE,6BAAoB,CAAC,QAAQ;QAC7C,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,kBAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QAChE,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,YAAK,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;QACnF,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CACtD,YAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;KACpE,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAXY,QAAA,+BAA+B,mCAW3C"}
1
+ {"version":3,"file":"recordNodeDependentsEditableUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkC;AAClC,2CAAwC;AACxC,gDAA0D;AAE1D,6FAAqF;AAG9E,MAAM,+BAA+B,GAAG,CAC7C,MAAwC,EACX,EAAE;IAC/B,OAAO,IAAA,mEAA8B,EAAC;QACpC,MAAM;QACN,cAAc,EAAE,6BAAoB,CAAC,QAAQ;QAC7C,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,kBAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QAChE,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,YAAK,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;QACnF,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CACtD,YAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;KACpE,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAXY,QAAA,+BAA+B,mCAW3C","sourcesContent":["import { Nodes } from '../../node'\nimport { NodeDefs } from '../../nodeDef'\nimport { SurveyDependencyType } from '../../survey/survey'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { updateSelfAndDependentsBoolean } from './recordNodeDependentsBooleanUpdater'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nexport const updateSelfAndDependentsEditable = async (\n params: RecordNodeDependentsUpdateParams\n): Promise<RecordUpdateResult> => {\n return updateSelfAndDependentsBoolean({\n params,\n dependencyType: SurveyDependencyType.editable,\n getExpressions: ({ nodeDef }) => NodeDefs.getEditableIf(nodeDef),\n getValuePrev: (nodeCtx, nodeDefUuid) => Nodes.isChildEditable(nodeCtx, nodeDefUuid),\n assocValue: (nodeCtx, nodeDefUuid, value, sideEffect) =>\n Nodes.assocChildEditable(nodeCtx, nodeDefUuid, value, sideEffect),\n })\n}\n"]}
@@ -71,6 +71,7 @@ const createOrDeleteEnumeratedEntities = (params) => __awaiter(void 0, void 0, v
71
71
  user: params.user,
72
72
  });
73
73
  if (!existingEntitiesToBeDeleted) {
74
+ // existing entities already match the enumerating items: nothing to do (do not create them again)
74
75
  return;
75
76
  }
76
77
  deleteExistingEntities();
@@ -85,6 +86,7 @@ exports.createOrDeleteEnumeratedEntities = createOrDeleteEnumeratedEntities;
85
86
  const updateDependentEnumeratedEntities = (params) => __awaiter(void 0, void 0, void 0, function* () {
86
87
  const { survey, record, node } = params;
87
88
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
89
+ // 1. get dependent enumerated entities
88
90
  const { nodeDefUuid } = node;
89
91
  const nodeDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: nodeDefUuid });
90
92
  if (nodeDef.type !== nodeDef_1.NodeDefType.code)
@@ -95,8 +97,10 @@ const updateDependentEnumeratedEntities = (params) => __awaiter(void 0, void 0,
95
97
  return updateResult;
96
98
  const ancestorMultipleEntityDef = survey_1.Surveys.getNodeDefAncestorMultipleEntity({ survey, nodeDef });
97
99
  const ancestorMultipleEntity = (0, recordGetters_1.getAncestor)({ record, node, ancestorDefUuid: ancestorMultipleEntityDef.uuid });
100
+ // 2. update enumerated entities
98
101
  for (const entityDef of dependentEnumeratedEntityDefs) {
99
- yield (0, exports.createOrDeleteEnumeratedEntities)(Object.assign(Object.assign({}, params), { entityDef, parentNode: ancestorMultipleEntity, updateResult }));
102
+ // sequential: each iteration updates the record
103
+ yield (0, exports.createOrDeleteEnumeratedEntities)(Object.assign(Object.assign({}, params), { entityDef, parentNode: ancestorMultipleEntity, updateResult })); // NOSONAR
100
104
  }
101
105
  return updateResult;
102
106
  });
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsEnumeratedEntitiesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsEnumeratedEntitiesUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node, Nodes, NodeValues } from '../../node'\nimport { NodeDefCode, NodeDefEntity, NodeDefType } from '../../nodeDef'\nimport { CategoryItemProvider } from '../../nodeDefExpressionEvaluator/categoryItemProvider'\nimport { Survey, Surveys } from '../../survey'\nimport { Objects } from '../../utils'\nimport { getAncestor, getChild, getChildren } from '../_records/recordGetters'\nimport { getEnumeratingCategoryItems } from '../_records/recordUtils'\nimport { getEnumeratingItemsAllowedCodes } from './recordEnumeratingItemsExpressionEvaluator'\nimport { RecordExpressionEvaluationContext } from './recordExpressionEvaluationContext'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { createEnumeratedEntityNodes } from './recordNodesCreator'\nimport { deleteNodes } from './recordNodesDeleter'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst uuidsCompare = (uuidA: string, uuidB: string): number => uuidA.localeCompare(uuidB)\n\nconst shouldExistingEntitiesBeDeleted = async (params: {\n survey: Survey\n entityDef: NodeDefEntity\n existingEntities: Node[]\n parentNode: Node\n updateResult: RecordUpdateResult\n categoryItemProvider?: CategoryItemProvider\n user: RecordExpressionEvaluationContext['user']\n}) => {\n const { survey, entityDef, existingEntities, parentNode, updateResult, categoryItemProvider, user } = params\n const enumeratorDef = Surveys.getNodeDefEnumerator({ survey, entityDef })!\n const existingEnumeratingItemUuids = existingEntities\n .map((existingEntity) => {\n const existingEnumerator = getChild(existingEntity, enumeratorDef.uuid)(updateResult.record)\n return NodeValues.getItemUuid(existingEnumerator)!\n })\n .sort(uuidsCompare)\n\n const allowedCodes = await getEnumeratingItemsAllowedCodes({\n survey,\n user,\n record: updateResult.record,\n entityDef,\n parentNode,\n })\n\n const enumeratingCategoryItems = await getEnumeratingCategoryItems({\n survey,\n enumeratorDef,\n parentNode,\n categoryItemProvider,\n allowedCodes,\n })(updateResult.record)\n const newEnumeratingItemUuids = enumeratingCategoryItems.map((item) => item.uuid).sort(uuidsCompare)\n\n return !Objects.isEqual(newEnumeratingItemUuids, existingEnumeratingItemUuids)\n}\n\nexport const createOrDeleteEnumeratedEntities = async (\n params: RecordExpressionEvaluationContext & {\n parentNode: Node\n entityDef: NodeDefEntity\n updateResult: RecordUpdateResult\n }\n) => {\n const { survey, parentNode, entityDef, categoryItemProvider, updateResult, sideEffect } = params\n const recordUpdateOptions = { sideEffect }\n const existingEntities = getChildren(parentNode, entityDef.uuid)(updateResult.record)\n const existingEntitiesCount = existingEntities.length\n const hasExistingEntities = existingEntitiesCount > 0\n const applicable = Nodes.isChildApplicable(parentNode, entityDef.uuid)\n\n const deleteExistingEntities = () => {\n const existingEntityUuids = existingEntities.map((node) => node.uuid)\n const nodesDeleteUpdatedResult = deleteNodes(existingEntityUuids, recordUpdateOptions)(updateResult.record)\n updateResult.merge(nodesDeleteUpdatedResult)\n }\n\n if (applicable) {\n if (hasExistingEntities) {\n const existingEntitiesToBeDeleted = await shouldExistingEntitiesBeDeleted({\n survey,\n entityDef,\n existingEntities,\n parentNode,\n updateResult,\n categoryItemProvider,\n user: params.user,\n })\n if (!existingEntitiesToBeDeleted) {\n // existing entities already match the enumerating items: nothing to do (do not create them again)\n return\n }\n deleteExistingEntities()\n }\n await createEnumeratedEntityNodes({ ...params, nodeDef: entityDef, parentNode })\n } else if (hasExistingEntities) {\n deleteExistingEntities()\n }\n}\n\nexport const updateDependentEnumeratedEntities = async (\n params: RecordNodeDependentsUpdateParams\n): Promise<RecordUpdateResult> => {\n const { survey, record, node } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n // 1. get dependent enumerated entities\n const { nodeDefUuid } = node\n const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeDefUuid })\n if (nodeDef.type !== NodeDefType.code) return updateResult\n const codeDef = nodeDef as NodeDefCode\n\n const dependentEnumeratedEntityDefs = Surveys.getDependentEnumeratedEntityDefs({ survey, nodeDef: codeDef })\n if (dependentEnumeratedEntityDefs.length === 0) return updateResult\n\n const ancestorMultipleEntityDef = Surveys.getNodeDefAncestorMultipleEntity({ survey, nodeDef })!\n const ancestorMultipleEntity = getAncestor({ record, node, ancestorDefUuid: ancestorMultipleEntityDef.uuid })!\n\n // 2. update enumerated entities\n for (const entityDef of dependentEnumeratedEntityDefs) {\n // sequential: each iteration updates the record\n await createOrDeleteEnumeratedEntities({ ...params, entityDef, parentNode: ancestorMultipleEntity, updateResult }) // NOSONAR\n }\n return updateResult\n}\n"]}
@@ -117,7 +117,8 @@ const syncEnumeratingItemsEntities = (params) => __awaiter(void 0, void 0, void
117
117
  updateResult,
118
118
  sideEffect,
119
119
  };
120
- yield (0, recordNodesCreator_1.createEnumeratedEntityNode)(createParams);
120
+ // create entities sequentially: every iteration updates the record
121
+ yield (0, recordNodesCreator_1.createEnumeratedEntityNode)(createParams); // NOSONAR
121
122
  }
122
123
  }
123
124
  });
@@ -135,7 +136,8 @@ const updateDependentEnumeratingItemsEntities = (params) => __awaiter(void 0, vo
135
136
  continue;
136
137
  if (!nodeDef_1.NodeDefs.getEnumeratingItemsExpression(entityDef))
137
138
  continue;
138
- yield (0, exports.syncEnumeratingItemsEntities)(Object.assign(Object.assign({}, params), { parentNode, entityDef, updateResult }));
139
+ // sequential: each iteration updates the record
140
+ yield (0, exports.syncEnumeratingItemsEntities)(Object.assign(Object.assign({}, params), { parentNode, entityDef, updateResult })); // NOSONAR
139
141
  }
140
142
  return updateResult;
141
143
  });
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsEnumeratingItemsUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsEnumeratingItemsUpdater.js","sourceRoot":"","sources":["../../../src/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node, NodePointer, Nodes, NodeValues } from '../../node'\nimport { NodeDefEntity, NodeDefs } from '../../nodeDef'\nimport { Survey, Surveys } from '../../survey'\nimport { SurveyDependencyType } from '../../survey/survey'\nimport { getChild, getChildren, getRoot } from '../_records/recordGetters'\nimport { Record } from '../record'\nimport { Records } from '../records'\nimport { getEnumeratingCategoryItems } from '../_records/recordUtils'\nimport { getEnumeratingItemsAllowedCodes } from './recordEnumeratingItemsExpressionEvaluator'\nimport { RecordNodeDependentsUpdateParams } from './recordNodeDependentsUpdateParams'\nimport { createEnumeratedEntityNode } from './recordNodesCreator'\nimport { deleteNodes } from './recordNodesDeleter'\nimport { RecordUpdateResult } from './recordUpdateResult'\n\nconst getEnumeratingItemsNodePointers = (params: { survey: Survey; record: Record; node: Node }): NodePointer[] => {\n const { survey, record, node } = params\n const nodePointers = Records.getDependentNodePointers({\n survey,\n record,\n node,\n dependencyType: SurveyDependencyType.enumeratingItems,\n })\n\n if (nodePointers.length > 0 || !node.deleted) {\n return nodePointers\n }\n\n const dependentDefs = Surveys.getNodeDefDependents({\n survey,\n nodeDefUuid: node.nodeDefUuid,\n dependencyType: SurveyDependencyType.enumeratingItems,\n })\n const root = getRoot(record)\n if (!root) {\n return nodePointers\n }\n\n for (const dependentDef of dependentDefs) {\n if (!NodeDefs.isEntity(dependentDef) || !NodeDefs.getEnumeratingItemsExpression(dependentDef as NodeDefEntity)) {\n continue\n }\n const parentDef = Surveys.getNodeDefParent({ survey, nodeDef: dependentDef })\n if (!parentDef) continue\n\n const contextNodes = Records.getDescendantsOrSelf({\n record,\n node: root,\n nodeDefDescendant: parentDef,\n })\n for (const contextNode of contextNodes) {\n nodePointers.push({ nodeCtx: contextNode, nodeDef: dependentDef })\n }\n }\n\n return nodePointers\n}\n\nexport const syncEnumeratingItemsEntities = async (\n params: RecordNodeDependentsUpdateParams & {\n parentNode: Node\n entityDef: NodeDefEntity\n updateResult: RecordUpdateResult\n }\n): Promise<void> => {\n const { survey, user, parentNode, entityDef, categoryItemProvider, updateResult, sideEffect } = params\n const recordUpdateOptions = { sideEffect }\n const existingEntities = getChildren(parentNode, entityDef.uuid)(updateResult.record)\n const applicable = Nodes.isChildApplicable(parentNode, entityDef.uuid)\n\n const deleteExistingEntities = () => {\n const existingEntityUuids = existingEntities.map((node) => node.uuid)\n const nodesDeleteUpdatedResult = deleteNodes(existingEntityUuids, recordUpdateOptions)(updateResult.record)\n updateResult.merge(nodesDeleteUpdatedResult)\n }\n\n if (!applicable) {\n if (existingEntities.length > 0) {\n deleteExistingEntities()\n }\n return\n }\n\n const enumeratorDef = Surveys.getNodeDefEnumerator({ survey, entityDef })\n if (!enumeratorDef) return\n\n const allowedCodes = await getEnumeratingItemsAllowedCodes({\n survey,\n user,\n record: updateResult.record,\n entityDef,\n parentNode,\n })\n\n const categoryItems = await getEnumeratingCategoryItems({\n survey,\n enumeratorDef,\n parentNode,\n categoryItemProvider,\n allowedCodes,\n })(updateResult.record)\n\n const targetItemUuids = new Set(categoryItems.map((item) => item.uuid))\n const existingItemUuids = new Set<string>()\n\n for (const existingEntity of existingEntities) {\n const existingEnumerator = getChild(existingEntity, enumeratorDef.uuid)(updateResult.record)\n const itemUuid = NodeValues.getItemUuid(existingEnumerator)\n if (!itemUuid || !targetItemUuids.has(itemUuid)) {\n const nodesDeleteUpdatedResult = deleteNodes([existingEntity.uuid], recordUpdateOptions)(updateResult.record)\n updateResult.merge(nodesDeleteUpdatedResult)\n } else {\n existingItemUuids.add(itemUuid)\n }\n }\n\n for (const categoryItem of categoryItems) {\n if (!existingItemUuids.has(categoryItem.uuid)) {\n const createParams = {\n user,\n survey,\n parentNode,\n nodeDef: entityDef,\n enumeratorDef,\n categoryItem,\n updateResult,\n sideEffect,\n }\n // create entities sequentially: every iteration updates the record\n await createEnumeratedEntityNode(createParams) // NOSONAR\n }\n }\n}\n\nexport const updateDependentEnumeratingItemsEntities = async (\n params: RecordNodeDependentsUpdateParams\n): Promise<RecordUpdateResult> => {\n const { survey, record, node } = params\n\n const updateResult = new RecordUpdateResult({ record })\n\n const nodePointers = getEnumeratingItemsNodePointers({ survey, record, node })\n\n for (const nodePointer of nodePointers) {\n const { nodeCtx: parentNode, nodeDef } = nodePointer\n if (!NodeDefs.isEntity(nodeDef)) continue\n\n const entityDef = nodeDef as NodeDefEntity\n if (!NodeDefs.isEnumerate(entityDef)) continue\n if (!NodeDefs.getEnumeratingItemsExpression(entityDef)) continue\n\n // sequential: each iteration updates the record\n await syncEnumeratingItemsEntities({ ...params, parentNode, entityDef, updateResult }) // NOSONAR\n }\n\n return updateResult\n}\n"]}
@@ -22,7 +22,7 @@ const records_1 = require("../records");
22
22
  const recordNodesDependentsUpdaterCommons_1 = require("./recordNodesDependentsUpdaterCommons");
23
23
  const recordUpdateResult_1 = require("./recordUpdateResult");
24
24
  const expressionEvaluator = new recordExpressionEvaluator_1.RecordExpressionEvaluator();
25
- const fileNameWithPositionSuffixRegExp = /^.+\s\[\d+\]$/;
25
+ const fileNameWithPositionSuffixRegExp = /^.+\s\[\d+\]$/; // file name like "name [1].test"
26
26
  const addPositionSuffix = (params) => {
27
27
  const { fileName, position } = params;
28
28
  return `${fileName} [${position}]`;
@@ -48,6 +48,7 @@ const calculateFileName = (params) => __awaiter(void 0, void 0, void 0, function
48
48
  const index = records_1.Records.getNodeIndex({ record, node });
49
49
  fileNameCalculated = addPositionSuffix({ fileName: fileNameCalculated, position: index + 1 });
50
50
  }
51
+ // add extension from original file name
51
52
  const originalFilaName = value ? value.fileName : undefined;
52
53
  if (utils_1.Objects.isNotEmpty(originalFilaName)) {
53
54
  const originalExtension = utils_1.FileNames.getExtension(originalFilaName);
@@ -67,13 +68,15 @@ const updateFileNamesInNodes = (params) => __awaiter(void 0, void 0, void 0, fun
67
68
  const nodes = nodePointers_1.NodePointers.getNodesFromNodePointers({ record, nodePointers: [nodePointer] });
68
69
  for (const node of nodes) {
69
70
  if (!node_1.Nodes.isValueBlank(node)) {
70
- yield updateFileNameInNode({ user, survey, updateResult, sideEffect, nodeDef: nodeDef, node });
71
+ // sequential: each iteration updates the record
72
+ yield updateFileNameInNode({ user, survey, updateResult, sideEffect, nodeDef: nodeDef, node }); // NOSONAR
71
73
  }
72
74
  }
73
75
  });
74
76
  const updateSelfAndDependentsFileNames = (params) => __awaiter(void 0, void 0, void 0, function* () {
75
77
  const { user, survey, record, node, sideEffect = false } = params;
76
78
  const updateResult = new recordUpdateResult_1.RecordUpdateResult({ record });
79
+ // 1. get dependent node pointers
77
80
  const nodePointersToUpdate = records_1.Records.getDependentNodePointers({
78
81
  survey,
79
82
  record,
@@ -81,8 +84,10 @@ const updateSelfAndDependentsFileNames = (params) => __awaiter(void 0, void 0, v
81
84
  dependencyType: survey_2.SurveyDependencyType.fileName,
82
85
  includeSelf: true,
83
86
  });
87
+ // 2. update expr to node and dependent nodes
84
88
  for (const nodePointer of nodePointersToUpdate) {
85
- yield updateFileNamesInNodes({ user, survey, nodePointer, updateResult, sideEffect });
89
+ // sequential: each iteration updates the record
90
+ yield updateFileNamesInNodes({ user, survey, nodePointer, updateResult, sideEffect }); // NOSONAR
86
91
  }
87
92
  return updateResult;
88
93
  });