ballerina-core 1.0.253 → 1.0.255

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