ballerina-core 1.0.186 → 1.0.188

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