@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,567 +0,0 @@
1
- <!-- e795d61b-15e2-4796-9ca1-7878e5c3709b fe8b0d3c-6bd4-436a-9d8b-a0eedf4b07e4 -->
2
- # PicoFlow Guide Documentation Plan
3
-
4
- ## Overview
5
-
6
- Write complete documentation for PicoFlow targeting complete beginners with no prior reactive programming experience. Use a concepts-first approach followed by practical examples with Mermaid diagrams for visual explanations. All content in English.
7
-
8
- ## Current State
9
-
10
- Existing files in `docs/guide/`:
11
-
12
- - [getting-started.md](docs/guide/getting-started.md) - Basic intro (40 lines)
13
- - [installation.md](docs/guide/installation.md) - Complete (64 lines)
14
- - [concepts.md](docs/guide/concepts.md) - Good foundation (88 lines)
15
- - [state.md](docs/guide/state.md) - Stub (5 lines)
16
- - [effects-derivations.md](docs/guide/effects-derivations.md) - Stub to split into two files
17
- - [resources-streams.md](docs/guide/resources-streams.md) - Stub to split into two files
18
- - [advanced.md](docs/guide/advanced.md) - Stub (5 lines)
19
- - [examples.md](docs/guide/examples.md) - Stub (5 lines)
20
-
21
- ## New File Structure
22
-
23
- After implementation:
24
-
25
- - [getting-started.md](docs/guide/getting-started.md)
26
- - [installation.md](docs/guide/installation.md)
27
- - [concepts.md](docs/guide/concepts.md)
28
- - [state.md](docs/guide/state.md)
29
- - [effects.md](docs/guide/effects.md) - NEW (split from effects-derivations.md)
30
- - [derivations.md](docs/guide/derivations.md) - NEW (split from effects-derivations.md)
31
- - [resources.md](docs/guide/resources.md) - NEW (split from resources-streams.md)
32
- - [streams.md](docs/guide/streams.md) - NEW (split from resources-streams.md)
33
- - [advanced.md](docs/guide/advanced.md)
34
- - [examples.md](docs/guide/examples.md)
35
-
36
- ## Documentation Structure
37
-
38
- ### 1. Update [getting-started.md](docs/guide/getting-started.md)
39
-
40
- **Goal**: Welcoming introduction that explains reactive programming from scratch
41
-
42
- **Content to add**:
43
-
44
- - What is reactive programming (analogy: spreadsheet cells)
45
- - Why use reactive programming (automatic updates, declarative code)
46
- - PicoFlow's philosophy (explicit tracking, fine-grained control)
47
- - Comparison with imperative approach (before/after example)
48
- - Enhanced quick example with annotations
49
- - Clear next steps
50
-
51
- **Mermaid diagrams**:
52
-
53
- - Flow diagram showing reactive vs imperative updates
54
-
55
- **Estimated length**: ~120-140 lines
56
-
57
- ### 2. Keep [installation.md](docs/guide/installation.md) as-is
58
-
59
- Already complete and well-structured.
60
-
61
- ### 3. Enhance [concepts.md](docs/guide/concepts.md)
62
-
63
- **Goal**: Deep dive into core concepts with beginner-friendly explanations
64
-
65
- **Content to improve/add**:
66
-
67
- - Explain "dependency" concept with simple analogy
68
- - Visual metaphor for TrackingContext (like a notebook recording what you read)
69
- - Detailed explanation of `.get(t)` vs `.pick()` with real-world scenarios
70
- - Add section on "The $ prefix convention"
71
- - Add section on "Disposal and cleanup"
72
- - Expand primitives overview with when to use each
73
- - Add common patterns section
74
- - More visual examples
75
-
76
- **Mermaid diagrams**:
77
-
78
- - TrackingContext dependency registration flow
79
- - Effect execution cycle
80
- - Comparison diagram of `.get(t)` vs `.pick()`
81
-
82
- **Estimated length**: ~180-200 lines
83
-
84
- ### 4. Write [state.md](docs/guide/state.md)
85
-
86
- **Goal**: Complete guide to mutable and immutable reactive values
87
-
88
- **Sections**:
89
-
90
- 1. Introduction to State
91
-
92
- - What is state
93
- - When to use state vs constants
94
-
95
- 2. Creating State
96
-
97
- - Basic usage with `state()`
98
- - Initial values
99
-
100
- 3. Reading State Values
101
-
102
- - Reactive reads with `.get(t)`
103
- - Non-reactive reads with `.pick()`
104
-
105
- 4. Updating State
106
-
107
- - Direct values with `.set(value)`
108
- - Updater functions with `.set(fn)`
109
-
110
- 5. Constants
111
-
112
- - What are constants
113
- - Lazy vs eager initialization
114
- - Use cases
115
-
116
- 6. Practical Examples
117
-
118
- - Counter
119
- - Form state
120
- - Configuration values
121
-
122
- 7. Best Practices
123
-
124
- - When to use state vs constants
125
- - Naming conventions
126
- - Common pitfalls
127
-
128
- **Mermaid diagrams**:
129
-
130
- - State update and notification flow
131
- - Lazy constant initialization diagram
132
-
133
- **Estimated length**: ~200-220 lines
134
-
135
- ### 5. Write [effects.md](docs/guide/effects.md) - NEW FILE
136
-
137
- **Goal**: Comprehensive guide to side effects
138
-
139
- **Sections**:
140
-
141
- 1. Understanding Effects
142
-
143
- - What are side effects
144
- - Examples of side effects (DOM updates, logging, API calls)
145
- - Why effects are needed in reactive systems
146
-
147
- 2. How Effects Work
148
-
149
- - The tracking context
150
- - Automatic re-execution
151
- - Effect lifecycle
152
-
153
- 3. Creating Effects
154
-
155
- - Basic syntax with `effect((t) => {})`
156
- - The tracking parameter
157
- - Immediate execution
158
-
159
- 4. Effect Dependencies
160
-
161
- - Explicit dependency tracking with `.get(t)`
162
- - Multiple dependencies
163
- - Conditional dependencies
164
- - Avoiding dependencies with `.pick()`
165
-
166
- 5. Effect Patterns
167
-
168
- - Logging and debugging
169
- - DOM manipulation
170
- - Local storage sync
171
- - Event handlers
172
-
173
- 6. Disposal and Cleanup
174
-
175
- - When to dispose effects
176
- - Using `.dispose()`
177
- - Memory leak prevention
178
-
179
- 7. Practical Examples
180
-
181
- - Console logging
182
- - Document title updates
183
- - Form validation feedback
184
- - Auto-save
185
-
186
- 8. Best Practices
187
-
188
- - Keep effects focused
189
- - Avoid effects in effects
190
- - Error handling
191
- - Common pitfalls
192
-
193
- **Mermaid diagrams**:
194
-
195
- - Effect execution and re-execution flow
196
- - Dependency tracking visualization
197
- - Effect lifecycle diagram
198
-
199
- **Estimated length**: ~200-220 lines
200
-
201
- ### 6. Write [derivations.md](docs/guide/derivations.md) - NEW FILE
202
-
203
- **Goal**: Complete guide to computed values
204
-
205
- **Sections**:
206
-
207
- 1. Understanding Derivations
208
-
209
- - What are computed values
210
- - Pure functions concept
211
- - Difference between effects and derivations
212
-
213
- 2. How Derivations Work
214
-
215
- - Lazy evaluation explained
216
- - Caching behavior
217
- - Dirty checking
218
-
219
- 3. Creating Derivations
220
-
221
- - Basic syntax with `derivation((t) => {})`
222
- - Return values
223
- - Type inference
224
-
225
- 4. Derivation Dependencies
226
-
227
- - Tracking with `.get(t)`
228
- - Multiple source dependencies
229
- - Chaining derivations
230
-
231
- 5. Advanced Patterns
232
-
233
- - Combining multiple derivations
234
- - Conditional computations
235
- - Complex calculations
236
- - Performance considerations
237
-
238
- 6. Practical Examples
239
-
240
- - Mathematical calculations (sum, average, total)
241
- - Filtered and sorted lists
242
- - Formatted values (currency, dates)
243
- - Derived UI state
244
-
245
- 7. Best Practices
246
-
247
- - Keep derivations pure (no side effects)
248
- - Avoid expensive operations
249
- - When to use constants vs derivations
250
- - Common pitfalls
251
-
252
- **Mermaid diagrams**:
253
-
254
- - Derivation lazy evaluation flow
255
- - Derivation caching and invalidation
256
- - Comparison: derivation vs effect
257
- - Chained derivations dependency graph
258
-
259
- **Estimated length**: ~180-200 lines
260
-
261
- ### 7. Write [resources.md](docs/guide/resources.md) - NEW FILE
262
-
263
- **Goal**: Complete guide to resource management
264
-
265
- **Sections**:
266
-
267
- 1. Understanding Resources
268
-
269
- - What are resources
270
- - Difference from state
271
- - When to use resources
272
- - Pull-based data fetching
273
-
274
- 2. Synchronous Resources
275
-
276
- - Creating with `resource(fetchFn, initialValue)`
277
- - The fetch function
278
- - Initial values
279
- - Undefined state handling
280
-
281
- 3. Fetching and Refetching
282
-
283
- - Manual fetch with `.fetch()`
284
- - Reactive refetching
285
- - Loading states
286
-
287
- 4. Asynchronous Resources
288
-
289
- - Creating with `resourceAsync(fetchFn)`
290
- - Promise-based access
291
- - Async/await patterns
292
- - Promise resolution
293
-
294
- 5. Practical Examples
295
-
296
- - API data fetching
297
- - File loading
298
- - Database queries
299
- - Configuration loading
300
-
301
- 6. Error Handling
302
-
303
- - Try-catch patterns
304
- - Error states
305
- - Retry logic
306
-
307
- 7. Best Practices
308
-
309
- - Resource cleanup
310
- - Caching strategies
311
- - Loading indicators
312
- - Error boundaries
313
- - Common pitfalls
314
-
315
- **Mermaid diagrams**:
316
-
317
- - Resource fetch lifecycle
318
- - Sync vs async resource comparison
319
- - Resource state transitions (idle -> fetching -> resolved/error)
320
-
321
- **Estimated length**: ~180-200 lines
322
-
323
- ### 8. Write [streams.md](docs/guide/streams.md) - NEW FILE
324
-
325
- **Goal**: Complete guide to reactive streams
326
-
327
- **Sections**:
328
-
329
- 1. Understanding Streams
330
-
331
- - What are streams
332
- - Push-based vs pull-based data
333
- - When to use streams vs resources
334
- - Event-driven updates
335
-
336
- 2. How Streams Work
337
-
338
- - The updater function
339
- - The setter callback
340
- - The disposer pattern
341
- - Initial undefined state
342
-
343
- 3. Creating Streams
344
-
345
- - Basic syntax with `stream((set) => disposer)`
346
- - Setting up subscriptions
347
- - Returning cleanup functions
348
-
349
- 4. Stream Patterns
350
-
351
- - WebSocket connections
352
- - DOM event listeners
353
- - Timers and intervals
354
- - Server-sent events
355
- - Observable integration
356
-
357
- 5. Asynchronous Streams
358
-
359
- - Creating with `streamAsync((set) => disposer)`
360
- - Promise-based values
361
- - Async/await in effects
362
-
363
- 6. Practical Examples
364
-
365
- - WebSocket message stream
366
- - Mouse position tracker
367
- - Timer/countdown
368
- - Keyboard events
369
- - Real-time notifications
370
-
371
- 7. Cleanup and Disposal
372
-
373
- - Disposer function importance
374
- - Avoiding memory leaks
375
- - Connection management
376
-
377
- 8. Best Practices
378
-
379
- - Always return disposers
380
- - Handle errors in streams
381
- - Avoid duplicate subscriptions
382
- - Common pitfalls
383
-
384
- **Mermaid diagrams**:
385
-
386
- - Stream updater and disposer flow
387
- - Push-based data flow visualization
388
- - Stream lifecycle (setup -> updates -> disposal)
389
- - Sync vs async stream comparison
390
-
391
- **Estimated length**: ~200-220 lines
392
-
393
- ### 9. Write [advanced.md](docs/guide/advanced.md)
394
-
395
- **Goal**: Guide to reactive collections (Map and Array)
396
-
397
- **Sections**:
398
-
399
- 1. Introduction to Reactive Collections
400
-
401
- - Why collections need special handling
402
- - Fine-grained vs coarse-grained reactivity
403
- - Performance benefits
404
-
405
- 2. Reactive Maps
406
-
407
- - Creating with `map()`
408
- - Whole map tracking with `.get(t)`
409
- - Fine-grained tracking with `$lastSet`
410
- - Fine-grained tracking with `$lastDeleted`
411
- - Methods: `setAt()`, `delete()`, `get()`, `pick()`
412
-
413
- 3. Reactive Arrays
414
-
415
- - Creating with `array()`
416
- - Whole array tracking
417
- - Fine-grained tracking with `$lastAction`
418
- - Array methods: `push()`, `pop()`, `shift()`, `unshift()`, `splice()`, `clear()`
419
-
420
- 4. Practical Examples
421
-
422
- - User list management
423
- - Shopping cart
424
- - Todo list with granular updates
425
- - Entity cache
426
- - UI animations based on operations
427
-
428
- 5. Patterns and Tips
429
-
430
- - When to track whole vs operations
431
- - Performance considerations
432
- - Disposal of items
433
- - Common patterns
434
-
435
- **Mermaid diagrams**:
436
-
437
- - Map operation tracking flow
438
- - Array operation tracking flow
439
- - Fine-grained vs coarse-grained reactivity comparison
440
-
441
- **Estimated length**: ~180-200 lines
442
-
443
- ### 10. Write [examples.md](docs/guide/examples.md)
444
-
445
- **Goal**: Real-world complete examples showing PicoFlow in action
446
-
447
- **Examples to include**:
448
-
449
- 1. Todo List Application
450
-
451
- - State management
452
- - Derived values (completed count, filtered lists)
453
- - Effects for persistence
454
-
455
- 2. Form with Validation
456
-
457
- - Form state
458
- - Derived validation
459
- - Computed error messages
460
-
461
- 3. Real-time Data Dashboard
462
-
463
- - WebSocket stream
464
- - Derived statistics
465
- - Multiple effects for UI updates
466
-
467
- 4. Shopping Cart
468
-
469
- - Reactive map for items
470
- - Derived totals
471
- - Fine-grained updates
472
-
473
- 5. Auto-save Feature
474
-
475
- - Debounced effects
476
- - Resource fetching
477
- - Error handling
478
-
479
- Each example should:
480
-
481
- - Have complete, runnable code
482
- - Include explanatory comments
483
- - Show best practices
484
- - Demonstrate multiple features working together
485
- - Include a Mermaid diagram showing data flow
486
-
487
- **Mermaid diagrams**:
488
-
489
- - Data flow diagram for each major example
490
-
491
- **Estimated length**: ~280-320 lines
492
-
493
- ### 11. Update VitePress config
494
-
495
- Update [docs/.vitepress/config.mts](docs/.vitepress/config.mts) sidebar to reflect new file structure:
496
-
497
- - Change "Effects & Derivations" to separate "Effects" and "Derivations" links
498
- - Change "Resources & Streams" to separate "Resources" and "Streams" links
499
-
500
- ## Documentation Principles
501
-
502
- Throughout all files:
503
-
504
- 1. **Beginner-Friendly Language**
505
-
506
- - Avoid jargon without explanation
507
- - Use analogies and metaphors
508
- - Define technical terms when first used
509
-
510
- 2. **Visual Aids**
511
-
512
- - Use Mermaid diagrams for flows and concepts
513
- - Flowcharts for decision trees
514
- - Sequence diagrams for lifecycles
515
- - Graph diagrams for dependencies
516
-
517
- 3. **Progressive Complexity**
518
-
519
- - Start simple, build up gradually
520
- - Each concept builds on previous ones
521
- - Clear section progression
522
-
523
- 4. **Practical Examples**
524
-
525
- - Every concept has an example
526
- - Examples are realistic and relatable
527
- - Code includes helpful comments
528
-
529
- 5. **Clear Structure**
530
-
531
- - Consistent heading hierarchy
532
- - Visual separation of sections
533
- - Frequent code examples
534
-
535
- 6. **Cross-referencing**
536
-
537
- - Link to related concepts
538
- - Link to API reference
539
- - Link to other guide sections
540
-
541
- ## Implementation Order
542
-
543
- 1. [concepts.md](docs/guide/concepts.md) - Foundation with diagrams
544
- 2. [state.md](docs/guide/state.md) - Most basic primitive
545
- 3. [effects.md](docs/guide/effects.md) - Side effects explained
546
- 4. [derivations.md](docs/guide/derivations.md) - Computed values
547
- 5. [resources.md](docs/guide/resources.md) - Data fetching
548
- 6. [streams.md](docs/guide/streams.md) - Event streams
549
- 7. [advanced.md](docs/guide/advanced.md) - Collections
550
- 8. [examples.md](docs/guide/examples.md) - Complete examples
551
- 9. [getting-started.md](docs/guide/getting-started.md) - Final polish
552
- 10. Update VitePress config for new file structure
553
-
554
- ### To-dos
555
-
556
- - [ ] Install TypeDoc, plugins, and VitePress dependencies
557
- - [ ] Create typedoc.json configuration file
558
- - [ ] Create docs folder structure (.vitepress, guide, etc.)
559
- - [ ] Create VitePress config with nav and sidebar
560
- - [ ] Create docs/index.md homepage with hero and features
561
- - [ ] Create getting-started and concepts guide pages
562
- - [ ] Add docs:dev, docs:build, docs:preview scripts to package.json
563
- - [ ] Archive or remove old API Extractor generated files
564
- - [ ] Add VitePress generated folders to .gitignore
565
- - [ ] Test docs generation and verify markdown rendering
566
- - [ ] Test production build and preview
567
- - [ ] Update README with new documentation links and workflow
@@ -1,67 +0,0 @@
1
- /**
2
- * Contract for objects that own resources and must be cleaned up explicitly.
3
- *
4
- * @remarks
5
- * Many PicoFlow primitives expose `dispose()` so you can tear down subscriptions,
6
- * listeners, or reactive links when they are no longer needed (e.g., component
7
- * unmount, feature teardown, test cleanup).
8
- *
9
- * Typical options:
10
- * - `{ self: true }` — dispose only this instance (dependents decide their own lifecycle).
11
- * - `{ self: false }` or omitted — also dispose dependents, if the implementation supports it.
12
- *
13
- * The exact cascade behavior depends on the concrete primitive; consult its docs.
14
- *
15
- * @example
16
- * ```typescript
17
- * const $state = state(0);
18
- * const fx = effect((t) => console.log($state.get(t)));
19
- *
20
- * $state.dispose(); // Common teardown path
21
- * $state.dispose({ self: true }); // Dispose only this instance if you want dependents to persist
22
- * ```
23
- *
24
- * @public
25
- */
26
- export interface FlowDisposable {
27
- /**
28
- * Disposes resources held by this object.
29
- *
30
- * @param options - Optional disposal behavior.
31
- * @param options.self - When true, dispose only this object. When false or
32
- * omitted, the implementation may also dispose dependents.
33
- *
34
- * @remarks
35
- * Use `dispose()` during teardown (unmount, test cleanup, feature shutdown).
36
- * Calling `dispose()` more than once may throw; behavior is defined by the
37
- * concrete implementation.
38
- *
39
- * @throws Error if the object has already been disposed (implementation-specific).
40
- */
41
- dispose(options?: {
42
- self: boolean;
43
- }): void;
44
- }
45
- /**
46
- * Runtime type guard that checks whether an object is disposable.
47
- *
48
- * @param obj - Value to test.
49
- * @returns `true` if `obj` exposes a callable `dispose`; otherwise `false`.
50
- *
51
- * @remarks
52
- * Use this for defensive cleanup in mixed collections or optional resources.
53
- * It performs a runtime shape check; no assumptions about specific types are made.
54
- *
55
- * @example
56
- * ```typescript
57
- * function cleanup(items: unknown[]) {
58
- * for (const item of items) {
59
- * if (isDisposable(item)) item.dispose();
60
- * }
61
- * }
62
- * ```
63
- *
64
- * @public
65
- */
66
- export declare function isDisposable(obj: unknown): obj is FlowDisposable;
67
- //# sourceMappingURL=flowDisposable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowDisposable.d.ts","sourceRoot":"","sources":["../../../../src/flow/base/flowDisposable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAMhE"}