@openforis/arena-core 2.3.36 → 2.3.39

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 (383) hide show
  1. package/dist/auth/authGroup.js.map +1 -1
  2. package/dist/auth/authGroups.d.ts +21 -11
  3. package/dist/auth/authGroups.js.map +1 -1
  4. package/dist/auth/authorizer.d.ts +64 -38
  5. package/dist/auth/authorizer.js.map +1 -1
  6. package/dist/auth/permission.js.map +1 -1
  7. package/dist/auth/user.js.map +1 -1
  8. package/dist/auth/users.d.ts +19 -9
  9. package/dist/auth/users.js +3 -2
  10. package/dist/auth/users.js.map +1 -1
  11. package/dist/category/categories.d.ts +7 -3
  12. package/dist/category/categories.js.map +1 -1
  13. package/dist/category/categoryImportSummary.js.map +1 -1
  14. package/dist/category/categoryItemGenerator.d.ts +6 -4
  15. package/dist/category/categoryItems.d.ts +9 -4
  16. package/dist/category/categoryItems.js +2 -1
  17. package/dist/category/categoryItems.js.map +1 -1
  18. package/dist/category/factory.js.map +1 -1
  19. package/dist/chain/chain.js.map +1 -1
  20. package/dist/common/index.js.map +1 -1
  21. package/dist/dataExport/FlatDataExportModel.js.map +1 -1
  22. package/dist/dataExport/FlatDataExportOptions.js.map +1 -1
  23. package/dist/dataExport/FlatDataFiles.d.ts +7 -5
  24. package/dist/dataExport/UniqueFileNamesGenerator.js.map +1 -1
  25. package/dist/dataQuery/dataQuery.js.map +1 -1
  26. package/dist/dataQuery/dataQuerySummaries.d.ts +28 -15
  27. package/dist/dataQuery/dataQuerySummaries.js +3 -3
  28. package/dist/dataQuery/dataQuerySummaries.js.map +1 -1
  29. package/dist/error/SystemError.js.map +1 -1
  30. package/dist/esm/auth/authGroups.js.map +1 -1
  31. package/dist/esm/auth/users.js +3 -2
  32. package/dist/esm/auth/users.js.map +1 -1
  33. package/dist/esm/category/categories.js.map +1 -1
  34. package/dist/esm/category/categoryItems.js +2 -1
  35. package/dist/esm/category/categoryItems.js.map +1 -1
  36. package/dist/esm/dataExport/FlatDataExportModel.js.map +1 -1
  37. package/dist/esm/dataQuery/dataQuerySummaries.js +3 -3
  38. package/dist/esm/dataQuery/dataQuerySummaries.js.map +1 -1
  39. package/dist/esm/expression/javascript/evaluator.js.map +1 -1
  40. package/dist/esm/extraProp/extraProps.js.map +1 -1
  41. package/dist/esm/geo/pointFactory.js.map +1 -1
  42. package/dist/esm/geo/points/bearing.js +1 -1
  43. package/dist/esm/geo/points/bearing.js.map +1 -1
  44. package/dist/esm/geo/points/distance.js +1 -1
  45. package/dist/esm/geo/points/distance.js.map +1 -1
  46. package/dist/esm/geo/points/isValid.js.map +1 -1
  47. package/dist/esm/geo/points/transform.js.map +1 -1
  48. package/dist/esm/job/JobBase.js +4 -3
  49. package/dist/esm/job/JobBase.js.map +1 -1
  50. package/dist/esm/message/messages.js +9 -8
  51. package/dist/esm/message/messages.js.map +1 -1
  52. package/dist/esm/node/factory.js +2 -1
  53. package/dist/esm/node/factory.js.map +1 -1
  54. package/dist/esm/node/nodeValueFormatter.js +2 -1
  55. package/dist/esm/node/nodeValueFormatter.js.map +1 -1
  56. package/dist/esm/node/nodeValues.js +3 -2
  57. package/dist/esm/node/nodeValues.js.map +1 -1
  58. package/dist/esm/node/nodes.js +4 -4
  59. package/dist/esm/node/nodes.js.map +1 -1
  60. package/dist/esm/nodeDef/nodeDefs.js +10 -10
  61. package/dist/esm/nodeDef/nodeDefs.js.map +1 -1
  62. package/dist/esm/nodeDefExpressionEvaluator/evaluator.js.map +1 -1
  63. package/dist/esm/nodeDefExpressionEvaluator/functions.js.map +1 -1
  64. package/dist/esm/nodeDefExpressionEvaluator/node/identifier.js +3 -2
  65. package/dist/esm/nodeDefExpressionEvaluator/node/identifier.js.map +1 -1
  66. package/dist/esm/nodeDefExpressionEvaluator/node/member.js.map +1 -1
  67. package/dist/esm/nodeDefExpressionEvaluator/validator.js.map +1 -1
  68. package/dist/esm/record/_records/nodeDefSelfReferences.js.map +1 -1
  69. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  70. package/dist/esm/record/_records/recordNodesIndexReader.js +6 -4
  71. package/dist/esm/record/_records/recordNodesIndexReader.js.map +1 -1
  72. package/dist/esm/record/_records/recordNodesIndexUpdater.js +10 -7
  73. package/dist/esm/record/_records/recordNodesIndexUpdater.js.map +1 -1
  74. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  75. package/dist/esm/record/_records/recordUpdater.js.map +1 -1
  76. package/dist/esm/record/factory.js +2 -1
  77. package/dist/esm/record/factory.js.map +1 -1
  78. package/dist/esm/record/recordCloner.js +2 -1
  79. package/dist/esm/record/recordCloner.js.map +1 -1
  80. package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
  81. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +3 -2
  82. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  83. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js +4 -7
  84. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  85. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  86. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  87. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  88. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  89. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  90. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  91. package/dist/esm/record/recordUpdater.js.map +1 -1
  92. package/dist/esm/record/recordValidator/attributeTypeValidator.js +2 -2
  93. package/dist/esm/record/recordValidator/attributeTypeValidator.js.map +1 -1
  94. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  95. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  96. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  97. package/dist/esm/survey/nodeDefsFixer.js.map +1 -1
  98. package/dist/esm/survey/refData/factory.js +3 -2
  99. package/dist/esm/survey/refData/factory.js.map +1 -1
  100. package/dist/esm/survey/surveyDocImageFactory.js.map +1 -1
  101. package/dist/esm/survey/surveyDocImages.js.map +1 -1
  102. package/dist/esm/survey/surveyFileFactory.js.map +1 -1
  103. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  104. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  105. package/dist/esm/survey/surveys/dependencies.js +2 -1
  106. package/dist/esm/survey/surveys/dependencies.js.map +1 -1
  107. package/dist/esm/survey/surveys/nodeDefs.js +4 -2
  108. package/dist/esm/survey/surveys/nodeDefs.js.map +1 -1
  109. package/dist/esm/survey/surveys/refsData.js +2 -1
  110. package/dist/esm/survey/surveys/refsData.js.map +1 -1
  111. package/dist/esm/survey/surveys/surveyGettersSecurity.js +1 -4
  112. package/dist/esm/survey/surveys/surveyGettersSecurity.js.map +1 -1
  113. package/dist/esm/survey/surveys/surveysGetters.js +5 -7
  114. package/dist/esm/survey/surveys/surveysGetters.js.map +1 -1
  115. package/dist/esm/taxonomy/taxa.js.map +1 -1
  116. package/dist/esm/taxonomy/taxonomies.js.map +1 -1
  117. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  118. package/dist/esm/tests/builder/recordBuilder/index.js.map +1 -1
  119. package/dist/esm/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  120. package/dist/esm/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  121. package/dist/esm/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  122. package/dist/esm/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  123. package/dist/esm/utils/_objects/camelize.js.map +1 -1
  124. package/dist/esm/utils/arrays.js.map +1 -1
  125. package/dist/esm/utils/dates.js.map +1 -1
  126. package/dist/esm/utils/fileNames.js.map +1 -1
  127. package/dist/esm/utils/fileProcessor.js +2 -1
  128. package/dist/esm/utils/fileProcessor.js.map +1 -1
  129. package/dist/esm/utils/numbers.js.map +1 -1
  130. package/dist/esm/utils/queue.js.map +1 -1
  131. package/dist/esm/utils/versions.js.map +1 -1
  132. package/dist/esm/validation/factory.js.map +1 -1
  133. package/dist/esm/validation/fieldValidators/numeric.js.map +1 -1
  134. package/dist/esm/validation/fieldValidators/numericPositive.js.map +1 -1
  135. package/dist/esm/validation/validationResults.js +1 -1
  136. package/dist/esm/validation/validationResults.js.map +1 -1
  137. package/dist/esm/validation/validations.js +2 -2
  138. package/dist/esm/validation/validations.js.map +1 -1
  139. package/dist/esm/validation/validator.js.map +1 -1
  140. package/dist/expression/javascript/evaluator.js.map +1 -1
  141. package/dist/expression/javascript/global.js.map +1 -1
  142. package/dist/expression/javascript/node/array.js.map +1 -1
  143. package/dist/expression/javascript/node/binary.js.map +1 -1
  144. package/dist/expression/javascript/node/call.js.map +1 -1
  145. package/dist/expression/javascript/node/compound.js.map +1 -1
  146. package/dist/expression/javascript/node/conditional.js.map +1 -1
  147. package/dist/expression/javascript/node/identifier.js.map +1 -1
  148. package/dist/expression/javascript/node/literal.js.map +1 -1
  149. package/dist/expression/javascript/node/member.js.map +1 -1
  150. package/dist/expression/javascript/node/sequence.js.map +1 -1
  151. package/dist/expression/javascript/node/this.js.map +1 -1
  152. package/dist/expression/javascript/node/unary.js.map +1 -1
  153. package/dist/expression/javascript/parser/jsep.js.map +1 -1
  154. package/dist/expression/javascript/parser/parser.js.map +1 -1
  155. package/dist/expression/node.js.map +1 -1
  156. package/dist/expression/variable.js.map +1 -1
  157. package/dist/extraProp/extraProp.js.map +1 -1
  158. package/dist/extraProp/extraProps.d.ts +9 -6
  159. package/dist/extraProp/extraProps.js.map +1 -1
  160. package/dist/extraProp/extraPropsDataGenerator.d.ts +7 -5
  161. package/dist/geo/pointFactory.js.map +1 -1
  162. package/dist/geo/points/bearing.js +5 -2
  163. package/dist/geo/points/bearing.js.map +1 -1
  164. package/dist/geo/points/distance.js +5 -2
  165. package/dist/geo/points/distance.js.map +1 -1
  166. package/dist/geo/points/equals.js.map +1 -1
  167. package/dist/geo/points/getSrs.js.map +1 -1
  168. package/dist/geo/points/index.d.ts +18 -14
  169. package/dist/geo/points/isFilled.js.map +1 -1
  170. package/dist/geo/points/isValid.js.map +1 -1
  171. package/dist/geo/points/parse.js.map +1 -1
  172. package/dist/geo/points/pointAtDistance.js.map +1 -1
  173. package/dist/geo/points/toLatLong.js.map +1 -1
  174. package/dist/geo/points/toString.js.map +1 -1
  175. package/dist/geo/points/transform.js.map +1 -1
  176. package/dist/job/JobBase.js +4 -3
  177. package/dist/job/JobBase.js.map +1 -1
  178. package/dist/job/jobEvent.js.map +1 -1
  179. package/dist/job/status.js.map +1 -1
  180. package/dist/language/languageCode.js.map +1 -1
  181. package/dist/language/languages.js.map +1 -1
  182. package/dist/message/message.js.map +1 -1
  183. package/dist/message/messages.d.ts +54 -28
  184. package/dist/message/messages.js +9 -8
  185. package/dist/message/messages.js.map +1 -1
  186. package/dist/node/factory.js +2 -1
  187. package/dist/node/factory.js.map +1 -1
  188. package/dist/node/node.js.map +1 -1
  189. package/dist/node/nodeValueFormatter.d.ts +2 -1
  190. package/dist/node/nodeValueFormatter.js +2 -1
  191. package/dist/node/nodeValueFormatter.js.map +1 -1
  192. package/dist/node/nodeValueProps.js.map +1 -1
  193. package/dist/node/nodeValues.d.ts +62 -41
  194. package/dist/node/nodeValues.js +3 -2
  195. package/dist/node/nodeValues.js.map +1 -1
  196. package/dist/node/nodes.d.ts +112 -86
  197. package/dist/node/nodes.js +4 -4
  198. package/dist/node/nodes.js.map +1 -1
  199. package/dist/nodeDef/nodeDef.js.map +1 -1
  200. package/dist/nodeDef/nodeDefs.d.ts +173 -86
  201. package/dist/nodeDef/nodeDefs.js +10 -10
  202. package/dist/nodeDef/nodeDefs.js.map +1 -1
  203. package/dist/nodeDef/types/entity.js.map +1 -1
  204. package/dist/nodeDef/types/file.js.map +1 -1
  205. package/dist/nodeDef/types/formHeader.js.map +1 -1
  206. package/dist/nodeDef/types/text.js.map +1 -1
  207. package/dist/nodeDefExpressionEvaluator/evaluator.js.map +1 -1
  208. package/dist/nodeDefExpressionEvaluator/functions.js.map +1 -1
  209. package/dist/nodeDefExpressionEvaluator/node/identifier.js +3 -2
  210. package/dist/nodeDefExpressionEvaluator/node/identifier.js.map +1 -1
  211. package/dist/nodeDefExpressionEvaluator/node/member.js.map +1 -1
  212. package/dist/nodeDefExpressionEvaluator/node/nodeDefExpressionNativeProperties.d.ts +11 -8
  213. package/dist/nodeDefExpressionEvaluator/node/thisEvaluator.d.ts +1 -1
  214. package/dist/nodeDefExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  215. package/dist/nodeDefExpressionEvaluator/validator.js.map +1 -1
  216. package/dist/record/_records/nodeDefSelfReferences.d.ts +12 -4
  217. package/dist/record/_records/nodeDefSelfReferences.js.map +1 -1
  218. package/dist/record/_records/recordCompletion.js.map +1 -1
  219. package/dist/record/_records/recordGetters.js.map +1 -1
  220. package/dist/record/_records/recordNodesIndexReader.d.ts +14 -8
  221. package/dist/record/_records/recordNodesIndexReader.js +6 -4
  222. package/dist/record/_records/recordNodesIndexReader.js.map +1 -1
  223. package/dist/record/_records/recordNodesIndexUpdater.d.ts +22 -12
  224. package/dist/record/_records/recordNodesIndexUpdater.js +10 -7
  225. package/dist/record/_records/recordNodesIndexUpdater.js.map +1 -1
  226. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  227. package/dist/record/_records/recordUpdater.js.map +1 -1
  228. package/dist/record/_records/recordUtils.js.map +1 -1
  229. package/dist/record/factory.js +2 -1
  230. package/dist/record/factory.js.map +1 -1
  231. package/dist/record/nodePointers.d.ts +13 -10
  232. package/dist/record/recordCloner.d.ts +11 -10
  233. package/dist/record/recordCloner.js +2 -1
  234. package/dist/record/recordCloner.js.map +1 -1
  235. package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
  236. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +3 -2
  237. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  238. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.d.ts +8 -6
  239. package/dist/record/recordExpressionEvaluator/node/thisEvaluator.js.map +1 -1
  240. package/dist/record/recordExpressionEvaluator/nodeValueExtractor.d.ts +7 -5
  241. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js +4 -7
  242. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  243. package/dist/record/recordFixer.d.ts +19 -10
  244. package/dist/record/recordNodesUpdater/index.d.ts +8 -7
  245. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  246. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.d.ts +2 -1
  247. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  248. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  249. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  250. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  251. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  252. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  253. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  254. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  255. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  256. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  257. package/dist/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  258. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  259. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  260. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  261. package/dist/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  262. package/dist/record/recordPrettyPrinter.d.ts +18 -15
  263. package/dist/record/recordPrettyPrinter.js.map +1 -1
  264. package/dist/record/recordStep.d.ts +5 -2
  265. package/dist/record/recordStep.js.map +1 -1
  266. package/dist/record/recordUpdater.d.ts +22 -15
  267. package/dist/record/recordUpdater.js.map +1 -1
  268. package/dist/record/recordValidations.d.ts +21 -14
  269. package/dist/record/recordValidator/attributeKeyValidator.d.ts +8 -6
  270. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  271. package/dist/record/recordValidator/attributeTypeValidator.d.ts +2 -1
  272. package/dist/record/recordValidator/attributeTypeValidator.js +2 -2
  273. package/dist/record/recordValidator/attributeTypeValidator.js.map +1 -1
  274. package/dist/record/recordValidator/attributeUniqueValidator.d.ts +1 -5
  275. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  276. package/dist/record/recordValidator/attributeValidator.d.ts +3 -1
  277. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  278. package/dist/record/recordValidator/countVaildator.d.ts +21 -17
  279. package/dist/record/recordValidator/index.d.ts +4 -3
  280. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  281. package/dist/record/records.d.ts +62 -220
  282. package/dist/registry/serviceRegistry.js.map +1 -1
  283. package/dist/registry/serviceType.js.map +1 -1
  284. package/dist/srs/srs.js.map +1 -1
  285. package/dist/survey/nodeDefsFixer.d.ts +5 -4
  286. package/dist/survey/nodeDefsFixer.js.map +1 -1
  287. package/dist/survey/refData/factory.js +3 -2
  288. package/dist/survey/refData/factory.js.map +1 -1
  289. package/dist/survey/survey.d.ts +2 -2
  290. package/dist/survey/survey.js.map +1 -1
  291. package/dist/survey/surveyDocImageFactory.js.map +1 -1
  292. package/dist/survey/surveyDocImages.d.ts +11 -5
  293. package/dist/survey/surveyDocImages.js.map +1 -1
  294. package/dist/survey/surveyFileFactory.js.map +1 -1
  295. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  296. package/dist/survey/surveys/_nodeDefs/nodeDefsReader.js.map +1 -1
  297. package/dist/survey/surveys/dependencies.js +2 -1
  298. package/dist/survey/surveys/dependencies.js.map +1 -1
  299. package/dist/survey/surveys/index.d.ts +82 -255
  300. package/dist/survey/surveys/nodeDefs.d.ts +4 -6
  301. package/dist/survey/surveys/nodeDefs.js +4 -2
  302. package/dist/survey/surveys/nodeDefs.js.map +1 -1
  303. package/dist/survey/surveys/refsData.js +2 -1
  304. package/dist/survey/surveys/refsData.js.map +1 -1
  305. package/dist/survey/surveys/surveyGettersSecurity.js +1 -4
  306. package/dist/survey/surveys/surveyGettersSecurity.js.map +1 -1
  307. package/dist/survey/surveys/surveysGetters.js +5 -7
  308. package/dist/survey/surveys/surveysGetters.js.map +1 -1
  309. package/dist/survey/surveys/surveysUtils.js.map +1 -1
  310. package/dist/taxonomy/taxa.d.ts +17 -11
  311. package/dist/taxonomy/taxa.js.map +1 -1
  312. package/dist/taxonomy/taxonGenerator.d.ts +6 -4
  313. package/dist/taxonomy/taxonomies.d.ts +7 -3
  314. package/dist/taxonomy/taxonomies.js.map +1 -1
  315. package/dist/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  316. package/dist/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  317. package/dist/tests/builder/recordBuilder/index.d.ts +4 -2
  318. package/dist/tests/builder/recordBuilder/index.js.map +1 -1
  319. package/dist/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  320. package/dist/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  321. package/dist/tests/builder/surveyBuilder/categoryBuilder.js.map +1 -1
  322. package/dist/tests/builder/surveyBuilder/categoryItemBuilder.js.map +1 -1
  323. package/dist/tests/builder/surveyBuilder/index.d.ts +30 -15
  324. package/dist/tests/builder/surveyBuilder/nodeDefAttributeBuilder.js.map +1 -1
  325. package/dist/tests/builder/surveyBuilder/nodeDefBuilder.js.map +1 -1
  326. package/dist/tests/builder/surveyBuilder/nodeDefCodeBuilder.js.map +1 -1
  327. package/dist/tests/builder/surveyBuilder/nodeDefEntityBuilder.js.map +1 -1
  328. package/dist/tests/builder/surveyBuilder/nodeDefTaxonBuilder.js.map +1 -1
  329. package/dist/tests/builder/surveyBuilder/surveyBuilder.js.map +1 -1
  330. package/dist/tests/builder/surveyBuilder/taxonBuilder.js.map +1 -1
  331. package/dist/tests/builder/surveyBuilder/taxonomyBuilder.js.map +1 -1
  332. package/dist/utils/_objects/assoc.js.map +1 -1
  333. package/dist/utils/_objects/assocPath.js.map +1 -1
  334. package/dist/utils/_objects/camelize.js.map +1 -1
  335. package/dist/utils/_objects/deepMerge.js.map +1 -1
  336. package/dist/utils/_objects/deleteEmptyProps.js.map +1 -1
  337. package/dist/utils/_objects/difference.js.map +1 -1
  338. package/dist/utils/_objects/dissoc.js.map +1 -1
  339. package/dist/utils/_objects/dissocPath.js.map +1 -1
  340. package/dist/utils/_objects/dissocPathIfEmpty.js.map +1 -1
  341. package/dist/utils/_objects/index.d.ts +34 -48
  342. package/dist/utils/_objects/isEmpty.js.map +1 -1
  343. package/dist/utils/_objects/isNil.js.map +1 -1
  344. package/dist/utils/_objects/isNotEmpty.js.map +1 -1
  345. package/dist/utils/_objects/parse.js.map +1 -1
  346. package/dist/utils/_objects/path.js.map +1 -1
  347. package/dist/utils/_objects/propertyOf.js.map +1 -1
  348. package/dist/utils/_objects/setInPath.js.map +1 -1
  349. package/dist/utils/_objects/stringify.js.map +1 -1
  350. package/dist/utils/arrays.d.ts +25 -15
  351. package/dist/utils/arrays.js.map +1 -1
  352. package/dist/utils/dates.d.ts +101 -48
  353. package/dist/utils/dates.js.map +1 -1
  354. package/dist/utils/fileNames.d.ts +7 -3
  355. package/dist/utils/fileNames.js.map +1 -1
  356. package/dist/utils/fileProcessor.js +2 -1
  357. package/dist/utils/fileProcessor.js.map +1 -1
  358. package/dist/utils/numbers.d.ts +42 -13
  359. package/dist/utils/numbers.js.map +1 -1
  360. package/dist/utils/promises.d.ts +12 -1
  361. package/dist/utils/queue.js.map +1 -1
  362. package/dist/utils/retryProcessor.js.map +1 -1
  363. package/dist/utils/strings.d.ts +22 -11
  364. package/dist/utils/uuids.d.ts +3 -1
  365. package/dist/utils/versions.d.ts +19 -7
  366. package/dist/utils/versions.js.map +1 -1
  367. package/dist/validation/factory.js.map +1 -1
  368. package/dist/validation/fieldValidators/email.js.map +1 -1
  369. package/dist/validation/fieldValidators/index.d.ts +12 -6
  370. package/dist/validation/fieldValidators/name.js.map +1 -1
  371. package/dist/validation/fieldValidators/notKeyword.js.map +1 -1
  372. package/dist/validation/fieldValidators/numeric.js.map +1 -1
  373. package/dist/validation/fieldValidators/numericPositive.js.map +1 -1
  374. package/dist/validation/fieldValidators/required.js.map +1 -1
  375. package/dist/validation/validation.js.map +1 -1
  376. package/dist/validation/validationResults.d.ts +17 -9
  377. package/dist/validation/validationResults.js +1 -1
  378. package/dist/validation/validationResults.js.map +1 -1
  379. package/dist/validation/validations.d.ts +71 -35
  380. package/dist/validation/validations.js +2 -2
  381. package/dist/validation/validations.js.map +1 -1
  382. package/dist/validation/validator.js.map +1 -1
  383. package/package.json +11 -4
@@ -1 +1 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport utc from 'dayjs/plugin/utc'\nimport { Objects } from './_objects'\n\ndayjs.extend(customParseFormat)\ndayjs.extend(utc)\n\nexport enum DateFormats {\n dateDisplay = 'DD/MM/YYYY',\n dateStorage = 'YYYY-MM-DD',\n datetimeDisplay = 'DD/MM/YYYY HH:mm:ss',\n datetimeStorage = 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]', // ISO\n timeStorage = 'HH:mm',\n timeWithSeconds = 'HH:mm:ss',\n datetimeDefault = 'YYYY-MM-DD_HH-mm-ss',\n}\n\nexport enum UnitOfTime {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n}\n\ntype DateType = Date | number | string\n\nconst format = (date: number | Date | undefined, format: string): string => (date ? dayjs(date).format(format) : '')\n\n/**\n * Like `format`, but renders in UTC instead of the machine's local time zone.\n * Use this when formatting a `Date` produced by `parse`/`parseZone`-style parsing, whose\n * underlying timestamp already encodes the source digits as if they were UTC (see `parse`) -\n * formatting with the local-time `format` above would silently re-shift them by the host's offset.\n */\nconst formatUTC = (date: number | Date | undefined, format: string): string =>\n date ? dayjs.utc(date).format(format) : ''\n\nconst formatForStorage = (date: DateType): string => new Date(date).toISOString()\nconst formatForExpression = (date: DateType): string => format(new Date(date), DateFormats.datetimeDefault)\n\nconst nowFormattedForStorage = (): string => formatForStorage(new Date())\nconst nowFormattedForExpression = (): string => formatForExpression(Date.now())\n\n// ISO date or date time: YYYY-MM-DD[THH:mm[:ss[.SSS]]][Z|±HH:mm]\nconst ISO_OFFSET_REGEX = /(?:Z|[+-]\\d{2}:?\\d{2})$/\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})$/\nconst ISO_TIME_REGEX = /^(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d+)?)?$/\n\nconst invalidDate = (): Date => new Date(Number.NaN)\n\n/**\n * Parses an ISO date (or date time) string; values like 2020-02-30 are not valid (they are not moved to the next month).\n * Date only strings and date times without offset are read as UTC.\n */\nconst parseISOStrict = (dateStr: string): Date => {\n const dateTimeStr = dateStr.replace(ISO_OFFSET_REGEX, '')\n const [datePart, timePart, ...otherParts] = dateTimeStr.split(/[T ]/)\n if (otherParts.length > 0) return invalidDate()\n\n const dateMatch = ISO_DATE_REGEX.exec(datePart)\n if (!dateMatch) return invalidDate()\n const [, year, month, day] = dateMatch\n if (!isValidDate(year, month, day)) return invalidDate()\n\n if (timePart !== undefined) {\n const timeMatch = ISO_TIME_REGEX.exec(timePart)\n if (!timeMatch) return invalidDate()\n const [, hours, minutes, seconds] = timeMatch\n if (!isValidTime(hours, minutes, seconds ?? 0)) return invalidDate()\n }\n return dayjs.utc(dateStr).toDate()\n}\n\nconst parseISO = (dateStr: string): Date | undefined => (dateStr ? dayjs(dateStr).toDate() : undefined)\nconst parse = (\n dateStr: string,\n format: DateFormats,\n { keepTimeZone = true, strict = false } = {}\n): Date | undefined => {\n if (!dateStr) return undefined\n // ISO strings without an explicit offset (e.g. date only) are read as UTC, like the other formats with keepTimeZone\n if (format == DateFormats.datetimeStorage) return parseISOStrict(dateStr)\n // keepTimeZone: the formats don't contain any time zone offset, so the digits are read as UTC\n if (keepTimeZone) return dayjs.utc(dateStr, format, strict).toDate()\n return dayjs(dateStr, format, strict).toDate()\n}\n\nconst isValidDateObject = (date: Date | undefined): boolean => !!date && dayjs(date).isValid()\n\nconst isValidDateInFormat = (dateStr: string, format: DateFormats) => {\n const parsed = parse(dateStr, format, { strict: true })\n return isValidDateObject(parsed)\n}\n\nconst convertDate = (params: {\n dateStr: string\n formatFrom?: DateFormats\n formatTo: DateFormats\n keepTimeZone?: boolean\n}): string | undefined => {\n const { dateStr, formatFrom = DateFormats.dateStorage, formatTo, keepTimeZone = true } = params\n if (Objects.isEmpty(dateStr)) return undefined\n\n const dateParsed = parse(dateStr, formatFrom, { keepTimeZone })\n if (!dateParsed || !dayjs(dateParsed).isValid()) {\n return undefined\n }\n // with keepTimeZone the parsed date encodes the source digits as if they were UTC (see parse/parseZone):\n // format it in UTC too, otherwise the digits would be shifted by the time zone of this machine\n return keepTimeZone ? formatUTC(dateParsed, formatTo) : format(dateParsed, formatTo)\n}\n\n/**\n * Checks if the date is valid. Takes into account leap years\n * (i.e. 2015/2/29 is not valid).\n */\nconst isValidDate = (year: any, month: any, day: any): boolean => {\n if (Objects.isEmpty(year) || Objects.isEmpty(month) || Objects.isEmpty(day)) {\n return false\n }\n\n const date = new Date(year, month - 1, day)\n\n return (\n dayjs(date).isValid() &&\n date.getFullYear() === Number(year) &&\n date.getMonth() + 1 === Number(month) &&\n date.getDate() === Number(day)\n )\n}\n\nconst isValidTime = (hour: any = '', minutes: any = '', seconds: any = 0): boolean => {\n if (Objects.isEmpty(hour) || Objects.isEmpty(minutes)) return false\n if (!(Number(hour) >= 0 && Number(hour) < 24 && Number(minutes) >= 0 && Number(minutes) < 60)) return false\n return Number(seconds) >= 0 && Number(seconds) < 60\n}\n\nconst toDate = (date: DateType): Date | undefined => {\n if (Objects.isEmpty(date)) return undefined\n if (date instanceof Date) return date\n if (typeof date === 'string') return parseISO(date)\n if (typeof date === 'number') return new Date(date)\n return undefined\n}\n\nconst isAfter = (date: DateType, dateToCompare: DateType): boolean => {\n const _date = toDate(date)\n const _dateToCompare = toDate(dateToCompare)\n if (!_date || !_dateToCompare) return false\n return dayjs(_date).isAfter(dayjs(_dateToCompare))\n}\n\nconst isBefore = (date: DateType, dateToCompare: DateType): boolean => {\n const _date = toDate(date)\n const _dateToCompare = toDate(dateToCompare)\n if (!_date || !_dateToCompare) return false\n return dayjs(_date).isBefore(dayjs(_dateToCompare))\n}\n\nconst add = (date: DateType, value: number, unit: UnitOfTime): Date => dayjs(date).add(value, unit).toDate()\nconst addSeconds = (date: DateType, value: number): Date => add(date, value, UnitOfTime.seconds)\nconst addMinutes = (date: DateType, value: number): Date => add(date, value, UnitOfTime.minutes)\nconst addHours = (date: DateType, value: number): Date => add(date, value, UnitOfTime.hours)\nconst addDays = (date: DateType, value: number): Date => add(date, value, UnitOfTime.days)\nconst addWeeks = (date: DateType, value: number): Date => add(date, value, UnitOfTime.weeks)\nconst addMonths = (date: DateType, value: number): Date => add(date, value, UnitOfTime.months)\nconst addYears = (date: DateType, value: number): Date => add(date, value, UnitOfTime.years)\n\nconst diff = (dateA: DateType, dateB: DateType, unit: UnitOfTime, precise?: boolean): number =>\n dayjs(dateA).diff(dayjs(dateB), unit, precise)\nconst diffInSeconds = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.seconds)\nconst diffInMinutes = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.minutes)\nconst diffInHours = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.hours)\nconst diffInDays = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.days)\nconst diffInWeeks = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.weeks)\nconst diffInMonths = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.months)\nconst diffInYears = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.years)\n\nconst sub = (date: DateType, value: number, unit: UnitOfTime): Date => dayjs(date).subtract(value, unit).toDate()\nconst subSeconds = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.seconds)\nconst subMinutes = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.minutes)\nconst subHours = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.hours)\nconst subDays = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.days)\nconst subWeeks = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.weeks)\nconst subMonths = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.months)\nconst subYears = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.years)\n\n/**\n * Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC).\n */\nconst getTimezoneOffset = (): number => new Date().getTimezoneOffset()\n\nexport const Dates = {\n isAfter,\n isBefore,\n isValidDate,\n isValidDateInFormat,\n isValidDateObject,\n isValidTime,\n nowFormattedForStorage,\n nowFormattedForExpression,\n convertDate,\n format,\n formatUTC,\n formatForStorage,\n formatForExpression,\n parse,\n parseISO,\n getTimezoneOffset,\n add,\n addSeconds,\n addMinutes,\n addHours,\n addDays,\n addWeeks,\n addMonths,\n addYears,\n sub,\n subSeconds,\n subMinutes,\n subHours,\n subDays,\n subWeeks,\n subMonths,\n subYears,\n diff,\n diffInSeconds,\n diffInMinutes,\n diffInHours,\n diffInDays,\n diffInWeeks,\n diffInMonths,\n diffInYears,\n}\n"]}
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport utc from 'dayjs/plugin/utc'\nimport { Objects } from './_objects'\n\ndayjs.extend(customParseFormat)\ndayjs.extend(utc)\n\nexport enum DateFormats {\n dateDisplay = 'DD/MM/YYYY',\n dateStorage = 'YYYY-MM-DD',\n datetimeDisplay = 'DD/MM/YYYY HH:mm:ss',\n datetimeStorage = 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]', // ISO\n timeStorage = 'HH:mm',\n timeWithSeconds = 'HH:mm:ss',\n datetimeDefault = 'YYYY-MM-DD_HH-mm-ss',\n}\n\nexport enum UnitOfTime {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n}\n\ntype DateType = Date | number | string\n\nconst format = (date: number | Date | undefined, format: string): string => (date ? dayjs(date).format(format) : '')\n\n/**\n * Like `format`, but renders in UTC instead of the machine's local time zone.\n * Use this when formatting a `Date` produced by `parse`/`parseZone`-style parsing, whose\n * underlying timestamp already encodes the source digits as if they were UTC (see `parse`) -\n * formatting with the local-time `format` above would silently re-shift them by the host's offset.\n */\nconst formatUTC = (date: number | Date | undefined, format: string): string =>\n date ? dayjs.utc(date).format(format) : ''\n\nconst formatForStorage = (date: DateType): string => new Date(date).toISOString()\nconst formatForExpression = (date: DateType): string => format(new Date(date), DateFormats.datetimeDefault)\n\nconst nowFormattedForStorage = (): string => formatForStorage(new Date())\nconst nowFormattedForExpression = (): string => formatForExpression(Date.now())\n\n// ISO date or date time: YYYY-MM-DD[THH:mm[:ss[.SSS]]][Z|±HH:mm]\nconst ISO_OFFSET_REGEX = /(?:Z|[+-]\\d{2}:?\\d{2})$/\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})$/\nconst ISO_TIME_REGEX = /^(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d+)?)?$/\n\nconst invalidDate = (): Date => new Date(Number.NaN)\n\n/**\n * Parses an ISO date (or date time) string; values like 2020-02-30 are not valid (they are not moved to the next month).\n * Date only strings and date times without offset are read as UTC.\n */\nconst parseISOStrict = (dateStr: string): Date => {\n const dateTimeStr = dateStr.replace(ISO_OFFSET_REGEX, '')\n const [datePart, timePart, ...otherParts] = dateTimeStr.split(/[T ]/)\n if (otherParts.length > 0) return invalidDate()\n\n const dateMatch = ISO_DATE_REGEX.exec(datePart)\n if (!dateMatch) return invalidDate()\n const [, year, month, day] = dateMatch\n if (!isValidDate(year, month, day)) return invalidDate()\n\n if (timePart !== undefined) {\n const timeMatch = ISO_TIME_REGEX.exec(timePart)\n if (!timeMatch) return invalidDate()\n const [, hours, minutes, seconds] = timeMatch\n if (!isValidTime(hours, minutes, seconds ?? 0)) return invalidDate()\n }\n return dayjs.utc(dateStr).toDate()\n}\n\nconst parseISO = (dateStr: string): Date | undefined => (dateStr ? dayjs(dateStr).toDate() : undefined)\nconst parse = (\n dateStr: string,\n format: DateFormats,\n { keepTimeZone = true, strict = false } = {}\n): Date | undefined => {\n if (!dateStr) return undefined\n // ISO strings without an explicit offset (e.g. date only) are read as UTC, like the other formats with keepTimeZone\n if (format == DateFormats.datetimeStorage) return parseISOStrict(dateStr)\n // keepTimeZone: the formats don't contain any time zone offset, so the digits are read as UTC\n if (keepTimeZone) return dayjs.utc(dateStr, format, strict).toDate()\n return dayjs(dateStr, format, strict).toDate()\n}\n\nconst isValidDateObject = (date: Date | undefined): boolean => !!date && dayjs(date).isValid()\n\nconst isValidDateInFormat = (dateStr: string, format: DateFormats) => {\n const parsed = parse(dateStr, format, { strict: true })\n return isValidDateObject(parsed)\n}\n\nconst convertDate = (params: {\n dateStr: string\n formatFrom?: DateFormats\n formatTo: DateFormats\n keepTimeZone?: boolean\n}): string | undefined => {\n const { dateStr, formatFrom = DateFormats.dateStorage, formatTo, keepTimeZone = true } = params\n if (Objects.isEmpty(dateStr)) return undefined\n\n const dateParsed = parse(dateStr, formatFrom, { keepTimeZone })\n if (!dateParsed || !dayjs(dateParsed).isValid()) {\n return undefined\n }\n // with keepTimeZone the parsed date encodes the source digits as if they were UTC (see parse/parseZone):\n // format it in UTC too, otherwise the digits would be shifted by the time zone of this machine\n return keepTimeZone ? formatUTC(dateParsed, formatTo) : format(dateParsed, formatTo)\n}\n\n/**\n * Checks if the date is valid. Takes into account leap years\n * (i.e. 2015/2/29 is not valid).\n */\nconst isValidDate = (year: any, month: any, day: any): boolean => {\n if (Objects.isEmpty(year) || Objects.isEmpty(month) || Objects.isEmpty(day)) {\n return false\n }\n\n const date = new Date(year, month - 1, day)\n\n return (\n dayjs(date).isValid() &&\n date.getFullYear() === Number(year) &&\n date.getMonth() + 1 === Number(month) &&\n date.getDate() === Number(day)\n )\n}\n\nconst isValidTime = (hour: any = '', minutes: any = '', seconds: any = 0): boolean => {\n if (Objects.isEmpty(hour) || Objects.isEmpty(minutes)) return false\n if (!(Number(hour) >= 0 && Number(hour) < 24 && Number(minutes) >= 0 && Number(minutes) < 60)) return false\n return Number(seconds) >= 0 && Number(seconds) < 60\n}\n\nconst toDate = (date: DateType): Date | undefined => {\n if (Objects.isEmpty(date)) return undefined\n if (date instanceof Date) return date\n if (typeof date === 'string') return parseISO(date)\n if (typeof date === 'number') return new Date(date)\n return undefined\n}\n\nconst isAfter = (date: DateType, dateToCompare: DateType): boolean => {\n const _date = toDate(date)\n const _dateToCompare = toDate(dateToCompare)\n if (!_date || !_dateToCompare) return false\n return dayjs(_date).isAfter(dayjs(_dateToCompare))\n}\n\nconst isBefore = (date: DateType, dateToCompare: DateType): boolean => {\n const _date = toDate(date)\n const _dateToCompare = toDate(dateToCompare)\n if (!_date || !_dateToCompare) return false\n return dayjs(_date).isBefore(dayjs(_dateToCompare))\n}\n\nconst add = (date: DateType, value: number, unit: UnitOfTime): Date => dayjs(date).add(value, unit).toDate()\nconst addSeconds = (date: DateType, value: number): Date => add(date, value, UnitOfTime.seconds)\nconst addMinutes = (date: DateType, value: number): Date => add(date, value, UnitOfTime.minutes)\nconst addHours = (date: DateType, value: number): Date => add(date, value, UnitOfTime.hours)\nconst addDays = (date: DateType, value: number): Date => add(date, value, UnitOfTime.days)\nconst addWeeks = (date: DateType, value: number): Date => add(date, value, UnitOfTime.weeks)\nconst addMonths = (date: DateType, value: number): Date => add(date, value, UnitOfTime.months)\nconst addYears = (date: DateType, value: number): Date => add(date, value, UnitOfTime.years)\n\nconst diff = (dateA: DateType, dateB: DateType, unit: UnitOfTime, precise?: boolean): number =>\n dayjs(dateA).diff(dayjs(dateB), unit, precise)\nconst diffInSeconds = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.seconds)\nconst diffInMinutes = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.minutes)\nconst diffInHours = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.hours)\nconst diffInDays = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.days)\nconst diffInWeeks = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.weeks)\nconst diffInMonths = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.months)\nconst diffInYears = (dateA: DateType, dateB: DateType): number => diff(dateA, dateB, UnitOfTime.years)\n\nconst sub = (date: DateType, value: number, unit: UnitOfTime): Date => dayjs(date).subtract(value, unit).toDate()\nconst subSeconds = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.seconds)\nconst subMinutes = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.minutes)\nconst subHours = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.hours)\nconst subDays = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.days)\nconst subWeeks = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.weeks)\nconst subMonths = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.months)\nconst subYears = (date: DateType, value: number): Date => sub(date, value, UnitOfTime.years)\n\n/**\n * Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC).\n */\nconst getTimezoneOffset = (): number => new Date().getTimezoneOffset()\n\nexport const Dates = {\n isAfter,\n isBefore,\n isValidDate,\n isValidDateInFormat,\n isValidDateObject,\n isValidTime,\n nowFormattedForStorage,\n nowFormattedForExpression,\n convertDate,\n format,\n formatUTC,\n formatForStorage,\n formatForExpression,\n parse,\n parseISO,\n getTimezoneOffset,\n add,\n addSeconds,\n addMinutes,\n addHours,\n addDays,\n addWeeks,\n addMonths,\n addYears,\n sub,\n subSeconds,\n subMinutes,\n subHours,\n subDays,\n subWeeks,\n subMonths,\n subYears,\n diff,\n diffInSeconds,\n diffInMinutes,\n diffInHours,\n diffInDays,\n diffInWeeks,\n diffInMonths,\n diffInYears,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileNames.js","sourceRoot":"","sources":["../../../src/utils/fileNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,OAAO,GAAG,CAAC,QAAmC,EAAU,EAAE;IAC9D,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACnD,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAmC,EAAU,EAAE;;IACnE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,gBAAwB,EAAU,EAAE;IACnF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAA;IACvF,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO;IACP,YAAY;IACZ,qBAAqB;CACtB,CAAA","sourcesContent":["import { Objects } from './_objects'\n\nconst getName = (fileName: string | null | undefined): string => {\n if (Objects.isEmpty(fileName)) return ''\n const fileNameStr = String(fileName)\n const lastIndexOfDot = fileNameStr.lastIndexOf('.')\n return lastIndexOfDot > 0 ? fileNameStr.substring(0, lastIndexOfDot) : fileNameStr\n}\n\nconst getExtension = (fileName: string | null | undefined): string => {\n if (Objects.isEmpty(fileName)) return ''\n const parts = String(fileName).split('.')\n return parts.length <= 1 ? '' : (parts.at(-1) ?? '')\n}\n\nconst addExtensionIfMissing = (fileName: string, defaultExtension: string): string => {\n const extension = getExtension(fileName)\n if (Objects.isNotEmpty(extension) || Objects.isEmpty(defaultExtension)) return fileName\n return [fileName, defaultExtension].join('.')\n}\n\nexport const FileNames = {\n getName,\n getExtension,\n addExtensionIfMissing,\n}\n"]}
1
+ {"version":3,"file":"fileNames.js","sourceRoot":"","sources":["../../../src/utils/fileNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,OAAO,GAAG,CAAC,QAAmC,EAAU,EAAE;IAC9D,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACnD,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAmC,EAAU,EAAE;;IACnE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,gBAAwB,EAAU,EAAE;IACnF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAA;IACvF,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO;IACP,YAAY;IACZ,qBAAqB;CACtB,CAAA","sourcesContent":["import { Objects } from './_objects'\n\nconst getName = (fileName: string | null | undefined): string => {\n if (Objects.isEmpty(fileName)) return ''\n const fileNameStr = String(fileName)\n const lastIndexOfDot = fileNameStr.lastIndexOf('.')\n return lastIndexOfDot > 0 ? fileNameStr.substring(0, lastIndexOfDot) : fileNameStr\n}\n\nconst getExtension = (fileName: string | null | undefined): string => {\n if (Objects.isEmpty(fileName)) return ''\n const parts = String(fileName).split('.')\n return parts.length <= 1 ? '' : (parts.at(-1) ?? '')\n}\n\nconst addExtensionIfMissing = (fileName: string, defaultExtension: string): string => {\n const extension = getExtension(fileName)\n if (Objects.isNotEmpty(extension) || Objects.isEmpty(defaultExtension)) return fileName\n return [fileName, defaultExtension].join('.')\n}\n\nexport const FileNames = {\n getName,\n getExtension,\n addExtensionIfMissing,\n}\n"]}
@@ -39,7 +39,8 @@ export class FileProcessor {
39
39
  this.completed = false;
40
40
  }
41
41
  calculateFileSize() {
42
- var _a, _b;
42
+ var _a;
43
+ var _b;
43
44
  return Promise.resolve((_b = (_a = this.file) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0);
44
45
  }
45
46
  onFail(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../../src/utils/fileProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { RetryProcessor } from './retryProcessor'\n\ntype ChunkProcessor = (args: {\n chunk: number\n content: Blob | string | Uint8Array\n totalChunks: number\n totalFileSize: number\n}) => Promise<any>\n\nexport type FileProcessorConstructorArgs = {\n file?: File\n filePath?: string\n chunkProcessor: ChunkProcessor\n onError?: (error: Error) => void\n onComplete?: (result: any) => void\n chunkSize?: number\n maxTryings?: number\n}\n\nexport class FileProcessor {\n static readonly defaultChunkSize = 1024 * 1024 * 10 // 10MB\n static readonly defaultMaxTryings = 5\n\n private readonly file?: File\n private readonly filePath?: string\n private readonly chunkProcessor: ChunkProcessor\n private readonly chunkSize: number\n private readonly maxTryings: number\n private readonly onError?: (error: Error) => void\n private readonly onComplete?: (result?: any) => void\n\n // State properties\n protected totalFileSize: number = 0\n protected running: boolean = false\n protected totalChunks: number = 0\n protected currentChunkNumber: number = 0\n // true while a chunk is being processed (resume must not start a second processing chain)\n protected processingChunk: boolean = false\n protected completed: boolean = false\n\n constructor({\n file,\n filePath,\n chunkProcessor,\n onError,\n onComplete,\n chunkSize = FileProcessor.defaultChunkSize,\n maxTryings = FileProcessor.defaultMaxTryings,\n }: FileProcessorConstructorArgs) {\n this.file = file\n this.filePath = filePath\n this.chunkProcessor = chunkProcessor\n this.chunkSize = chunkSize\n this.maxTryings = maxTryings\n this.onError = onError\n this.onComplete = onComplete\n\n if (!this.file && !this.filePath) {\n throw new Error('File or filePath not specified')\n }\n\n this.reset()\n }\n\n protected reset(): void {\n this.running = false\n this.totalChunks = 0\n this.currentChunkNumber = 0\n this.totalFileSize = 0\n this.processingChunk = false\n this.completed = false\n }\n\n protected calculateFileSize(): Promise<number> {\n return Promise.resolve(this.file?.size ?? 0)\n }\n\n protected onFail(error: Error): void {\n this.onError?.(error)\n }\n\n protected extractCurrentFileChunk(): Promise<Blob | string | Uint8Array> {\n const { file, currentChunkNumber, totalChunks, chunkSize } = this\n if (!file) {\n return Promise.reject(new Error('File property not initialized'))\n }\n return Promise.resolve(\n file.slice(\n (currentChunkNumber - 1) * chunkSize,\n currentChunkNumber === totalChunks ? undefined : currentChunkNumber * chunkSize\n )\n )\n }\n\n protected processNextChunk(): void {\n const { chunkProcessor, currentChunkNumber, totalFileSize, totalChunks, maxTryings } = this\n\n this.processingChunk = true\n this.extractCurrentFileChunk()\n .then((content) => {\n const retryProcessor = new RetryProcessor<void>({\n processor: async () => {\n const chunkResult = await chunkProcessor({ chunk: currentChunkNumber, totalFileSize, totalChunks, content })\n if (this.currentChunkNumber === totalChunks && this.onComplete) {\n this.onComplete(chunkResult)\n }\n },\n onSuccess: () => {\n this.processingChunk = false\n if (this.currentChunkNumber < totalChunks) {\n // move to the next chunk also when paused: resume will continue from it\n this.currentChunkNumber += 1\n if (this.running) {\n this.processNextChunk()\n }\n } else {\n this.running = false\n this.completed = true\n }\n },\n onFail: (error: Error) => {\n this.processingChunk = false\n this.onFail(error)\n this.running = false\n },\n maxTryings,\n })\n retryProcessor.start()\n })\n .catch((error) => {\n this.processingChunk = false\n this.onFail(error)\n this.running = false\n })\n }\n\n start(startFromChunk: number = 1): void {\n this.running = true\n this.completed = false\n this.currentChunkNumber = startFromChunk\n this.calculateFileSize()\n .then((fileSize) => {\n this.totalFileSize = fileSize\n this.totalChunks = Math.ceil(fileSize / this.chunkSize)\n if (this.totalChunks > 0) {\n this.processNextChunk()\n }\n })\n .catch((error) => {\n this.onFail(error)\n this.running = false\n })\n }\n\n stop(): void {\n this.reset()\n }\n\n pause(): void {\n this.running = false\n }\n\n resume(): void {\n if (this.running || this.completed) return\n this.running = true\n // if a chunk is still being processed, processing continues when it completes\n if (!this.processingChunk && this.totalChunks > 0) {\n this.processNextChunk()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../../src/utils/fileProcessor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAmBjD,MAAM,OAAO,aAAa;IAqBxB,YAAY,EACV,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,OAAO,EACP,UAAU,EACV,SAAS,GAAG,aAAa,CAAC,gBAAgB,EAC1C,UAAU,GAAG,aAAa,CAAC,iBAAiB,GACf;QAjB/B,mBAAmB;QACT,kBAAa,GAAW,CAAC,CAAA;QACzB,YAAO,GAAY,KAAK,CAAA;QACxB,gBAAW,GAAW,CAAC,CAAA;QACvB,uBAAkB,GAAW,CAAC,CAAA;QACxC,0FAA0F;QAChF,oBAAe,GAAY,KAAK,CAAA;QAChC,cAAS,GAAY,KAAK,CAAA;QAWlC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAES,KAAK;QACb,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACxB,CAAC;IAES,iBAAiB;;;QACzB,OAAO,OAAO,CAAC,OAAO,OAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,mCAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IAES,MAAM,CAAC,KAAY;;QAC3B,MAAA,IAAI,CAAC,OAAO,+CAAZ,IAAI,EAAW,KAAK,CAAC,CAAA;IACvB,CAAC;IAES,uBAAuB;QAC/B,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,KAAK,CACR,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,SAAS,EACpC,kBAAkB,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,GAAG,SAAS,CAChF,CACF,CAAA;IACH,CAAC;IAES,gBAAgB;QACxB,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;QAE3F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,uBAAuB,EAAE;aAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAO;gBAC9C,SAAS,EAAE,GAAS,EAAE;oBACpB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;oBAC5G,IAAI,IAAI,CAAC,kBAAkB,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC/D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;oBAC9B,CAAC;gBACH,CAAC,CAAA;gBACD,SAAS,EAAE,GAAG,EAAE;oBACd,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;oBAC5B,IAAI,IAAI,CAAC,kBAAkB,GAAG,WAAW,EAAE,CAAC;wBAC1C,wEAAwE;wBACxE,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAA;wBAC5B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BACjB,IAAI,CAAC,gBAAgB,EAAE,CAAA;wBACzB,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;wBACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;oBACvB,CAAC;gBACH,CAAC;gBACD,MAAM,EAAE,CAAC,KAAY,EAAE,EAAE;oBACvB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;oBAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;gBACtB,CAAC;gBACD,UAAU;aACX,CAAC,CAAA;YACF,cAAc,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACtB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,cAAc,GAAW,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAA;QACxC,IAAI,CAAC,iBAAiB,EAAE;aACrB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACzB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACtB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS;YAAE,OAAM;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;CACF;AAtJiB,8BAAgB,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,AAAnB,CAAmB,CAAC,OAAO;AAC3C,+BAAiB,GAAG,CAAC,AAAJ,CAAI","sourcesContent":["import { RetryProcessor } from './retryProcessor'\n\ntype ChunkProcessor = (args: {\n chunk: number\n content: Blob | string | Uint8Array\n totalChunks: number\n totalFileSize: number\n}) => Promise<any>\n\nexport type FileProcessorConstructorArgs = {\n file?: File\n filePath?: string\n chunkProcessor: ChunkProcessor\n onError?: (error: Error) => void\n onComplete?: (result: any) => void\n chunkSize?: number\n maxTryings?: number\n}\n\nexport class FileProcessor {\n static readonly defaultChunkSize = 1024 * 1024 * 10 // 10MB\n static readonly defaultMaxTryings = 5\n\n private readonly file?: File\n private readonly filePath?: string\n private readonly chunkProcessor: ChunkProcessor\n private readonly chunkSize: number\n private readonly maxTryings: number\n private readonly onError?: (error: Error) => void\n private readonly onComplete?: (result?: any) => void\n\n // State properties\n protected totalFileSize: number = 0\n protected running: boolean = false\n protected totalChunks: number = 0\n protected currentChunkNumber: number = 0\n // true while a chunk is being processed (resume must not start a second processing chain)\n protected processingChunk: boolean = false\n protected completed: boolean = false\n\n constructor({\n file,\n filePath,\n chunkProcessor,\n onError,\n onComplete,\n chunkSize = FileProcessor.defaultChunkSize,\n maxTryings = FileProcessor.defaultMaxTryings,\n }: FileProcessorConstructorArgs) {\n this.file = file\n this.filePath = filePath\n this.chunkProcessor = chunkProcessor\n this.chunkSize = chunkSize\n this.maxTryings = maxTryings\n this.onError = onError\n this.onComplete = onComplete\n\n if (!this.file && !this.filePath) {\n throw new Error('File or filePath not specified')\n }\n\n this.reset()\n }\n\n protected reset(): void {\n this.running = false\n this.totalChunks = 0\n this.currentChunkNumber = 0\n this.totalFileSize = 0\n this.processingChunk = false\n this.completed = false\n }\n\n protected calculateFileSize(): Promise<number> {\n return Promise.resolve(this.file?.size ?? 0)\n }\n\n protected onFail(error: Error): void {\n this.onError?.(error)\n }\n\n protected extractCurrentFileChunk(): Promise<Blob | string | Uint8Array> {\n const { file, currentChunkNumber, totalChunks, chunkSize } = this\n if (!file) {\n return Promise.reject(new Error('File property not initialized'))\n }\n return Promise.resolve(\n file.slice(\n (currentChunkNumber - 1) * chunkSize,\n currentChunkNumber === totalChunks ? undefined : currentChunkNumber * chunkSize\n )\n )\n }\n\n protected processNextChunk(): void {\n const { chunkProcessor, currentChunkNumber, totalFileSize, totalChunks, maxTryings } = this\n\n this.processingChunk = true\n this.extractCurrentFileChunk()\n .then((content) => {\n const retryProcessor = new RetryProcessor<void>({\n processor: async () => {\n const chunkResult = await chunkProcessor({ chunk: currentChunkNumber, totalFileSize, totalChunks, content })\n if (this.currentChunkNumber === totalChunks && this.onComplete) {\n this.onComplete(chunkResult)\n }\n },\n onSuccess: () => {\n this.processingChunk = false\n if (this.currentChunkNumber < totalChunks) {\n // move to the next chunk also when paused: resume will continue from it\n this.currentChunkNumber += 1\n if (this.running) {\n this.processNextChunk()\n }\n } else {\n this.running = false\n this.completed = true\n }\n },\n onFail: (error: Error) => {\n this.processingChunk = false\n this.onFail(error)\n this.running = false\n },\n maxTryings,\n })\n retryProcessor.start()\n })\n .catch((error) => {\n this.processingChunk = false\n this.onFail(error)\n this.running = false\n })\n }\n\n start(startFromChunk: number = 1): void {\n this.running = true\n this.completed = false\n this.currentChunkNumber = startFromChunk\n this.calculateFileSize()\n .then((fileSize) => {\n this.totalFileSize = fileSize\n this.totalChunks = Math.ceil(fileSize / this.chunkSize)\n if (this.totalChunks > 0) {\n this.processNextChunk()\n }\n })\n .catch((error) => {\n this.onFail(error)\n this.running = false\n })\n }\n\n stop(): void {\n this.reset()\n }\n\n pause(): void {\n this.running = false\n }\n\n resume(): void {\n if (this.running || this.completed) return\n this.running = true\n // if a chunk is still being processed, processing continues when it completes\n if (!this.processingChunk && this.totalChunks > 0) {\n this.processNextChunk()\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/utils/numbers.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js'\nimport { toCardinal as toCardinalEn } from 'n2words/en'\nimport { toCardinal as toCardinalEs } from 'n2words/es'\nimport { toCardinal as toCardinalFr } from 'n2words/fr'\nimport { toCardinal as toCardinalJa } from 'n2words/ja'\nimport { toCardinal as toCardinalPt } from 'n2words/pt-PT'\nimport { toCardinal as toCardinalRu } from 'n2words/ru'\n\nimport { LanguageCode } from '../language'\nimport { Objects } from './_objects'\n\nBigNumber.config({\n FORMAT: {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n },\n})\n\nconst toNumber = (num: any): number => (Objects.isEmpty(num) ? Number.NaN : Number(num))\n\n/**\n * Returns the absolute modulus of the specified value. The result will always be a positive number.\n * @param {!number} modulus - The modulus to apply.\n * @returns {number} - The result of the modulus (always positive or 0).\n */\nconst absMod =\n (modulus: number) =>\n (value: number): number =>\n ((value % modulus) + modulus) % modulus\n\nconst between = (value: number, min: number, max: number): boolean => min <= value && max >= value\n\nconst isFloat = (value: any): boolean => {\n const number = toNumber(value)\n return Number.isFinite(number)\n}\n\nconst isInteger = (value: any): boolean => {\n const number = toNumber(value)\n return Number.isInteger(number)\n}\n\n/**\n * Formats the given value to the specified fixed dicimal digits.\n */\nconst formatDecimal = (value: number, decimalDigits = Number.NaN) => {\n if (Number.isNaN(value) || value === null) return null\n const num = new BigNumber(value)\n\n if (decimalDigits > 0) {\n // round to fixed number of decimal digits\n return num.toFormat(decimalDigits)\n }\n if (decimalDigits === 0) {\n // format as integer\n return num.toFormat(0, { groupSeparator: '' })\n }\n return num.toString()\n}\n\n/**\n * Formats the given value to a rounded integer.\n *\n * @param {!number} value - The value to format.\n * @returns {string} - The formatted value or null if the value was null.\n */\nconst formatInteger = (value: number): string | null => formatDecimal(value, 0)\n\nconst limit =\n ({ minValue = Number.NaN, maxValue = Number.NaN }) =>\n (value: number) => {\n let result = Number(value)\n // NOTE: 0 is a valid bound\n if (!Number.isNaN(minValue)) result = Math.max(minValue, result)\n if (!Number.isNaN(maxValue)) result = Math.min(maxValue, result)\n return result\n }\n\nconst roundToPrecision = (value: any, precision = Number.NaN) => {\n const num = toNumber(value)\n if (Number.isNaN(num)) return Number.NaN\n if (Number.isNaN(precision)) return num\n const exp = Math.pow(10, precision)\n return Math.round(num * exp) / exp\n}\n\nconst toCardinalByLang: Partial<Record<LanguageCode, (value: number | string | bigint) => string>> = {\n [LanguageCode.en]: toCardinalEn,\n [LanguageCode.es]: toCardinalEs,\n [LanguageCode.fr]: toCardinalFr,\n [LanguageCode.ja]: toCardinalJa,\n [LanguageCode.pt]: toCardinalPt,\n [LanguageCode.ru]: toCardinalRu,\n}\n\n/**\n * Converts the given number to words (cardinal form) in the specified language.\n * Falls back to English if the specified language is not supported.\n */\nconst toWords = (value: any, lang: LanguageCode = LanguageCode.en): string | null => {\n const number = toNumber(value)\n if (!Number.isFinite(number)) return null\n const toCardinal = toCardinalByLang[lang] ?? toCardinalByLang[LanguageCode.en]!\n try {\n return toCardinal(number)\n } catch {\n return null\n }\n}\n\nexport const Numbers = {\n absMod,\n between,\n formatDecimal,\n formatInteger,\n isFloat,\n isInteger,\n limit,\n roundToPrecision,\n toNumber,\n toWords,\n}\n"]}
1
+ {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/utils/numbers.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js'\nimport { toCardinal as toCardinalEn } from 'n2words/en'\nimport { toCardinal as toCardinalEs } from 'n2words/es'\nimport { toCardinal as toCardinalFr } from 'n2words/fr'\nimport { toCardinal as toCardinalJa } from 'n2words/ja'\nimport { toCardinal as toCardinalPt } from 'n2words/pt-PT'\nimport { toCardinal as toCardinalRu } from 'n2words/ru'\n\nimport { LanguageCode } from '../language'\nimport { Objects } from './_objects'\n\nBigNumber.config({\n FORMAT: {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n },\n})\n\nconst toNumber = (num: any): number => (Objects.isEmpty(num) ? Number.NaN : Number(num))\n\n/**\n * Returns the absolute modulus of the specified value. The result will always be a positive number.\n * @param {!number} modulus - The modulus to apply.\n * @returns {number} - The result of the modulus (always positive or 0).\n */\nconst absMod =\n (modulus: number) =>\n (value: number): number =>\n ((value % modulus) + modulus) % modulus\n\nconst between = (value: number, min: number, max: number): boolean => min <= value && max >= value\n\nconst isFloat = (value: any): boolean => {\n const number = toNumber(value)\n return Number.isFinite(number)\n}\n\nconst isInteger = (value: any): boolean => {\n const number = toNumber(value)\n return Number.isInteger(number)\n}\n\n/**\n * Formats the given value to the specified fixed dicimal digits.\n */\nconst formatDecimal = (value: number, decimalDigits = Number.NaN) => {\n if (Number.isNaN(value) || value === null) return null\n const num = new BigNumber(value)\n\n if (decimalDigits > 0) {\n // round to fixed number of decimal digits\n return num.toFormat(decimalDigits)\n }\n if (decimalDigits === 0) {\n // format as integer\n return num.toFormat(0, { groupSeparator: '' })\n }\n return num.toString()\n}\n\n/**\n * Formats the given value to a rounded integer.\n *\n * @param {!number} value - The value to format.\n * @returns {string} - The formatted value or null if the value was null.\n */\nconst formatInteger = (value: number): string | null => formatDecimal(value, 0)\n\nconst limit =\n ({ minValue = Number.NaN, maxValue = Number.NaN }) =>\n (value: number) => {\n let result = Number(value)\n // NOTE: 0 is a valid bound\n if (!Number.isNaN(minValue)) result = Math.max(minValue, result)\n if (!Number.isNaN(maxValue)) result = Math.min(maxValue, result)\n return result\n }\n\nconst roundToPrecision = (value: any, precision = Number.NaN) => {\n const num = toNumber(value)\n if (Number.isNaN(num)) return Number.NaN\n if (Number.isNaN(precision)) return num\n const exp = Math.pow(10, precision)\n return Math.round(num * exp) / exp\n}\n\nconst toCardinalByLang: Partial<Record<LanguageCode, (value: number | string | bigint) => string>> = {\n [LanguageCode.en]: toCardinalEn,\n [LanguageCode.es]: toCardinalEs,\n [LanguageCode.fr]: toCardinalFr,\n [LanguageCode.ja]: toCardinalJa,\n [LanguageCode.pt]: toCardinalPt,\n [LanguageCode.ru]: toCardinalRu,\n}\n\n/**\n * Converts the given number to words (cardinal form) in the specified language.\n * Falls back to English if the specified language is not supported.\n */\nconst toWords = (value: any, lang: LanguageCode = LanguageCode.en): string | null => {\n const number = toNumber(value)\n if (!Number.isFinite(number)) return null\n const toCardinal = toCardinalByLang[lang] ?? toCardinalByLang[LanguageCode.en]!\n try {\n return toCardinal(number)\n } catch {\n return null\n }\n}\n\nexport const Numbers = {\n absMod,\n between,\n formatDecimal,\n formatInteger,\n isFloat,\n isInteger,\n limit,\n roundToPrecision,\n toNumber,\n toWords,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/utils/queue.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,6EAA6E;AAC7E,MAAM,yBAAyB,GAAG,IAAI,CAAA;AAEtC;;GAEG;AACH,MAAM,OAAO,KAAK;IAIhB,YAAY,QAAe,EAAE;QAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;IACrD,CAAC;IAED,OAAO,CAAC,IAAS;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,YAAY,CAAC,KAAY;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,SAAS,CAAA;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAA;QACxC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;QAEpB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,yBAAyB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAChD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;IACxB,CAAC;CACF","sourcesContent":["// when the number of dequeued items exceeds this threshold (and half of the stored items),\n// the storage array is compacted to release the memory of the dequeued items\nconst COMPACTION_MIN_HEAD_INDEX = 1024\n\n/**\n * FIFO queue with constant time enqueue and dequeue operations.\n */\nexport class Queue {\n private _items: any[]\n private _headIndex: number\n\n constructor(items: any[] = []) {\n this._items = []\n this._headIndex = 0\n this.enqueueItems(items)\n }\n\n /**\n * Snapshot of the items still in the queue, from the last enqueued to the first one (the next one to be dequeued).\n * The returned array is a copy: modifying it does not affect the queue.\n */\n get items(): readonly any[] {\n return this._items.slice(this._headIndex).reverse()\n }\n\n enqueue(item: any): void {\n this._items.push(item)\n }\n\n enqueueItems(items: any[]) {\n for (const item of items) {\n this.enqueue(item)\n }\n }\n\n dequeue(): any {\n if (this.isEmpty()) return undefined\n\n const item = this._items[this._headIndex]\n this._items[this._headIndex] = undefined\n this._headIndex += 1\n\n if (this.isEmpty()) {\n this._items = []\n this._headIndex = 0\n } else if (this._headIndex >= COMPACTION_MIN_HEAD_INDEX && this._headIndex * 2 >= this._items.length) {\n this._items = this._items.slice(this._headIndex)\n this._headIndex = 0\n }\n return item\n }\n\n get first(): any {\n return this.isEmpty() ? undefined : this._items[this._headIndex]\n }\n\n get last(): any {\n return this.isEmpty() ? undefined : this._items.at(-1)\n }\n\n get size(): number {\n return this._items.length - this._headIndex\n }\n\n isEmpty(): boolean {\n return this.size === 0\n }\n}\n"]}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/utils/queue.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,6EAA6E;AAC7E,MAAM,yBAAyB,GAAG,IAAI,CAAA;AAEtC;;GAEG;AACH,MAAM,OAAO,KAAK;IAIhB,YAAY,KAAK,GAAU,EAAE;QAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;IACrD,CAAC;IAED,OAAO,CAAC,IAAS;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,YAAY,CAAC,KAAY;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,SAAS,CAAA;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAA;QACxC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;QAEpB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,yBAAyB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAChD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;IACxB,CAAC;CACF","sourcesContent":["// when the number of dequeued items exceeds this threshold (and half of the stored items),\n// the storage array is compacted to release the memory of the dequeued items\nconst COMPACTION_MIN_HEAD_INDEX = 1024\n\n/**\n * FIFO queue with constant time enqueue and dequeue operations.\n */\nexport class Queue {\n private _items: any[]\n private _headIndex: number\n\n constructor(items: any[] = []) {\n this._items = []\n this._headIndex = 0\n this.enqueueItems(items)\n }\n\n /**\n * Snapshot of the items still in the queue, from the last enqueued to the first one (the next one to be dequeued).\n * The returned array is a copy: modifying it does not affect the queue.\n */\n get items(): readonly any[] {\n return this._items.slice(this._headIndex).reverse()\n }\n\n enqueue(item: any): void {\n this._items.push(item)\n }\n\n enqueueItems(items: any[]) {\n for (const item of items) {\n this.enqueue(item)\n }\n }\n\n dequeue(): any {\n if (this.isEmpty()) return undefined\n\n const item = this._items[this._headIndex]\n this._items[this._headIndex] = undefined\n this._headIndex += 1\n\n if (this.isEmpty()) {\n this._items = []\n this._headIndex = 0\n } else if (this._headIndex >= COMPACTION_MIN_HEAD_INDEX && this._headIndex * 2 >= this._items.length) {\n this._items = this._items.slice(this._headIndex)\n this._headIndex = 0\n }\n return item\n }\n\n get first(): any {\n return this.isEmpty() ? undefined : this._items[this._headIndex]\n }\n\n get last(): any {\n return this.isEmpty() ? undefined : this._items.at(-1)\n }\n\n get size(): number {\n return this._items.length - this._headIndex\n }\n\n isEmpty(): boolean {\n return this.size === 0\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/utils/versions.ts"],"names":[],"mappings":"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","sourcesContent":["export type ParsedVersion = {\n major: number\n minor: number\n patch?: number\n commitsSinceTag?: number\n}\n\nconst VERSION_REGEX = /^v?(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\d+)(?:-g[0-9a-f]+)?)?$/i\n\nconst parse = (version: string): ParsedVersion => {\n const match = VERSION_REGEX.exec(version.trim())\n if (!match) {\n throw new Error(\n `Invalid version format: \"${version}\". Expected format: [v]major.minor[.patch][-commitsSinceTag[-g<commitHash>]] (e.g. \"2.3\", \"2.3.1\", \"v2.3.1\" or \"v2.3.19-4-g207bc95f8\")`\n )\n }\n const parsedVersion: ParsedVersion = {\n major: Number.parseInt(match[1], 10),\n minor: Number.parseInt(match[2], 10),\n }\n if (match[3] !== undefined) {\n parsedVersion.patch = Number.parseInt(match[3], 10)\n }\n if (match[4] !== undefined) {\n parsedVersion.commitsSinceTag = Number.parseInt(match[4], 10)\n }\n return parsedVersion\n}\n\n/**\n * Compares two version strings.\n * @returns -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\n */\nconst compare = (v1: string, v2: string): -1 | 0 | 1 => {\n const p1 = parse(v1)\n const p2 = parse(v2)\n const patch1 = p1.patch ?? 0\n const patch2 = p2.patch ?? 0\n const commitsSinceTag1 = p1.commitsSinceTag ?? 0\n const commitsSinceTag2 = p2.commitsSinceTag ?? 0\n\n if (p1.major !== p2.major) return p1.major < p2.major ? -1 : 1\n if (p1.minor !== p2.minor) return p1.minor < p2.minor ? -1 : 1\n if (patch1 !== patch2) return patch1 < patch2 ? -1 : 1\n if (commitsSinceTag1 !== commitsSinceTag2) return commitsSinceTag1 < commitsSinceTag2 ? -1 : 1\n return 0\n}\n\nconst isEqual = (v1: string, v2: string): boolean => compare(v1, v2) === 0\n\nconst isGreaterThan = (v1: string, v2: string): boolean => compare(v1, v2) === 1\n\nconst isLessThan = (v1: string, v2: string): boolean => compare(v1, v2) === -1\n\nconst isGreaterThanOrEqual = (v1: string, v2: string): boolean => compare(v1, v2) >= 0\n\nconst isLessThanOrEqual = (v1: string, v2: string): boolean => compare(v1, v2) <= 0\n\nexport const Versions = {\n parse,\n compare,\n isEqual,\n isGreaterThan,\n isLessThan,\n isGreaterThanOrEqual,\n isLessThanOrEqual,\n}\n"]}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/utils/versions.ts"],"names":[],"mappings":"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","sourcesContent":["export type ParsedVersion = {\n major: number\n minor: number\n patch?: number\n commitsSinceTag?: number\n}\n\nconst VERSION_REGEX = /^v?(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\d+)(?:-g[0-9a-f]+)?)?$/i\n\nconst parse = (version: string): ParsedVersion => {\n const match = VERSION_REGEX.exec(version.trim())\n if (!match) {\n throw new Error(\n `Invalid version format: \"${version}\". Expected format: [v]major.minor[.patch][-commitsSinceTag[-g<commitHash>]] (e.g. \"2.3\", \"2.3.1\", \"v2.3.1\" or \"v2.3.19-4-g207bc95f8\")`\n )\n }\n const parsedVersion: ParsedVersion = {\n major: Number.parseInt(match[1], 10),\n minor: Number.parseInt(match[2], 10),\n }\n if (match[3] !== undefined) {\n parsedVersion.patch = Number.parseInt(match[3], 10)\n }\n if (match[4] !== undefined) {\n parsedVersion.commitsSinceTag = Number.parseInt(match[4], 10)\n }\n return parsedVersion\n}\n\n/**\n * Compares two version strings.\n * @returns -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\n */\nconst compare = (v1: string, v2: string): -1 | 0 | 1 => {\n const p1 = parse(v1)\n const p2 = parse(v2)\n const patch1 = p1.patch ?? 0\n const patch2 = p2.patch ?? 0\n const commitsSinceTag1 = p1.commitsSinceTag ?? 0\n const commitsSinceTag2 = p2.commitsSinceTag ?? 0\n\n if (p1.major !== p2.major) return p1.major < p2.major ? -1 : 1\n if (p1.minor !== p2.minor) return p1.minor < p2.minor ? -1 : 1\n if (patch1 !== patch2) return patch1 < patch2 ? -1 : 1\n if (commitsSinceTag1 !== commitsSinceTag2) return commitsSinceTag1 < commitsSinceTag2 ? -1 : 1\n return 0\n}\n\nconst isEqual = (v1: string, v2: string): boolean => compare(v1, v2) === 0\n\nconst isGreaterThan = (v1: string, v2: string): boolean => compare(v1, v2) === 1\n\nconst isLessThan = (v1: string, v2: string): boolean => compare(v1, v2) === -1\n\nconst isGreaterThanOrEqual = (v1: string, v2: string): boolean => compare(v1, v2) >= 0\n\nconst isLessThanOrEqual = (v1: string, v2: string): boolean => compare(v1, v2) <= 0\n\nexport const Versions = {\n parse,\n compare,\n isEqual,\n isGreaterThan,\n isLessThan,\n isGreaterThanOrEqual,\n isLessThanOrEqual,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/validation/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAgC,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAS/E,MAAM,CAAC,MAAM,iBAAiB,GAAiD;IAC7E,cAAc,EAAE,CAAC,MAAgC,EAAc,EAAE;QAC/D,MAAM,aAAa,GAAG;YACpB,KAAK,EAAE,IAAI;SACZ,CAAA;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,mCACpC,aAAa,GACb,MAAM,CACV,CAAA;QACD,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,CAAA;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC5B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAUD,MAAM,CAAC,MAAM,uBAAuB,GAA6D;IAC/F,cAAc,EAAE,CAAC,SAAwC,EAAE,EAAoB,EAAE;QAC/E,MAAM,aAAa,GAAG;YACpB,KAAK,EAAE,IAAI;SACZ,CAAA;QACD,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,mCAAQ,aAAa,GAAK,MAAM,CAAE,CAAA;QAC1G,MAAM,QAAQ,GAAG,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAA;QACpF,OAAO;YACL,QAAQ;YACR,GAAG;YACH,MAAM,EAAE,OAAO;YACf,QAAQ;YACR,KAAK;SACN,CAAA;IACH,CAAC;CACF,CAAA","sourcesContent":["import { Dictionary, Factory } from '../common'\nimport { Labels } from '../language'\nimport { Objects } from '../utils'\nimport { Validation, ValidationResult, ValidationSeverity } from './validation'\n\ntype ValidationFactoryParams = {\n errors?: ValidationResult[]\n fields?: Dictionary<Validation>\n valid?: boolean\n warnings?: ValidationResult[]\n}\n\nexport const ValidationFactory: Factory<Validation, ValidationFactoryParams> = {\n createInstance: (params?: ValidationFactoryParams): Validation => {\n const defaultParams = {\n valid: true,\n }\n const { errors, fields, valid, warnings } = {\n ...defaultParams,\n ...params,\n }\n const result: Validation = { valid }\n if (Objects.isNotEmpty(errors)) {\n result.errors = errors\n }\n if (Objects.isNotEmpty(fields)) {\n result.fields = fields\n }\n if (Objects.isNotEmpty(warnings)) {\n result.warnings = warnings\n }\n return result\n },\n}\n\ntype ValidationResultFactoryParams = {\n messages?: Labels\n key?: string\n params?: Dictionary<any>\n severity?: ValidationSeverity\n valid?: boolean\n}\n\nexport const ValidationResultFactory: Factory<ValidationResult, ValidationResultFactoryParams> = {\n createInstance: (params: ValidationResultFactoryParams = {}): ValidationResult => {\n const defaultParams = {\n valid: true,\n }\n const { severity: severityParam, key, params: _params, messages, valid } = { ...defaultParams, ...params }\n const severity = !severityParam && !valid ? ValidationSeverity.error : severityParam\n return {\n severity,\n key,\n params: _params,\n messages,\n valid,\n }\n },\n}\n"]}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/validation/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAgC,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAS/E,MAAM,CAAC,MAAM,iBAAiB,GAAiD;IAC7E,cAAc,EAAE,CAAC,MAAgC,EAAc,EAAE;QAC/D,MAAM,aAAa,GAAG;YACpB,KAAK,EAAE,IAAI;SACZ,CAAA;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,mCACpC,aAAa,GACb,MAAM,CACV,CAAA;QACD,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,CAAA;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC5B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAUD,MAAM,CAAC,MAAM,uBAAuB,GAA6D;IAC/F,cAAc,EAAE,CAAC,MAAM,GAAkC,EAAE,EAAoB,EAAE;QAC/E,MAAM,aAAa,GAAG;YACpB,KAAK,EAAE,IAAI;SACZ,CAAA;QACD,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,mCAAQ,aAAa,GAAK,MAAM,CAAE,CAAA;QAC1G,MAAM,QAAQ,GAAG,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAA;QACpF,OAAO;YACL,QAAQ;YACR,GAAG;YACH,MAAM,EAAE,OAAO;YACf,QAAQ;YACR,KAAK;SACN,CAAA;IACH,CAAC;CACF,CAAA","sourcesContent":["import { Dictionary, Factory } from '../common'\nimport { Labels } from '../language'\nimport { Objects } from '../utils'\nimport { Validation, ValidationResult, ValidationSeverity } from './validation'\n\ntype ValidationFactoryParams = {\n errors?: ValidationResult[]\n fields?: Dictionary<Validation>\n valid?: boolean\n warnings?: ValidationResult[]\n}\n\nexport const ValidationFactory: Factory<Validation, ValidationFactoryParams> = {\n createInstance: (params?: ValidationFactoryParams): Validation => {\n const defaultParams = {\n valid: true,\n }\n const { errors, fields, valid, warnings } = {\n ...defaultParams,\n ...params,\n }\n const result: Validation = { valid }\n if (Objects.isNotEmpty(errors)) {\n result.errors = errors\n }\n if (Objects.isNotEmpty(fields)) {\n result.fields = fields\n }\n if (Objects.isNotEmpty(warnings)) {\n result.warnings = warnings\n }\n return result\n },\n}\n\ntype ValidationResultFactoryParams = {\n messages?: Labels\n key?: string\n params?: Dictionary<any>\n severity?: ValidationSeverity\n valid?: boolean\n}\n\nexport const ValidationResultFactory: Factory<ValidationResult, ValidationResultFactoryParams> = {\n createInstance: (params: ValidationResultFactoryParams = {}): ValidationResult => {\n const defaultParams = {\n valid: true,\n }\n const { severity: severityParam, key, params: _params, messages, valid } = { ...defaultParams, ...params }\n const severity = !severityParam && !valid ? ValidationSeverity.error : severityParam\n return {\n severity,\n key,\n params: _params,\n messages,\n valid,\n }\n },\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"numeric.js","sourceRoot":"","sources":["../../../../src/validation/fieldValidators/numeric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEpE,MAAM,CAAC,MAAM,OAAO,GAClB,CAAC,UAAU,GAAG,gBAAgB,EAAE,gBAAqB,EAAE,EAAE,EAAE,CAC3D,CAAC,KAAa,EAAE,GAAQ,EAA6B,EAAE;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpE,OAAO,OAAO,CAAC,OAAO,CACpB,uBAAuB,CAAC,cAAc,CAAC;QACrC,KAAK;QACL,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,kBAAkB,CAAC,KAAK;KACnC,CAAC,CACH,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { Objects } from '../../utils'\nimport { ValidationResultFactory } from '../factory'\nimport { ValidationResult, ValidationSeverity } from '../validation'\n\nexport const numeric =\n (messageKey = 'invalid_number', messageParams: any = {}) =>\n (field: string, obj: any): Promise<ValidationResult> => {\n const value = Objects.path(field)(obj)\n const valid = Objects.isEmpty(value) || !Number.isNaN(Number(value))\n\n return Promise.resolve(\n ValidationResultFactory.createInstance({\n valid,\n key: messageKey,\n params: messageParams,\n severity: ValidationSeverity.error,\n })\n )\n }\n"]}
1
+ {"version":3,"file":"numeric.js","sourceRoot":"","sources":["../../../../src/validation/fieldValidators/numeric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEpE,MAAM,CAAC,MAAM,OAAO,GAClB,CAAC,UAAU,GAAG,gBAAgB,EAAE,aAAa,GAAQ,EAAE,EAAE,EAAE,CAC3D,CAAC,KAAa,EAAE,GAAQ,EAA6B,EAAE;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpE,OAAO,OAAO,CAAC,OAAO,CACpB,uBAAuB,CAAC,cAAc,CAAC;QACrC,KAAK;QACL,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,kBAAkB,CAAC,KAAK;KACnC,CAAC,CACH,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { Objects } from '../../utils'\nimport { ValidationResultFactory } from '../factory'\nimport { ValidationResult, ValidationSeverity } from '../validation'\n\nexport const numeric =\n (messageKey = 'invalid_number', messageParams: any = {}) =>\n (field: string, obj: any): Promise<ValidationResult> => {\n const value = Objects.path(field)(obj)\n const valid = Objects.isEmpty(value) || !Number.isNaN(Number(value))\n\n return Promise.resolve(\n ValidationResultFactory.createInstance({\n valid,\n key: messageKey,\n params: messageParams,\n severity: ValidationSeverity.error,\n })\n )\n }\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"numericPositive.js","sourceRoot":"","sources":["../../../../src/validation/fieldValidators/numericPositive.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,UAAkB,EAAE,gBAAqB,EAAE,EAAE,EAAE,CAChD,CAAO,KAAa,EAAE,GAAQ,EAA6B,EAAE;IAC3D,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACjF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAElD,OAAO,uBAAuB,CAAC,cAAc,CAAC;QAC5C,KAAK;QACL,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,kBAAkB,CAAC,KAAK;KACnC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA","sourcesContent":["import { Objects } from '../../utils'\nimport { ValidationResultFactory } from '../factory'\nimport { ValidationResult, ValidationSeverity } from '../validation'\nimport { numeric } from './numeric'\n\nexport const numericPositive =\n (messageKey: string, messageParams: any = {}) =>\n async (field: string, obj: any): Promise<ValidationResult> => {\n const validateNumberResult = await numeric(messageKey, messageParams)(field, obj)\n if (!validateNumberResult.valid) {\n return validateNumberResult\n }\n const value = Objects.path(field)(obj)\n const valid = Objects.isEmpty(value) || value >= 0\n\n return ValidationResultFactory.createInstance({\n valid,\n key: messageKey,\n params: messageParams,\n severity: ValidationSeverity.error,\n })\n }\n"]}
1
+ {"version":3,"file":"numericPositive.js","sourceRoot":"","sources":["../../../../src/validation/fieldValidators/numericPositive.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,UAAkB,EAAE,aAAa,GAAQ,EAAE,EAAE,EAAE,CAChD,CAAO,KAAa,EAAE,GAAQ,EAA6B,EAAE;IAC3D,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACjF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAElD,OAAO,uBAAuB,CAAC,cAAc,CAAC;QAC5C,KAAK;QACL,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,kBAAkB,CAAC,KAAK;KACnC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA","sourcesContent":["import { Objects } from '../../utils'\nimport { ValidationResultFactory } from '../factory'\nimport { ValidationResult, ValidationSeverity } from '../validation'\nimport { numeric } from './numeric'\n\nexport const numericPositive =\n (messageKey: string, messageParams: any = {}) =>\n async (field: string, obj: any): Promise<ValidationResult> => {\n const validateNumberResult = await numeric(messageKey, messageParams)(field, obj)\n if (!validateNumberResult.valid) {\n return validateNumberResult\n }\n const value = Objects.path(field)(obj)\n const valid = Objects.isEmpty(value) || value >= 0\n\n return ValidationResultFactory.createInstance({\n valid,\n key: messageKey,\n params: messageParams,\n severity: ValidationSeverity.error,\n })\n }\n"]}
@@ -3,7 +3,7 @@ const getKey = (result) => result === null || result === void 0 ? void 0 : resul
3
3
  const getParams = (result) => result === null || result === void 0 ? void 0 : result.params;
4
4
  const getSeverity = (result) => { var _a; return (_a = result === null || result === void 0 ? void 0 : result.severity) !== null && _a !== void 0 ? _a : ValidationSeverity.error; };
5
5
  const getMessages = (result) => result === null || result === void 0 ? void 0 : result.messages;
6
- const getMessage = (lang) => (result) => { var _a, _b, _c; return (_b = (_a = result === null || result === void 0 ? void 0 : result.messages) === null || _a === void 0 ? void 0 : _a[lang]) !== null && _b !== void 0 ? _b : Object.values((_c = result === null || result === void 0 ? void 0 : result.messages) !== null && _c !== void 0 ? _c : {})[0]; }; // fallback to first message if the requested language is not available
6
+ const getMessage = (lang) => (result) => { var _a; var _b, _c; return (_b = (_a = result === null || result === void 0 ? void 0 : result.messages) === null || _a === void 0 ? void 0 : _a[lang]) !== null && _b !== void 0 ? _b : Object.values((_c = result === null || result === void 0 ? void 0 : result.messages) !== null && _c !== void 0 ? _c : {})[0]; }; // fallback to first message if the requested language is not available
7
7
  const hasMessages = (result) => (result === null || result === void 0 ? void 0 : result.messages) != null && Object.keys(result.messages).length > 0;
8
8
  const isError = (result) => getSeverity(result) === ValidationSeverity.error;
9
9
  export const ValidationResults = {
@@ -1 +1 @@
1
- {"version":3,"file":"validationResults.js","sourceRoot":"","sources":["../../../src/validation/validationResults.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEnE,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAsB,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAA;AAE5E,MAAM,SAAS,GAAG,CAAC,MAAwB,EAAsC,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA;AAElG,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAsB,EAAE,WAAC,OAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,mCAAI,kBAAkB,CAAC,KAAK,CAAA,EAAA,CAAA;AAElH,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAsB,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA;AAEtF,MAAM,UAAU,GACd,CAAC,IAAkB,EAAE,EAAE,CACvB,CAAC,MAAwB,EAAsB,EAAE,mBAC/C,OAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAG,IAAI,CAAC,mCAAI,MAAM,CAAC,MAAM,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAA,CAAC,uEAAuE;AAEhJ,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAW,EAAE,CACxD,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,KAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAErE,MAAM,OAAO,GAAG,CAAC,MAAwB,EAAW,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAA;AAEvG,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,SAAS;IACT,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;CACR,CAAA","sourcesContent":["import { Labels, LanguageCode } from '../language'\nimport { ValidationResult, ValidationSeverity } from './validation'\n\nconst getKey = (result: ValidationResult): string | undefined => result?.key\n\nconst getParams = (result: ValidationResult): { [key: string]: any } | undefined => result?.params\n\nconst getSeverity = (result: ValidationResult): ValidationSeverity => result?.severity ?? ValidationSeverity.error\n\nconst getMessages = (result: ValidationResult): Labels | undefined => result?.messages\n\nconst getMessage =\n (lang: LanguageCode) =>\n (result: ValidationResult): string | undefined =>\n result?.messages?.[lang] ?? Object.values(result?.messages ?? {})[0] // fallback to first message if the requested language is not available\n\nconst hasMessages = (result: ValidationResult): boolean =>\n result?.messages != null && Object.keys(result.messages).length > 0\n\nconst isError = (result: ValidationResult): boolean => getSeverity(result) === ValidationSeverity.error\n\nexport const ValidationResults = {\n getKey,\n getParams,\n getSeverity,\n getMessages,\n getMessage,\n hasMessages,\n isError,\n}\n"]}
1
+ {"version":3,"file":"validationResults.js","sourceRoot":"","sources":["../../../src/validation/validationResults.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEnE,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAsB,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAA;AAE5E,MAAM,SAAS,GAAG,CAAC,MAAwB,EAAsC,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA;AAElG,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAsB,EAAE,wBAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,mCAAI,kBAAkB,CAAC,KAAK,GAAA,CAAA;AAElH,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAsB,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA;AAEtF,MAAM,UAAU,GACd,CAAC,IAAkB,EAAE,EAAE,CACvB,CAAC,MAAwB,EAAsB,EAAE,oCAC/C,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAG,IAAI,CAAC,mCAAI,MAAM,CAAC,MAAM,OAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAA,CAAA,CAAC,uEAAuE;AAEhJ,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAW,EAAE,CACxD,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,KAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAErE,MAAM,OAAO,GAAG,CAAC,MAAwB,EAAW,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAA;AAEvG,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,SAAS;IACT,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;CACR,CAAA","sourcesContent":["import { Labels, LanguageCode } from '../language'\nimport { ValidationResult, ValidationSeverity } from './validation'\n\nconst getKey = (result: ValidationResult): string | undefined => result?.key\n\nconst getParams = (result: ValidationResult): { [key: string]: any } | undefined => result?.params\n\nconst getSeverity = (result: ValidationResult): ValidationSeverity => result?.severity ?? ValidationSeverity.error\n\nconst getMessages = (result: ValidationResult): Labels | undefined => result?.messages\n\nconst getMessage =\n (lang: LanguageCode) =>\n (result: ValidationResult): string | undefined =>\n result?.messages?.[lang] ?? Object.values(result?.messages ?? {})[0] // fallback to first message if the requested language is not available\n\nconst hasMessages = (result: ValidationResult): boolean =>\n result?.messages != null && Object.keys(result.messages).length > 0\n\nconst isError = (result: ValidationResult): boolean => getSeverity(result) === ValidationSeverity.error\n\nexport const ValidationResults = {\n getKey,\n getParams,\n getSeverity,\n getMessages,\n getMessage,\n hasMessages,\n isError,\n}\n"]}
@@ -50,8 +50,8 @@ const isValid = (validation) => Objects.isEmpty(validation) || validation.valid;
50
50
  const isNotValid = (validation) => !isValid(validation);
51
51
  const isObjValid = (obj) => isValid(getValidation(obj));
52
52
  const getCounts = (validation) => validation === null || validation === void 0 ? void 0 : validation.counts;
53
- const getErrorsCount = (validation) => { var _a, _b; return (_b = (_a = getCounts(validation)) === null || _a === void 0 ? void 0 : _a.errors) !== null && _b !== void 0 ? _b : 0; };
54
- const getWarningsCount = (validation) => { var _a, _b; return (_b = (_a = getCounts(validation)) === null || _a === void 0 ? void 0 : _a.warnings) !== null && _b !== void 0 ? _b : 0; };
53
+ const getErrorsCount = (validation) => { var _a; var _b; return (_b = (_a = getCounts(validation)) === null || _a === void 0 ? void 0 : _a.errors) !== null && _b !== void 0 ? _b : 0; };
54
+ const getWarningsCount = (validation) => { var _a; var _b; return (_b = (_a = getCounts(validation)) === null || _a === void 0 ? void 0 : _a.warnings) !== null && _b !== void 0 ? _b : 0; };
55
55
  /**
56
56
  * Creates a validation object like ValidationFactory.createInstance does, but without checking again
57
57
  * if fields is empty (checking it is O(N) for objects with many properties).
@@ -1 +1 @@
1
- {"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../src/validation/validations.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from '../utils'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\nconst mergeValidations =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult = { ...getFieldValidations(validationPrev) }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n const validationResult: Validation = { ...validationPrev, [keys.fields]: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst dissocFieldValidation =\n (fieldKey: string, sideEffect = false, doCleanup = true) =>\n (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n\nconst dissocFieldValidationsStartingWith =\n (fieldStartsWith: string, sideEffect = false, doCleanup = true) =>\n (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
1
+ {"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../src/validation/validations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,MAAM,IAAI,GAAG;IACX,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;CACrB,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAW,EAAE,CAAC,CAAC,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAA,CAAA;AAE9D,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAc,EAAE,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,KAAI,iBAAiB,CAAC,cAAc,EAAE,CAAA;AAErG,MAAM,mBAAmB,GAAG,CAAC,UAAsB,EAAoB,EAAE,wBAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,mCAAI,EAAE,GAAA,CAAA;AAElG,MAAM,wBAAwB,GAC5B,CAAC,KAAsB,EAAE,EAAE,CAC3B,CAAC,UAAsB,EAA0B,EAAE;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,iBAAiB,GAA2B,UAAU,CAAA;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,iBAAiB,GAAG,mBAAmB,CAAC,iBAAkB,CAAC,CAAC,IAAI,CAAC,CAAA;YACjE,OAAO,CAAC,iBAAiB,CAAA,CAAC,kDAAkD;QAC9E,CAAC,CAAC,CAAA;QACF,OAAO,iBAAiB,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC,CAAA;AAEH,MAAM,kBAAkB,GACtB,CAAC,KAAsB,EAAE,YAAY,GAAe,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,CAC1F,CAAC,UAAsB,EAAc,EAAE,wBACrC,wBAAwB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,mCAAI,YAAY,GAAA,CAAA;AAE/D,MAAM,2BAA2B,GAC/B,CAAC,MAA2B,EAAE,EAAE,CAChC,CAAC,UAAsB,EAAoB,EAAE;IAC3C,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAA;QACnE,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAA;QACzC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAEH,MAAM,SAAS,GAAG,CAAC,UAAsB,EAAsB,EAAE,wBAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,mCAAI,EAAE,GAAA,CAAA;AAE1F,MAAM,WAAW,GAAG,CAAC,UAAsB,EAAsB,EAAE,wBAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,mCAAI,EAAE,GAAA,CAAA;AAE9F,MAAM,SAAS,GAAG,CAAC,UAAsB,EAAW,EAAE;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACpC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACnG,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,UAAsB,EAAW,EAAE;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACxC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AACvG,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,UAAsB,EAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,CAAA;AACpG,MAAM,UAAU,GAAG,CAAC,UAAsB,EAAW,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAC5E,MAAM,UAAU,GAAG,CAAC,GAA4B,EAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzF,MAAM,SAAS,GAAG,CAAC,UAAsB,EAAgC,EAAE,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA;AAC9F,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,gCAAC,MAAA,SAAS,CAAC,UAAU,CAAC,0CAAE,MAAM,mCAAI,CAAC,GAAA,CAAA;AAC7F,MAAM,gBAAgB,GAAG,CAAC,UAAsB,EAAU,EAAE,gCAAC,MAAA,SAAS,CAAC,UAAU,CAAC,0CAAE,QAAQ,mCAAI,CAAC,GAAA,CAAA;AAEjG;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,MAM1B,EAAc,EAAE;IACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC7D,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,CAAA;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAC7C,IAAI,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACnD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,UAAsB,EAAc,EAAE;IACjE,IAAI,cAAc,GAAG,IAAI,CAAA;IACzB,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,MAAM,gCAAgC,GAAqB,EAAE,CAAA;IAE7D,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAA;QACnE,gCAAgC,CAAC,QAAQ,CAAC,GAAG,sBAAsB,CAAA;QACnE,SAAS,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;YAClC,cAAc,GAAG,KAAK,CAAA;QACxB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACxC,wFAAwF;IACxF,8GAA8G;IAC9G,MAAM,KAAK,GAAG,cAAc,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IAE5E,OAAO,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC5G,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,OAA0C,EAAE,EAAE,CAAC,CAAC,UAAsB,EAAE,EAAE;IAC1F,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEtB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACtC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC1B,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;QAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,UAAsB,EAAoB,EAAE;IACnE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,QAAQ,CAAC,CAAC,iBAAiB,EAAE,EAAE;QAC7B,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAA;QAC7C,QAAQ,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAA;IACnD,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAEd,OAAO;QACL,MAAM;QACN,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,UAAsB,EAAc,EAAE,CAAC,iCACxD,UAAU,KACb,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,IACnC,CAAA;AAEF,MAAM,wBAAwB,GAAG,CAAC,UAAsB,EAAW,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAC5G,MAAM,0BAA0B,GAAG,CAAC,UAAsB,EAAW,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;AAEhH,MAAM,OAAO,GAAG,CAAC,UAAsB,EAAc,EAAE;IACrD,4CAA4C;IAC5C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,aAAa,GAAqB,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;QACvD,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;YAClC,aAAa,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAA;YAC7C,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACxC,mFAAmF;IACnF,8GAA8G;IAC9G,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IAExE,OAAO,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;AACzF,CAAC,CAAA;AAED,MAAM,gBAAgB,GACpB,CAAC,cAA0B,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,CACjD,CAAC,cAA0B,EAAc,EAAE;IACzC,MAAM,sBAAsB,qBAAQ,mBAAmB,CAAC,cAAc,CAAC,CAAE,CAAA;IACzE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAEhE,+FAA+F;IAC/F,KAAK,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnF,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjC,IAAI,SAAS,EAAE,CAAC;gBACd,8DAA8D;gBAC9D,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACN,sBAAsB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,cAAc,EAAE,CAAA;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,qBAAqB,GAAG,mBAAmB;gBAC/C,CAAC,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBAClE,CAAC,CAAC,mBAAmB,CAAA;YACvB,sBAAsB,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,mCAAoB,cAAc,KAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAE,CAAA;IACjG,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;IACnD,gBAAgB,CAAC,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;IACvD,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;AACtF,CAAC,CAAA;AAEH,MAAM,qBAAqB,GACzB,CAAC,QAAgB,EAAE,UAAU,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,CAC3D,CAAC,UAAsB,EAAc,EAAE;IACrC,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IACzG,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;AACnE,CAAC,CAAA;AAEH,MAAM,kCAAkC,GACtC,CAAC,eAAuB,EAAE,UAAU,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,CAClE,CAAC,UAAsB,EAAc,EAAE;IACrC,IAAI,EAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA;QAAE,OAAO,UAAU,CAAA;IAE1C,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,mBAAM,UAAU,CAAC,MAAM,CAAE,CAAA;IAC/E,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,MAAM,GAAG,aAAa,CAAA;QACjC,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,MAAM,iBAAiB,mCAAQ,UAAU,KAAE,MAAM,EAAE,aAAa,GAAE,CAAA;IAClE,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;AACnE,CAAC,CAAA;AAEH,MAAM,eAAe,GACnB,CAAC,cAA0B,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,CACjD,CAAC,cAA0B,EAAc,EAAE;IACzC,MAAM,sBAAsB,qBACvB,mBAAmB,CAAC,cAAc,CAAC,CACvC,CAAA;IACD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAEhE,+FAA+F;IAC/F,KAAK,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnF,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjC,IAAI,SAAS,EAAE,CAAC;gBACd,8DAA8D;gBAC9D,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACN,sBAAsB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,cAAc,EAAE,CAAA;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,qBAAqB,GAAG,mBAAmB;gBAC/C,CAAC,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBAClE,CAAC,CAAC,mBAAmB,CAAA;YACvB,sBAAsB,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,mCAAoB,cAAc,KAAE,MAAM,EAAE,sBAAsB,GAAE,CAAA;IAC1F,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;IACnD,gBAAgB,CAAC,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;IAEvD,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;AACtF,CAAC,CAAA;AAEH,MAAM,qBAAqB,GAAG,CAC5B,oBAAsC,EACtC,oBAAsC,EACpB,EAAE;IACpB,MAAM,MAAM,qBAA0B,oBAAoB,CAAE,CAAA;IAC5D,KAAK,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnF,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC1D,MAAM,CAAC,QAAQ,CAAC,GAAG,mBAAmB;YACpC,CAAC,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;YAClE,CAAC,CAAC,mBAAmB,CAAA;IACzB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;AAElH,MAAM,SAAS,GAAG,CAAC,MAA0B,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAChE,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AAEhE,MAAM,WAAW,GAAG,CAAC,QAA4B,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CACpE,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;AAEpE,MAAM,mBAAmB,GAAG,CAAC,gBAAkC,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAClF,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAA;AAE1E,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,eAA2B,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CACzF,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;AAEhF,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,eAA2B,EAAE,EAAE,CAAC,CAAC,UAAsB,EAAE,EAAE,CACtG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;AAErG,MAAM,eAAe,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,GAA4B,EAAE,EAAE,CAC1E,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AAEtD,MAAM,gBAAgB,GAAG,CAAC,GAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;AAEtG,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI;IACJ,aAAa;IACb,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,2BAA2B;IAC3B,SAAS;IACT,WAAW;IACX,SAAS;IACT,WAAW;IACX,OAAO;IACP,UAAU;IACV,UAAU;IACV,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,mBAAmB;IACnB,QAAQ;IACR,eAAe;IACf,wBAAwB;IACxB,0BAA0B;IAC1B,YAAY;IACZ,OAAO;IACP,gBAAgB;IAChB,qBAAqB;IACrB,kCAAkC;IAClC,eAAe;IACf,qBAAqB;IACrB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,eAAe;IACf,gBAAgB;CACjB,CAAA","sourcesContent":["import { Objects } from '../utils'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\nconst mergeValidations =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult = { ...getFieldValidations(validationPrev) }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n const validationResult: Validation = { ...validationPrev, [keys.fields]: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst dissocFieldValidation =\n (fieldKey: string, sideEffect = false, doCleanup = true) =>\n (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n\nconst dissocFieldValidationsStartingWith =\n (fieldStartsWith: string, sideEffect = false, doCleanup = true) =>\n (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/validation/validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAkD,MAAM,cAAc,CAAA;AAMjG,MAAM,sBAAsB,GAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AAErE,MAAM,OAAO,SAAS;IACN,aAAa,CAAC,GAAQ,EAAE,KAAa,EAAE,eAAsC;;YACzF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1G,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,MAAM,QAAQ,GAA4B,EAAE,CAAA;YAC5C,WAAW,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;oBACtF,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;YAC1D,OAAO,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtE,CAAC;KAAA;IAEK,QAAQ;6DACZ,GAAQ,EACR,gBAA4D,EAC5D,UAA2B,sBAAsB;YAEjD,MAAM,qBAAqB,GAAsB,MAAM,OAAO,CAAC,GAAG,CAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,KAAiC,EAAE,0CAA5B,CAAC,KAAK,EAAE,eAAe,CAAC,IAClE,OAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA,GAAA,CAChD,CACF,CAAA;YACD,MAAM,MAAM,GAAqB,EAAE,CAAA;YACnC,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrD,MAAM,eAAe,GAAe,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBAChE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBAC3B,KAAK,GAAG,KAAK,CAAA;gBACf,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBACnD,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAA;gBACjC,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5D,CAAC;KAAA;CACF","sourcesContent":["import { ValidationFactory } from './factory'\nimport { FieldValidator } from './fieldValidator'\nimport { ValidationSeverity, Validation, ValidationResult, ValidationFields } from './validation'\n\ninterface ValidateOptions {\n removeValid: boolean\n}\n\nconst defaultValidateOptions: ValidateOptions = { removeValid: true }\n\nexport class Validator {\n private async validateField(obj: any, field: string, fieldValidators: Array<FieldValidator>): Promise<Validation> {\n const validations = await Promise.all(fieldValidators.map((fieldValidator) => fieldValidator(field, obj)))\n const errors: Array<ValidationResult> = []\n const warnings: Array<ValidationResult> = []\n validations.forEach((validationResult) => {\n if (!validationResult.valid) {\n const arr = validationResult.severity === ValidationSeverity.error ? errors : warnings\n arr.push(validationResult)\n }\n })\n const valid = errors.length === 0 && warnings.length === 0\n return ValidationFactory.createInstance({ valid, errors, warnings })\n }\n\n async validate(\n obj: any,\n fieldsValidators: { [field: string]: Array<FieldValidator> },\n options: ValidateOptions = defaultValidateOptions\n ): Promise<Validation> {\n const fieldsValidationArray: Array<Validation> = await Promise.all(\n Object.entries(fieldsValidators).map(async ([field, fieldValidators]) =>\n this.validateField(obj, field, fieldValidators)\n )\n )\n const fields: ValidationFields = {}\n let valid = true\n Object.keys(fieldsValidators).forEach((field, index) => {\n const fieldValidation: Validation = fieldsValidationArray[index]\n if (!fieldValidation.valid) {\n valid = false\n }\n if (!options.removeValid || !fieldValidation.valid) {\n fields[field] = fieldValidation\n }\n })\n return ValidationFactory.createInstance({ valid, fields })\n }\n}\n"]}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/validation/validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAkD,MAAM,cAAc,CAAA;AAMjG,MAAM,sBAAsB,GAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AAErE,MAAM,OAAO,SAAS;IACN,aAAa,CAAC,GAAQ,EAAE,KAAa,EAAE,eAAsC;;YACzF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1G,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,MAAM,QAAQ,GAA4B,EAAE,CAAA;YAC5C,WAAW,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;oBACtF,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;YAC1D,OAAO,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtE,CAAC;KAAA;IAEK,QAAQ;6DACZ,GAAQ,EACR,gBAA4D,EAC5D,OAAO,GAAoB,sBAAsB;YAEjD,MAAM,qBAAqB,GAAsB,MAAM,OAAO,CAAC,GAAG,CAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,KAAiC,EAAE,0CAA5B,CAAC,KAAK,EAAE,eAAe,CAAC,IAClE,OAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA,CACjD,CAAC,CADgD,CAChD,CACF,CAAA;YACD,MAAM,MAAM,GAAqB,EAAE,CAAA;YACnC,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrD,MAAM,eAAe,GAAe,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBAChE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBAC3B,KAAK,GAAG,KAAK,CAAA;gBACf,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBACnD,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAA;gBACjC,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5D,CAAC;KAAA;CACF","sourcesContent":["import { ValidationFactory } from './factory'\nimport { FieldValidator } from './fieldValidator'\nimport { ValidationSeverity, Validation, ValidationResult, ValidationFields } from './validation'\n\ninterface ValidateOptions {\n removeValid: boolean\n}\n\nconst defaultValidateOptions: ValidateOptions = { removeValid: true }\n\nexport class Validator {\n private async validateField(obj: any, field: string, fieldValidators: Array<FieldValidator>): Promise<Validation> {\n const validations = await Promise.all(fieldValidators.map((fieldValidator) => fieldValidator(field, obj)))\n const errors: Array<ValidationResult> = []\n const warnings: Array<ValidationResult> = []\n validations.forEach((validationResult) => {\n if (!validationResult.valid) {\n const arr = validationResult.severity === ValidationSeverity.error ? errors : warnings\n arr.push(validationResult)\n }\n })\n const valid = errors.length === 0 && warnings.length === 0\n return ValidationFactory.createInstance({ valid, errors, warnings })\n }\n\n async validate(\n obj: any,\n fieldsValidators: { [field: string]: Array<FieldValidator> },\n options: ValidateOptions = defaultValidateOptions\n ): Promise<Validation> {\n const fieldsValidationArray: Array<Validation> = await Promise.all(\n Object.entries(fieldsValidators).map(async ([field, fieldValidators]) =>\n this.validateField(obj, field, fieldValidators)\n )\n )\n const fields: ValidationFields = {}\n let valid = true\n Object.keys(fieldsValidators).forEach((field, index) => {\n const fieldValidation: Validation = fieldsValidationArray[index]\n if (!fieldValidation.valid) {\n valid = false\n }\n if (!options.removeValid || !fieldValidation.valid) {\n fields[field] = fieldValidation\n }\n })\n return ValidationFactory.createInstance({ valid, fields })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/expression/javascript/evaluator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionContext } from '../context'\nimport { ExpressionEvaluator } from '../evaluator'\nimport { ExpressionFunctions } from '../function'\nimport { ExpressionNode, ExpressionNodeEvaluatorConstructor, ExpressionNodeType } from '../node'\nimport { SystemError } from '../../error'\n\nimport { functionsDefault } from './functionsDefault'\nimport { ArrayEvaluator } from './node/array'\nimport { BinaryEvaluator } from './node/binary'\nimport { CallEvaluator } from './node/call'\nimport { CompoundEvaluator } from './node/compound'\nimport { ConditionalEvaluator } from './node/conditional'\nimport { IdentifierEvaluator } from './node/identifier'\nimport { LiteralEvaluator } from './node/literal'\nimport { MemberEvaluator } from './node/member'\nimport { SequenceEvaluator } from './node/sequence'\nimport { ThisEvaluator } from './node/this'\nimport { UnaryEvaluator } from './node/unary'\nimport { JavascriptExpressionParser } from './parser/parser'\n\ntype Evaluators<C extends ExpressionContext> = {\n [nodeType in ExpressionNodeType]?: ExpressionNodeEvaluatorConstructor<C, ExpressionNode<ExpressionNodeType>>\n}\n\nconst defaultEvaluators = {\n [ExpressionNodeType.Array]: ArrayEvaluator,\n [ExpressionNodeType.Binary]: BinaryEvaluator,\n [ExpressionNodeType.Call]: CallEvaluator,\n [ExpressionNodeType.Compound]: CompoundEvaluator,\n [ExpressionNodeType.Conditional]: ConditionalEvaluator,\n [ExpressionNodeType.Identifier]: IdentifierEvaluator,\n [ExpressionNodeType.Literal]: LiteralEvaluator,\n [ExpressionNodeType.Member]: MemberEvaluator,\n [ExpressionNodeType.Sequence]: SequenceEvaluator,\n [ExpressionNodeType.This]: ThisEvaluator,\n [ExpressionNodeType.Unary]: UnaryEvaluator,\n}\n\n// Parsed expressions cache: the same expressions are evaluated many times (e.g. for every node during a record update).\n// The cached expression nodes are shared, so evaluators must never modify them.\nconst PARSED_EXPRESSIONS_CACHE_MAX_SIZE = 1000\nconst parsedExpressionsCache = new Map<string, ExpressionNode<ExpressionNodeType>>()\nconst expressionParser = new JavascriptExpressionParser()\n\nexport const parseExpression = (expression: string): ExpressionNode<ExpressionNodeType> => {\n let expressionNode = parsedExpressionsCache.get(expression)\n if (!expressionNode) {\n expressionNode = expressionParser.parse(expression)\n if (parsedExpressionsCache.size >= PARSED_EXPRESSIONS_CACHE_MAX_SIZE) {\n // evict the oldest entry (Map keeps insertion order)\n const oldestExpression = parsedExpressionsCache.keys().next().value\n if (oldestExpression !== undefined) parsedExpressionsCache.delete(oldestExpression)\n }\n parsedExpressionsCache.set(expression, expressionNode)\n }\n return expressionNode\n}\n\nexport class JavascriptExpressionEvaluator<C extends ExpressionContext> implements ExpressionEvaluator<C> {\n functions: ExpressionFunctions<C>\n evaluators: Evaluators<C>\n\n constructor(functions: ExpressionFunctions<C> = {}, evaluators: Evaluators<C> = {}) {\n this.evaluators = { ...defaultEvaluators, ...evaluators }\n this.functions = { ...functionsDefault, ...functions }\n }\n\n async evaluate(expression: string, context?: C): Promise<any> {\n return this.evaluateNode(parseExpression(expression), context ?? ({} as C))\n }\n\n async evaluateNode(expressionNode: ExpressionNode<ExpressionNodeType>, context: C): Promise<any> {\n const { type } = expressionNode\n\n const NodeEvaluator = this.evaluators[type]\n if (!NodeEvaluator) {\n throw new SystemError('expression.unsupportedFunctionType', { type })\n }\n return new NodeEvaluator(this, context).evaluate(expressionNode)\n }\n}\n"]}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/expression/javascript/evaluator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionContext } from '../context'\nimport { ExpressionEvaluator } from '../evaluator'\nimport { ExpressionFunctions } from '../function'\nimport { ExpressionNode, ExpressionNodeEvaluatorConstructor, ExpressionNodeType } from '../node'\nimport { SystemError } from '../../error'\n\nimport { functionsDefault } from './functionsDefault'\nimport { ArrayEvaluator } from './node/array'\nimport { BinaryEvaluator } from './node/binary'\nimport { CallEvaluator } from './node/call'\nimport { CompoundEvaluator } from './node/compound'\nimport { ConditionalEvaluator } from './node/conditional'\nimport { IdentifierEvaluator } from './node/identifier'\nimport { LiteralEvaluator } from './node/literal'\nimport { MemberEvaluator } from './node/member'\nimport { SequenceEvaluator } from './node/sequence'\nimport { ThisEvaluator } from './node/this'\nimport { UnaryEvaluator } from './node/unary'\nimport { JavascriptExpressionParser } from './parser/parser'\n\ntype Evaluators<C extends ExpressionContext> = {\n [nodeType in ExpressionNodeType]?: ExpressionNodeEvaluatorConstructor<C, ExpressionNode<ExpressionNodeType>>\n}\n\nconst defaultEvaluators = {\n [ExpressionNodeType.Array]: ArrayEvaluator,\n [ExpressionNodeType.Binary]: BinaryEvaluator,\n [ExpressionNodeType.Call]: CallEvaluator,\n [ExpressionNodeType.Compound]: CompoundEvaluator,\n [ExpressionNodeType.Conditional]: ConditionalEvaluator,\n [ExpressionNodeType.Identifier]: IdentifierEvaluator,\n [ExpressionNodeType.Literal]: LiteralEvaluator,\n [ExpressionNodeType.Member]: MemberEvaluator,\n [ExpressionNodeType.Sequence]: SequenceEvaluator,\n [ExpressionNodeType.This]: ThisEvaluator,\n [ExpressionNodeType.Unary]: UnaryEvaluator,\n}\n\n// Parsed expressions cache: the same expressions are evaluated many times (e.g. for every node during a record update).\n// The cached expression nodes are shared, so evaluators must never modify them.\nconst PARSED_EXPRESSIONS_CACHE_MAX_SIZE = 1000\nconst parsedExpressionsCache = new Map<string, ExpressionNode<ExpressionNodeType>>()\nconst expressionParser = new JavascriptExpressionParser()\n\nexport const parseExpression = (expression: string): ExpressionNode<ExpressionNodeType> => {\n let expressionNode = parsedExpressionsCache.get(expression)\n if (!expressionNode) {\n expressionNode = expressionParser.parse(expression)\n if (parsedExpressionsCache.size >= PARSED_EXPRESSIONS_CACHE_MAX_SIZE) {\n // evict the oldest entry (Map keeps insertion order)\n const oldestExpression = parsedExpressionsCache.keys().next().value\n if (oldestExpression !== undefined) parsedExpressionsCache.delete(oldestExpression)\n }\n parsedExpressionsCache.set(expression, expressionNode)\n }\n return expressionNode\n}\n\nexport class JavascriptExpressionEvaluator<C extends ExpressionContext> implements ExpressionEvaluator<C> {\n functions: ExpressionFunctions<C>\n evaluators: Evaluators<C>\n\n constructor(functions: ExpressionFunctions<C> = {}, evaluators: Evaluators<C> = {}) {\n this.evaluators = { ...defaultEvaluators, ...evaluators }\n this.functions = { ...functionsDefault, ...functions }\n }\n\n async evaluate(expression: string, context?: C): Promise<any> {\n return this.evaluateNode(parseExpression(expression), context ?? ({} as C))\n }\n\n async evaluateNode(expressionNode: ExpressionNode<ExpressionNodeType>, context: C): Promise<any> {\n const { type } = expressionNode\n\n const NodeEvaluator = this.evaluators[type]\n if (!NodeEvaluator) {\n throw new SystemError('expression.unsupportedFunctionType', { type })\n }\n return new NodeEvaluator(this, context).evaluate(expressionNode)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/expression/javascript/global.ts"],"names":[],"mappings":";;;AACA,uCAAyC;AAEzC,MAAM,uBAAuB,GAAoB;IAC/C,KAAK;IACL,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;CACP,CAAA;AACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;AAE1D,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAAW,EAAO,EAAE;IACxE,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;IACD,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,mBAAW,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAdY,QAAA,uBAAuB,2BAcnC","sourcesContent":["import { Dictionary } from '../../common'\nimport { SystemError } from '../../error'\n\nconst globalObjectsDictionary: Dictionary<any> = {\n Array,\n Boolean,\n Date,\n Math,\n Number,\n String,\n}\nconst globalObjectsArray = Object.values(globalObjectsDictionary)\n\nexport const getGlobalObjectProperty = (name: string, object: any): any => {\n const globalObject = globalObjectsDictionary[name]\n if (globalObject) {\n return globalObject\n }\n if (object && globalObjectsArray.includes(object)) {\n const property = object[name]\n\n if (!property) {\n throw new SystemError('expression.undefinedFunction', { name })\n }\n return property\n }\n return null\n}\n"]}
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/expression/javascript/global.ts"],"names":[],"mappings":";;;AACA,uCAAyC;AAEzC,MAAM,uBAAuB,GAAoB;IAC/C,KAAK;IACL,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;CACP,CAAA;AACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;AAE1D,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAAW,EAAO,EAAE;IACxE,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;IACD,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,mBAAW,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAdY,QAAA,uBAAuB,GAAvB,uBAAuB,CAcnC","sourcesContent":["import { Dictionary } from '../../common'\nimport { SystemError } from '../../error'\n\nconst globalObjectsDictionary: Dictionary<any> = {\n Array,\n Boolean,\n Date,\n Math,\n Number,\n String,\n}\nconst globalObjectsArray = Object.values(globalObjectsDictionary)\n\nexport const getGlobalObjectProperty = (name: string, object: any): any => {\n const globalObject = globalObjectsDictionary[name]\n if (globalObject) {\n return globalObject\n }\n if (object && globalObjectsArray.includes(object)) {\n const property = object[name]\n\n if (!property) {\n throw new SystemError('expression.undefinedFunction', { name })\n }\n return property\n }\n return null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expression/javascript/node/array.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAE5C,qCAAqE;AAErE,MAAa,cAA4C,SAAQ,8BAA2C;IAC1G,QAAQ;QACN,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,mBAAW,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACtF,CAAC;CACF;AAJD,wCAIC","sourcesContent":["import { SystemError } from '../../../error'\nimport { ExpressionContext } from '../../context'\nimport { ArrayExpression, ExpressionNodeEvaluator } from '../../node'\n\nexport class ArrayEvaluator<C extends ExpressionContext> extends ExpressionNodeEvaluator<C, ArrayExpression> {\n evaluate(): Promise<any> {\n return Promise.reject(new SystemError('expression.notSupported', { type: 'array' }))\n }\n}\n"]}
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expression/javascript/node/array.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAE5C,qCAAqE;AAErE,oBAAyD,SAAQ,8BAA2C;IAC1G,QAAQ;QACN,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,mBAAW,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACtF,CAAC;CACF","sourcesContent":["import { SystemError } from '../../../error'\nimport { ExpressionContext } from '../../context'\nimport { ArrayExpression, ExpressionNodeEvaluator } from '../../node'\n\nexport class ArrayEvaluator<C extends ExpressionContext> extends ExpressionNodeEvaluator<C, ArrayExpression> {\n evaluate(): Promise<any> {\n return Promise.reject(new SystemError('expression.notSupported', { type: 'array' }))\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../src/expression/javascript/node/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { SystemError } from '../../../error'\nimport { Objects } from '../../../utils'\nimport { ExpressionContext } from '../../context'\nimport { BinaryExpression, ExpressionNodeEvaluator } from '../../node'\n\nconst booleanOperators: { [operator: string]: (a: any, b: any) => boolean } = {\n // Short-circuiting operators (we coerce the output to bool)\n '||': (a, b) => Boolean(a || b),\n '&&': (a, b) => Boolean(a && b),\n // Normal boolean operators:\n '==': (a, b) => a === b,\n '!=': (a, b) => a !== b,\n '<': (a, b) => a < b,\n '>': (a, b) => a > b,\n '<=': (a, b) => a <= b,\n '>=': (a, b) => a >= b,\n // Only allow one kind of equalities.\n // some hidden dependencies on === and !==...\n // '===': (a, b) => a === b,\n // '!==': (a, b) => a !== b,\n}\n\nconst arithmeticOperators: { [operator: string]: (a: number, b: number) => number } = {\n '+': (a, b) => a + b,\n '-': (a, b) => a - b,\n '*': (a, b) => a * b,\n '/': (a, b) => a / b,\n '%': (a, b) => a % b,\n '**': (a, b) => a ** b,\n // Don't allow bitwise operators:\n // '|': (a, b) => a | b,\n // '^': (a, b) => a ^ b,\n // '&': (a, b) => a & b,\n // Don't allow shifts either:\n // '<<': (a, b) => a << b,\n // '>>': (a, b) => a >> b,\n // '>>>': (a, b) => a >>> b,\n}\n\nconst stringOperators: { [operatos: string]: (a: string, b: string) => string } = {\n '+': (a, b) => a + b,\n}\n\nconst binaryOperators = {\n ...booleanOperators,\n ...arithmeticOperators,\n}\n\nconst isNumber = (value: any) => !Objects.isNil(value) && value.constructor === Number\nconst isString = (value: any) => !Objects.isNil(value) && value.constructor === String\n\nexport class BinaryEvaluator<C extends ExpressionContext> extends ExpressionNodeEvaluator<C, BinaryExpression> {\n async evaluate(expressionNode: BinaryExpression): Promise<any> {\n const { left, right, operator } = expressionNode\n\n const fn = binaryOperators[operator]\n if (!fn) {\n throw new SystemError('expression.booleanOperatorNotSupported', { operator })\n }\n\n const leftResult = await this.evaluator.evaluateNode(left, this.context)\n const rightResult = await this.evaluator.evaluateNode(right, this.context)\n\n // string operators\n if (operator in stringOperators) {\n if (isString(leftResult) || isString(rightResult)) {\n // string concatenation with null or undefined gives null (like arithmetic operations with null)\n if (Objects.isNil(leftResult) || Objects.isNil(rightResult)) {\n return null\n }\n const strFn = stringOperators[operator]\n return strFn(leftResult as string, rightResult as string)\n }\n // operator can be in arithmeticOperators (+), do not return anything now\n }\n\n // Arithmetic operators will always return nulls for any non-numeric inputs\n if (operator in arithmeticOperators) {\n if (isNumber(leftResult) && isNumber(rightResult)) {\n return fn(leftResult as number, rightResult as number)\n }\n return null\n }\n\n const nullCount = [leftResult, rightResult].filter((result) => result === null || result === undefined).length\n\n // Boolean operators:\n // Like ternary logic, but logical OR has special handling.\n // The expression is boolean if either value is not null.\n // Otherwise the result is null.\n // All other operators return null if either operand is null\n const isValid = (operator === '||' && nullCount < 2) || nullCount === 0\n\n return isValid ? fn(leftResult, rightResult) : null\n }\n}\n"]}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../src/expression/javascript/node/binary.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA4C;AAC5C,0CAAwC;AAExC,qCAAsE;AAEtE,MAAM,gBAAgB,GAAwD;IAC5E,4DAA4D;IAC5D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,4BAA4B;IAC5B,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACtB,qCAAqC;IACrC,6CAA6C;IAC7C,6BAA6B;IAC7B,6BAA6B;CAC9B,CAAA;AAED,MAAM,mBAAmB,GAA6D;IACpF,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAA,CAAC,EAAI,CAAC,CAAA;IACtB,iCAAiC;IACjC,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,4BAA4B;CAC7B,CAAA;AAED,MAAM,eAAe,GAA6D;IAChF,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;CACrB,CAAA;AAED,MAAM,eAAe,mCAChB,gBAAgB,GAChB,mBAAmB,CACvB,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,eAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAA;AACtF,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,eAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAA;AAEtF,qBAA0D,SAAQ,8BAA4C;IACtG,QAAQ,CAAC,cAAgC;;YAC7C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAA;YAEhD,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;YACpC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,mBAAW,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC/E,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACxE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAE1E,mBAAmB;YACnB,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;gBAChC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClD,gGAAgG;oBAChG,IAAI,eAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,eAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC5D,OAAO,IAAI,CAAA;oBACb,CAAC;oBACD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;oBACvC,OAAO,KAAK,CAAC,UAAoB,EAAE,WAAqB,CAAC,CAAA;gBAC3D,CAAC;gBACD,yEAAyE;YAC3E,CAAC;YAED,2EAA2E;YAC3E,IAAI,QAAQ,IAAI,mBAAmB,EAAE,CAAC;gBACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClD,OAAO,EAAE,CAAC,UAAoB,EAAE,WAAqB,CAAC,CAAA;gBACxD,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAA;YAE9G,qBAAqB;YACrB,2DAA2D;YAC3D,yDAAyD;YACzD,gCAAgC;YAChC,4DAA4D;YAC5D,MAAM,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAA;YAEvE,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACrD,CAAC;KAAA;CACF","sourcesContent":["import { SystemError } from '../../../error'\nimport { Objects } from '../../../utils'\nimport { ExpressionContext } from '../../context'\nimport { BinaryExpression, ExpressionNodeEvaluator } from '../../node'\n\nconst booleanOperators: { [operator: string]: (a: any, b: any) => boolean } = {\n // Short-circuiting operators (we coerce the output to bool)\n '||': (a, b) => Boolean(a || b),\n '&&': (a, b) => Boolean(a && b),\n // Normal boolean operators:\n '==': (a, b) => a === b,\n '!=': (a, b) => a !== b,\n '<': (a, b) => a < b,\n '>': (a, b) => a > b,\n '<=': (a, b) => a <= b,\n '>=': (a, b) => a >= b,\n // Only allow one kind of equalities.\n // some hidden dependencies on === and !==...\n // '===': (a, b) => a === b,\n // '!==': (a, b) => a !== b,\n}\n\nconst arithmeticOperators: { [operator: string]: (a: number, b: number) => number } = {\n '+': (a, b) => a + b,\n '-': (a, b) => a - b,\n '*': (a, b) => a * b,\n '/': (a, b) => a / b,\n '%': (a, b) => a % b,\n '**': (a, b) => a ** b,\n // Don't allow bitwise operators:\n // '|': (a, b) => a | b,\n // '^': (a, b) => a ^ b,\n // '&': (a, b) => a & b,\n // Don't allow shifts either:\n // '<<': (a, b) => a << b,\n // '>>': (a, b) => a >> b,\n // '>>>': (a, b) => a >>> b,\n}\n\nconst stringOperators: { [operatos: string]: (a: string, b: string) => string } = {\n '+': (a, b) => a + b,\n}\n\nconst binaryOperators = {\n ...booleanOperators,\n ...arithmeticOperators,\n}\n\nconst isNumber = (value: any) => !Objects.isNil(value) && value.constructor === Number\nconst isString = (value: any) => !Objects.isNil(value) && value.constructor === String\n\nexport class BinaryEvaluator<C extends ExpressionContext> extends ExpressionNodeEvaluator<C, BinaryExpression> {\n async evaluate(expressionNode: BinaryExpression): Promise<any> {\n const { left, right, operator } = expressionNode\n\n const fn = binaryOperators[operator]\n if (!fn) {\n throw new SystemError('expression.booleanOperatorNotSupported', { operator })\n }\n\n const leftResult = await this.evaluator.evaluateNode(left, this.context)\n const rightResult = await this.evaluator.evaluateNode(right, this.context)\n\n // string operators\n if (operator in stringOperators) {\n if (isString(leftResult) || isString(rightResult)) {\n // string concatenation with null or undefined gives null (like arithmetic operations with null)\n if (Objects.isNil(leftResult) || Objects.isNil(rightResult)) {\n return null\n }\n const strFn = stringOperators[operator]\n return strFn(leftResult as string, rightResult as string)\n }\n // operator can be in arithmeticOperators (+), do not return anything now\n }\n\n // Arithmetic operators will always return nulls for any non-numeric inputs\n if (operator in arithmeticOperators) {\n if (isNumber(leftResult) && isNumber(rightResult)) {\n return fn(leftResult as number, rightResult as number)\n }\n return null\n }\n\n const nullCount = [leftResult, rightResult].filter((result) => result === null || result === undefined).length\n\n // Boolean operators:\n // Like ternary logic, but logical OR has special handling.\n // The expression is boolean if either value is not null.\n // Otherwise the result is null.\n // All other operators return null if either operand is null\n const isValid = (operator === '||' && nullCount < 2) || nullCount === 0\n\n return isValid ? fn(leftResult, rightResult) : null\n }\n}\n"]}