@ersbeth/picoflow 1.1.1 → 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 +857 -1528
  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 -53
  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 -139
  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,154 +0,0 @@
1
- import { FlowNodeAwait } from "./flowNodeAwait";
2
-
3
- /**
4
- * Represents a constant value that can be computed lazily upon first access, with asynchronous values.
5
- *
6
- * @typeParam T - The type of the constant value (not the Promise itself).
7
- *
8
- * @remarks
9
- * `FlowConstantAwait` is a type alias based on {@link FlowNodeAwait} with the `set()` and `refresh()`
10
- * methods removed, making it immutable. It provides all the reactive capabilities of `FlowNodeAwait`
11
- * (lazy computation, caching, dependency tracking) but prevents value mutation after initialization.
12
- *
13
- * Unlike {@link FlowStateAwait}, which is mutable via the `set()` method, a constant's value never
14
- * changes after it's computed. This makes it ideal for values that should remain stable throughout
15
- * the application lifecycle.
16
- *
17
- * **Key Difference from FlowConstantAsync:**
18
- * Unlike {@link FlowConstantAsync}, which returns Promises from `get()`, FlowConstantAwait 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
- * FlowConstantAwait 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 permanently.
29
- *
30
- * **Lazy Computation:**
31
- * Constants are created using the `constantAwait()` factory function, which accepts either a
32
- * `Promise<T>` or a function returning `Promise<T>`. The computation doesn't run immediately
33
- * upon creation when using a function. It executes only when:
34
- * - The value is first read via `get()` or `pick()`
35
- * - The constant is watched via `watch()`
36
- * This allows you to defer expensive async computations until they're actually needed.
37
- *
38
- * **Initialization Patterns:**
39
- * - **Constant Promise**: Pass a `Promise<T>` directly; it's stored immediately and resolved internally.
40
- * The resolved value is cached and can be accessed synchronously via `get()`.
41
- * - **Lazy initialization**: Pass a function `() => Promise<T>`; it's called only when the value
42
- * is first accessed via `get()` or `pick()`. The Promise is awaited internally and the resolved
43
- * value is cached. This is useful for expensive async operations that may not be needed immediately.
44
- *
45
- * **Caching:**
46
- * Once computed (either immediately or lazily), the resolved value is cached permanently. All subsequent
47
- * accesses return the cached value without re-computation, ensuring the value remains constant
48
- * and the computation runs only once.
49
- *
50
- * **Use Cases:**
51
- * - Configuration values loaded asynchronously that don't change
52
- * - Expensive async computations that should only run once
53
- * - Initialization values for other reactive primitives
54
- * - Values derived from external async sources that shouldn't be modified
55
- *
56
- * @example
57
- * ```typescript
58
- * // Constant Promise - initialized immediately
59
- * const $config = constantAwait(Promise.resolve({ apiUrl: 'https://api.example.com' }));
60
- * const config = await $config.pick(); // Async - returns Promise
61
- * const configValue = $config.get(t); // Synchronous - returns resolved value
62
- *
63
- * // Lazy initialization - computed on first access
64
- * const $expensiveValue = constantAwait(async () => {
65
- * console.log('Computing...');
66
- * return await performExpensiveAsyncCalculation();
67
- * });
68
- *
69
- * // First access triggers computation
70
- * const value1 = await $expensiveValue.pick(); // Logs: "Computing..."
71
- *
72
- * // Subsequent accesses return cached value
73
- * const value2 = $expensiveValue.get(t); // Synchronous - returns cached value, no log
74
- *
75
- * // Value cannot be changed (set() method is not available)
76
- * // $expensiveValue.set(Promise.resolve(100)); // TypeScript error: Property 'set' does not exist
77
- * ```
78
- *
79
- * @public
80
- */
81
- export type FlowConstantAwait<T> = Omit<FlowNodeAwait<T>, "set" | "refresh">;
82
-
83
- /**
84
- * Creates a new reactive constant with lazy initialization support.
85
- *
86
- * @typeParam T - The type of the constant value (not the Promise itself).
87
- *
88
- * @param value - Either a `Promise<T>` for immediate initialization, or a function `() => Promise<T>`
89
- * for lazy initialization. The function will be called only when the value is first accessed.
90
- *
91
- * @returns A new instance of {@link FlowConstantAwait} that provides reactive access to the computed value.
92
- *
93
- * @remarks
94
- * Constants are immutable reactive values that are computed once and cached permanently. Unlike
95
- * states (created with `stateAwait()`), constants cannot be modified after initialization - they don't
96
- * have a `set()` method.
97
- *
98
- * **Asynchronous Nature:**
99
- * FlowConstantAwait works with Promises internally, but provides a synchronous-looking API:
100
- * - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
101
- * if the Promise hasn't resolved yet on first access.
102
- * - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
103
- * is fully resolved before proceeding.
104
- * - The Promise is awaited internally and the resolved value is cached permanently.
105
- *
106
- * **Lazy Computation:**
107
- * When you provide a function, the computation is not executed immediately upon creation. It runs only when:
108
- * - The value is first read via `get(t)` or `pick()`
109
- * - The constant is watched via `watch()`
110
- *
111
- * This lazy computation is useful for:
112
- * - Expensive async computations that may not be needed immediately
113
- * - Values that depend on resources not available at construction time
114
- * - Deferring async operations until the value is actually needed
115
- *
116
- * **When to Use Constants:**
117
- * - Use `constantAwait()` for values that should never change after initialization
118
- * - Use `stateAwait()` for mutable values that can be updated
119
- * - Use `derivationAwait()` for values that recompute when dependencies change
120
- *
121
- * @example
122
- * ```typescript
123
- * // Eager initialization with Promise
124
- * const $config = constantAwait(Promise.resolve({
125
- * apiUrl: 'https://api.example.com'
126
- * }));
127
- * const config = await $config.pick(); // Async - returns Promise
128
- *
129
- * // Lazy initialization with async function
130
- * const $expensiveValue = constantAwait(async () => {
131
- * return await loadConfigurationFromFile();
132
- * });
133
- *
134
- * // Computation hasn't run yet
135
- * // First access triggers it
136
- * const value = await $expensiveValue.pick(); // Async - ensures value is resolved
137
- *
138
- * // Subsequent accesses return cached value
139
- * const value2 = $expensiveValue.get(t); // Synchronous - returns cached value
140
- *
141
- * // Use in reactive context
142
- * effect((t) => {
143
- * const cfg = $config.get(t); // Synchronous - returns resolved value
144
- * console.log(`API URL: ${cfg.apiUrl}`);
145
- * });
146
- * ```
147
- *
148
- * @public
149
- */
150
- export function constantAwait<T>(
151
- value: Promise<T> | (() => Promise<T>),
152
- ): FlowConstantAwait<T> {
153
- return new FlowNodeAwait(value);
154
- }
@@ -1,154 +0,0 @@
1
- import type { FlowTracker } from "../../base";
2
- import { FlowNodeAwait } from "./flowNodeAwait";
3
- /**
4
- * Represents a reactive derivation whose value is computed based on other reactive signals, with asynchronous values.
5
- *
6
- * @typeParam T - The type of the computed value (not the Promise itself).
7
- *
8
- * @remarks
9
- * `FlowDerivationAwait` is a type alias based on {@link FlowNodeAwait} with the `set()` method removed,
10
- * making it immutable. It provides all the reactive capabilities of `FlowNodeAwait` (dependency tracking,
11
- * lazy computation, caching) but prevents value mutation after initialization.
12
- *
13
- * Unlike {@link FlowConstantAwait}, which computes its value once and never changes, derivations
14
- * automatically recompute when any tracked dependency changes. This makes them ideal for
15
- * creating derived state that stays in sync with its sources.
16
- *
17
- * **Key Difference from FlowDerivationAsync:**
18
- * Unlike {@link FlowDerivationAsync}, which returns Promises from `get()`, FlowDerivationAwait 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
- * FlowDerivationAwait 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 dependencies change.
29
- *
30
- * **Lazy Computation:**
31
- * The compute function doesn't run immediately upon creation. It executes only when:
32
- * - The value is first read via `get()` or `pick()`
33
- * - The derivation is watched via `watch()`
34
- * This allows you to defer expensive async computations until they're actually needed.
35
- *
36
- * **Automatic Recomputation:**
37
- * When a tracked dependency changes, the derivation is marked as "dirty" but doesn't recompute
38
- * immediately. Recomputation happens lazily on the next value access. This prevents unnecessary
39
- * computations when multiple dependencies change in quick succession. The resolved value is cached
40
- * until dependencies change, ensuring efficient access patterns. You can also force recomputation using
41
- * the `refresh()` method.
42
- *
43
- * **Dynamic Dependencies:**
44
- * Dependencies are tracked dynamically during each computation. If the compute function
45
- * conditionally tracks different observables, the dependency graph updates automatically.
46
- * When accessing await node dependencies via `.get(t)`, the value is returned synchronously (no await needed).
47
- * The compute function must return a `Promise<T>` which is awaited internally.
48
- *
49
- * @example
50
- * ```typescript
51
- * const $firstName = stateAwait(Promise.resolve('John'));
52
- * const $lastName = stateAwait(Promise.resolve('Doe'));
53
- *
54
- * const $fullName = derivationAwait(async (t) => {
55
- * const first = $firstName.get(t); // Synchronous - returns resolved value
56
- * const last = $lastName.get(t); // Synchronous - returns resolved value
57
- * return `${first} ${last}`;
58
- * });
59
- *
60
- * // Compute function hasn't run yet (lazy)
61
- * const name = await $fullName.pick(); // Now it computes: "John Doe"
62
- *
63
- * // When dependencies change, derivation recomputes automatically
64
- * await $firstName.set(Promise.resolve('Jane'));
65
- * const newName = await $fullName.pick(); // "Jane Doe" (recomputed)
66
- * ```
67
- *
68
- * @public
69
- */
70
-
71
- export type FlowDerivationAwait<T> = Omit<FlowNodeAwait<T>, "set">;
72
-
73
- /**
74
- * Creates a new reactive derivation whose value is computed based on other reactive signals.
75
- *
76
- * @typeParam T - The type of the derived value (not the Promise itself).
77
- *
78
- * @param fn - A function that computes the derived value using a tracking context. The function
79
- * receives a tracking context (`t`) that should be used to access dependencies via `.get(t)`.
80
- * The function must return a `Promise<T>`. The function is not executed immediately; it runs
81
- * lazily on first access.
82
- *
83
- * @returns A new instance of {@link FlowDerivationAwait} that provides reactive access to the computed value.
84
- *
85
- * @remarks
86
- * A derivation is a computed reactive value that automatically tracks its dependencies and
87
- * recomputes when they change. The computation is lazy - it runs only when the value is
88
- * accessed, not on construction. Use derivations to create derived state without manual
89
- * dependency management.
90
- *
91
- * **Asynchronous Nature:**
92
- * FlowDerivationAwait works with Promises internally, but provides a synchronous-looking API:
93
- * - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
94
- * if the Promise hasn't resolved yet on first access.
95
- * - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
96
- * is fully resolved before proceeding.
97
- * - Within the compute function, when accessing await node dependencies via `.get(t)`, the value
98
- * is returned synchronously (no await needed). This makes the code cleaner and easier to read.
99
- * - The compute function must return a `Promise<T>` which is awaited internally.
100
- *
101
- * **Lazy Computation:**
102
- * The compute function is not executed immediately upon creation. It runs only when:
103
- * - The value is first read via `get(t)` or `pick()`
104
- * - The derivation is watched via `watch()`
105
- *
106
- * This lazy computation is useful for:
107
- * - Expensive async computations that may not be needed immediately
108
- * - Values that depend on async resources
109
- * - Deferring async operations until the value is actually needed
110
- *
111
- * **Automatic Recomputation:**
112
- * When any tracked dependency changes, the derivation automatically recomputes on the next access.
113
- * This ensures the derived value always stays in sync with its sources.
114
- *
115
- * **When to Use Derivations:**
116
- * - Use `derivationAwait()` for values that should recompute when dependencies change
117
- * - Use `constantAwait()` for values that compute once and never change
118
- * - Use `stateAwait()` for mutable values that can be updated directly
119
- *
120
- * @example
121
- * ```typescript
122
- * const $firstName = stateAwait(Promise.resolve('John'));
123
- * const $lastName = stateAwait(Promise.resolve('Doe'));
124
- *
125
- * const $fullName = derivationAwait(async (t) => {
126
- * const first = $firstName.get(t); // Synchronous - returns resolved value
127
- * const last = $lastName.get(t); // Synchronous - returns resolved value
128
- * return `${first} ${last}`;
129
- * });
130
- *
131
- * // Use in reactive context
132
- * effect((t) => {
133
- * const name = $fullName.get(t); // Synchronous - returns resolved value
134
- * console.log(name); // Logs: "John Doe"
135
- * });
136
- *
137
- * // When dependencies change, derivation recomputes automatically
138
- * await $firstName.set(Promise.resolve('Jane')); // Logs: "Jane Doe"
139
- *
140
- * // Async data fetching example
141
- * const $userId = stateAwait(Promise.resolve(1));
142
- * const $user = derivationAwait(async (t) => {
143
- * const id = $userId.get(t); // Synchronous - returns resolved value
144
- * return await fetchUser(id); // Still need await for external async operations
145
- * });
146
- * ```
147
- *
148
- * @public
149
- */
150
- export function derivationAwait<T>(
151
- fn: (t: FlowTracker) => Promise<T>,
152
- ): FlowDerivationAwait<T> {
153
- return new FlowNodeAwait(fn);
154
- }