@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
@@ -1 +1 @@
1
- {"version":3,"file":"recordExpressionEvaluationContext.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordExpressionEvaluationContext.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"recordExpressionEvaluationContext.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordExpressionEvaluationContext.ts"],"names":[],"mappings":"","sourcesContent":["import { User } from '../../auth'\nimport { LanguageCode } from '../../language'\nimport { CategoryItemProvider } from '../../nodeDefExpressionEvaluator/categoryItemProvider'\nimport { TaxonProvider } from '../../nodeDefExpressionEvaluator/taxonProvider'\nimport { Survey } from '../../survey'\nimport type { ArenaRecord } from '../record'\n\nexport interface RecordExpressionEvaluationContext {\n user: User\n survey: Survey\n record: ArenaRecord\n prevCycleRecord?: ArenaRecord\n timezoneOffset?: number\n lang?: LanguageCode\n categoryItemProvider?: CategoryItemProvider\n taxonProvider?: TaxonProvider\n sideEffect?: boolean\n}\n"]}
@@ -48,6 +48,7 @@ const _toCode = (params) => __awaiter(void 0, void 0, void 0, function* () {
48
48
  const { survey, record, nodeDef, nodeParent, valueExpr, categoryItemProvider } = params;
49
49
  if (!nodeParent)
50
50
  return null;
51
+ // ValueExpr is the code of a category item
51
52
  const code = String(valueExpr);
52
53
  const categoryItemUuid = yield _findCategoryItemUuidByCode({
53
54
  survey,
@@ -71,6 +72,9 @@ const _toDateTime = (params) => {
71
72
  const date = Dates.parse(valueExpr, formatFrom);
72
73
  if (!date)
73
74
  return null;
75
+ // `date` encodes the parsed digits as if they were UTC (see Dates.parse/parseZone), so shift by the
76
+ // client's offset (if any) and read the result back out in UTC - never in this machine's local time zone,
77
+ // which would otherwise silently reintroduce the server's own timezone into the result.
74
78
  const dateWithTimezoneOffset = timezoneOffset ? new Date(date.getTime() - timezoneOffset * 60000) : date;
75
79
  return Dates.formatUTC(dateWithTimezoneOffset, format);
76
80
  };
@@ -86,6 +90,7 @@ const findTaxonByCode = (params) => __awaiter(void 0, void 0, void 0, function*
86
90
  });
87
91
  const _toTaxon = (params) => __awaiter(void 0, void 0, void 0, function* () {
88
92
  const { survey, record, nodeDef, valueExpr, taxonProvider } = params;
93
+ // ValueExpr is the code of a taxon
89
94
  const taxonCode = String(valueExpr);
90
95
  const taxonNodeDef = nodeDef;
91
96
  const draft = !!record.preview;
@@ -1 +1 @@
1
- {"version":3,"file":"recordExpressionValueConverter.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordExpressionValueConverter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordExpressionValueConverter.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordExpressionValueConverter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point, Points } from '../../geo'\nimport { Node, NodeValueCode, NodeValueTaxon } from '../../node'\nimport { Survey, Surveys } from '../../survey'\nimport { Record } from '../record'\nimport { Records } from '../records'\nimport { NodeDef, NodeDefType, NodeDefs, NodeDefCodeProps, NodeDefTaxon, NodeDefCode } from '../../nodeDef'\nimport { Dates, DateFormats, Objects } from '../../utils'\nimport { CategoryItemProvider } from '../../nodeDefExpressionEvaluator/categoryItemProvider'\nimport { TaxonProvider } from '../../nodeDefExpressionEvaluator/taxonProvider'\n\ninterface ToNodeValueParams {\n survey: Survey\n record: Record\n nodeParent: Node\n nodeDef: NodeDef<any>\n valueExpr: string\n timezoneOffset?: number\n categoryItemProvider?: CategoryItemProvider\n taxonProvider?: TaxonProvider\n}\n\nconst _toPrimitive = (TypeTo: any) => (params: ToNodeValueParams) => {\n const { valueExpr: val } = params\n return TypeTo(val)\n}\n\nconst _toBoolean = (params: ToNodeValueParams) => {\n const { valueExpr } = params\n if (['true', 'false'].includes(String(valueExpr))) return String(valueExpr)\n return null\n}\n\nconst _findCategoryItemUuidByCode = async (params: {\n survey: Survey\n record: Record\n nodeDef: NodeDefCode\n nodeParent: Node\n code: string\n categoryItemProvider?: CategoryItemProvider\n}): Promise<string | undefined> => {\n const { survey, record, nodeDef, nodeParent, code, categoryItemProvider } = params\n const codeNodeDef = nodeDef as NodeDef<NodeDefType.code, NodeDefCodeProps>\n\n const categoryItemUuid = Records.getCategoryItemUuid({\n survey,\n record,\n nodeDef: codeNodeDef,\n parentNode: nodeParent,\n code,\n })\n if (categoryItemUuid) return categoryItemUuid\n if (!categoryItemProvider) return undefined\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return undefined\n const codePaths = [...Records.getAncestorCodePath({ survey, record, parentNode: nodeParent, nodeDef }), code]\n const draft = !!record.preview\n const item = await categoryItemProvider.getItemByCodePaths({ survey, categoryUuid, codePaths, draft })\n return item?.uuid\n}\n\nconst _toCode = async (params: ToNodeValueParams): Promise<NodeValueCode | null> => {\n const { survey, record, nodeDef, nodeParent, valueExpr, categoryItemProvider } = params\n\n if (!nodeParent) return null\n\n // ValueExpr is the code of a category item\n const code = String(valueExpr)\n\n const categoryItemUuid = await _findCategoryItemUuidByCode({\n survey,\n record,\n nodeDef: nodeDef as NodeDefCode,\n nodeParent,\n code,\n categoryItemProvider,\n })\n\n return categoryItemUuid ? { itemUuid: categoryItemUuid } : null\n}\n\nconst _toCoordinate = (params: ToNodeValueParams): Point | null => {\n const { valueExpr } = params\n return Points.parse(valueExpr)\n}\n\nconst _toDateTime = (params: {\n valueExpr: any\n format: DateFormats\n formatsFrom: DateFormats[]\n timezoneOffset?: number\n}): string | null => {\n const { valueExpr, format, formatsFrom = [DateFormats.datetimeDefault], timezoneOffset } = params\n const formatFrom = formatsFrom.find((formt) => Dates.isValidDateInFormat(valueExpr, formt))\n if (!formatFrom) return null\n\n const date = Dates.parse(valueExpr, formatFrom)\n if (!date) return null\n\n // `date` encodes the parsed digits as if they were UTC (see Dates.parse/parseZone), so shift by the\n // client's offset (if any) and read the result back out in UTC - never in this machine's local time zone,\n // which would otherwise silently reintroduce the server's own timezone into the result.\n const dateWithTimezoneOffset = timezoneOffset ? new Date(date.getTime() - timezoneOffset * 60000) : date\n return Dates.formatUTC(dateWithTimezoneOffset, format)\n}\n\nconst findTaxonByCode = async (params: {\n survey: Survey\n nodeDef: NodeDefTaxon\n taxonCode: string\n draft: boolean\n taxonProvider?: TaxonProvider\n}) => {\n const { survey, nodeDef, taxonCode, taxonProvider, draft } = params\n const taxonomyUuid = NodeDefs.getTaxonomyUuid(nodeDef)!\n const taxon = Surveys.getTaxonByCode({ survey, taxonomyUuid, taxonCode })\n if (taxon) return taxon\n if (!taxonProvider) return null\n return taxonProvider.getTaxonByCode({ survey, taxonomyUuid, taxonCode, draft })\n}\n\nconst _toTaxon = async (params: ToNodeValueParams): Promise<NodeValueTaxon | null> => {\n const { survey, record, nodeDef, valueExpr, taxonProvider } = params\n\n // ValueExpr is the code of a taxon\n const taxonCode = String(valueExpr)\n\n const taxonNodeDef = nodeDef as NodeDefTaxon\n const draft = !!record.preview\n const taxon = await findTaxonByCode({ survey, nodeDef: taxonNodeDef, taxonCode, taxonProvider, draft })\n return taxon ? { taxonUuid: taxon.uuid } : null\n}\n\nconst _valueExprToValueNodeFns: { [key in NodeDefType]?: (params: ToNodeValueParams) => any } = {\n [NodeDefType.boolean]: _toBoolean,\n [NodeDefType.code]: _toCode,\n [NodeDefType.coordinate]: _toCoordinate,\n [NodeDefType.date]: (params: { valueExpr: any; timezoneOffset?: number }) => {\n const { valueExpr, timezoneOffset } = params\n return _toDateTime({\n valueExpr,\n format: DateFormats.dateStorage,\n formatsFrom: [DateFormats.datetimeStorage, DateFormats.datetimeDefault, DateFormats.dateStorage],\n timezoneOffset,\n })\n },\n [NodeDefType.decimal]: _toPrimitive(Number),\n [NodeDefType.geo]: (params: { valueExpr: any }) => {\n const { valueExpr } = params\n return typeof valueExpr === 'string' ? JSON.parse(valueExpr) : valueExpr\n },\n [NodeDefType.integer]: _toPrimitive(Number),\n [NodeDefType.taxon]: _toTaxon,\n [NodeDefType.text]: _toPrimitive(String),\n [NodeDefType.time]: (params: { nodeDef: NodeDef<any>; valueExpr: any; timezoneOffset?: number }) => {\n const { nodeDef, valueExpr, timezoneOffset } = params\n return _toDateTime({\n valueExpr,\n format: NodeDefs.isSecondsIncluded(nodeDef) ? DateFormats.timeWithSeconds : DateFormats.timeStorage,\n formatsFrom: [\n DateFormats.datetimeStorage,\n DateFormats.datetimeDefault,\n DateFormats.timeWithSeconds,\n DateFormats.timeStorage,\n ],\n timezoneOffset,\n })\n },\n}\n\nconst toNodeValue = (params: ToNodeValueParams): Promise<any> => {\n const { nodeDef, valueExpr } = params\n if (Objects.isEmpty(valueExpr)) return Promise.resolve(null)\n\n const fn = _valueExprToValueNodeFns[NodeDefs.getType(nodeDef)]\n return Promise.resolve(fn?.(params))\n}\n\nexport const RecordExpressionValueConverter = {\n toNodeValue,\n}\n"]}
@@ -39,27 +39,35 @@ const calculateApplicableNext = (_a) => __awaiter(void 0, [_a], void 0, function
39
39
  const expressionsToEvaluate = NodeDefs.getApplicable(nodeDefNodePointer);
40
40
  if (expressionsToEvaluate.length === 0) {
41
41
  if (applicablePrev) {
42
+ // skip nodes that were already applicable and have no applicable expression, as they will remain applicable
42
43
  return undefined;
43
44
  }
44
45
  else {
46
+ // used during survey publishing: node def could have had applicable expression(s) that were removed,
47
+ // and node could have been not applicable, but now it should be applicable, as there are no more applicable expressions
45
48
  return true;
46
49
  }
47
50
  }
48
51
  else {
52
+ // 3. evaluate applicable expression
49
53
  const exprEval = yield expressionEvaluator.evalApplicableExpression(Object.assign(Object.assign({}, params), { record: updateResult.record, nodeCtx, expressions: expressionsToEvaluate }));
50
54
  return (exprEval === null || exprEval === void 0 ? void 0 : exprEval.value) || false;
51
55
  }
52
56
  });
53
57
  const updateDescendantsApplicability = ({ updateResult, nodeCtxChild, applicable, params, recordUpdateOptions, }) => {
54
58
  const { survey, sideEffect = false, clearNonApplicableValues = false } = params;
59
+ // only values entered by the user are reported as cleared (they need a confirmation)
55
60
  let userValuesCleared = false;
56
61
  Records.visitDescendantsAndSelf({
57
62
  record: updateResult.record,
58
63
  node: nodeCtxChild,
59
64
  visitor: (nodeDescendant) => {
60
65
  const nodeDescendantCleared = clearNonApplicableValues && !applicable && Nodes.isValueNotBlank(nodeDescendant);
66
+ // values set by expressions (default values, read only attributes) are applied again when applicable: not reported
67
+ // (evaluated before clearing the value: with sideEffect the node is modified in place)
61
68
  const nodeDescendantDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeDescendant.nodeDefUuid });
62
69
  const userValueCleared = nodeDescendantCleared && !NodeDefs.isReadOnly(nodeDescendantDef) && Nodes.hasUserInputValue(nodeDescendant);
70
+ // Clear value if becoming non-applicable and parameter is enabled
63
71
  const nodeDescendantUpdated = nodeDescendantCleared
64
72
  ? Nodes.assocValue(nodeDescendant, null, sideEffect)
65
73
  : nodeDescendant;
@@ -71,6 +79,7 @@ const updateDescendantsApplicability = ({ updateResult, nodeCtxChild, applicable
71
79
  return false;
72
80
  },
73
81
  });
82
+ // if a multiple entity became not applicable and it's empty, delete it instead of just marking descendants as not applicable
74
83
  if (!applicable && clearNonApplicableValues) {
75
84
  const { uuid: nodeCtxChildUuid, nodeDefUuid: nodeCtxChildDefUuid } = nodeCtxChild;
76
85
  const nodeCtxChildDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeCtxChildDefUuid });
@@ -93,7 +102,8 @@ const createMissingApplicableMultipleEntities = (_a) => __awaiter(void 0, [_a],
93
102
  const missingCount = Math.max(0, minCount - existingChildren.length);
94
103
  for (let index = 0; index < missingCount; index++) {
95
104
  const createParams = Object.assign(Object.assign({}, params), { record: updateResult.record, parentNode, nodeDef });
96
- const childUpdateResult = yield createNodeAndDescendants(createParams);
105
+ // create nodes sequentially: every iteration works on the record updated by the previous one
106
+ const childUpdateResult = yield createNodeAndDescendants(createParams); // NOSONAR
97
107
  updateResult.merge(childUpdateResult);
98
108
  }
99
109
  });
@@ -102,6 +112,7 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
102
112
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
103
113
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
104
114
  const nodeDefUuid = nodeDefNodePointer.uuid;
115
+ // nodeCtx could have been updated in a previous iteration
105
116
  const nodeCtx = (_b = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _b !== void 0 ? _b : nodeCtxNodePointer;
106
117
  const applicablePrev = Nodes.isChildApplicable(nodeCtx, nodeDefUuid);
107
118
  const applicable = yield calculateApplicableNext({
@@ -121,9 +132,12 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
121
132
  nodeDef: nodeDefNodePointer,
122
133
  });
123
134
  }
135
+ // 4. persist updated applicability if changed, and return updated nodes
124
136
  if (applicablePrev === applicable) {
125
137
  return;
126
138
  }
139
+ // Applicability changed
140
+ // update node and add it to nodes updated
127
141
  const nodeCtxUpdated = Nodes.assocChildApplicability(nodeCtx, nodeDefUuid, applicable);
128
142
  updateResult.addNode(nodeCtxUpdated, recordUpdateOptions);
129
143
  let nodeCtxChildren = Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record);
@@ -140,6 +154,7 @@ const updateNodePointerApplicability = (_a) => __awaiter(void 0, [_a], void 0, f
140
154
  nodeCtxChildren = Records.getChildren(nodeCtx, nodeDefUuid)(updateResult.record);
141
155
  }
142
156
  for (const nodeCtxChild of nodeCtxChildren) {
157
+ // add nodeCtxChild and its descendants to nodesUpdated
143
158
  updateDescendantsApplicability({
144
159
  updateResult,
145
160
  nodeCtxChild,
@@ -153,9 +168,12 @@ export const updateSelfAndDependentsApplicable = (params) => __awaiter(void 0, v
153
168
  const { survey, record, node, sideEffect = false } = params;
154
169
  const updateResult = new RecordUpdateResult({ record });
155
170
  const recordUpdateOptions = { sideEffect };
171
+ // 1. fetch dependent nodes
156
172
  const nodePointersToUpdate = extractNodePointersToUpdate({ survey, record, node });
173
+ // 2. update expr to node and dependent nodes
174
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
157
175
  for (const nodePointer of nodePointersToUpdate) {
158
- yield updateNodePointerApplicability({ params, updateResult, nodePointer, recordUpdateOptions });
176
+ yield updateNodePointerApplicability({ params, updateResult, nodePointer, recordUpdateOptions }); // NOSONAR
159
177
  }
160
178
  return updateResult;
161
179
  });
@@ -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"]}
@@ -38,6 +38,7 @@ export const updateSelfAndDependentsBoolean = (_a) => __awaiter(void 0, [_a], vo
38
38
  includeNewEntitySelf,
39
39
  includeNewEntityChildPointers: true,
40
40
  });
41
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
41
42
  for (const nodePointer of nodePointersToUpdate) {
42
43
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
43
44
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
@@ -45,7 +46,7 @@ export const updateSelfAndDependentsBoolean = (_a) => __awaiter(void 0, [_a], vo
45
46
  const nodeCtx = (_b = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _b !== void 0 ? _b : nodeCtxNodePointer;
46
47
  const valuePrev = getValuePrev(nodeCtx, nodeDefUuid);
47
48
  const calculateParams = { params, updateResult, nodePointer, nodeCtx, getExpressions, getValuePrev };
48
- const value = yield calculateBooleanValueNext(calculateParams);
49
+ const value = yield calculateBooleanValueNext(calculateParams); // NOSONAR
49
50
  if (value === undefined || valuePrev === value) {
50
51
  continue;
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsBooleanUpdater.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordNodeDependentsBooleanUpdater.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.ts"],"names":[],"mappings":"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","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"]}
@@ -13,6 +13,15 @@ import { Surveys } from '../../survey';
13
13
  import { Dates } from '../../utils';
14
14
  import { Records } from '../records';
15
15
  import { RecordUpdateResult } from './recordUpdateResult';
16
+ // A dependent code attribute's stored item is still valid as long as its category item's parent is the
17
+ // (possibly unchanged) item currently selected on the parent code attribute node - so this single check
18
+ // covers both "did the parent's value change" and "is the dependent's value still valid": if the parent's
19
+ // item didn't change, the dependent's item still has the same parent and is left alone.
20
+ //
21
+ // The dependent's item may belong to a "big" category whose items aren't loaded into the survey's
22
+ // in-memory ref data index (e.g. an externally-referenced category) - Surveys.getCategoryItemByUuid only
23
+ // ever looks there, so it falls back to the async categoryItemProvider (same pattern as attribute value
24
+ // validation) before concluding the item doesn't exist.
16
25
  const isDependentCodeAttributeValueStillValid = (params) => __awaiter(void 0, void 0, void 0, function* () {
17
26
  const { survey, parentItemUuid, dependentCodeAttribute, dependentCodeAttributeDef, record, categoryItemProvider } = params;
18
27
  if (!parentItemUuid)
@@ -39,10 +48,12 @@ export const updateDependentCodeAttributes = (params) => __awaiter(void 0, void
39
48
  const { survey, record, node, categoryItemProvider, sideEffect = false } = params;
40
49
  const updateResult = new RecordUpdateResult({ record });
41
50
  const recordUpdateOptions = { sideEffect };
51
+ // 1. get dependent code attributes
42
52
  const dependentCodeAttributes = Records.getDependentCodeAttributes(node)(record);
43
53
  if (dependentCodeAttributes.length === 0)
44
54
  return updateResult;
45
55
  const parentItemUuid = NodeValues.getItemUuid(node);
56
+ // 2. clear dependent code attributes' values that are no longer valid children of the parent's current item
46
57
  for (const dependentCodeAttribute of dependentCodeAttributes) {
47
58
  const dependentCodeAttributeDef = Surveys.getNodeDefByUuid({
48
59
  survey,
@@ -58,7 +69,8 @@ export const updateDependentCodeAttributes = (params) => __awaiter(void 0, void
58
69
  record,
59
70
  categoryItemProvider,
60
71
  };
61
- const stillValid = yield isDependentCodeAttributeValueStillValid(validityCheckParams);
72
+ // check attributes sequentially: invalid values are cleared in the record at every iteration
73
+ const stillValid = yield isDependentCodeAttributeValueStillValid(validityCheckParams); // NOSONAR
62
74
  if (stillValid)
63
75
  continue;
64
76
  const nodeUpdated = Object.assign(Object.assign({}, dependentCodeAttribute), { value: null, updated: true, dateModified: 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"]}
@@ -20,6 +20,7 @@ export const updateDependentsCount = (params) => __awaiter(void 0, void 0, void
20
20
  const { survey, record, node, countType, sideEffect = false } = params;
21
21
  const updateResult = new RecordUpdateResult({ record });
22
22
  const recordUpdateOptions = { sideEffect };
23
+ // 1. fetch dependent nodes
23
24
  const dependencyType = countType === NodeDefCountType.max ? SurveyDependencyType.maxCount : SurveyDependencyType.minCount;
24
25
  const nodePointersToUpdate = Records.getDependentNodePointers({
25
26
  survey,
@@ -27,18 +28,25 @@ export const updateDependentsCount = (params) => __awaiter(void 0, void 0, void
27
28
  node,
28
29
  dependencyType,
29
30
  });
31
+ // 2. update expr to node and dependent nodes
32
+ // NOTE: don't do it in parallel, same nodeCtx metadata could be overwritten
30
33
  for (const nodePointer of nodePointersToUpdate) {
31
34
  const { nodeCtx: nodeCtxNodePointer, nodeDef: nodeDefNodePointer } = nodePointer;
32
35
  const expressionsToEvaluate = NodeDefs.getCount(nodeDefNodePointer, countType);
33
36
  if (Objects.isEmpty(expressionsToEvaluate) || !Array.isArray(expressionsToEvaluate))
34
37
  continue;
38
+ // 3. evaluate applicable expression
35
39
  const nodeCtxUuid = nodeCtxNodePointer.uuid;
40
+ // nodeCtx could have been updated in a previous iteration
36
41
  const nodeCtx = (_a = updateResult.getNodeByUuid(nodeCtxUuid)) !== null && _a !== void 0 ? _a : nodeCtxNodePointer;
37
42
  const evaluateParams = Object.assign(Object.assign({}, params), { record: updateResult.record, nodeCtx, expressions: expressionsToEvaluate });
38
- const countResult = yield expressionEvaluator.evalApplicableExpression(evaluateParams);
43
+ const countResult = yield expressionEvaluator.evalApplicableExpression(evaluateParams); // NOSONAR
39
44
  const count = Number(countResult === null || countResult === void 0 ? void 0 : countResult.value);
45
+ // 4. persist updated count if changed, and return updated nodes
40
46
  const nodeDefUuid = nodeDefNodePointer.uuid;
41
47
  if (Nodes.getChildrenMinOrMaxCount({ parentNode: nodeCtx, nodeDef: nodeDefNodePointer, countType }) !== count) {
48
+ // count changed
49
+ // 5. update node and add it to nodes updated
42
50
  const nodeCtxUpdated = Nodes.assocChildrenCount({ node: nodeCtx, nodeDefUuid, count, countType });
43
51
  updateResult.addNode(nodeCtxUpdated, recordUpdateOptions);
44
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recordNodeDependentsCountUpdater.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordNodeDependentsCountUpdater.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,mBAAmB,GAAG,IAAI,yBAAyB,EAAE,CAAA;AAE3D,MAAM,CAAC,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,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,mBAAmB,GAAG,EAAE,UAAU,EAAE,CAAA;IAG1C,MAAM,cAAc,GAClB,SAAS,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAA;IAEpG,MAAM,oBAAoB,GAAG,OAAO,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,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QAC9E,IAAI,OAAO,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,KAAK,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAI9G,MAAM,cAAc,GAAG,KAAK,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"}
1
+ {"version":3,"file":"recordNodeDependentsCountUpdater.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordNodeDependentsCountUpdater.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,mBAAmB,GAAG,IAAI,yBAAyB,EAAE,CAAA;AAE3D,MAAM,CAAC,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,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,mBAAmB,GAAG,EAAE,UAAU,EAAE,CAAA;IAE1C,2BAA2B;IAC3B,MAAM,cAAc,GAClB,SAAS,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAA;IAEpG,MAAM,oBAAoB,GAAG,OAAO,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,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QAC9E,IAAI,OAAO,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,KAAK,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,KAAK,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","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"]}
@@ -19,6 +19,9 @@ import { RecordExpressionValueConverter } from './recordExpressionValueConverter
19
19
  import { throwError } from './recordNodesDependentsUpdaterCommons';
20
20
  import { RecordUpdateResult } from './recordUpdateResult';
21
21
  const expressionEvaluator = new RecordExpressionEvaluator();
22
+ /**
23
+ * 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)
24
+ */
22
25
  const shouldResetDefaultValue = (params) => {
23
26
  const { survey, record, node } = params;
24
27
  const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: node.nodeDefUuid });
@@ -48,9 +51,11 @@ const updateDefaultValueInNode = (params) => {
48
51
  if (!canApplyDefaultValue({ record: updateResult.record, nodeDef, node: nodeToUpdate })) {
49
52
  return;
50
53
  }
54
+ // 2. if node value is not changed, do nothing
51
55
  if (Objects.isEqual(nodeToUpdate.value, exprValue)) {
52
56
  return;
53
57
  }
58
+ // 3. update node value and meta
54
59
  const defaultValueApplied = !Objects.isEmpty(exprValue);
55
60
  const nodeUpdated = Nodes.mergeNodes(nodeToUpdate, {
56
61
  value: exprValue,
@@ -72,16 +77,22 @@ const updateDefaultValuesInNodes = (params) => __awaiter(void 0, void 0, void 0,
72
77
  const expressionsToEvaluate = NodeDefs.getDefaultValues(nodeDef);
73
78
  if (expressionsToEvaluate.length === 0) {
74
79
  if (Surveys.isNodeDefEnumerator({ survey, nodeDef })) {
80
+ // if node def is enumerator, its default value is generated using the category items, not with default value expressions
81
+ // so the default value should not be reset or updated using default value expressions
75
82
  return;
76
83
  }
84
+ // no default expressions to evaluate; check if there are dependent nodes with default value applied, as their default value should be removed
77
85
  nodesToUpdate = dependentNodes.filter(Nodes.isDefaultValueApplied);
78
86
  if (nodesToUpdate.length === 0) {
87
+ // no default expressions to evaluate and no nodes with default value applied, therefore no update needed
79
88
  return;
80
89
  }
81
90
  }
82
91
  else {
92
+ // if there are default value expressions, all dependent nodes should be evaluated, as their default value could change
83
93
  nodesToUpdate = dependentNodes;
84
94
  try {
95
+ // 1. evaluate applicable default value expression
85
96
  const exprEval = yield expressionEvaluator.evalApplicableExpression(Object.assign(Object.assign({}, params), { record,
86
97
  nodeCtx, expressions: expressionsToEvaluate }));
87
98
  const exprEvalValue = exprEval === null || exprEval === void 0 ? void 0 : exprEval.value;
@@ -115,6 +126,9 @@ const updateDefaultValuesInNodes = (params) => __awaiter(void 0, void 0, void 0,
115
126
  export const updateSelfAndDependentsDefaultValues = (params) => __awaiter(void 0, void 0, void 0, function* () {
116
127
  const { survey, record, node, sideEffect = false } = params;
117
128
  const updateResult = new RecordUpdateResult({ record });
129
+ // 1. get dependent node pointers
130
+ // filter nodes to update including itself and (attributes with empty values or with default values applied)
131
+ // therefore attributes with user defined values are excluded
118
132
  const nodePointersFilterFn = (nodePointer) => {
119
133
  const { nodeDef } = nodePointer;
120
134
  if (!NodeDefs.isAttribute(nodeDef))
@@ -134,8 +148,10 @@ export const updateSelfAndDependentsDefaultValues = (params) => __awaiter(void 0
134
148
  includeSelf: true,
135
149
  filterFn: nodePointersFilterFn,
136
150
  });
151
+ // 2. update expr to node and dependent nodes
137
152
  for (const nodePointer of nodePointersToUpdate) {
138
- yield updateDefaultValuesInNodes(Object.assign(Object.assign({}, params), { nodePointer, updateResult, sideEffect }));
153
+ // sequential: each iteration updates the record
154
+ yield updateDefaultValuesInNodes(Object.assign(Object.assign({}, params), { nodePointer, updateResult, sideEffect })); // NOSONAR
139
155
  }
140
156
  return updateResult;
141
157
  });
@@ -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,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAA;AAGrF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,MAAwC,EACX,EAAE;IAC/B,OAAO,8BAA8B,CAAC;QACpC,MAAM;QACN,cAAc,EAAE,oBAAoB,CAAC,QAAQ;QAC7C,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QAChE,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;QACnF,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CACtD,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;KACpE,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA"}
1
+ {"version":3,"file":"recordNodeDependentsEditableUpdater.js","sourceRoot":"","sources":["../../../../src/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAA;AAGrF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,MAAwC,EACX,EAAE;IAC/B,OAAO,8BAA8B,CAAC;QACpC,MAAM;QACN,cAAc,EAAE,oBAAoB,CAAC,QAAQ;QAC7C,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QAChE,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;QACnF,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CACtD,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;KACpE,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA","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"]}
@@ -68,6 +68,7 @@ export const createOrDeleteEnumeratedEntities = (params) => __awaiter(void 0, vo
68
68
  user: params.user,
69
69
  });
70
70
  if (!existingEntitiesToBeDeleted) {
71
+ // existing entities already match the enumerating items: nothing to do (do not create them again)
71
72
  return;
72
73
  }
73
74
  deleteExistingEntities();
@@ -81,6 +82,7 @@ export const createOrDeleteEnumeratedEntities = (params) => __awaiter(void 0, vo
81
82
  export const updateDependentEnumeratedEntities = (params) => __awaiter(void 0, void 0, void 0, function* () {
82
83
  const { survey, record, node } = params;
83
84
  const updateResult = new RecordUpdateResult({ record });
85
+ // 1. get dependent enumerated entities
84
86
  const { nodeDefUuid } = node;
85
87
  const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: nodeDefUuid });
86
88
  if (nodeDef.type !== NodeDefType.code)
@@ -91,8 +93,10 @@ export const updateDependentEnumeratedEntities = (params) => __awaiter(void 0, v
91
93
  return updateResult;
92
94
  const ancestorMultipleEntityDef = Surveys.getNodeDefAncestorMultipleEntity({ survey, nodeDef });
93
95
  const ancestorMultipleEntity = getAncestor({ record, node, ancestorDefUuid: ancestorMultipleEntityDef.uuid });
96
+ // 2. update enumerated entities
94
97
  for (const entityDef of dependentEnumeratedEntityDefs) {
95
- yield createOrDeleteEnumeratedEntities(Object.assign(Object.assign({}, params), { entityDef, parentNode: ancestorMultipleEntity, updateResult }));
98
+ // sequential: each iteration updates the record
99
+ yield createOrDeleteEnumeratedEntities(Object.assign(Object.assign({}, params), { entityDef, parentNode: ancestorMultipleEntity, updateResult })); // NOSONAR
96
100
  }
97
101
  return updateResult;
98
102
  });
@@ -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"]}
@@ -114,7 +114,8 @@ export const syncEnumeratingItemsEntities = (params) => __awaiter(void 0, void 0
114
114
  updateResult,
115
115
  sideEffect,
116
116
  };
117
- yield createEnumeratedEntityNode(createParams);
117
+ // create entities sequentially: every iteration updates the record
118
+ yield createEnumeratedEntityNode(createParams); // NOSONAR
118
119
  }
119
120
  }
120
121
  });
@@ -131,7 +132,8 @@ export const updateDependentEnumeratingItemsEntities = (params) => __awaiter(voi
131
132
  continue;
132
133
  if (!NodeDefs.getEnumeratingItemsExpression(entityDef))
133
134
  continue;
134
- yield syncEnumeratingItemsEntities(Object.assign(Object.assign({}, params), { parentNode, entityDef, updateResult }));
135
+ // sequential: each iteration updates the record
136
+ yield syncEnumeratingItemsEntities(Object.assign(Object.assign({}, params), { parentNode, entityDef, updateResult })); // NOSONAR
135
137
  }
136
138
  return updateResult;
137
139
  });