@ersbeth/picoflow 1.1.2 → 2.0.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 (383) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/CHANGELOG.md +43 -0
  3. package/README.md +2 -18
  4. package/biome.json +45 -35
  5. package/dist/picoflow.js +856 -1530
  6. package/dist/types/api/base/flowDisposable.d.ts +41 -0
  7. package/dist/types/api/base/flowDisposable.d.ts.map +1 -0
  8. package/dist/types/api/base/flowObservable.d.ts +27 -0
  9. package/dist/types/api/base/flowObservable.d.ts.map +1 -0
  10. package/dist/types/api/base/flowSubscribable.d.ts +79 -0
  11. package/dist/types/api/base/flowSubscribable.d.ts.map +1 -0
  12. package/dist/types/api/base/flowTracker.d.ts +8 -0
  13. package/dist/types/api/base/flowTracker.d.ts.map +1 -0
  14. package/dist/types/api/base/index.d.ts +5 -0
  15. package/dist/types/api/base/index.d.ts.map +1 -0
  16. package/dist/types/api/index.d.ts +3 -0
  17. package/dist/types/api/index.d.ts.map +1 -0
  18. package/dist/types/api/nodes/async/flowConstantAsync.d.ts +31 -0
  19. package/dist/types/api/nodes/async/flowConstantAsync.d.ts.map +1 -0
  20. package/dist/types/api/nodes/async/flowDerivationAsync.d.ts +37 -0
  21. package/dist/types/api/nodes/async/flowDerivationAsync.d.ts.map +1 -0
  22. package/dist/types/api/nodes/async/flowStateAsync.d.ts +41 -0
  23. package/dist/types/api/nodes/async/flowStateAsync.d.ts.map +1 -0
  24. package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts +30 -0
  25. package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts.map +1 -0
  26. package/dist/types/{flow → api}/nodes/async/index.d.ts +1 -2
  27. package/dist/types/api/nodes/async/index.d.ts.map +1 -0
  28. package/dist/types/api/nodes/collections/flowArray.d.ts +134 -0
  29. package/dist/types/api/nodes/collections/flowArray.d.ts.map +1 -0
  30. package/dist/types/api/nodes/collections/flowMap.d.ts +98 -0
  31. package/dist/types/api/nodes/collections/flowMap.d.ts.map +1 -0
  32. package/dist/types/api/nodes/collections/index.d.ts.map +1 -0
  33. package/dist/types/api/nodes/flowEffect.d.ts +28 -0
  34. package/dist/types/api/nodes/flowEffect.d.ts.map +1 -0
  35. package/dist/types/api/nodes/flowSignal.d.ts +25 -0
  36. package/dist/types/api/nodes/flowSignal.d.ts.map +1 -0
  37. package/dist/types/api/nodes/flowValue.d.ts +35 -0
  38. package/dist/types/api/nodes/flowValue.d.ts.map +1 -0
  39. package/dist/types/api/nodes/index.d.ts +8 -0
  40. package/dist/types/api/nodes/index.d.ts.map +1 -0
  41. package/dist/types/api/nodes/sync/flowConstant.d.ts +29 -0
  42. package/dist/types/api/nodes/sync/flowConstant.d.ts.map +1 -0
  43. package/dist/types/api/nodes/sync/flowDerivation.d.ts +36 -0
  44. package/dist/types/api/nodes/sync/flowDerivation.d.ts.map +1 -0
  45. package/dist/types/api/nodes/sync/flowState.d.ts +39 -0
  46. package/dist/types/api/nodes/sync/flowState.d.ts.map +1 -0
  47. package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts +28 -0
  48. package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts.map +1 -0
  49. package/dist/types/{flow → api}/nodes/sync/index.d.ts +1 -2
  50. package/dist/types/api/nodes/sync/index.d.ts.map +1 -0
  51. package/dist/types/api/nodes/utils.d.ts +22 -0
  52. package/dist/types/api/nodes/utils.d.ts.map +1 -0
  53. package/dist/types/base/disposable.d.ts +11 -0
  54. package/dist/types/base/disposable.d.ts.map +1 -0
  55. package/dist/types/base/executionStack.d.ts +14 -0
  56. package/dist/types/base/executionStack.d.ts.map +1 -0
  57. package/dist/types/base/index.d.ts +6 -0
  58. package/dist/types/base/index.d.ts.map +1 -0
  59. package/dist/types/base/node.d.ts +27 -0
  60. package/dist/types/base/node.d.ts.map +1 -0
  61. package/dist/types/base/observable.d.ts +37 -0
  62. package/dist/types/base/observable.d.ts.map +1 -0
  63. package/dist/types/base/observer.d.ts +25 -0
  64. package/dist/types/base/observer.d.ts.map +1 -0
  65. package/dist/types/converters/index.d.ts +2 -0
  66. package/dist/types/converters/index.d.ts.map +1 -0
  67. package/dist/types/converters/solid.d.ts +46 -0
  68. package/dist/types/converters/solid.d.ts.map +1 -0
  69. package/dist/types/index.d.ts +2 -63
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/nodes/arrayNode.d.ts +2 -0
  72. package/dist/types/nodes/arrayNode.d.ts.map +1 -0
  73. package/dist/types/nodes/effectNode.d.ts +2 -0
  74. package/dist/types/nodes/effectNode.d.ts.map +1 -0
  75. package/dist/types/nodes/index.d.ts +9 -0
  76. package/dist/types/nodes/index.d.ts.map +1 -0
  77. package/dist/types/nodes/mapNode.d.ts +2 -0
  78. package/dist/types/nodes/mapNode.d.ts.map +1 -0
  79. package/dist/types/nodes/signalNode.d.ts +2 -0
  80. package/dist/types/nodes/signalNode.d.ts.map +1 -0
  81. package/dist/types/nodes/valueAsyncNode.d.ts +2 -0
  82. package/dist/types/nodes/valueAsyncNode.d.ts.map +1 -0
  83. package/dist/types/nodes/valueNode.d.ts +2 -0
  84. package/dist/types/nodes/valueNode.d.ts.map +1 -0
  85. package/dist/types/nodes/valueSyncNode.d.ts +2 -0
  86. package/dist/types/nodes/valueSyncNode.d.ts.map +1 -0
  87. package/dist/types/schedulers/asyncResolver.d.ts +2 -0
  88. package/dist/types/schedulers/asyncResolver.d.ts.map +1 -0
  89. package/dist/types/schedulers/asyncScheduler.d.ts +2 -0
  90. package/dist/types/schedulers/asyncScheduler.d.ts.map +1 -0
  91. package/dist/types/schedulers/index.d.ts +5 -0
  92. package/dist/types/schedulers/index.d.ts.map +1 -0
  93. package/dist/types/schedulers/pendingError.d.ts +2 -0
  94. package/dist/types/schedulers/pendingError.d.ts.map +1 -0
  95. package/dist/types/schedulers/scheduler.d.ts +2 -0
  96. package/dist/types/schedulers/scheduler.d.ts.map +1 -0
  97. package/dist/types/schedulers/syncResolver.d.ts +2 -0
  98. package/dist/types/schedulers/syncResolver.d.ts.map +1 -0
  99. package/dist/types/schedulers/syncScheduler.d.ts +2 -0
  100. package/dist/types/schedulers/syncScheduler.d.ts.map +1 -0
  101. package/docs/.vitepress/config.mts +128 -93
  102. package/docs/api/functions/array.md +14 -37
  103. package/docs/api/functions/constant.md +13 -25
  104. package/docs/api/functions/constantAsync.md +69 -0
  105. package/docs/api/functions/derivation.md +14 -33
  106. package/docs/api/functions/derivationAsync.md +34 -0
  107. package/docs/api/functions/from.md +62 -153
  108. package/docs/api/functions/isDisposable.md +8 -30
  109. package/docs/api/functions/map.md +15 -36
  110. package/docs/api/functions/signal.md +8 -23
  111. package/docs/api/functions/state.md +43 -23
  112. package/docs/api/functions/stateAsync.md +69 -0
  113. package/docs/api/functions/subscribe.md +40 -0
  114. package/docs/api/functions/writableDerivation.md +33 -0
  115. package/docs/api/functions/writableDerivationAsync.md +34 -0
  116. package/docs/api/index.md +45 -102
  117. package/docs/api/interfaces/FlowArray.md +439 -0
  118. package/docs/api/interfaces/FlowConstant.md +220 -0
  119. package/docs/api/interfaces/FlowConstantAsync.md +221 -0
  120. package/docs/api/interfaces/FlowDerivation.md +241 -0
  121. package/docs/api/interfaces/FlowDerivationAsync.md +242 -0
  122. package/docs/api/interfaces/FlowDisposable.md +32 -38
  123. package/docs/api/interfaces/FlowEffect.md +64 -0
  124. package/docs/api/interfaces/FlowMap.md +374 -0
  125. package/docs/api/interfaces/FlowObservable.md +155 -0
  126. package/docs/api/interfaces/FlowSignal.md +156 -0
  127. package/docs/api/interfaces/FlowState.md +269 -0
  128. package/docs/api/interfaces/FlowStateAsync.md +268 -0
  129. package/docs/api/interfaces/FlowSubscribable.md +55 -0
  130. package/docs/api/interfaces/FlowTracker.md +61 -0
  131. package/docs/api/interfaces/FlowValue.md +222 -0
  132. package/docs/api/interfaces/FlowWritableDerivation.md +292 -0
  133. package/docs/api/interfaces/FlowWritableDerivationAsync.md +293 -0
  134. package/docs/api/type-aliases/DerivationFunction.md +28 -0
  135. package/docs/api/type-aliases/DerivationFunctionAsync.md +28 -0
  136. package/docs/api/type-aliases/FlowArrayAction.md +19 -8
  137. package/docs/api/type-aliases/FlowDataTracker.md +33 -0
  138. package/docs/api/type-aliases/FlowMapAction.md +48 -0
  139. package/docs/api/type-aliases/FlowOnDataListener.md +33 -0
  140. package/docs/api/type-aliases/FlowOnErrorListener.md +27 -0
  141. package/docs/api/type-aliases/FlowOnPendingListener.md +21 -0
  142. package/docs/api/type-aliases/FlowReadonly.md +22 -0
  143. package/docs/api/type-aliases/InitFunction.md +21 -0
  144. package/docs/api/type-aliases/InitFunctionAsync.md +21 -0
  145. package/docs/api/type-aliases/NotPromise.md +6 -3
  146. package/docs/api/type-aliases/UpdateFunction.md +27 -0
  147. package/docs/api/type-aliases/UpdateFunctionAsync.md +27 -0
  148. package/docs/api/typedoc-sidebar.json +1 -81
  149. package/docs/examples/examples.md +0 -2
  150. package/docs/guide/advanced/architecture.md +1234 -0
  151. package/docs/guide/advanced/migration-v2.md +204 -0
  152. package/docs/guide/advanced/solidjs.md +2 -88
  153. package/docs/guide/introduction/concepts.md +4 -3
  154. package/docs/guide/introduction/conventions.md +2 -33
  155. package/docs/guide/introduction/getting-started.md +28 -23
  156. package/docs/guide/introduction/lifecycle.md +16 -19
  157. package/docs/guide/primitives/array.md +102 -216
  158. package/docs/guide/primitives/constant.md +39 -212
  159. package/docs/guide/primitives/derivations.md +55 -122
  160. package/docs/guide/primitives/effects.md +155 -241
  161. package/docs/guide/primitives/map.md +64 -186
  162. package/docs/guide/primitives/overview.md +45 -128
  163. package/docs/guide/primitives/signal.md +51 -88
  164. package/docs/guide/primitives/state.md +34 -130
  165. package/package.json +56 -60
  166. package/src/api/base/flowDisposable.ts +44 -0
  167. package/src/api/base/flowObservable.ts +28 -0
  168. package/src/api/base/flowSubscribable.ts +87 -0
  169. package/src/api/base/flowTracker.ts +7 -0
  170. package/src/api/base/index.ts +4 -0
  171. package/src/{flow → api}/index.ts +0 -1
  172. package/src/api/nodes/async/flowConstantAsync.ts +36 -0
  173. package/src/api/nodes/async/flowDerivationAsync.ts +42 -0
  174. package/src/api/nodes/async/flowStateAsync.ts +47 -0
  175. package/src/api/nodes/async/flowWritableDerivationAsync.ts +33 -0
  176. package/src/{flow → api}/nodes/async/index.ts +1 -2
  177. package/src/api/nodes/collections/flowArray.ts +155 -0
  178. package/src/api/nodes/collections/flowMap.ts +115 -0
  179. package/src/api/nodes/flowEffect.ts +42 -0
  180. package/src/api/nodes/flowSignal.ts +28 -0
  181. package/src/api/nodes/flowValue.ts +36 -0
  182. package/src/api/nodes/index.ts +7 -0
  183. package/src/api/nodes/sync/flowConstant.ts +33 -0
  184. package/src/api/nodes/sync/flowDerivation.ts +41 -0
  185. package/src/api/nodes/sync/flowState.ts +45 -0
  186. package/src/api/nodes/sync/flowWritableDerivation.ts +31 -0
  187. package/src/{flow → api}/nodes/sync/index.ts +1 -2
  188. package/src/api/nodes/utils.ts +22 -0
  189. package/src/base/disposable.ts +18 -0
  190. package/src/base/executionStack.ts +42 -0
  191. package/src/base/index.ts +5 -0
  192. package/src/base/node.ts +98 -0
  193. package/src/base/observable.ts +87 -0
  194. package/src/base/observer.ts +51 -0
  195. package/src/converters/index.ts +1 -0
  196. package/src/converters/solid.ts +109 -0
  197. package/src/index.ts +2 -64
  198. package/src/nodes/arrayNode.ts +172 -0
  199. package/src/nodes/effectNode.ts +59 -0
  200. package/src/nodes/index.ts +8 -0
  201. package/src/nodes/mapNode.ts +127 -0
  202. package/src/nodes/signalNode.ts +21 -0
  203. package/src/nodes/valueAsyncNode.ts +88 -0
  204. package/src/nodes/valueNode.ts +144 -0
  205. package/src/nodes/valueSyncNode.ts +128 -0
  206. package/src/schedulers/asyncResolver.ts +78 -0
  207. package/src/schedulers/asyncScheduler.ts +66 -0
  208. package/src/schedulers/index.ts +4 -0
  209. package/src/schedulers/pendingError.ts +13 -0
  210. package/src/schedulers/scheduler.ts +9 -0
  211. package/src/schedulers/syncResolver.ts +69 -0
  212. package/src/schedulers/syncScheduler.ts +55 -0
  213. package/test/base/pendingError.test.ts +67 -0
  214. package/test/converters/solid.derivation.browser.test.tsx +69 -0
  215. package/test/converters/solid.node.test.ts +654 -0
  216. package/test/converters/solid.state.browser.test.tsx +1592 -0
  217. package/test/reactivity/flowSignal.test.ts +226 -0
  218. package/test/reactivity/nodes/async/asyncScheduler/asyncResolver.test.ts +593 -0
  219. package/test/reactivity/nodes/async/asyncScheduler/asyncScheduler.test.ts +317 -0
  220. package/test/reactivity/nodes/async/flowConstantAsync.test.ts +652 -0
  221. package/test/reactivity/nodes/async/flowDerivation.test.ts +898 -0
  222. package/test/reactivity/nodes/async/flowDerivationAsync.test.ts +1716 -0
  223. package/test/reactivity/nodes/async/flowStateAsync.test.ts +708 -0
  224. package/test/reactivity/nodes/async/flowWritableDerivationAsync.test.ts +614 -0
  225. package/test/reactivity/nodes/collections/flowArray.asyncStates.test.ts +1289 -0
  226. package/test/reactivity/nodes/collections/flowArray.scalars.test.ts +961 -0
  227. package/test/reactivity/nodes/collections/flowArray.states.test.ts +1035 -0
  228. package/test/reactivity/nodes/collections/flowMap.asyncStates.test.ts +960 -0
  229. package/test/reactivity/nodes/collections/flowMap.scalars.test.ts +775 -0
  230. package/test/reactivity/nodes/collections/flowMap.states.test.ts +958 -0
  231. package/test/reactivity/nodes/sync/flowConstant.test.ts +377 -0
  232. package/test/reactivity/nodes/sync/flowDerivation.test.ts +896 -0
  233. package/test/reactivity/nodes/sync/flowState.test.ts +341 -0
  234. package/test/reactivity/nodes/sync/flowWritableDerivation.test.ts +603 -0
  235. package/test/vitest.d.ts +10 -0
  236. package/tsconfig.json +31 -20
  237. package/typedoc.json +35 -35
  238. package/vite.config.ts +25 -23
  239. package/vitest.browser.config.ts +21 -0
  240. package/vitest.config.ts +12 -12
  241. package/.cursor/plans/unifier-flowresource-avec-flowderivation-c9506e24.plan.md +0 -372
  242. package/.cursor/plans/update-js-e795d61b.plan.md +0 -567
  243. package/dist/types/flow/base/flowDisposable.d.ts +0 -67
  244. package/dist/types/flow/base/flowDisposable.d.ts.map +0 -1
  245. package/dist/types/flow/base/flowEffect.d.ts +0 -127
  246. package/dist/types/flow/base/flowEffect.d.ts.map +0 -1
  247. package/dist/types/flow/base/flowGraph.d.ts +0 -97
  248. package/dist/types/flow/base/flowGraph.d.ts.map +0 -1
  249. package/dist/types/flow/base/flowSignal.d.ts +0 -134
  250. package/dist/types/flow/base/flowSignal.d.ts.map +0 -1
  251. package/dist/types/flow/base/flowTracker.d.ts +0 -15
  252. package/dist/types/flow/base/flowTracker.d.ts.map +0 -1
  253. package/dist/types/flow/base/index.d.ts +0 -7
  254. package/dist/types/flow/base/index.d.ts.map +0 -1
  255. package/dist/types/flow/base/utils.d.ts +0 -20
  256. package/dist/types/flow/base/utils.d.ts.map +0 -1
  257. package/dist/types/flow/collections/flowArray.d.ts +0 -148
  258. package/dist/types/flow/collections/flowArray.d.ts.map +0 -1
  259. package/dist/types/flow/collections/flowMap.d.ts +0 -224
  260. package/dist/types/flow/collections/flowMap.d.ts.map +0 -1
  261. package/dist/types/flow/collections/index.d.ts.map +0 -1
  262. package/dist/types/flow/index.d.ts +0 -4
  263. package/dist/types/flow/index.d.ts.map +0 -1
  264. package/dist/types/flow/nodes/async/flowConstantAsync.d.ts +0 -137
  265. package/dist/types/flow/nodes/async/flowConstantAsync.d.ts.map +0 -1
  266. package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts +0 -137
  267. package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts.map +0 -1
  268. package/dist/types/flow/nodes/async/flowNodeAsync.d.ts +0 -343
  269. package/dist/types/flow/nodes/async/flowNodeAsync.d.ts.map +0 -1
  270. package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts +0 -81
  271. package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts.map +0 -1
  272. package/dist/types/flow/nodes/async/flowStateAsync.d.ts +0 -111
  273. package/dist/types/flow/nodes/async/flowStateAsync.d.ts.map +0 -1
  274. package/dist/types/flow/nodes/async/index.d.ts.map +0 -1
  275. package/dist/types/flow/nodes/index.d.ts +0 -3
  276. package/dist/types/flow/nodes/index.d.ts.map +0 -1
  277. package/dist/types/flow/nodes/sync/flowConstant.d.ts +0 -108
  278. package/dist/types/flow/nodes/sync/flowConstant.d.ts.map +0 -1
  279. package/dist/types/flow/nodes/sync/flowDerivation.d.ts +0 -100
  280. package/dist/types/flow/nodes/sync/flowDerivation.d.ts.map +0 -1
  281. package/dist/types/flow/nodes/sync/flowNode.d.ts +0 -314
  282. package/dist/types/flow/nodes/sync/flowNode.d.ts.map +0 -1
  283. package/dist/types/flow/nodes/sync/flowReadonly.d.ts +0 -57
  284. package/dist/types/flow/nodes/sync/flowReadonly.d.ts.map +0 -1
  285. package/dist/types/flow/nodes/sync/flowState.d.ts +0 -96
  286. package/dist/types/flow/nodes/sync/flowState.d.ts.map +0 -1
  287. package/dist/types/flow/nodes/sync/index.d.ts.map +0 -1
  288. package/dist/types/solid/converters.d.ts +0 -57
  289. package/dist/types/solid/converters.d.ts.map +0 -1
  290. package/dist/types/solid/index.d.ts +0 -3
  291. package/dist/types/solid/index.d.ts.map +0 -1
  292. package/dist/types/solid/primitives.d.ts +0 -181
  293. package/dist/types/solid/primitives.d.ts.map +0 -1
  294. package/docs/api/classes/FlowArray.md +0 -489
  295. package/docs/api/classes/FlowConstant.md +0 -350
  296. package/docs/api/classes/FlowDerivation.md +0 -334
  297. package/docs/api/classes/FlowEffect.md +0 -100
  298. package/docs/api/classes/FlowMap.md +0 -512
  299. package/docs/api/classes/FlowObservable.md +0 -306
  300. package/docs/api/classes/FlowResource.md +0 -380
  301. package/docs/api/classes/FlowResourceAsync.md +0 -362
  302. package/docs/api/classes/FlowSignal.md +0 -160
  303. package/docs/api/classes/FlowState.md +0 -368
  304. package/docs/api/classes/FlowStream.md +0 -367
  305. package/docs/api/classes/FlowStreamAsync.md +0 -364
  306. package/docs/api/classes/SolidDerivation.md +0 -75
  307. package/docs/api/classes/SolidResource.md +0 -91
  308. package/docs/api/classes/SolidState.md +0 -71
  309. package/docs/api/classes/TrackingContext.md +0 -33
  310. package/docs/api/functions/effect.md +0 -49
  311. package/docs/api/functions/resource.md +0 -52
  312. package/docs/api/functions/resourceAsync.md +0 -50
  313. package/docs/api/functions/stream.md +0 -53
  314. package/docs/api/functions/streamAsync.md +0 -50
  315. package/docs/api/interfaces/SolidObservable.md +0 -19
  316. package/docs/api/type-aliases/FlowStreamDisposer.md +0 -15
  317. package/docs/api/type-aliases/FlowStreamSetter.md +0 -27
  318. package/docs/api/type-aliases/FlowStreamUpdater.md +0 -32
  319. package/docs/api/type-aliases/SolidGetter.md +0 -17
  320. package/docs/guide/primitives/resources.md +0 -858
  321. package/docs/guide/primitives/streams.md +0 -931
  322. package/src/flow/base/flowDisposable.ts +0 -71
  323. package/src/flow/base/flowEffect.ts +0 -171
  324. package/src/flow/base/flowGraph.ts +0 -288
  325. package/src/flow/base/flowSignal.ts +0 -207
  326. package/src/flow/base/flowTracker.ts +0 -17
  327. package/src/flow/base/index.ts +0 -6
  328. package/src/flow/base/utils.ts +0 -19
  329. package/src/flow/collections/flowArray.ts +0 -409
  330. package/src/flow/collections/flowMap.ts +0 -398
  331. package/src/flow/nodes/async/flowConstantAsync.ts +0 -142
  332. package/src/flow/nodes/async/flowDerivationAsync.ts +0 -143
  333. package/src/flow/nodes/async/flowNodeAsync.ts +0 -474
  334. package/src/flow/nodes/async/flowReadonlyAsync.ts +0 -81
  335. package/src/flow/nodes/async/flowStateAsync.ts +0 -116
  336. package/src/flow/nodes/await/advanced/index.ts +0 -5
  337. package/src/flow/nodes/await/advanced/resource.ts +0 -134
  338. package/src/flow/nodes/await/advanced/resourceAsync.ts +0 -109
  339. package/src/flow/nodes/await/advanced/stream.ts +0 -188
  340. package/src/flow/nodes/await/advanced/streamAsync.ts +0 -176
  341. package/src/flow/nodes/await/flowConstantAwait.ts +0 -154
  342. package/src/flow/nodes/await/flowDerivationAwait.ts +0 -154
  343. package/src/flow/nodes/await/flowNodeAwait.ts +0 -508
  344. package/src/flow/nodes/await/flowReadonlyAwait.ts +0 -89
  345. package/src/flow/nodes/await/flowStateAwait.ts +0 -130
  346. package/src/flow/nodes/await/index.ts +0 -5
  347. package/src/flow/nodes/index.ts +0 -3
  348. package/src/flow/nodes/sync/flowConstant.ts +0 -111
  349. package/src/flow/nodes/sync/flowDerivation.ts +0 -105
  350. package/src/flow/nodes/sync/flowNode.ts +0 -439
  351. package/src/flow/nodes/sync/flowReadonly.ts +0 -57
  352. package/src/flow/nodes/sync/flowState.ts +0 -101
  353. package/src/solid/converters.ts +0 -148
  354. package/src/solid/index.ts +0 -2
  355. package/src/solid/primitives.ts +0 -215
  356. package/test/base/flowEffect.test.ts +0 -108
  357. package/test/base/flowGraph.test.ts +0 -485
  358. package/test/base/flowSignal.test.ts +0 -372
  359. package/test/collections/flowArray.asyncStates.test.ts +0 -1553
  360. package/test/collections/flowArray.scalars.test.ts +0 -1129
  361. package/test/collections/flowArray.states.test.ts +0 -1365
  362. package/test/collections/flowMap.asyncStates.test.ts +0 -1105
  363. package/test/collections/flowMap.scalars.test.ts +0 -877
  364. package/test/collections/flowMap.states.test.ts +0 -1097
  365. package/test/nodes/async/flowConstantAsync.test.ts +0 -860
  366. package/test/nodes/async/flowDerivationAsync.test.ts +0 -1517
  367. package/test/nodes/async/flowStateAsync.test.ts +0 -1387
  368. package/test/nodes/await/advanced/resource.test.ts +0 -129
  369. package/test/nodes/await/advanced/resourceAsync.test.ts +0 -108
  370. package/test/nodes/await/advanced/stream.test.ts +0 -198
  371. package/test/nodes/await/advanced/streamAsync.test.ts +0 -196
  372. package/test/nodes/await/flowConstantAwait.test.ts +0 -643
  373. package/test/nodes/await/flowDerivationAwait.test.ts +0 -1583
  374. package/test/nodes/await/flowStateAwait.test.ts +0 -999
  375. package/test/nodes/mixed/derivation.test.ts +0 -1527
  376. package/test/nodes/sync/flowConstant.test.ts +0 -620
  377. package/test/nodes/sync/flowDerivation.test.ts +0 -1373
  378. package/test/nodes/sync/flowState.test.ts +0 -945
  379. package/test/solid/converters.test.ts +0 -721
  380. package/test/solid/primitives.test.ts +0 -1031
  381. /package/dist/types/{flow → api/nodes}/collections/index.d.ts +0 -0
  382. /package/docs/guide/advanced/{upgrading.md → migration-v1.md} +0 -0
  383. /package/src/{flow → api/nodes}/collections/index.ts +0 -0
@@ -1,130 +0,0 @@
1
- import { FlowNodeAwait } from "./flowNodeAwait";
2
-
3
- /**
4
- * Represents a reactive state that holds a mutable value, with asynchronous values.
5
- *
6
- * @typeParam T - The type of the state value (not the Promise itself).
7
- *
8
- * @remarks
9
- * `FlowStateAwait` is a type alias of {@link FlowNodeAwait}, providing a mutable reactive state that can be
10
- * updated using the `set()` method. It provides all the reactive capabilities of `FlowNodeAwait`
11
- * (lazy computation, caching) with the ability to mutate the value.
12
- *
13
- * Unlike {@link FlowConstantAwait}, which is immutable and computes once, states can be updated at any
14
- * time. Unlike {@link FlowDerivationAwait}, which recomputes when dependencies change, states are
15
- * updated explicitly via `set()`.
16
- *
17
- * **Key Difference from FlowStateAsync:**
18
- * Unlike {@link FlowStateAsync}, which returns Promises from `get()`, FlowStateAwait returns
19
- * the resolved value directly. This makes the API more convenient for reactive code that doesn't want
20
- * to deal with Promises in every access. The Promise is awaited internally and the resolved value is cached.
21
- *
22
- * **Asynchronous Nature:**
23
- * FlowStateAwait works with Promises internally, but provides a synchronous-looking API:
24
- * - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
25
- * if the Promise hasn't resolved yet on first access.
26
- * - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
27
- * is fully resolved before proceeding.
28
- * - The Promise is awaited internally and the resolved value is cached until the state is updated.
29
- * - The `set()` method returns `Promise<void>` and must be awaited.
30
- *
31
- * **Reading Values:**
32
- * You can read the state value using `get(t)` for tracked access (creates reactive dependency)
33
- * or `pick()` for untracked access (reads without creating dependency):
34
- * - `get(t)` returns the resolved value synchronously (`T | undefined`)
35
- * - `pick()` returns a `Promise<T>` that must be awaited
36
- *
37
- * **Updating Values:**
38
- * When the state is updated with a new value that differs from the current value (strict equality),
39
- * all dependent effects and derivations are automatically notified and re-executed. If the new value
40
- * is strictly equal to the current value, no notification occurs. The `set()` method accepts either
41
- * a `Promise<T>` or a function `(current: T) => Promise<T>` and returns `Promise<void>`.
42
- *
43
- * @example
44
- * ```typescript
45
- * const $count = stateAwait(Promise.resolve(0));
46
- *
47
- * // Read with tracking
48
- * effect((t) => {
49
- * const value = $count.get(t); // Synchronous - returns resolved value, effect re-runs when $count changes
50
- * console.log(value);
51
- * });
52
- *
53
- * // Read without tracking
54
- * const snapshot = await $count.pick(); // Async - returns Promise
55
- *
56
- * // Update the value
57
- * await $count.set(Promise.resolve(1));
58
- * await $count.set(async (current) => Promise.resolve(current + 1));
59
- * ```
60
- *
61
- * @public
62
- */
63
- export type FlowStateAwait<T> = Omit<FlowNodeAwait<T>, "refresh">;
64
-
65
- /**
66
- * Creates a new reactive state holding a mutable value.
67
- *
68
- * @typeParam T - The type of the state value (not the Promise itself).
69
- *
70
- * @param value - The initial value for the state, or a function that returns the initial value.
71
- * If a function is provided, it is called lazily only when the value is first accessed via
72
- * `get()` or `pick()`. If a direct Promise is provided, it is stored immediately and resolved internally.
73
- *
74
- * @returns A new instance of {@link FlowStateAwait} that provides reactive access to the mutable value.
75
- *
76
- * @remarks
77
- * State is the most common reactive primitive - a mutable container that notifies dependents
78
- * when its value changes. Use `set()` to update the value (returns `Promise<void>`) and `get(t)`
79
- * or `pick()` to read it:
80
- * - `get(t)` returns the resolved value synchronously (`T | undefined`)
81
- * - `pick()` returns a `Promise<T>` that must be awaited
82
- *
83
- * **Asynchronous Nature:**
84
- * FlowStateAwait works with Promises internally, but provides a synchronous-looking API:
85
- * - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
86
- * if the Promise hasn't resolved yet on first access.
87
- * - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
88
- * is fully resolved before proceeding.
89
- * - The Promise is awaited internally and the resolved value is cached until the state is updated.
90
- * - The `set()` method returns `Promise<void>` and must be awaited.
91
- *
92
- * **Lazy Initialization:**
93
- * When a function is provided, the initialization is lazy - the function is not called immediately
94
- * upon creation. It executes only when:
95
- * - The value is first read via `get(t)` or `pick()`
96
- * - The state is watched via `watch()`
97
- *
98
- * This is useful for expensive async initializations that may not be needed immediately.
99
- *
100
- * **When to Use States:**
101
- * - Use `stateAwait()` for mutable values that can be updated directly
102
- * - Use `constantAwait()` for values that compute once and never change
103
- * - Use `derivationAwait()` for values that recompute when dependencies change
104
- *
105
- * @example
106
- * ```typescript
107
- * // Direct Promise - initialized immediately
108
- * const $count = stateAwait(Promise.resolve(0));
109
- *
110
- * // Lazy initialization - computed on first access
111
- * const $config = stateAwait(async () => {
112
- * return await loadConfiguration();
113
- * });
114
- *
115
- * effect((t) => {
116
- * const value = $count.get(t); // Synchronous - returns resolved value
117
- * console.log(value);
118
- * });
119
- *
120
- * await $count.set(Promise.resolve(1)); // Logs: 1
121
- * await $count.set(async (current) => Promise.resolve(current + 1)); // Logs: 2
122
- * ```
123
- *
124
- * @public
125
- */
126
- export function stateAwait<T>(
127
- value: Promise<T> | (() => Promise<T>),
128
- ): FlowStateAwait<T> {
129
- return new FlowNodeAwait(value);
130
- }
@@ -1,5 +0,0 @@
1
- export * from "./flowConstantAwait";
2
- export * from "./flowDerivationAwait";
3
- export * from "./flowNodeAwait";
4
- export * from "./flowReadonlyAwait";
5
- export * from "./flowStateAwait";
@@ -1,3 +0,0 @@
1
- export * from "./async";
2
- export * from "./sync";
3
- // export * from "./await";
@@ -1,111 +0,0 @@
1
- import type { NotPromise } from "../../base";
2
- import { FlowNode } from "./flowNode";
3
-
4
- /**
5
- * Represents a constant value that can be computed lazily upon first access.
6
- *
7
- * @typeParam T - The type of the constant value.
8
- *
9
- * @remarks
10
- * `FlowConstant` is a type alias based on {@link FlowNode} with the `set()` method removed,
11
- * making it immutable. It provides all the reactive capabilities of `FlowNode` (
12
- * lazy computation, caching) but prevents value mutation after initialization.
13
- *
14
- * Unlike {@link FlowState}, which is mutable via the `set()` method, a constant's value never
15
- * changes after it's computed. This makes it ideal for values that should remain stable throughout
16
- * the application lifecycle.
17
- *
18
- * **Lazy Computation:**
19
- * Constants are created using the `constant()` factory function, which accepts a compute function.
20
- * The computation doesn't run immediately upon creation. It executes only when:
21
- * - The value is first read via `get()` or `pick()`
22
- * - The constant is watched via `watch()`
23
- * This allows you to defer expensive computations until they're actually needed.
24
- *
25
- * **Caching:**
26
- * Once computed, the value is cached permanently. All subsequent accesses return the cached value
27
- * without re-computation, ensuring the value remains constant and the computation runs only once.
28
- *
29
- * **Use Cases:**
30
- * - Configuration values that don't change
31
- * - Expensive computations that should only run once
32
- * - Initialization values for other reactive primitives
33
- * - Values derived from external sources that shouldn't be modified
34
- *
35
- * @example
36
- * ```typescript
37
- * // Lazy initialization - computed on first access
38
- * const $expensiveValue = constant(() => {
39
- * return performExpensiveCalculation();
40
- * });
41
- *
42
- * // First access triggers computation
43
- * const value1 = await $expensiveValue.pick();
44
- *
45
- * // Subsequent accesses return cached value
46
- * const value2 = await $expensiveValue.pick();
47
- *
48
- * // Value cannot be changed (set() method is not available)
49
- * // $expensiveValue.set(100); // TypeScript error: Property 'set' does not exist
50
- * ```
51
- *
52
- * @public
53
- */
54
- export type FlowConstant<T> = Omit<FlowNode<T>, "set" | "refresh">;
55
-
56
- /**
57
- * Creates a new reactive constant with lazy initialization.
58
- *
59
- * @typeParam T - The type of the constant value.
60
- *
61
- * @param value - A function that computes the constant value. This function is called lazily
62
- * only when the value is first accessed via `get()` or `pick()`.
63
- *
64
- * @returns A new instance of {@link FlowConstant} that provides reactive access to the computed value.
65
- *
66
- * @remarks
67
- * Constants are immutable reactive values that are computed once and cached permanently. Unlike
68
- * states (created with `state()`), constants cannot be modified after initialization - they don't
69
- * have a `set()` method.
70
- *
71
- * **Lazy Computation:**
72
- * The compute function is not executed immediately upon creation. It runs only when:
73
- * - The value is first read via `get(t)` or `pick()`
74
- * - The constant is watched via `watch()`
75
- *
76
- * This lazy computation is useful for:
77
- * - Expensive computations that may not be needed immediately
78
- * - Values that depend on resources not available at construction time
79
- * - Deferring computation until the value is actually needed
80
- *
81
- * **When to Use Constants:**
82
- * - Use `constant()` for values that should never change after initialization
83
- * - Use `state()` for mutable values that can be updated
84
- * - Use `derivation()` for values that recompute when dependencies change
85
- *
86
- * @example
87
- * ```typescript
88
- * // Expensive computation that runs only once
89
- * const $config = constant(() => {
90
- * return loadConfigurationFromFile();
91
- * });
92
- *
93
- * // Computation hasn't run yet
94
- * // First access triggers it
95
- * const config = await $config.pick();
96
- *
97
- * // Subsequent accesses return cached value
98
- * const config2 = await $config.pick();
99
- *
100
- * // Use in reactive context
101
- * effect((t) => {
102
- * const cfg = $config.get(t);
103
- * console.log(`API URL: ${cfg.apiUrl}`);
104
- * });
105
- * ```
106
- *
107
- * @public
108
- */
109
- export function constant<T>(value: () => NotPromise<T>): FlowConstant<T> {
110
- return new FlowNode(value);
111
- }
@@ -1,105 +0,0 @@
1
- import type { FlowTracker, NotPromise } from "../../base";
2
- import { FlowNode } from "./flowNode";
3
-
4
- /**
5
- * Represents a reactive derivation whose value is computed based on other reactive signals.
6
- *
7
- * @typeParam T - The type of the computed value.
8
- *
9
- * @remarks
10
- * `FlowDerivation` is a type alias based on {@link FlowNode} with the `set()` method removed,
11
- * making it immutable. It provides all the reactive capabilities of `FlowNode` (dependency tracking,
12
- * lazy computation, caching) but prevents value mutation after initialization.
13
- *
14
- * Unlike {@link FlowConstant}, which computes its value once and never changes, derivations
15
- * automatically recompute when any tracked dependency changes. This makes them ideal for
16
- * creating derived state that stays in sync with its sources.
17
- *
18
- * **Lazy Computation:**
19
- * The compute function doesn't run immediately upon creation. It executes only when:
20
- * - The value is first read via `get()` or `pick()`
21
- * - The derivation is watched via `watch()`
22
- *
23
- * **Automatic Recomputation:**
24
- * When a tracked dependency changes, the derivation is marked as "dirty" but doesn't recompute
25
- * immediately. Recomputation happens lazily on the next value access. This prevents unnecessary
26
- * computations when multiple dependencies change in quick succession. You can also force
27
- * recomputation using the `refresh()` method.
28
- *
29
- * **Dynamic Dependencies:**
30
- * Dependencies are tracked dynamically during each computation. If the compute function
31
- * conditionally tracks different observables, the dependency graph updates automatically.
32
- *
33
- * @example
34
- * ```typescript
35
- * const $firstName = state('John');
36
- * const $lastName = state('Doe');
37
- *
38
- * const $fullName = derivation((t) => {
39
- * return `${$firstName.get(t)} ${$lastName.get(t)}`;
40
- * });
41
- *
42
- * // Compute function hasn't run yet (lazy)
43
- * const name = await $fullName.pick(); // Now it computes: "John Doe"
44
- *
45
- * // When dependencies change, derivation recomputes automatically
46
- * await $firstName.set('Jane');
47
- * const newName = await $fullName.pick(); // "Jane Doe" (recomputed)
48
- * ```
49
- *
50
- * @public
51
- */
52
- export type FlowDerivation<T> = Omit<FlowNode<T>, "set">;
53
-
54
- /**
55
- * Creates a new reactive derivation whose value is computed based on other reactive signals.
56
- *
57
- * @typeParam T - The type of the derived value.
58
- *
59
- * @param fn - A function that computes the derived value using a tracking context. The function
60
- * receives a tracking context (`t`) that should be used to access dependencies via `.get(t)`.
61
- * The function is not executed immediately; it runs lazily on first access.
62
- *
63
- * @returns A new instance of {@link FlowDerivation} that provides reactive access to the computed value.
64
- *
65
- * @remarks
66
- * A derivation is a computed reactive value that automatically tracks its dependencies and
67
- * recomputes when they change. The computation is lazy - it runs only when the value is
68
- * accessed, not on construction. Use derivations to create derived state without manual
69
- * dependency management.
70
- *
71
- * **Lazy Computation:**
72
- * The compute function is not executed immediately upon creation. It runs only when:
73
- * - The value is first read via `get(t)` or `pick()`
74
- * - The derivation is watched via `watch()`
75
- *
76
- * **When to Use Derivations:**
77
- * - Use `derivation()` for values that should recompute when dependencies change
78
- * - Use `constant()` for values that compute once and never change
79
- * - Use `state()` for mutable values that can be updated directly
80
- *
81
- * @example
82
- * ```typescript
83
- * const $firstName = state('John');
84
- * const $lastName = state('Doe');
85
- *
86
- * const $fullName = derivation((t) => {
87
- * return `${$firstName.get(t)} ${$lastName.get(t)}`;
88
- * });
89
- *
90
- * // Use in reactive context
91
- * effect((t) => {
92
- * console.log($fullName.get(t)); // Logs: "John Doe"
93
- * });
94
- *
95
- * // When dependencies change, derivation recomputes automatically
96
- * await $firstName.set('Jane'); // Logs: "Jane Doe"
97
- * ```
98
- *
99
- * @public
100
- */
101
- export function derivation<T>(
102
- fn: (t: FlowTracker) => NotPromise<T>,
103
- ): FlowDerivation<T> {
104
- return new FlowNode(fn);
105
- }