synstate 3.4.0 → 4.1.0

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 (305) hide show
  1. package/README.md +13 -8
  2. package/dist/core/authoring.d.mts +7 -0
  3. package/dist/core/authoring.d.mts.map +1 -0
  4. package/dist/core/authoring.mjs +7 -0
  5. package/dist/core/authoring.mjs.map +1 -0
  6. package/dist/core/class/child-observable-class.d.mts +93 -0
  7. package/dist/core/class/child-observable-class.d.mts.map +1 -0
  8. package/dist/core/class/child-observable-class.mjs +248 -0
  9. package/dist/core/class/child-observable-class.mjs.map +1 -0
  10. package/dist/core/class/create-child-observable.d.mts +159 -0
  11. package/dist/core/class/create-child-observable.d.mts.map +1 -0
  12. package/dist/core/class/create-child-observable.mjs +183 -0
  13. package/dist/core/class/create-child-observable.mjs.map +1 -0
  14. package/dist/core/class/create-root-observable.d.mts +37 -0
  15. package/dist/core/class/create-root-observable.d.mts.map +1 -0
  16. package/dist/core/class/create-root-observable.mjs +52 -0
  17. package/dist/core/class/create-root-observable.mjs.map +1 -0
  18. package/dist/core/class/index.d.mts +9 -0
  19. package/dist/core/class/index.d.mts.map +1 -0
  20. package/dist/core/class/index.mjs +9 -0
  21. package/dist/core/class/index.mjs.map +1 -0
  22. package/dist/core/class/manager-observable-class.d.mts +26 -0
  23. package/dist/core/class/manager-observable-class.d.mts.map +1 -0
  24. package/dist/core/class/manager-observable-class.mjs +116 -0
  25. package/dist/core/class/manager-observable-class.mjs.map +1 -0
  26. package/dist/core/class/observable-base-class.d.mts +97 -0
  27. package/dist/core/class/observable-base-class.d.mts.map +1 -0
  28. package/dist/core/class/observable-base-class.mjs +219 -0
  29. package/dist/core/class/observable-base-class.mjs.map +1 -0
  30. package/dist/core/class/observable-node.d.mts +40 -0
  31. package/dist/core/class/observable-node.d.mts.map +1 -0
  32. package/dist/core/class/observable-node.mjs +10 -0
  33. package/dist/core/class/observable-node.mjs.map +1 -0
  34. package/dist/core/class/propagation-state.d.mts +24 -0
  35. package/dist/core/class/propagation-state.d.mts.map +1 -0
  36. package/dist/core/class/propagation-state.mjs +66 -0
  37. package/dist/core/class/propagation-state.mjs.map +1 -0
  38. package/dist/core/class/root-observable-class.d.mts +23 -0
  39. package/dist/core/class/root-observable-class.d.mts.map +1 -0
  40. package/dist/core/class/root-observable-class.mjs +58 -0
  41. package/dist/core/class/root-observable-class.mjs.map +1 -0
  42. package/dist/core/combine/combine.d.mts.map +1 -1
  43. package/dist/core/combine/combine.mjs +25 -14
  44. package/dist/core/combine/combine.mjs.map +1 -1
  45. package/dist/core/combine/merge.d.mts.map +1 -1
  46. package/dist/core/combine/merge.mjs +26 -14
  47. package/dist/core/combine/merge.mjs.map +1 -1
  48. package/dist/core/combine/zip.d.mts.map +1 -1
  49. package/dist/core/combine/zip.mjs +43 -25
  50. package/dist/core/combine/zip.mjs.map +1 -1
  51. package/dist/core/create/counter.d.mts.map +1 -1
  52. package/dist/core/create/counter.mjs +65 -44
  53. package/dist/core/create/counter.mjs.map +1 -1
  54. package/dist/core/create/empty.d.mts +32 -0
  55. package/dist/core/create/empty.d.mts.map +1 -0
  56. package/dist/core/create/empty.mjs +39 -0
  57. package/dist/core/create/empty.mjs.map +1 -0
  58. package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
  59. package/dist/core/create/from-abortable-promise.mjs +26 -18
  60. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  61. package/dist/core/create/from-promise.d.mts.map +1 -1
  62. package/dist/core/create/from-promise.mjs +30 -21
  63. package/dist/core/create/from-promise.mjs.map +1 -1
  64. package/dist/core/create/from-subscribable.d.mts.map +1 -1
  65. package/dist/core/create/from-subscribable.mjs +37 -24
  66. package/dist/core/create/from-subscribable.mjs.map +1 -1
  67. package/dist/core/create/index.d.mts +1 -0
  68. package/dist/core/create/index.d.mts.map +1 -1
  69. package/dist/core/create/index.mjs +1 -0
  70. package/dist/core/create/index.mjs.map +1 -1
  71. package/dist/core/create/just.d.mts.map +1 -1
  72. package/dist/core/create/just.mjs +4 -2
  73. package/dist/core/create/just.mjs.map +1 -1
  74. package/dist/core/create/source.d.mts.map +1 -1
  75. package/dist/core/create/source.mjs +27 -17
  76. package/dist/core/create/source.mjs.map +1 -1
  77. package/dist/core/create/timer.d.mts.map +1 -1
  78. package/dist/core/create/timer.mjs +40 -25
  79. package/dist/core/create/timer.mjs.map +1 -1
  80. package/dist/core/index.d.mts +2 -0
  81. package/dist/core/index.d.mts.map +1 -1
  82. package/dist/core/index.mjs +2 -0
  83. package/dist/core/index.mjs.map +1 -1
  84. package/dist/core/operators/audit.d.mts +3 -0
  85. package/dist/core/operators/audit.d.mts.map +1 -1
  86. package/dist/core/operators/audit.mjs +56 -28
  87. package/dist/core/operators/audit.mjs.map +1 -1
  88. package/dist/core/operators/debounce.d.mts +3 -0
  89. package/dist/core/operators/debounce.d.mts.map +1 -1
  90. package/dist/core/operators/debounce.mjs +57 -26
  91. package/dist/core/operators/debounce.mjs.map +1 -1
  92. package/dist/core/operators/filter.d.mts.map +1 -1
  93. package/dist/core/operators/filter.mjs +35 -21
  94. package/dist/core/operators/filter.mjs.map +1 -1
  95. package/dist/core/operators/index.d.mts +1 -0
  96. package/dist/core/operators/index.d.mts.map +1 -1
  97. package/dist/core/operators/index.mjs +1 -0
  98. package/dist/core/operators/index.mjs.map +1 -1
  99. package/dist/core/operators/map.d.mts.map +1 -1
  100. package/dist/core/operators/map.mjs +31 -17
  101. package/dist/core/operators/map.mjs.map +1 -1
  102. package/dist/core/operators/merge-map.d.mts +5 -0
  103. package/dist/core/operators/merge-map.d.mts.map +1 -1
  104. package/dist/core/operators/merge-map.mjs +52 -26
  105. package/dist/core/operators/merge-map.mjs.map +1 -1
  106. package/dist/core/operators/pairwise.d.mts.map +1 -1
  107. package/dist/core/operators/pairwise.mjs +31 -20
  108. package/dist/core/operators/pairwise.mjs.map +1 -1
  109. package/dist/core/operators/scan.d.mts.map +1 -1
  110. package/dist/core/operators/scan.mjs +27 -14
  111. package/dist/core/operators/scan.mjs.map +1 -1
  112. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  113. package/dist/core/operators/skip-if-no-change.mjs +33 -19
  114. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  115. package/dist/core/operators/skip-until.d.mts.map +1 -1
  116. package/dist/core/operators/skip-until.mjs +40 -26
  117. package/dist/core/operators/skip-until.mjs.map +1 -1
  118. package/dist/core/operators/skip-while.d.mts.map +1 -1
  119. package/dist/core/operators/skip-while.mjs +35 -20
  120. package/dist/core/operators/skip-while.mjs.map +1 -1
  121. package/dist/core/operators/switch-map.d.mts +5 -0
  122. package/dist/core/operators/switch-map.d.mts.map +1 -1
  123. package/dist/core/operators/switch-map.mjs +56 -25
  124. package/dist/core/operators/switch-map.mjs.map +1 -1
  125. package/dist/core/operators/take-until.d.mts.map +1 -1
  126. package/dist/core/operators/take-until.mjs +36 -29
  127. package/dist/core/operators/take-until.mjs.map +1 -1
  128. package/dist/core/operators/take-while.d.mts.map +1 -1
  129. package/dist/core/operators/take-while.mjs +36 -22
  130. package/dist/core/operators/take-while.mjs.map +1 -1
  131. package/dist/core/{predefined/operators → operators}/take.d.mts +7 -3
  132. package/dist/core/operators/take.d.mts.map +1 -0
  133. package/dist/core/operators/take.mjs +102 -0
  134. package/dist/core/operators/take.mjs.map +1 -0
  135. package/dist/core/operators/throttle.d.mts.map +1 -1
  136. package/dist/core/operators/throttle.mjs +41 -26
  137. package/dist/core/operators/throttle.mjs.map +1 -1
  138. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  139. package/dist/core/operators/with-buffered-from.mjs +43 -39
  140. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  141. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  142. package/dist/core/operators/with-current-value-from.mjs +36 -21
  143. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  144. package/dist/core/operators/with-initial-value.d.mts.map +1 -1
  145. package/dist/core/operators/with-initial-value.mjs +24 -12
  146. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  147. package/dist/core/predefined/operators/index.d.mts +0 -1
  148. package/dist/core/predefined/operators/index.d.mts.map +1 -1
  149. package/dist/core/predefined/operators/index.mjs +0 -1
  150. package/dist/core/predefined/operators/index.mjs.map +1 -1
  151. package/dist/core/scope/index.d.mts +2 -0
  152. package/dist/core/scope/index.d.mts.map +1 -0
  153. package/dist/core/scope/index.mjs +2 -0
  154. package/dist/core/scope/index.mjs.map +1 -0
  155. package/dist/core/scope/scope.d.mts +51 -0
  156. package/dist/core/scope/scope.d.mts.map +1 -0
  157. package/dist/core/scope/scope.mjs +194 -0
  158. package/dist/core/scope/scope.mjs.map +1 -0
  159. package/dist/core/types/id.d.mts +0 -2
  160. package/dist/core/types/id.d.mts.map +1 -1
  161. package/dist/core/types/index.d.mts +1 -0
  162. package/dist/core/types/index.d.mts.map +1 -1
  163. package/dist/core/types/index.mjs +1 -0
  164. package/dist/core/types/index.mjs.map +1 -1
  165. package/dist/core/types/observable-family.d.mts +1 -0
  166. package/dist/core/types/observable-family.d.mts.map +1 -1
  167. package/dist/core/types/observable.d.mts +40 -28
  168. package/dist/core/types/observable.d.mts.map +1 -1
  169. package/dist/core/types/observable.mjs +24 -0
  170. package/dist/core/types/observable.mjs.map +1 -1
  171. package/dist/core/types/scope.d.mts +27 -0
  172. package/dist/core/types/scope.d.mts.map +1 -0
  173. package/dist/core/types/scope.mjs +2 -0
  174. package/dist/core/types/scope.mjs.map +1 -0
  175. package/dist/core/utils/current-scope.d.mts +30 -0
  176. package/dist/core/utils/current-scope.d.mts.map +1 -0
  177. package/dist/core/utils/current-scope.mjs +26 -0
  178. package/dist/core/utils/current-scope.mjs.map +1 -0
  179. package/dist/core/utils/id-maker.d.mts +14 -3
  180. package/dist/core/utils/id-maker.d.mts.map +1 -1
  181. package/dist/core/utils/id-maker.mjs +18 -14
  182. package/dist/core/utils/id-maker.mjs.map +1 -1
  183. package/dist/core/utils/index.d.mts +2 -1
  184. package/dist/core/utils/index.d.mts.map +1 -1
  185. package/dist/core/utils/index.mjs +2 -1
  186. package/dist/core/utils/index.mjs.map +1 -1
  187. package/dist/core/utils/max-depth.d.mts +1 -0
  188. package/dist/core/utils/max-depth.d.mts.map +1 -1
  189. package/dist/core/utils/max-depth.mjs +9 -7
  190. package/dist/core/utils/max-depth.mjs.map +1 -1
  191. package/dist/core/utils/observable-brand.d.mts +13 -0
  192. package/dist/core/utils/observable-brand.d.mts.map +1 -0
  193. package/dist/core/utils/observable-brand.mjs +13 -0
  194. package/dist/core/utils/observable-brand.mjs.map +1 -0
  195. package/dist/utils/create-boolean-state.d.mts +2 -2
  196. package/dist/utils/create-reducer.d.mts +7 -7
  197. package/dist/utils/create-reducer.mjs +2 -2
  198. package/dist/utils/create-reducer.mjs.map +1 -1
  199. package/dist/utils/create-state.d.mts +2 -2
  200. package/package.json +17 -17
  201. package/src/core/authoring.mts +19 -0
  202. package/src/core/class/child-observable-class.mts +374 -0
  203. package/src/core/{base → class}/circular-dependency-comparison.test.mts +46 -38
  204. package/src/core/{base → class}/circular-dependency.test.mts +38 -2
  205. package/src/core/class/complete-propagation.test.mts +264 -0
  206. package/src/core/class/create-child-observable.mts +370 -0
  207. package/src/core/class/create-root-observable.mts +107 -0
  208. package/src/core/class/index.mts +8 -0
  209. package/src/core/class/manager-observable-class.mts +166 -0
  210. package/src/core/class/observable-base-class.mts +315 -0
  211. package/src/core/{base → class}/observable-base.test.mts +1 -1
  212. package/src/core/class/observable-node.mts +54 -0
  213. package/src/core/class/propagation-order.test.mts +92 -0
  214. package/src/core/class/propagation-state.mts +80 -0
  215. package/src/core/class/remove-completed.test.mts +369 -0
  216. package/src/core/class/root-observable-class.mts +85 -0
  217. package/src/core/{base → class}/write-during-propagation.test.mts +3 -3
  218. package/src/core/combine/combine.mts +67 -55
  219. package/src/core/combine/merge.mts +33 -23
  220. package/src/core/combine/zip.mts +95 -81
  221. package/src/core/create/counter.mts +95 -65
  222. package/src/core/create/empty.mts +42 -0
  223. package/src/core/create/empty.test.mts +65 -0
  224. package/src/core/create/from-abortable-promise.mts +54 -42
  225. package/src/core/create/from-promise.mts +38 -29
  226. package/src/core/create/from-subscribable.mts +62 -45
  227. package/src/core/create/from-subscribable.test.mts +8 -3
  228. package/src/core/create/index.mts +1 -0
  229. package/src/core/create/just.mts +4 -5
  230. package/src/core/create/source.mts +29 -20
  231. package/src/core/create/timer.mts +51 -32
  232. package/src/core/index.mts +2 -0
  233. package/src/core/operators/audit.mts +79 -45
  234. package/src/core/operators/debounce-audit-complete.test.mts +121 -0
  235. package/src/core/operators/debounce.mts +81 -40
  236. package/src/core/operators/filter.mts +48 -31
  237. package/src/core/operators/index.mts +1 -0
  238. package/src/core/operators/inner-ownership.test.mts +280 -0
  239. package/src/core/operators/map.mts +49 -32
  240. package/src/core/operators/merge-map.mts +81 -43
  241. package/src/core/operators/pairwise.mts +40 -30
  242. package/src/core/operators/scan.mts +41 -24
  243. package/src/core/operators/skip-if-no-change.mts +45 -31
  244. package/src/core/operators/skip-until.mts +55 -41
  245. package/src/core/operators/skip-while.mts +49 -31
  246. package/src/core/operators/switch-map.mts +74 -35
  247. package/src/core/operators/take-until-skip-until-teardown.test.mts +18 -12
  248. package/src/core/operators/take-until.mts +45 -41
  249. package/src/core/operators/take-while.mts +50 -33
  250. package/src/core/operators/take.mts +138 -0
  251. package/src/core/operators/throttle.mts +55 -38
  252. package/src/core/operators/with-buffered-from.mts +42 -44
  253. package/src/core/operators/with-buffered-from.test.mts +4 -3
  254. package/src/core/operators/with-current-value-from.mts +39 -25
  255. package/src/core/operators/with-initial-value.mts +30 -21
  256. package/src/core/predefined/operators/index.mts +0 -1
  257. package/src/core/scope/index.mts +1 -0
  258. package/src/core/scope/scope.mts +260 -0
  259. package/src/core/scope/scope.test.mts +462 -0
  260. package/src/core/types/id.mts +0 -4
  261. package/src/core/types/index.mts +1 -0
  262. package/src/core/types/observable-family.mts +2 -0
  263. package/src/core/types/observable.mts +77 -42
  264. package/src/core/types/scope.mts +27 -0
  265. package/src/core/utils/current-scope.mts +61 -0
  266. package/src/core/utils/id-maker.mts +20 -30
  267. package/src/core/utils/index.mts +2 -1
  268. package/src/core/utils/max-depth.mts +12 -9
  269. package/src/core/utils/observable-brand.mts +12 -0
  270. package/src/utils/create-boolean-state.mts +2 -2
  271. package/src/utils/create-boolean-state.test.mts +18 -4
  272. package/src/utils/create-reducer.mts +9 -9
  273. package/src/utils/create-reducer.test.mts +31 -14
  274. package/src/utils/create-state.mts +2 -2
  275. package/src/utils/create-state.test.mts +12 -14
  276. package/dist/core/base/create-child-observable.d.mts +0 -72
  277. package/dist/core/base/create-child-observable.d.mts.map +0 -1
  278. package/dist/core/base/create-child-observable.mjs +0 -285
  279. package/dist/core/base/create-child-observable.mjs.map +0 -1
  280. package/dist/core/base/create-observable-base.d.mts +0 -149
  281. package/dist/core/base/create-observable-base.d.mts.map +0 -1
  282. package/dist/core/base/create-observable-base.mjs +0 -273
  283. package/dist/core/base/create-observable-base.mjs.map +0 -1
  284. package/dist/core/base/create-root-observable.d.mts +0 -46
  285. package/dist/core/base/create-root-observable.d.mts.map +0 -1
  286. package/dist/core/base/create-root-observable.mjs +0 -80
  287. package/dist/core/base/create-root-observable.mjs.map +0 -1
  288. package/dist/core/base/index.d.mts +0 -3
  289. package/dist/core/base/index.d.mts.map +0 -1
  290. package/dist/core/base/index.mjs +0 -3
  291. package/dist/core/base/index.mjs.map +0 -1
  292. package/dist/core/predefined/operators/take.d.mts.map +0 -1
  293. package/dist/core/predefined/operators/take.mjs +0 -44
  294. package/dist/core/predefined/operators/take.mjs.map +0 -1
  295. package/dist/core/utils/utils.d.mts +0 -6
  296. package/dist/core/utils/utils.d.mts.map +0 -1
  297. package/dist/core/utils/utils.mjs +0 -37
  298. package/dist/core/utils/utils.mjs.map +0 -1
  299. package/src/core/base/create-child-observable.mts +0 -485
  300. package/src/core/base/create-observable-base.mts +0 -568
  301. package/src/core/base/create-root-observable.mts +0 -147
  302. package/src/core/base/index.mts +0 -2
  303. package/src/core/predefined/operators/take.mts +0 -48
  304. package/src/core/utils/utils.mts +0 -56
  305. package/src/core/utils/utils.test.mts +0 -88
@@ -0,0 +1,183 @@
1
+
2
+
3
+
4
+
5
+ import { Arr } from 'ts-data-forge';
6
+ import { unreachable } from 'ts-std-forge';
7
+ import { AsyncChildObservableClass, SyncChildObservableClass, } from './child-observable-class.mjs';
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+ export const createSyncChildObservable = (config, init) => new CustomSyncChildObservableClass(config, init);
64
+
65
+
66
+
67
+
68
+
69
+
70
+ export const createInitializedSyncChildObservable = (config, init) =>
71
+
72
+
73
+
74
+ new CustomSyncChildObservableClass(config, init);
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+ export const createAsyncChildObservable = (config, init) => new CustomAsyncChildObservableClass(config, init);
84
+
85
+
86
+
87
+
88
+ export const createTryUpdateNotImplemented = () => tryUpdateNotImplemented;
89
+ const tryUpdateNotImplemented = () => {
90
+ unreachable();
91
+ };
92
+
93
+ class CustomSyncChildObservableClass extends SyncChildObservableClass {
94
+ #mut_teardowns;
95
+ #hooks;
96
+ constructor(config, init) {
97
+ super(config);
98
+ this.#mut_teardowns = undefined;
99
+ this.#hooks = toHooks(init({
100
+ setNext: (nextValue, updateToken) => {
101
+ this.setNext(nextValue, updateToken);
102
+ },
103
+ getSnapshot: () => this.getSnapshot(),
104
+ complete: () => {
105
+ this.complete();
106
+ },
107
+ completeAfterPropagation: () => {
108
+ this.completeAfterPropagation();
109
+ },
110
+ onComplete: (teardown) => {
111
+ if (this.isCompleted) {
112
+ teardown();
113
+ }
114
+ else {
115
+ this.#mut_teardowns = Arr.toPushed(this.#mut_teardowns ?? [], teardown);
116
+ }
117
+ },
118
+ }));
119
+ this.attach();
120
+ }
121
+ tryUpdate(updateToken) {
122
+ this.#hooks.tryUpdate(updateToken);
123
+ }
124
+ canEmitNoMore() {
125
+ return this.#hooks.canEmitNoMore?.() === true;
126
+ }
127
+ teardown() {
128
+ for (const teardown of this.#mut_teardowns ?? []) {
129
+ teardown();
130
+ }
131
+ }
132
+ }
133
+ class CustomAsyncChildObservableClass extends AsyncChildObservableClass {
134
+ #mut_teardowns;
135
+ #hooks;
136
+ constructor(config, init) {
137
+ super(config);
138
+ this.#mut_teardowns = undefined;
139
+ this.#hooks = toHooks(init({
140
+ setNext: (nextValue, updateToken) => {
141
+ this.setNext(nextValue, updateToken);
142
+ },
143
+ startUpdate: (nextValue) => {
144
+ this.startUpdate(nextValue);
145
+ },
146
+ getSnapshot: () => this.getSnapshot(),
147
+ complete: () => {
148
+ this.complete();
149
+ },
150
+ completeAfterPropagation: () => {
151
+ this.completeAfterPropagation();
152
+ },
153
+ onComplete: (teardown) => {
154
+ if (this.isCompleted) {
155
+ teardown();
156
+ }
157
+ else {
158
+ this.#mut_teardowns = Arr.toPushed(this.#mut_teardowns ?? [], teardown);
159
+ }
160
+ },
161
+ }));
162
+ this.attach();
163
+ }
164
+ tryUpdate(updateToken) {
165
+ this.#hooks.tryUpdate(updateToken);
166
+ }
167
+ canEmitNoMore() {
168
+ return this.#hooks.canEmitNoMore?.() === true;
169
+ }
170
+ flush() {
171
+ this.#hooks.flush?.();
172
+ }
173
+ teardown() {
174
+ for (const teardown of this.#mut_teardowns ?? []) {
175
+ teardown();
176
+ }
177
+ }
178
+ }
179
+
180
+ const toHooks = (returned) => typeof returned === 'function'
181
+ ? { tryUpdate: returned }
182
+ : returned;
183
+ //# sourceMappingURL=create-child-observable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/class/create-child-observable.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type Optional } from 'ts-data-forge';
2
+ import type { ReadonlyRecord } from 'ts-type-forge';
3
+ import type { RootObservable } from '../types/index.mjs';
4
+ /**
5
+ * The tools a custom root's `init` receives: the `protected` methods a
6
+ * subclass of `RootObservableClass` inherits.
7
+ */
8
+ export type RootObservableTools<A> = Readonly<{
9
+ /** Emits `nextValue` and propagates the update to all descendants. */
10
+ startUpdate: (nextValue: A) => void;
11
+ getSnapshot: () => Optional<A>;
12
+ isCompleted: () => boolean;
13
+ /** Completes this observable (leaf teardown included). */
14
+ complete: () => void;
15
+ /**
16
+ * Registers a teardown (clear timers, abort requests, remove listeners, …)
17
+ * to run at the beginning of `complete()`, in the order registered. Called
18
+ * from `init`, it lets the teardown close over what `init` creates.
19
+ * Registered once the observable has completed — `init` may complete it
20
+ * synchronously first — the teardown runs at once.
21
+ */
22
+ onComplete: (teardown: () => void) => void;
23
+ }>;
24
+ export type RootObservableConfig<A> = Readonly<{
25
+ initialValue: Optional<A>;
26
+ }>;
27
+ /**
28
+ * Creates a root observable, for a custom creator written without a class
29
+ * of its own.
30
+ *
31
+ * `init` runs during construction, receives the tools, and returns extra
32
+ * public members to merge into the observable (e.g. `next` for a source,
33
+ * `start` for a timer). It may register asynchronous callbacks that use the
34
+ * tools, and may call `complete` synchronously.
35
+ */
36
+ export declare const createRootObservable: <A, Extension extends ReadonlyRecord<string, unknown> = ReadonlyRecord<never, never>>({ initialValue }: RootObservableConfig<A>, init: (tools: RootObservableTools<A>) => Extension) => Extension & RootObservable<A>;
37
+ //# sourceMappingURL=create-root-observable.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-root-observable.d.mts","sourceRoot":"","sources":["../../../src/core/class/create-root-observable.mts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC5C,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;IAEpC,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7C,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,CAAC,EAGD,SAAS,SAAS,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAChE,KAAK,EACL,KAAK,CACN,oBAEiB,oBAAoB,CAAC,CAAC,CAAC,QACnC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,SAAS,KACjD,SAAS,GAAG,cAAc,CAAC,CAAC,CAIV,CAAC"}
@@ -0,0 +1,52 @@
1
+
2
+
3
+
4
+
5
+ import { Arr } from 'ts-data-forge';
6
+ import { RootObservableClass } from './root-observable-class.mjs';
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export const createRootObservable = ({ initialValue }, init) =>
17
+
18
+
19
+ new CustomRootObservableClass(initialValue, init);
20
+
21
+ class CustomRootObservableClass extends RootObservableClass {
22
+ #mut_teardowns;
23
+ constructor(initialValue, init) {
24
+ super({ initialValue });
25
+ this.#mut_teardowns = undefined;
26
+ const extension = init({
27
+ startUpdate: (nextValue) => {
28
+ this.startUpdate(nextValue);
29
+ },
30
+ getSnapshot: () => this.getSnapshot(),
31
+ isCompleted: () => this.isCompleted,
32
+ complete: () => {
33
+ this.complete();
34
+ },
35
+ onComplete: (teardown) => {
36
+ if (this.isCompleted) {
37
+ teardown();
38
+ }
39
+ else {
40
+ this.#mut_teardowns = Arr.toPushed(this.#mut_teardowns ?? [], teardown);
41
+ }
42
+ },
43
+ });
44
+ Object.assign(this, extension);
45
+ }
46
+ teardown() {
47
+ for (const teardown of this.#mut_teardowns ?? []) {
48
+ teardown();
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=create-root-observable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-root-observable.mjs","sourceRoot":"","sources":["../../../src/core/class/create-root-observable.mts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,GAAG,EAAiB,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AA+BlE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CASlC,EAAE,YAAY,EAA2B,EACzC,IAAkD,EACnB,EAAE;AACjC,8DAA8D;AAC9D,4DAA4D;AAC5D,IAAI,yBAAyB,CAAC,YAAY,EAAE,IAAI,CAC7B,CAAC;AAEtB,oBAAoB;AAEpB,MAAM,yBAA6B,SAAQ,mBAAsB;IAC/D,cAAc,CAAsC;IAEpD,YACE,YAAyB,EACzB,IAAwE;QAExE,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC;YACrB,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE;gBACzB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;YACD,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;YACrC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW;YACnC,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;YACD,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,QAAQ,EAAE,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ,CAChC,IAAI,CAAC,cAAc,IAAI,EAAE,EACzB,QAAQ,CACT,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;IAEkB,QAAQ;QACzB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YACjD,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export * from './child-observable-class.mjs';
2
+ export * from './create-child-observable.mjs';
3
+ export * from './create-root-observable.mjs';
4
+ export * from './manager-observable-class.mjs';
5
+ export * from './observable-base-class.mjs';
6
+ export * from './observable-node.mjs';
7
+ export * from './propagation-state.mjs';
8
+ export * from './root-observable-class.mjs';
9
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/class/index.mts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './child-observable-class.mjs';
2
+ export * from './create-child-observable.mjs';
3
+ export * from './create-root-observable.mjs';
4
+ export * from './manager-observable-class.mjs';
5
+ export * from './observable-base-class.mjs';
6
+ export * from './observable-node.mjs';
7
+ export * from './propagation-state.mjs';
8
+ export * from './root-observable-class.mjs';
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/class/index.mts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Optional } from 'ts-data-forge';
2
+ import type { ManagerObservableKind } from '../types/index.mjs';
3
+ import { ObservableBaseClass } from './observable-base-class.mjs';
4
+ import type { ChildNode, ManagerNode } from './observable-node.mjs';
5
+ /**
6
+ * The base of the observables that start updates of their own: a root, and
7
+ * an async child (`debounce`, `switchMap`), which emits later than its
8
+ * parents do. Every descendant registers to the managers it is reached from,
9
+ * and an update reaches them in ascending depth, so that each sees its
10
+ * parents' values of that update (no glitch).
11
+ */
12
+ export declare class ManagerObservableClass<A, Kind extends ManagerObservableKind, Depth extends number> extends ObservableBaseClass<A, Kind, Depth> {
13
+ #private;
14
+ /** The managers this node's descendants register to: itself. */
15
+ readonly managers: readonly ManagerNode[];
16
+ constructor(config: Readonly<{
17
+ kind: Kind;
18
+ depth: Depth;
19
+ initialValue: Optional<A>;
20
+ }>);
21
+ addDescendant(child: ChildNode): void;
22
+ deleteDescendant(child: ChildNode): void;
23
+ /** Emits `nextValue` and propagates it to the descendants. */
24
+ protected startUpdate(nextValue: A): void;
25
+ }
26
+ //# sourceMappingURL=manager-observable-class.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpE;;;;;;GAMG;AACH,qBAAa,sBAAsB,CACjC,CAAC,EACD,IAAI,SAAS,qBAAqB,EAClC,KAAK,SAAS,MAAM,CACpB,SAAQ,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;;IA4B3C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAE1C,YACE,MAAM,EAAE,QAAQ,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC;QACb,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,EAWH;IAmBD,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAyBpC;IAED,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAGvC;IAED,8DAA8D;IAC9D,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CA0CxC;CACF"}
@@ -0,0 +1,116 @@
1
+ import { issueUpdateToken } from '../utils/index.mjs';
2
+ import { ObservableBaseClass } from './observable-base-class.mjs';
3
+ import { beginPropagation, endPropagation } from './propagation-state.mjs';
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ export class ManagerObservableClass extends ObservableBaseClass {
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+ #mut_propagationOrder;
27
+
28
+ #mut_isPropagating;
29
+
30
+
31
+
32
+
33
+
34
+
35
+ #mut_joinedDuringUpdate;
36
+
37
+ managers;
38
+ constructor(config) {
39
+ super(config);
40
+ this.managers = [this];
41
+ this.#mut_propagationOrder = [];
42
+ this.#mut_isPropagating = false;
43
+ this.#mut_joinedDuringUpdate = undefined;
44
+ }
45
+
46
+
47
+
48
+
49
+ #propagate(updateToken) {
50
+ for (const bucket of this.#mut_propagationOrder) {
51
+ if (bucket !== undefined) {
52
+ for (const c of bucket) {
53
+
54
+ if (this.#mut_joinedDuringUpdate?.has(c) !== true) {
55
+ c.tryUpdate(updateToken);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ addDescendant(child) {
62
+ const descendants = this.#mut_propagationOrder;
63
+ const index = child.depth - this.depth - 1;
64
+ const mut_bucket = descendants[index];
65
+ if (mut_bucket === undefined) {
66
+
67
+
68
+ this.#mut_propagationOrder = Array.from({ length: Math.max(descendants.length, index + 1) }, (_, i) => (i === index ? new Set([child]) : descendants[i]));
69
+ }
70
+ else {
71
+ mut_bucket.add(child);
72
+ }
73
+ if (!this.#mut_isPropagating) {
74
+ return;
75
+ }
76
+ this.#mut_joinedDuringUpdate ??= new Set();
77
+ this.#mut_joinedDuringUpdate.add(child);
78
+ }
79
+ deleteDescendant(child) {
80
+
81
+ this.#mut_propagationOrder[child.depth - this.depth - 1]?.delete(child);
82
+ }
83
+
84
+ startUpdate(nextValue) {
85
+ const updateToken = issueUpdateToken();
86
+
87
+
88
+ const wasPropagating = this.#mut_isPropagating;
89
+ const joinedBefore = this.#mut_joinedDuringUpdate;
90
+ this.#mut_isPropagating = true;
91
+ this.#mut_joinedDuringUpdate = undefined;
92
+ beginPropagation(updateToken);
93
+
94
+
95
+
96
+
97
+ try {
98
+ this.setNext(nextValue, updateToken);
99
+ this.#propagate(updateToken);
100
+ }
101
+ finally {
102
+
103
+ const joinedNow = this.#mut_joinedDuringUpdate;
104
+ this.#mut_isPropagating = wasPropagating;
105
+ this.#mut_joinedDuringUpdate = joinedBefore;
106
+ if (wasPropagating && joinedNow !== undefined) {
107
+ this.#mut_joinedDuringUpdate ??= new Set();
108
+ for (const c of joinedNow) {
109
+ this.#mut_joinedDuringUpdate.add(c);
110
+ }
111
+ }
112
+ endPropagation();
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=manager-observable-class.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-observable-class.mjs","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { Optional } from 'ts-data-forge';
2
+ import type { DropInitialValueOperator, InitializedObservable, KeepInitialValueOperator, Observable, ObservableBase, ObservableKind, Subscription, UpdateToken, WithInitialValueOperator } from '../types/index.mjs';
3
+ import { observableBrand } from '../utils/index.mjs';
4
+ import type { ChildNode } from './observable-node.mjs';
5
+ /**
6
+ * The base of every observable, and the reason an observable is a class.
7
+ *
8
+ * A node is created for every derived value of a UI, so creating one has to
9
+ * be cheap, and most of its cost was its methods: each observable used to be
10
+ * a set of closures made for it, a dozen or more per node (#2421). Sharing
11
+ * the methods among all nodes removes that cost, and a shared method has to
12
+ * read the node it is called on from `this`. Once `this` is unavoidable, a
13
+ * class is the plainest way to say it: the methods live once on the
14
+ * prototype, `this` is typed, a creator or operator is a subclass that
15
+ * overrides `tryUpdate` (and `flush` / `teardown` where it holds something),
16
+ * and assigning every field in the constructor gives the nodes of one class
17
+ * one shape for V8. The collections (`children`, subscribers) are made when
18
+ * the first one arrives.
19
+ *
20
+ * The methods read the observable they are called on, so taking one off it
21
+ * (`const { subscribe } = obs$`) is not supported.
22
+ *
23
+ * A node reaches another node only through its methods and its public
24
+ * fields, never through a `#private` one: the other node may be an instance
25
+ * of another copy of synstate in the same program, whose classes are not
26
+ * these.
27
+ */
28
+ export declare class ObservableBaseClass<A, Kind extends ObservableKind, Depth extends number> implements ObservableBase<A> {
29
+ #private;
30
+ readonly kind: Kind;
31
+ readonly depth: Depth;
32
+ readonly [observableBrand]: true;
33
+ constructor({ kind, depth, initialValue, }: Readonly<{
34
+ kind: Kind;
35
+ depth: Depth;
36
+ initialValue: Optional<A>;
37
+ }>);
38
+ getSnapshot(): Optional<A>;
39
+ get isCompleted(): boolean;
40
+ get updateToken(): UpdateToken;
41
+ get hasSubscriber(): boolean;
42
+ get hasChild(): boolean;
43
+ hasActiveChild(): boolean;
44
+ addChild(child: ChildNode): void;
45
+ deleteChild(child: ChildNode): void;
46
+ /** Stores `nextValue` as the current value and notifies subscribers. */
47
+ protected setNext(nextValue: A, updateToken: UpdateToken): void;
48
+ /**
49
+ * Called with the token of every update that reaches this observable; a
50
+ * parent that did not emit in that update has a different `updateToken`.
51
+ * Every observable that can receive a parent update overrides it, and an
52
+ * observable with no parents never gets one, so reaching this is the
53
+ * invariant breaking (Sumi D-48).
54
+ */
55
+ tryUpdate(_updateToken: UpdateToken): void;
56
+ /**
57
+ * Called by a parent that has completed. A root has no parents, and a child
58
+ * completing never completes it (#2133), so only its own `complete()` ends
59
+ * it.
60
+ */
61
+ tryComplete(): void;
62
+ /**
63
+ * Completes the observable: an async child first passes on what it still
64
+ * holds (`flush`), then it is disposed. Completing never reaches the
65
+ * parents: an upstream observable may be shared, and only whoever owns it
66
+ * decides when it ends (#2133).
67
+ */
68
+ complete(): void;
69
+ /**
70
+ * Completes the observable without passing on anything it still holds,
71
+ * runs its teardown, and takes it out of the graph.
72
+ */
73
+ dispose(): void;
74
+ /**
75
+ * Passes on what the observable still holds, at the beginning of
76
+ * `complete()` and never in `dispose()` (`debounce`'s pending value).
77
+ */
78
+ protected flush(): void;
79
+ /**
80
+ * Releases what the observable holds (timers, subscriptions, inner
81
+ * observables), once, when it completes or is disposed, before its
82
+ * subscribers hear of it.
83
+ */
84
+ protected teardown(): void;
85
+ /** Takes a completed child out of its parents' and managers' lists. */
86
+ protected detach(): void;
87
+ /**
88
+ * Joins the scope whose `run` is executing (`createScope`), if any. A node
89
+ * that completed while it was built (`just`, a child of completed parents)
90
+ * has nothing left to release.
91
+ */
92
+ protected adoptIntoCurrentScope(): void;
93
+ pipe<B>(operator: WithInitialValueOperator<A, B>): InitializedObservable<B>;
94
+ pipe<B>(operator: DropInitialValueOperator<A, B> | KeepInitialValueOperator<A, B>): Observable<B>;
95
+ subscribe(onNext: (v: A) => void, onComplete?: () => void): Subscription;
96
+ }
97
+ //# sourceMappingURL=observable-base-class.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable-base-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EAGd,YAAY,EACZ,WAAW,EACX,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,eAAe,EAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB,CAC9B,CAAC,EACD,IAAI,SAAS,cAAc,EAC3B,KAAK,SAAS,MAAM,CACpB,YAAW,cAAc,CAAC,CAAC,CAAC;;IAO5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,SAAiB,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAEzC,YAAY,EACV,IAAI,EACJ,KAAK,EACL,YAAY,GACb,EAAE,QAAQ,CAAC;QACV,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC;QACb,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,EAkBD;IAED,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,OAAO,CAI3B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,cAAc,IAAI,OAAO,CAUxB;IAED,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAQ/B;IAED,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAElC;IAED,wEAAwE;IACxE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAU9D;IAED;;;;;;OAMG;IAEH,SAAS,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAEzC;IAED;;;;OAIG;IAEH,WAAW,IAAI,IAAI,CAAG;IAEtB;;;;;OAKG;IACH,QAAQ,IAAI,IAAI,CAQf;IAED;;;OAGG;IACH,OAAO,IAAI,IAAI,CAkCd;IAED;;;OAGG;IAEH,SAAS,CAAC,KAAK,IAAI,IAAI,CAAG;IAE1B;;;;OAIG;IAEH,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAG;IAE7B,uEAAuE;IAEvE,SAAS,CAAC,MAAM,IAAI,IAAI,CAAG;IAE3B;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI,CAUtC;IAKD,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,CAAC,EACJ,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GACxE,UAAU,CAAC,CAAC,CAAC,CAAC;IAUjB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,YAAY,CAuBvE;CACF"}