@ersbeth/picoflow 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/CHANGELOG.md +43 -0
  3. package/README.md +2 -18
  4. package/biome.json +45 -35
  5. package/dist/picoflow.js +856 -1530
  6. package/dist/types/api/base/flowDisposable.d.ts +41 -0
  7. package/dist/types/api/base/flowDisposable.d.ts.map +1 -0
  8. package/dist/types/api/base/flowObservable.d.ts +27 -0
  9. package/dist/types/api/base/flowObservable.d.ts.map +1 -0
  10. package/dist/types/api/base/flowSubscribable.d.ts +79 -0
  11. package/dist/types/api/base/flowSubscribable.d.ts.map +1 -0
  12. package/dist/types/api/base/flowTracker.d.ts +8 -0
  13. package/dist/types/api/base/flowTracker.d.ts.map +1 -0
  14. package/dist/types/api/base/index.d.ts +5 -0
  15. package/dist/types/api/base/index.d.ts.map +1 -0
  16. package/dist/types/api/index.d.ts +3 -0
  17. package/dist/types/api/index.d.ts.map +1 -0
  18. package/dist/types/api/nodes/async/flowConstantAsync.d.ts +31 -0
  19. package/dist/types/api/nodes/async/flowConstantAsync.d.ts.map +1 -0
  20. package/dist/types/api/nodes/async/flowDerivationAsync.d.ts +37 -0
  21. package/dist/types/api/nodes/async/flowDerivationAsync.d.ts.map +1 -0
  22. package/dist/types/api/nodes/async/flowStateAsync.d.ts +41 -0
  23. package/dist/types/api/nodes/async/flowStateAsync.d.ts.map +1 -0
  24. package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts +30 -0
  25. package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts.map +1 -0
  26. package/dist/types/{flow → api}/nodes/async/index.d.ts +1 -2
  27. package/dist/types/api/nodes/async/index.d.ts.map +1 -0
  28. package/dist/types/api/nodes/collections/flowArray.d.ts +134 -0
  29. package/dist/types/api/nodes/collections/flowArray.d.ts.map +1 -0
  30. package/dist/types/api/nodes/collections/flowMap.d.ts +98 -0
  31. package/dist/types/api/nodes/collections/flowMap.d.ts.map +1 -0
  32. package/dist/types/api/nodes/collections/index.d.ts.map +1 -0
  33. package/dist/types/api/nodes/flowEffect.d.ts +28 -0
  34. package/dist/types/api/nodes/flowEffect.d.ts.map +1 -0
  35. package/dist/types/api/nodes/flowSignal.d.ts +25 -0
  36. package/dist/types/api/nodes/flowSignal.d.ts.map +1 -0
  37. package/dist/types/api/nodes/flowValue.d.ts +35 -0
  38. package/dist/types/api/nodes/flowValue.d.ts.map +1 -0
  39. package/dist/types/api/nodes/index.d.ts +8 -0
  40. package/dist/types/api/nodes/index.d.ts.map +1 -0
  41. package/dist/types/api/nodes/sync/flowConstant.d.ts +29 -0
  42. package/dist/types/api/nodes/sync/flowConstant.d.ts.map +1 -0
  43. package/dist/types/api/nodes/sync/flowDerivation.d.ts +36 -0
  44. package/dist/types/api/nodes/sync/flowDerivation.d.ts.map +1 -0
  45. package/dist/types/api/nodes/sync/flowState.d.ts +39 -0
  46. package/dist/types/api/nodes/sync/flowState.d.ts.map +1 -0
  47. package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts +28 -0
  48. package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts.map +1 -0
  49. package/dist/types/{flow → api}/nodes/sync/index.d.ts +1 -2
  50. package/dist/types/api/nodes/sync/index.d.ts.map +1 -0
  51. package/dist/types/api/nodes/utils.d.ts +22 -0
  52. package/dist/types/api/nodes/utils.d.ts.map +1 -0
  53. package/dist/types/base/disposable.d.ts +11 -0
  54. package/dist/types/base/disposable.d.ts.map +1 -0
  55. package/dist/types/base/executionStack.d.ts +14 -0
  56. package/dist/types/base/executionStack.d.ts.map +1 -0
  57. package/dist/types/base/index.d.ts +6 -0
  58. package/dist/types/base/index.d.ts.map +1 -0
  59. package/dist/types/base/node.d.ts +27 -0
  60. package/dist/types/base/node.d.ts.map +1 -0
  61. package/dist/types/base/observable.d.ts +37 -0
  62. package/dist/types/base/observable.d.ts.map +1 -0
  63. package/dist/types/base/observer.d.ts +25 -0
  64. package/dist/types/base/observer.d.ts.map +1 -0
  65. package/dist/types/converters/index.d.ts +2 -0
  66. package/dist/types/converters/index.d.ts.map +1 -0
  67. package/dist/types/converters/solid.d.ts +46 -0
  68. package/dist/types/converters/solid.d.ts.map +1 -0
  69. package/dist/types/index.d.ts +2 -63
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/nodes/arrayNode.d.ts +2 -0
  72. package/dist/types/nodes/arrayNode.d.ts.map +1 -0
  73. package/dist/types/nodes/effectNode.d.ts +2 -0
  74. package/dist/types/nodes/effectNode.d.ts.map +1 -0
  75. package/dist/types/nodes/index.d.ts +9 -0
  76. package/dist/types/nodes/index.d.ts.map +1 -0
  77. package/dist/types/nodes/mapNode.d.ts +2 -0
  78. package/dist/types/nodes/mapNode.d.ts.map +1 -0
  79. package/dist/types/nodes/signalNode.d.ts +2 -0
  80. package/dist/types/nodes/signalNode.d.ts.map +1 -0
  81. package/dist/types/nodes/valueAsyncNode.d.ts +2 -0
  82. package/dist/types/nodes/valueAsyncNode.d.ts.map +1 -0
  83. package/dist/types/nodes/valueNode.d.ts +2 -0
  84. package/dist/types/nodes/valueNode.d.ts.map +1 -0
  85. package/dist/types/nodes/valueSyncNode.d.ts +2 -0
  86. package/dist/types/nodes/valueSyncNode.d.ts.map +1 -0
  87. package/dist/types/schedulers/asyncResolver.d.ts +2 -0
  88. package/dist/types/schedulers/asyncResolver.d.ts.map +1 -0
  89. package/dist/types/schedulers/asyncScheduler.d.ts +2 -0
  90. package/dist/types/schedulers/asyncScheduler.d.ts.map +1 -0
  91. package/dist/types/schedulers/index.d.ts +5 -0
  92. package/dist/types/schedulers/index.d.ts.map +1 -0
  93. package/dist/types/schedulers/pendingError.d.ts +2 -0
  94. package/dist/types/schedulers/pendingError.d.ts.map +1 -0
  95. package/dist/types/schedulers/scheduler.d.ts +2 -0
  96. package/dist/types/schedulers/scheduler.d.ts.map +1 -0
  97. package/dist/types/schedulers/syncResolver.d.ts +2 -0
  98. package/dist/types/schedulers/syncResolver.d.ts.map +1 -0
  99. package/dist/types/schedulers/syncScheduler.d.ts +2 -0
  100. package/dist/types/schedulers/syncScheduler.d.ts.map +1 -0
  101. package/docs/.vitepress/config.mts +128 -93
  102. package/docs/api/functions/array.md +14 -37
  103. package/docs/api/functions/constant.md +13 -25
  104. package/docs/api/functions/constantAsync.md +69 -0
  105. package/docs/api/functions/derivation.md +14 -33
  106. package/docs/api/functions/derivationAsync.md +34 -0
  107. package/docs/api/functions/from.md +62 -153
  108. package/docs/api/functions/isDisposable.md +8 -30
  109. package/docs/api/functions/map.md +15 -36
  110. package/docs/api/functions/signal.md +8 -23
  111. package/docs/api/functions/state.md +43 -23
  112. package/docs/api/functions/stateAsync.md +69 -0
  113. package/docs/api/functions/subscribe.md +40 -0
  114. package/docs/api/functions/writableDerivation.md +33 -0
  115. package/docs/api/functions/writableDerivationAsync.md +34 -0
  116. package/docs/api/index.md +45 -102
  117. package/docs/api/interfaces/FlowArray.md +439 -0
  118. package/docs/api/interfaces/FlowConstant.md +220 -0
  119. package/docs/api/interfaces/FlowConstantAsync.md +221 -0
  120. package/docs/api/interfaces/FlowDerivation.md +241 -0
  121. package/docs/api/interfaces/FlowDerivationAsync.md +242 -0
  122. package/docs/api/interfaces/FlowDisposable.md +32 -38
  123. package/docs/api/interfaces/FlowEffect.md +64 -0
  124. package/docs/api/interfaces/FlowMap.md +374 -0
  125. package/docs/api/interfaces/FlowObservable.md +155 -0
  126. package/docs/api/interfaces/FlowSignal.md +156 -0
  127. package/docs/api/interfaces/FlowState.md +269 -0
  128. package/docs/api/interfaces/FlowStateAsync.md +268 -0
  129. package/docs/api/interfaces/FlowSubscribable.md +55 -0
  130. package/docs/api/interfaces/FlowTracker.md +61 -0
  131. package/docs/api/interfaces/FlowValue.md +222 -0
  132. package/docs/api/interfaces/FlowWritableDerivation.md +292 -0
  133. package/docs/api/interfaces/FlowWritableDerivationAsync.md +293 -0
  134. package/docs/api/type-aliases/DerivationFunction.md +28 -0
  135. package/docs/api/type-aliases/DerivationFunctionAsync.md +28 -0
  136. package/docs/api/type-aliases/FlowArrayAction.md +19 -8
  137. package/docs/api/type-aliases/FlowDataTracker.md +33 -0
  138. package/docs/api/type-aliases/FlowMapAction.md +48 -0
  139. package/docs/api/type-aliases/FlowOnDataListener.md +33 -0
  140. package/docs/api/type-aliases/FlowOnErrorListener.md +27 -0
  141. package/docs/api/type-aliases/FlowOnPendingListener.md +21 -0
  142. package/docs/api/type-aliases/FlowReadonly.md +22 -0
  143. package/docs/api/type-aliases/InitFunction.md +21 -0
  144. package/docs/api/type-aliases/InitFunctionAsync.md +21 -0
  145. package/docs/api/type-aliases/NotPromise.md +6 -3
  146. package/docs/api/type-aliases/UpdateFunction.md +27 -0
  147. package/docs/api/type-aliases/UpdateFunctionAsync.md +27 -0
  148. package/docs/api/typedoc-sidebar.json +1 -81
  149. package/docs/examples/examples.md +0 -2
  150. package/docs/guide/advanced/architecture.md +1234 -0
  151. package/docs/guide/advanced/migration-v2.md +204 -0
  152. package/docs/guide/advanced/solidjs.md +2 -88
  153. package/docs/guide/introduction/concepts.md +4 -3
  154. package/docs/guide/introduction/conventions.md +2 -33
  155. package/docs/guide/introduction/getting-started.md +28 -23
  156. package/docs/guide/introduction/lifecycle.md +16 -19
  157. package/docs/guide/primitives/array.md +102 -216
  158. package/docs/guide/primitives/constant.md +39 -212
  159. package/docs/guide/primitives/derivations.md +55 -122
  160. package/docs/guide/primitives/effects.md +155 -241
  161. package/docs/guide/primitives/map.md +64 -186
  162. package/docs/guide/primitives/overview.md +45 -128
  163. package/docs/guide/primitives/signal.md +51 -88
  164. package/docs/guide/primitives/state.md +34 -130
  165. package/package.json +56 -60
  166. package/src/api/base/flowDisposable.ts +44 -0
  167. package/src/api/base/flowObservable.ts +28 -0
  168. package/src/api/base/flowSubscribable.ts +87 -0
  169. package/src/api/base/flowTracker.ts +7 -0
  170. package/src/api/base/index.ts +4 -0
  171. package/src/{flow → api}/index.ts +0 -1
  172. package/src/api/nodes/async/flowConstantAsync.ts +36 -0
  173. package/src/api/nodes/async/flowDerivationAsync.ts +42 -0
  174. package/src/api/nodes/async/flowStateAsync.ts +47 -0
  175. package/src/api/nodes/async/flowWritableDerivationAsync.ts +33 -0
  176. package/src/{flow → api}/nodes/async/index.ts +1 -2
  177. package/src/api/nodes/collections/flowArray.ts +155 -0
  178. package/src/api/nodes/collections/flowMap.ts +115 -0
  179. package/src/api/nodes/flowEffect.ts +42 -0
  180. package/src/api/nodes/flowSignal.ts +28 -0
  181. package/src/api/nodes/flowValue.ts +36 -0
  182. package/src/api/nodes/index.ts +7 -0
  183. package/src/api/nodes/sync/flowConstant.ts +33 -0
  184. package/src/api/nodes/sync/flowDerivation.ts +41 -0
  185. package/src/api/nodes/sync/flowState.ts +45 -0
  186. package/src/api/nodes/sync/flowWritableDerivation.ts +31 -0
  187. package/src/{flow → api}/nodes/sync/index.ts +1 -2
  188. package/src/api/nodes/utils.ts +22 -0
  189. package/src/base/disposable.ts +18 -0
  190. package/src/base/executionStack.ts +42 -0
  191. package/src/base/index.ts +5 -0
  192. package/src/base/node.ts +98 -0
  193. package/src/base/observable.ts +87 -0
  194. package/src/base/observer.ts +51 -0
  195. package/src/converters/index.ts +1 -0
  196. package/src/converters/solid.ts +109 -0
  197. package/src/index.ts +2 -64
  198. package/src/nodes/arrayNode.ts +172 -0
  199. package/src/nodes/effectNode.ts +59 -0
  200. package/src/nodes/index.ts +8 -0
  201. package/src/nodes/mapNode.ts +127 -0
  202. package/src/nodes/signalNode.ts +21 -0
  203. package/src/nodes/valueAsyncNode.ts +88 -0
  204. package/src/nodes/valueNode.ts +144 -0
  205. package/src/nodes/valueSyncNode.ts +128 -0
  206. package/src/schedulers/asyncResolver.ts +78 -0
  207. package/src/schedulers/asyncScheduler.ts +66 -0
  208. package/src/schedulers/index.ts +4 -0
  209. package/src/schedulers/pendingError.ts +13 -0
  210. package/src/schedulers/scheduler.ts +9 -0
  211. package/src/schedulers/syncResolver.ts +69 -0
  212. package/src/schedulers/syncScheduler.ts +55 -0
  213. package/test/base/pendingError.test.ts +67 -0
  214. package/test/converters/solid.derivation.browser.test.tsx +69 -0
  215. package/test/converters/solid.node.test.ts +654 -0
  216. package/test/converters/solid.state.browser.test.tsx +1592 -0
  217. package/test/reactivity/flowSignal.test.ts +226 -0
  218. package/test/reactivity/nodes/async/asyncScheduler/asyncResolver.test.ts +593 -0
  219. package/test/reactivity/nodes/async/asyncScheduler/asyncScheduler.test.ts +317 -0
  220. package/test/reactivity/nodes/async/flowConstantAsync.test.ts +652 -0
  221. package/test/reactivity/nodes/async/flowDerivation.test.ts +898 -0
  222. package/test/reactivity/nodes/async/flowDerivationAsync.test.ts +1716 -0
  223. package/test/reactivity/nodes/async/flowStateAsync.test.ts +708 -0
  224. package/test/reactivity/nodes/async/flowWritableDerivationAsync.test.ts +614 -0
  225. package/test/reactivity/nodes/collections/flowArray.asyncStates.test.ts +1289 -0
  226. package/test/reactivity/nodes/collections/flowArray.scalars.test.ts +961 -0
  227. package/test/reactivity/nodes/collections/flowArray.states.test.ts +1035 -0
  228. package/test/reactivity/nodes/collections/flowMap.asyncStates.test.ts +960 -0
  229. package/test/reactivity/nodes/collections/flowMap.scalars.test.ts +775 -0
  230. package/test/reactivity/nodes/collections/flowMap.states.test.ts +958 -0
  231. package/test/reactivity/nodes/sync/flowConstant.test.ts +377 -0
  232. package/test/reactivity/nodes/sync/flowDerivation.test.ts +896 -0
  233. package/test/reactivity/nodes/sync/flowState.test.ts +341 -0
  234. package/test/reactivity/nodes/sync/flowWritableDerivation.test.ts +603 -0
  235. package/test/vitest.d.ts +10 -0
  236. package/tsconfig.json +31 -20
  237. package/typedoc.json +35 -35
  238. package/vite.config.ts +25 -23
  239. package/vitest.browser.config.ts +21 -0
  240. package/vitest.config.ts +12 -12
  241. package/.cursor/plans/unifier-flowresource-avec-flowderivation-c9506e24.plan.md +0 -372
  242. package/.cursor/plans/update-js-e795d61b.plan.md +0 -567
  243. package/dist/types/flow/base/flowDisposable.d.ts +0 -67
  244. package/dist/types/flow/base/flowDisposable.d.ts.map +0 -1
  245. package/dist/types/flow/base/flowEffect.d.ts +0 -127
  246. package/dist/types/flow/base/flowEffect.d.ts.map +0 -1
  247. package/dist/types/flow/base/flowGraph.d.ts +0 -97
  248. package/dist/types/flow/base/flowGraph.d.ts.map +0 -1
  249. package/dist/types/flow/base/flowSignal.d.ts +0 -134
  250. package/dist/types/flow/base/flowSignal.d.ts.map +0 -1
  251. package/dist/types/flow/base/flowTracker.d.ts +0 -15
  252. package/dist/types/flow/base/flowTracker.d.ts.map +0 -1
  253. package/dist/types/flow/base/index.d.ts +0 -7
  254. package/dist/types/flow/base/index.d.ts.map +0 -1
  255. package/dist/types/flow/base/utils.d.ts +0 -20
  256. package/dist/types/flow/base/utils.d.ts.map +0 -1
  257. package/dist/types/flow/collections/flowArray.d.ts +0 -148
  258. package/dist/types/flow/collections/flowArray.d.ts.map +0 -1
  259. package/dist/types/flow/collections/flowMap.d.ts +0 -224
  260. package/dist/types/flow/collections/flowMap.d.ts.map +0 -1
  261. package/dist/types/flow/collections/index.d.ts.map +0 -1
  262. package/dist/types/flow/index.d.ts +0 -4
  263. package/dist/types/flow/index.d.ts.map +0 -1
  264. package/dist/types/flow/nodes/async/flowConstantAsync.d.ts +0 -137
  265. package/dist/types/flow/nodes/async/flowConstantAsync.d.ts.map +0 -1
  266. package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts +0 -137
  267. package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts.map +0 -1
  268. package/dist/types/flow/nodes/async/flowNodeAsync.d.ts +0 -343
  269. package/dist/types/flow/nodes/async/flowNodeAsync.d.ts.map +0 -1
  270. package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts +0 -81
  271. package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts.map +0 -1
  272. package/dist/types/flow/nodes/async/flowStateAsync.d.ts +0 -111
  273. package/dist/types/flow/nodes/async/flowStateAsync.d.ts.map +0 -1
  274. package/dist/types/flow/nodes/async/index.d.ts.map +0 -1
  275. package/dist/types/flow/nodes/index.d.ts +0 -3
  276. package/dist/types/flow/nodes/index.d.ts.map +0 -1
  277. package/dist/types/flow/nodes/sync/flowConstant.d.ts +0 -108
  278. package/dist/types/flow/nodes/sync/flowConstant.d.ts.map +0 -1
  279. package/dist/types/flow/nodes/sync/flowDerivation.d.ts +0 -100
  280. package/dist/types/flow/nodes/sync/flowDerivation.d.ts.map +0 -1
  281. package/dist/types/flow/nodes/sync/flowNode.d.ts +0 -314
  282. package/dist/types/flow/nodes/sync/flowNode.d.ts.map +0 -1
  283. package/dist/types/flow/nodes/sync/flowReadonly.d.ts +0 -57
  284. package/dist/types/flow/nodes/sync/flowReadonly.d.ts.map +0 -1
  285. package/dist/types/flow/nodes/sync/flowState.d.ts +0 -96
  286. package/dist/types/flow/nodes/sync/flowState.d.ts.map +0 -1
  287. package/dist/types/flow/nodes/sync/index.d.ts.map +0 -1
  288. package/dist/types/solid/converters.d.ts +0 -57
  289. package/dist/types/solid/converters.d.ts.map +0 -1
  290. package/dist/types/solid/index.d.ts +0 -3
  291. package/dist/types/solid/index.d.ts.map +0 -1
  292. package/dist/types/solid/primitives.d.ts +0 -181
  293. package/dist/types/solid/primitives.d.ts.map +0 -1
  294. package/docs/api/classes/FlowArray.md +0 -489
  295. package/docs/api/classes/FlowConstant.md +0 -350
  296. package/docs/api/classes/FlowDerivation.md +0 -334
  297. package/docs/api/classes/FlowEffect.md +0 -100
  298. package/docs/api/classes/FlowMap.md +0 -512
  299. package/docs/api/classes/FlowObservable.md +0 -306
  300. package/docs/api/classes/FlowResource.md +0 -380
  301. package/docs/api/classes/FlowResourceAsync.md +0 -362
  302. package/docs/api/classes/FlowSignal.md +0 -160
  303. package/docs/api/classes/FlowState.md +0 -368
  304. package/docs/api/classes/FlowStream.md +0 -367
  305. package/docs/api/classes/FlowStreamAsync.md +0 -364
  306. package/docs/api/classes/SolidDerivation.md +0 -75
  307. package/docs/api/classes/SolidResource.md +0 -91
  308. package/docs/api/classes/SolidState.md +0 -71
  309. package/docs/api/classes/TrackingContext.md +0 -33
  310. package/docs/api/functions/effect.md +0 -49
  311. package/docs/api/functions/resource.md +0 -52
  312. package/docs/api/functions/resourceAsync.md +0 -50
  313. package/docs/api/functions/stream.md +0 -53
  314. package/docs/api/functions/streamAsync.md +0 -50
  315. package/docs/api/interfaces/SolidObservable.md +0 -19
  316. package/docs/api/type-aliases/FlowStreamDisposer.md +0 -15
  317. package/docs/api/type-aliases/FlowStreamSetter.md +0 -27
  318. package/docs/api/type-aliases/FlowStreamUpdater.md +0 -32
  319. package/docs/api/type-aliases/SolidGetter.md +0 -17
  320. package/docs/guide/primitives/resources.md +0 -858
  321. package/docs/guide/primitives/streams.md +0 -931
  322. package/src/flow/base/flowDisposable.ts +0 -71
  323. package/src/flow/base/flowEffect.ts +0 -171
  324. package/src/flow/base/flowGraph.ts +0 -288
  325. package/src/flow/base/flowSignal.ts +0 -207
  326. package/src/flow/base/flowTracker.ts +0 -17
  327. package/src/flow/base/index.ts +0 -6
  328. package/src/flow/base/utils.ts +0 -19
  329. package/src/flow/collections/flowArray.ts +0 -409
  330. package/src/flow/collections/flowMap.ts +0 -398
  331. package/src/flow/nodes/async/flowConstantAsync.ts +0 -142
  332. package/src/flow/nodes/async/flowDerivationAsync.ts +0 -143
  333. package/src/flow/nodes/async/flowNodeAsync.ts +0 -474
  334. package/src/flow/nodes/async/flowReadonlyAsync.ts +0 -81
  335. package/src/flow/nodes/async/flowStateAsync.ts +0 -116
  336. package/src/flow/nodes/await/advanced/index.ts +0 -5
  337. package/src/flow/nodes/await/advanced/resource.ts +0 -134
  338. package/src/flow/nodes/await/advanced/resourceAsync.ts +0 -109
  339. package/src/flow/nodes/await/advanced/stream.ts +0 -188
  340. package/src/flow/nodes/await/advanced/streamAsync.ts +0 -176
  341. package/src/flow/nodes/await/flowConstantAwait.ts +0 -154
  342. package/src/flow/nodes/await/flowDerivationAwait.ts +0 -154
  343. package/src/flow/nodes/await/flowNodeAwait.ts +0 -508
  344. package/src/flow/nodes/await/flowReadonlyAwait.ts +0 -89
  345. package/src/flow/nodes/await/flowStateAwait.ts +0 -130
  346. package/src/flow/nodes/await/index.ts +0 -5
  347. package/src/flow/nodes/index.ts +0 -3
  348. package/src/flow/nodes/sync/flowConstant.ts +0 -111
  349. package/src/flow/nodes/sync/flowDerivation.ts +0 -105
  350. package/src/flow/nodes/sync/flowNode.ts +0 -439
  351. package/src/flow/nodes/sync/flowReadonly.ts +0 -57
  352. package/src/flow/nodes/sync/flowState.ts +0 -101
  353. package/src/solid/converters.ts +0 -148
  354. package/src/solid/index.ts +0 -2
  355. package/src/solid/primitives.ts +0 -215
  356. package/test/base/flowEffect.test.ts +0 -108
  357. package/test/base/flowGraph.test.ts +0 -485
  358. package/test/base/flowSignal.test.ts +0 -372
  359. package/test/collections/flowArray.asyncStates.test.ts +0 -1553
  360. package/test/collections/flowArray.scalars.test.ts +0 -1129
  361. package/test/collections/flowArray.states.test.ts +0 -1365
  362. package/test/collections/flowMap.asyncStates.test.ts +0 -1105
  363. package/test/collections/flowMap.scalars.test.ts +0 -877
  364. package/test/collections/flowMap.states.test.ts +0 -1097
  365. package/test/nodes/async/flowConstantAsync.test.ts +0 -860
  366. package/test/nodes/async/flowDerivationAsync.test.ts +0 -1517
  367. package/test/nodes/async/flowStateAsync.test.ts +0 -1387
  368. package/test/nodes/await/advanced/resource.test.ts +0 -129
  369. package/test/nodes/await/advanced/resourceAsync.test.ts +0 -108
  370. package/test/nodes/await/advanced/stream.test.ts +0 -198
  371. package/test/nodes/await/advanced/streamAsync.test.ts +0 -196
  372. package/test/nodes/await/flowConstantAwait.test.ts +0 -643
  373. package/test/nodes/await/flowDerivationAwait.test.ts +0 -1583
  374. package/test/nodes/await/flowStateAwait.test.ts +0 -999
  375. package/test/nodes/mixed/derivation.test.ts +0 -1527
  376. package/test/nodes/sync/flowConstant.test.ts +0 -620
  377. package/test/nodes/sync/flowDerivation.test.ts +0 -1373
  378. package/test/nodes/sync/flowState.test.ts +0 -945
  379. package/test/solid/converters.test.ts +0 -721
  380. package/test/solid/primitives.test.ts +0 -1031
  381. /package/dist/types/{flow → api/nodes}/collections/index.d.ts +0 -0
  382. /package/docs/guide/advanced/{upgrading.md → migration-v1.md} +0 -0
  383. /package/src/{flow → api/nodes}/collections/index.ts +0 -0
package/typedoc.json CHANGED
@@ -1,37 +1,37 @@
1
1
  {
2
- "$schema": "https://typedoc.org/schema.json",
3
- "entryPoints": ["src/index.ts"],
4
- "entryPointStrategy": "resolve",
5
- "out": "docs/api",
6
- "docsRoot": "docs",
7
- "plugin": ["typedoc-plugin-markdown", "typedoc-vitepress-theme"],
8
- "readme": "none",
9
- "hideGenerator": true,
10
- "cleanOutputDir": true,
11
- "excludePrivate": true,
12
- "excludeProtected": true,
13
- "excludeExternals": true,
14
- "excludeInternal": true,
15
- "entryFileName": "index.md",
16
- "hidePageHeader": true,
17
- "hideBreadcrumbs": false,
18
- "useCodeBlocks": true,
19
- "expandObjects": true,
20
- "parametersFormat": "table",
21
- "propertiesFormat": "table",
22
- "enumMembersFormat": "table",
23
- "typeDeclarationFormat": "table",
24
- "indexFormat": "table",
25
- "outputFileStrategy": "members",
26
- "flattenOutputFiles": false,
27
- "fileExtension": ".md",
28
- "publicPath": "/api/",
29
- "textContentMappings": {
30
- "header.title": "API Reference"
31
- },
32
- "externalSymbolLinkMappings": {
33
- "@ersbeth/picoflow": {
34
- "FlowObservable._getRaw": "#"
35
- }
36
- }
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["src/index.ts"],
4
+ "entryPointStrategy": "resolve",
5
+ "out": "docs/api",
6
+ "docsRoot": "docs",
7
+ "plugin": ["typedoc-plugin-markdown", "typedoc-vitepress-theme"],
8
+ "readme": "none",
9
+ "hideGenerator": true,
10
+ "cleanOutputDir": true,
11
+ "excludePrivate": true,
12
+ "excludeProtected": true,
13
+ "excludeExternals": true,
14
+ "excludeInternal": true,
15
+ "entryFileName": "index.md",
16
+ "hidePageHeader": true,
17
+ "hideBreadcrumbs": false,
18
+ "useCodeBlocks": true,
19
+ "expandObjects": true,
20
+ "parametersFormat": "table",
21
+ "propertiesFormat": "table",
22
+ "enumMembersFormat": "table",
23
+ "typeDeclarationFormat": "table",
24
+ "indexFormat": "table",
25
+ "outputFileStrategy": "members",
26
+ "flattenOutputFiles": false,
27
+ "fileExtension": ".md",
28
+ "publicPath": "/api/",
29
+ "textContentMappings": {
30
+ "header.title": "API Reference"
31
+ },
32
+ "externalSymbolLinkMappings": {
33
+ "@ersbeth/picoflow": {
34
+ "FlowObservable._getRaw": "#"
35
+ }
36
+ }
37
37
  }
package/vite.config.ts CHANGED
@@ -1,29 +1,31 @@
1
1
  import { defineConfig } from "vite";
2
2
  import dts from "vite-plugin-dts";
3
+ import tsconfigPaths from "vite-tsconfig-paths";
3
4
 
4
5
  export default defineConfig({
5
- root: "./src",
6
- build: {
7
- outDir: "../dist",
8
- emptyOutDir: true,
9
- lib: {
10
- entry: "index.ts",
11
- formats: ["es"],
12
- },
13
- target: "esnext",
14
- minify: false,
15
- rollupOptions: {
16
- external: ["solid-js"],
17
- },
18
- },
6
+ root: "./src",
7
+ build: {
8
+ outDir: "../dist",
9
+ emptyOutDir: true,
10
+ lib: {
11
+ entry: "index.ts",
12
+ formats: ["es"],
13
+ },
14
+ target: "esnext",
15
+ minify: false,
16
+ rollupOptions: {
17
+ external: ["solid-js"],
18
+ },
19
+ },
19
20
 
20
- plugins: [
21
- dts({
22
- include: "**/*",
23
- outDir: "../dist/types",
24
- compilerOptions: {
25
- rootDir: "src",
26
- },
27
- }),
28
- ],
21
+ plugins: [
22
+ tsconfigPaths(),
23
+ dts({
24
+ include: "**/*",
25
+ outDir: "../dist/types",
26
+ compilerOptions: {
27
+ rootDir: "src",
28
+ },
29
+ }),
30
+ ],
29
31
  });
@@ -0,0 +1,21 @@
1
+ import { playwright } from "@vitest/browser-playwright";
2
+ import solid from "vite-plugin-solid";
3
+ import tsconfigPaths from "vite-tsconfig-paths";
4
+ import { defineConfig } from "vitest/config";
5
+
6
+ export default defineConfig({
7
+ plugins: [solid(), tsconfigPaths()],
8
+ test: {
9
+ include: ["test/**/*.test.tsx"],
10
+ browser: {
11
+ enabled: true,
12
+ provider: playwright(),
13
+ // https://vitest.dev/config/browser/playwright
14
+ instances: [{ browser: "chromium" }],
15
+ viewport: {
16
+ width: 400,
17
+ height: 600,
18
+ },
19
+ },
20
+ },
21
+ });
package/vitest.config.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  import solid from "vite-plugin-solid";
2
+ import tsconfigPaths from "vite-tsconfig-paths";
2
3
  import { defineConfig } from "vitest/config";
3
4
 
4
5
  export default defineConfig({
5
- plugins: [solid()],
6
- resolve: {
7
- conditions: ["development", "browser"],
8
- },
9
- test: {
10
- include: ["test/**/*.test.ts"],
11
- exclude: ["test/nodes/await/**/*"],
12
- coverage: {
13
- reporter: ["text"],
14
- include: ["src/**/*"],
15
- },
16
- },
6
+ plugins: [solid(), tsconfigPaths()],
7
+ resolve: {
8
+ conditions: ["development", "browser"],
9
+ },
10
+ test: {
11
+ include: ["test/**/*.test.ts"],
12
+ coverage: {
13
+ reporter: ["text"],
14
+ include: ["src/**/*"],
15
+ },
16
+ },
17
17
  });
@@ -1,372 +0,0 @@
1
- <!-- c9506e24-37d6-4d95-a937-545ccc76fe61 744135bd-5bf9-4a27-9006-1c9cfd4392d8 -->
2
- # Plan d'implémentation : Unification FlowResource avec FlowDerivation (approche intégrée)
3
-
4
- ## 1. Modifications d'API
5
-
6
- ### 1.1 FlowDerivation - Option `synchrone` et méthode `refresh()`
7
-
8
- **Fichier**: `src/basic/derivation.ts`
9
-
10
- **Modifications du constructeur**:
11
-
12
- ```typescript
13
- constructor(
14
- compute: (t: TrackingContext) => T | Promise<T>,
15
- options?: {
16
- synchrone?: boolean; // Si true avec fonction async, retourne T | undefined
17
- }
18
- )
19
- ```
20
-
21
- **Nouvelle méthode**:
22
-
23
- ```typescript
24
- public refresh(): void
25
- ```
26
-
27
- **Comportement avec `synchrone: true`**:
28
-
29
- - Quand `synchrone: true` est fourni avec une fonction async (`Promise<T>`):
30
- - Le type de retour devient `FlowDerivation<T | undefined>` au lieu de `FlowDerivation<Promise<T>>`
31
- - Retourne `undefined` initialement, puis `T` une fois la Promise résolue
32
- - Compare les valeurs avec `===` avant de notifier (évite notifications inutiles)
33
- - Gère les erreurs de Promise (throw)
34
- - Quand `synchrone: true` est fourni avec une fonction synchrone:
35
- - Erreur de type TypeScript (incompatibilité de types)
36
- - `refresh()` marque comme dirty et notifie (même comportement que sans option)
37
-
38
- **Usage**:
39
-
40
- ```typescript
41
- // Dérivation async normale
42
- const $userAsync = derivation(async (t) => await fetchUser());
43
- const userPromise = $userAsync.pick(); // Promise<User>
44
-
45
- // Dérivation async synchronisée
46
- const $user = derivation(async (t) => await fetchUser(), { synchrone: true });
47
- const user = $user.pick(); // User | undefined
48
-
49
- // Refresh
50
- $user.refresh(); // Marque comme dirty
51
- await $user.pick(); // Déclenche le recalcul et attend
52
- ```
53
-
54
- ### 1.2 Suppression de FlowSynchronizer
55
-
56
- **Changement d'approche**:
57
-
58
- - Plus besoin de classe `FlowSynchronizer` séparée
59
- - La synchronisation est intégrée directement dans `FlowDerivation`
60
-
61
- ### 1.3 Modifications des creators
62
-
63
- **Fichier**: `src/creators.ts`
64
-
65
- **Changements**:
66
-
67
- 1. **`resourceAsync()`** - Simplifié:
68
- ```typescript
69
- // Avant: retourne FlowResourceAsync
70
- // Après: retourne FlowDerivation<Promise<T>>
71
- export function resourceAsync<T>(fn: () => Promise<T>): FlowDerivation<Promise<T>> {
72
- return derivation(() => fn());
73
- }
74
- ```
75
-
76
- 2. **`resource()`** - Utilise l'option `synchrone`:
77
- ```typescript
78
- // Avant: retourne FlowResource
79
- // Après: retourne FlowDerivation<T | undefined>
80
- export function resource<T>(fn: () => Promise<T>): FlowDerivation<T | undefined> {
81
- return derivation(() => fn(), { synchrone: true });
82
- }
83
- ```
84
-
85
-
86
- ### 1.4 Exports
87
-
88
- **Fichiers**: `src/advanced/index.ts`, `src/index.ts`
89
-
90
- **Suppressions** (après migration):
91
-
92
- - `FlowResource` (remplacé par `FlowDerivation` avec `synchrone: true`)
93
- - `FlowResourceAsync` (remplacé par `FlowDerivation<Promise<T>>`)
94
- - Plus besoin d'exporter `FlowSynchronizer`
95
-
96
- ### 1.5 Rétrocompatibilité
97
-
98
- **Impact**:
99
-
100
- - Les types de retour changent, mais l'API reste compatible fonctionnellement
101
- - `resource()` et `resourceAsync()` continuent de fonctionner de la même manière
102
- - Les tests existants doivent continuer de passer (avec ajustements de types si nécessaire)
103
-
104
- ## 2. Implémentations détaillées
105
-
106
- ### 2.1 FlowDerivation - Support de l'option `synchrone`
107
-
108
- **Fichier**: `src/basic/derivation.ts`
109
-
110
- **Modifications du constructeur**:
111
-
112
- ```typescript
113
- constructor(
114
- compute: (t: TrackingContext) => T | Promise<T>,
115
- options?: { synchrone?: boolean }
116
- ) {
117
- super();
118
- this._compute = compute;
119
- this._trackedContext = new TrackingContext(this);
120
- this._synchrone = options?.synchrone ?? false;
121
-
122
- // Si synchrone est activé, on doit gérer les Promises différemment
123
- if (this._synchrone) {
124
- // Initialiser la valeur à undefined pour le mode synchrone
125
- this._value = undefined as T;
126
- }
127
- }
128
- ```
129
-
130
- **Modifications de `_getRaw()`**:
131
-
132
- ```typescript
133
- protected _getRaw(): T {
134
- if (this._disposed) throw new Error("[PicoFlow] Primitive is disposed");
135
-
136
- this._initLazy();
137
- this._update();
138
-
139
- if (this._synchrone) {
140
- // En mode synchrone, la valeur peut être undefined si la Promise n'est pas encore résolue
141
- return this._value as T;
142
- }
143
-
144
- return this._value;
145
- }
146
- ```
147
-
148
- **Modifications de `_update()` pour gérer la synchronisation**:
149
-
150
- ```typescript
151
- private _update(): void {
152
- if (this._dirty) {
153
- // Store current dependencies
154
- const dependencies = [...this._dependencies];
155
-
156
- // Clear current dependencies, compute and retrack dependencies
157
- this._dependencies.clear();
158
- const computedValue = this._compute(this._trackedContext);
159
-
160
- if (this._synchrone && computedValue instanceof Promise) {
161
- // Mode synchrone avec Promise
162
- this._handleSyncPromise(computedValue as Promise<T>);
163
- } else {
164
- // Mode normal
165
- this._value = computedValue;
166
- }
167
-
168
- // Unsubscribe from dependencies that are no longer needed
169
- const dependenciesToRemove = dependencies.filter(
170
- (dependency) => !this._dependencies.has(dependency),
171
- );
172
- dependenciesToRemove.forEach((dependency) => {
173
- dependency._unregisterDependency(this);
174
- });
175
-
176
- this._dirty = false;
177
- }
178
- }
179
- ```
180
-
181
- **Nouvelle méthode `_handleSyncPromise()`**:
182
-
183
- ```typescript
184
- private async _handleSyncPromise(promise: Promise<T>): Promise<void> {
185
- // Marquer cette Promise comme la Promise courante
186
- this._currentPromise = promise;
187
-
188
- try {
189
- const value = await promise;
190
-
191
- // Vérifier que c'est toujours la Promise courante (éviter les race conditions)
192
- if (this._currentPromise !== promise) {
193
- return; // Une nouvelle Promise a été créée, ignorer cette résolution
194
- }
195
-
196
- // Comparer avec la valeur actuelle pour éviter les notifications inutiles
197
- if (value === this._value) {
198
- return;
199
- }
200
-
201
- // Mettre à jour la valeur et notifier
202
- this._value = value as T;
203
- this._notify();
204
- } catch (error) {
205
- // Vérifier que c'est toujours la Promise courante
206
- if (this._currentPromise !== promise) {
207
- return; // Une nouvelle Promise a été créée, ignorer cette erreur
208
- }
209
-
210
- // Throw l'erreur
211
- throw error;
212
- }
213
- }
214
- ```
215
-
216
- **Nouvelle méthode `refresh()`**:
217
-
218
- ```typescript
219
- public refresh(): void {
220
- if (this._disposed) throw new Error("[PicoFlow] Primitive is disposed");
221
-
222
- // Marquer comme dirty (le recalcul se fera au prochain accès)
223
- this._dirty = true;
224
-
225
- // Notifier les dépendants pour qu'ils se marquent aussi comme dirty
226
- this._notify();
227
- }
228
- ```
229
-
230
- **Nouveaux champs privés**:
231
-
232
- ```typescript
233
- private _synchrone: boolean;
234
- private _currentPromise?: Promise<T>;
235
- ```
236
-
237
- **Points d'attention**:
238
-
239
- 1. **Type safety**: Le type de retour doit être `FlowDerivation<T | undefined>` quand `synchrone: true` avec une fonction async
240
- 2. **Gestion des Promises**: En mode synchrone, les Promises sont gérées de manière asynchrone dans `_handleSyncPromise()`
241
- 3. **Comparaison de valeurs**: Utiliser `===` uniquement en mode synchrone
242
- 4. **Race conditions**: Utiliser `_currentPromise` pour tracker la Promise courante
243
- 5. **Initialisation**: En mode synchrone, initialiser `_value` à `undefined`
244
- 6. **Lazy evaluation**: Le comportement lazy reste le même, mais la résolution de Promise est asynchrone
245
-
246
- ### 2.2 Mise à jour des creators
247
-
248
- **Fichier**: `src/creators.ts`
249
-
250
- **Implémentation `resourceAsync()`**:
251
-
252
- ```typescript
253
- export function resourceAsync<T>(fn: () => Promise<T>): FlowDerivation<Promise<T>> {
254
- return derivation(() => fn());
255
- }
256
- ```
257
-
258
- **Points d'attention**:
259
-
260
- - La fonction `fn` ne reçoit pas de `TrackingContext` (comportement actuel)
261
- - Retourne directement une `FlowDerivation<Promise<T>>`
262
-
263
- **Implémentation `resource()`**:
264
-
265
- ```typescript
266
- export function resource<T>(fn: () => Promise<T>): FlowDerivation<T | undefined> {
267
- return derivation(() => fn(), { synchrone: true });
268
- }
269
- ```
270
-
271
- **Points d'attention**:
272
-
273
- - Utilise l'option `synchrone: true` pour activer le mode synchrone
274
- - Retourne `FlowDerivation<T | undefined>`
275
-
276
- ### 2.3 Mise à jour des exports
277
-
278
- **Fichier**: `src/advanced/index.ts`
279
-
280
- **Modifications**:
281
-
282
- ```typescript
283
- // Supprimer (après migration complète)
284
- // export { FlowResource } from "./resource";
285
- // export { FlowResourceAsync } from "./resourceAsync";
286
- // Plus besoin de FlowSynchronizer
287
- ```
288
-
289
- **Fichier**: `src/index.ts`
290
-
291
- **Modifications**:
292
-
293
- ```typescript
294
- // Supprimer FlowResource et FlowResourceAsync des exports
295
- export {
296
- FlowArray,
297
- type FlowArrayAction,
298
- FlowMap,
299
- FlowStream,
300
- FlowStreamAsync,
301
- // FlowResource, // À supprimer
302
- // FlowResourceAsync, // À supprimer
303
- ...
304
- } from "./advanced/";
305
- ```
306
-
307
- ### 2.4 Migration des tests
308
-
309
- **Fichiers**: `test/resource.test.ts`, `test/resourceAsync.test.ts`
310
-
311
- **Actions**:
312
-
313
- 1. Mettre à jour les imports pour utiliser `FlowDerivation`
314
- 2. Adapter les types de retour des fonctions `resource()` et `resourceAsync()`
315
- 3. Adapter les appels à `refresh()` : `resource.refresh()` puis `await resource.pick()` si nécessaire
316
- 4. Vérifier que tous les tests passent avec la nouvelle implémentation
317
- 5. Potentiellement fusionner les tests si la logique est similaire
318
-
319
- **Points d'attention**:
320
-
321
- - Les tests de `resource()` doivent maintenant tester `FlowDerivation<T | undefined>` avec `synchrone: true`
322
- - Les tests de `resourceAsync()` doivent tester `FlowDerivation<Promise<T>>`
323
- - Vérifier que le comportement lazy est toujours correct
324
- - Vérifier que la comparaison de valeurs fonctionne en mode synchrone
325
- - Vérifier que les race conditions sont gérées correctement
326
-
327
- ### 2.5 Suppression des anciennes classes
328
-
329
- **Fichiers**: `src/advanced/resource.ts`, `src/advanced/resourceAsync.ts`
330
-
331
- **Actions** (après vérification que tout fonctionne):
332
-
333
- 1. Supprimer `src/advanced/resource.ts`
334
- 2. Supprimer `src/advanced/resourceAsync.ts`
335
- 3. Nettoyer les exports dans `src/advanced/index.ts`
336
-
337
- **Points d'attention**:
338
-
339
- - Ne supprimer qu'après avoir vérifié que tous les tests passent
340
- - Vérifier qu'aucun code externe n'importe directement ces classes
341
- - Mettre à jour la documentation si nécessaire
342
-
343
- ## 3. Ordre d'implémentation recommandé
344
-
345
- 1. **Étape 1**: Ajouter l'option `synchrone` et la méthode `refresh()` à `FlowDerivation` et tester
346
- 2. **Étape 2**: Implémenter la gestion des Promises en mode synchrone avec comparaison de valeurs
347
- 3. **Étape 3**: Mettre à jour les creators `resource()` et `resourceAsync()`
348
- 4. **Étape 4**: Mettre à jour les exports
349
- 5. **Étape 5**: Migrer et adapter les tests
350
- 6. **Étape 6**: Supprimer les anciennes classes `FlowResource` et `FlowResourceAsync`
351
-
352
- ## 4. Cas limites à tester
353
-
354
- 1. **Race conditions**: Appels multiples rapides à `refresh()` avec mode synchrone
355
- 2. **Erreurs async**: Promises rejetées dans les derivations en mode synchrone
356
- 3. **Lazy initialization**: Vérifier que le fetch ne se fait qu'au premier accès
357
- 4. **Comparaison de valeurs**: Vérifier que les notifications ne se déclenchent que si la valeur change (mode synchrone uniquement)
358
- 5. **Disposal**: Vérifier le cleanup correct
359
- 6. **Dérivations sync avec refresh()**: Vérifier que ça fonctionne aussi pour les derivations non-async
360
- 7. **Refresh puis accès**: Vérifier que `refresh()` puis `pick()`/`get()` déclenche bien le recalcul
361
- 8. **Refresh sur dérivation non-initialisée**: Vérifier que `refresh()` fonctionne même si la dérivation n'a pas encore été accédée
362
- 9. **Mode synchrone avec fonction sync**: Vérifier que TypeScript lève une erreur de type
363
- 10. **Plusieurs Promises successives**: Vérifier que seule la dernière Promise résolue met à jour la valeur
364
-
365
- ### To-dos
366
-
367
- - [ ] Ajouter la méthode refresh() à FlowDerivation dans src/basic/derivation.ts avec gestion des derivations sync et async
368
- - [ ] Créer la classe FlowSynchronizer dans src/advanced/synchronizer.ts avec lazy initialization, gestion des race conditions, et comparaison de valeurs
369
- - [ ] Mettre à jour resource() et resourceAsync() dans src/creators.ts pour utiliser FlowDerivation et FlowSynchronizer
370
- - [ ] Mettre à jour les exports dans src/advanced/index.ts et src/index.ts pour exporter FlowSynchronizer et supprimer FlowResource/FlowResourceAsync
371
- - [ ] Adapter les tests dans test/resource.test.ts et test/resourceAsync.test.ts pour la nouvelle API
372
- - [ ] Supprimer src/advanced/resource.ts et src/advanced/resourceAsync.ts après vérification