@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,100 +0,0 @@
1
- import { FlowTracker, NotPromise } from '../../base';
2
- import { FlowNode } from './flowNode';
3
- /**
4
- * Represents a reactive derivation whose value is computed based on other reactive signals.
5
- *
6
- * @typeParam T - The type of the computed value.
7
- *
8
- * @remarks
9
- * `FlowDerivation` is a type alias based on {@link FlowNode} with the `set()` method removed,
10
- * making it immutable. It provides all the reactive capabilities of `FlowNode` (dependency tracking,
11
- * lazy computation, caching) but prevents value mutation after initialization.
12
- *
13
- * Unlike {@link FlowConstant}, 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
- * **Lazy Computation:**
18
- * The compute function doesn't run immediately upon creation. It executes only when:
19
- * - The value is first read via `get()` or `pick()`
20
- * - The derivation is watched via `watch()`
21
- *
22
- * **Automatic Recomputation:**
23
- * When a tracked dependency changes, the derivation is marked as "dirty" but doesn't recompute
24
- * immediately. Recomputation happens lazily on the next value access. This prevents unnecessary
25
- * computations when multiple dependencies change in quick succession. You can also force
26
- * recomputation using the `refresh()` method.
27
- *
28
- * **Dynamic Dependencies:**
29
- * Dependencies are tracked dynamically during each computation. If the compute function
30
- * conditionally tracks different observables, the dependency graph updates automatically.
31
- *
32
- * @example
33
- * ```typescript
34
- * const $firstName = state('John');
35
- * const $lastName = state('Doe');
36
- *
37
- * const $fullName = derivation((t) => {
38
- * return `${$firstName.get(t)} ${$lastName.get(t)}`;
39
- * });
40
- *
41
- * // Compute function hasn't run yet (lazy)
42
- * const name = await $fullName.pick(); // Now it computes: "John Doe"
43
- *
44
- * // When dependencies change, derivation recomputes automatically
45
- * await $firstName.set('Jane');
46
- * const newName = await $fullName.pick(); // "Jane Doe" (recomputed)
47
- * ```
48
- *
49
- * @public
50
- */
51
- export type FlowDerivation<T> = Omit<FlowNode<T>, "set">;
52
- /**
53
- * Creates a new reactive derivation whose value is computed based on other reactive signals.
54
- *
55
- * @typeParam T - The type of the derived value.
56
- *
57
- * @param fn - A function that computes the derived value using a tracking context. The function
58
- * receives a tracking context (`t`) that should be used to access dependencies via `.get(t)`.
59
- * The function is not executed immediately; it runs lazily on first access.
60
- *
61
- * @returns A new instance of {@link FlowDerivation} that provides reactive access to the computed value.
62
- *
63
- * @remarks
64
- * A derivation is a computed reactive value that automatically tracks its dependencies and
65
- * recomputes when they change. The computation is lazy - it runs only when the value is
66
- * accessed, not on construction. Use derivations to create derived state without manual
67
- * dependency management.
68
- *
69
- * **Lazy Computation:**
70
- * The compute function is not executed immediately upon creation. It runs only when:
71
- * - The value is first read via `get(t)` or `pick()`
72
- * - The derivation is watched via `watch()`
73
- *
74
- * **When to Use Derivations:**
75
- * - Use `derivation()` for values that should recompute when dependencies change
76
- * - Use `constant()` for values that compute once and never change
77
- * - Use `state()` for mutable values that can be updated directly
78
- *
79
- * @example
80
- * ```typescript
81
- * const $firstName = state('John');
82
- * const $lastName = state('Doe');
83
- *
84
- * const $fullName = derivation((t) => {
85
- * return `${$firstName.get(t)} ${$lastName.get(t)}`;
86
- * });
87
- *
88
- * // Use in reactive context
89
- * effect((t) => {
90
- * console.log($fullName.get(t)); // Logs: "John Doe"
91
- * });
92
- *
93
- * // When dependencies change, derivation recomputes automatically
94
- * await $firstName.set('Jane'); // Logs: "Jane Doe"
95
- * ```
96
- *
97
- * @public
98
- */
99
- export declare function derivation<T>(fn: (t: FlowTracker) => NotPromise<T>): FlowDerivation<T>;
100
- //# sourceMappingURL=flowDerivation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowDerivation.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC3B,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,GACnC,cAAc,CAAC,CAAC,CAAC,CAEnB"}
@@ -1,314 +0,0 @@
1
- import { FlowSignal, FlowTracker, NotPromise } from '../../base';
2
- /**
3
- * A versatile reactive node that can operate as mutable state or computed derivation.
4
- *
5
- * @typeParam T - The type of the value held by this node.
6
- *
7
- * @remarks
8
- * FlowNode is a flexible reactive primitive that adapts its behavior based on how it's initialized.
9
- * It extends {@link FlowSignal} and provides reactive value access with automatic dependency tracking.
10
- *
11
- * **Operating Modes:**
12
- *
13
- * - **Mutable State Mode**: When constructed with a constant value, FlowNode acts as a mutable
14
- * reactive state. You can update its value using `set()`, and all dependents are automatically
15
- * notified when the value changes.
16
- *
17
- * - **Computed Derivation Mode**: When constructed with a compute function, FlowNode acts as a
18
- * computed value that automatically tracks its dependencies. The compute function runs lazily
19
- * (only when the value is first accessed) and recomputes when any tracked dependency changes.
20
- * The computed value can be temporarily overridden using `set()`, but the override is cleared
21
- * on the next recomputation (triggered by dependency changes or `refresh()`).
22
- *
23
- * **Lazy Computation:**
24
- * When using a compute function, the computation doesn't run immediately upon construction. It
25
- * executes only when:
26
- * - The value is first read via `get()` or `pick()`
27
- * - The node is watched via `watch()`
28
- *
29
- * **Dirty Tracking:**
30
- * When a tracked dependency changes, the node is marked as "dirty" but doesn't recompute
31
- * immediately. Recomputation happens lazily on the next value access, preventing unnecessary
32
- * computations when multiple dependencies change in quick succession.
33
- *
34
- * **Dynamic Dependencies:**
35
- * Dependencies are tracked dynamically during each computation. If the compute function
36
- * conditionally tracks different observables, the dependency graph updates automatically.
37
- *
38
- * @example
39
- * ```typescript
40
- * // Mutable state mode
41
- * const $count = new FlowNode(0);
42
- * $count.set(1); // Updates the value
43
- *
44
- * // Computed derivation mode
45
- * const $firstName = new FlowNode('John');
46
- * const $lastName = new FlowNode('Doe');
47
- * const $fullName = new FlowNode((t) => {
48
- * return `${$firstName.get(t)} ${$lastName.get(t)}`;
49
- * });
50
- *
51
- * // Compute function hasn't run yet (lazy)
52
- * const name = await $fullName.pick(); // Now it computes: "John Doe"
53
- *
54
- * // Temporarily override computed value
55
- * $fullName.set('Override');
56
- * console.log(await $fullName.pick()); // "Override"
57
- *
58
- * // Trigger recomputation (clears override)
59
- * $firstName.set('Jane');
60
- * console.log(await $fullName.pick()); // "Jane Doe" (override cleared)
61
- * ```
62
- *
63
- * @public
64
- */
65
- export declare class FlowNode<T extends NotPromise<unknown>> extends FlowSignal {
66
- protected _value?: T;
67
- private _dirty;
68
- private _compute?;
69
- /**
70
- * Creates a new FlowNode.
71
- *
72
- * @param compute - Either a constant value or a compute function that derives the value.
73
- *
74
- * @remarks
75
- * The constructor accepts two different initialization modes:
76
- *
77
- * - **Constant value**: Creates a mutable reactive node that can be updated via `set()`.
78
- * The value is stored immediately and can be changed at any time.
79
- *
80
- * - **Compute function**: Creates a computed reactive node that automatically tracks dependencies
81
- * and recomputes when they change. The compute function receives a tracking context (`t`)
82
- * that should be used to access dependencies via `.get(t)`. The function is not executed
83
- * immediately; it runs lazily on first access. The computed value can be temporarily
84
- * overridden using `set()`, but the override is cleared on the next recomputation
85
- * (triggered by dependency changes or `refresh()`).
86
- *
87
- * @example
88
- * ```typescript
89
- * // Mutable state with constant value
90
- * const $count = new FlowNode(0);
91
- * $count.set(5);
92
- *
93
- * // Computed derivation with function
94
- * const $a = new FlowNode(10);
95
- * const $b = new FlowNode(20);
96
- * const $sum = new FlowNode((t) => $a.get(t) + $b.get(t));
97
- *
98
- * // Lazy evaluation - compute function hasn't run yet
99
- * console.log(await $sum.pick()); // Now it computes: 30
100
- * ```
101
- *
102
- * @public
103
- */
104
- constructor(compute: NotPromise<T> | ((t: FlowTracker) => NotPromise<T>));
105
- watch(tracker: FlowTracker): void;
106
- /**
107
- * Gets the current value with dependency tracking.
108
- *
109
- * @param tracker - The tracking context for reactive tracking. This observable is registered
110
- * as a dependency when accessed through this method.
111
- *
112
- * @returns The current value of type T.
113
- *
114
- * @remarks
115
- * Use `get(t)` within effects and derivations to create reactive dependencies. The tracker
116
- * parameter must be provided from the reactive context (typically the `t` parameter in effect
117
- * or derivation callbacks).
118
- *
119
- * To read a value without creating a dependency, use `pick()` instead.
120
- *
121
- * @example
122
- * ```typescript
123
- * effect((t) => {
124
- * const tracked = $state.get(t); // Dependency registered
125
- * const untracked = await $other.pick(); // No dependency
126
- * });
127
- * ```
128
- *
129
- * @throws Error if the node has been disposed.
130
- *
131
- * @public
132
- */
133
- get(tracker: FlowTracker | null): T;
134
- /**
135
- * Updates the node with a new value.
136
- *
137
- * @param value - A new value or a callback function that computes a new value based on the current value.
138
- *
139
- * @returns A promise that resolves after the update is processed and all dependent effects have been notified.
140
- *
141
- * @remarks
142
- * This method can be used in two ways:
143
- *
144
- * **For mutable state nodes** (constructed with a constant value):
145
- * - Updates the stored value directly
146
- * - All dependents are notified of the change
147
- *
148
- * **For computed nodes** (constructed with a compute function):
149
- * - Temporarily overrides the computed value
150
- * - The override persists until the next recomputation, which occurs when:
151
- * - A tracked dependency changes, or
152
- * - `refresh()` is called
153
- * - This allows temporarily overriding computed values for testing or manual control
154
- *
155
- * **Value Comparison:**
156
- * If the new value is strictly equal (`===`) to the current value, no update occurs
157
- * and subscribers are not notified. This prevents unnecessary re-renders and effect
158
- * executions.
159
- *
160
- * **Asynchronous Processing:**
161
- * The update is processed asynchronously through the reactive graph, ensuring proper
162
- * ordering of updates and effect execution.
163
- *
164
- * @throws Error if the node has been disposed.
165
- *
166
- * @example
167
- * ```typescript
168
- * // Mutable state usage
169
- * const $count = new FlowNode(0);
170
- * await $count.set(5);
171
- * await $count.set(current => current + 1); // 6
172
- *
173
- * // Temporary override of computed value
174
- * const $source = new FlowNode(10);
175
- * const $doubled = new FlowNode((t) => $source.get(t) * 2);
176
- *
177
- * console.log(await $doubled.pick()); // 20
178
- *
179
- * // Temporarily override
180
- * await $doubled.set(50);
181
- * console.log(await $doubled.pick()); // 50 (override active)
182
- *
183
- * // Dependency change clears override
184
- * await $source.set(15);
185
- * console.log(await $doubled.pick()); // 30 (recomputed, override cleared)
186
- * ```
187
- *
188
- * @public
189
- */
190
- set(value: NotPromise<T> | ((current: T) => NotPromise<T>)): Promise<void>;
191
- /**
192
- * Forces recomputation of the value, even if it's not marked as dirty.
193
- *
194
- * @returns A promise that resolves after the recomputation is complete and all
195
- * dependent effects have been notified.
196
- *
197
- * @remarks
198
- * This method is useful when you need to force a recomputation of a computed value,
199
- * for example when the computation depends on external data that has changed outside
200
- * the reactive system.
201
- *
202
- * **Behavior:**
203
- * - For nodes with a compute function: Forces the compute function to run again,
204
- * even if no dependencies have changed. This effectively clears any temporary
205
- * override that was set using `set()`.
206
- * - For nodes without a compute function (mutable state): Recomputes the current
207
- * value (which is just the stored value), useful for consistency but typically
208
- * not necessary.
209
- *
210
- * The recomputation happens asynchronously through the reactive graph, ensuring
211
- * proper ordering of updates and effect execution.
212
- *
213
- * @throws Error if the node has been disposed.
214
- *
215
- * @example
216
- * ```typescript
217
- * const $externalData = new FlowNode(() => fetchExternalData());
218
- *
219
- * // Some external event occurs that changes the data source
220
- * externalDataChanged();
221
- *
222
- * // Force recomputation to get the new value
223
- * await $externalData.refresh();
224
- *
225
- * // For computed nodes with temporary overrides
226
- * const $computed = new FlowNode((t) => $source.get(t) * 2);
227
- * $computed.set(100); // Temporary override
228
- * await $computed.refresh(); // Clears override, recomputes from source
229
- * ```
230
- *
231
- * @public
232
- */
233
- refresh(): Promise<void>;
234
- /**
235
- * Gets the current value without any dependency tracking.
236
- *
237
- * @returns A promise that resolves with the current value of type T.
238
- *
239
- * @remarks
240
- * This method reads the value asynchronously through the reactive graph, ensuring proper ordering of
241
- * read operations. Unlike `get(t)`, this method does not create a reactive dependency.
242
- *
243
- * Use `pick()` when you want to read a snapshot of the current value without creating a reactive
244
- * dependency. This is useful for:
245
- * - Reading initial values outside reactive contexts
246
- * - Accessing configuration that shouldn't trigger updates
247
- * - Mixing tracked and untracked reads in the same effect
248
- *
249
- * **Note:** This is an async method. Always use `await` when calling it.
250
- *
251
- * @example
252
- * ```typescript
253
- * // Read a snapshot outside reactive context
254
- * const currentValue = await $state.pick();
255
- *
256
- * // Mix tracked and untracked reads
257
- * effect(async (t) => {
258
- * const tracked = $reactive.get(t); // Triggers re-runs
259
- * const snapshot = await $config.pick(); // Doesn't trigger re-runs
260
- * processData(tracked, snapshot);
261
- * });
262
- * ```
263
- *
264
- * @throws Error if the node has been disposed.
265
- *
266
- * @public
267
- */
268
- pick(): Promise<T>;
269
- /**
270
- * Subscribes a listener function to changes of this node.
271
- *
272
- * @param listener - A callback function that receives the new value whenever it changes.
273
- *
274
- * @returns A disposer function that cancels the subscription when called.
275
- *
276
- * @remarks
277
- * This method creates a reactive subscription that automatically tracks this node as a dependency.
278
- * The listener is executed:
279
- * - Immediately with the current value when the subscription is created
280
- * - Automatically whenever the value changes
281
- *
282
- * The subscription uses a {@link FlowEffect} internally to manage the reactive tracking and
283
- * automatic re-execution. When the value changes, the listener is called with the new value
284
- * after the update is processed through the reactive graph.
285
- *
286
- * **Cleanup:**
287
- * Always call the returned disposer function when you no longer need the subscription to
288
- * prevent memory leaks and unnecessary computations.
289
- *
290
- * @example
291
- * ```typescript
292
- * const $count = new FlowNode(0);
293
- *
294
- * // Subscribe to changes
295
- * const unsubscribe = $count.subscribe((value) => {
296
- * console.log(`Count is now: ${value}`);
297
- * });
298
- * // Logs immediately: "Count is now: 0"
299
- *
300
- * await $count.set(5);
301
- * // Logs: "Count is now: 5"
302
- *
303
- * // Clean up when done
304
- * unsubscribe();
305
- * ```
306
- *
307
- * @throws Error if the node has been disposed.
308
- *
309
- * @public
310
- */
311
- subscribe(listener: (value: T) => void): () => void;
312
- private _computeValue;
313
- }
314
- //# sourceMappingURL=flowNode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,CAAE,SAAQ,UAAU;IACtE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAwB;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;gBACS,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;IAU/D,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAM1C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,CAAC;IAOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuDG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAMxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAkBnD,OAAO,CAAC,aAAa;CA0BrB"}
@@ -1,57 +0,0 @@
1
- import { FlowNode } from './flowNode';
2
- /**
3
- * A generic utility type for creating read-only views of reactive nodes.
4
- *
5
- * @typeParam T - The type of the value held by the reactive node.
6
- *
7
- * @remarks
8
- * `FlowReadonly` is a type alias based on {@link FlowNode} with the `set()` method removed,
9
- * making it a read-only view. It provides all the reactive capabilities of `FlowNode`
10
- * (dependency tracking, lazy computation, caching, reading values) but prevents mutation.
11
- *
12
- * **Difference from FlowConstant and FlowDerivation:**
13
- * - {@link FlowConstant}: Specialized type for immutable constants that compute once and never change
14
- * - {@link FlowDerivation}: Specialized type for computed values that automatically recompute when dependencies change
15
- * - `FlowReadonly`: Generic utility type that can be used with any `FlowNode` to create a read-only view
16
- *
17
- * **Use Cases:**
18
- * - **Type Safety**: Ensure functions don't accidentally mutate state by accepting `FlowReadonly` instead of `FlowState`
19
- * - **API Design**: Expose read-only views of internal state to prevent external mutation
20
- * - **Function Parameters**: Accept any reactive node (state, derivation, constant) but prevent mutation
21
- * - **Composition**: Create read-only wrappers around mutable states for safer sharing
22
- *
23
- * @example
24
- * ```typescript
25
- * // Type safety: Function that only reads state
26
- * function displayCount(count: FlowReadonly<number>) {
27
- * // count.set(100); // TypeScript error: Property 'set' does not exist
28
- * effect((t) => {
29
- * console.log(count.get(t)); // OK: Reading is allowed
30
- * });
31
- * }
32
- *
33
- * const $count = state(0);
34
- * displayCount($count); // OK: FlowState is assignable to FlowReadonly
35
- *
36
- * // API design: Expose read-only view
37
- * class Counter {
38
- * private _count = state(0);
39
- *
40
- * get count(): FlowReadonly<number> {
41
- * return this._count; // FlowState is assignable to FlowReadonly
42
- * }
43
- *
44
- * increment() {
45
- * this._count.set(n => n + 1); // Internal mutation allowed
46
- * }
47
- * }
48
- *
49
- * const counter = new Counter();
50
- * // counter.count.set(100); // TypeScript error: Cannot mutate read-only view
51
- * const current = await counter.count.pick(); // OK: Reading is allowed
52
- * ```
53
- *
54
- * @public
55
- */
56
- export type FlowReadonly<T> = Omit<FlowNode<T>, "set" | "refresh">;
57
- //# sourceMappingURL=flowReadonly.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowReadonly.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC"}
@@ -1,96 +0,0 @@
1
- import { NotPromise } from '../../base';
2
- import { FlowNode } from './flowNode';
3
- /**
4
- * Represents a reactive state that holds a mutable value.
5
- *
6
- * @typeParam T - The type of the state value.
7
- *
8
- * @remarks
9
- * `FlowState` is a type alias of {@link FlowNode}, providing a mutable reactive state that can be
10
- * updated using the `set()` method. It provides all the reactive capabilities of `FlowNode`
11
- * (lazy computation, caching) with the ability to mutate the value.
12
- *
13
- * Unlike {@link FlowConstant}, which is immutable and computes once, states can be updated at any
14
- * time. Unlike {@link FlowDerivation}, which recomputes when dependencies change, states are
15
- * updated explicitly via `set()`.
16
- *
17
- * **Reading Values:**
18
- * You can read the state value using `get(t)` for tracked access (creates reactive dependency)
19
- * or `pick()` for untracked access (reads without creating dependency).
20
- *
21
- * **Updating Values:**
22
- * When the state is updated with a new value that differs from the current value (strict equality),
23
- * all dependent effects and derivations are automatically notified and re-executed. If the new value
24
- * is strictly equal to the current value, no notification occurs.
25
- *
26
- * @example
27
- * ```typescript
28
- * const $count = state(0);
29
- *
30
- * // Read with tracking
31
- * effect((t) => {
32
- * console.log($count.get(t)); // Effect re-runs when $count changes
33
- * });
34
- *
35
- * // Read without tracking
36
- * const snapshot = await $count.pick();
37
- *
38
- * // Update the value
39
- * await $count.set(1);
40
- * await $count.set(current => current + 1);
41
- * ```
42
- *
43
- * @public
44
- */
45
- export type FlowState<T> = Omit<FlowNode<T>, "refresh">;
46
- /**
47
- * Creates a new reactive state holding a mutable value.
48
- *
49
- * @typeParam T - The type of the state value.
50
- *
51
- * @param value - The initial value for the state, or a function that returns the initial value.
52
- * If a function is provided, it is called lazily only when the value is first accessed via
53
- * `get()` or `pick()`. If a direct value is provided, it is stored immediately.
54
- *
55
- * @returns A new instance of {@link FlowState} that provides reactive access to the mutable value.
56
- *
57
- * @remarks
58
- * State is the most common reactive primitive - a mutable container that notifies dependents
59
- * when its value changes. Use `set()` to update the value (returns `Promise<void>`) and `get(t)`
60
- * or `pick()` to read it.
61
- *
62
- * **Lazy Initialization:**
63
- * When a function is provided, the initialization is lazy - the function is not called immediately
64
- * upon creation. It executes only when:
65
- * - The value is first read via `get(t)` or `pick()`
66
- * - The state is watched via `watch()`
67
- *
68
- * This is useful for expensive initializations that may not be needed immediately.
69
- *
70
- * **When to Use States:**
71
- * - Use `state()` for mutable values that can be updated directly
72
- * - Use `constant()` for values that compute once and never change
73
- * - Use `derivation()` for values that recompute when dependencies change
74
- *
75
- * @example
76
- * ```typescript
77
- * // Direct value - initialized immediately
78
- * const $count = state(0);
79
- *
80
- * // Lazy initialization - computed on first access
81
- * const $config = state(() => {
82
- * return loadConfiguration();
83
- * });
84
- *
85
- * effect((t) => {
86
- * console.log($count.get(t));
87
- * });
88
- *
89
- * await $count.set(1); // Logs: 1
90
- * await $count.set(n => n + 1); // Logs: 2
91
- * ```
92
- *
93
- * @public
94
- */
95
- export declare function state<T>(value: NotPromise<T> | (() => NotPromise<T>)): FlowState<T>;
96
- //# sourceMappingURL=flowState.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowState.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,KAAK,CAAC,CAAC,EACtB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,GAC1C,SAAS,CAAC,CAAC,CAAC,CAEd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
@@ -1,53 +0,0 @@
1
- import { FlowReadonly, FlowReadonlyAsync } from '../flow';
2
- import { FlowTracker } from '../flow/base/flowTracker';
3
- import { SolidResource } from './primitives';
4
- /**
5
- * Utility type that excludes Promise types from T.
6
- * Used to ensure type safety for synchronous derivations/resources.
7
- *
8
- * @public
9
- */
10
- /**
11
- * Converts a FlowNode, FlowNodeAsync, or getter function into a SolidResource.
12
- *
13
- * @param flow - The FlowNode, FlowNodeAsync, or getter function to convert.
14
- * @returns A SolidResource that wraps the value or computation.
15
- *
16
- * @remarks
17
- * This function bridges PicoFlow's reactive system with SolidJS, allowing you to use
18
- * PicoFlow nodes and computations within Solid components. All conversions return a
19
- * `SolidResource`, which can handle both synchronous and asynchronous values seamlessly.
20
- *
21
- * The conversion works with:
22
- * - **FlowNode**: Synchronous reactive nodes (e.g., from `state()` or `derivation()`)
23
- * - **FlowNodeAsync**: Asynchronous reactive nodes (e.g., from `resourceAsync()`)
24
- * - **Getter functions**: Computation functions that use a FlowTracker to access reactive values
25
- *
26
- * The created SolidResource automatically subscribes to the PicoFlow nodes and updates
27
- * when their values change. The subscription is properly cleaned up when the Solid
28
- * component unmounts.
29
- *
30
- * @example
31
- * ```typescript
32
- * import { from } from 'picoflow/solid';
33
- * import { state } from 'picoflow';
34
- *
35
- * // Convert a PicoFlow state to a Solid resource
36
- * const $count = state(0);
37
- * const solidCount = from($count);
38
- *
39
- * // Use in a Solid component
40
- * function Counter() {
41
- * return <div>Count: {solidCount.get()}</div>;
42
- * }
43
- *
44
- * // Or convert a computation function
45
- * const solidDerived = from((t) => {
46
- * return solidCount.get(t) * 2;
47
- * });
48
- * ```
49
- *
50
- * @public
51
- */
52
- export declare function from<T>(flow: FlowReadonlyAsync<T> | FlowReadonly<T> | ((t: FlowTracker) => T) | ((t: FlowTracker) => Promise<T>)): SolidResource<T>;
53
- //# sourceMappingURL=converters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../../../src/solid/converters.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAmE7C;;;;;GAKG;AAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACrB,IAAI,EACD,iBAAiB,CAAC,CAAC,CAAC,GACpB,YAAY,CAAC,CAAC,CAAC,GACf,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,CAAC,CAAC,GACvB,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,aAAa,CAAC,CAAC,CAAC,CAUlB"}
@@ -1,3 +0,0 @@
1
- export * from './converters';
2
- export * from './primitives';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solid/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}