ballerina-core 1.0.229 → 1.0.230

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 (637) hide show
  1. package/bin/main.d.ts +1 -1
  2. package/bin/main.js +1 -1
  3. package/bin/src/api-response-handler/coroutines/runner.d.ts +9 -2
  4. package/bin/src/api-response-handler/coroutines/runner.js +20 -13
  5. package/bin/src/api-response-handler/state.d.ts +12 -12
  6. package/bin/src/api-response-handler/state.js +13 -11
  7. package/bin/src/apiResultStatus/state.d.ts +10 -3
  8. package/bin/src/apiResultStatus/state.js +2 -5
  9. package/bin/src/async/domains/mirroring/domains/collection/coroutines/synchronizers.d.ts +400 -75
  10. package/bin/src/async/domains/mirroring/domains/collection/coroutines/synchronizers.js +314 -196
  11. package/bin/src/async/domains/mirroring/domains/collection/state.d.ts +38 -25
  12. package/bin/src/async/domains/mirroring/domains/collection/state.js +126 -36
  13. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection/state.d.ts +12 -8
  14. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection/state.js +18 -11
  15. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection-entity/state.d.ts +12 -9
  16. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection-entity/state.js +19 -19
  17. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entities/state.d.ts +17 -8
  18. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entities/state.js +1 -1
  19. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entity/state.d.ts +16 -13
  20. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entity/state.js +18 -18
  21. package/bin/src/async/domains/mirroring/domains/entity/state.d.ts +12 -9
  22. package/bin/src/async/domains/mirroring/domains/entity/state.js +18 -9
  23. package/bin/src/async/domains/mirroring/domains/singleton/coroutines/synchronizers.d.ts +233 -41
  24. package/bin/src/async/domains/mirroring/domains/singleton/coroutines/synchronizers.js +134 -83
  25. package/bin/src/async/domains/mirroring/domains/singleton/state.d.ts +24 -15
  26. package/bin/src/async/domains/mirroring/domains/singleton/state.js +52 -8
  27. package/bin/src/async/domains/mirroring/domains/synchronization-result/state.d.ts +5 -2
  28. package/bin/src/async/domains/mirroring/domains/synchronization-result/state.js +1 -1
  29. package/bin/src/async/domains/mirroring/domains/synchronized-entities/state.d.ts +16 -10
  30. package/bin/src/async/domains/mirroring/domains/synchronized-entities/state.js +7 -4
  31. package/bin/src/async/domains/promise/state.d.ts +9 -4
  32. package/bin/src/async/domains/promise/state.js +20 -9
  33. package/bin/src/async/domains/synchronized/coroutines/synchronize.d.ts +29 -4
  34. package/bin/src/async/domains/synchronized/coroutines/synchronize.js +80 -28
  35. package/bin/src/async/domains/synchronized/state.d.ts +14 -7
  36. package/bin/src/async/domains/synchronized/state.js +16 -6
  37. package/bin/src/async/state.d.ts +56 -45
  38. package/bin/src/async/state.js +115 -97
  39. package/bin/src/baseEntity/domains/identifiable/state.d.ts +15 -11
  40. package/bin/src/baseEntity/domains/identifiable/state.js +9 -9
  41. package/bin/src/collections/domains/array/state.d.ts +7 -7
  42. package/bin/src/collections/domains/array/state.js +5 -5
  43. package/bin/src/collections/domains/errors/state.d.ts +10 -10
  44. package/bin/src/collections/domains/errors/state.js +10 -10
  45. package/bin/src/collections/domains/immutable/domains/list/state.d.ts +19 -15
  46. package/bin/src/collections/domains/immutable/domains/list/state.js +46 -44
  47. package/bin/src/collections/domains/immutable/domains/map/state.d.ts +30 -16
  48. package/bin/src/collections/domains/immutable/domains/map/state.js +41 -23
  49. package/bin/src/collections/domains/immutable/domains/orderedMap/state.d.ts +53 -25
  50. package/bin/src/collections/domains/immutable/domains/orderedMap/state.js +84 -65
  51. package/bin/src/collections/domains/immutable/domains/ordereredSet/state.d.ts +6 -6
  52. package/bin/src/collections/domains/immutable/domains/ordereredSet/state.js +6 -6
  53. package/bin/src/collections/domains/maybe/state.d.ts +9 -9
  54. package/bin/src/collections/domains/maybe/state.js +12 -9
  55. package/bin/src/collections/domains/product/state.d.ts +25 -19
  56. package/bin/src/collections/domains/product/state.js +13 -10
  57. package/bin/src/collections/domains/sum/state.d.ts +101 -77
  58. package/bin/src/collections/domains/sum/state.js +49 -32
  59. package/bin/src/collections/domains/valueOrErrors/state.d.ts +53 -27
  60. package/bin/src/collections/domains/valueOrErrors/state.js +81 -56
  61. package/bin/src/coroutines/builder.d.ts +135 -49
  62. package/bin/src/coroutines/builder.js +40 -19
  63. package/bin/src/coroutines/state.d.ts +186 -71
  64. package/bin/src/coroutines/state.js +381 -306
  65. package/bin/src/coroutines/template.d.ts +17 -8
  66. package/bin/src/coroutines/template.js +97 -59
  67. package/bin/src/debounced/coroutines/debounce.d.ts +15 -6
  68. package/bin/src/debounced/coroutines/debounce.js +115 -89
  69. package/bin/src/debounced/state.d.ts +26 -19
  70. package/bin/src/debounced/state.js +62 -25
  71. package/bin/src/diagnostics/domains/message-box/state.d.ts +1 -1
  72. package/bin/src/diagnostics/domains/message-box/state.js +3 -3
  73. package/bin/src/foreignMutations/state.d.ts +3 -3
  74. package/bin/src/foreignMutations/state.js +1 -1
  75. package/bin/src/forms/domains/attachments/views/attachments-view.d.ts +4 -4
  76. package/bin/src/forms/domains/attachments/views/attachments-view.js +30 -8
  77. package/bin/src/forms/domains/collection/domains/reference/state.d.ts +29 -22
  78. package/bin/src/forms/domains/collection/domains/reference/state.js +26 -20
  79. package/bin/src/forms/domains/collection/domains/selection/state.d.ts +37 -15
  80. package/bin/src/forms/domains/collection/domains/selection/state.js +1 -1
  81. package/bin/src/forms/domains/dispatched-forms/built-ins/state.d.ts +555 -120
  82. package/bin/src/forms/domains/dispatched-forms/built-ins/state.d.ts.map +1 -1
  83. package/bin/src/forms/domains/dispatched-forms/built-ins/state.js +1967 -754
  84. package/bin/src/forms/domains/dispatched-forms/built-ins/state.js.map +1 -1
  85. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.d.ts +22 -2
  86. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.d.ts.map +1 -1
  87. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.js +128 -44
  88. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.js.map +1 -1
  89. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/apis/state.d.ts +119 -63
  90. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/apis/state.js +315 -145
  91. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/enum/state.d.ts +35 -19
  92. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/enum/state.js +40 -27
  93. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/list/state.d.ts +60 -28
  94. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/list/state.js +76 -40
  95. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/lookup/state.d.ts +121 -56
  96. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/lookup/state.js +102 -59
  97. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/map/state.d.ts +42 -15
  98. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/map/state.js +64 -29
  99. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/nestedRenderer/state.d.ts +70 -29
  100. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/nestedRenderer/state.js +52 -20
  101. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/one/state.d.ts +61 -18
  102. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/one/state.js +88 -33
  103. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/primitive/state.d.ts +20 -10
  104. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/primitive/state.js +21 -13
  105. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/readOnly/state.d.ts +50 -19
  106. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/readOnly/state.js +52 -23
  107. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.d.ts +42 -11
  108. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.js +59 -18
  109. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.d.ts +46 -19
  110. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.d.ts.map +1 -1
  111. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.js +110 -55
  112. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.js.map +1 -1
  113. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/stream/state.d.ts +29 -14
  114. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/stream/state.js +43 -27
  115. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sum/state.d.ts +49 -19
  116. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sum/state.js +63 -23
  117. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sumUnitDate/state.d.ts +21 -13
  118. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sumUnitDate/state.js +39 -22
  119. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.d.ts +39 -10
  120. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.js +46 -11
  121. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.d.ts +79 -34
  122. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.d.ts.map +1 -1
  123. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.js +146 -46
  124. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.js.map +1 -1
  125. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/tuple/state.d.ts +37 -13
  126. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/tuple/state.js +64 -29
  127. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/union/state.d.ts +40 -15
  128. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/union/state.js +78 -33
  129. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.d.ts +107 -19
  130. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.js +157 -62
  131. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.d.ts +410 -229
  132. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.d.ts.map +1 -1
  133. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.js +946 -569
  134. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.js.map +1 -1
  135. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/state.d.ts +103 -51
  136. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/state.js +255 -94
  137. package/bin/src/forms/domains/dispatched-forms/deserializer/state.d.ts +328 -102
  138. package/bin/src/forms/domains/dispatched-forms/deserializer/state.d.ts.map +1 -1
  139. package/bin/src/forms/domains/dispatched-forms/deserializer/state.js +182 -90
  140. package/bin/src/forms/domains/dispatched-forms/deserializer/state.js.map +1 -1
  141. package/bin/src/forms/domains/dispatched-forms/deserializer/template.d.ts +27 -2
  142. package/bin/src/forms/domains/dispatched-forms/deserializer/template.js +3 -2
  143. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.d.ts +28 -9
  144. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.d.ts.map +1 -1
  145. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.js +142 -7
  146. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.js.map +1 -1
  147. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/state.d.ts +35 -7
  148. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/state.js +3 -3
  149. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.d.ts +28 -4
  150. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.js +49 -23
  151. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/state.d.ts +32 -7
  152. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/state.d.ts.map +1 -1
  153. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/state.js +3 -3
  154. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/state.js.map +1 -1
  155. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.d.ts +25 -4
  156. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.d.ts.map +1 -1
  157. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.js +49 -24
  158. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.js.map +1 -1
  159. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/state.d.ts +56 -19
  160. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/state.js +18 -6
  161. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.d.ts +29 -7
  162. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.js +64 -30
  163. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/state.d.ts +42 -15
  164. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/state.d.ts.map +1 -1
  165. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/state.js +9 -6
  166. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/state.js.map +1 -1
  167. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.d.ts +40 -8
  168. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.d.ts.map +1 -1
  169. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.js +150 -60
  170. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.js.map +1 -1
  171. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/state.d.ts +45 -11
  172. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/state.js +1 -1
  173. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.d.ts +42 -8
  174. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.js +127 -50
  175. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/injectables/state.d.ts +55 -19
  176. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/injectables/state.js +40 -22
  177. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/state.d.ts +76 -28
  178. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/state.d.ts.map +1 -1
  179. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/state.js +19 -10
  180. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/state.js.map +1 -1
  181. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.d.ts +50 -6
  182. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.d.ts.map +1 -1
  183. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.js +290 -135
  184. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.js.map +1 -1
  185. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/state.d.ts +41 -7
  186. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/state.js +1 -1
  187. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/template.d.ts +45 -4
  188. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/template.js +28 -8
  189. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/state.d.ts +103 -26
  190. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/state.js +61 -18
  191. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.d.ts +64 -9
  192. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.js +308 -89
  193. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/state.d.ts +37 -7
  194. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/state.js +3 -3
  195. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.d.ts +29 -4
  196. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.js +54 -23
  197. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_debouncer.d.ts +50 -13
  198. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_debouncer.js +22 -10
  199. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeOne.d.ts +59 -12
  200. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeOne.js +49 -31
  201. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeStream.d.ts +47 -11
  202. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeStream.js +29 -10
  203. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeStream.js.map +1 -1
  204. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/builder.d.ts +3896 -1093
  205. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/builder.js +2 -2
  206. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/runner.d.ts +165 -40
  207. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/runner.js +47 -26
  208. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/state.d.ts +246 -81
  209. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/state.d.ts.map +1 -1
  210. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/state.js +85 -40
  211. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/state.js.map +1 -1
  212. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.d.ts +62 -11
  213. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.d.ts.map +1 -1
  214. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.js +344 -148
  215. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.js.map +1 -1
  216. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/state.d.ts +65 -20
  217. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/state.js +19 -10
  218. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.d.ts +47 -6
  219. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.js +61 -18
  220. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/state.d.ts +81 -21
  221. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/state.js +32 -11
  222. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.d.ts +57 -10
  223. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.d.ts.map +1 -1
  224. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.js +195 -70
  225. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.js.map +1 -1
  226. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/state.d.ts +123 -49
  227. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/state.js +35 -13
  228. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.d.ts +45 -8
  229. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.js +195 -68
  230. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/state.d.ts +121 -51
  231. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/state.js +36 -13
  232. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.d.ts +45 -8
  233. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.js +246 -106
  234. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/state.d.ts +38 -8
  235. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/state.js +3 -3
  236. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.d.ts +29 -4
  237. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.js +54 -23
  238. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.d.ts +58 -34
  239. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.js +24 -13
  240. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/state.d.ts +38 -8
  241. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/state.js +3 -3
  242. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.d.ts +29 -4
  243. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.js +58 -26
  244. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/state.d.ts +92 -29
  245. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/state.d.ts.map +1 -1
  246. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/state.js +22 -7
  247. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/state.js.map +1 -1
  248. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.d.ts +55 -7
  249. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.d.ts.map +1 -1
  250. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.js +162 -53
  251. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.js.map +1 -1
  252. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/builder.d.ts +2523 -949
  253. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/builder.d.ts.map +1 -1
  254. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/builder.js +2 -2
  255. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/builder.js.map +1 -1
  256. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/infiniteLoader.d.ts +44 -11
  257. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/infiniteLoader.d.ts.map +1 -1
  258. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/infiniteLoader.js +96 -26
  259. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/infiniteLoader.js.map +1 -1
  260. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseFiltersAndSorting.d.ts +45 -11
  261. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseFiltersAndSorting.d.ts.map +1 -1
  262. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseFiltersAndSorting.js +49 -22
  263. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseFiltersAndSorting.js.map +1 -1
  264. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/runner.d.ts +80 -40
  265. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/runner.d.ts.map +1 -1
  266. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/runner.js +147 -19
  267. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/runner.js.map +1 -1
  268. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.d.ts +355 -186
  269. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.d.ts.map +1 -1
  270. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.js +290 -135
  271. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.js.map +1 -1
  272. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.d.ts +102 -15
  273. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.d.ts.map +1 -1
  274. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.js +580 -208
  275. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.js.map +1 -1
  276. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/state.d.ts +75 -18
  277. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/state.js +20 -8
  278. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.d.ts +51 -6
  279. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.js +121 -32
  280. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/state.d.ts +76 -18
  281. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/state.js +21 -8
  282. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.d.ts +51 -6
  283. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.js +90 -31
  284. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/state.d.ts +45 -13
  285. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/state.js +12 -9
  286. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.d.ts +29 -6
  287. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.js +54 -20
  288. package/bin/src/forms/domains/dispatched-forms/runner/domains/deltas/state.d.ts +602 -436
  289. package/bin/src/forms/domains/dispatched-forms/runner/domains/deltas/state.d.ts.map +1 -1
  290. package/bin/src/forms/domains/dispatched-forms/runner/domains/deltas/state.js +665 -513
  291. package/bin/src/forms/domains/dispatched-forms/runner/domains/deltas/state.js.map +1 -1
  292. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/list/state.d.ts +25 -6
  293. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/list/state.d.ts.map +1 -1
  294. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/list/state.js +51 -18
  295. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/list/state.js.map +1 -1
  296. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.d.ts +26 -7
  297. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.d.ts.map +1 -1
  298. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.js +39 -14
  299. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.js.map +1 -1
  300. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/map/state.d.ts +24 -6
  301. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/map/state.d.ts.map +1 -1
  302. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/map/state.js +68 -18
  303. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/map/state.js.map +1 -1
  304. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/multiSelection/state.d.ts +22 -6
  305. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/multiSelection/state.d.ts.map +1 -1
  306. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/multiSelection/state.js +76 -24
  307. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/multiSelection/state.js.map +1 -1
  308. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/nestedDispatcher/state.d.ts +42 -7
  309. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/nestedDispatcher/state.d.ts.map +1 -1
  310. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/nestedDispatcher/state.js +37 -8
  311. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/nestedDispatcher/state.js.map +1 -1
  312. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/one/state.d.ts +57 -8
  313. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/one/state.d.ts.map +1 -1
  314. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/one/state.js +130 -38
  315. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/one/state.js.map +1 -1
  316. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/primitive/state.d.ts +22 -6
  317. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/primitive/state.d.ts.map +1 -1
  318. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/primitive/state.js +139 -63
  319. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/primitive/state.js.map +1 -1
  320. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/readOnly/state.d.ts +25 -6
  321. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/readOnly/state.d.ts.map +1 -1
  322. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/readOnly/state.js +37 -12
  323. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/readOnly/state.js.map +1 -1
  324. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/recordField/state.d.ts +26 -6
  325. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/recordField/state.d.ts.map +1 -1
  326. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/recordField/state.js +14 -4
  327. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.d.ts +49 -7
  328. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.d.ts.map +1 -1
  329. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.js +79 -25
  330. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.js.map +1 -1
  331. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/singleSelectionDispatcher/state.d.ts +22 -6
  332. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/singleSelectionDispatcher/state.d.ts.map +1 -1
  333. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/singleSelectionDispatcher/state.js +76 -24
  334. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/singleSelectionDispatcher/state.js.map +1 -1
  335. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/sum/state.d.ts +25 -6
  336. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/sum/state.d.ts.map +1 -1
  337. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/sum/state.js +55 -20
  338. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/sum/state.js.map +1 -1
  339. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.d.ts +55 -8
  340. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.d.ts.map +1 -1
  341. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.js +245 -74
  342. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.js.map +1 -1
  343. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/tupleDispatcher/state.d.ts +25 -6
  344. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/tupleDispatcher/state.d.ts.map +1 -1
  345. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/tupleDispatcher/state.js +54 -13
  346. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/tupleDispatcher/state.js.map +1 -1
  347. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.d.ts +25 -6
  348. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.d.ts.map +1 -1
  349. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.js +63 -15
  350. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.js.map +1 -1
  351. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.d.ts +44 -7
  352. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.d.ts.map +1 -1
  353. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.js +144 -45
  354. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.js.map +1 -1
  355. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.d.ts +38 -18
  356. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.js +773 -423
  357. package/bin/src/forms/domains/dispatched-forms/runner/state.d.ts +90 -103
  358. package/bin/src/forms/domains/dispatched-forms/runner/state.d.ts.map +1 -1
  359. package/bin/src/forms/domains/dispatched-forms/runner/state.js +13 -43
  360. package/bin/src/forms/domains/dispatched-forms/runner/state.js.map +1 -1
  361. package/bin/src/forms/domains/dispatched-forms/runner/template.d.ts +30 -6
  362. package/bin/src/forms/domains/dispatched-forms/runner/template.d.ts.map +1 -1
  363. package/bin/src/forms/domains/dispatched-forms/runner/template.js +63 -33
  364. package/bin/src/forms/domains/dispatched-forms/runner/template.js.map +1 -1
  365. package/bin/src/forms/domains/launcher/coroutines/runner.d.ts +12 -4
  366. package/bin/src/forms/domains/launcher/coroutines/runner.js +120 -45
  367. package/bin/src/forms/domains/launcher/domains/create/coroutines/runner.d.ts +16 -3
  368. package/bin/src/forms/domains/launcher/domains/create/coroutines/runner.js +240 -101
  369. package/bin/src/forms/domains/launcher/domains/create/state.d.ts +236 -121
  370. package/bin/src/forms/domains/launcher/domains/create/state.js +62 -17
  371. package/bin/src/forms/domains/launcher/domains/create/template.d.ts +20 -6
  372. package/bin/src/forms/domains/launcher/domains/create/template.js +84 -42
  373. package/bin/src/forms/domains/launcher/domains/edit/coroutines/runner.d.ts +16 -3
  374. package/bin/src/forms/domains/launcher/domains/edit/coroutines/runner.js +242 -103
  375. package/bin/src/forms/domains/launcher/domains/edit/state.d.ts +230 -121
  376. package/bin/src/forms/domains/launcher/domains/edit/state.js +62 -17
  377. package/bin/src/forms/domains/launcher/domains/edit/template.d.ts +20 -6
  378. package/bin/src/forms/domains/launcher/domains/edit/template.js +86 -43
  379. package/bin/src/forms/domains/launcher/domains/merger/state.d.ts +4 -4
  380. package/bin/src/forms/domains/launcher/domains/merger/state.js +35 -26
  381. package/bin/src/forms/domains/launcher/domains/passthrough/coroutines/runner.d.ts +20 -5
  382. package/bin/src/forms/domains/launcher/domains/passthrough/coroutines/runner.js +88 -42
  383. package/bin/src/forms/domains/launcher/domains/passthrough/state.d.ts +123 -58
  384. package/bin/src/forms/domains/launcher/domains/passthrough/state.js +44 -19
  385. package/bin/src/forms/domains/launcher/domains/passthrough/template.d.ts +23 -6
  386. package/bin/src/forms/domains/launcher/domains/passthrough/template.js +56 -34
  387. package/bin/src/forms/domains/launcher/state.d.ts +62 -43
  388. package/bin/src/forms/domains/launcher/state.js +6 -6
  389. package/bin/src/forms/domains/launcher/template.d.ts +35 -15
  390. package/bin/src/forms/domains/launcher/template.js +169 -85
  391. package/bin/src/forms/domains/parser/coroutines/runner.d.ts +13 -5
  392. package/bin/src/forms/domains/parser/coroutines/runner.js +87 -25
  393. package/bin/src/forms/domains/parser/domains/built-ins/state.d.ts +135 -71
  394. package/bin/src/forms/domains/parser/domains/built-ins/state.js +944 -533
  395. package/bin/src/forms/domains/parser/domains/deltas/state.d.ts +417 -296
  396. package/bin/src/forms/domains/parser/domains/deltas/state.js +444 -318
  397. package/bin/src/forms/domains/parser/domains/injectables/state.d.ts +29 -20
  398. package/bin/src/forms/domains/parser/domains/injectables/state.js +29 -26
  399. package/bin/src/forms/domains/parser/domains/layout/state.d.ts +66 -54
  400. package/bin/src/forms/domains/parser/domains/layout/state.d.ts.map +1 -1
  401. package/bin/src/forms/domains/parser/domains/layout/state.js +215 -182
  402. package/bin/src/forms/domains/parser/domains/layout/state.js.map +1 -1
  403. package/bin/src/forms/domains/parser/domains/predicates/domains/extractor/state.d.ts +19 -6
  404. package/bin/src/forms/domains/parser/domains/predicates/domains/extractor/state.js +324 -162
  405. package/bin/src/forms/domains/parser/domains/predicates/state.d.ts +497 -316
  406. package/bin/src/forms/domains/parser/domains/predicates/state.d.ts.map +1 -1
  407. package/bin/src/forms/domains/parser/domains/predicates/state.js +1457 -976
  408. package/bin/src/forms/domains/parser/domains/predicates/state.js.map +1 -1
  409. package/bin/src/forms/domains/parser/domains/renderer/state.d.ts +245 -92
  410. package/bin/src/forms/domains/parser/domains/renderer/state.js +1137 -480
  411. package/bin/src/forms/domains/parser/domains/types/state.d.ts +170 -130
  412. package/bin/src/forms/domains/parser/domains/types/state.js +355 -170
  413. package/bin/src/forms/domains/parser/domains/validator/state.d.ts +143 -117
  414. package/bin/src/forms/domains/parser/domains/validator/state.d.ts.map +1 -1
  415. package/bin/src/forms/domains/parser/domains/validator/state.js +417 -280
  416. package/bin/src/forms/domains/parser/state.d.ts +217 -82
  417. package/bin/src/forms/domains/parser/state.d.ts.map +1 -1
  418. package/bin/src/forms/domains/parser/state.js +612 -373
  419. package/bin/src/forms/domains/parser/template.d.ts +13 -5
  420. package/bin/src/forms/domains/parser/template.js +1 -1
  421. package/bin/src/forms/domains/primitives/domains/base-64-file/state.d.ts +19 -11
  422. package/bin/src/forms/domains/primitives/domains/base-64-file/state.js +5 -5
  423. package/bin/src/forms/domains/primitives/domains/base-64-file/template.d.ts +18 -7
  424. package/bin/src/forms/domains/primitives/domains/base-64-file/template.js +38 -19
  425. package/bin/src/forms/domains/primitives/domains/boolean/state.d.ts +19 -11
  426. package/bin/src/forms/domains/primitives/domains/boolean/state.js +5 -5
  427. package/bin/src/forms/domains/primitives/domains/boolean/template.d.ts +24 -8
  428. package/bin/src/forms/domains/primitives/domains/boolean/template.js +38 -19
  429. package/bin/src/forms/domains/primitives/domains/date/state.d.ts +39 -20
  430. package/bin/src/forms/domains/primitives/domains/date/state.js +18 -9
  431. package/bin/src/forms/domains/primitives/domains/date/template.d.ts +18 -7
  432. package/bin/src/forms/domains/primitives/domains/date/template.js +51 -25
  433. package/bin/src/forms/domains/primitives/domains/enum/state.d.ts +31 -15
  434. package/bin/src/forms/domains/primitives/domains/enum/state.js +6 -6
  435. package/bin/src/forms/domains/primitives/domains/enum/template.d.ts +18 -7
  436. package/bin/src/forms/domains/primitives/domains/enum/template.js +117 -48
  437. package/bin/src/forms/domains/primitives/domains/enum-multiselect/state.d.ts +17 -8
  438. package/bin/src/forms/domains/primitives/domains/enum-multiselect/state.js +1 -1
  439. package/bin/src/forms/domains/primitives/domains/enum-multiselect/template.d.ts +18 -7
  440. package/bin/src/forms/domains/primitives/domains/enum-multiselect/template.js +99 -40
  441. package/bin/src/forms/domains/primitives/domains/list/state.d.ts +45 -24
  442. package/bin/src/forms/domains/primitives/domains/list/state.js +14 -14
  443. package/bin/src/forms/domains/primitives/domains/list/template.d.ts +38 -13
  444. package/bin/src/forms/domains/primitives/domains/list/template.js +200 -71
  445. package/bin/src/forms/domains/primitives/domains/map/state.d.ts +68 -29
  446. package/bin/src/forms/domains/primitives/domains/map/state.js +14 -14
  447. package/bin/src/forms/domains/primitives/domains/map/template.d.ts +65 -25
  448. package/bin/src/forms/domains/primitives/domains/map/template.js +294 -103
  449. package/bin/src/forms/domains/primitives/domains/number/state.d.ts +19 -11
  450. package/bin/src/forms/domains/primitives/domains/number/state.js +5 -5
  451. package/bin/src/forms/domains/primitives/domains/number/template.d.ts +24 -8
  452. package/bin/src/forms/domains/primitives/domains/number/template.js +38 -19
  453. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/state.d.ts +89 -42
  454. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/state.js +33 -16
  455. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/template.d.ts +22 -8
  456. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/template.js +171 -62
  457. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/state.d.ts +18 -9
  458. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/state.js +1 -1
  459. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/template.d.ts +18 -7
  460. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/template.js +182 -69
  461. package/bin/src/forms/domains/primitives/domains/secret/state.d.ts +19 -11
  462. package/bin/src/forms/domains/primitives/domains/secret/state.js +5 -5
  463. package/bin/src/forms/domains/primitives/domains/secret/template.d.ts +18 -7
  464. package/bin/src/forms/domains/primitives/domains/secret/template.js +38 -19
  465. package/bin/src/forms/domains/primitives/domains/string/state.d.ts +21 -13
  466. package/bin/src/forms/domains/primitives/domains/string/state.js +5 -5
  467. package/bin/src/forms/domains/primitives/domains/string/template.d.ts +18 -7
  468. package/bin/src/forms/domains/primitives/domains/string/template.js +42 -22
  469. package/bin/src/forms/domains/primitives/domains/sum/state.d.ts +62 -22
  470. package/bin/src/forms/domains/primitives/domains/sum/state.js +10 -10
  471. package/bin/src/forms/domains/primitives/domains/sum/template.d.ts +48 -16
  472. package/bin/src/forms/domains/primitives/domains/sum/template.js +141 -50
  473. package/bin/src/forms/domains/primitives/domains/tuple/state.d.ts +48 -23
  474. package/bin/src/forms/domains/primitives/domains/tuple/state.js +9 -9
  475. package/bin/src/forms/domains/primitives/domains/tuple/template.d.ts +46 -18
  476. package/bin/src/forms/domains/primitives/domains/tuple/template.js +100 -33
  477. package/bin/src/forms/domains/primitives/domains/unit/state.d.ts +17 -10
  478. package/bin/src/forms/domains/primitives/domains/unit/state.js +8 -8
  479. package/bin/src/forms/domains/primitives/domains/unit/template.d.ts +9 -4
  480. package/bin/src/forms/domains/primitives/domains/unit/template.js +22 -9
  481. package/bin/src/forms/domains/singleton/domains/form-label/state.d.ts +4 -4
  482. package/bin/src/forms/domains/singleton/domains/form-label/state.js +1 -1
  483. package/bin/src/forms/domains/singleton/state.d.ts +144 -43
  484. package/bin/src/forms/domains/singleton/state.js +12 -10
  485. package/bin/src/forms/domains/singleton/template.d.ts +177 -88
  486. package/bin/src/forms/domains/singleton/template.js +288 -113
  487. package/bin/src/fun/domains/curry/state.d.ts +4 -2
  488. package/bin/src/fun/domains/curry/state.js +1 -1
  489. package/bin/src/fun/domains/id/state.d.ts +1 -1
  490. package/bin/src/fun/domains/id/state.js +1 -1
  491. package/bin/src/fun/domains/predicate/domains/bool-expr.d.ts +57 -41
  492. package/bin/src/fun/domains/predicate/domains/bool-expr.js +76 -67
  493. package/bin/src/fun/domains/predicate/state.d.ts +9 -7
  494. package/bin/src/fun/domains/predicate/state.js +14 -10
  495. package/bin/src/fun/domains/simpleCallback/state.d.ts +1 -1
  496. package/bin/src/fun/domains/simpleCallback/state.js +1 -1
  497. package/bin/src/fun/domains/uncurry/state.d.ts +4 -2
  498. package/bin/src/fun/domains/uncurry/state.js +1 -1
  499. package/bin/src/fun/domains/unit/state.d.ts +1 -1
  500. package/bin/src/fun/domains/unit/state.js +1 -1
  501. package/bin/src/fun/domains/updater/domains/caseUpdater/state.d.ts +22 -7
  502. package/bin/src/fun/domains/updater/domains/caseUpdater/state.js +18 -10
  503. package/bin/src/fun/domains/updater/domains/mapUpdater/state.d.ts +24 -13
  504. package/bin/src/fun/domains/updater/domains/mapUpdater/state.js +40 -10
  505. package/bin/src/fun/domains/updater/domains/maybeUpdater/state.d.ts +19 -13
  506. package/bin/src/fun/domains/updater/domains/maybeUpdater/state.js +20 -9
  507. package/bin/src/fun/domains/updater/domains/orderedMapUpdater/state.d.ts +24 -13
  508. package/bin/src/fun/domains/updater/domains/orderedMapUpdater/state.js +47 -11
  509. package/bin/src/fun/domains/updater/domains/orderedSetUpdater/state.d.ts +20 -8
  510. package/bin/src/fun/domains/updater/domains/orderedSetUpdater/state.js +17 -5
  511. package/bin/src/fun/domains/updater/domains/replaceWith/state.d.ts +1 -1
  512. package/bin/src/fun/domains/updater/domains/replaceWith/state.js +1 -1
  513. package/bin/src/fun/domains/updater/domains/simpleUpdater/domains/baseSimpleUpdater/state.d.ts +13 -4
  514. package/bin/src/fun/domains/updater/domains/simpleUpdater/domains/baseSimpleUpdater/state.js +6 -4
  515. package/bin/src/fun/domains/updater/domains/simpleUpdater/state.d.ts +60 -22
  516. package/bin/src/fun/domains/updater/domains/simpleUpdater/state.js +42 -31
  517. package/bin/src/fun/domains/updater/state.d.ts +4 -4
  518. package/bin/src/fun/domains/updater/state.js +12 -10
  519. package/bin/src/fun/state.d.ts +3 -3
  520. package/bin/src/fun/state.js +9 -7
  521. package/bin/src/infinite-data-stream/coroutines/builder.d.ts +209 -27
  522. package/bin/src/infinite-data-stream/coroutines/builder.js +1 -1
  523. package/bin/src/infinite-data-stream/coroutines/infiniteLoader.d.ts +21 -5
  524. package/bin/src/infinite-data-stream/coroutines/infiniteLoader.js +47 -20
  525. package/bin/src/infinite-data-stream/coroutines/runner.d.ts +11 -3
  526. package/bin/src/infinite-data-stream/coroutines/runner.js +7 -7
  527. package/bin/src/infinite-data-stream/state.d.ts +84 -51
  528. package/bin/src/infinite-data-stream/state.js +125 -61
  529. package/bin/src/infinite-data-stream/template.d.ts +10 -3
  530. package/bin/src/infinite-data-stream/template.js +3 -2
  531. package/bin/src/math/domains/DOMRect/state.d.ts +4 -4
  532. package/bin/src/math/domains/DOMRect/state.js +10 -8
  533. package/bin/src/math/domains/number/state.d.ts +5 -5
  534. package/bin/src/math/domains/number/state.js +5 -5
  535. package/bin/src/math/domains/rect/state.d.ts +8 -8
  536. package/bin/src/math/domains/rect/state.js +16 -15
  537. package/bin/src/math/domains/rgba/state.d.ts +17 -17
  538. package/bin/src/math/domains/rgba/state.js +77 -81
  539. package/bin/src/math/domains/size2/state.d.ts +8 -8
  540. package/bin/src/math/domains/size2/state.js +6 -6
  541. package/bin/src/math/domains/vector2/state.d.ts +10 -10
  542. package/bin/src/math/domains/vector2/state.js +8 -8
  543. package/bin/src/queue/state.d.ts +23 -7
  544. package/bin/src/queue/state.js +23 -16
  545. package/bin/src/state/domains/repository/state.d.ts +15 -9
  546. package/bin/src/state/domains/repository/state.js +1 -1
  547. package/bin/src/template/state.d.ts +153 -45
  548. package/bin/src/template/state.js +163 -115
  549. package/bin/src/validation/state.d.ts +23 -9
  550. package/bin/src/validation/state.js +38 -45
  551. package/bin/src/value/domains/mutable-value/state.d.ts +3 -3
  552. package/bin/src/value/domains/mutable-value/state.js +3 -2
  553. package/bin/src/value/state.d.ts +9 -9
  554. package/bin/src/value/state.js +11 -8
  555. package/bin/src/value-infinite-data-stream/coroutines/builder.d.ts +207 -25
  556. package/bin/src/value-infinite-data-stream/coroutines/builder.js +1 -1
  557. package/bin/src/value-infinite-data-stream/coroutines/infiniteLoader.d.ts +4 -2
  558. package/bin/src/value-infinite-data-stream/coroutines/infiniteLoader.js +55 -20
  559. package/bin/src/value-infinite-data-stream/coroutines/runner.d.ts +8 -2
  560. package/bin/src/value-infinite-data-stream/coroutines/runner.js +6 -4
  561. package/bin/src/value-infinite-data-stream/state.d.ts +134 -68
  562. package/bin/src/value-infinite-data-stream/state.js +199 -77
  563. package/bin/src/value-infinite-data-stream/template.d.ts +7 -2
  564. package/bin/src/value-infinite-data-stream/template.js +4 -2
  565. package/bin/src/visibility/state.d.ts +5 -2
  566. package/bin/src/visibility/state.js +1 -1
  567. package/package.json +1 -1
  568. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.ts +37 -32
  569. package/src/value-infinite-data-stream/coroutines/infiniteLoader.ts +1 -1
  570. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.d.ts +0 -22
  571. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.d.ts.map +0 -1
  572. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.js +0 -35
  573. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.js.map +0 -1
  574. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/loadWithRetries.d.ts +0 -3
  575. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/loadWithRetries.d.ts.map +0 -1
  576. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/loadWithRetries.js +0 -21
  577. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/loadWithRetries.js.map +0 -1
  578. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_init.d.ts +0 -18
  579. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_init.d.ts.map +0 -1
  580. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_init.js +0 -109
  581. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_init.js.map +0 -1
  582. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_sync.d.ts +0 -16
  583. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_sync.d.ts.map +0 -1
  584. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_sync.js +0 -39
  585. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_sync.js.map +0 -1
  586. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/builder.d.ts +0 -327
  587. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/builder.d.ts.map +0 -1
  588. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/builder.js +0 -3
  589. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/builder.js.map +0 -1
  590. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/runner.d.ts +0 -14
  591. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/runner.d.ts.map +0 -1
  592. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/runner.js +0 -22
  593. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/runner.js.map +0 -1
  594. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/state.d.ts +0 -45
  595. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/state.d.ts.map +0 -1
  596. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/state.js +0 -15
  597. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/state.js.map +0 -1
  598. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.d.ts +0 -14
  599. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.d.ts.map +0 -1
  600. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.js +0 -39
  601. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.js.map +0 -1
  602. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_init.d.ts +0 -16
  603. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_init.d.ts.map +0 -1
  604. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_init.js +0 -107
  605. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_init.js.map +0 -1
  606. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_sync.d.ts +0 -16
  607. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_sync.d.ts.map +0 -1
  608. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_sync.js +0 -40
  609. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_sync.js.map +0 -1
  610. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/builder.d.ts +0 -327
  611. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/builder.d.ts.map +0 -1
  612. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/builder.js +0 -3
  613. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/builder.js.map +0 -1
  614. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/runner.d.ts +0 -14
  615. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/runner.d.ts.map +0 -1
  616. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/runner.js +0 -22
  617. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/runner.js.map +0 -1
  618. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/state.d.ts +0 -45
  619. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/state.d.ts.map +0 -1
  620. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/state.js +0 -15
  621. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/state.js.map +0 -1
  622. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.d.ts +0 -14
  623. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.d.ts.map +0 -1
  624. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.js +0 -39
  625. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.js.map +0 -1
  626. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/coroutines/runner.d.ts +0 -6
  627. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/coroutines/runner.d.ts.map +0 -1
  628. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/coroutines/runner.js +0 -87
  629. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/coroutines/runner.js.map +0 -1
  630. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/state.d.ts +0 -14
  631. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/state.d.ts.map +0 -1
  632. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/state.js +0 -6
  633. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/state.js.map +0 -1
  634. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.d.ts +0 -6
  635. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.d.ts.map +0 -1
  636. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.js +0 -43
  637. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.js.map +0 -1
@@ -1,1050 +1,1531 @@
1
1
  import { Map, Set, List, OrderedMap } from "immutable";
2
- import { ValueOrErrors, MapRepo, Updater, simpleUpdater, replaceWith, ListRepo, } from "../../../../../../main";
2
+ import {
3
+ ValueOrErrors,
4
+ MapRepo,
5
+ Updater,
6
+ simpleUpdater,
7
+ replaceWith,
8
+ ListRepo,
9
+ } from "../../../../../../main";
3
10
  const calculateVisibility = (expr, bindings) => {
4
- if (typeof expr == "boolean") {
5
- return ValueOrErrors.Default.return(expr);
11
+ if (typeof expr == "boolean") {
12
+ return ValueOrErrors.Default.return(expr);
13
+ }
14
+ return Expr.Operations.Evaluate(bindings)(expr).Then((result) => {
15
+ if (typeof result == "boolean") {
16
+ return ValueOrErrors.Default.return(result);
6
17
  }
7
- return Expr.Operations.Evaluate(bindings)(expr).Then((result) => {
8
- if (typeof result == "boolean") {
9
- return ValueOrErrors.Default.return(result);
10
- }
11
- return ValueOrErrors.Default.throwOne(`Error: cannot evaluate expression ${JSON.stringify(expr)} to a boolean`);
12
- });
18
+ return ValueOrErrors.Default.throwOne(
19
+ `Error: cannot evaluate expression ${JSON.stringify(expr)} to a boolean`,
20
+ );
21
+ });
13
22
  };
14
23
  export const FieldPredicateExpression = {
15
- Default: {
16
- unit: (value) => ({ kind: "unit", value }),
17
- primitive: (value) => ({
18
- kind: "primitive",
19
- value,
20
- }),
21
- record: (value, fields) => ({ kind: "record", value, fields }),
22
- list: (value, elementExpression) => ({ kind: "list", value, elementExpression }),
23
- map: (value, keyExpression, valueExpression) => ({
24
- kind: "map",
25
- value,
26
- keyExpression,
27
- valueExpression,
28
- }),
29
- tuple: (value, elementExpressions) => ({
30
- kind: "tuple",
31
- value,
32
- elementExpressions,
33
- }),
34
- sum: (value, leftExpression, rightExpression) => ({
35
- kind: "sum",
36
- value,
37
- leftExpression: leftExpression !== null && leftExpression !== void 0 ? leftExpression : FieldPredicateExpression.Default.unit(false),
38
- rightExpression: rightExpression !== null && rightExpression !== void 0 ? rightExpression : FieldPredicateExpression.Default.unit(false),
39
- }),
40
- },
24
+ Default: {
25
+ unit: (value) => ({ kind: "unit", value }),
26
+ primitive: (value) => ({
27
+ kind: "primitive",
28
+ value,
29
+ }),
30
+ record: (value, fields) => ({ kind: "record", value, fields }),
31
+ list: (value, elementExpression) => ({
32
+ kind: "list",
33
+ value,
34
+ elementExpression,
35
+ }),
36
+ map: (value, keyExpression, valueExpression) => ({
37
+ kind: "map",
38
+ value,
39
+ keyExpression,
40
+ valueExpression,
41
+ }),
42
+ tuple: (value, elementExpressions) => ({
43
+ kind: "tuple",
44
+ value,
45
+ elementExpressions,
46
+ }),
47
+ sum: (value, leftExpression, rightExpression) => ({
48
+ kind: "sum",
49
+ value,
50
+ leftExpression:
51
+ leftExpression !== null && leftExpression !== void 0
52
+ ? leftExpression
53
+ : FieldPredicateExpression.Default.unit(false),
54
+ rightExpression:
55
+ rightExpression !== null && rightExpression !== void 0
56
+ ? rightExpression
57
+ : FieldPredicateExpression.Default.unit(false),
58
+ }),
59
+ },
41
60
  };
42
61
  export const FormFieldPredicateEvaluation = {
43
- Default: {
44
- unit: (value) => ({
45
- kind: "unit",
46
- value,
47
- }),
48
- primitive: (value) => ({
49
- kind: "primitive",
50
- value,
51
- }),
52
- form: (value, fields) => ({ kind: "form", value, fields }),
53
- list: (value, elementValues) => ({
54
- kind: "list",
55
- value,
56
- elementValues,
57
- }),
58
- map: (value, elementValues) => ({ kind: "map", value, elementValues }),
59
- tuple: (value, elementValues) => ({
60
- kind: "tuple",
61
- value,
62
- elementValues,
63
- }),
64
- sum: (value, innerValue) => ({ kind: "sum", value, innerValue }),
65
- },
62
+ Default: {
63
+ unit: (value) => ({
64
+ kind: "unit",
65
+ value,
66
+ }),
67
+ primitive: (value) => ({
68
+ kind: "primitive",
69
+ value,
70
+ }),
71
+ form: (value, fields) => ({ kind: "form", value, fields }),
72
+ list: (value, elementValues) => ({
73
+ kind: "list",
74
+ value,
75
+ elementValues,
76
+ }),
77
+ map: (value, elementValues) => ({ kind: "map", value, elementValues }),
78
+ tuple: (value, elementValues) => ({
79
+ kind: "tuple",
80
+ value,
81
+ elementValues,
82
+ }),
83
+ sum: (value, innerValue) => ({ kind: "sum", value, innerValue }),
84
+ },
66
85
  };
67
86
  export const ValueRecord = {
68
- Default: {
69
- empty: () => ({ kind: "record", fields: OrderedMap() }),
70
- fromJSON: (json) => ({
71
- kind: "record",
72
- fields: OrderedMap(Object.assign({}, json)), // TODO - check this works ok
73
- }),
74
- fromMap: (map) => ({
75
- kind: "record",
76
- fields: OrderedMap(map),
77
- }),
87
+ Default: {
88
+ empty: () => ({ kind: "record", fields: OrderedMap() }),
89
+ fromJSON: (json) => ({
90
+ kind: "record",
91
+ fields: OrderedMap(Object.assign({}, json)), // TODO - check this works ok
92
+ }),
93
+ fromMap: (map) => ({
94
+ kind: "record",
95
+ fields: OrderedMap(map),
96
+ }),
97
+ },
98
+ Operations: {
99
+ has: (record, key) => {
100
+ return record.fields.has(key);
101
+ },
102
+ },
103
+ Updaters: Object.assign(Object.assign({}, simpleUpdater()("fields")), {
104
+ update: (key, updater) => {
105
+ return ValueRecord.Updaters.fields(MapRepo.Updaters.update(key, updater));
106
+ },
107
+ set: (key, value) => {
108
+ return ValueRecord.Updaters.fields(MapRepo.Updaters.set(key, value));
109
+ },
110
+ remove: (key) => {
111
+ return ValueRecord.Updaters.fields(MapRepo.Updaters.remove(key));
78
112
  },
79
- Operations: {
80
- has: (record, key) => {
81
- return record.fields.has(key);
82
- },
113
+ clear: () => {
114
+ return ValueRecord.Updaters.fields(replaceWith(OrderedMap()));
83
115
  },
84
- Updaters: Object.assign(Object.assign({}, simpleUpdater()("fields")), { update: (key, updater) => {
85
- return ValueRecord.Updaters.fields(MapRepo.Updaters.update(key, updater));
86
- }, set: (key, value) => {
87
- return ValueRecord.Updaters.fields(MapRepo.Updaters.set(key, value));
88
- }, remove: (key) => {
89
- return ValueRecord.Updaters.fields(MapRepo.Updaters.remove(key));
90
- }, clear: () => {
91
- return ValueRecord.Updaters.fields(replaceWith(OrderedMap()));
92
- } }),
116
+ }),
93
117
  };
94
118
  export const ValueUnionCase = {
95
- Default: (caseName, fields) => ({
96
- kind: "unionCase",
97
- caseName,
98
- fields,
99
- }),
100
- Updaters: Object.assign({ case: (caseName) => (upd) => Updater((v) => ValueUnionCase.Default(caseName, upd(v.fields))) }, simpleUpdater()("fields")),
119
+ Default: (caseName, fields) => ({
120
+ kind: "unionCase",
121
+ caseName,
122
+ fields,
123
+ }),
124
+ Updaters: Object.assign(
125
+ {
126
+ case: (caseName) => (upd) =>
127
+ Updater((v) => ValueUnionCase.Default(caseName, upd(v.fields))),
128
+ },
129
+ simpleUpdater()("fields"),
130
+ ),
101
131
  };
102
132
  export const ValueUnit = {
103
- Default: () => ({ kind: "unit" }),
133
+ Default: () => ({ kind: "unit" }),
104
134
  };
105
135
  export const ValueOption = {
106
- Default: {
107
- some: (value) => ({
108
- kind: "option",
109
- isSome: true,
110
- value,
111
- }),
112
- none: () => ({
113
- kind: "option",
114
- isSome: false,
115
- value: { kind: "unit" },
116
- }),
117
- },
118
- Updaters: {
119
- value: (_) => Updater((v) => ValueOption.Default.some(_(v))),
120
- },
136
+ Default: {
137
+ some: (value) => ({
138
+ kind: "option",
139
+ isSome: true,
140
+ value,
141
+ }),
142
+ none: () => ({
143
+ kind: "option",
144
+ isSome: false,
145
+ value: { kind: "unit" },
146
+ }),
147
+ },
148
+ Updaters: {
149
+ value: (_) => Updater((v) => ValueOption.Default.some(_(v))),
150
+ },
121
151
  };
122
152
  export const ValueSum = {
123
- Default: (value) => ({
124
- kind: "sum",
125
- value,
126
- }),
127
- Updaters: Object.assign({}, simpleUpdater()("value")),
153
+ Default: (value) => ({
154
+ kind: "sum",
155
+ value,
156
+ }),
157
+ Updaters: Object.assign({}, simpleUpdater()("value")),
128
158
  };
129
159
  export const ValueSumN = {
130
- Default: (caseIndex, arity, value) => ({
131
- kind: "sumN",
132
- caseIndex,
133
- arity,
134
- value,
135
- }),
136
- Updaters: Object.assign({ case: (caseIndex) => (upd) => Updater((v) => ValueSumN.Default(caseIndex, v.arity, upd(v.value))) }, simpleUpdater()("value")),
160
+ Default: (caseIndex, arity, value) => ({
161
+ kind: "sumN",
162
+ caseIndex,
163
+ arity,
164
+ value,
165
+ }),
166
+ Updaters: Object.assign(
167
+ {
168
+ case: (caseIndex) => (upd) =>
169
+ Updater((v) => ValueSumN.Default(caseIndex, v.arity, upd(v.value))),
170
+ },
171
+ simpleUpdater()("value"),
172
+ ),
137
173
  };
138
174
  export const ValueTuple = {
139
- Default: () => ({
140
- kind: "tuple",
141
- values: List(),
142
- }),
143
- Updaters: Object.assign({}, simpleUpdater()("values")),
175
+ Default: () => ({
176
+ kind: "tuple",
177
+ values: List(),
178
+ }),
179
+ Updaters: Object.assign({}, simpleUpdater()("values")),
144
180
  };
145
181
  export const ValueTable = {
146
- Default: {
147
- empty: () => ({
148
- kind: "table",
149
- from: 0,
150
- to: 0,
151
- data: OrderedMap(),
152
- hasMoreValues: false,
153
- }),
154
- fromParsed: (from, to, hasMoreValues, data) => ({
155
- kind: "table",
156
- from,
157
- to,
158
- data,
159
- hasMoreValues,
160
- }),
161
- },
162
- Updaters: Object.assign({}, simpleUpdater()("data")),
182
+ Default: {
183
+ empty: () => ({
184
+ kind: "table",
185
+ from: 0,
186
+ to: 0,
187
+ data: OrderedMap(),
188
+ hasMoreValues: false,
189
+ }),
190
+ fromParsed: (from, to, hasMoreValues, data) => ({
191
+ kind: "table",
192
+ from,
193
+ to,
194
+ data,
195
+ hasMoreValues,
196
+ }),
197
+ },
198
+ Updaters: Object.assign({}, simpleUpdater()("data")),
163
199
  };
164
200
  export const ValueFilterContains = {
165
- Default: (contains) => ({
166
- kind: "contains",
167
- contains,
168
- }),
201
+ Default: (contains) => ({
202
+ kind: "contains",
203
+ contains,
204
+ }),
169
205
  };
170
206
  export const ValueFilterEqualsTo = {
171
- Default: (equalsTo) => ({
172
- kind: "=",
173
- equalsTo,
174
- }),
207
+ Default: (equalsTo) => ({
208
+ kind: "=",
209
+ equalsTo,
210
+ }),
175
211
  };
176
212
  export const ValueFilterNotEqualsTo = {
177
- Default: (notEqualsTo) => ({
178
- kind: "!=",
179
- notEqualsTo,
180
- }),
213
+ Default: (notEqualsTo) => ({
214
+ kind: "!=",
215
+ notEqualsTo,
216
+ }),
181
217
  };
182
218
  export const ValueFilterGreaterThanOrEqualsTo = {
183
- Default: (greaterThanOrEqualsTo) => ({
184
- kind: ">=",
185
- greaterThanOrEqualsTo,
186
- }),
219
+ Default: (greaterThanOrEqualsTo) => ({
220
+ kind: ">=",
221
+ greaterThanOrEqualsTo,
222
+ }),
187
223
  };
188
224
  export const ValueFilterGreaterThan = {
189
- Default: (greaterThan) => ({
190
- kind: ">",
191
- greaterThan,
192
- }),
225
+ Default: (greaterThan) => ({
226
+ kind: ">",
227
+ greaterThan,
228
+ }),
193
229
  };
194
230
  export const ValueFilterIsNotNull = {
195
- Default: () => ({
196
- kind: "!=null",
197
- }),
231
+ Default: () => ({
232
+ kind: "!=null",
233
+ }),
198
234
  };
199
235
  export const ValueFilterIsNull = {
200
- Default: () => ({
201
- kind: "=null",
202
- }),
236
+ Default: () => ({
237
+ kind: "=null",
238
+ }),
203
239
  };
204
240
  export const ValueFilterSmallerThanOrEqualsTo = {
205
- Default: (smallerThanOrEqualsTo) => ({
206
- kind: "<=",
207
- smallerThanOrEqualsTo,
208
- }),
241
+ Default: (smallerThanOrEqualsTo) => ({
242
+ kind: "<=",
243
+ smallerThanOrEqualsTo,
244
+ }),
209
245
  };
210
246
  export const ValueFilterSmallerThan = {
211
- Default: (smallerThan) => ({
212
- kind: "<",
213
- smallerThan,
214
- }),
247
+ Default: (smallerThan) => ({
248
+ kind: "<",
249
+ smallerThan,
250
+ }),
215
251
  };
216
252
  export const ValueFilterStartsWith = {
217
- Default: (startsWith) => ({
218
- kind: "startsWith",
219
- startsWith,
220
- }),
253
+ Default: (startsWith) => ({
254
+ kind: "startsWith",
255
+ startsWith,
256
+ }),
221
257
  };
222
258
  export const BinaryOperators = ["or", "equals"];
223
259
  export const BinaryOperatorsSet = Set(BinaryOperators);
224
260
  export const PredicateValue = {
225
- Default: {
226
- string: () => "",
227
- number: () => 0,
228
- boolean: () => false,
229
- date: () => new Date(),
230
- unit: () => ({ kind: "unit" }),
231
- tuple: (values) => ({
232
- kind: "tuple",
233
- values,
234
- }),
235
- record: (fields) => ({
236
- kind: "record",
237
- fields,
238
- }),
239
- unionCase: (caseName, fields) => ({
240
- kind: "unionCase",
241
- caseName,
242
- fields,
243
- }),
244
- option: (isSome, value) => ({
245
- kind: "option",
246
- isSome,
247
- value,
248
- }),
249
- varLookup: (varName) => ({
250
- kind: "varLookup",
251
- varName,
252
- }),
253
- sum: (value) => ({
254
- kind: "sum",
255
- value,
256
- }),
257
- sumN: (caseIndex, arity, value) => ({
258
- kind: "sumN",
259
- caseIndex,
260
- arity,
261
- value,
262
- }),
263
- table: (from, to, data, hasMoreValues) => ({
264
- kind: "table",
265
- from,
266
- to,
267
- data,
268
- hasMoreValues,
269
- }),
270
- readonly: (value) => ({
271
- kind: "readOnly",
272
- ReadOnly: value,
273
- }),
274
- filterContains: (contains) => ({
275
- kind: "contains",
276
- contains,
277
- }),
278
- filterEqualsTo: (equalsTo) => ({
279
- kind: "=",
280
- equalsTo,
281
- }),
282
- filterNotEqualsTo: (notEqualsTo) => ({
283
- kind: "!=",
284
- notEqualsTo,
285
- }),
286
- filterGreaterThanOrEqualsTo: (greaterThanOrEqualsTo) => ({
287
- kind: ">=",
288
- greaterThanOrEqualsTo,
289
- }),
290
- filterGreaterThan: (greaterThan) => ({
291
- kind: ">",
292
- greaterThan,
293
- }),
294
- filterIsNotNull: () => ({
295
- kind: "!=null",
296
- }),
297
- filterIsNull: () => ({
298
- kind: "=null",
299
- }),
300
- filterSmallerThanOrEqualsTo: (smallerThanOrEqualsTo) => ({
301
- kind: "<=",
302
- smallerThanOrEqualsTo,
303
- }),
304
- filterSmallerThan: (smallerThan) => ({
305
- kind: "<",
306
- smallerThan,
307
- }),
308
- filterStartsWith: (startsWith) => ({
309
- kind: "startsWith",
310
- startsWith,
311
- }),
261
+ Default: {
262
+ string: () => "",
263
+ number: () => 0,
264
+ boolean: () => false,
265
+ date: () => new Date(),
266
+ unit: () => ({ kind: "unit" }),
267
+ tuple: (values) => ({
268
+ kind: "tuple",
269
+ values,
270
+ }),
271
+ record: (fields) => ({
272
+ kind: "record",
273
+ fields,
274
+ }),
275
+ unionCase: (caseName, fields) => ({
276
+ kind: "unionCase",
277
+ caseName,
278
+ fields,
279
+ }),
280
+ option: (isSome, value) => ({
281
+ kind: "option",
282
+ isSome,
283
+ value,
284
+ }),
285
+ varLookup: (varName) => ({
286
+ kind: "varLookup",
287
+ varName,
288
+ }),
289
+ sum: (value) => ({
290
+ kind: "sum",
291
+ value,
292
+ }),
293
+ sumN: (caseIndex, arity, value) => ({
294
+ kind: "sumN",
295
+ caseIndex,
296
+ arity,
297
+ value,
298
+ }),
299
+ table: (from, to, data, hasMoreValues) => ({
300
+ kind: "table",
301
+ from,
302
+ to,
303
+ data,
304
+ hasMoreValues,
305
+ }),
306
+ readonly: (value) => ({
307
+ kind: "readOnly",
308
+ ReadOnly: value,
309
+ }),
310
+ filterContains: (contains) => ({
311
+ kind: "contains",
312
+ contains,
313
+ }),
314
+ filterEqualsTo: (equalsTo) => ({
315
+ kind: "=",
316
+ equalsTo,
317
+ }),
318
+ filterNotEqualsTo: (notEqualsTo) => ({
319
+ kind: "!=",
320
+ notEqualsTo,
321
+ }),
322
+ filterGreaterThanOrEqualsTo: (greaterThanOrEqualsTo) => ({
323
+ kind: ">=",
324
+ greaterThanOrEqualsTo,
325
+ }),
326
+ filterGreaterThan: (greaterThan) => ({
327
+ kind: ">",
328
+ greaterThan,
329
+ }),
330
+ filterIsNotNull: () => ({
331
+ kind: "!=null",
332
+ }),
333
+ filterIsNull: () => ({
334
+ kind: "=null",
335
+ }),
336
+ filterSmallerThanOrEqualsTo: (smallerThanOrEqualsTo) => ({
337
+ kind: "<=",
338
+ smallerThanOrEqualsTo,
339
+ }),
340
+ filterSmallerThan: (smallerThan) => ({
341
+ kind: "<",
342
+ smallerThan,
343
+ }),
344
+ filterStartsWith: (startsWith) => ({
345
+ kind: "startsWith",
346
+ startsWith,
347
+ }),
348
+ },
349
+ Operations: {
350
+ GetKind: (value) =>
351
+ typeof value == "object"
352
+ ? "kind" in value
353
+ ? ValueOrErrors.Default.return(value.kind)
354
+ : PredicateValue.Operations.IsDate(value)
355
+ ? ValueOrErrors.Default.return("date")
356
+ : ValueOrErrors.Default.throwOne("invalid")
357
+ : ValueOrErrors.Default.return(typeof value),
358
+ IsPrimitive: (value) => {
359
+ return (
360
+ PredicateValue.Operations.IsBoolean(value) ||
361
+ PredicateValue.Operations.IsNumber(value) ||
362
+ PredicateValue.Operations.IsString(value) ||
363
+ PredicateValue.Operations.IsDate(value)
364
+ );
312
365
  },
313
- Operations: {
314
- GetKind: (value) => typeof value == "object"
315
- ? "kind" in value
316
- ? ValueOrErrors.Default.return(value.kind)
317
- : PredicateValue.Operations.IsDate(value)
318
- ? ValueOrErrors.Default.return("date")
319
- : ValueOrErrors.Default.throwOne("invalid")
320
- : ValueOrErrors.Default.return(typeof value),
321
- IsPrimitive: (value) => {
322
- return (PredicateValue.Operations.IsBoolean(value) ||
323
- PredicateValue.Operations.IsNumber(value) ||
324
- PredicateValue.Operations.IsString(value) ||
325
- PredicateValue.Operations.IsDate(value));
326
- },
327
- IsBoolean: (value) => {
328
- return typeof value == "boolean";
329
- },
330
- IsNumber: (value) => {
331
- return typeof value == "number";
332
- },
333
- IsString: (value) => {
334
- return typeof value == "string";
335
- },
336
- IsDate: (value) => {
337
- return (typeof value == "object" &&
338
- Object.prototype.toString.call(value) === "[object Date]" &&
339
- value instanceof Date &&
340
- !isNaN(value.getTime()));
341
- },
342
- IsUnit: (value) => {
343
- return (typeof value == "object" &&
344
- !PredicateValue.Operations.IsDate(value) &&
345
- value.kind == "unit");
346
- },
347
- IsUnionCase: (value) => {
348
- return (typeof value == "object" &&
349
- !PredicateValue.Operations.IsDate(value) &&
350
- value.kind == "unionCase");
351
- },
352
- IsRecord: (value) => {
353
- return (typeof value == "object" &&
354
- !PredicateValue.Operations.IsDate(value) &&
355
- value.kind == "record");
356
- },
357
- IsTuple: (value) => {
358
- return (typeof value == "object" &&
359
- !PredicateValue.Operations.IsDate(value) &&
360
- value.kind == "tuple");
361
- },
362
- IsOption: (value) => {
363
- return (typeof value == "object" &&
364
- !PredicateValue.Operations.IsDate(value) &&
365
- value.kind == "option");
366
- },
367
- IsTable: (value) => {
368
- return (typeof value == "object" &&
369
- !PredicateValue.Operations.IsDate(value) &&
370
- value.kind == "table");
371
- },
372
- IsSum: (value) => {
373
- return (typeof value == "object" &&
374
- !PredicateValue.Operations.IsDate(value) &&
375
- value.kind == "sum");
376
- },
377
- IsSumN: (value) => {
378
- return (typeof value == "object" &&
379
- !PredicateValue.Operations.IsDate(value) &&
380
- value.kind == "sumN");
381
- },
382
- IsVarLookup: (value) => {
383
- return (typeof value == "object" &&
384
- !PredicateValue.Operations.IsDate(value) &&
385
- value.kind == "varLookup");
386
- },
387
- IsCustom: (value) => {
388
- return (typeof value == "object" &&
389
- !PredicateValue.Operations.IsDate(value) &&
390
- value.kind == "custom");
391
- },
392
- IsReadOnly: (value) => {
393
- return (typeof value == "object" &&
394
- !PredicateValue.Operations.IsDate(value) &&
395
- value.kind == "readOnly");
396
- },
397
- IsFilterContains: (value) => {
398
- return (typeof value == "object" &&
399
- !PredicateValue.Operations.IsDate(value) &&
400
- value.kind == "contains");
401
- },
402
- IsFilterEqualsTo: (value) => {
403
- return (typeof value == "object" &&
404
- !PredicateValue.Operations.IsDate(value) &&
405
- value.kind == "=");
406
- },
407
- IsFilterNotEqualsTo: (value) => {
408
- return (typeof value == "object" &&
409
- !PredicateValue.Operations.IsDate(value) &&
410
- value.kind == "!=");
411
- },
412
- IsFilterGreaterThanOrEqualsTo: (value) => {
413
- return (typeof value == "object" &&
414
- !PredicateValue.Operations.IsDate(value) &&
415
- value.kind == ">=");
416
- },
417
- IsFilterGreaterThan: (value) => {
418
- return (typeof value == "object" &&
419
- !PredicateValue.Operations.IsDate(value) &&
420
- value.kind == ">");
421
- },
422
- IsFilterIsNotNull: (value) => {
423
- return (typeof value == "object" &&
424
- !PredicateValue.Operations.IsDate(value) &&
425
- value.kind == "!=null");
426
- },
427
- IsFilterIsNull: (value) => {
428
- return (typeof value == "object" &&
429
- !PredicateValue.Operations.IsDate(value) &&
430
- value.kind == "=null");
431
- },
432
- IsFilterSmallerThanOrEqualsTo: (value) => {
433
- return (typeof value == "object" &&
434
- !PredicateValue.Operations.IsDate(value) &&
435
- value.kind == "<=");
436
- },
437
- IsFilterSmallerThan: (value) => {
438
- return (typeof value == "object" &&
439
- !PredicateValue.Operations.IsDate(value) &&
440
- value.kind == "<");
441
- },
442
- IsFilterStartsWith: (value) => {
443
- return (typeof value == "object" &&
444
- !PredicateValue.Operations.IsDate(value) &&
445
- value.kind == "startsWith");
446
- },
447
- KindAndValueToFilter: (kind, value) => {
448
- switch (kind) {
449
- case "contains":
450
- return PredicateValue.Default.filterContains(value);
451
- case "=":
452
- return PredicateValue.Default.filterEqualsTo(value);
453
- case "!=":
454
- return PredicateValue.Default.filterNotEqualsTo(value);
455
- case ">=":
456
- return PredicateValue.Default.filterGreaterThanOrEqualsTo(value);
457
- case ">":
458
- return PredicateValue.Default.filterGreaterThan(value);
459
- case "!=null":
460
- return PredicateValue.Default.filterIsNotNull();
461
- case "=null":
462
- return PredicateValue.Default.filterIsNull();
463
- case "<=":
464
- return PredicateValue.Default.filterSmallerThanOrEqualsTo(value);
465
- case "<":
466
- return PredicateValue.Default.filterSmallerThan(value);
467
- case "startsWith":
468
- return PredicateValue.Default.filterStartsWith(value);
469
- default:
470
- return PredicateValue.Default.filterEqualsTo(value);
471
- }
472
- },
473
- FilterToKindAndValue: (filter) => {
474
- switch (filter.kind) {
475
- case "contains":
476
- return { kind: "contains", value: filter.contains };
477
- case "=":
478
- return { kind: "=", value: filter.equalsTo };
479
- case "!=":
480
- return { kind: "!=", value: filter.notEqualsTo };
481
- case ">=":
482
- return { kind: ">=", value: filter.greaterThanOrEqualsTo };
483
- case ">":
484
- return { kind: ">", value: filter.greaterThan };
485
- case "!=null":
486
- return { kind: "!=null", value: PredicateValue.Default.unit() };
487
- case "=null":
488
- return { kind: "=null", value: PredicateValue.Default.unit() };
489
- case "<=":
490
- return { kind: "<=", value: filter.smallerThanOrEqualsTo };
491
- case "<":
492
- return { kind: "<", value: filter.smallerThan };
493
- default:
494
- return { kind: "startsWith", value: filter.startsWith };
495
- }
496
- },
497
- ParseAsDate: (json) => {
498
- if (PredicateValue.Operations.IsDate(json))
499
- return ValueOrErrors.Default.return(json);
500
- return ValueOrErrors.Default.throwOne(`date has invalid value property`);
501
- },
502
- ParseAsVarLookup: (json) => {
503
- if (json.kind == "varLookup" && typeof json.varName == "string")
504
- return ValueOrErrors.Default.return(PredicateValue.Default.varLookup(json.varName));
505
- return ValueOrErrors.Default.throwOne(`varLookup has invalid varName property`);
506
- },
507
- ParseAsUnionCase: (json) => {
508
- if (typeof json.caseName == "string")
509
- return ValueOrErrors.Default.return(PredicateValue.Default.unionCase(json.caseName, json.value));
510
- return ValueOrErrors.Default.throwOne(`union case has invalid caseName property`);
511
- },
512
- ParseAsRecord: (json, types) => {
513
- if ("fields" in json && typeof json.fields == "object") {
514
- return ValueOrErrors.Operations.All(List(Object.entries(json.fields).map(([fieldName, fieldValue]) => PredicateValue.Operations.parse(fieldValue, { kind: "expression" }, types).Then((value) => ValueOrErrors.Default.return([fieldName, value]))))).Then((entries) => ValueOrErrors.Default.return(PredicateValue.Default.record(OrderedMap(entries))));
515
- }
516
- return ValueOrErrors.Default.throwOne(`record has no field property`);
517
- },
518
- ParseAsTuple: (json, types) => {
519
- if (json.values != undefined && Array.isArray(json.values)) {
520
- return ValueOrErrors.Operations.All(List(json.values.map((elementValue) => PredicateValue.Operations.parse(elementValue, { kind: "expression" }, types)))).Then((values) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)));
521
- }
522
- return ValueOrErrors.Default.throwOne(`Error: tuple has no values property`);
523
- },
524
- // TODO -- do we need to add table here ?
525
- parse: (json, type, types) => {
526
- const result = (() => {
527
- if (type.kind == "expression" &&
528
- (typeof json == "boolean" ||
529
- typeof json == "number" ||
530
- typeof json == "string"))
531
- return ValueOrErrors.Default.return(json);
532
- if (type.kind == "expression" && json.kind == undefined) {
533
- return ValueOrErrors.Default.throwOne(`evaluation statement has no kind value`);
534
- }
535
- if (type.kind == "expression" && json.kind == "guid") {
536
- return ValueOrErrors.Default.return(json);
537
- }
538
- if (type.kind == "expression" && json.kind == "date") {
539
- return PredicateValue.Operations.ParseAsDate(json);
540
- }
541
- if (type.kind == "expression" && json.kind == "unit") {
542
- return ValueOrErrors.Default.return(PredicateValue.Default.unit());
543
- }
544
- if (type.kind == "expression" && json.kind == "varLookup") {
545
- return PredicateValue.Operations.ParseAsVarLookup(json);
546
- }
547
- if (type.kind == "expression" &&
548
- json.kind == "record" &&
549
- "caseName" in json) {
550
- return PredicateValue.Operations.ParseAsUnionCase(json);
551
- }
552
- if (type.kind == "expression" &&
553
- json.kind == "record" &&
554
- "fields" in json) {
555
- return PredicateValue.Operations.ParseAsRecord(json, types);
556
- }
557
- if (type.kind == "expression" &&
558
- json.kind == "tuple" &&
559
- "values" in json) {
560
- return PredicateValue.Operations.ParseAsTuple(json, types);
561
- }
562
- if (type.kind == "primitive" && type.value == "Date") {
563
- if (PredicateValue.Operations.IsDate(json)) {
564
- return ValueOrErrors.Default.return(json);
565
- }
566
- return ValueOrErrors.Default.throwOne(`failed to parse date ${JSON.stringify(json)}`);
567
- }
568
- if (type.kind == "primitive" && type.value == "maybeBoolean") {
569
- return json == undefined
570
- ? ValueOrErrors.Default.return(false)
571
- : ValueOrErrors.Default.return(json);
572
- }
573
- if (type.kind == "primitive") {
574
- return ValueOrErrors.Default.return(json);
575
- }
576
- if (type.kind == "lookup") {
577
- const subType = types.get(type.name);
578
- if (subType == undefined) {
579
- return ValueOrErrors.Default.throwOne(`cannot find field ${type.name} in types`);
580
- }
581
- return PredicateValue.Operations.parse(json, subType, types);
582
- }
583
- if (type.kind == "union") {
584
- const unionCase = type.args.get(json);
585
- if (unionCase == undefined) {
586
- return ValueOrErrors.Default.throwOne(`Error: cannot find union case ${JSON.stringify(json)} in types`);
587
- }
588
- return PredicateValue.Operations.ParseAsUnionCase({
589
- kind: "unionCase",
590
- caseName: json,
591
- value: { kind: "form", value: Map() },
592
- });
593
- }
594
- if (type.kind == "application" && type.value == "List") {
595
- return ValueOrErrors.Operations.All(List(json.map((elementValue) => PredicateValue.Operations.parse(elementValue, type.args[0], types)))).Then((values) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)));
596
- }
597
- if (type.kind == "application" && type.value == "Map") {
598
- return ValueOrErrors.Operations.All(List(json.map((keyValue) => PredicateValue.Operations.parse(keyValue.key, type.args[0], types).Then((key) => PredicateValue.Operations.parse(keyValue.value, type === null || type === void 0 ? void 0 : type.args[1], types).Then((value) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(List([key, value])))))))).Then((values) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)));
599
- }
600
- if (type.kind == "application" && type.value == "Sum") {
601
- return PredicateValue.Operations.parse(json.left, type === null || type === void 0 ? void 0 : type.args[0], types).Then((left) => PredicateValue.Operations.parse(json.right, type === null || type === void 0 ? void 0 : type.args[1], types).Then((right) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(List([left, right])))));
602
- }
603
- if (type.kind == "application" && type.value == "SingleSelection") {
604
- ValueOrErrors.Default.return(PredicateValue.Default.option(json["IsSome"], json["Value"]));
605
- }
606
- if (type.kind == "application" && type.value == "MultiSelection") {
607
- return ValueOrErrors.Operations.All(List(json.map((elementValue) => PredicateValue.Operations.parse(elementValue, type.args[0], types)))).Then((values) => ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)));
608
- }
609
- if (type.kind == "record") {
610
- return ValueOrErrors.Operations.All(List(Object.entries(json).map(([fieldName, fieldValue]) => {
611
- const subType = type.fields.get(fieldName);
612
- if (subType == undefined) {
613
- return ValueOrErrors.Default.throwOne(`cannot find field ${fieldName} in type ${JSON.stringify(type)}`);
614
- }
615
- return PredicateValue.Operations.parse(fieldValue, subType, types).Then((value) => ValueOrErrors.Default.return([fieldName, value]));
616
- }))).Then((entries) => ValueOrErrors.Default.return(PredicateValue.Default.record(OrderedMap(entries.map((_) => [_[0], _[1]])))));
366
+ IsBoolean: (value) => {
367
+ return typeof value == "boolean";
368
+ },
369
+ IsNumber: (value) => {
370
+ return typeof value == "number";
371
+ },
372
+ IsString: (value) => {
373
+ return typeof value == "string";
374
+ },
375
+ IsDate: (value) => {
376
+ return (
377
+ typeof value == "object" &&
378
+ Object.prototype.toString.call(value) === "[object Date]" &&
379
+ value instanceof Date &&
380
+ !isNaN(value.getTime())
381
+ );
382
+ },
383
+ IsUnit: (value) => {
384
+ return (
385
+ typeof value == "object" &&
386
+ !PredicateValue.Operations.IsDate(value) &&
387
+ value.kind == "unit"
388
+ );
389
+ },
390
+ IsUnionCase: (value) => {
391
+ return (
392
+ typeof value == "object" &&
393
+ !PredicateValue.Operations.IsDate(value) &&
394
+ value.kind == "unionCase"
395
+ );
396
+ },
397
+ IsRecord: (value) => {
398
+ return (
399
+ typeof value == "object" &&
400
+ !PredicateValue.Operations.IsDate(value) &&
401
+ value.kind == "record"
402
+ );
403
+ },
404
+ IsTuple: (value) => {
405
+ return (
406
+ typeof value == "object" &&
407
+ !PredicateValue.Operations.IsDate(value) &&
408
+ value.kind == "tuple"
409
+ );
410
+ },
411
+ IsOption: (value) => {
412
+ return (
413
+ typeof value == "object" &&
414
+ !PredicateValue.Operations.IsDate(value) &&
415
+ value.kind == "option"
416
+ );
417
+ },
418
+ IsTable: (value) => {
419
+ return (
420
+ typeof value == "object" &&
421
+ !PredicateValue.Operations.IsDate(value) &&
422
+ value.kind == "table"
423
+ );
424
+ },
425
+ IsSum: (value) => {
426
+ return (
427
+ typeof value == "object" &&
428
+ !PredicateValue.Operations.IsDate(value) &&
429
+ value.kind == "sum"
430
+ );
431
+ },
432
+ IsSumN: (value) => {
433
+ return (
434
+ typeof value == "object" &&
435
+ !PredicateValue.Operations.IsDate(value) &&
436
+ value.kind == "sumN"
437
+ );
438
+ },
439
+ IsVarLookup: (value) => {
440
+ return (
441
+ typeof value == "object" &&
442
+ !PredicateValue.Operations.IsDate(value) &&
443
+ value.kind == "varLookup"
444
+ );
445
+ },
446
+ IsCustom: (value) => {
447
+ return (
448
+ typeof value == "object" &&
449
+ !PredicateValue.Operations.IsDate(value) &&
450
+ value.kind == "custom"
451
+ );
452
+ },
453
+ IsReadOnly: (value) => {
454
+ return (
455
+ typeof value == "object" &&
456
+ !PredicateValue.Operations.IsDate(value) &&
457
+ value.kind == "readOnly"
458
+ );
459
+ },
460
+ IsFilterContains: (value) => {
461
+ return (
462
+ typeof value == "object" &&
463
+ !PredicateValue.Operations.IsDate(value) &&
464
+ value.kind == "contains"
465
+ );
466
+ },
467
+ IsFilterEqualsTo: (value) => {
468
+ return (
469
+ typeof value == "object" &&
470
+ !PredicateValue.Operations.IsDate(value) &&
471
+ value.kind == "="
472
+ );
473
+ },
474
+ IsFilterNotEqualsTo: (value) => {
475
+ return (
476
+ typeof value == "object" &&
477
+ !PredicateValue.Operations.IsDate(value) &&
478
+ value.kind == "!="
479
+ );
480
+ },
481
+ IsFilterGreaterThanOrEqualsTo: (value) => {
482
+ return (
483
+ typeof value == "object" &&
484
+ !PredicateValue.Operations.IsDate(value) &&
485
+ value.kind == ">="
486
+ );
487
+ },
488
+ IsFilterGreaterThan: (value) => {
489
+ return (
490
+ typeof value == "object" &&
491
+ !PredicateValue.Operations.IsDate(value) &&
492
+ value.kind == ">"
493
+ );
494
+ },
495
+ IsFilterIsNotNull: (value) => {
496
+ return (
497
+ typeof value == "object" &&
498
+ !PredicateValue.Operations.IsDate(value) &&
499
+ value.kind == "!=null"
500
+ );
501
+ },
502
+ IsFilterIsNull: (value) => {
503
+ return (
504
+ typeof value == "object" &&
505
+ !PredicateValue.Operations.IsDate(value) &&
506
+ value.kind == "=null"
507
+ );
508
+ },
509
+ IsFilterSmallerThanOrEqualsTo: (value) => {
510
+ return (
511
+ typeof value == "object" &&
512
+ !PredicateValue.Operations.IsDate(value) &&
513
+ value.kind == "<="
514
+ );
515
+ },
516
+ IsFilterSmallerThan: (value) => {
517
+ return (
518
+ typeof value == "object" &&
519
+ !PredicateValue.Operations.IsDate(value) &&
520
+ value.kind == "<"
521
+ );
522
+ },
523
+ IsFilterStartsWith: (value) => {
524
+ return (
525
+ typeof value == "object" &&
526
+ !PredicateValue.Operations.IsDate(value) &&
527
+ value.kind == "startsWith"
528
+ );
529
+ },
530
+ KindAndValueToFilter: (kind, value) => {
531
+ switch (kind) {
532
+ case "contains":
533
+ return PredicateValue.Default.filterContains(value);
534
+ case "=":
535
+ return PredicateValue.Default.filterEqualsTo(value);
536
+ case "!=":
537
+ return PredicateValue.Default.filterNotEqualsTo(value);
538
+ case ">=":
539
+ return PredicateValue.Default.filterGreaterThanOrEqualsTo(value);
540
+ case ">":
541
+ return PredicateValue.Default.filterGreaterThan(value);
542
+ case "!=null":
543
+ return PredicateValue.Default.filterIsNotNull();
544
+ case "=null":
545
+ return PredicateValue.Default.filterIsNull();
546
+ case "<=":
547
+ return PredicateValue.Default.filterSmallerThanOrEqualsTo(value);
548
+ case "<":
549
+ return PredicateValue.Default.filterSmallerThan(value);
550
+ case "startsWith":
551
+ return PredicateValue.Default.filterStartsWith(value);
552
+ default:
553
+ return PredicateValue.Default.filterEqualsTo(value);
554
+ }
555
+ },
556
+ FilterToKindAndValue: (filter) => {
557
+ switch (filter.kind) {
558
+ case "contains":
559
+ return { kind: "contains", value: filter.contains };
560
+ case "=":
561
+ return { kind: "=", value: filter.equalsTo };
562
+ case "!=":
563
+ return { kind: "!=", value: filter.notEqualsTo };
564
+ case ">=":
565
+ return { kind: ">=", value: filter.greaterThanOrEqualsTo };
566
+ case ">":
567
+ return { kind: ">", value: filter.greaterThan };
568
+ case "!=null":
569
+ return { kind: "!=null", value: PredicateValue.Default.unit() };
570
+ case "=null":
571
+ return { kind: "=null", value: PredicateValue.Default.unit() };
572
+ case "<=":
573
+ return { kind: "<=", value: filter.smallerThanOrEqualsTo };
574
+ case "<":
575
+ return { kind: "<", value: filter.smallerThan };
576
+ default:
577
+ return { kind: "startsWith", value: filter.startsWith };
578
+ }
579
+ },
580
+ ParseAsDate: (json) => {
581
+ if (PredicateValue.Operations.IsDate(json))
582
+ return ValueOrErrors.Default.return(json);
583
+ return ValueOrErrors.Default.throwOne(`date has invalid value property`);
584
+ },
585
+ ParseAsVarLookup: (json) => {
586
+ if (json.kind == "varLookup" && typeof json.varName == "string")
587
+ return ValueOrErrors.Default.return(
588
+ PredicateValue.Default.varLookup(json.varName),
589
+ );
590
+ return ValueOrErrors.Default.throwOne(
591
+ `varLookup has invalid varName property`,
592
+ );
593
+ },
594
+ ParseAsUnionCase: (json) => {
595
+ if (typeof json.caseName == "string")
596
+ return ValueOrErrors.Default.return(
597
+ PredicateValue.Default.unionCase(json.caseName, json.value),
598
+ );
599
+ return ValueOrErrors.Default.throwOne(
600
+ `union case has invalid caseName property`,
601
+ );
602
+ },
603
+ ParseAsRecord: (json, types) => {
604
+ if ("fields" in json && typeof json.fields == "object") {
605
+ return ValueOrErrors.Operations.All(
606
+ List(
607
+ Object.entries(json.fields).map(([fieldName, fieldValue]) =>
608
+ PredicateValue.Operations.parse(
609
+ fieldValue,
610
+ { kind: "expression" },
611
+ types,
612
+ ).Then((value) =>
613
+ ValueOrErrors.Default.return([fieldName, value]),
614
+ ),
615
+ ),
616
+ ),
617
+ ).Then((entries) =>
618
+ ValueOrErrors.Default.return(
619
+ PredicateValue.Default.record(OrderedMap(entries)),
620
+ ),
621
+ );
622
+ }
623
+ return ValueOrErrors.Default.throwOne(`record has no field property`);
624
+ },
625
+ ParseAsTuple: (json, types) => {
626
+ if (json.values != undefined && Array.isArray(json.values)) {
627
+ return ValueOrErrors.Operations.All(
628
+ List(
629
+ json.values.map((elementValue) =>
630
+ PredicateValue.Operations.parse(
631
+ elementValue,
632
+ { kind: "expression" },
633
+ types,
634
+ ),
635
+ ),
636
+ ),
637
+ ).Then((values) =>
638
+ ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)),
639
+ );
640
+ }
641
+ return ValueOrErrors.Default.throwOne(
642
+ `Error: tuple has no values property`,
643
+ );
644
+ },
645
+ // TODO -- do we need to add table here ?
646
+ parse: (json, type, types) => {
647
+ const result = (() => {
648
+ if (
649
+ type.kind == "expression" &&
650
+ (typeof json == "boolean" ||
651
+ typeof json == "number" ||
652
+ typeof json == "string")
653
+ )
654
+ return ValueOrErrors.Default.return(json);
655
+ if (type.kind == "expression" && json.kind == undefined) {
656
+ return ValueOrErrors.Default.throwOne(
657
+ `evaluation statement has no kind value`,
658
+ );
659
+ }
660
+ if (type.kind == "expression" && json.kind == "guid") {
661
+ return ValueOrErrors.Default.return(json);
662
+ }
663
+ if (type.kind == "expression" && json.kind == "date") {
664
+ return PredicateValue.Operations.ParseAsDate(json);
665
+ }
666
+ if (type.kind == "expression" && json.kind == "unit") {
667
+ return ValueOrErrors.Default.return(PredicateValue.Default.unit());
668
+ }
669
+ if (type.kind == "expression" && json.kind == "varLookup") {
670
+ return PredicateValue.Operations.ParseAsVarLookup(json);
671
+ }
672
+ if (
673
+ type.kind == "expression" &&
674
+ json.kind == "record" &&
675
+ "caseName" in json
676
+ ) {
677
+ return PredicateValue.Operations.ParseAsUnionCase(json);
678
+ }
679
+ if (
680
+ type.kind == "expression" &&
681
+ json.kind == "record" &&
682
+ "fields" in json
683
+ ) {
684
+ return PredicateValue.Operations.ParseAsRecord(json, types);
685
+ }
686
+ if (
687
+ type.kind == "expression" &&
688
+ json.kind == "tuple" &&
689
+ "values" in json
690
+ ) {
691
+ return PredicateValue.Operations.ParseAsTuple(json, types);
692
+ }
693
+ if (type.kind == "primitive" && type.value == "Date") {
694
+ if (PredicateValue.Operations.IsDate(json)) {
695
+ return ValueOrErrors.Default.return(json);
696
+ }
697
+ return ValueOrErrors.Default.throwOne(
698
+ `failed to parse date ${JSON.stringify(json)}`,
699
+ );
700
+ }
701
+ if (type.kind == "primitive" && type.value == "maybeBoolean") {
702
+ return json == undefined
703
+ ? ValueOrErrors.Default.return(false)
704
+ : ValueOrErrors.Default.return(json);
705
+ }
706
+ if (type.kind == "primitive") {
707
+ return ValueOrErrors.Default.return(json);
708
+ }
709
+ if (type.kind == "lookup") {
710
+ const subType = types.get(type.name);
711
+ if (subType == undefined) {
712
+ return ValueOrErrors.Default.throwOne(
713
+ `cannot find field ${type.name} in types`,
714
+ );
715
+ }
716
+ return PredicateValue.Operations.parse(json, subType, types);
717
+ }
718
+ if (type.kind == "union") {
719
+ const unionCase = type.args.get(json);
720
+ if (unionCase == undefined) {
721
+ return ValueOrErrors.Default.throwOne(
722
+ `Error: cannot find union case ${JSON.stringify(json)} in types`,
723
+ );
724
+ }
725
+ return PredicateValue.Operations.ParseAsUnionCase({
726
+ kind: "unionCase",
727
+ caseName: json,
728
+ value: { kind: "form", value: Map() },
729
+ });
730
+ }
731
+ if (type.kind == "application" && type.value == "List") {
732
+ return ValueOrErrors.Operations.All(
733
+ List(
734
+ json.map((elementValue) =>
735
+ PredicateValue.Operations.parse(
736
+ elementValue,
737
+ type.args[0],
738
+ types,
739
+ ),
740
+ ),
741
+ ),
742
+ ).Then((values) =>
743
+ ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)),
744
+ );
745
+ }
746
+ if (type.kind == "application" && type.value == "Map") {
747
+ return ValueOrErrors.Operations.All(
748
+ List(
749
+ json.map((keyValue) =>
750
+ PredicateValue.Operations.parse(
751
+ keyValue.key,
752
+ type.args[0],
753
+ types,
754
+ ).Then((key) =>
755
+ PredicateValue.Operations.parse(
756
+ keyValue.value,
757
+ type === null || type === void 0 ? void 0 : type.args[1],
758
+ types,
759
+ ).Then((value) =>
760
+ ValueOrErrors.Default.return(
761
+ PredicateValue.Default.tuple(List([key, value])),
762
+ ),
763
+ ),
764
+ ),
765
+ ),
766
+ ),
767
+ ).Then((values) =>
768
+ ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)),
769
+ );
770
+ }
771
+ if (type.kind == "application" && type.value == "Sum") {
772
+ return PredicateValue.Operations.parse(
773
+ json.left,
774
+ type === null || type === void 0 ? void 0 : type.args[0],
775
+ types,
776
+ ).Then((left) =>
777
+ PredicateValue.Operations.parse(
778
+ json.right,
779
+ type === null || type === void 0 ? void 0 : type.args[1],
780
+ types,
781
+ ).Then((right) =>
782
+ ValueOrErrors.Default.return(
783
+ PredicateValue.Default.tuple(List([left, right])),
784
+ ),
785
+ ),
786
+ );
787
+ }
788
+ if (type.kind == "application" && type.value == "SingleSelection") {
789
+ ValueOrErrors.Default.return(
790
+ PredicateValue.Default.option(json["IsSome"], json["Value"]),
791
+ );
792
+ }
793
+ if (type.kind == "application" && type.value == "MultiSelection") {
794
+ return ValueOrErrors.Operations.All(
795
+ List(
796
+ json.map((elementValue) =>
797
+ PredicateValue.Operations.parse(
798
+ elementValue,
799
+ type.args[0],
800
+ types,
801
+ ),
802
+ ),
803
+ ),
804
+ ).Then((values) =>
805
+ ValueOrErrors.Default.return(PredicateValue.Default.tuple(values)),
806
+ );
807
+ }
808
+ if (type.kind == "record") {
809
+ return ValueOrErrors.Operations.All(
810
+ List(
811
+ Object.entries(json).map(([fieldName, fieldValue]) => {
812
+ const subType = type.fields.get(fieldName);
813
+ if (subType == undefined) {
814
+ return ValueOrErrors.Default.throwOne(
815
+ `cannot find field ${fieldName} in type ${JSON.stringify(type)}`,
816
+ );
617
817
  }
618
- return ValueOrErrors.Default.throwOne(`unsupported type ${JSON.stringify(type)}`);
619
- })();
620
- return result.MapErrors((errors) => errors.map((error) => `${error}\n...When parsing expression ${JSON.stringify(json, null, 2)}`));
621
- },
622
- recordToTuple: (r) => {
623
- const valuesSortedByName = r.fields
624
- .toSeq()
625
- .map((v, k) => [k, v])
626
- .sortBy(([k, v]) => k)
627
- .map(([k, v]) => v)
628
- .valueSeq()
629
- .toArray();
630
- return PredicateValue.Default.tuple(List(valuesSortedByName));
631
- },
632
- Equals: (vars) => (v1, v2) => typeof v1 == "boolean" ||
633
- typeof v1 == "number" ||
634
- typeof v1 == "string" ||
635
- typeof v2 == "boolean" ||
636
- typeof v2 == "number" ||
637
- typeof v2 == "string"
638
- ? typeof v1 == typeof v2
639
- ? ValueOrErrors.Default.return(v1 == v2)
640
- : ValueOrErrors.Default.throwOne(`cannot compare expressions of different types ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`)
641
- : PredicateValue.Operations.IsDate(v1) &&
642
- PredicateValue.Operations.IsDate(v2)
643
- ? v1.getTime() == v2.getTime()
644
- ? ValueOrErrors.Default.return(true)
645
- : ValueOrErrors.Default.return(false)
646
- : PredicateValue.Operations.IsUnionCase(v1) &&
647
- PredicateValue.Operations.IsUnionCase(v2)
648
- ? v1.caseName == v2.caseName
649
- ? PredicateValue.Operations.Equals(vars)(v1.fields, v2.fields)
650
- : ValueOrErrors.Default.return(false)
651
- : PredicateValue.Operations.IsTuple(v1) &&
652
- PredicateValue.Operations.IsTuple(v2)
653
- ? v1.values.size != v2.values.size
654
- ? ValueOrErrors.Default.return(false)
655
- : v1.values.size == 0
656
- ? ValueOrErrors.Default.return(true)
657
- : PredicateValue.Operations.Equals(vars)(v1.values.get(0), v2.values.get(0)).Then((firstEqual) => firstEqual
658
- ? PredicateValue.Operations.Equals(vars)(PredicateValue.Default.tuple(v1.values.slice(1)), PredicateValue.Default.tuple(v2.values.slice(1)))
659
- : ValueOrErrors.Default.return(false))
660
- : PredicateValue.Operations.IsRecord(v1) &&
661
- PredicateValue.Operations.IsRecord(v2)
662
- ? PredicateValue.Operations.Equals(vars)(PredicateValue.Operations.recordToTuple(v1), PredicateValue.Operations.recordToTuple(v2))
663
- : PredicateValue.Operations.IsTable(v1) &&
664
- PredicateValue.Operations.IsTable(v2)
665
- ? v1.data.size == v2.data.size
666
- ? ValueOrErrors.Default.return(v1.data.keySeq().equals(v2.data.keySeq()))
667
- : ValueOrErrors.Default.return(false)
668
- : PredicateValue.Operations.IsUnit(v1) &&
669
- PredicateValue.Operations.IsUnit(v2)
670
- ? ValueOrErrors.Default.return(true)
671
- : PredicateValue.Operations.IsUnit(v1) !=
672
- PredicateValue.Operations.IsUnit(v2)
673
- ? ValueOrErrors.Default.throwOne(`cannot compare expressions of different types ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`)
674
- : ValueOrErrors.Default.throwOne(`structural equality is not implemented yet between ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`),
818
+ return PredicateValue.Operations.parse(
819
+ fieldValue,
820
+ subType,
821
+ types,
822
+ ).Then((value) =>
823
+ ValueOrErrors.Default.return([fieldName, value]),
824
+ );
825
+ }),
826
+ ),
827
+ ).Then((entries) =>
828
+ ValueOrErrors.Default.return(
829
+ PredicateValue.Default.record(
830
+ OrderedMap(entries.map((_) => [_[0], _[1]])),
831
+ ),
832
+ ),
833
+ );
834
+ }
835
+ return ValueOrErrors.Default.throwOne(
836
+ `unsupported type ${JSON.stringify(type)}`,
837
+ );
838
+ })();
839
+ return result.MapErrors((errors) =>
840
+ errors.map(
841
+ (error) =>
842
+ `${error}\n...When parsing expression ${JSON.stringify(json, null, 2)}`,
843
+ ),
844
+ );
675
845
  },
846
+ recordToTuple: (r) => {
847
+ const valuesSortedByName = r.fields
848
+ .toSeq()
849
+ .map((v, k) => [k, v])
850
+ .sortBy(([k, v]) => k)
851
+ .map(([k, v]) => v)
852
+ .valueSeq()
853
+ .toArray();
854
+ return PredicateValue.Default.tuple(List(valuesSortedByName));
855
+ },
856
+ Equals: (vars) => (v1, v2) =>
857
+ typeof v1 == "boolean" ||
858
+ typeof v1 == "number" ||
859
+ typeof v1 == "string" ||
860
+ typeof v2 == "boolean" ||
861
+ typeof v2 == "number" ||
862
+ typeof v2 == "string"
863
+ ? typeof v1 == typeof v2
864
+ ? ValueOrErrors.Default.return(v1 == v2)
865
+ : ValueOrErrors.Default.throwOne(
866
+ `cannot compare expressions of different types ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`,
867
+ )
868
+ : PredicateValue.Operations.IsDate(v1) &&
869
+ PredicateValue.Operations.IsDate(v2)
870
+ ? v1.getTime() == v2.getTime()
871
+ ? ValueOrErrors.Default.return(true)
872
+ : ValueOrErrors.Default.return(false)
873
+ : PredicateValue.Operations.IsUnionCase(v1) &&
874
+ PredicateValue.Operations.IsUnionCase(v2)
875
+ ? v1.caseName == v2.caseName
876
+ ? PredicateValue.Operations.Equals(vars)(v1.fields, v2.fields)
877
+ : ValueOrErrors.Default.return(false)
878
+ : PredicateValue.Operations.IsTuple(v1) &&
879
+ PredicateValue.Operations.IsTuple(v2)
880
+ ? v1.values.size != v2.values.size
881
+ ? ValueOrErrors.Default.return(false)
882
+ : v1.values.size == 0
883
+ ? ValueOrErrors.Default.return(true)
884
+ : PredicateValue.Operations.Equals(vars)(
885
+ v1.values.get(0),
886
+ v2.values.get(0),
887
+ ).Then((firstEqual) =>
888
+ firstEqual
889
+ ? PredicateValue.Operations.Equals(vars)(
890
+ PredicateValue.Default.tuple(v1.values.slice(1)),
891
+ PredicateValue.Default.tuple(v2.values.slice(1)),
892
+ )
893
+ : ValueOrErrors.Default.return(false),
894
+ )
895
+ : PredicateValue.Operations.IsRecord(v1) &&
896
+ PredicateValue.Operations.IsRecord(v2)
897
+ ? PredicateValue.Operations.Equals(vars)(
898
+ PredicateValue.Operations.recordToTuple(v1),
899
+ PredicateValue.Operations.recordToTuple(v2),
900
+ )
901
+ : PredicateValue.Operations.IsTable(v1) &&
902
+ PredicateValue.Operations.IsTable(v2)
903
+ ? v1.data.size == v2.data.size
904
+ ? ValueOrErrors.Default.return(
905
+ v1.data.keySeq().equals(v2.data.keySeq()),
906
+ )
907
+ : ValueOrErrors.Default.return(false)
908
+ : PredicateValue.Operations.IsUnit(v1) &&
909
+ PredicateValue.Operations.IsUnit(v2)
910
+ ? ValueOrErrors.Default.return(true)
911
+ : PredicateValue.Operations.IsUnit(v1) !=
912
+ PredicateValue.Operations.IsUnit(v2)
913
+ ? ValueOrErrors.Default.throwOne(
914
+ `cannot compare expressions of different types ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`,
915
+ )
916
+ : ValueOrErrors.Default.throwOne(
917
+ `structural equality is not implemented yet between ${JSON.stringify(v1)} and ${JSON.stringify(v2)}.`,
918
+ ),
919
+ },
676
920
  };
677
921
  export const Expr = {
678
- Default: {
679
- prepend: (prependCases, e) => ({
680
- kind: "prepend",
681
- operands: [prependCases, e],
682
- }),
683
- itemLookup: (e, i) => ({
684
- kind: "itemLookup",
685
- operands: [e, i],
686
- }),
687
- fieldLookup: (e, f) => ({
688
- kind: "fieldLookup",
689
- operands: [e, f],
690
- }),
691
- isCase: (e, c) => ({
692
- kind: "isCase",
693
- operands: [e, c],
694
- }),
695
- binaryOperator: (op, e1, e2) => ({
696
- kind: op,
697
- operands: [e1, e2],
698
- }),
699
- matchCase: (operands) => ({
700
- kind: "matchCase",
701
- operands,
702
- }),
703
- lambda: (parameter, body) => ({
704
- kind: "lambda",
705
- parameter,
706
- body,
707
- }),
708
- case: (caseName, handler) => ({
709
- kind: "caseName",
710
- caseName,
711
- handler,
712
- }),
922
+ Default: {
923
+ itemLookup: (e, i) => ({
924
+ kind: "itemLookup",
925
+ operands: [e, i],
926
+ }),
927
+ fieldLookup: (e, f) => ({
928
+ kind: "fieldLookup",
929
+ operands: [e, f],
930
+ }),
931
+ isCase: (e, c) => ({
932
+ kind: "isCase",
933
+ operands: [e, c],
934
+ }),
935
+ binaryOperator: (op, e1, e2) => ({
936
+ kind: op,
937
+ operands: [e1, e2],
938
+ }),
939
+ matchCase: (operands) => ({
940
+ kind: "matchCase",
941
+ operands,
942
+ }),
943
+ lambda: (parameter, body) => ({
944
+ kind: "lambda",
945
+ parameter,
946
+ body,
947
+ }),
948
+ case: (caseName, handler) => ({
949
+ kind: "caseName",
950
+ caseName,
951
+ handler,
952
+ }),
953
+ },
954
+ Operations: {
955
+ IsItemLookup: (e) => {
956
+ return (
957
+ typeof e == "object" &&
958
+ !PredicateValue.Operations.IsDate(e) &&
959
+ e.kind == "itemLookup"
960
+ );
713
961
  },
714
- Operations: {
715
- IsPrepend: (e) => {
716
- return (typeof e == "object" &&
717
- !PredicateValue.Operations.IsDate(e) &&
718
- e.kind == "prepend");
719
- },
720
- IsItemLookup: (e) => {
721
- return (typeof e == "object" &&
722
- !PredicateValue.Operations.IsDate(e) &&
723
- e.kind == "itemLookup");
724
- },
725
- IsFieldLookup: (e) => {
726
- return (typeof e == "object" &&
727
- !PredicateValue.Operations.IsDate(e) &&
728
- e.kind == "fieldLookup");
729
- },
730
- IsIsCase: (e) => {
731
- return (typeof e == "object" &&
732
- !PredicateValue.Operations.IsDate(e) &&
733
- e.kind == "isCase");
734
- },
735
- IsBinaryOperator: (e) => {
736
- return (typeof e == "object" &&
737
- !PredicateValue.Operations.IsDate(e) &&
738
- BinaryOperatorsSet.has(e.kind));
739
- },
740
- IsCase: (e) => {
741
- return (typeof e == "object" &&
742
- !PredicateValue.Operations.IsDate(e) &&
743
- e.kind == "caseName");
744
- },
745
- IsCaseArray: (e) => {
746
- return e.every((e) => Expr.Operations.IsCase(e));
747
- },
748
- AsCaseArray: (e) => {
749
- return e.every((e) => Expr.Operations.IsCase(e))
750
- ? ValueOrErrors.Default.return(e)
751
- : ValueOrErrors.Default.throwOne(`Error: expected cases, got ${JSON.stringify(e)}`);
752
- },
753
- IsMatchCase: (e) => {
754
- return (typeof e == "object" &&
755
- !PredicateValue.Operations.IsDate(e) &&
756
- e.kind == "matchCase");
757
- },
758
- IsLambda: (e) => {
759
- return (typeof e == "object" &&
760
- !PredicateValue.Operations.IsDate(e) &&
761
- e.kind == "lambda");
762
- },
763
- parseAsVisibilityExpression: (json) => Expr.Operations.parse(json).MapErrors((errors) => errors.map((error) => `${error}\n...When parsing visibility expression`)),
764
- parseAsDisabledExpression: (json) => Expr.Operations.parse(json).MapErrors((errors) => errors.map((error) => `${error}\n...When parsing disabled expression`)),
765
- parse: (json) => {
766
- const asValue = PredicateValue.Operations.parse(json, { kind: "expression" }, Map());
767
- if (asValue.kind == "value")
768
- return asValue;
769
- if (Expr.Operations.IsItemLookup(json)) {
770
- const [first, second] = json["operands"];
771
- return Expr.Operations.parse(first).Then((first) => ValueOrErrors.Default.return(
772
- // Tuples are 1-indexed
773
- Expr.Default.itemLookup(first, second - 1)));
774
- }
775
- if (Expr.Operations.IsFieldLookup(json)) {
776
- const [first, second] = json["operands"];
777
- return Expr.Operations.parse(first).Then((first) => ValueOrErrors.Default.return(Expr.Default.fieldLookup(first, second)));
778
- }
779
- if (Expr.Operations.IsIsCase(json)) {
780
- const [first, second] = json["operands"];
781
- return Expr.Operations.parse(first).Then((first) => ValueOrErrors.Default.return(Expr.Default.isCase(first, second)));
782
- }
783
- if (Expr.Operations.IsBinaryOperator(json)) {
784
- const [first, second] = json["operands"];
785
- if (BinaryOperatorsSet.contains(json["kind"])) {
786
- return Expr.Operations.parse(first).Then((first) => Expr.Operations.parse(second).Then((second) => ValueOrErrors.Default.return(Expr.Default.binaryOperator(json["kind"], first, second))));
787
- }
788
- }
789
- if (Expr.Operations.IsMatchCase(json)) {
790
- return ValueOrErrors.Operations.All(List(json["operands"].map((operand) => Expr.Operations.parse(operand)))).Then((operands) => ValueOrErrors.Default.return(Expr.Default.matchCase(operands.toArray())));
791
- }
792
- if (Expr.Operations.IsLambda(json)) {
793
- return Expr.Operations.parse(json["body"]).Then((body) => ValueOrErrors.Default.return(Expr.Default.lambda(json["parameter"], body)));
794
- }
795
- if (Expr.Operations.IsCase(json)) {
796
- return Expr.Operations.parse(json["handler"]).Then((handler) => Expr.Operations.IsLambda(handler)
797
- ? ValueOrErrors.Default.return(Expr.Default.case(json["caseName"], handler))
798
- : ValueOrErrors.Default.throwOne(`expected lambda expression, got ${JSON.stringify(handler)}`));
799
- }
800
- if (Expr.Operations.IsPrepend(json)) {
801
- const [casesToPrepend, expr] = json["operands"];
802
- return Expr.Operations.parse(expr).Then((expr) => ValueOrErrors.Default.return(Expr.Default.prepend(casesToPrepend, expr)));
803
- }
804
- return ValueOrErrors.Default.throwOne(`cannot parse ${JSON.stringify(json)} to Expr.`);
805
- },
806
- EvaluateAsTuple: (vars) => (e) => !PredicateValue.Operations.IsTuple(e)
807
- ? ValueOrErrors.Default.throwOne(`expected tuple expression, got ${JSON.stringify(e)}`)
808
- : ValueOrErrors.Default.return(e),
809
- EvaluateAsRecord: (vars) => (e) => !PredicateValue.Operations.IsRecord(e)
810
- ? ValueOrErrors.Default.throwOne(`expected record expression, got ${JSON.stringify(e)}`)
811
- : ValueOrErrors.Default.return(e),
812
- EvaluateAsUnionCase: (vars) => (e) => !PredicateValue.Operations.IsUnionCase(e)
813
- ? ValueOrErrors.Default.throwOne(`expected union case expression, got ${JSON.stringify(e)}`)
814
- : ValueOrErrors.Default.return(e),
815
- EvaluateAsBoolean: (vars) => (e) => !PredicateValue.Operations.IsBoolean(e)
816
- ? ValueOrErrors.Default.throwOne(`expected boolean expression, got ${JSON.stringify(e)}`)
817
- : ValueOrErrors.Default.return(e),
818
- MatchCase: (vars) => (e, cases) => Expr.Operations.Evaluate(vars)(e).Then((matchable) => PredicateValue.Operations.IsSum(matchable)
819
- ? matchable.value.kind == "l"
820
- ? MapRepo.Operations.tryFindWithError("Sum.Left", cases, () => `cannot find match case Sum.Left`).Then((leftCaseHandler) => Expr.Operations.Evaluate(vars.set(leftCaseHandler.parameter, matchable.value.value))(leftCaseHandler))
821
- : MapRepo.Operations.tryFindWithError("Sum.Right", cases, () => `cannot find match case Sum.Right`).Then((rightCaseHandler) => Expr.Operations.Evaluate(vars.set(rightCaseHandler.parameter, matchable.value.value))(rightCaseHandler))
822
- : PredicateValue.Operations.IsUnionCase(matchable)
823
- ? MapRepo.Operations.tryFindWithError(matchable.caseName, cases, () => `cannot find match case ${matchable.caseName}`).Then((matchedCaseHandler) => Expr.Operations.Evaluate(vars.set(matchedCaseHandler.parameter, matchable.fields))(matchedCaseHandler))
824
- : ValueOrErrors.Default.throwOne(`unsupported matchable type in MatchCase: ${JSON.stringify(matchable)}`)),
825
- ComputePredicateEvaluation: (vars) => (expr) => {
826
- if (typeof expr == "boolean") {
827
- return ValueOrErrors.Default.return(expr);
828
- }
829
- return Expr.Operations.Evaluate(vars)(expr).Then((result) => {
830
- if (typeof result == "boolean") {
831
- return ValueOrErrors.Default.return(result);
832
- }
833
- return ValueOrErrors.Default.throwOne(`Error: cannot evaluate expression ${JSON.stringify(expr)} to a boolean`);
834
- });
835
- },
836
- EvaluateAs: (as) => (vars) => (e) => {
837
- return Expr.Operations.Evaluate(vars)(e).MapErrors((errors) => errors.map((error) => `${error}\n...When evaluating expression ${JSON.stringify(e)} as ${as}`));
838
- },
839
- Evaluate: (vars) => (e) => {
840
- const result = (() => {
841
- return PredicateValue.Operations.IsBoolean(e) ||
842
- PredicateValue.Operations.IsNumber(e) ||
843
- PredicateValue.Operations.IsString(e) ||
844
- PredicateValue.Operations.IsUnit(e) ||
845
- PredicateValue.Operations.IsRecord(e) ||
846
- PredicateValue.Operations.IsTuple(e) ||
847
- PredicateValue.Operations.IsUnionCase(e) ||
848
- PredicateValue.Operations.IsSum(e)
849
- ? ValueOrErrors.Default.return(e)
850
- : PredicateValue.Operations.IsVarLookup(e)
851
- ? MapRepo.Operations.tryFindWithError(e.varName, vars, () => `Error: cannot find variable ${JSON.stringify(e.varName)}`)
852
- : Expr.Operations.IsItemLookup(e)
853
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((maybeTuple) => Expr.Operations.EvaluateAsTuple(vars)(maybeTuple).Then((tuple) => ListRepo.Operations.tryFindWithError(e.operands[1], tuple.values, () => `Error: cannot find element of index ${e.operands[1]} in tuple ${JSON.stringify(tuple)}`)))
854
- : Expr.Operations.IsFieldLookup(e)
855
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((maybeRecord) => Expr.Operations.EvaluateAsRecord(vars)(maybeRecord).Then((record) => MapRepo.Operations.tryFindWithError(e.operands[1], record.fields, () => `Error: cannot find field ${e.operands[1]}`)))
856
- : Expr.Operations.IsIsCase(e)
857
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((maybeUnionCase) => Expr.Operations.EvaluateAsUnionCase(vars)(maybeUnionCase).Then((unionCase) => ValueOrErrors.Default.return(unionCase.caseName == e.operands[1])))
858
- : Expr.Operations.IsMatchCase(e)
859
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((matchable) => Expr.Operations.AsCaseArray(e.operands.slice(1)).Then((cases) => Expr.Operations.MatchCase(vars)(matchable, Map(cases.map((c) => [c.caseName, c.handler])))))
860
- : Expr.Operations.IsLambda(e)
861
- ? Expr.Operations.Evaluate(vars)(e.body)
862
- : Expr.Operations.IsBinaryOperator(e) &&
863
- e.kind == "equals"
864
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((v1) => Expr.Operations.Evaluate(vars)(e.operands[1]).Then((v2) => PredicateValue.Operations.Equals(vars)(v1, v2).Then((eq) => ValueOrErrors.Default.return(eq))))
865
- : Expr.Operations.IsBinaryOperator(e) &&
866
- e.kind == "or"
867
- ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then((v1) => Expr.Operations.Evaluate(vars)(e.operands[1]).Then((v2) => Expr.Operations.EvaluateAsBoolean(vars)(v1).Then((v1) => Expr.Operations.EvaluateAsBoolean(vars)(v2).Then((v2) => ValueOrErrors.Default.return(v1 || v2)))))
868
- : Expr.Operations.IsPrepend(e)
869
- ? Expr.Operations.Evaluate(vars)(e.operands[1]).Then((v) => Expr.Operations.EvaluateAsRecord(vars)(v).Then((v) => {
870
- const prependEntries = e.operands[0].map((c) => [
871
- c,
872
- PredicateValue.Default.record(OrderedMap([["Value", c]])),
873
- ]);
874
- const existingEntries = Array.from(v.fields.entries());
875
- let returnValue = PredicateValue.Default.record(OrderedMap(prependEntries.concat(existingEntries)));
876
- return ValueOrErrors.Default.return(returnValue);
877
- }))
878
- : ValueOrErrors.Default.throwOne(`Error: unsupported expression ${JSON.stringify(e)}`);
879
- })();
880
- return result.MapErrors((errors) => errors.map((error) => `${error}\n...When evaluating expression ${JSON.stringify(e, null, 2)}`));
881
- },
962
+ IsFieldLookup: (e) => {
963
+ return (
964
+ typeof e == "object" &&
965
+ !PredicateValue.Operations.IsDate(e) &&
966
+ e.kind == "fieldLookup"
967
+ );
882
968
  },
883
- };
884
- export const evaluatePredicates = (context, root) => {
885
- const bindings = Map()
886
- .set("global", context.global)
887
- .set("root", root)
888
- .set("local", root);
889
- const traverse = (bindings, predicate, raw) => {
890
- if (predicate.kind == "primitive") {
891
- return calculateVisibility(predicate.value, bindings).Then((result) => {
892
- return ValueOrErrors.Default.return({
893
- kind: "primitive",
894
- value: result,
895
- });
896
- });
969
+ IsIsCase: (e) => {
970
+ return (
971
+ typeof e == "object" &&
972
+ !PredicateValue.Operations.IsDate(e) &&
973
+ e.kind == "isCase"
974
+ );
975
+ },
976
+ IsBinaryOperator: (e) => {
977
+ return (
978
+ typeof e == "object" &&
979
+ !PredicateValue.Operations.IsDate(e) &&
980
+ BinaryOperatorsSet.has(e.kind)
981
+ );
982
+ },
983
+ IsCase: (e) => {
984
+ return (
985
+ typeof e == "object" &&
986
+ !PredicateValue.Operations.IsDate(e) &&
987
+ e.kind == "caseName"
988
+ );
989
+ },
990
+ IsCaseArray: (e) => {
991
+ return e.every((e) => Expr.Operations.IsCase(e));
992
+ },
993
+ AsCaseArray: (e) => {
994
+ return e.every((e) => Expr.Operations.IsCase(e))
995
+ ? ValueOrErrors.Default.return(e)
996
+ : ValueOrErrors.Default.throwOne(
997
+ `Error: expected cases, got ${JSON.stringify(e)}`,
998
+ );
999
+ },
1000
+ IsMatchCase: (e) => {
1001
+ return (
1002
+ typeof e == "object" &&
1003
+ !PredicateValue.Operations.IsDate(e) &&
1004
+ e.kind == "matchCase"
1005
+ );
1006
+ },
1007
+ IsLambda: (e) => {
1008
+ return (
1009
+ typeof e == "object" &&
1010
+ !PredicateValue.Operations.IsDate(e) &&
1011
+ e.kind == "lambda"
1012
+ );
1013
+ },
1014
+ parseAsVisibilityExpression: (json) =>
1015
+ Expr.Operations.parse(json).MapErrors((errors) =>
1016
+ errors.map(
1017
+ (error) => `${error}\n...When parsing visibility expression`,
1018
+ ),
1019
+ ),
1020
+ parseAsDisabledExpression: (json) =>
1021
+ Expr.Operations.parse(json).MapErrors((errors) =>
1022
+ errors.map((error) => `${error}\n...When parsing disabled expression`),
1023
+ ),
1024
+ parse: (json) => {
1025
+ const asValue = PredicateValue.Operations.parse(
1026
+ json,
1027
+ { kind: "expression" },
1028
+ Map(),
1029
+ );
1030
+ if (asValue.kind == "value") return asValue;
1031
+ if (Expr.Operations.IsItemLookup(json)) {
1032
+ const [first, second] = json["operands"];
1033
+ return Expr.Operations.parse(first).Then((first) =>
1034
+ ValueOrErrors.Default.return(
1035
+ // Tuples are 1-indexed
1036
+ Expr.Default.itemLookup(first, second - 1),
1037
+ ),
1038
+ );
1039
+ }
1040
+ if (Expr.Operations.IsFieldLookup(json)) {
1041
+ const [first, second] = json["operands"];
1042
+ return Expr.Operations.parse(first).Then((first) =>
1043
+ ValueOrErrors.Default.return(Expr.Default.fieldLookup(first, second)),
1044
+ );
1045
+ }
1046
+ if (Expr.Operations.IsIsCase(json)) {
1047
+ const [first, second] = json["operands"];
1048
+ return Expr.Operations.parse(first).Then((first) =>
1049
+ ValueOrErrors.Default.return(Expr.Default.isCase(first, second)),
1050
+ );
1051
+ }
1052
+ if (Expr.Operations.IsBinaryOperator(json)) {
1053
+ const [first, second] = json["operands"];
1054
+ if (BinaryOperatorsSet.contains(json["kind"])) {
1055
+ return Expr.Operations.parse(first).Then((first) =>
1056
+ Expr.Operations.parse(second).Then((second) =>
1057
+ ValueOrErrors.Default.return(
1058
+ Expr.Default.binaryOperator(json["kind"], first, second),
1059
+ ),
1060
+ ),
1061
+ );
897
1062
  }
898
- if (predicate.kind == "record") {
899
- if (typeof raw != "object" || !("kind" in raw) || raw.kind != "record") {
900
- return ValueOrErrors.Default.throwOne(`parsing expected record in raw, got ${JSON.stringify(raw)}`);
901
- }
902
- return calculateVisibility(predicate.value, bindings).Then((result) => ValueOrErrors.Operations.All(List(predicate.fields
903
- .entrySeq()
904
- .map(([fieldName, fieldPredicate]) => {
905
- const fieldRaw = raw.fields.get(fieldName);
906
- if (fieldRaw == undefined) {
907
- return ValueOrErrors.Default.return([
908
- fieldName,
909
- { kind: "primitive", value: false },
910
- ]);
911
- }
912
- if (fieldPredicate.kind == "record") {
913
- const localBindings = bindings.get("local");
914
- const fieldLocal = localBindings.fields.get(fieldName);
915
- if (fieldLocal == undefined) {
916
- return ValueOrErrors.Default.throwOne(`Error: parsing cannot find field ${fieldName} in local ${JSON.stringify(localBindings)}`);
917
- }
918
- const fieldBindings = bindings.set("local", fieldLocal);
919
- return traverse(fieldBindings, fieldPredicate, fieldRaw).Then((evaluation) => ValueOrErrors.Default.return([fieldName, evaluation]));
920
- }
921
- return traverse(bindings, fieldPredicate, fieldRaw).Then((evaluation) => ValueOrErrors.Default.return([fieldName, evaluation]));
922
- }))).Then((evaluations) => {
923
- return ValueOrErrors.Default.return({
924
- kind: "form",
925
- value: result,
926
- fields: Map(evaluations.map((_) => [_[0], _[1]])),
927
- });
928
- }));
1063
+ }
1064
+ if (Expr.Operations.IsMatchCase(json)) {
1065
+ return ValueOrErrors.Operations.All(
1066
+ List(
1067
+ json["operands"].map((operand) => Expr.Operations.parse(operand)),
1068
+ ),
1069
+ ).Then((operands) =>
1070
+ ValueOrErrors.Default.return(
1071
+ Expr.Default.matchCase(operands.toArray()),
1072
+ ),
1073
+ );
1074
+ }
1075
+ if (Expr.Operations.IsLambda(json)) {
1076
+ return Expr.Operations.parse(json["body"]).Then((body) =>
1077
+ ValueOrErrors.Default.return(
1078
+ Expr.Default.lambda(json["parameter"], body),
1079
+ ),
1080
+ );
1081
+ }
1082
+ if (Expr.Operations.IsCase(json)) {
1083
+ return Expr.Operations.parse(json["handler"]).Then((handler) =>
1084
+ Expr.Operations.IsLambda(handler)
1085
+ ? ValueOrErrors.Default.return(
1086
+ Expr.Default.case(json["caseName"], handler),
1087
+ )
1088
+ : ValueOrErrors.Default.throwOne(
1089
+ `expected lambda expression, got ${JSON.stringify(handler)}`,
1090
+ ),
1091
+ );
1092
+ }
1093
+ return ValueOrErrors.Default.throwOne(
1094
+ `cannot parse ${JSON.stringify(json)} to Expr.`,
1095
+ );
1096
+ },
1097
+ EvaluateAsTuple: (vars) => (e) =>
1098
+ !PredicateValue.Operations.IsTuple(e)
1099
+ ? ValueOrErrors.Default.throwOne(
1100
+ `expected tuple expression, got ${JSON.stringify(e)}`,
1101
+ )
1102
+ : ValueOrErrors.Default.return(e),
1103
+ EvaluateAsRecord: (vars) => (e) =>
1104
+ !PredicateValue.Operations.IsRecord(e)
1105
+ ? ValueOrErrors.Default.throwOne(
1106
+ `expected record expression, got ${JSON.stringify(e)}`,
1107
+ )
1108
+ : ValueOrErrors.Default.return(e),
1109
+ EvaluateAsUnionCase: (vars) => (e) =>
1110
+ !PredicateValue.Operations.IsUnionCase(e)
1111
+ ? ValueOrErrors.Default.throwOne(
1112
+ `expected union case expression, got ${JSON.stringify(e)}`,
1113
+ )
1114
+ : ValueOrErrors.Default.return(e),
1115
+ EvaluateAsBoolean: (vars) => (e) =>
1116
+ !PredicateValue.Operations.IsBoolean(e)
1117
+ ? ValueOrErrors.Default.throwOne(
1118
+ `expected boolean expression, got ${JSON.stringify(e)}`,
1119
+ )
1120
+ : ValueOrErrors.Default.return(e),
1121
+ MatchCase: (vars) => (e, cases) =>
1122
+ Expr.Operations.Evaluate(vars)(e).Then((matchable) =>
1123
+ PredicateValue.Operations.IsSum(matchable)
1124
+ ? matchable.value.kind == "l"
1125
+ ? MapRepo.Operations.tryFindWithError(
1126
+ "Sum.Left",
1127
+ cases,
1128
+ () => `cannot find match case Sum.Left`,
1129
+ ).Then((leftCaseHandler) =>
1130
+ Expr.Operations.Evaluate(
1131
+ vars.set(leftCaseHandler.parameter, matchable.value.value),
1132
+ )(leftCaseHandler),
1133
+ )
1134
+ : MapRepo.Operations.tryFindWithError(
1135
+ "Sum.Right",
1136
+ cases,
1137
+ () => `cannot find match case Sum.Right`,
1138
+ ).Then((rightCaseHandler) =>
1139
+ Expr.Operations.Evaluate(
1140
+ vars.set(rightCaseHandler.parameter, matchable.value.value),
1141
+ )(rightCaseHandler),
1142
+ )
1143
+ : PredicateValue.Operations.IsUnionCase(matchable)
1144
+ ? MapRepo.Operations.tryFindWithError(
1145
+ matchable.caseName,
1146
+ cases,
1147
+ () => `cannot find match case ${matchable.caseName}`,
1148
+ ).Then((matchedCaseHandler) =>
1149
+ Expr.Operations.Evaluate(
1150
+ vars.set(matchedCaseHandler.parameter, matchable.fields),
1151
+ )(matchedCaseHandler),
1152
+ )
1153
+ : ValueOrErrors.Default.throwOne(
1154
+ `unsupported matchable type in MatchCase: ${JSON.stringify(matchable)}`,
1155
+ ),
1156
+ ),
1157
+ ComputePredicateEvaluation: (vars) => (expr) => {
1158
+ if (typeof expr == "boolean") {
1159
+ return ValueOrErrors.Default.return(expr);
1160
+ }
1161
+ return Expr.Operations.Evaluate(vars)(expr).Then((result) => {
1162
+ if (typeof result == "boolean") {
1163
+ return ValueOrErrors.Default.return(result);
929
1164
  }
930
- if (predicate.kind == "list") {
931
- return calculateVisibility(predicate.value, bindings).Then((result) => {
932
- if (PredicateValue.Operations.IsTuple(raw)) {
933
- return ValueOrErrors.Operations.All(List(raw.values.map((value, index) => {
934
- const elementLocal = raw.values.get(index);
935
- if (elementLocal == undefined) {
936
- return ValueOrErrors.Default.throwOne(`Error: cannot find element of index ${index} in local ${JSON.stringify(raw)}`);
937
- }
938
- const elementBindings = bindings.set("local", elementLocal);
939
- return traverse(elementBindings, predicate.elementExpression, value);
940
- }))).Then((elementResults) => {
941
- return ValueOrErrors.Default.return({
942
- kind: "list",
943
- value: result,
944
- elementValues: elementResults.toArray(),
945
- });
946
- });
1165
+ return ValueOrErrors.Default.throwOne(
1166
+ `Error: cannot evaluate expression ${JSON.stringify(expr)} to a boolean`,
1167
+ );
1168
+ });
1169
+ },
1170
+ EvaluateAs: (as) => (vars) => (e) => {
1171
+ return Expr.Operations.Evaluate(vars)(e).MapErrors((errors) =>
1172
+ errors.map(
1173
+ (error) =>
1174
+ `${error}\n...When evaluating expression ${JSON.stringify(e)} as ${as}`,
1175
+ ),
1176
+ );
1177
+ },
1178
+ Evaluate: (vars) => (e) => {
1179
+ const result = (() => {
1180
+ return PredicateValue.Operations.IsBoolean(e) ||
1181
+ PredicateValue.Operations.IsNumber(e) ||
1182
+ PredicateValue.Operations.IsString(e) ||
1183
+ PredicateValue.Operations.IsUnit(e) ||
1184
+ PredicateValue.Operations.IsRecord(e) ||
1185
+ PredicateValue.Operations.IsTuple(e) ||
1186
+ PredicateValue.Operations.IsUnionCase(e) ||
1187
+ PredicateValue.Operations.IsUnit(e) ||
1188
+ PredicateValue.Operations.IsSum(e)
1189
+ ? ValueOrErrors.Default.return(e)
1190
+ : PredicateValue.Operations.IsVarLookup(e)
1191
+ ? MapRepo.Operations.tryFindWithError(
1192
+ e.varName,
1193
+ vars,
1194
+ () =>
1195
+ `Error: cannot find variable ${JSON.stringify(e.varName)}`,
1196
+ )
1197
+ : Expr.Operations.IsItemLookup(e)
1198
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1199
+ (maybeTuple) =>
1200
+ Expr.Operations.EvaluateAsTuple(vars)(maybeTuple).Then(
1201
+ (tuple) =>
1202
+ ListRepo.Operations.tryFindWithError(
1203
+ e.operands[1],
1204
+ tuple.values,
1205
+ () =>
1206
+ `Error: cannot find element of index ${e.operands[1]} in tuple ${JSON.stringify(tuple)}`,
1207
+ ),
1208
+ ),
1209
+ )
1210
+ : Expr.Operations.IsFieldLookup(e)
1211
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1212
+ (maybeRecord) =>
1213
+ Expr.Operations.EvaluateAsRecord(vars)(maybeRecord).Then(
1214
+ (record) =>
1215
+ MapRepo.Operations.tryFindWithError(
1216
+ e.operands[1],
1217
+ record.fields,
1218
+ () => `Error: cannot find field ${e.operands[1]}`,
1219
+ ),
1220
+ ),
1221
+ )
1222
+ : Expr.Operations.IsIsCase(e)
1223
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1224
+ (maybeUnionCase) =>
1225
+ Expr.Operations.EvaluateAsUnionCase(vars)(
1226
+ maybeUnionCase,
1227
+ ).Then((unionCase) =>
1228
+ ValueOrErrors.Default.return(
1229
+ unionCase.caseName == e.operands[1],
1230
+ ),
1231
+ ),
1232
+ )
1233
+ : Expr.Operations.IsMatchCase(e)
1234
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1235
+ (matchable) =>
1236
+ Expr.Operations.AsCaseArray(e.operands.slice(1)).Then(
1237
+ (cases) =>
1238
+ Expr.Operations.MatchCase(vars)(
1239
+ matchable,
1240
+ Map(cases.map((c) => [c.caseName, c.handler])),
1241
+ ),
1242
+ ),
1243
+ )
1244
+ : Expr.Operations.IsLambda(e)
1245
+ ? Expr.Operations.Evaluate(vars)(e.body)
1246
+ : Expr.Operations.IsBinaryOperator(e) &&
1247
+ e.kind == "equals"
1248
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1249
+ (v1) =>
1250
+ Expr.Operations.Evaluate(vars)(
1251
+ e.operands[1],
1252
+ ).Then((v2) =>
1253
+ PredicateValue.Operations.Equals(vars)(
1254
+ v1,
1255
+ v2,
1256
+ ).Then((eq) =>
1257
+ ValueOrErrors.Default.return(eq),
1258
+ ),
1259
+ ),
1260
+ )
1261
+ : Expr.Operations.IsBinaryOperator(e) && e.kind == "or"
1262
+ ? Expr.Operations.Evaluate(vars)(e.operands[0]).Then(
1263
+ (v1) =>
1264
+ Expr.Operations.Evaluate(vars)(
1265
+ e.operands[1],
1266
+ ).Then((v2) =>
1267
+ Expr.Operations.EvaluateAsBoolean(vars)(
1268
+ v1,
1269
+ ).Then((v1) =>
1270
+ Expr.Operations.EvaluateAsBoolean(vars)(
1271
+ v2,
1272
+ ).Then((v2) =>
1273
+ ValueOrErrors.Default.return(v1 || v2),
1274
+ ),
1275
+ ),
1276
+ ),
1277
+ )
1278
+ : ValueOrErrors.Default.throwOne(
1279
+ `Error: unsupported expression ${JSON.stringify(e)}`,
1280
+ );
1281
+ })();
1282
+ return result.MapErrors((errors) =>
1283
+ errors.map(
1284
+ (error) =>
1285
+ `${error}\n...When evaluating expression ${JSON.stringify(e, null, 2)}`,
1286
+ ),
1287
+ );
1288
+ },
1289
+ },
1290
+ };
1291
+ export const evaluatePredicates = (context, root) => {
1292
+ const bindings = Map()
1293
+ .set("global", context.global)
1294
+ .set("root", root)
1295
+ .set("local", root);
1296
+ const traverse = (bindings, predicate, raw) => {
1297
+ if (predicate.kind == "primitive") {
1298
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1299
+ return ValueOrErrors.Default.return({
1300
+ kind: "primitive",
1301
+ value: result,
1302
+ });
1303
+ });
1304
+ }
1305
+ if (predicate.kind == "record") {
1306
+ if (typeof raw != "object" || !("kind" in raw) || raw.kind != "record") {
1307
+ return ValueOrErrors.Default.throwOne(
1308
+ `parsing expected record in raw, got ${JSON.stringify(raw)}`,
1309
+ );
1310
+ }
1311
+ return calculateVisibility(predicate.value, bindings).Then((result) =>
1312
+ ValueOrErrors.Operations.All(
1313
+ List(
1314
+ predicate.fields.entrySeq().map(([fieldName, fieldPredicate]) => {
1315
+ const fieldRaw = raw.fields.get(fieldName);
1316
+ if (fieldRaw == undefined) {
1317
+ return ValueOrErrors.Default.return([
1318
+ fieldName,
1319
+ { kind: "primitive", value: false },
1320
+ ]);
1321
+ }
1322
+ if (fieldPredicate.kind == "record") {
1323
+ const localBindings = bindings.get("local");
1324
+ const fieldLocal = localBindings.fields.get(fieldName);
1325
+ if (fieldLocal == undefined) {
1326
+ return ValueOrErrors.Default.throwOne(
1327
+ `Error: parsing cannot find field ${fieldName} in local ${JSON.stringify(localBindings)}`,
1328
+ );
947
1329
  }
948
- return ValueOrErrors.Default.throwOne(`Error: parsing expected tuple, got ${JSON.stringify(raw)}`);
949
- });
950
- }
951
- if (predicate.kind == "map") {
952
- return calculateVisibility(predicate.value, bindings).Then((result) => {
953
- if (typeof raw == "object" && "kind" in raw && raw.kind == "tuple") {
954
- return ValueOrErrors.Operations.All(List(raw.values.map((kv) => {
955
- if (PredicateValue.Operations.IsTuple(kv)) {
956
- const keyLocal = kv.values.get(0);
957
- const valueLocal = kv.values.get(1);
958
- if (keyLocal == undefined || valueLocal == undefined) {
959
- return ValueOrErrors.Default.throwOne(`Error: cannot find key or value of ${JSON.stringify(kv)} in local ${JSON.stringify(raw)}`);
960
- }
961
- const keyBindings = bindings.set("local", keyLocal);
962
- const valueBindings = bindings.set("local", valueLocal);
963
- return traverse(keyBindings, predicate.keyExpression, keyLocal).Then((keyResult) => {
964
- return traverse(valueBindings, predicate.valueExpression, valueLocal).Then((valueResult) => {
965
- return ValueOrErrors.Default.return({
966
- key: keyResult,
967
- value: valueResult,
968
- });
969
- });
970
- });
971
- }
972
- return ValueOrErrors.Default.throwOne(`Error: parsing expected tuple of key and value, got ${JSON.stringify(kv)}`);
973
- }))).Then((keyValues) => {
974
- return ValueOrErrors.Default.return({
975
- kind: "map",
976
- value: result,
977
- elementValues: keyValues.toArray(),
978
- });
979
- });
1330
+ const fieldBindings = bindings.set("local", fieldLocal);
1331
+ return traverse(fieldBindings, fieldPredicate, fieldRaw).Then(
1332
+ (evaluation) =>
1333
+ ValueOrErrors.Default.return([fieldName, evaluation]),
1334
+ );
1335
+ }
1336
+ return traverse(bindings, fieldPredicate, fieldRaw).Then(
1337
+ (evaluation) =>
1338
+ ValueOrErrors.Default.return([fieldName, evaluation]),
1339
+ );
1340
+ }),
1341
+ ),
1342
+ ).Then((evaluations) => {
1343
+ return ValueOrErrors.Default.return({
1344
+ kind: "form",
1345
+ value: result,
1346
+ fields: Map(evaluations.map((_) => [_[0], _[1]])),
1347
+ });
1348
+ }),
1349
+ );
1350
+ }
1351
+ if (predicate.kind == "list") {
1352
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1353
+ if (PredicateValue.Operations.IsTuple(raw)) {
1354
+ return ValueOrErrors.Operations.All(
1355
+ List(
1356
+ raw.values.map((value, index) => {
1357
+ const elementLocal = raw.values.get(index);
1358
+ if (elementLocal == undefined) {
1359
+ return ValueOrErrors.Default.throwOne(
1360
+ `Error: cannot find element of index ${index} in local ${JSON.stringify(raw)}`,
1361
+ );
980
1362
  }
981
- return ValueOrErrors.Default.throwOne(`Error: parsing expected tuple of key value pairs, got ${JSON.stringify(raw)}`);
1363
+ const elementBindings = bindings.set("local", elementLocal);
1364
+ return traverse(
1365
+ elementBindings,
1366
+ predicate.elementExpression,
1367
+ value,
1368
+ );
1369
+ }),
1370
+ ),
1371
+ ).Then((elementResults) => {
1372
+ return ValueOrErrors.Default.return({
1373
+ kind: "list",
1374
+ value: result,
1375
+ elementValues: elementResults.toArray(),
982
1376
  });
1377
+ });
983
1378
  }
984
- if (predicate.kind == "tuple") {
985
- return calculateVisibility(predicate.value, bindings).Then((result) => {
986
- if (PredicateValue.Operations.IsTuple(raw)) {
987
- return ValueOrErrors.Operations.All(List(raw.values.map((value, index) => {
988
- const elementLocal = raw.values.get(index);
989
- if (elementLocal == undefined) {
990
- return ValueOrErrors.Default.throwOne(`Error: cannot find element of index ${index} in local ${JSON.stringify(raw)}`);
991
- }
992
- const elementBindings = bindings.set("local", elementLocal);
993
- return traverse(elementBindings, predicate.elementExpressions[index], value);
994
- }))).Then((elementResults) => {
995
- return ValueOrErrors.Default.return({
996
- kind: "tuple",
997
- value: result,
998
- elementValues: elementResults.toArray(),
999
- });
1379
+ return ValueOrErrors.Default.throwOne(
1380
+ `Error: parsing expected tuple, got ${JSON.stringify(raw)}`,
1381
+ );
1382
+ });
1383
+ }
1384
+ if (predicate.kind == "map") {
1385
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1386
+ if (typeof raw == "object" && "kind" in raw && raw.kind == "tuple") {
1387
+ return ValueOrErrors.Operations.All(
1388
+ List(
1389
+ raw.values.map((kv) => {
1390
+ if (PredicateValue.Operations.IsTuple(kv)) {
1391
+ const keyLocal = kv.values.get(0);
1392
+ const valueLocal = kv.values.get(1);
1393
+ if (keyLocal == undefined || valueLocal == undefined) {
1394
+ return ValueOrErrors.Default.throwOne(
1395
+ `Error: cannot find key or value of ${JSON.stringify(kv)} in local ${JSON.stringify(raw)}`,
1396
+ );
1397
+ }
1398
+ const keyBindings = bindings.set("local", keyLocal);
1399
+ const valueBindings = bindings.set("local", valueLocal);
1400
+ return traverse(
1401
+ keyBindings,
1402
+ predicate.keyExpression,
1403
+ keyLocal,
1404
+ ).Then((keyResult) => {
1405
+ return traverse(
1406
+ valueBindings,
1407
+ predicate.valueExpression,
1408
+ valueLocal,
1409
+ ).Then((valueResult) => {
1410
+ return ValueOrErrors.Default.return({
1411
+ key: keyResult,
1412
+ value: valueResult,
1413
+ });
1000
1414
  });
1415
+ });
1001
1416
  }
1002
- return ValueOrErrors.Default.throwOne(`Error: parsing expected tuple, got ${JSON.stringify(raw)}`);
1417
+ return ValueOrErrors.Default.throwOne(
1418
+ `Error: parsing expected tuple of key and value, got ${JSON.stringify(kv)}`,
1419
+ );
1420
+ }),
1421
+ ),
1422
+ ).Then((keyValues) => {
1423
+ return ValueOrErrors.Default.return({
1424
+ kind: "map",
1425
+ value: result,
1426
+ elementValues: keyValues.toArray(),
1003
1427
  });
1428
+ });
1004
1429
  }
1005
- if (predicate.kind == "sum") {
1006
- return calculateVisibility(predicate.value, bindings).Then((result) => {
1007
- if (PredicateValue.Operations.IsSum(raw)) {
1008
- const local = raw.value.value;
1009
- const innerBindings = bindings.set("local", local);
1010
- return traverse(innerBindings, raw.value.kind === "l"
1011
- ? predicate.leftExpression
1012
- : predicate.rightExpression, local).Then((innerRes) => {
1013
- return ValueOrErrors.Default.return(FormFieldPredicateEvaluation.Default.sum(result, innerRes));
1014
- });
1430
+ return ValueOrErrors.Default.throwOne(
1431
+ `Error: parsing expected tuple of key value pairs, got ${JSON.stringify(raw)}`,
1432
+ );
1433
+ });
1434
+ }
1435
+ if (predicate.kind == "tuple") {
1436
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1437
+ if (PredicateValue.Operations.IsTuple(raw)) {
1438
+ return ValueOrErrors.Operations.All(
1439
+ List(
1440
+ raw.values.map((value, index) => {
1441
+ const elementLocal = raw.values.get(index);
1442
+ if (elementLocal == undefined) {
1443
+ return ValueOrErrors.Default.throwOne(
1444
+ `Error: cannot find element of index ${index} in local ${JSON.stringify(raw)}`,
1445
+ );
1015
1446
  }
1016
- return ValueOrErrors.Default.throwOne(`Error: parsing expected sum, got ${JSON.stringify(raw)}`);
1447
+ const elementBindings = bindings.set("local", elementLocal);
1448
+ return traverse(
1449
+ elementBindings,
1450
+ predicate.elementExpressions[index],
1451
+ value,
1452
+ );
1453
+ }),
1454
+ ),
1455
+ ).Then((elementResults) => {
1456
+ return ValueOrErrors.Default.return({
1457
+ kind: "tuple",
1458
+ value: result,
1459
+ elementValues: elementResults.toArray(),
1017
1460
  });
1461
+ });
1018
1462
  }
1019
- if (predicate.kind == "unit") {
1020
- return calculateVisibility(predicate.value, bindings).Then((result) => {
1021
- return ValueOrErrors.Default.return({
1022
- kind: "unit",
1023
- value: result,
1024
- });
1025
- });
1463
+ return ValueOrErrors.Default.throwOne(
1464
+ `Error: parsing expected tuple, got ${JSON.stringify(raw)}`,
1465
+ );
1466
+ });
1467
+ }
1468
+ if (predicate.kind == "sum") {
1469
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1470
+ if (PredicateValue.Operations.IsSum(raw)) {
1471
+ const local = raw.value.value;
1472
+ const innerBindings = bindings.set("local", local);
1473
+ return traverse(
1474
+ innerBindings,
1475
+ raw.value.kind === "l"
1476
+ ? predicate.leftExpression
1477
+ : predicate.rightExpression,
1478
+ local,
1479
+ ).Then((innerRes) => {
1480
+ return ValueOrErrors.Default.return(
1481
+ FormFieldPredicateEvaluation.Default.sum(result, innerRes),
1482
+ );
1483
+ });
1026
1484
  }
1027
- return ValueOrErrors.Default.throwOne(`Error: parsing unsupported predicate kind ${JSON.stringify(raw)}`);
1028
- };
1029
- const res = traverse(bindings, {
1485
+ return ValueOrErrors.Default.throwOne(
1486
+ `Error: parsing expected sum, got ${JSON.stringify(raw)}`,
1487
+ );
1488
+ });
1489
+ }
1490
+ if (predicate.kind == "unit") {
1491
+ return calculateVisibility(predicate.value, bindings).Then((result) => {
1492
+ return ValueOrErrors.Default.return({
1493
+ kind: "unit",
1494
+ value: result,
1495
+ });
1496
+ });
1497
+ }
1498
+ return ValueOrErrors.Default.throwOne(
1499
+ `Error: parsing unsupported predicate kind ${JSON.stringify(raw)}`,
1500
+ );
1501
+ };
1502
+ const res = traverse(
1503
+ bindings,
1504
+ {
1505
+ kind: "record",
1506
+ value: true,
1507
+ fields: context.visibilityPredicateExpressions,
1508
+ },
1509
+ root,
1510
+ ).Then((visibilities) => {
1511
+ return traverse(
1512
+ bindings,
1513
+ {
1030
1514
  kind: "record",
1031
1515
  value: true,
1032
- fields: context.visibilityPredicateExpressions,
1033
- }, root).Then((visibilities) => {
1034
- return traverse(bindings, {
1035
- kind: "record",
1036
- value: true,
1037
- fields: context.disabledPredicatedExpressions,
1038
- }, root).Then((disabledFields) => {
1039
- return ValueOrErrors.Default.return({
1040
- visiblityPredicateEvaluations: visibilities,
1041
- disabledPredicateEvaluations: disabledFields,
1042
- });
1043
- });
1516
+ fields: context.disabledPredicatedExpressions,
1517
+ },
1518
+ root,
1519
+ ).Then((disabledFields) => {
1520
+ return ValueOrErrors.Default.return({
1521
+ visiblityPredicateEvaluations: visibilities,
1522
+ disabledPredicateEvaluations: disabledFields,
1523
+ });
1044
1524
  });
1045
- if (res.kind == "errors") {
1046
- console.error("error evaluating predicates", res);
1047
- }
1048
- return res;
1525
+ });
1526
+ if (res.kind == "errors") {
1527
+ console.error("error evaluating predicates", res);
1528
+ }
1529
+ return res;
1049
1530
  };
1050
- //# sourceMappingURL=state.js.map
1531
+ //# sourceMappingURL=state.js.map