@openforis/arena-core 2.3.33 → 2.3.35

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 (843) 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 +4 -1
  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/nodeDefSelfReferences.js +57 -0
  242. package/dist/esm/record/_records/nodeDefSelfReferences.js.map +1 -0
  243. package/dist/esm/record/_records/recordCompletion.js +14 -0
  244. package/dist/esm/record/_records/recordCompletion.js.map +1 -1
  245. package/dist/esm/record/_records/recordGetters.js +26 -5
  246. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  247. package/dist/esm/record/_records/recordNodesIndexReader.js.map +1 -1
  248. package/dist/esm/record/_records/recordNodesIndexUpdater.js +17 -0
  249. package/dist/esm/record/_records/recordNodesIndexUpdater.js.map +1 -1
  250. package/dist/esm/record/_records/recordPagesValidation.js +45 -0
  251. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  252. package/dist/esm/record/_records/recordUpdateOptions.js.map +1 -1
  253. package/dist/esm/record/_records/recordUpdater.js +2 -0
  254. package/dist/esm/record/_records/recordUpdater.js.map +1 -1
  255. package/dist/esm/record/_records/recordUtils.js.map +1 -1
  256. package/dist/esm/record/factory.js.map +1 -1
  257. package/dist/esm/record/index.js.map +1 -1
  258. package/dist/esm/record/nodePointers.js.map +1 -1
  259. package/dist/esm/record/record.js.map +1 -1
  260. package/dist/esm/record/recordCloner.js +10 -1
  261. package/dist/esm/record/recordCloner.js.map +1 -1
  262. package/dist/esm/record/recordExpressionEvaluator/context.js.map +1 -1
  263. package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
  264. package/dist/esm/record/recordExpressionEvaluator/index.js.map +1 -1
  265. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +14 -0
  266. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  267. package/dist/esm/record/recordExpressionEvaluator/node/identifier/index.js.map +1 -1
  268. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +6 -0
  269. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  270. package/dist/esm/record/recordExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  271. package/dist/esm/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  272. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  273. package/dist/esm/record/recordFixer.js +16 -0
  274. package/dist/esm/record/recordFixer.js.map +1 -1
  275. package/dist/esm/record/recordNodesUpdater/index.js.map +1 -1
  276. package/dist/esm/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js +6 -0
  277. package/dist/esm/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  278. package/dist/esm/record/recordNodesUpdater/recordExpressionEvaluationContext.js.map +1 -1
  279. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js +5 -0
  280. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  281. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +20 -2
  282. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  283. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +2 -1
  284. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  285. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +13 -1
  286. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  287. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +9 -1
  288. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  289. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +17 -1
  290. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  291. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  292. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +5 -1
  293. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  294. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -2
  295. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  296. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +8 -3
  297. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  298. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  299. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  300. package/dist/esm/record/recordNodesUpdater/recordNodesCreator.js +10 -5
  301. package/dist/esm/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  302. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +7 -0
  303. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  304. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -0
  305. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  306. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js +16 -2
  307. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  308. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js +8 -0
  309. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  310. package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
  311. package/dist/esm/record/recordStep.js.map +1 -1
  312. package/dist/esm/record/recordUpdater.js +1 -0
  313. package/dist/esm/record/recordUpdater.js.map +1 -1
  314. package/dist/esm/record/recordValidations.js.map +1 -1
  315. package/dist/esm/record/recordValidator/attributeKeyValidator.js +3 -0
  316. package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
  317. package/dist/esm/record/recordValidator/attributeTypeValidator.js +3 -0
  318. package/dist/esm/record/recordValidator/attributeTypeValidator.js.map +1 -1
  319. package/dist/esm/record/recordValidator/attributeUniqueValidator.js +2 -0
  320. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  321. package/dist/esm/record/recordValidator/attributeValidator.js +12 -1
  322. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  323. package/dist/esm/record/recordValidator/countVaildator.js +5 -0
  324. package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
  325. package/dist/esm/record/recordValidator/index.js.map +1 -1
  326. package/dist/esm/record/recordValidator/recordValidator.js +3 -0
  327. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  328. package/dist/esm/record/records.js +3 -0
  329. package/dist/esm/record/records.js.map +1 -1
  330. package/dist/esm/record/service.js.map +1 -1
  331. package/dist/esm/registry/index.js.map +1 -1
  332. package/dist/esm/registry/serviceRegistry.js.map +1 -1
  333. package/dist/esm/registry/serviceType.js.map +1 -1
  334. package/dist/esm/srs/factory.js.map +1 -1
  335. package/dist/esm/srs/index.js.map +1 -1
  336. package/dist/esm/srs/srs.js.map +1 -1
  337. package/dist/esm/survey/factory.js +1 -0
  338. package/dist/esm/survey/factory.js.map +1 -1
  339. package/dist/esm/survey/index.js.map +1 -1
  340. package/dist/esm/survey/nodeDefsFixer.js +1 -0
  341. package/dist/esm/survey/nodeDefsFixer.js.map +1 -1
  342. package/dist/esm/survey/refData/factory.js.map +1 -1
  343. package/dist/esm/survey/refData/index.js.map +1 -1
  344. package/dist/esm/survey/refData/refData.js.map +1 -1
  345. package/dist/esm/survey/service.js.map +1 -1
  346. package/dist/esm/survey/survey.js.map +1 -1
  347. package/dist/esm/survey/surveyDocImageFactory.js.map +1 -1
  348. package/dist/esm/survey/surveyDocImages.js.map +1 -1
  349. package/dist/esm/survey/surveyFileFactory.js.map +1 -1
  350. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js +8 -0
  351. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  352. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  353. package/dist/esm/survey/surveys/dependencies.js +11 -2
  354. package/dist/esm/survey/surveys/dependencies.js.map +1 -1
  355. package/dist/esm/survey/surveys/index.js +6 -0
  356. package/dist/esm/survey/surveys/index.js.map +1 -1
  357. package/dist/esm/survey/surveys/nodeDefs.js +12 -0
  358. package/dist/esm/survey/surveys/nodeDefs.js.map +1 -1
  359. package/dist/esm/survey/surveys/refsData.js.map +1 -1
  360. package/dist/esm/survey/surveys/surveyGettersSecurity.js.map +1 -1
  361. package/dist/esm/survey/surveys/surveysGetters.js +3 -1
  362. package/dist/esm/survey/surveys/surveysGetters.js.map +1 -1
  363. package/dist/esm/survey/surveys/surveysUtils.js.map +1 -1
  364. package/dist/esm/taxonomy/factory.js.map +1 -1
  365. package/dist/esm/taxonomy/index.js.map +1 -1
  366. package/dist/esm/taxonomy/service.js.map +1 -1
  367. package/dist/esm/taxonomy/taxa.js.map +1 -1
  368. package/dist/esm/taxonomy/taxon.js.map +1 -1
  369. package/dist/esm/taxonomy/taxonGenerator.js.map +1 -1
  370. package/dist/esm/taxonomy/taxonService.js.map +1 -1
  371. package/dist/esm/taxonomy/taxonVernacularName.js.map +1 -1
  372. package/dist/esm/taxonomy/taxonomies.js.map +1 -1
  373. package/dist/esm/taxonomy/taxonomy.js.map +1 -1
  374. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js +2 -0
  375. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  376. package/dist/esm/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  377. package/dist/esm/tests/builder/recordBuilder/index.js.map +1 -1
  378. package/dist/esm/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  379. package/dist/esm/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  380. package/dist/esm/tests/builder/surveyBuilder/categoryBuilder.js.map +1 -1
  381. package/dist/esm/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  382. package/dist/esm/tests/builder/surveyBuilder/index.js.map +1 -1
  383. package/dist/esm/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  384. package/dist/esm/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  385. package/dist/esm/tests/builder/surveyBuilder/nodeDefCodeBuilder.js.map +1 -1
  386. package/dist/esm/tests/builder/surveyBuilder/nodeDefEntityBuilder.js.map +1 -1
  387. package/dist/esm/tests/builder/surveyBuilder/nodeDefTaxonBuilder.js.map +1 -1
  388. package/dist/esm/tests/builder/surveyBuilder/surveyBuilder.js.map +1 -1
  389. package/dist/esm/tests/builder/surveyBuilder/taxonBuilder.js.map +1 -1
  390. package/dist/esm/tests/builder/surveyBuilder/taxonomyBuilder.js.map +1 -1
  391. package/dist/esm/utils/_objects/assoc.js.map +1 -1
  392. package/dist/esm/utils/_objects/assocPath.js +1 -0
  393. package/dist/esm/utils/_objects/assocPath.js.map +1 -1
  394. package/dist/esm/utils/_objects/camelize.js +9 -0
  395. package/dist/esm/utils/_objects/camelize.js.map +1 -1
  396. package/dist/esm/utils/_objects/deepMerge.js +10 -0
  397. package/dist/esm/utils/_objects/deepMerge.js.map +1 -1
  398. package/dist/esm/utils/_objects/deleteEmptyProps.js.map +1 -1
  399. package/dist/esm/utils/_objects/difference.js.map +1 -1
  400. package/dist/esm/utils/_objects/dissoc.js.map +1 -1
  401. package/dist/esm/utils/_objects/dissocPath.js +1 -0
  402. package/dist/esm/utils/_objects/dissocPath.js.map +1 -1
  403. package/dist/esm/utils/_objects/dissocPathIfEmpty.js.map +1 -1
  404. package/dist/esm/utils/_objects/fromPairs.js.map +1 -1
  405. package/dist/esm/utils/_objects/index.js.map +1 -1
  406. package/dist/esm/utils/_objects/isEmpty.js +8 -0
  407. package/dist/esm/utils/_objects/isEmpty.js.map +1 -1
  408. package/dist/esm/utils/_objects/isEqual.js.map +1 -1
  409. package/dist/esm/utils/_objects/isNil.js +6 -0
  410. package/dist/esm/utils/_objects/isNil.js.map +1 -1
  411. package/dist/esm/utils/_objects/isNotEmpty.js +6 -0
  412. package/dist/esm/utils/_objects/isNotEmpty.js.map +1 -1
  413. package/dist/esm/utils/_objects/parse.js +8 -0
  414. package/dist/esm/utils/_objects/parse.js.map +1 -1
  415. package/dist/esm/utils/_objects/path.js +7 -0
  416. package/dist/esm/utils/_objects/path.js.map +1 -1
  417. package/dist/esm/utils/_objects/propertyOf.js.map +1 -1
  418. package/dist/esm/utils/_objects/setInPath.js.map +1 -1
  419. package/dist/esm/utils/_objects/stringify.js +9 -0
  420. package/dist/esm/utils/_objects/stringify.js.map +1 -1
  421. package/dist/esm/utils/_objects/toPairs.js.map +1 -1
  422. package/dist/esm/utils/arrays.js.map +1 -1
  423. package/dist/esm/utils/dates.js +22 -0
  424. package/dist/esm/utils/dates.js.map +1 -1
  425. package/dist/esm/utils/fileNames.js.map +1 -1
  426. package/dist/esm/utils/fileProcessor.js +5 -1
  427. package/dist/esm/utils/fileProcessor.js.map +1 -1
  428. package/dist/esm/utils/index.js.map +1 -1
  429. package/dist/esm/utils/numbers.js +21 -0
  430. package/dist/esm/utils/numbers.js.map +1 -1
  431. package/dist/esm/utils/promises.js +15 -1
  432. package/dist/esm/utils/promises.js.map +1 -1
  433. package/dist/esm/utils/queue.js +9 -0
  434. package/dist/esm/utils/queue.js.map +1 -1
  435. package/dist/esm/utils/retryProcessor.js +5 -1
  436. package/dist/esm/utils/retryProcessor.js.map +1 -1
  437. package/dist/esm/utils/strings.js.map +1 -1
  438. package/dist/esm/utils/uuids.js.map +1 -1
  439. package/dist/esm/utils/versions.js +4 -0
  440. package/dist/esm/utils/versions.js.map +1 -1
  441. package/dist/esm/validation/factory.js.map +1 -1
  442. package/dist/esm/validation/fieldValidator.js.map +1 -1
  443. package/dist/esm/validation/fieldValidators/email.js +3 -0
  444. package/dist/esm/validation/fieldValidators/email.js.map +1 -1
  445. package/dist/esm/validation/fieldValidators/index.js.map +1 -1
  446. package/dist/esm/validation/fieldValidators/name.js +4 -0
  447. package/dist/esm/validation/fieldValidators/name.js.map +1 -1
  448. package/dist/esm/validation/fieldValidators/notKeyword.js.map +1 -1
  449. package/dist/esm/validation/fieldValidators/numeric.js.map +1 -1
  450. package/dist/esm/validation/fieldValidators/numericPositive.js.map +1 -1
  451. package/dist/esm/validation/fieldValidators/required.js.map +1 -1
  452. package/dist/esm/validation/index.js.map +1 -1
  453. package/dist/esm/validation/validation.js.map +1 -1
  454. package/dist/esm/validation/validationResults.js +1 -1
  455. package/dist/esm/validation/validationResults.js.map +1 -1
  456. package/dist/esm/validation/validations.js +17 -1
  457. package/dist/esm/validation/validations.js.map +1 -1
  458. package/dist/esm/validation/validator.js.map +1 -1
  459. package/dist/esm/validation/validatorErrorKeys.js.map +1 -1
  460. package/dist/expression/context.d.ts +6 -0
  461. package/dist/expression/context.js.map +1 -1
  462. package/dist/expression/evaluator.js.map +1 -1
  463. package/dist/expression/function.d.ts +13 -0
  464. package/dist/expression/function.js.map +1 -1
  465. package/dist/expression/index.js.map +1 -1
  466. package/dist/expression/javascript/evaluator.d.ts +1 -0
  467. package/dist/expression/javascript/evaluator.js +6 -2
  468. package/dist/expression/javascript/evaluator.js.map +1 -1
  469. package/dist/expression/javascript/functionsDefault.js.map +1 -1
  470. package/dist/expression/javascript/global.js.map +1 -1
  471. package/dist/expression/javascript/node/array.js.map +1 -1
  472. package/dist/expression/javascript/node/binary.js +23 -0
  473. package/dist/expression/javascript/node/binary.js.map +1 -1
  474. package/dist/expression/javascript/node/call.js +12 -0
  475. package/dist/expression/javascript/node/call.js.map +1 -1
  476. package/dist/expression/javascript/node/compound.js.map +1 -1
  477. package/dist/expression/javascript/node/conditional.js.map +1 -1
  478. package/dist/expression/javascript/node/identifier.d.ts +7 -0
  479. package/dist/expression/javascript/node/identifier.js +7 -0
  480. package/dist/expression/javascript/node/identifier.js.map +1 -1
  481. package/dist/expression/javascript/node/literal.js.map +1 -1
  482. package/dist/expression/javascript/node/member.js +5 -1
  483. package/dist/expression/javascript/node/member.js.map +1 -1
  484. package/dist/expression/javascript/node/sequence.js.map +1 -1
  485. package/dist/expression/javascript/node/this.js.map +1 -1
  486. package/dist/expression/javascript/node/unary.js +8 -0
  487. package/dist/expression/javascript/node/unary.js.map +1 -1
  488. package/dist/expression/javascript/parser/jsep.js +6 -2
  489. package/dist/expression/javascript/parser/jsep.js.map +1 -1
  490. package/dist/expression/javascript/parser/parser.js.map +1 -1
  491. package/dist/expression/node.js.map +1 -1
  492. package/dist/expression/parser.js.map +1 -1
  493. package/dist/expression/variable.js.map +1 -1
  494. package/dist/extraProp/extraProp.js.map +1 -1
  495. package/dist/extraProp/extraProps.js.map +1 -1
  496. package/dist/extraProp/extraPropsDataGenerator.js.map +1 -1
  497. package/dist/extraProp/index.js.map +1 -1
  498. package/dist/geo/index.js.map +1 -1
  499. package/dist/geo/point.js.map +1 -1
  500. package/dist/geo/pointFactory.js.map +1 -1
  501. package/dist/geo/points/bearing.d.ts +9 -0
  502. package/dist/geo/points/bearing.js +11 -0
  503. package/dist/geo/points/bearing.js.map +1 -1
  504. package/dist/geo/points/distance.d.ts +8 -0
  505. package/dist/geo/points/distance.js +9 -0
  506. package/dist/geo/points/distance.js.map +1 -1
  507. package/dist/geo/points/equals.js.map +1 -1
  508. package/dist/geo/points/getSrs.js.map +1 -1
  509. package/dist/geo/points/index.js.map +1 -1
  510. package/dist/geo/points/isFilled.js.map +1 -1
  511. package/dist/geo/points/isValid.js +1 -1
  512. package/dist/geo/points/isValid.js.map +1 -1
  513. package/dist/geo/points/parse.d.ts +9 -0
  514. package/dist/geo/points/parse.js +9 -0
  515. package/dist/geo/points/parse.js.map +1 -1
  516. package/dist/geo/points/pointAtDistance.d.ts +9 -0
  517. package/dist/geo/points/pointAtDistance.js +10 -0
  518. package/dist/geo/points/pointAtDistance.js.map +1 -1
  519. package/dist/geo/points/toLatLong.js.map +1 -1
  520. package/dist/geo/points/toString.js.map +1 -1
  521. package/dist/geo/points/transform.d.ts +8 -0
  522. package/dist/geo/points/transform.js +12 -0
  523. package/dist/geo/points/transform.js.map +1 -1
  524. package/dist/index.js.map +1 -1
  525. package/dist/job/JobBase.d.ts +81 -0
  526. package/dist/job/JobBase.js +99 -0
  527. package/dist/job/JobBase.js.map +1 -1
  528. package/dist/job/index.js.map +1 -1
  529. package/dist/job/job.d.ts +20 -0
  530. package/dist/job/job.js.map +1 -1
  531. package/dist/job/jobContext.js.map +1 -1
  532. package/dist/job/jobEvent.js.map +1 -1
  533. package/dist/job/jobSerialized.d.ts +3 -0
  534. package/dist/job/jobSerialized.js.map +1 -1
  535. package/dist/job/status.js.map +1 -1
  536. package/dist/language/index.js.map +1 -1
  537. package/dist/language/labels.js.map +1 -1
  538. package/dist/language/languageCode.js.map +1 -1
  539. package/dist/language/languages.js.map +1 -1
  540. package/dist/logger/index.js.map +1 -1
  541. package/dist/logger/logger.js.map +1 -1
  542. package/dist/message/index.js.map +1 -1
  543. package/dist/message/message.d.ts +3 -0
  544. package/dist/message/message.js.map +1 -1
  545. package/dist/message/messages.js +1 -0
  546. package/dist/message/messages.js.map +1 -1
  547. package/dist/node/factory.js.map +1 -1
  548. package/dist/node/index.js.map +1 -1
  549. package/dist/node/node.d.ts +38 -0
  550. package/dist/node/node.js.map +1 -1
  551. package/dist/node/nodePointer.js.map +1 -1
  552. package/dist/node/nodeValue/code.js.map +1 -1
  553. package/dist/node/nodeValue/coordinate.js.map +1 -1
  554. package/dist/node/nodeValue/file.js.map +1 -1
  555. package/dist/node/nodeValue/index.js.map +1 -1
  556. package/dist/node/nodeValue/nodeValueComposite.js.map +1 -1
  557. package/dist/node/nodeValue/taxon.js.map +1 -1
  558. package/dist/node/nodeValueFormatter.js +2 -0
  559. package/dist/node/nodeValueFormatter.js.map +1 -1
  560. package/dist/node/nodeValueProps.js.map +1 -1
  561. package/dist/node/nodeValues.d.ts +4 -0
  562. package/dist/node/nodeValues.js +20 -0
  563. package/dist/node/nodeValues.js.map +1 -1
  564. package/dist/node/nodes.js +7 -0
  565. package/dist/node/nodes.js.map +1 -1
  566. package/dist/node/service.js.map +1 -1
  567. package/dist/nodeDef/factory.js.map +1 -1
  568. package/dist/nodeDef/index.js.map +1 -1
  569. package/dist/nodeDef/nodeDef.js +1 -0
  570. package/dist/nodeDef/nodeDef.js.map +1 -1
  571. package/dist/nodeDef/nodeDefs.js +18 -0
  572. package/dist/nodeDef/nodeDefs.js.map +1 -1
  573. package/dist/nodeDef/service.js.map +1 -1
  574. package/dist/nodeDef/types/boolean.js.map +1 -1
  575. package/dist/nodeDef/types/code.js.map +1 -1
  576. package/dist/nodeDef/types/coordinate.js.map +1 -1
  577. package/dist/nodeDef/types/date.js.map +1 -1
  578. package/dist/nodeDef/types/decimal.js.map +1 -1
  579. package/dist/nodeDef/types/entity.d.ts +1 -0
  580. package/dist/nodeDef/types/entity.js.map +1 -1
  581. package/dist/nodeDef/types/file.js.map +1 -1
  582. package/dist/nodeDef/types/formHeader.js.map +1 -1
  583. package/dist/nodeDef/types/integer.js.map +1 -1
  584. package/dist/nodeDef/types/taxon.js.map +1 -1
  585. package/dist/nodeDef/types/text.js.map +1 -1
  586. package/dist/nodeDef/types/time.js.map +1 -1
  587. package/dist/nodeDefExpressionEvaluator/categoryItemProvider.js.map +1 -1
  588. package/dist/nodeDefExpressionEvaluator/context.d.ts +3 -0
  589. package/dist/nodeDefExpressionEvaluator/context.js.map +1 -1
  590. package/dist/nodeDefExpressionEvaluator/evaluator.js.map +1 -1
  591. package/dist/nodeDefExpressionEvaluator/functions.js +8 -1
  592. package/dist/nodeDefExpressionEvaluator/functions.js.map +1 -1
  593. package/dist/nodeDefExpressionEvaluator/index.js.map +1 -1
  594. package/dist/nodeDefExpressionEvaluator/node/identifier.d.ts +14 -0
  595. package/dist/nodeDefExpressionEvaluator/node/identifier.js +28 -0
  596. package/dist/nodeDefExpressionEvaluator/node/identifier.js.map +1 -1
  597. package/dist/nodeDefExpressionEvaluator/node/member.js +15 -0
  598. package/dist/nodeDefExpressionEvaluator/node/member.js.map +1 -1
  599. package/dist/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js +3 -0
  600. package/dist/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.js.map +1 -1
  601. package/dist/nodeDefExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  602. package/dist/nodeDefExpressionEvaluator/taxonProvider.js.map +1 -1
  603. package/dist/nodeDefExpressionEvaluator/validator.js.map +1 -1
  604. package/dist/record/_records/nodeDefSelfReferences.d.ts +8 -0
  605. package/dist/record/_records/nodeDefSelfReferences.js +60 -0
  606. package/dist/record/_records/nodeDefSelfReferences.js.map +1 -0
  607. package/dist/record/_records/recordCompletion.d.ts +12 -0
  608. package/dist/record/_records/recordCompletion.js +14 -0
  609. package/dist/record/_records/recordCompletion.js.map +1 -1
  610. package/dist/record/_records/recordGetters.d.ts +3 -0
  611. package/dist/record/_records/recordGetters.js +26 -5
  612. package/dist/record/_records/recordGetters.js.map +1 -1
  613. package/dist/record/_records/recordNodesIndexReader.js.map +1 -1
  614. package/dist/record/_records/recordNodesIndexUpdater.js +17 -0
  615. package/dist/record/_records/recordNodesIndexUpdater.js.map +1 -1
  616. package/dist/record/_records/recordPagesValidation.d.ts +39 -0
  617. package/dist/record/_records/recordPagesValidation.js +45 -0
  618. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  619. package/dist/record/_records/recordUpdateOptions.js.map +1 -1
  620. package/dist/record/_records/recordUpdater.js +2 -0
  621. package/dist/record/_records/recordUpdater.js.map +1 -1
  622. package/dist/record/_records/recordUtils.js.map +1 -1
  623. package/dist/record/factory.js.map +1 -1
  624. package/dist/record/index.js.map +1 -1
  625. package/dist/record/nodePointers.js.map +1 -1
  626. package/dist/record/record.d.ts +12 -0
  627. package/dist/record/record.js.map +1 -1
  628. package/dist/record/recordCloner.js +10 -1
  629. package/dist/record/recordCloner.js.map +1 -1
  630. package/dist/record/recordExpressionEvaluator/context.js.map +1 -1
  631. package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
  632. package/dist/record/recordExpressionEvaluator/index.js.map +1 -1
  633. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +14 -0
  634. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  635. package/dist/record/recordExpressionEvaluator/node/identifier/index.js.map +1 -1
  636. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +6 -0
  637. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  638. package/dist/record/recordExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  639. package/dist/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  640. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  641. package/dist/record/recordFixer.js +16 -0
  642. package/dist/record/recordFixer.js.map +1 -1
  643. package/dist/record/recordNodesUpdater/index.js.map +1 -1
  644. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.d.ts +6 -0
  645. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js +6 -0
  646. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  647. package/dist/record/recordNodesUpdater/recordExpressionEvaluationContext.js.map +1 -1
  648. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js +5 -0
  649. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  650. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +20 -2
  651. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  652. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +2 -1
  653. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  654. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +13 -1
  655. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  656. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +9 -1
  657. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  658. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +17 -1
  659. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  660. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  661. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +5 -1
  662. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  663. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -2
  664. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  665. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +8 -3
  666. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  667. package/dist/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  668. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  669. package/dist/record/recordNodesUpdater/recordNodesCreator.js +10 -5
  670. package/dist/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  671. package/dist/record/recordNodesUpdater/recordNodesDeleter.js +7 -0
  672. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  673. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -0
  674. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  675. package/dist/record/recordNodesUpdater/recordNodesUpdater.js +16 -2
  676. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  677. package/dist/record/recordNodesUpdater/recordUpdateResult.d.ts +8 -0
  678. package/dist/record/recordNodesUpdater/recordUpdateResult.js +8 -0
  679. package/dist/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  680. package/dist/record/recordPrettyPrinter.js.map +1 -1
  681. package/dist/record/recordStep.js.map +1 -1
  682. package/dist/record/recordUpdater.js +1 -0
  683. package/dist/record/recordUpdater.js.map +1 -1
  684. package/dist/record/recordValidations.js.map +1 -1
  685. package/dist/record/recordValidator/attributeKeyValidator.d.ts +4 -0
  686. package/dist/record/recordValidator/attributeKeyValidator.js +3 -0
  687. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  688. package/dist/record/recordValidator/attributeTypeValidator.js +3 -0
  689. package/dist/record/recordValidator/attributeTypeValidator.js.map +1 -1
  690. package/dist/record/recordValidator/attributeUniqueValidator.js +2 -0
  691. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  692. package/dist/record/recordValidator/attributeValidator.js +12 -1
  693. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  694. package/dist/record/recordValidator/countVaildator.js +5 -0
  695. package/dist/record/recordValidator/countVaildator.js.map +1 -1
  696. package/dist/record/recordValidator/index.js.map +1 -1
  697. package/dist/record/recordValidator/recordValidator.js +3 -0
  698. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  699. package/dist/record/records.js +3 -0
  700. package/dist/record/records.js.map +1 -1
  701. package/dist/record/service.js.map +1 -1
  702. package/dist/registry/index.js.map +1 -1
  703. package/dist/registry/serviceRegistry.js.map +1 -1
  704. package/dist/registry/serviceType.js.map +1 -1
  705. package/dist/srs/factory.js.map +1 -1
  706. package/dist/srs/index.js.map +1 -1
  707. package/dist/srs/srs.js.map +1 -1
  708. package/dist/survey/factory.js +1 -0
  709. package/dist/survey/factory.js.map +1 -1
  710. package/dist/survey/index.js.map +1 -1
  711. package/dist/survey/nodeDefsFixer.js +1 -0
  712. package/dist/survey/nodeDefsFixer.js.map +1 -1
  713. package/dist/survey/refData/factory.js.map +1 -1
  714. package/dist/survey/refData/index.js.map +1 -1
  715. package/dist/survey/refData/refData.d.ts +15 -0
  716. package/dist/survey/refData/refData.js.map +1 -1
  717. package/dist/survey/service.js.map +1 -1
  718. package/dist/survey/survey.d.ts +9 -0
  719. package/dist/survey/survey.js.map +1 -1
  720. package/dist/survey/surveyDocImageFactory.js.map +1 -1
  721. package/dist/survey/surveyDocImages.js.map +1 -1
  722. package/dist/survey/surveyFileFactory.js.map +1 -1
  723. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js +8 -0
  724. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  725. package/dist/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  726. package/dist/survey/surveys/dependencies.js +11 -2
  727. package/dist/survey/surveys/dependencies.js.map +1 -1
  728. package/dist/survey/surveys/index.js +6 -0
  729. package/dist/survey/surveys/index.js.map +1 -1
  730. package/dist/survey/surveys/nodeDefs.js +12 -0
  731. package/dist/survey/surveys/nodeDefs.js.map +1 -1
  732. package/dist/survey/surveys/refsData.js.map +1 -1
  733. package/dist/survey/surveys/surveyGettersSecurity.js.map +1 -1
  734. package/dist/survey/surveys/surveysGetters.js +3 -1
  735. package/dist/survey/surveys/surveysGetters.js.map +1 -1
  736. package/dist/survey/surveys/surveysUtils.js.map +1 -1
  737. package/dist/taxonomy/factory.js.map +1 -1
  738. package/dist/taxonomy/index.js.map +1 -1
  739. package/dist/taxonomy/service.js.map +1 -1
  740. package/dist/taxonomy/taxa.js.map +1 -1
  741. package/dist/taxonomy/taxon.js.map +1 -1
  742. package/dist/taxonomy/taxonGenerator.js.map +1 -1
  743. package/dist/taxonomy/taxonService.js.map +1 -1
  744. package/dist/taxonomy/taxonVernacularName.js.map +1 -1
  745. package/dist/taxonomy/taxonomies.js.map +1 -1
  746. package/dist/taxonomy/taxonomy.js.map +1 -1
  747. package/dist/tests/builder/recordBuilder/attributeBuilder.js +2 -0
  748. package/dist/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  749. package/dist/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  750. package/dist/tests/builder/recordBuilder/index.js.map +1 -1
  751. package/dist/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  752. package/dist/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  753. package/dist/tests/builder/surveyBuilder/categoryBuilder.js.map +1 -1
  754. package/dist/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  755. package/dist/tests/builder/surveyBuilder/index.js.map +1 -1
  756. package/dist/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  757. package/dist/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  758. package/dist/tests/builder/surveyBuilder/nodeDefCodeBuilder.js.map +1 -1
  759. package/dist/tests/builder/surveyBuilder/nodeDefEntityBuilder.js.map +1 -1
  760. package/dist/tests/builder/surveyBuilder/nodeDefTaxonBuilder.js.map +1 -1
  761. package/dist/tests/builder/surveyBuilder/surveyBuilder.js.map +1 -1
  762. package/dist/tests/builder/surveyBuilder/taxonBuilder.js.map +1 -1
  763. package/dist/tests/builder/surveyBuilder/taxonomyBuilder.js.map +1 -1
  764. package/dist/utils/_objects/assoc.js.map +1 -1
  765. package/dist/utils/_objects/assocPath.js +1 -0
  766. package/dist/utils/_objects/assocPath.js.map +1 -1
  767. package/dist/utils/_objects/camelize.d.ts +9 -0
  768. package/dist/utils/_objects/camelize.js +9 -0
  769. package/dist/utils/_objects/camelize.js.map +1 -1
  770. package/dist/utils/_objects/deepMerge.d.ts +5 -0
  771. package/dist/utils/_objects/deepMerge.js +10 -0
  772. package/dist/utils/_objects/deepMerge.js.map +1 -1
  773. package/dist/utils/_objects/deleteEmptyProps.js.map +1 -1
  774. package/dist/utils/_objects/difference.js.map +1 -1
  775. package/dist/utils/_objects/dissoc.js.map +1 -1
  776. package/dist/utils/_objects/dissocPath.js +1 -0
  777. package/dist/utils/_objects/dissocPath.js.map +1 -1
  778. package/dist/utils/_objects/dissocPathIfEmpty.js.map +1 -1
  779. package/dist/utils/_objects/fromPairs.js.map +1 -1
  780. package/dist/utils/_objects/index.js.map +1 -1
  781. package/dist/utils/_objects/isEmpty.d.ts +6 -0
  782. package/dist/utils/_objects/isEmpty.js +8 -0
  783. package/dist/utils/_objects/isEmpty.js.map +1 -1
  784. package/dist/utils/_objects/isEqual.js.map +1 -1
  785. package/dist/utils/_objects/isNil.d.ts +6 -0
  786. package/dist/utils/_objects/isNil.js +6 -0
  787. package/dist/utils/_objects/isNil.js.map +1 -1
  788. package/dist/utils/_objects/isNotEmpty.d.ts +6 -0
  789. package/dist/utils/_objects/isNotEmpty.js +6 -0
  790. package/dist/utils/_objects/isNotEmpty.js.map +1 -1
  791. package/dist/utils/_objects/parse.d.ts +8 -0
  792. package/dist/utils/_objects/parse.js +8 -0
  793. package/dist/utils/_objects/parse.js.map +1 -1
  794. package/dist/utils/_objects/path.d.ts +6 -0
  795. package/dist/utils/_objects/path.js +7 -0
  796. package/dist/utils/_objects/path.js.map +1 -1
  797. package/dist/utils/_objects/propertyOf.js.map +1 -1
  798. package/dist/utils/_objects/setInPath.js.map +1 -1
  799. package/dist/utils/_objects/stringify.d.ts +9 -0
  800. package/dist/utils/_objects/stringify.js +9 -0
  801. package/dist/utils/_objects/stringify.js.map +1 -1
  802. package/dist/utils/_objects/toPairs.js.map +1 -1
  803. package/dist/utils/arrays.js.map +1 -1
  804. package/dist/utils/dates.d.ts +1 -1
  805. package/dist/utils/dates.js +22 -0
  806. package/dist/utils/dates.js.map +1 -1
  807. package/dist/utils/fileNames.js.map +1 -1
  808. package/dist/utils/fileProcessor.js +5 -1
  809. package/dist/utils/fileProcessor.js.map +1 -1
  810. package/dist/utils/index.js.map +1 -1
  811. package/dist/utils/numbers.js +21 -0
  812. package/dist/utils/numbers.js.map +1 -1
  813. package/dist/utils/promises.js +15 -1
  814. package/dist/utils/promises.js.map +1 -1
  815. package/dist/utils/queue.d.ts +7 -0
  816. package/dist/utils/queue.js +9 -0
  817. package/dist/utils/queue.js.map +1 -1
  818. package/dist/utils/retryProcessor.js +5 -1
  819. package/dist/utils/retryProcessor.js.map +1 -1
  820. package/dist/utils/strings.js.map +1 -1
  821. package/dist/utils/uuids.js.map +1 -1
  822. package/dist/utils/versions.js +4 -0
  823. package/dist/utils/versions.js.map +1 -1
  824. package/dist/validation/factory.js.map +1 -1
  825. package/dist/validation/fieldValidator.js.map +1 -1
  826. package/dist/validation/fieldValidators/email.js +3 -0
  827. package/dist/validation/fieldValidators/email.js.map +1 -1
  828. package/dist/validation/fieldValidators/index.js.map +1 -1
  829. package/dist/validation/fieldValidators/name.js +4 -0
  830. package/dist/validation/fieldValidators/name.js.map +1 -1
  831. package/dist/validation/fieldValidators/notKeyword.js.map +1 -1
  832. package/dist/validation/fieldValidators/numeric.js.map +1 -1
  833. package/dist/validation/fieldValidators/numericPositive.js.map +1 -1
  834. package/dist/validation/fieldValidators/required.js.map +1 -1
  835. package/dist/validation/index.js.map +1 -1
  836. package/dist/validation/validation.js.map +1 -1
  837. package/dist/validation/validationResults.js +1 -1
  838. package/dist/validation/validationResults.js.map +1 -1
  839. package/dist/validation/validations.js +17 -1
  840. package/dist/validation/validations.js.map +1 -1
  841. package/dist/validation/validator.js.map +1 -1
  842. package/dist/validation/validatorErrorKeys.js.map +1 -1
  843. package/package.json +6 -9
@@ -37,11 +37,13 @@ const sampleGeoJsonPolygon = {
37
37
  const isNotValidString = (value) => utils_1.Objects.isEmpty(value) || typeof value !== 'string';
38
38
  const emptyExecutor = (_context) => () => null;
39
39
  const isUsingDraftProps = (context) => {
40
+ // use draft props when validating expression or previewing record
40
41
  const record = context.record;
41
42
  return !record || !!record.preview;
42
43
  };
43
44
  const getOrFetchCategoryItem = (params) => __awaiter(void 0, void 0, void 0, function* () {
44
45
  const { context, categoryUuid, codePaths } = params;
46
+ // if any code path is empty, return null (no category item can be found)
45
47
  if (utils_1.Objects.isEmpty(codePaths) || codePaths.some(utils_1.Objects.isEmpty)) {
46
48
  return undefined;
47
49
  }
@@ -53,13 +55,15 @@ const getOrFetchCategoryItem = (params) => __awaiter(void 0, void 0, void 0, fun
53
55
  const getOrFetchTaxon = (params) => __awaiter(void 0, void 0, void 0, function* () {
54
56
  const { context, taxonomyUuid, taxonCode } = params;
55
57
  if (typeof taxonCode !== 'string' && typeof taxonCode !== 'number') {
56
- return undefined;
58
+ return undefined; // node def expression validator could call it passing a node def object
57
59
  }
60
+ // if taxonCode is empty, return undefined
58
61
  if (utils_1.Objects.isEmpty(taxonCode)) {
59
62
  return undefined;
60
63
  }
61
64
  const { survey, taxonProvider } = context;
62
65
  const taxon = (0, refsData_1.getTaxonByCode)({ survey, taxonomyUuid, taxonCode });
66
+ // fetch draft props when validating expression or previewing record
63
67
  const record = context.record;
64
68
  const draft = !record || !!record.preview;
65
69
  return taxon !== null && taxon !== void 0 ? taxon : taxonProvider === null || taxonProvider === void 0 ? void 0 : taxonProvider.getTaxonByCode({ survey, taxonomyUuid, taxonCode, draft });
@@ -113,6 +117,7 @@ exports.nodeDefExpressionFunctions = {
113
117
  return utils_1.Dates.diffInMinutes(dt1, dt2);
114
118
  },
115
119
  },
120
+ // deprecated, use geoDistance instead
116
121
  distance: { minArity: 2, maxArity: 2, executor: geoDistanceExecutor },
117
122
  first: {
118
123
  minArity: 1,
@@ -124,6 +129,7 @@ exports.nodeDefExpressionFunctions = {
124
129
  minArity: 3,
125
130
  maxArity: 3,
126
131
  executor: (context) => (coordinate, distanceMeters, bearingDeg) => {
132
+ // validate parameters
127
133
  const origin = geo_1.Points.parse(coordinate);
128
134
  if (!origin)
129
135
  return null;
@@ -281,6 +287,7 @@ exports.nodeDefExpressionFunctions = {
281
287
  if (!taxon)
282
288
  return null;
283
289
  const vernacularNameArray = (_a = taxon.vernacularNames) === null || _a === void 0 ? void 0 : _a[vernacularLangCode];
290
+ // consider first vernacular name object only
284
291
  const firstVernacularName = vernacularNameArray === null || vernacularNameArray === void 0 ? void 0 : vernacularNameArray[0];
285
292
  return (_b = firstVernacularName === null || firstVernacularName === void 0 ? void 0 : firstVernacularName.props) === null || _b === void 0 ? void 0 : _b.name;
286
293
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Users } from '../auth'\nimport { CategoryItem } from '../category'\nimport { SystemError } from '../error'\nimport { ExpressionFunctions } from '../expression'\nimport { ExtraProps } from '../extraProp/extraProps'\nimport { Point, Points } from '../geo'\nimport { LanguagesISO639part2 } from '../language'\nimport { Record } from '../record'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\nimport { getCategoryItemByCodePaths, getTaxonByCode } from '../survey/surveys/refsData'\nimport { getCategoryByName, getSRSIndex, getTaxonomyByName } from '../survey/surveys/surveysGetters'\nimport { Taxon } from '../taxonomy'\nimport { Dates, Numbers, Objects } from '../utils'\nimport { NodeDefExpressionContext } from './context'\n\nconst sampleGeoJsonPolygon = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [100.0, 0.0],\n [101.0, 0.0],\n [101.0, 1.0],\n [100.0, 1.0],\n [100.0, 0.0],\n ],\n ],\n },\n}\n\nconst isNotValidString = (value: string): boolean => Objects.isEmpty(value) || typeof value !== 'string'\n\nconst emptyExecutor = (_context: NodeDefExpressionContext) => () => null\n\nconst isUsingDraftProps = (context: NodeDefExpressionContext) => {\n // use draft props when validating expression or previewing record\n const record: Record = (context as any).record\n return !record || !!record.preview\n}\n\nconst getOrFetchCategoryItem = async (params: {\n context: NodeDefExpressionContext\n categoryUuid: string\n codePaths: string[]\n}): Promise<CategoryItem | undefined> => {\n const { context, categoryUuid, codePaths } = params\n // if any code path is empty, return null (no category item can be found)\n if (Objects.isEmpty(codePaths) || codePaths.some(Objects.isEmpty)) {\n return undefined\n }\n const { survey, categoryItemProvider } = context\n const categoryItem = getCategoryItemByCodePaths({ survey, categoryUuid, codePaths })\n const draft = isUsingDraftProps(context)\n return categoryItem ?? categoryItemProvider?.getItemByCodePaths({ survey, categoryUuid, codePaths, draft })\n}\n\nconst getOrFetchTaxon = async (params: {\n context: NodeDefExpressionContext\n taxonomyUuid: string\n taxonCode: string\n}): Promise<Taxon | undefined> => {\n const { context, taxonomyUuid, taxonCode } = params\n if (typeof taxonCode !== 'string' && typeof taxonCode !== 'number') {\n return undefined // node def expression validator could call it passing a node def object\n }\n // if taxonCode is empty, return undefined\n if (Objects.isEmpty(taxonCode)) {\n return undefined\n }\n const { survey, taxonProvider } = context\n const taxon = getTaxonByCode({ survey, taxonomyUuid, taxonCode })\n // fetch draft props when validating expression or previewing record\n const record: Record = (context as any).record\n const draft = !record || !!record.preview\n return taxon ?? taxonProvider?.getTaxonByCode({ survey, taxonomyUuid, taxonCode, draft })\n}\n\nconst geoDistanceExecutor =\n (context: NodeDefExpressionContext) =>\n (coordinateFrom: Point | string, coordinateTo: Point | string): number | null => {\n const { survey } = context\n const srsIndex = getSRSIndex(survey)\n\n const pointFrom = Points.parse(coordinateFrom)\n const pointTo = Points.parse(coordinateTo)\n\n return pointFrom && pointTo ? Points.distance(pointFrom, pointTo, srsIndex) : null\n }\n\nexport const nodeDefExpressionFunctions: ExpressionFunctions<NodeDefExpressionContext> = {\n categoryItemProp: {\n minArity: 3,\n executor:\n (context: NodeDefExpressionContext) =>\n async (categoryName: string, itemPropName: string, ...codePaths: string[]): Promise<any> => {\n const { survey } = context\n\n if (Objects.isEmpty(categoryName) || Objects.isEmpty(itemPropName) || Objects.isEmpty(codePaths))\n throw new SystemError('expression.missingFunctionParameters')\n\n const category = getCategoryByName({ survey, categoryName })\n if (!category) throw new SystemError('expression.invalidCategoryName', { name: categoryName })\n\n const extraPropDef = category.props.itemExtraDef?.[itemPropName]\n if (!extraPropDef) throw new SystemError('expression.invalidCategoryExtraProp', { propName: itemPropName })\n\n const { uuid: categoryUuid } = category\n const categoryItem = await getOrFetchCategoryItem({ context, categoryUuid, codePaths })\n if (!categoryItem) return null\n\n const value = categoryItem.props.extra?.[itemPropName]\n return ExtraProps.convertValue({ survey, extraPropDef, value })\n },\n },\n count: {\n minArity: 1,\n maxArity: 1,\n executor:\n (_context: NodeDefExpressionContext) =>\n (_nodeSet): number =>\n 1,\n },\n dateTimeDiff: {\n minArity: 4,\n maxArity: 4,\n executor:\n (_context: NodeDefExpressionContext) =>\n (date1: string, time1: string, date2: string, time2: string): number | null => {\n if (isNotValidString(date1) || isNotValidString(time1) || isNotValidString(date2) || isNotValidString(time2))\n return null\n const [hours1, minutes1] = time1.split(':')\n const [hours2, minutes2] = time2.split(':')\n let dt1 = Dates.addHours(date1, Number(hours1))\n dt1 = Dates.addMinutes(dt1, Number(minutes1))\n let dt2 = Dates.addHours(date2, Number(hours2))\n dt2 = Dates.addMinutes(dt2, Number(minutes2))\n return Dates.diffInMinutes(dt1, dt2)\n },\n },\n // deprecated, use geoDistance instead\n distance: { minArity: 2, maxArity: 2, executor: geoDistanceExecutor },\n first: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n executor: emptyExecutor,\n },\n geoCoordinateAtDistance: {\n minArity: 3,\n maxArity: 3,\n executor:\n (context: NodeDefExpressionContext) =>\n (coordinate: Point | string, distanceMeters: number, bearingDeg: number): Point | null => {\n // validate parameters\n const origin = Points.parse(coordinate)\n if (!origin) return null\n\n const distanceMetersNumber = Number(distanceMeters)\n const bearingDegNumber = Number(bearingDeg)\n if (!Number.isFinite(distanceMetersNumber) || distanceMetersNumber < 0 || !Number.isFinite(bearingDegNumber)) {\n return null\n }\n\n const { survey } = context\n const srsIndex = getSRSIndex(survey)\n\n return Points.pointAtDistance({\n origin,\n distanceMeters: distanceMetersNumber,\n bearingDeg: bearingDegNumber,\n srsIndex,\n })\n },\n },\n geoDistance: { minArity: 2, maxArity: 2, executor: geoDistanceExecutor },\n geoPolygon: {\n minArity: 1,\n evaluateArgsToNodes: true,\n executor: () => () => sampleGeoJsonPolygon,\n },\n includes: {\n minArity: 2,\n maxArity: 2,\n evaluateArgsToNodes: false,\n executor:\n () =>\n (items: any, value: any): boolean =>\n Array.isArray(items) && items.map(String).includes(String(value)),\n },\n index: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n executor: () => () => -1,\n },\n last: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n executor: emptyExecutor,\n },\n now: {\n minArity: 0,\n maxArity: 0,\n evaluateToNode: false,\n executor: () => () => Dates.nowFormattedForStorage(),\n },\n numberToWords: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: false,\n executor:\n (context: NodeDefExpressionContext) =>\n (value: any): string | null => {\n if (Objects.isEmpty(value)) return null\n return Numbers.toWords(value, context.lang)\n },\n },\n parent: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n evaluateToNode: true,\n executor: (context: NodeDefExpressionContext) => (nodeDef) => {\n const { survey } = context\n return getNodeDefParent({ survey, nodeDef })\n },\n },\n prevCycleValue: {\n minArity: 1,\n maxArity: 1,\n executor: emptyExecutor,\n },\n prevCycleValues: {\n minArity: 1,\n maxArity: 1,\n executor: emptyExecutor,\n },\n recordCycle: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n recordDateCreated: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n recordDateLastModified: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n recordOwnerEmail: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n recordOwnerName: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n recordOwnerRole: {\n minArity: 0,\n maxArity: 0,\n executor: emptyExecutor,\n },\n sum: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n executor: (_context: NodeDefExpressionContext) => (_nodeSet) => 1,\n },\n taxonProp: {\n minArity: 3,\n maxArity: 3,\n executor:\n (context: NodeDefExpressionContext) => async (taxonomyName: string, propName: string, taxonCode: string) => {\n if (Objects.isEmpty(taxonomyName) || Objects.isEmpty(propName))\n throw new SystemError('expression.missingFunctionParameters')\n if (Objects.isEmpty(taxonCode)) return null\n\n const { survey } = context\n const taxonomy = getTaxonomyByName({ survey, taxonomyName })\n if (!taxonomy) throw new SystemError('expression.invalidTaxonomyName', { name: taxonomyName })\n\n const extraPropDef = taxonomy.props.extraPropsDefs?.[propName]\n if (!extraPropDef) throw new SystemError('expression.invalidTaxonomyExtraProp', { propName })\n\n const taxon = await getOrFetchTaxon({ context, taxonomyUuid: taxonomy.uuid, taxonCode })\n if (!taxon) return null\n\n const value = taxon.props.extra?.[propName]\n return ExtraProps.convertValue({ survey, extraPropDef, value })\n },\n },\n taxonVernacularName: {\n minArity: 3,\n maxArity: 3,\n executor:\n (context: NodeDefExpressionContext) =>\n async (taxonomyName: string, vernacularLangCode: string, taxonCode: string) => {\n if (Objects.isEmpty(taxonomyName) || Objects.isEmpty(vernacularLangCode))\n throw new SystemError('expression.missingFunctionParameters')\n if (Objects.isEmpty(taxonCode)) return null\n\n const { survey } = context\n const taxonomy = getTaxonomyByName({ survey, taxonomyName })\n if (!taxonomy) throw new SystemError('expression.invalidTaxonomyName', { name: taxonomyName })\n\n if (!LanguagesISO639part2[vernacularLangCode]) {\n throw new SystemError('expression.invalidTaxonVernacularNameLanguageCode', { vernacularLangCode })\n }\n\n const taxon = await getOrFetchTaxon({ context, taxonomyUuid: taxonomy.uuid, taxonCode })\n if (!taxon) return null\n\n const vernacularNameArray = taxon.vernacularNames?.[vernacularLangCode]\n // consider first vernacular name object only\n const firstVernacularName = vernacularNameArray?.[0]\n return firstVernacularName?.props?.name\n },\n },\n unique: {\n minArity: 1,\n maxArity: 1,\n evaluateArgsToNodes: true,\n executor: (_context: NodeDefExpressionContext) => (_nodeSet) => [],\n },\n userEmail: {\n minArity: 0,\n maxArity: 0,\n executor: (context: NodeDefExpressionContext) => () => context.user?.email,\n },\n userIsRecordOwner: {\n minArity: 0,\n maxArity: 0,\n executor: (_context: NodeDefExpressionContext) => () => false,\n },\n userName: {\n minArity: 0,\n maxArity: 0,\n executor: (context: NodeDefExpressionContext) => () => context.user?.name,\n },\n userProp: {\n minArity: 1,\n maxArity: 1,\n executor: (context: NodeDefExpressionContext) => (propName: string) => {\n const { user, survey } = context\n if (!survey || !user) return undefined\n const { uuid: surveyUuid } = survey\n const combinedExtraProps = Users.getCombinedExtraProps(surveyUuid)(user)\n return combinedExtraProps[propName]\n },\n },\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AAA/C,uHAAA,0BAA0B,OAAA;AACnC,yCAAwD;AAA/C,uHAAA,0BAA0B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AAA/C,uHAAA,0BAA0B,OAAA;AACnC,yCAAwD;AAA/C,uHAAA,0BAA0B,OAAA","sourcesContent":["export { NodeDefExpressionEvaluator } from './evaluator'\nexport { NodeDefExpressionValidator } from './validator'\nexport type { CategoryItemProvider } from './categoryItemProvider'\nexport type { TaxonProvider } from './taxonProvider'\n"]}
@@ -5,12 +5,26 @@ import { IdentifierExpression } from '../../expression';
5
5
  export declare class NodeDefIdentifierEvaluator extends IdentifierEvaluator<NodeDefExpressionContext> {
6
6
  evaluate(expressionNode: IdentifierExpression): Promise<any>;
7
7
  private evaluateIdentifier;
8
+ /**
9
+ * Finds the identifier among the native properties or functions of the context object
10
+ * (e.g. String.length or String.toUpperCase()).
11
+ */
8
12
  private findNativeProperty;
9
13
  private findReferencedNodeDef;
10
14
  private getReferencedNodeDef;
11
15
  private throwIdentifierNotFound;
12
16
  private addReferencedNodeDefUuid;
17
+ /**
18
+ * Tries to find the specified identifier among the node defs that can be "reached" from the context node def.
19
+ */
13
20
  protected findIdentifierAmongReachableNodeDefs(expressionNode: IdentifierExpression): NodeDef<NodeDefType, NodeDefProps> | undefined;
21
+ /**
22
+ * Get reachable node defs, i.e. the children of the node definition's ancestors.
23
+ * NOTE: The root node def is excluded, but it _should_ be an entity, so that is fine.
24
+ */
14
25
  protected getReachableNodeDefs(): NodeDef<NodeDefType, NodeDefProps>[];
26
+ /**
27
+ * Iterates over the reachable node defs (see getReachableNodeDefs), yielding every node def only once.
28
+ */
15
29
  private iterateReachableNodeDefs;
16
30
  }
@@ -11,6 +11,12 @@ const error_1 = require("../../error");
11
11
  const validation_1 = require("../../validation");
12
12
  const nodeDefExpressionNativeProperties_1 = require("./nodeDefExpressionNativeProperties");
13
13
  const nodeValues_1 = require("../../node/nodeValues");
14
+ /**
15
+ * Determines the actual context node def
16
+ * - attribute def => parent entity def
17
+ * - virtual entity def => source node def
18
+ * - entity def => entity def itself
19
+ */
14
20
  const findActualContextNode = (params) => {
15
21
  const { context } = params;
16
22
  const { survey, object: nodeDefObjectContext } = context;
@@ -44,6 +50,7 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
44
50
  }
45
51
  return nodeDefContext;
46
52
  }
53
+ // global objects (e.g. Math, String)
47
54
  const globalObjectProperty = (0, global_1.getGlobalObjectProperty)(exprName, objectContext);
48
55
  if (globalObjectProperty !== null) {
49
56
  return globalObjectProperty;
@@ -54,15 +61,19 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
54
61
  return prop;
55
62
  }
56
63
  }
64
+ // check if identifier is a composite attribute value prop
57
65
  if (nodeDefs_2.NodeDefs.isAttribute(objectContext) && nodeValues_1.NodeValues.isValueProp({ nodeDef: objectContext, prop: exprName })) {
58
66
  return objectContext;
59
67
  }
60
68
  if (memberProperty) {
69
+ // property of a member expression (e.g. text_attr.length or text_attr.toUpperCase()): native properties first
61
70
  const nativeProperty = this.findNativeProperty(expressionNode);
62
71
  if (nativeProperty)
63
72
  return nativeProperty.value;
64
73
  return this.getReferencedNodeDef(expressionNode);
65
74
  }
75
+ // identifier not in a member expression: node defs first, so that node defs named like native properties
76
+ // (e.g. "name", "type", "trim") are always found (and registered as dependencies)
66
77
  const referencedNodeDef = this.findReferencedNodeDef(expressionNode);
67
78
  if (referencedNodeDef)
68
79
  return referencedNodeDef;
@@ -71,6 +82,10 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
71
82
  return nativeProperty.value;
72
83
  return this.throwIdentifierNotFound(expressionNode);
73
84
  }
85
+ /**
86
+ * Finds the identifier among the native properties or functions of the context object
87
+ * (e.g. String.length or String.toUpperCase()).
88
+ */
74
89
  findNativeProperty(expressionNode) {
75
90
  const { object: objectContext } = this.context;
76
91
  const { name: exprName } = expressionNode;
@@ -112,10 +127,14 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
112
127
  const { referencedNodeDefUuids = new Set() } = context;
113
128
  context.referencedNodeDefUuids = referencedNodeDefUuids.add(uuid);
114
129
  }
130
+ /**
131
+ * Tries to find the specified identifier among the node defs that can be "reached" from the context node def.
132
+ */
115
133
  findIdentifierAmongReachableNodeDefs(expressionNode) {
116
134
  const { object: contextObject } = this.context;
117
135
  if (!contextObject)
118
136
  return undefined;
137
+ // stop at the first match (same order as getReachableNodeDefs), without visiting all the reachable node defs
119
138
  for (const reachableNodeDef of this.iterateReachableNodeDefs()) {
120
139
  if (reachableNodeDef.props.name === expressionNode.name) {
121
140
  return reachableNodeDef;
@@ -123,9 +142,16 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
123
142
  }
124
143
  return undefined;
125
144
  }
145
+ /**
146
+ * Get reachable node defs, i.e. the children of the node definition's ancestors.
147
+ * NOTE: The root node def is excluded, but it _should_ be an entity, so that is fine.
148
+ */
126
149
  getReachableNodeDefs() {
127
150
  return Array.from(this.iterateReachableNodeDefs());
128
151
  }
152
+ /**
153
+ * Iterates over the reachable node defs (see getReachableNodeDefs), yielding every node def only once.
154
+ */
129
155
  *iterateReachableNodeDefs() {
130
156
  const { context } = this;
131
157
  const { survey, includeAnalysis } = context;
@@ -147,7 +173,9 @@ class NodeDefIdentifierEvaluator extends identifier_1.IdentifierEvaluator {
147
173
  yield childDef;
148
174
  }
149
175
  }
176
+ // visit nodes inside single entities
150
177
  queue.enqueueItems(entityDefCurrentChildren.filter(nodeDefs_2.NodeDefs.isSingleEntity));
178
+ // avoid visiting 2 times the same entity definition when traversing single entities
151
179
  if (!visitedUuids.has(entityDefCurrent.uuid)) {
152
180
  const entityDefCurrentParent = (0, nodeDefs_1.getNodeDefParent)({ survey, nodeDef: entityDefCurrent });
153
181
  if (entityDefCurrentParent) {
@@ -1 +1 @@
1
- {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/identifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/identifier.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeDef, NodeDefProps, NodeDefType } from '../../nodeDef/nodeDef'\nimport { getNodeDefChildren, getNodeDefParent, getNodeDefSource } from '../../survey/surveys/nodeDefs'\nimport { NodeDefs } from '../../nodeDef/nodeDefs'\nimport { Objects, Queue } from '../../utils'\nimport { IdentifierEvaluator } from '../../expression/javascript/node/identifier'\nimport { getGlobalObjectProperty } from '../../expression/javascript/global'\nimport { NodeDefExpressionContext } from '../context'\nimport { ExpressionVariable, IdentifierExpression } from '../../expression'\nimport { SystemError } from '../../error'\nimport { ValidatorErrorKeys } from '../../validation'\nimport { NodeNativeProperties } from './nodeDefExpressionNativeProperties'\nimport { NodeValues } from '../../node/nodeValues'\n\n/**\n * Determines the actual context node def\n * - attribute def => parent entity def\n * - virtual entity def => source node def\n * - entity def => entity def itself\n */\nconst findActualContextNode = (params: {\n context: NodeDefExpressionContext\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { context } = params\n const { survey, object: nodeDefObjectContext } = context\n\n if (!nodeDefObjectContext) return undefined\n\n if (NodeDefs.isAttribute(nodeDefObjectContext)) {\n return getNodeDefParent({ survey, nodeDef: nodeDefObjectContext })\n }\n if (nodeDefObjectContext.virtual) {\n return getNodeDefSource({ survey, nodeDef: nodeDefObjectContext })\n }\n return nodeDefObjectContext\n}\n\nexport class NodeDefIdentifierEvaluator extends IdentifierEvaluator<NodeDefExpressionContext> {\n evaluate(expressionNode: IdentifierExpression): Promise<any> {\n try {\n return Promise.resolve(this.evaluateIdentifier(expressionNode))\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n private evaluateIdentifier(expressionNode: IdentifierExpression): any {\n const { context } = this\n const { nodeDefContext, object: objectContext, itemsFilter, memberProperty } = context\n const { name: exprName } = expressionNode\n\n if (exprName === ExpressionVariable.CONTEXT) {\n if (nodeDefContext) {\n this.addReferencedNodeDefUuid(nodeDefContext.uuid)\n }\n return nodeDefContext\n }\n\n // global objects (e.g. Math, String)\n const globalObjectProperty = getGlobalObjectProperty(exprName, objectContext)\n if (globalObjectProperty !== null) {\n return globalObjectProperty\n }\n\n if (itemsFilter) {\n const prop = objectContext?.props?.[exprName] ?? objectContext?.props?.extra?.[exprName]\n if (!Objects.isEmpty(prop)) {\n return prop\n }\n }\n\n // check if identifier is a composite attribute value prop\n if (NodeDefs.isAttribute(objectContext) && NodeValues.isValueProp({ nodeDef: objectContext, prop: exprName })) {\n return objectContext\n }\n\n if (memberProperty) {\n // property of a member expression (e.g. text_attr.length or text_attr.toUpperCase()): native properties first\n const nativeProperty = this.findNativeProperty(expressionNode)\n if (nativeProperty) return nativeProperty.value\n return this.getReferencedNodeDef(expressionNode)\n }\n // identifier not in a member expression: node defs first, so that node defs named like native properties\n // (e.g. \"name\", \"type\", \"trim\") are always found (and registered as dependencies)\n const referencedNodeDef = this.findReferencedNodeDef(expressionNode)\n if (referencedNodeDef) return referencedNodeDef\n\n const nativeProperty = this.findNativeProperty(expressionNode)\n if (nativeProperty) return nativeProperty.value\n\n return this.throwIdentifierNotFound(expressionNode)\n }\n\n /**\n * Finds the identifier among the native properties or functions of the context object\n * (e.g. String.length or String.toUpperCase()).\n */\n private findNativeProperty(expressionNode: IdentifierExpression): { value: any } | null {\n const { object: objectContext } = this.context\n const { name: exprName } = expressionNode\n\n const globalOrNativeProperty = this.findGlobalOrNativeProperty(expressionNode)\n if (globalOrNativeProperty) {\n return globalOrNativeProperty\n }\n if (NodeNativeProperties.hasNativeProperty({ nodeDefOrValue: objectContext, propName: exprName })) {\n return {\n value: NodeNativeProperties.evalNodeDefProperty({ nodeDefOrValue: objectContext, propName: exprName }),\n }\n }\n return null\n }\n\n private findReferencedNodeDef(expressionNode: IdentifierExpression): NodeDef<NodeDefType, NodeDefProps> | undefined {\n const { nodeDefCurrent, selfReferenceAllowed } = this.context\n const referencedNodeDef = this.findIdentifierAmongReachableNodeDefs(expressionNode)\n if (!referencedNodeDef) return undefined\n\n if (!selfReferenceAllowed && referencedNodeDef.uuid === nodeDefCurrent?.uuid) {\n throw new SystemError(ValidatorErrorKeys.expressions.cannotUseCurrentNode, { name: expressionNode.name })\n }\n this.addReferencedNodeDefUuid(referencedNodeDef.uuid)\n return referencedNodeDef\n }\n\n private getReferencedNodeDef(expressionNode: IdentifierExpression): NodeDef<NodeDefType, NodeDefProps> {\n return this.findReferencedNodeDef(expressionNode) ?? this.throwIdentifierNotFound(expressionNode)\n }\n\n private throwIdentifierNotFound(expressionNode: IdentifierExpression): never {\n throw new SystemError('expression.identifierNotFound', {\n name: expressionNode.name,\n contextObject: this.context.object?.props?.name,\n })\n }\n\n private addReferencedNodeDefUuid(uuid: string) {\n const { context } = this\n const { referencedNodeDefUuids = new Set() } = context\n context.referencedNodeDefUuids = referencedNodeDefUuids.add(uuid)\n }\n\n /**\n * Tries to find the specified identifier among the node defs that can be \"reached\" from the context node def.\n */\n protected findIdentifierAmongReachableNodeDefs(\n expressionNode: IdentifierExpression\n ): NodeDef<NodeDefType, NodeDefProps> | undefined {\n const { object: contextObject } = this.context\n\n if (!contextObject) return undefined\n\n // stop at the first match (same order as getReachableNodeDefs), without visiting all the reachable node defs\n for (const reachableNodeDef of this.iterateReachableNodeDefs()) {\n if (reachableNodeDef.props.name === expressionNode.name) {\n return reachableNodeDef\n }\n }\n return undefined\n }\n\n /**\n * Get reachable node defs, i.e. the children of the node definition's ancestors.\n * NOTE: The root node def is excluded, but it _should_ be an entity, so that is fine.\n */\n protected getReachableNodeDefs(): NodeDef<NodeDefType, NodeDefProps>[] {\n return Array.from(this.iterateReachableNodeDefs())\n }\n\n /**\n * Iterates over the reachable node defs (see getReachableNodeDefs), yielding every node def only once.\n */\n private *iterateReachableNodeDefs(): Generator<NodeDef<NodeDefType, NodeDefProps>> {\n const { context } = this\n const { survey, includeAnalysis } = context\n\n const reachableNodeDefUuids = new Set<string>()\n const visitedUuids = new Set<string>()\n\n const queue = new Queue()\n\n const actualContextNode = findActualContextNode({ context })\n if (actualContextNode) {\n queue.enqueue(actualContextNode)\n reachableNodeDefUuids.add(actualContextNode.uuid)\n yield actualContextNode\n }\n\n while (!queue.isEmpty()) {\n const entityDefCurrent = queue.dequeue()\n const entityDefCurrentChildren = getNodeDefChildren({ survey, nodeDef: entityDefCurrent, includeAnalysis })\n for (const childDef of entityDefCurrentChildren) {\n if (!reachableNodeDefUuids.has(childDef.uuid)) {\n reachableNodeDefUuids.add(childDef.uuid)\n yield childDef\n }\n }\n // visit nodes inside single entities\n queue.enqueueItems(entityDefCurrentChildren.filter(NodeDefs.isSingleEntity))\n\n // avoid visiting 2 times the same entity definition when traversing single entities\n if (!visitedUuids.has(entityDefCurrent.uuid)) {\n const entityDefCurrentParent = getNodeDefParent({ survey, nodeDef: entityDefCurrent })\n if (entityDefCurrentParent) {\n queue.enqueue(entityDefCurrentParent)\n }\n if (!reachableNodeDefUuids.has(entityDefCurrent.uuid)) {\n reachableNodeDefUuids.add(entityDefCurrent.uuid)\n yield entityDefCurrent\n }\n visitedUuids.add(entityDefCurrent.uuid)\n }\n }\n }\n}\n"]}
@@ -17,17 +17,32 @@ class NodeDefMemberEvaluator extends member_1.MemberEvaluator {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
18
  const { object, property, computed } = expressionNode;
19
19
  const objectEval = yield this.evaluator.evaluateNode(object, this.context);
20
+ // null or undefined object (e.g. parent of the root entity)
20
21
  if (objectEval === null || objectEval === undefined) {
21
22
  return null;
22
23
  }
23
24
  if (computed) {
25
+ // access element at index (e.g. plot[1] or plot[index(...)]) or filter items
26
+ // (e.g. plot[plot_id == 1]).
27
+ // There is no actual array of node instances to index/filter at this (schema) level, so the
28
+ // result is always the referenced node def itself. Still evaluate the property expression,
29
+ // best-effort, so that any node def referenced inside an index/filter predicate (e.g. the
30
+ // "plot_id == 1" part above, or a predicate referencing sibling/cousin node defs via
31
+ // "$context") is registered as a dependency too. Errors are ignored here: this evaluation is
32
+ // only performed to detect dependencies as a side effect, not to compute an actual value, and
33
+ // it must not affect expression validation (e.g. NodeDefExpressionValidator) or cause other
34
+ // referenced node defs found so far to be discarded by the caller.
24
35
  try {
25
36
  yield this.evaluator.evaluateNode(property, Object.assign(Object.assign({}, this.context), { object: objectEval }));
26
37
  }
27
38
  catch (_a) {
39
+ // ignore
28
40
  }
29
41
  return objectEval;
30
42
  }
43
+ // eval property and return it (e.g. plot.plot_id)
44
+ // allow self node def reference because the referenced node at runtime can be different from current node
45
+ // e.g. current node = plot_id ; expression = parent(plot).plot[index(plot) - 1].plot_id
31
46
  const propertyNodeDefContext = this.determinePropertyNodeDefContext(objectEval);
32
47
  return this.evaluator.evaluateNode(property, Object.assign(Object.assign({}, this.context), { object: objectEval, nodeDefContext: propertyNodeDefContext, selfReferenceAllowed: true, memberProperty: true }));
33
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"member.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/member.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oEAAyE;AAGzE,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAA;AAE/E,MAAa,sBAAuB,SAAQ,wBAAyC;IAC7E,QAAQ,CAAC,cAAgC;;YAC7C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAA;YAErD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAE1E,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBAWb,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,kCACrC,IAAI,CAAC,OAAO,KACf,MAAM,EAAE,UAAU,IAClB,CAAA;gBACJ,CAAC;gBAAC,WAAM,CAAC;gBAET,CAAC;gBACD,OAAO,UAAU,CAAA;YACnB,CAAC;YAMD,MAAM,sBAAsB,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAA;YAE/E,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,kCACtC,IAAI,CAAC,OAAO,KACf,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,sBAAsB,EACtC,oBAAoB,EAAE,IAAI,EAC1B,cAAc,EAAE,IAAI,IACpB,CAAA;QACJ,CAAC;KAAA;IAED,+BAA+B,CAAC,UAAe;QAC7C,IAAI,SAAS,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAA;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;IACpC,CAAC;CACF;AAnDD,wDAmDC"}
1
+ {"version":3,"file":"member.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/member.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oEAAyE;AAGzE,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAA;AAE/E,MAAa,sBAAuB,SAAQ,wBAAyC;IAC7E,QAAQ,CAAC,cAAgC;;YAC7C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAA;YAErD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAC1E,4DAA4D;YAC5D,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,6EAA6E;gBAC7E,6BAA6B;gBAC7B,4FAA4F;gBAC5F,2FAA2F;gBAC3F,0FAA0F;gBAC1F,qFAAqF;gBACrF,6FAA6F;gBAC7F,8FAA8F;gBAC9F,4FAA4F;gBAC5F,mEAAmE;gBACnE,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,kCACrC,IAAI,CAAC,OAAO,KACf,MAAM,EAAE,UAAU,IAClB,CAAA;gBACJ,CAAC;gBAAC,WAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,OAAO,UAAU,CAAA;YACnB,CAAC;YAED,kDAAkD;YAClD,0GAA0G;YAC1G,wFAAwF;YAExF,MAAM,sBAAsB,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAA;YAE/E,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,kCACtC,IAAI,CAAC,OAAO,KACf,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,sBAAsB,EACtC,oBAAoB,EAAE,IAAI,EAC1B,cAAc,EAAE,IAAI,IACpB,CAAA;QACJ,CAAC;KAAA;IAED,+BAA+B,CAAC,UAAe;QAC7C,IAAI,SAAS,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAA;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;IACpC,CAAC;CACF;AAnDD,wDAmDC","sourcesContent":["import { MemberExpression } from '../../expression'\nimport { MemberEvaluator } from '../../expression/javascript/node/member'\nimport { NodeDefExpressionContext } from '../context'\n\nconst isNodeDef = (obj: any) => obj && typeof obj === 'object' && 'uuid' in obj\n\nexport class NodeDefMemberEvaluator extends MemberEvaluator<NodeDefExpressionContext> {\n async evaluate(expressionNode: MemberExpression): Promise<any> {\n const { object, property, computed } = expressionNode\n\n const objectEval = await this.evaluator.evaluateNode(object, this.context)\n // null or undefined object (e.g. parent of the root entity)\n if (objectEval === null || objectEval === undefined) {\n return null\n }\n if (computed) {\n // access element at index (e.g. plot[1] or plot[index(...)]) or filter items\n // (e.g. plot[plot_id == 1]).\n // There is no actual array of node instances to index/filter at this (schema) level, so the\n // result is always the referenced node def itself. Still evaluate the property expression,\n // best-effort, so that any node def referenced inside an index/filter predicate (e.g. the\n // \"plot_id == 1\" part above, or a predicate referencing sibling/cousin node defs via\n // \"$context\") is registered as a dependency too. Errors are ignored here: this evaluation is\n // only performed to detect dependencies as a side effect, not to compute an actual value, and\n // it must not affect expression validation (e.g. NodeDefExpressionValidator) or cause other\n // referenced node defs found so far to be discarded by the caller.\n try {\n await this.evaluator.evaluateNode(property, {\n ...this.context,\n object: objectEval,\n })\n } catch {\n // ignore\n }\n return objectEval\n }\n\n // eval property and return it (e.g. plot.plot_id)\n // allow self node def reference because the referenced node at runtime can be different from current node\n // e.g. current node = plot_id ; expression = parent(plot).plot[index(plot) - 1].plot_id\n\n const propertyNodeDefContext = this.determinePropertyNodeDefContext(objectEval)\n\n return this.evaluator.evaluateNode(property, {\n ...this.context,\n object: objectEval,\n nodeDefContext: propertyNodeDefContext,\n selfReferenceAllowed: true,\n memberProperty: true,\n })\n }\n\n determinePropertyNodeDefContext(objectEval: any): any {\n if (isNodeDef(objectEval)) return objectEval\n if (Array.isArray(objectEval) && isNodeDef(objectEval[0])) return objectEval[0]\n return this.context.nodeDefContext\n }\n}\n"]}
@@ -19,8 +19,10 @@ const classByObjectType = {
19
19
  };
20
20
  const _getJsType = (nodeDefOrValue) => {
21
21
  if (nodeDefOrValue.uuid) {
22
+ // the parameter is a nodeDef
22
23
  return jsTypeByNodeDefType[nodeDefOrValue.type];
23
24
  }
25
+ // the parameter is a value (number or string)
24
26
  return classByObjectType[typeof nodeDefOrValue];
25
27
  };
26
28
  const _hasProperty = (params) => {
@@ -48,6 +50,7 @@ const evalNodeDefProperty = (params) => {
48
50
  if (_hasProperty({ JsType, propName })) {
49
51
  return JsType[propName];
50
52
  }
53
+ // return function with name "propertyName" and bind it to an instance of JsType
51
54
  return JsType.prototype[propName].bind(new JsType());
52
55
  };
53
56
  exports.NodeNativeProperties = {
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefExpressionNativeProperties.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,qDAAiD;AAEjD,MAAM,gBAAgB,GAA8B;IAClD,MAAM,EAAE,QAAQ;CACjB,CAAA;AAED,MAAM,mBAAmB,GAAmC;IAC1D,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;IAC1B,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;IAC1B,CAAC,qBAAW,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7B,CAAC,qBAAW,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7B,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;CAC3B,CAAA;AAED,MAAM,iBAAiB,GAA2B;IAChD,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,cAAmB,EAAE,EAAE;IACzC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QAExB,OAAO,mBAAmB,CAAC,cAAc,CAAC,IAAmB,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,cAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACnC,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAiD,EAAE,EAAE;IAC9E,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3C,IAAI,QAAQ,KAAK,gBAAgB,CAAC,MAAM,IAAI,mBAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACvG,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAiD,EAAE,EAAE;IAChF,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3C,IAAI,QAAQ,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAEY,QAAA,oBAAoB,GAAG;IAClC,iBAAiB;IACjB,mBAAmB;CACpB,CAAA"}
1
+ {"version":3,"file":"nodeDefExpressionNativeProperties.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,qDAAiD;AAEjD,MAAM,gBAAgB,GAA8B;IAClD,MAAM,EAAE,QAAQ;CACjB,CAAA;AAED,MAAM,mBAAmB,GAAmC;IAC1D,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;IAC1B,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;IAC1B,CAAC,qBAAW,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7B,CAAC,qBAAW,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7B,CAAC,qBAAW,CAAC,IAAI,CAAC,EAAE,MAAM;CAC3B,CAAA;AAED,MAAM,iBAAiB,GAA2B;IAChD,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,cAAmB,EAAE,EAAE;IACzC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QACxB,6BAA6B;QAC7B,OAAO,mBAAmB,CAAC,cAAc,CAAC,IAAmB,CAAC,CAAA;IAChE,CAAC;IACD,8CAA8C;IAC9C,OAAO,iBAAiB,CAAC,OAAO,cAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACnC,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAiD,EAAE,EAAE;IAC9E,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3C,IAAI,QAAQ,KAAK,gBAAgB,CAAC,MAAM,IAAI,mBAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACvG,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAiD,EAAE,EAAE;IAChF,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3C,IAAI,QAAQ,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC;IACD,gFAAgF;IAChF,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAEY,QAAA,oBAAoB,GAAG;IAClC,iBAAiB;IACjB,mBAAmB;CACpB,CAAA","sourcesContent":["import { NodeDefType } from '../../nodeDef/nodeDef'\nimport { NodeDefs } from '../../nodeDef/nodeDefs'\n\nconst nativeProperties: { [key: string]: string } = {\n length: 'length',\n}\n\nconst jsTypeByNodeDefType: { [key in NodeDefType]?: any } = {\n [NodeDefType.code]: String,\n [NodeDefType.date]: String,\n [NodeDefType.decimal]: Number,\n [NodeDefType.integer]: Number,\n [NodeDefType.text]: String,\n}\n\nconst classByObjectType: { [key: string]: any } = {\n number: Number,\n string: String,\n}\n\nconst _getJsType = (nodeDefOrValue: any) => {\n if (nodeDefOrValue.uuid) {\n // the parameter is a nodeDef\n return jsTypeByNodeDefType[nodeDefOrValue.type as NodeDefType]\n }\n // the parameter is a value (number or string)\n return classByObjectType[typeof nodeDefOrValue]\n}\n\nconst _hasProperty = (params: { JsType: any; propName: string }) => {\n const { JsType, propName } = params\n return Object.hasOwn(JsType, propName)\n}\n\nconst _hasFunction = (params: { JsType: any; funcName: string }) => {\n const { JsType, funcName } = params\n return Boolean(JsType.prototype[funcName])\n}\n\nconst hasNativeProperty = (params: { nodeDefOrValue: any; propName: string }) => {\n const { nodeDefOrValue, propName } = params\n if (propName === nativeProperties.length && NodeDefs.isMultiple(nodeDefOrValue)) {\n return true\n }\n const JsType = _getJsType(nodeDefOrValue)\n return JsType && (_hasProperty({ JsType, propName }) || _hasFunction({ JsType, funcName: propName }))\n}\n\nconst evalNodeDefProperty = (params: { nodeDefOrValue: any; propName: string }) => {\n const { nodeDefOrValue, propName } = params\n if (propName === nativeProperties.length) {\n return 0\n }\n const JsType = _getJsType(nodeDefOrValue)\n if (_hasProperty({ JsType, propName })) {\n return JsType[propName]\n }\n // return function with name \"propertyName\" and bind it to an instance of JsType\n return JsType.prototype[propName].bind(new JsType())\n}\n\nexport const NodeNativeProperties = {\n hasNativeProperty,\n evalNodeDefProperty,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"thisEvaluator.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/thisEvaluator.ts"],"names":[],"mappings":";;;AAAA,gFAA4E;AAC5E,gEAAqE;AACrE,mDAAmD;AACnD,qDAAiD;AAGjD,kEAA8D;AAG9D,MAAa,oBAAqB,SAAQ,oBAAuC;IAC/E,QAAQ;QACN,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAEpD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAC/E,CAAC;IAED,eAAe;QACb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/C,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QAEhC,IAAI,cAAc,CAAC,IAAI,KAAK,qBAAW,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,YAAY,GAAG,mBAAQ,CAAC,eAAe,CAAC,cAA6B,CAAC,CAAA;YAC5E,OAAO,YAAY,CAAC,CAAC,CAAC,6CAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3F,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,KAAK,qBAAW,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,mBAAQ,CAAC,eAAe,CAAC,cAA8B,CAAC,CAAA;YAC7E,OAAO,YAAY,CAAC,CAAC,CAAC,+BAAc,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACrF,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AArBD,oDAqBC"}
1
+ {"version":3,"file":"thisEvaluator.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/node/thisEvaluator.ts"],"names":[],"mappings":";;;AAAA,gFAA4E;AAC5E,gEAAqE;AACrE,mDAAmD;AACnD,qDAAiD;AAGjD,kEAA8D;AAG9D,MAAa,oBAAqB,SAAQ,oBAAuC;IAC/E,QAAQ;QACN,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAEpD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAC/E,CAAC;IAED,eAAe;QACb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/C,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QAEhC,IAAI,cAAc,CAAC,IAAI,KAAK,qBAAW,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,YAAY,GAAG,mBAAQ,CAAC,eAAe,CAAC,cAA6B,CAAC,CAAA;YAC5E,OAAO,YAAY,CAAC,CAAC,CAAC,6CAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3F,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,KAAK,qBAAW,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,mBAAQ,CAAC,eAAe,CAAC,cAA8B,CAAC,CAAA;YAC7E,OAAO,YAAY,CAAC,CAAC,CAAC,+BAAc,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACrF,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AArBD,oDAqBC","sourcesContent":["import { CategoryItemGenerator } from '../../category/categoryItemGenerator'\nimport { ThisEvaluator } from '../../expression/javascript/node/this'\nimport { NodeDefType } from '../../nodeDef/nodeDef'\nimport { NodeDefs } from '../../nodeDef/nodeDefs'\nimport { NodeDefCode } from '../../nodeDef/types/code'\nimport { NodeDefTaxon } from '../../nodeDef/types/taxon'\nimport { TaxonGenerator } from '../../taxonomy/taxonGenerator'\nimport { NodeDefExpressionContext } from '../context'\n\nexport class NodeDefThisEvaluator extends ThisEvaluator<NodeDefExpressionContext> {\n evaluate(): Promise<any> {\n const { nodeDefCurrent, itemsFilter } = this.context\n\n return Promise.resolve(itemsFilter ? this.createEmptyItem() : nodeDefCurrent)\n }\n\n createEmptyItem() {\n const { survey, nodeDefCurrent } = this.context\n if (!nodeDefCurrent) return null\n\n if (nodeDefCurrent.type === NodeDefType.code) {\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDefCurrent as NodeDefCode)\n return categoryUuid ? CategoryItemGenerator.generateItem({ survey, categoryUuid }) : null\n }\n if (nodeDefCurrent.type === NodeDefType.taxon) {\n const taxonomyUuid = NodeDefs.getTaxonomyUuid(nodeDefCurrent as NodeDefTaxon)\n return taxonomyUuid ? TaxonGenerator.generateTaxon({ survey, taxonomyUuid }) : null\n }\n return null\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"taxonProvider.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/taxonProvider.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"taxonProvider.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/taxonProvider.ts"],"names":[],"mappings":"","sourcesContent":["import { Survey } from '../survey'\nimport { Taxon } from '../taxonomy'\n\nexport interface TaxonProvider {\n getTaxonByCode: (params: {\n survey: Survey\n taxonomyUuid: string\n taxonCode: string\n draft: boolean\n }) => Promise<Taxon | undefined>\n getTaxonByUuid: (params: {\n survey: Survey\n taxonomyUuid: string\n taxonUuid: string\n draft: boolean\n }) => Promise<Taxon | undefined>\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,yDAA6D;AAC7D,8CAAyE;AACzE,kDAA8C;AAE9C,2CAAwD;AACxD,oCAAsC;AAEtC,MAAM,uBAAuB,GAAG,CAAC,MAAwD,EAAE,EAAE;;IAC3F,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;IAEzC,MAAM,cAAc,GAAG,mBAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAA,2BAAgB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;IAEzD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,0CAAE,IAAI,EAAE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA;AAED,MAAa,0BAA2B,SAAQ,sCAA0B;IAClE,QAAQ,CACZ,MAEC;;;YAED,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAA;YAC1F,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;gBAEjG,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAA;gBAChD,MAAM,gBAAgB,mCAAQ,MAAM,KAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,sBAAsB,GAAE,CAAA;gBAEtG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;gBAEjD,OAAO;oBACL,gBAAgB,EAAE,oCAAuB,CAAC,cAAc,EAAE;oBAC1D,sBAAsB;iBACvB,CAAA;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,KAAK,YAAY,mBAAW,CAAA;gBAClD,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAA;gBAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAA,KAAK,CAAC,WAAW,mCAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;gBAChG,OAAO;oBACL,gBAAgB,EAAE,oCAAuB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;oBACvF,sBAAsB,EAAE,IAAI,GAAG,EAAE;iBAClC,CAAA;YACH,CAAC;QACH,CAAC;KAAA;CACF;AA7BD,gEA6BC"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,yDAA6D;AAC7D,8CAAyE;AACzE,kDAA8C;AAE9C,2CAAwD;AACxD,oCAAsC;AAEtC,MAAM,uBAAuB,GAAG,CAAC,MAAwD,EAAE,EAAE;;IAC3F,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;IAEzC,MAAM,cAAc,GAAG,mBAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAA,2BAAgB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;IAEzD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,0CAAE,IAAI,EAAE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA;AAED,MAAa,0BAA2B,SAAQ,sCAA0B;IAClE,QAAQ,CACZ,MAEC;;;YAED,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAA;YAC1F,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;gBAEjG,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAA;gBAChD,MAAM,gBAAgB,mCAAQ,MAAM,KAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,sBAAsB,GAAE,CAAA;gBAEtG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;gBAEjD,OAAO;oBACL,gBAAgB,EAAE,oCAAuB,CAAC,cAAc,EAAE;oBAC1D,sBAAsB;iBACvB,CAAA;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,KAAK,YAAY,mBAAW,CAAA;gBAClD,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAA;gBAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAA,KAAK,CAAC,WAAW,mCAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;gBAChG,OAAO;oBACL,gBAAgB,EAAE,oCAAuB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;oBACvF,sBAAsB,EAAE,IAAI,GAAG,EAAE;iBAClC,CAAA;YACH,CAAC;QACH,CAAC;KAAA;CACF;AA7BD,gEA6BC","sourcesContent":["import { NodeDef } from '../nodeDef'\nimport { Survey } from '../survey'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\nimport { ValidationResult, ValidationResultFactory } from '../validation'\nimport { NodeDefs } from '../nodeDef/nodeDefs'\nimport { NodeDefExpressionContext } from './context'\nimport { NodeDefExpressionEvaluator } from './evaluator'\nimport { SystemError } from '../error'\n\nconst determineNodeDefContext = (params: { survey: Survey; nodeDefCurrent: NodeDef<any> }) => {\n const { survey, nodeDefCurrent } = params\n\n const nodeDefContext = NodeDefs.isRoot(nodeDefCurrent)\n ? nodeDefCurrent\n : getNodeDefParent({ survey, nodeDef: nodeDefCurrent })\n\n if (!nodeDefContext) {\n throw new Error(`Cannot find context nodeDef: ${nodeDefCurrent?.props?.name}`)\n }\n return nodeDefContext\n}\n\nexport class NodeDefExpressionValidator extends NodeDefExpressionEvaluator {\n async validate(\n params: NodeDefExpressionContext & {\n expression: string\n }\n ): Promise<{ validationResult: ValidationResult; referencedNodeDefUuids: Set<string> }> {\n const { expression, survey, nodeDefCurrent, nodeDefContext: nodeDefContextParam } = params\n try {\n const nodeDefContext = nodeDefContextParam ?? determineNodeDefContext({ survey, nodeDefCurrent })\n\n const referencedNodeDefUuids = new Set<string>()\n const evaluationParams = { ...params, nodeDefContext, object: nodeDefCurrent, referencedNodeDefUuids }\n\n await this.evaluate(expression, evaluationParams)\n\n return {\n validationResult: ValidationResultFactory.createInstance(),\n referencedNodeDefUuids,\n }\n } catch (error: any) {\n const isSystemError = error instanceof SystemError\n const key = isSystemError ? error.key : 'expression.invalid'\n const params = isSystemError ? error.params : { details: error.description ?? error.toString() }\n return {\n validationResult: ValidationResultFactory.createInstance({ valid: false, key, params }),\n referencedNodeDefUuids: new Set(),\n }\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { NodeDef, NodeDefProps, NodeDefType } from '../../nodeDef';
2
+ import { SurveyDependencyType } from '../../survey/survey';
3
+ export declare const NodeDefSelfReferences: {
4
+ isSelfReferenceLocal: (params: {
5
+ nodeDef: NodeDef<NodeDefType, NodeDefProps>;
6
+ dependencyType: SurveyDependencyType;
7
+ }) => boolean;
8
+ };
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeDefSelfReferences = void 0;
4
+ const expression_1 = require("../../expression");
5
+ const evaluator_1 = require("../../expression/javascript/evaluator");
6
+ const nodeDef_1 = require("../../nodeDef");
7
+ const survey_1 = require("../../survey/survey");
8
+ /**
9
+ * True if the identifier is used as (or inside) the property of a member expression (e.g. "dbh" in
10
+ * "parent(tree).tree.dbh" or in "tree[dbh > 10]"): there it can refer to nodes outside the context entity.
11
+ */
12
+ const isReferencedThroughMember = (params) => {
13
+ const { expressionNode, name, inMemberProperty } = params;
14
+ if (!expressionNode || typeof expressionNode !== 'object')
15
+ return false;
16
+ if (Array.isArray(expressionNode)) {
17
+ return expressionNode.some((item) => isReferencedThroughMember({ expressionNode: item, name, inMemberProperty }));
18
+ }
19
+ const { type } = expressionNode;
20
+ if (type === expression_1.ExpressionNodeType.Identifier) {
21
+ return inMemberProperty && expressionNode.name === name;
22
+ }
23
+ if (type === expression_1.ExpressionNodeType.Member) {
24
+ const { object, property } = expressionNode;
25
+ return (isReferencedThroughMember({ expressionNode: object, name, inMemberProperty }) ||
26
+ isReferencedThroughMember({ expressionNode: property, name, inMemberProperty: true }));
27
+ }
28
+ return Object.values(expressionNode).some((child) => isReferencedThroughMember({ expressionNode: child, name, inMemberProperty }));
29
+ };
30
+ const isExpressionSelfReferenceLocal = (params) => {
31
+ const { expression, name } = params;
32
+ if (!expression)
33
+ return true;
34
+ try {
35
+ return !isReferencedThroughMember({ expressionNode: (0, evaluator_1.parseExpression)(expression), name, inMemberProperty: false });
36
+ }
37
+ catch (_a) {
38
+ // invalid expression: be conservative
39
+ return false;
40
+ }
41
+ };
42
+ /**
43
+ * Returns true if the node def references itself in its expressions of the specified dependency type only
44
+ * as a plain identifier (e.g. "dbh > 0" in a validation of "dbh"): such a reference is resolved among the
45
+ * children of the node's parent entity, so only the node and its siblings depend on it, not every node with
46
+ * the same node def in the record.
47
+ */
48
+ const isSelfReferenceLocal = (params) => {
49
+ const { nodeDef, dependencyType } = params;
50
+ // self references by plain identifier are allowed only in validation expressions (see dependencies.ts)
51
+ if (dependencyType !== survey_1.SurveyDependencyType.validations)
52
+ return false;
53
+ const name = nodeDef_1.NodeDefs.getName(nodeDef);
54
+ return nodeDef_1.NodeDefs.getValidationsExpressions(nodeDef).every(({ expression, applyIf }) => isExpressionSelfReferenceLocal({ expression, name }) &&
55
+ isExpressionSelfReferenceLocal({ expression: applyIf, name }));
56
+ };
57
+ exports.NodeDefSelfReferences = {
58
+ isSelfReferenceLocal,
59
+ };
60
+ //# sourceMappingURL=nodeDefSelfReferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeDefSelfReferences.js","sourceRoot":"","sources":["../../../src/record/_records/nodeDefSelfReferences.ts"],"names":[],"mappings":";;;AAAA,iDAA6G;AAC7G,qEAAuE;AACvE,2CAA4E;AAC5E,gDAA0D;AAE1D;;;GAGG;AACH,MAAM,yBAAyB,GAAG,CAAC,MAIlC,EAAW,EAAE;IACZ,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAA;IACzD,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACnH,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,cAAoD,CAAA;IACrE,IAAI,IAAI,KAAK,+BAAkB,CAAC,UAAU,EAAE,CAAC;QAC3C,OAAO,gBAAgB,IAAK,cAAuC,CAAC,IAAI,KAAK,IAAI,CAAA;IACnF,CAAC;IACD,IAAI,IAAI,KAAK,+BAAkB,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAkC,CAAA;QAC/D,OAAO,CACL,yBAAyB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;YAC7E,yBAAyB,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CACtF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClD,yBAAyB,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAC7E,CAAA;AACH,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG,CAAC,MAAwD,EAAW,EAAE;IAC3G,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,CAAC;QACH,OAAO,CAAC,yBAAyB,CAAC,EAAE,cAAc,EAAE,IAAA,2BAAe,EAAC,UAAU,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAA;IACnH,CAAC;IAAC,WAAM,CAAC;QACP,sCAAsC;QACtC,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,CAAC,MAG7B,EAAW,EAAE;IACZ,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;IAC1C,uGAAuG;IACvG,IAAI,cAAc,KAAK,6BAAoB,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IACrE,MAAM,IAAI,GAAG,kBAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,OAAO,kBAAQ,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,KAAK,CACtD,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,8BAA8B,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpD,8BAA8B,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAChE,CAAA;AACH,CAAC,CAAA;AAEY,QAAA,qBAAqB,GAAG;IACnC,oBAAoB;CACrB,CAAA","sourcesContent":["import { ExpressionNode, ExpressionNodeType, IdentifierExpression, MemberExpression } from '../../expression'\nimport { parseExpression } from '../../expression/javascript/evaluator'\nimport { NodeDef, NodeDefProps, NodeDefs, NodeDefType } from '../../nodeDef'\nimport { SurveyDependencyType } from '../../survey/survey'\n\n/**\n * True if the identifier is used as (or inside) the property of a member expression (e.g. \"dbh\" in\n * \"parent(tree).tree.dbh\" or in \"tree[dbh > 10]\"): there it can refer to nodes outside the context entity.\n */\nconst isReferencedThroughMember = (params: {\n expressionNode: unknown\n name: string\n inMemberProperty: boolean\n}): boolean => {\n const { expressionNode, name, inMemberProperty } = params\n if (!expressionNode || typeof expressionNode !== 'object') return false\n if (Array.isArray(expressionNode)) {\n return expressionNode.some((item) => isReferencedThroughMember({ expressionNode: item, name, inMemberProperty }))\n }\n const { type } = expressionNode as ExpressionNode<ExpressionNodeType>\n if (type === ExpressionNodeType.Identifier) {\n return inMemberProperty && (expressionNode as IdentifierExpression).name === name\n }\n if (type === ExpressionNodeType.Member) {\n const { object, property } = expressionNode as MemberExpression\n return (\n isReferencedThroughMember({ expressionNode: object, name, inMemberProperty }) ||\n isReferencedThroughMember({ expressionNode: property, name, inMemberProperty: true })\n )\n }\n return Object.values(expressionNode).some((child) =>\n isReferencedThroughMember({ expressionNode: child, name, inMemberProperty })\n )\n}\n\nconst isExpressionSelfReferenceLocal = (params: { expression: string | undefined; name: string }): boolean => {\n const { expression, name } = params\n if (!expression) return true\n try {\n return !isReferencedThroughMember({ expressionNode: parseExpression(expression), name, inMemberProperty: false })\n } catch {\n // invalid expression: be conservative\n return false\n }\n}\n\n/**\n * Returns true if the node def references itself in its expressions of the specified dependency type only\n * as a plain identifier (e.g. \"dbh > 0\" in a validation of \"dbh\"): such a reference is resolved among the\n * children of the node's parent entity, so only the node and its siblings depend on it, not every node with\n * the same node def in the record.\n */\nconst isSelfReferenceLocal = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n dependencyType: SurveyDependencyType\n}): boolean => {\n const { nodeDef, dependencyType } = params\n // self references by plain identifier are allowed only in validation expressions (see dependencies.ts)\n if (dependencyType !== SurveyDependencyType.validations) return false\n const name = NodeDefs.getName(nodeDef)\n return NodeDefs.getValidationsExpressions(nodeDef).every(\n ({ expression, applyIf }) =>\n isExpressionSelfReferenceLocal({ expression, name }) &&\n isExpressionSelfReferenceLocal({ expression: applyIf, name })\n )\n}\n\nexport const NodeDefSelfReferences = {\n isSelfReferenceLocal,\n}\n"]}
@@ -11,16 +11,28 @@ export declare const getEntityCompletionStats: (params: {
11
11
  entity: Node;
12
12
  includeNestedEntities?: boolean;
13
13
  }) => EntityCompletionStats;
14
+ /**
15
+ * Returns the percentage of completion of the given entity (0-100), considering every descendant recursively.
16
+ * A required or key attribute is considered filled when it has a non empty value; multiple attributes and
17
+ * entities are considered filled based on their min count (see Nodes.getChildrenMinCount).
18
+ */
14
19
  export declare const getEntityCompletionPercent: (params: {
15
20
  survey: Survey;
16
21
  record: Record;
17
22
  entity: Node;
18
23
  }) => number;
24
+ /**
25
+ * Returns the percentage of completion of the given entity (0-100), considering only its own attributes
26
+ * (nested entities are ignored).
27
+ */
19
28
  export declare const getEntityOwnCompletionPercent: (params: {
20
29
  survey: Survey;
21
30
  record: Record;
22
31
  entity: Node;
23
32
  }) => number;
33
+ /**
34
+ * Returns the percentage of completion of the given record (0-100), i.e. the completion of its root entity.
35
+ */
24
36
  export declare const getRecordCompletionPercent: (params: {
25
37
  survey: Survey;
26
38
  record: Record;
@@ -34,12 +34,14 @@ const getChildEntityCompletionStats = (params) => {
34
34
  }
35
35
  const minCountRaw = node_1.Nodes.getChildrenMinCount({ parentNode: parentEntity, nodeDef });
36
36
  const minCount = Number.isNaN(minCountRaw) ? 0 : Math.max(minCountRaw, 0);
37
+ // entities added beyond the min count are still expected to be complete
37
38
  const expectedCount = Math.max(minCount, childEntities.length);
38
39
  if (expectedCount === 0)
39
40
  return emptyStats();
40
41
  const stats = emptyStats();
41
42
  for (let index = 0; index < expectedCount; index++) {
42
43
  const childEntity = childEntities[index];
44
+ // a missing repetition (below the min count) counts as a single incomplete unit
43
45
  addStats(stats, childEntity ? (0, exports.getEntityCompletionStats)({ survey, record, entity: childEntity }) : { total: 1, filled: 0 });
44
46
  }
45
47
  return stats;
@@ -70,10 +72,22 @@ const toCompletionPercent = (stats) => {
70
72
  return 100;
71
73
  return utils_1.Numbers.roundToPrecision((filled / total) * 100, 2);
72
74
  };
75
+ /**
76
+ * Returns the percentage of completion of the given entity (0-100), considering every descendant recursively.
77
+ * A required or key attribute is considered filled when it has a non empty value; multiple attributes and
78
+ * entities are considered filled based on their min count (see Nodes.getChildrenMinCount).
79
+ */
73
80
  const getEntityCompletionPercent = (params) => toCompletionPercent((0, exports.getEntityCompletionStats)(params));
74
81
  exports.getEntityCompletionPercent = getEntityCompletionPercent;
82
+ /**
83
+ * Returns the percentage of completion of the given entity (0-100), considering only its own attributes
84
+ * (nested entities are ignored).
85
+ */
75
86
  const getEntityOwnCompletionPercent = (params) => toCompletionPercent((0, exports.getEntityCompletionStats)(Object.assign(Object.assign({}, params), { includeNestedEntities: false })));
76
87
  exports.getEntityOwnCompletionPercent = getEntityOwnCompletionPercent;
88
+ /**
89
+ * Returns the percentage of completion of the given record (0-100), i.e. the completion of its root entity.
90
+ */
77
91
  const getRecordCompletionPercent = (params) => {
78
92
  const { survey, record } = params;
79
93
  const rootEntity = (0, recordGetters_1.getRoot)(record);