ballerina-core 1.0.256 → 1.0.258

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 (321) hide show
  1. package/bin/src/api-response-handler/coroutines/runner.js +20 -13
  2. package/bin/src/api-response-handler/state.js +13 -11
  3. package/bin/src/apiResultStatus/state.d.ts +10 -3
  4. package/bin/src/apiResultStatus/state.js +2 -5
  5. package/bin/src/async/domains/mirroring/domains/collection/coroutines/synchronizers.js +314 -196
  6. package/bin/src/async/domains/mirroring/domains/collection/state.js +126 -36
  7. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection/state.js +18 -11
  8. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-collection-entity/state.js +19 -19
  9. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entities/state.js +1 -1
  10. package/bin/src/async/domains/mirroring/domains/entity/domains/loaded-entity/state.js +18 -18
  11. package/bin/src/async/domains/mirroring/domains/entity/state.js +18 -9
  12. package/bin/src/async/domains/mirroring/domains/singleton/coroutines/synchronizers.js +134 -83
  13. package/bin/src/async/domains/mirroring/domains/singleton/state.js +52 -8
  14. package/bin/src/async/domains/mirroring/domains/synchronization-result/state.d.ts +15 -9
  15. package/bin/src/async/domains/mirroring/domains/synchronization-result/state.js +1 -1
  16. package/bin/src/async/domains/mirroring/domains/synchronized-entities/state.js +7 -4
  17. package/bin/src/async/domains/promise/state.d.ts +9 -4
  18. package/bin/src/async/domains/promise/state.js +20 -9
  19. package/bin/src/async/domains/synchronized/coroutines/synchronize.js +80 -28
  20. package/bin/src/async/domains/synchronized/state.d.ts +14 -7
  21. package/bin/src/async/domains/synchronized/state.js +16 -6
  22. package/bin/src/async/state.d.ts +56 -45
  23. package/bin/src/async/state.js +115 -97
  24. package/bin/src/baseEntity/domains/identifiable/state.d.ts +15 -11
  25. package/bin/src/baseEntity/domains/identifiable/state.js +9 -9
  26. package/bin/src/collections/domains/array/state.d.ts +7 -7
  27. package/bin/src/collections/domains/array/state.js +5 -5
  28. package/bin/src/collections/domains/errors/state.d.ts +10 -10
  29. package/bin/src/collections/domains/errors/state.js +10 -10
  30. package/bin/src/collections/domains/immutable/domains/list/state.js +46 -44
  31. package/bin/src/collections/domains/immutable/domains/map/state.js +41 -23
  32. package/bin/src/collections/domains/immutable/domains/orderedMap/state.js +84 -65
  33. package/bin/src/collections/domains/immutable/domains/ordereredSet/state.d.ts +6 -6
  34. package/bin/src/collections/domains/immutable/domains/ordereredSet/state.js +6 -6
  35. package/bin/src/collections/domains/maybe/state.d.ts +9 -9
  36. package/bin/src/collections/domains/maybe/state.js +12 -9
  37. package/bin/src/collections/domains/product/state.d.ts +25 -19
  38. package/bin/src/collections/domains/product/state.js +13 -10
  39. package/bin/src/collections/domains/sum/state.d.ts +101 -77
  40. package/bin/src/collections/domains/sum/state.js +49 -32
  41. package/bin/src/collections/domains/valueOrErrors/state.js +81 -56
  42. package/bin/src/coroutines/builder.js +40 -19
  43. package/bin/src/coroutines/state.js +381 -306
  44. package/bin/src/coroutines/template.js +97 -59
  45. package/bin/src/debounced/coroutines/debounce.js +115 -89
  46. package/bin/src/debounced/state.js +62 -25
  47. package/bin/src/diagnostics/domains/message-box/state.d.ts +1 -1
  48. package/bin/src/diagnostics/domains/message-box/state.js +3 -3
  49. package/bin/src/foreignMutations/state.d.ts +3 -3
  50. package/bin/src/foreignMutations/state.js +1 -1
  51. package/bin/src/forms/domains/attachments/views/attachments-view.js +30 -8
  52. package/bin/src/forms/domains/collection/domains/reference/state.js +26 -20
  53. package/bin/src/forms/domains/collection/domains/selection/state.js +1 -1
  54. package/bin/src/forms/domains/dispatched-forms/built-ins/state.js +2007 -754
  55. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.d.ts.map +1 -1
  56. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.js +123 -44
  57. package/bin/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.js.map +1 -1
  58. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/enum/state.js +40 -27
  59. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/primitive/state.js +21 -13
  60. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/stream/state.js +43 -27
  61. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sumUnitDate/state.js +39 -22
  62. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/serializable/state.d.ts +167 -0
  63. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/serializable/state.d.ts.map +1 -0
  64. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/serializable/state.js +367 -0
  65. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/serializable/state.js.map +1 -0
  66. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.d.ts +7 -29
  67. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.d.ts.map +1 -1
  68. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.js +1098 -572
  69. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.js.map +1 -1
  70. package/bin/src/forms/domains/dispatched-forms/deserializer/state.d.ts +1 -0
  71. package/bin/src/forms/domains/dispatched-forms/deserializer/state.d.ts.map +1 -1
  72. package/bin/src/forms/domains/dispatched-forms/deserializer/state.js +322 -90
  73. package/bin/src/forms/domains/dispatched-forms/deserializer/state.js.map +1 -1
  74. package/bin/src/forms/domains/dispatched-forms/deserializer/template.js +3 -2
  75. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.d.ts +27 -4
  76. package/bin/src/forms/domains/dispatched-forms/runner/coroutines/runner.js +136 -82
  77. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/state.js +3 -3
  78. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.js +49 -23
  79. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/state.js +3 -3
  80. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.js +52 -24
  81. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/state.js +18 -6
  82. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.js +64 -30
  83. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/state.js +9 -6
  84. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.js +153 -60
  85. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/state.js +1 -1
  86. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.js +127 -50
  87. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/injectables/state.js +40 -22
  88. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/state.js +31 -13
  89. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.js +452 -152
  90. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/state.js +1 -1
  91. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/template.js +29 -8
  92. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/template.js.map +1 -1
  93. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/state.js +61 -18
  94. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.js +329 -90
  95. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/state.js +3 -3
  96. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.js +54 -23
  97. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_debouncer.js +22 -10
  98. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeOne.js +49 -31
  99. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/_initializeStream.js +29 -10
  100. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/builder.js +2 -2
  101. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/coroutines/runner.js +47 -26
  102. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/state.js +88 -40
  103. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.js +386 -152
  104. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/state.js +19 -10
  105. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.js +99 -33
  106. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/state.js +32 -11
  107. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.js +227 -82
  108. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/state.js +35 -13
  109. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.js +195 -68
  110. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/state.js +36 -13
  111. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.js +246 -106
  112. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/state.js +3 -3
  113. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.js +54 -23
  114. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.js +40 -27
  115. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/state.js +3 -3
  116. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.js +58 -26
  117. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/state.js +22 -7
  118. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.js +188 -53
  119. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/builder.js +2 -2
  120. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/infiniteLoader.js +57 -24
  121. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseFiltersAndSorting.js +70 -20
  122. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.d.ts.map +1 -1
  123. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.js +88 -48
  124. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/initialiseTable.js.map +1 -1
  125. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/loadWithRetries.js +40 -20
  126. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/coroutines/runner.js +43 -15
  127. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.js +301 -137
  128. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.js.map +1 -1
  129. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.js +692 -240
  130. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/state.js +20 -8
  131. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.js +132 -35
  132. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/state.js +21 -8
  133. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.js +105 -33
  134. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/state.js +12 -9
  135. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.js +54 -20
  136. package/bin/src/forms/domains/dispatched-forms/runner/domains/deltas/state.js +716 -560
  137. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/list/state.js +58 -18
  138. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.js +45 -14
  139. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/map/state.js +76 -18
  140. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/multiSelection/state.js +82 -24
  141. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/nestedDispatcher/state.js +37 -8
  142. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/one/state.js +120 -36
  143. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/primitive/state.js +145 -63
  144. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/readOnly/state.js +44 -12
  145. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/recordField/state.js +14 -4
  146. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.js +81 -25
  147. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/singleSelectionDispatcher/state.js +82 -24
  148. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/sum/state.js +63 -20
  149. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.js +248 -74
  150. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/tupleDispatcher/state.js +61 -13
  151. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.js +92 -33
  152. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.js +144 -45
  153. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_init.js +203 -95
  154. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/_sync.js +79 -37
  155. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/builder.js +2 -2
  156. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/coroutines/runner.js +19 -17
  157. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/state.js +58 -11
  158. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.js +73 -25
  159. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_init.js +205 -95
  160. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/_sync.js +78 -37
  161. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/builder.js +2 -2
  162. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/coroutines/runner.js +19 -17
  163. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/state.js +58 -11
  164. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.js +71 -25
  165. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/coroutines/runner.js +163 -85
  166. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/state.js +10 -4
  167. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.js +72 -27
  168. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.js +796 -436
  169. package/bin/src/forms/domains/dispatched-forms/runner/state.js +62 -38
  170. package/bin/src/forms/domains/dispatched-forms/runner/template.js +78 -25
  171. package/bin/src/forms/domains/launcher/coroutines/runner.js +120 -45
  172. package/bin/src/forms/domains/launcher/domains/create/coroutines/runner.js +240 -101
  173. package/bin/src/forms/domains/launcher/domains/create/state.js +62 -17
  174. package/bin/src/forms/domains/launcher/domains/create/template.js +84 -42
  175. package/bin/src/forms/domains/launcher/domains/edit/coroutines/runner.js +242 -103
  176. package/bin/src/forms/domains/launcher/domains/edit/state.js +62 -17
  177. package/bin/src/forms/domains/launcher/domains/edit/template.js +86 -43
  178. package/bin/src/forms/domains/launcher/domains/merger/state.d.ts +4 -4
  179. package/bin/src/forms/domains/launcher/domains/merger/state.js +35 -26
  180. package/bin/src/forms/domains/launcher/domains/passthrough/coroutines/runner.js +88 -42
  181. package/bin/src/forms/domains/launcher/domains/passthrough/state.js +44 -19
  182. package/bin/src/forms/domains/launcher/domains/passthrough/template.js +56 -34
  183. package/bin/src/forms/domains/launcher/state.js +6 -6
  184. package/bin/src/forms/domains/launcher/template.js +169 -85
  185. package/bin/src/forms/domains/parser/coroutines/runner.js +87 -25
  186. package/bin/src/forms/domains/parser/domains/built-ins/state.js +944 -533
  187. package/bin/src/forms/domains/parser/domains/deltas/state.js +444 -318
  188. package/bin/src/forms/domains/parser/domains/injectables/state.js +29 -26
  189. package/bin/src/forms/domains/parser/domains/layout/state.js +271 -183
  190. package/bin/src/forms/domains/parser/domains/predicates/domains/extractor/state.js +324 -162
  191. package/bin/src/forms/domains/parser/domains/predicates/state.js +1514 -984
  192. package/bin/src/forms/domains/parser/domains/renderer/state.js +1137 -480
  193. package/bin/src/forms/domains/parser/domains/types/state.js +355 -170
  194. package/bin/src/forms/domains/parser/domains/validator/state.js +417 -280
  195. package/bin/src/forms/domains/parser/state.js +612 -373
  196. package/bin/src/forms/domains/parser/template.js +1 -1
  197. package/bin/src/forms/domains/primitives/domains/base-64-file/state.js +5 -5
  198. package/bin/src/forms/domains/primitives/domains/base-64-file/template.js +38 -19
  199. package/bin/src/forms/domains/primitives/domains/boolean/state.js +5 -5
  200. package/bin/src/forms/domains/primitives/domains/boolean/template.js +38 -19
  201. package/bin/src/forms/domains/primitives/domains/date/state.js +18 -9
  202. package/bin/src/forms/domains/primitives/domains/date/template.js +51 -25
  203. package/bin/src/forms/domains/primitives/domains/enum/state.js +6 -6
  204. package/bin/src/forms/domains/primitives/domains/enum/template.js +117 -48
  205. package/bin/src/forms/domains/primitives/domains/enum-multiselect/state.js +1 -1
  206. package/bin/src/forms/domains/primitives/domains/enum-multiselect/template.js +99 -40
  207. package/bin/src/forms/domains/primitives/domains/list/state.js +14 -14
  208. package/bin/src/forms/domains/primitives/domains/list/template.js +200 -71
  209. package/bin/src/forms/domains/primitives/domains/map/state.js +14 -14
  210. package/bin/src/forms/domains/primitives/domains/map/template.js +294 -103
  211. package/bin/src/forms/domains/primitives/domains/number/state.js +5 -5
  212. package/bin/src/forms/domains/primitives/domains/number/template.js +38 -19
  213. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/state.js +33 -16
  214. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream/template.js +171 -62
  215. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/state.js +1 -1
  216. package/bin/src/forms/domains/primitives/domains/searchable-infinite-stream-multiselect/template.js +182 -69
  217. package/bin/src/forms/domains/primitives/domains/secret/state.js +5 -5
  218. package/bin/src/forms/domains/primitives/domains/secret/template.js +38 -19
  219. package/bin/src/forms/domains/primitives/domains/string/state.js +5 -5
  220. package/bin/src/forms/domains/primitives/domains/string/template.js +42 -22
  221. package/bin/src/forms/domains/primitives/domains/sum/state.js +10 -10
  222. package/bin/src/forms/domains/primitives/domains/sum/template.js +141 -50
  223. package/bin/src/forms/domains/primitives/domains/tuple/state.js +9 -9
  224. package/bin/src/forms/domains/primitives/domains/tuple/template.js +100 -33
  225. package/bin/src/forms/domains/primitives/domains/unit/state.js +8 -8
  226. package/bin/src/forms/domains/primitives/domains/unit/template.js +22 -9
  227. package/bin/src/forms/domains/singleton/domains/form-label/state.d.ts +4 -4
  228. package/bin/src/forms/domains/singleton/domains/form-label/state.js +1 -1
  229. package/bin/src/forms/domains/singleton/state.js +12 -10
  230. package/bin/src/forms/domains/singleton/template.js +288 -113
  231. package/bin/src/fun/domains/curry/state.d.ts +4 -2
  232. package/bin/src/fun/domains/curry/state.js +1 -1
  233. package/bin/src/fun/domains/id/state.d.ts +1 -1
  234. package/bin/src/fun/domains/id/state.js +1 -1
  235. package/bin/src/fun/domains/predicate/domains/bool-expr.d.ts +57 -41
  236. package/bin/src/fun/domains/predicate/domains/bool-expr.js +76 -67
  237. package/bin/src/fun/domains/predicate/state.d.ts +9 -7
  238. package/bin/src/fun/domains/predicate/state.js +14 -10
  239. package/bin/src/fun/domains/simpleCallback/state.d.ts +1 -1
  240. package/bin/src/fun/domains/simpleCallback/state.js +1 -1
  241. package/bin/src/fun/domains/uncurry/state.d.ts +4 -2
  242. package/bin/src/fun/domains/uncurry/state.js +1 -1
  243. package/bin/src/fun/domains/unit/state.d.ts +1 -1
  244. package/bin/src/fun/domains/unit/state.js +1 -1
  245. package/bin/src/fun/domains/updater/domains/caseUpdater/state.d.ts +22 -7
  246. package/bin/src/fun/domains/updater/domains/caseUpdater/state.js +18 -10
  247. package/bin/src/fun/domains/updater/domains/mapUpdater/state.d.ts +24 -13
  248. package/bin/src/fun/domains/updater/domains/mapUpdater/state.js +40 -10
  249. package/bin/src/fun/domains/updater/domains/maybeUpdater/state.d.ts +19 -13
  250. package/bin/src/fun/domains/updater/domains/maybeUpdater/state.js +20 -9
  251. package/bin/src/fun/domains/updater/domains/orderedMapUpdater/state.d.ts +24 -13
  252. package/bin/src/fun/domains/updater/domains/orderedMapUpdater/state.js +47 -11
  253. package/bin/src/fun/domains/updater/domains/orderedSetUpdater/state.d.ts +20 -8
  254. package/bin/src/fun/domains/updater/domains/orderedSetUpdater/state.js +17 -5
  255. package/bin/src/fun/domains/updater/domains/replaceWith/state.d.ts +1 -1
  256. package/bin/src/fun/domains/updater/domains/replaceWith/state.js +1 -1
  257. package/bin/src/fun/domains/updater/domains/simpleUpdater/domains/baseSimpleUpdater/state.d.ts +13 -4
  258. package/bin/src/fun/domains/updater/domains/simpleUpdater/domains/baseSimpleUpdater/state.js +6 -4
  259. package/bin/src/fun/domains/updater/domains/simpleUpdater/state.d.ts +60 -22
  260. package/bin/src/fun/domains/updater/domains/simpleUpdater/state.js +42 -31
  261. package/bin/src/fun/domains/updater/state.d.ts +4 -4
  262. package/bin/src/fun/domains/updater/state.js +12 -10
  263. package/bin/src/fun/state.d.ts +3 -3
  264. package/bin/src/fun/state.js +9 -7
  265. package/bin/src/infinite-data-stream/coroutines/builder.js +1 -1
  266. package/bin/src/infinite-data-stream/coroutines/infiniteLoader.js +47 -20
  267. package/bin/src/infinite-data-stream/coroutines/runner.js +7 -7
  268. package/bin/src/infinite-data-stream/state.d.ts +84 -51
  269. package/bin/src/infinite-data-stream/state.js +125 -61
  270. package/bin/src/infinite-data-stream/template.js +3 -2
  271. package/bin/src/math/domains/DOMRect/state.d.ts +4 -4
  272. package/bin/src/math/domains/DOMRect/state.js +10 -8
  273. package/bin/src/math/domains/number/state.d.ts +5 -5
  274. package/bin/src/math/domains/number/state.js +5 -5
  275. package/bin/src/math/domains/rect/state.d.ts +8 -8
  276. package/bin/src/math/domains/rect/state.js +16 -15
  277. package/bin/src/math/domains/rgba/state.d.ts +17 -17
  278. package/bin/src/math/domains/rgba/state.js +77 -81
  279. package/bin/src/math/domains/size2/state.d.ts +8 -8
  280. package/bin/src/math/domains/size2/state.js +6 -6
  281. package/bin/src/math/domains/vector2/state.d.ts +10 -10
  282. package/bin/src/math/domains/vector2/state.js +8 -8
  283. package/bin/src/queue/state.js +23 -16
  284. package/bin/src/state/domains/repository/state.d.ts +15 -9
  285. package/bin/src/state/domains/repository/state.js +1 -1
  286. package/bin/src/template/state.js +163 -115
  287. package/bin/src/validation/state.js +38 -45
  288. package/bin/src/value/domains/mutable-value/state.js +3 -2
  289. package/bin/src/value/state.d.ts +9 -9
  290. package/bin/src/value/state.js +11 -8
  291. package/bin/src/value-infinite-data-stream/coroutines/builder.js +1 -1
  292. package/bin/src/value-infinite-data-stream/coroutines/infiniteLoader.js +55 -20
  293. package/bin/src/value-infinite-data-stream/coroutines/runner.js +6 -4
  294. package/bin/src/value-infinite-data-stream/state.js +199 -77
  295. package/bin/src/value-infinite-data-stream/template.js +4 -2
  296. package/bin/src/visibility/state.d.ts +5 -2
  297. package/bin/src/visibility/state.js +1 -1
  298. package/main.ts +1 -0
  299. package/package.json +1 -1
  300. package/src/forms/domains/dispatched-forms/deserializer/coroutines/runner.ts +2 -2
  301. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/apis/state.ts +117 -111
  302. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/list/state.ts +14 -5
  303. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/lookup/state.ts +75 -18
  304. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/map/state.ts +16 -6
  305. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/nestedRenderer/state.ts +27 -9
  306. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/one/state.ts +28 -8
  307. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/readOnly/state.ts +13 -4
  308. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.ts +18 -7
  309. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.ts +40 -14
  310. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/sum/state.ts +15 -5
  311. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.ts +20 -6
  312. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.ts +101 -50
  313. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/tuple/state.ts +22 -23
  314. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/union/state.ts +37 -19
  315. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.ts +64 -6
  316. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/serializable/state.ts +585 -0
  317. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/types/state.ts +592 -340
  318. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/state.ts +364 -226
  319. package/src/forms/domains/dispatched-forms/deserializer/state.ts +1 -2
  320. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/lookup-type/template.tsx +1 -1
  321. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/state.ts +2 -2
@@ -8,6 +8,7 @@ import {
8
8
  MapRepo,
9
9
  DispatchInjectedPrimitives,
10
10
  ParsedType,
11
+ isString,
11
12
  } from "../../../../../../../../../main";
12
13
 
13
14
  export const DispatchisString = (_: any): _ is string => typeof _ == "string";
@@ -83,6 +84,13 @@ export const DispatchPrimitiveTypeNames = [
83
84
  "base64File",
84
85
  "secret",
85
86
  ] as const;
87
+
88
+ const STRINGY_TYPES = [
89
+ "guid",
90
+ "entityIdUUID",
91
+ "entityIdString",
92
+ "calculatedDisplayValue",
93
+ ] as const;
86
94
  export type DispatchPrimitiveTypeName<T> =
87
95
  | (typeof DispatchPrimitiveTypeNames)[number]
88
96
  | keyof T;
@@ -110,8 +118,13 @@ export const SerializedType = {
110
118
  _: SerializedType<T>,
111
119
  ): _ is { fun: DispatchGenericType; args: Array<SerializedType<T>> } =>
112
120
  DispatchHasFun(_) && DispatchIsGenericType(_.fun) && DispatchHasArgs(_),
113
- isLookup: (_: unknown, forms: Set<DispatchTypeName>): _ is DispatchTypeName =>
114
- DispatchisString(_) && forms.has(_),
121
+ isLookup: <T>(
122
+ _: unknown,
123
+ injectedPrimitives: DispatchInjectedPrimitives<T> | undefined,
124
+ ): _ is DispatchTypeName =>
125
+ DispatchisString(_) &&
126
+ !injectedPrimitives?.has(_ as keyof T) &&
127
+ !(_ in DispatchPrimitiveTypeNames),
115
128
  isList: <T>(
116
129
  _: SerializedType<T>,
117
130
  ): _ is { fun: "List"; args: Array<SerializedType<T>> } =>
@@ -221,7 +234,7 @@ export type StringSerializedType = string;
221
234
  export type UnionType<T> = {
222
235
  kind: "union";
223
236
  args: Map<DispatchCaseName, DispatchParsedType<T>>;
224
- asString: () => StringSerializedType;
237
+ // asString: () => StringSerializedType;
225
238
  };
226
239
 
227
240
  export const UnionType = {
@@ -235,7 +248,7 @@ export const UnionType = {
235
248
  export type RecordType<T> = {
236
249
  kind: "record";
237
250
  fields: OrderedMap<DispatchFieldName, DispatchParsedType<T>>;
238
- asString: () => StringSerializedType;
251
+ // asString: () => StringSerializedType;
239
252
  };
240
253
 
241
254
  export const RecordType = {
@@ -249,7 +262,7 @@ export const RecordType = {
249
262
  export type LookupType = {
250
263
  kind: "lookup";
251
264
  name: string;
252
- asString: () => StringSerializedType;
265
+ // asString: () => StringSerializedType;
253
266
  };
254
267
 
255
268
  export const LookupType = {
@@ -261,7 +274,7 @@ export const LookupType = {
261
274
  export type DispatchPrimitiveType<T> = {
262
275
  kind: "primitive";
263
276
  name: DispatchPrimitiveTypeName<T>;
264
- asString: () => StringSerializedType;
277
+ // asString: () => StringSerializedType;
265
278
  };
266
279
 
267
280
  export const DispatchPrimitiveType = {
@@ -275,7 +288,7 @@ export const DispatchPrimitiveType = {
275
288
  export type SingleSelectionType<T> = {
276
289
  kind: "singleSelection";
277
290
  args: Array<DispatchParsedType<T>>;
278
- asString: () => StringSerializedType;
291
+ // asString: () => StringSerializedType;
279
292
  };
280
293
 
281
294
  export const SingleSelectionType = {
@@ -289,7 +302,7 @@ export const SingleSelectionType = {
289
302
  export type MultiSelectionType<T> = {
290
303
  kind: "multiSelection";
291
304
  args: Array<DispatchParsedType<T>>;
292
- asString: () => StringSerializedType;
305
+ // asString: () => StringSerializedType;
293
306
  };
294
307
 
295
308
  export const MultiSelectionType = {
@@ -303,7 +316,7 @@ export const MultiSelectionType = {
303
316
  export type ListType<T> = {
304
317
  kind: "list";
305
318
  args: Array<DispatchParsedType<T>>;
306
- asString: () => StringSerializedType;
319
+ // asString: () => StringSerializedType;
307
320
  };
308
321
 
309
322
  export const ListType = {
@@ -317,7 +330,7 @@ export const ListType = {
317
330
  export type TupleType<T> = {
318
331
  kind: "tuple";
319
332
  args: Array<DispatchParsedType<T>>;
320
- asString: () => StringSerializedType;
333
+ // asString: () => StringSerializedType;
321
334
  };
322
335
 
323
336
  export const TupleType = {
@@ -331,7 +344,7 @@ export const TupleType = {
331
344
  export type SumType<T> = {
332
345
  kind: "sum";
333
346
  args: Array<DispatchParsedType<T>>;
334
- asString: () => StringSerializedType;
347
+ // asString: () => StringSerializedType;
335
348
  };
336
349
 
337
350
  export const SumType = {
@@ -345,7 +358,7 @@ export const SumType = {
345
358
  export type SumNType<T> = {
346
359
  kind: "sumN";
347
360
  args: Array<DispatchParsedType<T>>;
348
- asString: () => StringSerializedType;
361
+ // asString: () => StringSerializedType;
349
362
  };
350
363
 
351
364
  export const SumNType = {
@@ -360,7 +373,7 @@ export const SumNType = {
360
373
  export type MapType<T> = {
361
374
  kind: "map";
362
375
  args: Array<DispatchParsedType<T>>;
363
- asString: () => StringSerializedType;
376
+ // asString: () => StringSerializedType;
364
377
  };
365
378
 
366
379
  export const MapType = {
@@ -374,7 +387,7 @@ export const MapType = {
374
387
  export type TableType<T> = {
375
388
  kind: "table";
376
389
  arg: LookupType;
377
- asString: () => StringSerializedType;
390
+ // asString: () => StringSerializedType;
378
391
  };
379
392
 
380
393
  export const TableType = {
@@ -388,7 +401,7 @@ export const TableType = {
388
401
  export type ReadOnlyType<T> = {
389
402
  kind: "readOnly";
390
403
  arg: DispatchParsedType<T>;
391
- asString: () => StringSerializedType;
404
+ // asString: () => StringSerializedType;
392
405
  };
393
406
 
394
407
  export const ReadOnlyType = {
@@ -402,7 +415,7 @@ export const ReadOnlyType = {
402
415
  export type OneType<T> = {
403
416
  kind: "one";
404
417
  arg: LookupType;
405
- asString: () => StringSerializedType;
418
+ // asString: () => StringSerializedType;
406
419
  };
407
420
 
408
421
  export const OneType = {
@@ -417,7 +430,7 @@ export const OneType = {
417
430
  export type FilterContainsType<T> = {
418
431
  kind: "contains";
419
432
  contains: DispatchParsedType<T>;
420
- asString: () => StringSerializedType;
433
+ // asString: () => StringSerializedType;
421
434
  };
422
435
 
423
436
  export const FilterContainsType = {
@@ -431,7 +444,7 @@ export const FilterContainsType = {
431
444
  export type FilterEqualsToType<T> = {
432
445
  kind: "=";
433
446
  equalsTo: DispatchParsedType<T>;
434
- asString: () => StringSerializedType;
447
+ // asString: () => StringSerializedType;
435
448
  };
436
449
 
437
450
  export const FilterEqualsToType = {
@@ -445,7 +458,7 @@ export const FilterEqualsToType = {
445
458
  export type FilterNotEqualsToType<T> = {
446
459
  kind: "!=";
447
460
  notEqualsTo: DispatchParsedType<T>;
448
- asString: () => StringSerializedType;
461
+ // asString: () => StringSerializedType;
449
462
  };
450
463
 
451
464
  export const FilterNotEqualsToType = {
@@ -459,7 +472,7 @@ export const FilterNotEqualsToType = {
459
472
  export type FilterGreaterThanOrEqualsToType<T> = {
460
473
  kind: ">=";
461
474
  greaterThanOrEqualsTo: DispatchParsedType<T>;
462
- asString: () => StringSerializedType;
475
+ // asString: () => StringSerializedType;
463
476
  };
464
477
 
465
478
  export const FilterGreaterThanOrEqualsToType = {
@@ -473,7 +486,7 @@ export const FilterGreaterThanOrEqualsToType = {
473
486
  export type FilterGreaterThanType<T> = {
474
487
  kind: ">";
475
488
  greaterThan: DispatchParsedType<T>;
476
- asString: () => StringSerializedType;
489
+ // asString: () => StringSerializedType;
477
490
  };
478
491
 
479
492
  export const FilterGreaterThanType = {
@@ -486,7 +499,7 @@ export const FilterGreaterThanType = {
486
499
 
487
500
  export type FilterIsNotNullType<T> = {
488
501
  kind: "!=null";
489
- asString: () => StringSerializedType;
502
+ // asString: () => StringSerializedType;
490
503
  };
491
504
 
492
505
  export const FilterIsNotNullType = {
@@ -497,7 +510,7 @@ export const FilterIsNotNullType = {
497
510
 
498
511
  export type FilterIsNullType<T> = {
499
512
  kind: "=null";
500
- asString: () => StringSerializedType;
513
+ // asString: () => StringSerializedType;
501
514
  };
502
515
 
503
516
  export const FilterIsNullType = {
@@ -509,7 +522,7 @@ export const FilterIsNullType = {
509
522
  export type FilterSmallerThanOrEqualsToType<T> = {
510
523
  kind: "<=";
511
524
  smallerThanOrEqualsTo: DispatchParsedType<T>;
512
- asString: () => StringSerializedType;
525
+ // asString: () => StringSerializedType;
513
526
  };
514
527
 
515
528
  export const FilterSmallerThanOrEqualsToType = {
@@ -523,7 +536,7 @@ export const FilterSmallerThanOrEqualsToType = {
523
536
  export type FilterSmallerThanType<T> = {
524
537
  kind: "<";
525
538
  smallerThan: DispatchParsedType<T>;
526
- asString: () => StringSerializedType;
539
+ // asString: () => StringSerializedType;
527
540
  };
528
541
 
529
542
  export const FilterSmallerThanType = {
@@ -537,7 +550,7 @@ export const FilterSmallerThanType = {
537
550
  export type FilterStartsWithType<T> = {
538
551
  kind: "startsWith";
539
552
  startsWith: DispatchParsedType<T>;
540
- asString: () => StringSerializedType;
553
+ // asString: () => StringSerializedType;
541
554
  };
542
555
 
543
556
  export const FilterStartsWithType = {
@@ -597,168 +610,214 @@ export const DispatchParsedType = {
597
610
  table: <T>(arg: LookupType): TableType<T> => ({
598
611
  kind: "table",
599
612
  arg,
600
- asString: () => TableType.SerializeToString(arg.asString()),
601
613
  }),
602
614
  record: <T>(
603
615
  fields: Map<DispatchFieldName, DispatchParsedType<T>>,
604
616
  ): RecordType<T> => ({
605
617
  kind: "record",
606
618
  fields,
607
- asString: () =>
608
- RecordType.SerializeToString(fields.map((v) => v.asString())),
609
619
  }),
610
620
  primitive: <T>(
611
621
  name: DispatchPrimitiveTypeName<T>,
612
622
  ): DispatchParsedType<T> => ({
613
623
  kind: "primitive",
614
624
  name,
615
- asString: () => DispatchPrimitiveType.SerializeToString(name),
616
625
  }),
617
626
  singleSelection: <T>(
618
627
  args: Array<DispatchParsedType<T>>,
619
628
  ): DispatchParsedType<T> => ({
620
629
  kind: "singleSelection",
621
630
  args,
622
- asString: () =>
623
- SingleSelectionType.SerializeToString(args.map((v) => v.asString())),
624
631
  }),
625
632
  multiSelection: <T>(
626
633
  args: Array<DispatchParsedType<T>>,
627
634
  ): DispatchParsedType<T> => ({
628
635
  kind: "multiSelection",
629
636
  args,
630
- asString: () =>
631
- MultiSelectionType.SerializeToString(args.map((v) => v.asString())),
632
637
  }),
633
638
  list: <T>(args: Array<DispatchParsedType<T>>): DispatchParsedType<T> => ({
634
639
  kind: "list",
635
640
  args,
636
- asString: () => ListType.SerializeToString(args.map((v) => v.asString())),
637
641
  }),
638
642
  tuple: <T>(args: Array<DispatchParsedType<T>>): DispatchParsedType<T> => ({
639
643
  kind: "tuple",
640
644
  args,
641
- asString: () =>
642
- TupleType.SerializeToString(args.map((v) => v.asString())),
643
645
  }),
644
646
  sum: <T>(args: Array<DispatchParsedType<T>>): DispatchParsedType<T> => ({
645
647
  kind: "sum",
646
648
  args,
647
- asString: () => SumType.SerializeToString(args.map((v) => v.asString())),
648
649
  }),
649
650
  sumN: <T>(args: Array<DispatchParsedType<T>>): SumNType<T> => ({
650
651
  kind: "sumN",
651
652
  args,
652
- asString: () =>
653
- SumNType.SerializeToString(
654
- args.map((v) => v.asString()),
655
- args.length,
656
- ),
657
653
  }),
658
654
  map: <T>(args: Array<DispatchParsedType<T>>): DispatchParsedType<T> => ({
659
655
  kind: "map",
660
656
  args,
661
- asString: () => MapType.SerializeToString(args.map((v) => v.asString())),
662
657
  }),
663
658
  union: <T>(
664
659
  args: Map<DispatchCaseName, DispatchParsedType<T>>,
665
660
  ): DispatchParsedType<T> => ({
666
661
  kind: "union",
667
662
  args,
668
- asString: () =>
669
- UnionType.SerializeToString(args.map((v) => v.asString())),
670
663
  }),
671
664
  readOnly: <T>(arg: DispatchParsedType<T>): ReadOnlyType<T> => ({
672
665
  kind: "readOnly",
673
666
  arg,
674
- asString: () => ReadOnlyType.SerializeToString(arg.asString()),
675
667
  }),
676
668
  lookup: <T>(name: string): LookupType => ({
677
669
  kind: "lookup",
678
670
  name,
679
- asString: () => LookupType.SerializeToString(name),
680
671
  }),
681
672
  one: <T>(arg: LookupType): OneType<T> => ({
682
673
  kind: "one",
683
674
  arg,
684
- asString: () => OneType.SerializeToString(arg.asString()),
685
675
  }),
686
676
  filterContains: <T>(
687
677
  contains: DispatchParsedType<T>,
688
678
  ): FilterContainsType<T> => ({
689
679
  kind: "contains",
690
680
  contains,
691
- asString: () => FilterContainsType.SerializeToString(contains.asString()),
692
681
  }),
693
682
  filterEqualsTo: <T>(
694
683
  equalsTo: DispatchParsedType<T>,
695
684
  ): FilterEqualsToType<T> => ({
696
685
  kind: "=",
697
686
  equalsTo,
698
- asString: () => FilterEqualsToType.SerializeToString(equalsTo.asString()),
699
687
  }),
700
688
  filterNotEqualsTo: <T>(
701
689
  notEqualsTo: DispatchParsedType<T>,
702
690
  ): FilterNotEqualsToType<T> => ({
703
691
  kind: "!=",
704
692
  notEqualsTo,
705
- asString: () =>
706
- FilterNotEqualsToType.SerializeToString(notEqualsTo.asString()),
707
693
  }),
708
694
  filterGreaterThanOrEqualsTo: <T>(
709
695
  greaterThanOrEqualsTo: DispatchParsedType<T>,
710
696
  ): FilterGreaterThanOrEqualsToType<T> => ({
711
697
  kind: ">=",
712
698
  greaterThanOrEqualsTo,
713
- asString: () =>
714
- FilterGreaterThanOrEqualsToType.SerializeToString(
715
- greaterThanOrEqualsTo.asString(),
716
- ),
717
699
  }),
718
700
  filterGreaterThan: <T>(
719
701
  greaterThan: DispatchParsedType<T>,
720
702
  ): FilterGreaterThanType<T> => ({
721
703
  kind: ">",
722
704
  greaterThan,
723
- asString: () =>
724
- FilterGreaterThanType.SerializeToString(greaterThan.asString()),
725
705
  }),
726
706
  filterIsNotNull: <T>(): FilterIsNotNullType<T> => ({
727
707
  kind: "!=null",
728
- asString: () => FilterIsNotNullType.SerializeToString(),
729
708
  }),
730
709
  filterIsNull: <T>(): FilterIsNullType<T> => ({
731
710
  kind: "=null",
732
- asString: () => FilterIsNullType.SerializeToString(),
733
711
  }),
734
712
  filterSmallerThanOrEqualsTo: <T>(
735
713
  smallerThanOrEqualsTo: DispatchParsedType<T>,
736
714
  ): FilterSmallerThanOrEqualsToType<T> => ({
737
715
  kind: "<=",
738
716
  smallerThanOrEqualsTo,
739
- asString: () =>
740
- FilterSmallerThanOrEqualsToType.SerializeToString(
741
- smallerThanOrEqualsTo.asString(),
742
- ),
743
717
  }),
744
718
  filterSmallerThan: <T>(
745
719
  smallerThan: DispatchParsedType<T>,
746
720
  ): FilterSmallerThanType<T> => ({
747
721
  kind: "<",
748
722
  smallerThan,
749
- asString: () =>
750
- FilterSmallerThanType.SerializeToString(smallerThan.asString()),
751
723
  }),
752
724
  filterStartsWith: <T>(
753
725
  startsWith: DispatchParsedType<T>,
754
726
  ): FilterStartsWithType<T> => ({
755
727
  kind: "startsWith",
756
728
  startsWith,
757
- asString: () =>
758
- FilterStartsWithType.SerializeToString(startsWith.asString()),
759
729
  }),
760
730
  },
761
731
  Operations: {
732
+ AsString: (type: DispatchParsedType<unknown>): StringSerializedType => {
733
+ switch (type.kind) {
734
+ case "record":
735
+ return RecordType.SerializeToString(
736
+ type.fields.map((v) => DispatchParsedType.Operations.AsString(v)),
737
+ );
738
+ case "table":
739
+ return TableType.SerializeToString(
740
+ DispatchParsedType.Operations.AsString(type.arg),
741
+ );
742
+ case "one":
743
+ return OneType.SerializeToString(
744
+ DispatchParsedType.Operations.AsString(type.arg),
745
+ );
746
+ case "singleSelection":
747
+ return SingleSelectionType.SerializeToString(
748
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
749
+ );
750
+ case "multiSelection":
751
+ return MultiSelectionType.SerializeToString(
752
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
753
+ );
754
+ case "list":
755
+ return ListType.SerializeToString(
756
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
757
+ );
758
+ case "tuple":
759
+ return TupleType.SerializeToString(
760
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
761
+ );
762
+ case "sum":
763
+ return SumType.SerializeToString(
764
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
765
+ );
766
+ case "sumN":
767
+ return SumNType.SerializeToString(
768
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
769
+ type.args.length,
770
+ );
771
+ case "map":
772
+ return MapType.SerializeToString(
773
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
774
+ );
775
+ case "union":
776
+ return UnionType.SerializeToString(
777
+ type.args.map((v) => DispatchParsedType.Operations.AsString(v)),
778
+ );
779
+ case "lookup":
780
+ return LookupType.SerializeToString(type.name);
781
+ case "contains":
782
+ return FilterContainsType.SerializeToString(
783
+ DispatchParsedType.Operations.AsString(type.contains),
784
+ );
785
+ case "=":
786
+ return FilterEqualsToType.SerializeToString(
787
+ DispatchParsedType.Operations.AsString(type.equalsTo),
788
+ );
789
+ case "!=":
790
+ return FilterNotEqualsToType.SerializeToString(
791
+ DispatchParsedType.Operations.AsString(type.notEqualsTo),
792
+ );
793
+ case ">=":
794
+ return FilterGreaterThanOrEqualsToType.SerializeToString(
795
+ DispatchParsedType.Operations.AsString(type.greaterThanOrEqualsTo),
796
+ );
797
+ case ">":
798
+ return FilterGreaterThanType.SerializeToString(
799
+ DispatchParsedType.Operations.AsString(type.greaterThan),
800
+ );
801
+ case "!=null":
802
+ return FilterIsNotNullType.SerializeToString();
803
+ case "=null":
804
+ return FilterIsNullType.SerializeToString();
805
+ case "<=":
806
+ return FilterSmallerThanOrEqualsToType.SerializeToString(
807
+ DispatchParsedType.Operations.AsString(type.smallerThanOrEqualsTo),
808
+ );
809
+ case "<":
810
+ return FilterSmallerThanType.SerializeToString(
811
+ DispatchParsedType.Operations.AsString(type.smallerThan),
812
+ );
813
+ case "startsWith":
814
+ return FilterStartsWithType.SerializeToString(
815
+ DispatchParsedType.Operations.AsString(type.startsWith),
816
+ );
817
+ default:
818
+ throw new Error(`Unknown type: ${JSON.stringify(type)}`);
819
+ }
820
+ },
762
821
  // We don't use this at the moment, if we need it, then we can fix
763
822
  // Equals: <T>(
764
823
  // fst: DispatchParsedType<T>,
@@ -803,12 +862,12 @@ export const DispatchParsedType = {
803
862
  // : false,
804
863
  ParseRawKeyOf: <T>(
805
864
  rawType: ValidatedSerializedKeyOfType<T>,
806
- typeNames: Set<DispatchTypeName>,
807
865
  serializedTypes: Record<string, SerializedType<T>>,
808
866
  alreadyParsedTypes: Map<
809
867
  string,
810
868
  ValueOrErrors<DispatchParsedType<T>, string>
811
869
  >,
870
+ injectedPrimitives?: DispatchInjectedPrimitives<T>,
812
871
  ): ValueOrErrors<
813
872
  [
814
873
  DispatchParsedType<T>,
@@ -834,9 +893,9 @@ export const DispatchParsedType = {
834
893
  : DispatchParsedType.Operations.ParseRawType(
835
894
  rawType.args[0],
836
895
  serializedTypes[rawType.args[0]],
837
- typeNames,
838
896
  serializedTypes,
839
897
  alreadyParsedTypes,
898
+ injectedPrimitives,
840
899
  )
841
900
  )
842
901
  .Then((parsingResult) =>
@@ -867,20 +926,31 @@ export const DispatchParsedType = {
867
926
  >([
868
927
  DispatchParsedType.Default.union(
869
928
  Map(
870
- parsingResult[0].fields
871
- .keySeq()
872
- .filter(
873
- (key) =>
874
- rawType.args[1] == undefined ||
875
- !rawType.args[1].includes(key),
876
- )
877
- .toArray()
878
- .map((key) => [
879
- key,
880
- DispatchParsedType.Default.record(
881
- Map<string, DispatchParsedType<T>>(),
882
- ),
883
- ]),
929
+ (() => {
930
+ const excludedKeys: Record<string, true> | null = rawType
931
+ .args[1]
932
+ ? rawType.args[1].reduce(
933
+ (acc, key) => {
934
+ acc[key] = true;
935
+ return acc;
936
+ },
937
+ {} as Record<string, true>,
938
+ )
939
+ : null;
940
+ return parsingResult[0].fields
941
+ .keySeq()
942
+ .filter(
943
+ (key) =>
944
+ excludedKeys == null || !(key in excludedKeys),
945
+ )
946
+ .toArray()
947
+ .map((key) => [
948
+ key,
949
+ DispatchParsedType.Default.record(
950
+ Map<string, DispatchParsedType<T>>(),
951
+ ),
952
+ ]);
953
+ })(),
884
954
  ),
885
955
  ),
886
956
  parsingResult[1],
@@ -961,20 +1031,29 @@ export const DispatchParsedType = {
961
1031
  case "lookup":
962
1032
  return LookupType.SerializeToString(type.name);
963
1033
  case "contains":
964
- return FilterContainsType.SerializeToString(type.contains.asString());
1034
+ return FilterContainsType.SerializeToString(
1035
+ // type.contains.asString(),
1036
+ "",
1037
+ );
965
1038
  case "=":
966
- return FilterEqualsToType.SerializeToString(type.equalsTo.asString());
1039
+ return FilterEqualsToType.SerializeToString(
1040
+ // type.equalsTo.asString(),
1041
+ "",
1042
+ );
967
1043
  case "!=":
968
1044
  return FilterNotEqualsToType.SerializeToString(
969
- type.notEqualsTo.asString(),
1045
+ // type.notEqualsTo.asString(),
1046
+ "",
970
1047
  );
971
1048
  case ">=":
972
1049
  return FilterGreaterThanOrEqualsToType.SerializeToString(
973
- type.greaterThanOrEqualsTo.asString(),
1050
+ // type.greaterThanOrEqualsTo.asString(),
1051
+ "",
974
1052
  );
975
1053
  case ">":
976
1054
  return FilterGreaterThanType.SerializeToString(
977
- type.greaterThan.asString(),
1055
+ "",
1056
+ // type.greaterThan.asString(),
978
1057
  );
979
1058
  case "!=null":
980
1059
  return FilterIsNotNullType.SerializeToString();
@@ -982,24 +1061,50 @@ export const DispatchParsedType = {
982
1061
  return FilterIsNullType.SerializeToString();
983
1062
  case "<=":
984
1063
  return FilterSmallerThanOrEqualsToType.SerializeToString(
985
- type.smallerThanOrEqualsTo.asString(),
1064
+ "",
1065
+ // type.smallerThanOrEqualsTo.asString(),
986
1066
  );
987
1067
  case "<":
988
1068
  return FilterSmallerThanType.SerializeToString(
989
- type.smallerThan.asString(),
1069
+ // type.smallerThan.asString(),
1070
+ "",
990
1071
  );
991
1072
  case "startsWith":
992
1073
  return FilterStartsWithType.SerializeToString(
993
- type.startsWith.asString(),
1074
+ // type.startsWith.asString(),
1075
+ "",
994
1076
  );
995
1077
  default:
996
1078
  throw new Error(`Unknown type: ${JSON.stringify(type)}`);
997
1079
  }
998
1080
  },
1081
+ GetExtendedRecordTypes: <T>(
1082
+ extendedTypeName: DispatchTypeName,
1083
+ alreadyParsedTypes: Map<
1084
+ DispatchTypeName,
1085
+ ValueOrErrors<DispatchParsedType<T>, string>
1086
+ >,
1087
+ ): ValueOrErrors<[string, RecordType<T>], string> => {
1088
+ return MapRepo.Operations.tryFindWithError(
1089
+ extendedTypeName,
1090
+ alreadyParsedTypes,
1091
+ () => `cannot find extended type ${extendedTypeName} in types`,
1092
+ ).Then((extendedType) =>
1093
+ extendedType.Then((extendedType) =>
1094
+ extendedType.kind != "record"
1095
+ ? ValueOrErrors.Default.throwOne<
1096
+ [DispatchTypeName, RecordType<T>],
1097
+ string
1098
+ >(`Error: ${JSON.stringify(extendedType)} is not a record type`)
1099
+ : ValueOrErrors.Default.return<
1100
+ [DispatchTypeName, RecordType<T>],
1101
+ string
1102
+ >([extendedTypeName, extendedType]),
1103
+ ),
1104
+ );
1105
+ },
999
1106
  ParseRecord: <T>(
1000
- typeName: DispatchTypeName,
1001
1107
  rawType: unknown,
1002
- typeNames: Set<DispatchTypeName>,
1003
1108
  serializedTypes: Record<string, SerializedType<T>>,
1004
1109
  alreadyParsedTypes: Map<
1005
1110
  DispatchTypeName,
@@ -1013,51 +1118,54 @@ export const DispatchParsedType = {
1013
1118
  ],
1014
1119
  string
1015
1120
  > =>
1016
- // will already been parsed if it was extended by another type which was already parsed
1017
- alreadyParsedTypes.has(typeName)
1018
- ? alreadyParsedTypes
1019
- .get(typeName)!
1020
- .Then((parsedType) =>
1021
- parsedType.kind != "record"
1022
- ? ValueOrErrors.Default.throwOne(
1023
- `Error: ${JSON.stringify(parsedType)} is not a record type`,
1024
- )
1025
- : ValueOrErrors.Default.return([
1026
- parsedType,
1027
- alreadyParsedTypes,
1028
- ]),
1029
- )
1030
- : !SerializedType.isRecord(rawType)
1031
- ? ValueOrErrors.Default.throwOne(
1032
- `Error: ${JSON.stringify(rawType)} is not a valid record`,
1033
- )
1034
- : (SerializedType.isExtendedType(rawType)
1035
- ? ValueOrErrors.Operations.All(
1036
- List<
1037
- ValueOrErrors<[DispatchTypeName, RecordType<T>], string>
1038
- >(
1039
- rawType.extends.map((extendedTypeName) =>
1040
- alreadyParsedTypes.has(extendedTypeName)
1041
- ? alreadyParsedTypes
1042
- .get(extendedTypeName)!
1043
- .Then((extendedType) =>
1044
- extendedType.kind != "record"
1045
- ? ValueOrErrors.Default.throwOne<
1046
- [DispatchTypeName, RecordType<T>],
1047
- string
1048
- >(
1049
- `Error: ${JSON.stringify(
1050
- extendedType,
1051
- )} is not a record type`,
1052
- )
1053
- : ValueOrErrors.Default.return<
1054
- [DispatchTypeName, RecordType<T>],
1055
- string
1056
- >([extendedTypeName, extendedType]),
1057
- )
1121
+ !SerializedType.isRecord(rawType)
1122
+ ? ValueOrErrors.Default.throwOne(
1123
+ `Error: ${JSON.stringify(rawType)} is not a valid record`,
1124
+ )
1125
+ : (SerializedType.isExtendedType(rawType)
1126
+ ? rawType.extends
1127
+ .reduce<
1128
+ ValueOrErrors<
1129
+ [
1130
+ Map<DispatchTypeName, RecordType<T>>,
1131
+ Map<
1132
+ DispatchTypeName,
1133
+ ValueOrErrors<DispatchParsedType<T>, string>
1134
+ >,
1135
+ ],
1136
+ string
1137
+ >
1138
+ >(
1139
+ (acc, extendedTypeName) =>
1140
+ acc.Then(([resultMap, accumulatedAlreadyParsedTypes]) =>
1141
+ accumulatedAlreadyParsedTypes.has(extendedTypeName)
1142
+ ? DispatchParsedType.Operations.GetExtendedRecordTypes(
1143
+ extendedTypeName,
1144
+ accumulatedAlreadyParsedTypes,
1145
+ ).Then(([extendedTypeName, recordType]) =>
1146
+ ValueOrErrors.Default.return<
1147
+ [
1148
+ Map<DispatchTypeName, RecordType<T>>,
1149
+ Map<
1150
+ DispatchTypeName,
1151
+ ValueOrErrors<DispatchParsedType<T>, string>
1152
+ >,
1153
+ ],
1154
+ string
1155
+ >([
1156
+ resultMap.set(extendedTypeName, recordType),
1157
+ accumulatedAlreadyParsedTypes,
1158
+ ]),
1159
+ )
1058
1160
  : serializedTypes[extendedTypeName] == undefined
1059
1161
  ? ValueOrErrors.Default.throwOne<
1060
- [DispatchTypeName, RecordType<T>],
1162
+ [
1163
+ Map<DispatchTypeName, RecordType<T>>,
1164
+ Map<
1165
+ DispatchTypeName,
1166
+ ValueOrErrors<DispatchParsedType<T>, string>
1167
+ >,
1168
+ ],
1061
1169
  string
1062
1170
  >(
1063
1171
  `Error: cannot find extended type ${extendedTypeName} in types`,
@@ -1065,18 +1173,46 @@ export const DispatchParsedType = {
1065
1173
  : DispatchParsedType.Operations.ParseRawType(
1066
1174
  extendedTypeName,
1067
1175
  serializedTypes[extendedTypeName],
1068
- typeNames,
1069
1176
  serializedTypes,
1070
- alreadyParsedTypes,
1177
+ accumulatedAlreadyParsedTypes,
1071
1178
  injectedPrimitives,
1072
1179
  ).Then((parsedType) =>
1073
1180
  parsedType[0].kind == "record"
1074
1181
  ? ValueOrErrors.Default.return<
1075
- [DispatchTypeName, RecordType<T>],
1182
+ [
1183
+ Map<DispatchTypeName, RecordType<T>>,
1184
+ Map<
1185
+ DispatchTypeName,
1186
+ ValueOrErrors<
1187
+ DispatchParsedType<T>,
1188
+ string
1189
+ >
1190
+ >,
1191
+ ],
1076
1192
  string
1077
- >([extendedTypeName, parsedType[0]])
1193
+ >([
1194
+ resultMap.set(
1195
+ extendedTypeName,
1196
+ parsedType[0],
1197
+ ),
1198
+ parsedType[1].set(
1199
+ extendedTypeName,
1200
+ ValueOrErrors.Default.return(
1201
+ parsedType[0],
1202
+ ),
1203
+ ),
1204
+ ])
1078
1205
  : ValueOrErrors.Default.throwOne<
1079
- [DispatchTypeName, RecordType<T>],
1206
+ [
1207
+ Map<DispatchTypeName, RecordType<T>>,
1208
+ Map<
1209
+ DispatchTypeName,
1210
+ ValueOrErrors<
1211
+ DispatchParsedType<T>,
1212
+ string
1213
+ >
1214
+ >,
1215
+ ],
1080
1216
  string
1081
1217
  >(
1082
1218
  `Error: ${JSON.stringify(
@@ -1085,84 +1221,33 @@ export const DispatchParsedType = {
1085
1221
  ),
1086
1222
  ),
1087
1223
  ),
1088
- ),
1089
- )
1090
- .MapErrors((errors) =>
1091
- errors.map(
1092
- (error) => `${error}\n...When parsing extended types`,
1093
- ),
1094
- )
1095
- .Then((parsedExtendedRecordTypes) =>
1096
- ValueOrErrors.Default.return<
1097
- Map<DispatchTypeName, RecordType<T>>,
1098
- string
1099
- >(
1100
- parsedExtendedRecordTypes.reduce(
1101
- (acc, type) => acc.set(type[0], type[1]),
1102
- Map<DispatchTypeName, RecordType<T>>(),
1103
- ),
1104
- ),
1105
- )
1106
- : ValueOrErrors.Default.return<
1107
- Map<DispatchTypeName, RecordType<T>>,
1108
- string
1109
- >(Map<DispatchTypeName, RecordType<T>>())
1110
- ).Then((parsedExtendedRecordTypesMap) =>
1111
- ValueOrErrors.Operations.All(
1112
- List(
1113
- Object.entries(rawType.fields).map(([fieldName, fieldType]) =>
1114
- DispatchParsedType.Operations.ParseRawType(
1115
- fieldName,
1116
- fieldType as SerializedType<T>,
1117
- typeNames,
1118
- serializedTypes,
1119
- alreadyParsedTypes,
1120
- injectedPrimitives,
1121
- ).Then((parsedField) =>
1122
- ValueOrErrors.Default.return<
1123
- readonly [
1124
- string,
1125
- [
1126
- DispatchParsedType<T>,
1127
- Map<
1128
- string,
1129
- ValueOrErrors<DispatchParsedType<T>, string>
1130
- >,
1131
- ],
1132
- ],
1133
- string
1134
- >([fieldName, parsedField] as const),
1135
- ),
1136
- ),
1137
- ),
1138
- )
1139
- .Then((parsedFields) =>
1140
1224
  ValueOrErrors.Default.return<
1141
- Map<string, DispatchParsedType<T>>,
1225
+ [
1226
+ Map<DispatchTypeName, RecordType<T>>,
1227
+ Map<
1228
+ DispatchTypeName,
1229
+ ValueOrErrors<DispatchParsedType<T>, string>
1230
+ >,
1231
+ ],
1142
1232
  string
1143
- >(
1144
- Map(
1145
- parsedFields.map(([fieldName, parsedField]) => [
1146
- fieldName,
1147
- parsedField[0],
1148
- ]),
1149
- ),
1233
+ >([
1234
+ Map<DispatchTypeName, RecordType<T>>(),
1235
+ alreadyParsedTypes,
1236
+ ]),
1237
+ )
1238
+ .MapErrors((errors) =>
1239
+ errors.map(
1240
+ (error) => `${error}\n...When parsing extended types`,
1150
1241
  ),
1151
1242
  )
1152
- .Then((parsedFieldsMap) =>
1153
- ValueOrErrors.Default.return<RecordType<T>, string>(
1154
- DispatchParsedType.Default.record(
1155
- parsedFieldsMap.merge(
1156
- parsedExtendedRecordTypesMap.reduce(
1157
- (acc, type) => acc.merge(type.fields),
1158
- Map<DispatchTypeName, DispatchParsedType<T>>(),
1159
- ),
1160
- ),
1161
- ),
1162
- ).Then((parsedRecord) =>
1243
+ .Then(
1244
+ ([
1245
+ parsedExtendedRecordTypesMap,
1246
+ accumulatedAlreadyParsedTypes,
1247
+ ]) =>
1163
1248
  ValueOrErrors.Default.return<
1164
1249
  [
1165
- RecordType<T>,
1250
+ Map<DispatchTypeName, RecordType<T>>,
1166
1251
  Map<
1167
1252
  DispatchTypeName,
1168
1253
  ValueOrErrors<DispatchParsedType<T>, string>
@@ -1170,16 +1255,135 @@ export const DispatchParsedType = {
1170
1255
  ],
1171
1256
  string
1172
1257
  >([
1173
- parsedRecord,
1258
+ parsedExtendedRecordTypesMap,
1259
+ accumulatedAlreadyParsedTypes,
1260
+ ]),
1261
+ )
1262
+ : ValueOrErrors.Default.return<
1263
+ [
1264
+ Map<DispatchTypeName, RecordType<T>>,
1265
+ Map<
1266
+ DispatchTypeName,
1267
+ ValueOrErrors<DispatchParsedType<T>, string>
1268
+ >,
1269
+ ],
1270
+ string
1271
+ >([Map<DispatchTypeName, RecordType<T>>(), alreadyParsedTypes])
1272
+ ).Then(
1273
+ ([parsedExtendedRecordTypesMap, accumulatedAlreadyParsedTypes]) =>
1274
+ Object.keys(rawType.fields)
1275
+ .reduce<
1276
+ ValueOrErrors<
1277
+ [
1278
+ Map<string, DispatchParsedType<T>>,
1279
+ Map<
1280
+ DispatchTypeName,
1281
+ ValueOrErrors<DispatchParsedType<T>, string>
1282
+ >,
1283
+ ],
1284
+ string
1285
+ >
1286
+ >(
1287
+ (acc, fieldName) =>
1288
+ acc.Then(
1289
+ ([
1290
+ parsedFieldsMap,
1291
+ accumulatedAlreadyParsedTypesForFields,
1292
+ ]) =>
1293
+ DispatchParsedType.Operations.ParseRawType(
1294
+ `Record field type: ${fieldName}`,
1295
+ (rawType.fields as Record<string, unknown>)[
1296
+ fieldName
1297
+ ] as SerializedType<T>,
1298
+ serializedTypes,
1299
+ accumulatedAlreadyParsedTypesForFields,
1300
+ injectedPrimitives,
1301
+ ).Then((parsedField) =>
1302
+ ValueOrErrors.Default.return<
1303
+ [
1304
+ Map<string, DispatchParsedType<T>>,
1305
+ Map<
1306
+ DispatchTypeName,
1307
+ ValueOrErrors<DispatchParsedType<T>, string>
1308
+ >,
1309
+ ],
1310
+ string
1311
+ >([
1312
+ parsedFieldsMap.set(fieldName, parsedField[0]),
1313
+ parsedField[1],
1314
+ ]),
1315
+ ),
1316
+ ),
1317
+ ValueOrErrors.Default.return<
1318
+ [
1319
+ Map<string, DispatchParsedType<T>>,
1320
+ Map<
1321
+ DispatchTypeName,
1322
+ ValueOrErrors<DispatchParsedType<T>, string>
1323
+ >,
1324
+ ],
1325
+ string
1326
+ >([
1327
+ Map<string, DispatchParsedType<T>>(),
1328
+ accumulatedAlreadyParsedTypes,
1329
+ ]),
1330
+ )
1331
+ .Then(
1332
+ ([
1333
+ parsedFieldsMap,
1334
+ accumulatedAlreadyParsedTypesForFields,
1335
+ ]) => {
1336
+ const { mergedFields, updatedAccumulatedTypes } =
1174
1337
  parsedExtendedRecordTypesMap.reduce(
1175
- (acc, type, name) =>
1176
- acc.set(name, ValueOrErrors.Default.return(type)),
1177
- alreadyParsedTypes,
1338
+ (
1339
+ acc,
1340
+ type,
1341
+ name,
1342
+ ): {
1343
+ mergedFields: Map<
1344
+ DispatchTypeName,
1345
+ DispatchParsedType<T>
1346
+ >;
1347
+ updatedAccumulatedTypes: Map<
1348
+ DispatchTypeName,
1349
+ ValueOrErrors<DispatchParsedType<T>, string>
1350
+ >;
1351
+ } => ({
1352
+ mergedFields: acc.mergedFields.merge(type.fields),
1353
+ updatedAccumulatedTypes:
1354
+ acc.updatedAccumulatedTypes.set(
1355
+ name,
1356
+ ValueOrErrors.Default.return(type),
1357
+ ),
1358
+ }),
1359
+ {
1360
+ mergedFields: Map<
1361
+ DispatchTypeName,
1362
+ DispatchParsedType<T>
1363
+ >(),
1364
+ updatedAccumulatedTypes:
1365
+ accumulatedAlreadyParsedTypesForFields,
1366
+ },
1367
+ );
1368
+ return ValueOrErrors.Default.return<RecordType<T>, string>(
1369
+ DispatchParsedType.Default.record(
1370
+ parsedFieldsMap.merge(mergedFields),
1178
1371
  ),
1179
- ]),
1180
- ),
1372
+ ).Then((parsedRecord) =>
1373
+ ValueOrErrors.Default.return<
1374
+ [
1375
+ RecordType<T>,
1376
+ Map<
1377
+ DispatchTypeName,
1378
+ ValueOrErrors<DispatchParsedType<T>, string>
1379
+ >,
1380
+ ],
1381
+ string
1382
+ >([parsedRecord, updatedAccumulatedTypes]),
1383
+ );
1384
+ },
1181
1385
  ),
1182
- ),
1386
+ ),
1183
1387
  ParseRawFilterType: <T>(
1184
1388
  rawFilterType: unknown,
1185
1389
  arg: DispatchParsedType<T>,
@@ -1244,7 +1448,6 @@ export const DispatchParsedType = {
1244
1448
  ParseRawType: <T>(
1245
1449
  typeName: DispatchTypeName,
1246
1450
  rawType: SerializedType<T>,
1247
- typeNames: Set<DispatchTypeName>,
1248
1451
  serializedTypes: Record<string, SerializedType<T>>,
1249
1452
  alreadyParsedTypes: Map<
1250
1453
  DispatchTypeName,
@@ -1258,6 +1461,15 @@ export const DispatchParsedType = {
1258
1461
  ],
1259
1462
  string
1260
1463
  > => {
1464
+ if (
1465
+ alreadyParsedTypes.has(typeName) &&
1466
+ !SerializedType.isLookup(rawType, injectedPrimitives)
1467
+ )
1468
+ return alreadyParsedTypes
1469
+ .get(typeName)!
1470
+ .Then((parsedType) =>
1471
+ ValueOrErrors.Default.return([parsedType, alreadyParsedTypes]),
1472
+ );
1261
1473
  const result: ValueOrErrors<
1262
1474
  [
1263
1475
  DispatchParsedType<T>,
@@ -1265,16 +1477,13 @@ export const DispatchParsedType = {
1265
1477
  ],
1266
1478
  string
1267
1479
  > = (() => {
1268
- const stringyTypes = [
1269
- "guid",
1270
- "entityIdUUID",
1271
- "entityIdString",
1272
- "calculatedDisplayValue",
1273
- ];
1274
1480
  if (SerializedType.isPrimitive(rawType, injectedPrimitives))
1275
1481
  return ValueOrErrors.Default.return([
1276
1482
  DispatchParsedType.Default.primitive(
1277
- typeof rawType === "string" && stringyTypes.includes(rawType)
1483
+ typeof rawType === "string" &&
1484
+ STRINGY_TYPES.includes(
1485
+ rawType as (typeof STRINGY_TYPES)[number],
1486
+ )
1278
1487
  ? "string"
1279
1488
  : rawType,
1280
1489
  ),
@@ -1284,89 +1493,79 @@ export const DispatchParsedType = {
1284
1493
  return DispatchParsedType.Operations.ParseRawType(
1285
1494
  `SingleSelection:Element`,
1286
1495
  rawType.args[0],
1287
- typeNames,
1288
1496
  serializedTypes,
1289
1497
  alreadyParsedTypes,
1290
1498
  injectedPrimitives,
1291
- ).Then((parsedArgs) =>
1499
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1292
1500
  ValueOrErrors.Default.return([
1293
- DispatchParsedType.Default.singleSelection([parsedArgs[0]]),
1294
- alreadyParsedTypes,
1501
+ DispatchParsedType.Default.singleSelection([parsedArg]),
1502
+ newAlreadyParsedTypes,
1295
1503
  ]),
1296
1504
  );
1297
1505
  if (SerializedType.isMultiSelection(rawType))
1298
1506
  return DispatchParsedType.Operations.ParseRawType(
1299
1507
  `MultiSelection:Element`,
1300
1508
  rawType.args[0],
1301
- typeNames,
1302
1509
  serializedTypes,
1303
1510
  alreadyParsedTypes,
1304
1511
  injectedPrimitives,
1305
- ).Then((parsedArgs) =>
1512
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1306
1513
  ValueOrErrors.Default.return([
1307
- DispatchParsedType.Default.multiSelection([parsedArgs[0]]),
1308
- alreadyParsedTypes,
1514
+ DispatchParsedType.Default.multiSelection([parsedArg]),
1515
+ newAlreadyParsedTypes,
1309
1516
  ]),
1310
1517
  );
1311
1518
  if (SerializedType.isList(rawType))
1312
1519
  return DispatchParsedType.Operations.ParseRawType(
1313
1520
  `List:Element`,
1314
1521
  rawType.args[0],
1315
- typeNames,
1316
1522
  serializedTypes,
1317
1523
  alreadyParsedTypes,
1318
1524
  injectedPrimitives,
1319
- ).Then((parsedArgs) =>
1525
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1320
1526
  ValueOrErrors.Default.return([
1321
- DispatchParsedType.Default.list([parsedArgs[0]]),
1322
- alreadyParsedTypes,
1527
+ DispatchParsedType.Default.list([parsedArg]),
1528
+ newAlreadyParsedTypes,
1323
1529
  ]),
1324
1530
  );
1325
1531
  if (SerializedType.isTuple(rawType))
1326
- return ValueOrErrors.Operations.All(
1327
- List(
1328
- rawType.args.map((arg, index) =>
1329
- DispatchParsedType.Operations.ParseRawType(
1330
- `Tuple:Item ${index + 1}`,
1331
- arg,
1332
- typeNames,
1333
- serializedTypes,
1334
- alreadyParsedTypes,
1335
- injectedPrimitives,
1336
- ),
1337
- ),
1338
- ),
1339
- ).Then((parsedArgs) =>
1340
- ValueOrErrors.Default.return([
1341
- DispatchParsedType.Default.tuple(
1342
- parsedArgs.map(([parsedArg]) => parsedArg).toArray(),
1343
- ),
1344
- alreadyParsedTypes,
1345
- ]),
1346
- );
1532
+ return rawType.args
1533
+ .reduce<
1534
+ ValueOrErrors<
1535
+ [
1536
+ List<DispatchParsedType<T>>,
1537
+ Map<
1538
+ DispatchTypeName,
1539
+ ValueOrErrors<DispatchParsedType<T>, string>
1540
+ >,
1541
+ ],
1542
+ string
1543
+ >
1544
+ >((acc, arg, index) => acc.Then(([parsedArgsList, accumulatedAlreadyParsedTypes]) => DispatchParsedType.Operations.ParseRawType(`Tuple:Item ${index + 1}`, arg, serializedTypes, accumulatedAlreadyParsedTypes, injectedPrimitives).Then((parsedArg) => ValueOrErrors.Default.return<[List<DispatchParsedType<T>>, Map<DispatchTypeName, ValueOrErrors<DispatchParsedType<T>, string>>], string>([parsedArgsList.push(parsedArg[0]), parsedArg[1]]))), ValueOrErrors.Default.return<[List<DispatchParsedType<T>>, Map<DispatchTypeName, ValueOrErrors<DispatchParsedType<T>, string>>], string>([List<DispatchParsedType<T>>(), alreadyParsedTypes]))
1545
+ .Then(([parsedArgsList, accumulatedAlreadyParsedTypes]) =>
1546
+ ValueOrErrors.Default.return([
1547
+ DispatchParsedType.Default.tuple(parsedArgsList.toArray()),
1548
+ accumulatedAlreadyParsedTypes,
1549
+ ]),
1550
+ );
1347
1551
  if (SerializedType.isMap(rawType))
1348
1552
  return DispatchParsedType.Operations.ParseRawType(
1349
1553
  "Map:Key",
1350
1554
  rawType.args[0],
1351
- typeNames,
1352
1555
  serializedTypes,
1353
1556
  alreadyParsedTypes,
1354
1557
  injectedPrimitives,
1355
- ).Then((parsedArgs0) =>
1558
+ ).Then(([parsedArg0, newAlreadyParsedTypes]) =>
1356
1559
  DispatchParsedType.Operations.ParseRawType(
1357
1560
  "Map:Value",
1358
1561
  rawType.args[1],
1359
- typeNames,
1360
1562
  serializedTypes,
1361
- alreadyParsedTypes,
1563
+ newAlreadyParsedTypes,
1362
1564
  injectedPrimitives,
1363
- ).Then((parsedArgs1) =>
1565
+ ).Then(([parsedArg1, newAlreadyParsedTypes2]) =>
1364
1566
  ValueOrErrors.Default.return([
1365
- DispatchParsedType.Default.map([
1366
- parsedArgs0[0],
1367
- parsedArgs1[0],
1368
- ]),
1369
- alreadyParsedTypes,
1567
+ DispatchParsedType.Default.map([parsedArg0, parsedArg1]),
1568
+ newAlreadyParsedTypes2,
1370
1569
  ]),
1371
1570
  ),
1372
1571
  );
@@ -1374,33 +1573,26 @@ export const DispatchParsedType = {
1374
1573
  return DispatchParsedType.Operations.ParseRawType(
1375
1574
  "Sum:Left",
1376
1575
  rawType.args[0],
1377
- typeNames,
1378
1576
  serializedTypes,
1379
1577
  alreadyParsedTypes,
1380
1578
  injectedPrimitives,
1381
- ).Then((parsedArgs0) =>
1579
+ ).Then(([parsedArg0, newAlreadyParsedTypes]) =>
1382
1580
  DispatchParsedType.Operations.ParseRawType(
1383
1581
  "Sum:Right",
1384
1582
  rawType.args[1],
1385
- typeNames,
1386
1583
  serializedTypes,
1387
- alreadyParsedTypes,
1584
+ newAlreadyParsedTypes,
1388
1585
  injectedPrimitives,
1389
- ).Then((parsedArgs1) =>
1586
+ ).Then(([parsedArg1, newAlreadyParsedTypes2]) =>
1390
1587
  ValueOrErrors.Default.return([
1391
- DispatchParsedType.Default.sum([
1392
- parsedArgs0[0],
1393
- parsedArgs1[0],
1394
- ]),
1395
- alreadyParsedTypes,
1588
+ DispatchParsedType.Default.sum([parsedArg0, parsedArg1]),
1589
+ newAlreadyParsedTypes2,
1396
1590
  ]),
1397
1591
  ),
1398
1592
  );
1399
1593
  if (SerializedType.isRecord(rawType))
1400
1594
  return DispatchParsedType.Operations.ParseRecord(
1401
- typeName,
1402
1595
  rawType,
1403
- typeNames,
1404
1596
  serializedTypes,
1405
1597
  alreadyParsedTypes,
1406
1598
  injectedPrimitives,
@@ -1409,26 +1601,56 @@ export const DispatchParsedType = {
1409
1601
  return DispatchParsedType.Operations.ParseRawType(
1410
1602
  "TableArg",
1411
1603
  rawType.args[0],
1412
- typeNames,
1413
1604
  serializedTypes,
1414
1605
  alreadyParsedTypes,
1415
1606
  injectedPrimitives,
1416
- ).Then((parsedArg) =>
1417
- parsedArg[0].kind != "lookup"
1607
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1608
+ parsedArg.kind != "lookup"
1418
1609
  ? ValueOrErrors.Default.throwOne(
1419
- `Error: ${JSON.stringify(parsedArg[0])} is not a lookup type`,
1610
+ `Error: ${JSON.stringify(parsedArg)} is not a lookup type`,
1420
1611
  )
1421
1612
  : ValueOrErrors.Default.return([
1422
- DispatchParsedType.Default.table(parsedArg[0]),
1423
- alreadyParsedTypes,
1613
+ DispatchParsedType.Default.table(parsedArg),
1614
+ newAlreadyParsedTypes,
1424
1615
  ]),
1425
1616
  );
1426
1617
  }
1427
- if (SerializedType.isLookup(rawType, typeNames))
1428
- return ValueOrErrors.Default.return([
1429
- DispatchParsedType.Default.lookup(rawType),
1618
+ if (SerializedType.isLookup(rawType, injectedPrimitives)) {
1619
+ const resolvedType = serializedTypes[rawType];
1620
+ if (!resolvedType) {
1621
+ return ValueOrErrors.Default.throwOne(
1622
+ `Error: ${JSON.stringify(rawType)} is not a valid lookup type (not found in serializedTypes)`,
1623
+ );
1624
+ }
1625
+ if (!isString(rawType)) {
1626
+ return ValueOrErrors.Default.throwOne(
1627
+ `Error: ${JSON.stringify(rawType)} is not a valid lookup type (not a string)`,
1628
+ );
1629
+ }
1630
+ if (alreadyParsedTypes.has(rawType)) {
1631
+ return ValueOrErrors.Default.return([
1632
+ DispatchParsedType.Default.lookup(rawType),
1633
+ alreadyParsedTypes,
1634
+ ]);
1635
+ }
1636
+
1637
+ return DispatchParsedType.Operations.ParseRawType(
1638
+ rawType,
1639
+ resolvedType,
1640
+ serializedTypes,
1430
1641
  alreadyParsedTypes,
1431
- ]);
1642
+ injectedPrimitives,
1643
+ ).Then(([parsedType, newAlreadyParsedTypes]) =>
1644
+ ValueOrErrors.Default.return([
1645
+ DispatchParsedType.Default.lookup(rawType),
1646
+ newAlreadyParsedTypes.set(
1647
+ rawType,
1648
+ ValueOrErrors.Default.return(parsedType),
1649
+ ),
1650
+ ]),
1651
+ );
1652
+ }
1653
+
1432
1654
  if (SerializedType.isUnit(rawType)) {
1433
1655
  return ValueOrErrors.Default.return([
1434
1656
  DispatchParsedType.Default.primitive("unit"),
@@ -1436,91 +1658,121 @@ export const DispatchParsedType = {
1436
1658
  ]);
1437
1659
  }
1438
1660
  if (SerializedType.isUnion(rawType))
1439
- // for now we assume all union cases are lookup types
1440
- return ValueOrErrors.Operations.All(
1441
- List<ValueOrErrors<[string, DispatchParsedType<T>], string>>(
1442
- rawType.args.map((unionCase) =>
1443
- DispatchParsedType.Operations.ParseRawType(
1444
- `Union:Case ${unionCase.caseName}`,
1445
- unionCase.fields == undefined
1446
- ? { fields: {} }
1447
- : // we allow the record fields to be defined directly in the spec instead of
1448
- // inside a fields key
1449
- SerializedType.isRecordFields(unionCase.fields)
1450
- ? { fields: unionCase.fields }
1451
- : unionCase.fields,
1452
- typeNames,
1453
- serializedTypes,
1454
- alreadyParsedTypes,
1455
- injectedPrimitives,
1456
- ).Then((parsedType) =>
1457
- ValueOrErrors.Default.return([
1458
- unionCase.caseName,
1459
- parsedType[0],
1460
- ]),
1661
+ return rawType.args
1662
+ .reduce<
1663
+ ValueOrErrors<
1664
+ [
1665
+ Map<string, DispatchParsedType<T>>,
1666
+ Map<
1667
+ DispatchTypeName,
1668
+ ValueOrErrors<DispatchParsedType<T>, string>
1669
+ >,
1670
+ ],
1671
+ string
1672
+ >
1673
+ >(
1674
+ (acc, unionCase) =>
1675
+ acc.Then(
1676
+ ([parsedUnionCasesMap, accumulatedAlreadyParsedTypes]) =>
1677
+ DispatchParsedType.Operations.ParseRawType(
1678
+ isString(unionCase.fields)
1679
+ ? unionCase.fields
1680
+ : `Union:Case ${unionCase.caseName}`,
1681
+ unionCase.fields == undefined
1682
+ ? { fields: {} }
1683
+ : // we allow the record fields to be defined directly in the spec instead of
1684
+ // inside a fields key
1685
+ SerializedType.isRecordFields(unionCase.fields)
1686
+ ? { fields: unionCase.fields }
1687
+ : unionCase.fields,
1688
+ serializedTypes,
1689
+ accumulatedAlreadyParsedTypes,
1690
+ injectedPrimitives,
1691
+ ).Then(([parsedType, newAlreadyParsedTypes]) =>
1692
+ ValueOrErrors.Default.return<
1693
+ [
1694
+ Map<string, DispatchParsedType<T>>,
1695
+ Map<
1696
+ DispatchTypeName,
1697
+ ValueOrErrors<DispatchParsedType<T>, string>
1698
+ >,
1699
+ ],
1700
+ string
1701
+ >([
1702
+ parsedUnionCasesMap.set(unionCase.caseName, parsedType),
1703
+ newAlreadyParsedTypes,
1704
+ ]),
1705
+ ),
1461
1706
  ),
1462
- ),
1463
- ),
1464
- ).Then((parsedUnionCases) =>
1465
- ValueOrErrors.Default.return([
1466
- DispatchParsedType.Default.union(Map(parsedUnionCases)),
1467
- alreadyParsedTypes,
1468
- ]),
1469
- );
1470
- if (SerializedType.isOne(rawType))
1707
+ ValueOrErrors.Default.return<
1708
+ [
1709
+ Map<string, DispatchParsedType<T>>,
1710
+ Map<
1711
+ DispatchTypeName,
1712
+ ValueOrErrors<DispatchParsedType<T>, string>
1713
+ >,
1714
+ ],
1715
+ string
1716
+ >([Map<string, DispatchParsedType<T>>(), alreadyParsedTypes]),
1717
+ )
1718
+ .Then(([parsedUnionCasesMap, accumulatedAlreadyParsedTypes]) =>
1719
+ ValueOrErrors.Default.return([
1720
+ DispatchParsedType.Default.union(parsedUnionCasesMap),
1721
+ accumulatedAlreadyParsedTypes,
1722
+ ]),
1723
+ );
1724
+ if (SerializedType.isOne(rawType)) {
1471
1725
  return DispatchParsedType.Operations.ParseRawType(
1472
- "One:Element",
1726
+ rawType.args[0] as string,
1473
1727
  rawType.args[0],
1474
- typeNames,
1475
1728
  serializedTypes,
1476
1729
  alreadyParsedTypes,
1477
1730
  injectedPrimitives,
1478
- ).Then((parsedArg) =>
1479
- parsedArg[0].kind != "lookup"
1731
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1732
+ parsedArg.kind != "lookup"
1480
1733
  ? ValueOrErrors.Default.throwOne(
1481
- `one content type ${JSON.stringify(parsedArg[0])} is not a lookup type`,
1734
+ `one content type ${JSON.stringify(parsedArg)} is not a lookup type`,
1482
1735
  )
1483
1736
  : ValueOrErrors.Default.return([
1484
- DispatchParsedType.Default.one(parsedArg[0]),
1485
- alreadyParsedTypes,
1737
+ DispatchParsedType.Default.one(parsedArg),
1738
+ newAlreadyParsedTypes,
1486
1739
  ]),
1487
1740
  );
1741
+ }
1488
1742
  if (SerializedType.isReadOnly(rawType))
1489
1743
  return DispatchParsedType.Operations.ParseRawType(
1490
1744
  "ReadOnly:Element",
1491
1745
  rawType.args[0],
1492
- typeNames,
1493
1746
  serializedTypes,
1494
1747
  alreadyParsedTypes,
1495
1748
  injectedPrimitives,
1496
- ).Then(([parsedArg, _]) =>
1749
+ ).Then(([parsedArg, newAlreadyParsedTypes]) =>
1497
1750
  ValueOrErrors.Default.return([
1498
1751
  DispatchParsedType.Default.readOnly(parsedArg),
1499
- alreadyParsedTypes,
1752
+ newAlreadyParsedTypes,
1500
1753
  ]),
1501
1754
  );
1502
1755
  if (SerializedType.isKeyOf(rawType))
1503
1756
  return DispatchParsedType.Operations.ParseRawKeyOf(
1504
1757
  rawType,
1505
- typeNames,
1506
1758
  serializedTypes,
1507
1759
  alreadyParsedTypes,
1760
+ injectedPrimitives,
1508
1761
  );
1509
1762
  if (SerializedType.isTranslationOverride(rawType))
1510
1763
  return DispatchParsedType.Operations.ParseRawType(
1511
1764
  "TranslationOverride:Language",
1512
1765
  rawType.args[0],
1513
- typeNames,
1514
1766
  serializedTypes,
1515
1767
  alreadyParsedTypes,
1516
1768
  injectedPrimitives,
1517
- ).Then(([parsedArg0, ..._]) =>
1769
+ ).Then(([parsedArg0, newAlreadyParsedTypes]) =>
1518
1770
  ValueOrErrors.Default.return([
1519
1771
  DispatchParsedType.Default.map([
1520
1772
  DispatchParsedType.Default.singleSelection([parsedArg0]),
1521
1773
  DispatchParsedType.Default.primitive("string"),
1522
1774
  ]),
1523
- alreadyParsedTypes,
1775
+ newAlreadyParsedTypes,
1524
1776
  ]),
1525
1777
  );
1526
1778
  return ValueOrErrors.Default.throwOne(