@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
@@ -2,15 +2,6 @@
2
2
 
3
3
  A **signal** is a reactive primitive that represents an event or notification. Unlike state or derivations, signals don't hold values - they simply notify watchers that something has happened.
4
4
 
5
- Imagine a refresh button on a web page. When clicked, it doesn't need to pass data - it just needs to tell the system "hey, refresh now!" That's exactly what signals do.
6
-
7
- ### Key Characteristics
8
-
9
- - **No value**: Signals don't store or return data
10
- - **Pure notification**: They exist solely to trigger reactions
11
- - **Lightweight**: Perfect for events that don't need to carry information
12
- - **Explicit tracking**: Use `.watch(t)` to track them in effects
13
-
14
5
  ## When to Use Signals
15
6
 
16
7
  Use signals when you need to:
@@ -23,8 +14,6 @@ Use signals when you need to:
23
14
  Don't use signals when:
24
15
 
25
16
  - ❌ You need to pass data (use state instead)
26
- - ❌ You're tracking continuous streams of events (use streams instead)
27
- - ❌ The value itself matters (use state or derivation)
28
17
 
29
18
  ## Creating Signals
30
19
 
@@ -44,38 +33,38 @@ Signals don't take any parameters since they don't hold values.
44
33
 
45
34
  Signals have three main operations: watching, triggering, and disposing.
46
35
 
47
- ### Watching Signals with `.watch(t)`
36
+ ### Watch
48
37
 
49
- Inside an effect or derivation, use `.watch(t)` to track a signal:
38
+ Inside a subscription or derivation, use `.watch(t)` to track a signal:
50
39
 
51
40
  ```typescript
52
- import { signal, effect } from '@ersbeth/picoflow'
41
+ import { signal, subscribe } from '@ersbeth/picoflow'
53
42
 
54
43
  const $refresh = signal()
55
44
 
56
- effect((t) => {
57
- $refresh.watch(t)
58
- console.log('Refresh triggered!')
59
- })
45
+ subscribe(
46
+ (t) => { $refresh.watch(t) },
47
+ () => { console.log('Refresh triggered!') }
48
+ )
60
49
 
61
50
  $refresh.trigger() // Logs: "Refresh triggered!"
62
51
  $refresh.trigger() // Logs: "Refresh triggered!" again
63
52
  ```
64
53
 
65
- Every time the signal is triggered, the effect re-executes.
54
+ Every time the signal is triggered, the subscription re-executes.
66
55
 
67
- ### Triggering Signals with `.trigger()`
56
+ ### Trigger
68
57
 
69
58
  Call `.trigger()` to notify all watchers:
70
59
 
71
60
  ```typescript
72
61
  const $notification = signal()
73
62
 
74
- // Setup an effect that watches the signal
75
- effect((t) => {
76
- $notification.watch(t)
77
- showNotification('New activity!')
78
- })
63
+ // Setup a subscription that watches the signal
64
+ subscribe(
65
+ (t) => { $notification.watch(t) },
66
+ () => { showNotification('New activity!') }
67
+ )
79
68
 
80
69
  // Trigger from anywhere
81
70
  function onNewMessage() {
@@ -87,7 +76,7 @@ function onNewLike() {
87
76
  }
88
77
  ```
89
78
 
90
- ### Disposing Signals with `.dispose()`
79
+ ### Dispose
91
80
 
92
81
  Signals can be disposed to free resources and prevent memory leaks:
93
82
 
@@ -95,10 +84,10 @@ Signals can be disposed to free resources and prevent memory leaks:
95
84
  const $mySignal = signal()
96
85
 
97
86
  // Use the signal
98
- effect((t) => {
99
- $mySignal.watch(t)
100
- console.log('Signal triggered!')
101
- })
87
+ subscribe(
88
+ (t) => { $mySignal.watch(t) },
89
+ () => { console.log('Signal triggered!') }
90
+ )
102
91
 
103
92
  // Later, clean up
104
93
  $mySignal.dispose()
@@ -109,41 +98,41 @@ $mySignal.trigger() // Error: Primitive is disposed
109
98
 
110
99
  ## Lifecyle
111
100
 
112
- When you create an effect that watches a signal:
101
+ When you create a subscription that watches a signal:
113
102
 
114
- 1. **Registration**: The signal registers the effect as a watcher
103
+ 1. **Registration**: The signal registers the subscription as a watcher
115
104
  2. **Waiting**: The signal waits for `.trigger()` to be called
116
- 3. **Notification**: When triggered, all watching effects are scheduled to run
117
- 4. **Re-execution**: Each watching effect re-executes its function
105
+ 3. **Notification**: When triggered, all watching subscriptions are scheduled to run
106
+ 4. **Re-execution**: Each watching subscription re-executes its function
118
107
 
119
108
  ```mermaid
120
109
  sequenceDiagram
121
110
  participant User
122
111
  participant Signal as $refresh (Signal)
123
- participant Effect
112
+ participant Subscription
124
113
 
125
- Note over User,Effect: 1. Setup Phase
126
- User->>Effect: Create effect
127
- activate Effect
128
- Effect->>Signal: watch(t)
129
- Note over Signal: Register Effect as watcher
130
- Signal-->>Effect: Registered
131
- Effect->>Effect: Execute function
132
- Note over Effect: Log: "Ready to refresh"
133
- deactivate Effect
114
+ Note over User,Subscription: 1. Setup Phase
115
+ User->>Subscription: Create subscription
116
+ activate Subscription
117
+ Subscription->>Signal: watch(t)
118
+ Note over Signal: Register Subscription as watcher
119
+ Signal-->>Subscription: Registered
120
+ Subscription->>Subscription: Execute function
121
+ Note over Subscription: Log: "Ready to refresh"
122
+ deactivate Subscription
134
123
 
135
- Note over User,Effect: 2. Trigger Phase
124
+ Note over User,Subscription: 2. Trigger Phase
136
125
  User->>Signal: trigger()
137
126
  activate Signal
138
127
  Note over Signal: Notify all watchers
139
- Signal->>Effect: Schedule execution
128
+ Signal->>Subscription: Schedule execution
140
129
  deactivate Signal
141
130
 
142
- activate Effect
143
- Note over Effect: Re-execute function
144
- Effect->>Effect: Perform refresh
145
- Note over Effect: Log: "Refreshing..."
146
- deactivate Effect
131
+ activate Subscription
132
+ Note over Subscription: Re-execute function
133
+ Subscription->>Subscription: Perform refresh
134
+ Note over Subscription: Log: "Refreshing..."
135
+ deactivate Subscription
147
136
  ```
148
137
 
149
138
  ## Best Practices
@@ -174,12 +163,17 @@ const $handleSave = signal()
174
163
  const $userUpdated = signal()
175
164
  let currentUser: User | null = null
176
165
 
177
- effect((t) => {
178
- $userUpdated.watch(t)
179
- if (currentUser) {
180
- renderUser(currentUser)
166
+ subscribe(
167
+ (t) => {
168
+ $userUpdated.watch(t)
169
+ return currentUser
170
+ },
171
+ (user) => {
172
+ if (user) {
173
+ renderUser(user)
174
+ }
181
175
  }
182
- })
176
+ )
183
177
 
184
178
  function setUser(user: User) {
185
179
  currentUser = user
@@ -193,8 +187,7 @@ function setUser(user: User) {
193
187
  // ✅ Good - state holds the value
194
188
  const $currentUser = state<User | null>(null)
195
189
 
196
- effect((t) => {
197
- const user = $currentUser.get(t)
190
+ $currentUser.subscribe((user) => {
198
191
  if (user) {
199
192
  renderUser(user)
200
193
  }
@@ -205,36 +198,6 @@ function setUser(user: User) {
205
198
  }
206
199
  ```
207
200
 
208
- ### Forgetting to Watch the Signal
209
-
210
- **Problem**: Calling `.trigger()` without any watchers.
211
-
212
- ```typescript
213
- // ❌ Bad - nothing watches the signal
214
- const $refresh = signal()
215
-
216
- effect((t) => {
217
- // Forgot to watch!
218
- performRefresh()
219
- })
220
-
221
- $refresh.trigger() // Effect won't run
222
- ```
223
-
224
- **Solution**: Make sure to call `.watch(t)`:
225
-
226
- ```typescript
227
- // ✅ Good - explicitly watch the signal
228
- const $refresh = signal()
229
-
230
- effect((t) => {
231
- $refresh.watch(t) // Now it will react!
232
- performRefresh()
233
- })
234
-
235
- $refresh.trigger() // Effect runs
236
- ```
237
-
238
201
  ### Over-Triggering
239
202
 
240
203
  **Problem**: Triggering a signal in a loop or too frequently.
@@ -1,24 +1,18 @@
1
1
  # State
2
2
 
3
- **State** is a reactive primitive that holds a mutable value. When you update the state, all effects and derivations watching it automatically re-execute.
4
-
5
- Imagine a thermometer in your home. The temperature is state - it changes throughout the day, and your heating system watches it to decide when to turn on or off. That's exactly what state does in PicoFlow.
3
+ **State** is a reactive primitive that holds a mutable value.
6
4
 
7
5
  ### Key Characteristics
8
6
 
9
7
  - **Mutable**: Can be updated with `.set()`
10
8
  - **Reactive**: Automatically notifies watchers on changes
11
9
  - **Equality checking**: Only notifies if the new value differs from the current value
12
- - **Type-safe**: TypeScript ensures updates match the initial type
13
10
 
14
11
  ## When to Use State
15
12
 
16
13
  Use state when you need to:
17
14
 
18
15
  - ✅ Track values that change over time
19
- - ✅ Respond to user input or interactions
20
- - ✅ Store data fetched from APIs
21
- - ✅ Manage application state (UI state, form data, etc.)
22
16
 
23
17
  Don't use state when:
24
18
 
@@ -45,45 +39,35 @@ The value you pass becomes the initial value. It can be any type: numbers, strin
45
39
 
46
40
  State provides methods for reading, updating, and disposing.
47
41
 
48
- ### Reading with `.get(t)`
42
+ ### Get
49
43
 
50
- Inside an effect or derivation, use `.get(t)` to read the value and create a dependency:
44
+ Inside a subscription or derivation, use `.get(t)` to read the value and create a dependency:
51
45
 
52
46
  ```typescript
53
- import { state, effect } from '@ersbeth/picoflow'
54
-
55
47
  const $count = state(0)
48
+ const $double = derivation((t) => $count.get(t) * 2)
56
49
 
57
- effect((t) => {
58
- const value = $count.get(t) // Read and track
59
- console.log('Count is:', value)
50
+ $double.subscribe((value) => {
51
+ console.log('Double is:', value)
60
52
  })
61
53
 
62
- $count.set(1) // Console logs: "Count is: 1"
63
- $count.set(2) // Console logs: "Count is: 2"
54
+ $count.set(1) // Console logs: "Double is: 2"
55
+ $count.set(2) // Console logs: "Double is: 4"
64
56
  ```
65
57
 
66
- ### Reading with `.pick()`
58
+ ### Pick
67
59
 
68
60
  Use `.pick()` when you want the current value without creating a dependency:
69
61
 
70
62
  ```typescript
71
63
  const $count = state(0)
72
64
 
73
- // Read without tracking (e.g., outside an effect)
74
- const currentValue = $count.pick()
65
+ // Read without tracking (e.g., outside a subscription)
66
+ const currentValue = await $count.pick()
75
67
  console.log(currentValue) // 0
76
-
77
- // Or inside an effect, when you don't want to track changes
78
- const $trigger = signal()
79
- effect((t) => {
80
- $trigger.watch(t) // Only track trigger
81
- const snapshot = $count.pick() // Don't track count
82
- console.log(snapshot)
83
- })
84
68
  ```
85
69
 
86
- ### Updating with `.set(value)`
70
+ ### Update
87
71
 
88
72
  Pass the new value directly to `.set()`:
89
73
 
@@ -94,8 +78,6 @@ $count.set(5) // Set to 5
94
78
  $count.set(10) // Set to 10
95
79
  ```
96
80
 
97
- ### Updating with `.set(updater)`
98
-
99
81
  Pass a function that receives the current value and returns the new value:
100
82
 
101
83
  ```typescript
@@ -111,7 +93,7 @@ $count.set(n => Math.max(0, n - 1)) // Decrement, min 0
111
93
  - To guarantee you're working with the latest value
112
94
  - For atomic updates (important in concurrent scenarios)
113
95
 
114
- ### Disposing with `.dispose()`
96
+ ### Dispose
115
97
 
116
98
  State can be disposed to free resources and prevent memory leaks:
117
99
 
@@ -119,8 +101,8 @@ State can be disposed to free resources and prevent memory leaks:
119
101
  const $count = state(0)
120
102
 
121
103
  // Use the state
122
- effect((t) => {
123
- console.log($count.get(t))
104
+ $count.subscribe((value) => {
105
+ console.log(value)
124
106
  })
125
107
 
126
108
  // Later, clean up
@@ -134,16 +116,12 @@ $count.set(5) // Error: Primitive is disposed
134
116
 
135
117
  When you update state, a specific flow occurs to ensure efficiency and consistency.
136
118
 
137
- ### Update Flow
138
-
139
- Here's what happens when you call `.set()`:
140
-
141
119
  ```mermaid
142
120
  sequenceDiagram
143
121
  participant User
144
122
  participant $count as $count (State)
145
123
  participant $double as $double (Derivation)
146
- participant Effect
124
+ participant Subscription
147
125
 
148
126
  User->>$count: set(n => n + 1)
149
127
  activate $count
@@ -156,18 +134,18 @@ sequenceDiagram
156
134
  Note over $double: Mark as dirty<br/>NO recompute yet
157
135
  deactivate $double
158
136
 
159
- $count->>Effect: Schedule execution
137
+ $count->>Subscription: Schedule execution
160
138
  deactivate $count
161
139
 
162
- activate Effect
163
- Note over Effect: Execute function
140
+ activate Subscription
141
+ Note over Subscription: Execute function
164
142
 
165
- Effect->>$count: get(t)
143
+ Subscription->>$count: get(t)
166
144
  activate $count
167
- $count-->>Effect: 1
145
+ $count-->>Subscription: 1
168
146
  deactivate $count
169
147
 
170
- Effect->>$double: get(t)
148
+ Subscription->>$double: get(t)
171
149
  activate $double
172
150
  Note over $double: Dirty? YES<br/>Recompute now
173
151
 
@@ -177,11 +155,11 @@ sequenceDiagram
177
155
  deactivate $count
178
156
 
179
157
  Note over $double: Compute: 1 * 2 = 2
180
- $double-->>Effect: 2
158
+ $double-->>Subscription: 2
181
159
  deactivate $double
182
160
 
183
- Note over Effect: Log: "Count: 1, Double: 2"
184
- deactivate Effect
161
+ Note over Subscription: Log: "Count: 1, Double: 2"
162
+ deactivate Subscription
185
163
  ```
186
164
 
187
165
  **How it works:**
@@ -192,8 +170,8 @@ sequenceDiagram
192
170
  4. **Update value**: Store the new value
193
171
  5. **Notify dependents**:
194
172
  - Derivations are marked dirty (not recomputed yet)
195
- - Effects are scheduled for execution
196
- 6. **Pull-based recompute**: When effects run and read derivations, they recompute
173
+ - Subscriptions are scheduled for execution
174
+ 6. **Pull-based recompute**: When subscriptions run and read derivations, they recompute
197
175
 
198
176
  ### Equality Check Example
199
177
 
@@ -203,27 +181,27 @@ State only notifies when the value actually changes:
203
181
  sequenceDiagram
204
182
  participant User
205
183
  participant $count as $count (State)
206
- participant Effect
184
+ participant Subscription
207
185
 
208
- Note over User,Effect: Initial state: $count = 5
186
+ Note over User,Subscription: Initial state: $count = 5
209
187
 
210
188
  User->>$count: set(5)
211
189
  activate $count
212
190
  Note over $count: Check: 5 === 5?<br/>YES - no change
213
191
  Note over $count: Skip notification
214
192
  deactivate $count
215
- Note over Effect: Effect does NOT run
193
+ Note over Subscription: Subscription does NOT run
216
194
 
217
195
  User->>$count: set(10)
218
196
  activate $count
219
197
  Note over $count: Check: 10 === 5?<br/>NO - value changed
220
198
  Note over $count: Update: 5 → 10
221
- $count->>Effect: Notify & schedule
199
+ $count->>Subscription: Notify & schedule
222
200
  deactivate $count
223
201
 
224
- activate Effect
225
- Note over Effect: Effect runs
226
- deactivate Effect
202
+ activate Subscription
203
+ Note over Subscription: Subscription runs
204
+ deactivate Subscription
227
205
  ```
228
206
 
229
207
  ## Best Practices
@@ -279,7 +257,6 @@ const form = {
279
257
  }
280
258
  ```
281
259
 
282
- ### Name State Clearly
283
260
 
284
261
  Use the `$` prefix for all reactive values:
285
262
 
@@ -293,76 +270,3 @@ const $isLoading = state(false)
293
270
  const count = state(0)
294
271
  const user = state({...})
295
272
  ```
296
-
297
- ## Common Pitfalls
298
-
299
- ### Using `.pick()` in Effects
300
-
301
- **Problem**: Using `.pick()` inside effects prevents reactivity.
302
-
303
- ```typescript
304
- // ❌ Wrong - will never update
305
- effect((t) => {
306
- const count = $count.pick() // No dependency created!
307
- console.log(count) // Only logs once
308
- })
309
- ```
310
-
311
- **Solution**: Use `.get(t)` to create dependencies:
312
-
313
- ```typescript
314
- // ✅ Correct - creates dependency
315
- effect((t) => {
316
- const count = $count.get(t) // Creates dependency
317
- console.log(count) // Logs on every change
318
- })
319
- ```
320
-
321
- ### Forgetting Updater Functions
322
-
323
- **Problem**: Reading and setting separately creates race conditions.
324
-
325
- ```typescript
326
- // ❌ Potential race condition
327
- const current = $count.pick()
328
- $count.set(current + 1)
329
- // What if $count changes between pick() and set()?
330
- ```
331
-
332
- **Solution**: Use updater functions:
333
-
334
- ```typescript
335
- // ✅ Safe - uses latest value atomically
336
- $count.set(n => n + 1)
337
- ```
338
-
339
- ### Mutating State Directly
340
-
341
- **Problem**: Directly mutating arrays or objects doesn't trigger updates.
342
-
343
- ```typescript
344
- const $items = state([1, 2, 3])
345
-
346
- // ❌ Wrong - mutates the array
347
- const items = $items.pick()
348
- items.push(4) // Doesn't trigger updates!
349
-
350
- // ❌ Also wrong - same array reference
351
- $items.set(items => {
352
- items.push(4) // Mutation!
353
- return items // Same reference, no notification!
354
- })
355
- ```
356
-
357
- **Solution**: Create new arrays/objects (or use FlowArray/FlowMap):
358
-
359
- ```typescript
360
- // ✅ Correct - creates new array
361
- $items.set(items => [...items, 4])
362
-
363
- // ✅ Also correct - for objects
364
- $user.set(user => ({
365
- ...user,
366
- age: user.age + 1
367
- }))
368
- ```
package/package.json CHANGED
@@ -1,61 +1,57 @@
1
1
  {
2
- "name": "@ersbeth/picoflow",
3
- "version": "1.1.2",
4
- "description": "Minimal Dataflow librairy for TypeScript",
5
- "type": "module",
6
- "exports": {
7
- "types": "./dist/types/index.d.ts",
8
- "default": "./dist/picoflow.js"
9
- },
10
- "imports": {
11
- "#package": "./src/index.ts"
12
- },
13
- "peerDependencies": {
14
- "solid-js": "^1.9.7"
15
- },
16
- "devDependencies": {
17
- "@biomejs/biome": "2.3.8",
18
- "@braintree/sanitize-url": "^7.1.1",
19
- "@vitest/coverage-v8": "^3.0.9",
20
- "cytoscape": "^3.33.1",
21
- "cytoscape-cose-bilkent": "^4.1.0",
22
- "dayjs": "^1.11.19",
23
- "dompurify": "^3.3.0",
24
- "jsdom": "^27.3.0",
25
- "mermaid": "^11.12.1",
26
- "typedoc": "^0.28.15",
27
- "typedoc-plugin-markdown": "^4.9.0",
28
- "typedoc-vitepress-theme": "^1.1.2",
29
- "typescript": "^5.9.3",
30
- "vite": "^6.2.3",
31
- "vite-plugin-dts": "^4.5.3",
32
- "vite-plugin-solid": "^2.11.10",
33
- "vitepress": "^1.6.4",
34
- "vitepress-plugin-mermaid": "^2.0.17",
35
- "vitest": "^3.0.9"
36
- },
37
- "repository": {
38
- "type": "git",
39
- "url": "git+ssh://git@gitlab.com/ersbeth-web/picoflow.git"
40
- },
41
- "author": "Elisabeth Rousset",
42
- "license": "MIT",
43
- "bugs": {
44
- "url": "https://gitlab.com/ersbeth-web/picoflow/issues"
45
- },
46
- "homepage": "https://gitlab.com/ersbeth-web/picoflow#readme",
47
- "scripts": {
48
- "check": "pnpm exec tsc --noEmit",
49
- "lint": "pnpm exec biome check --fix",
50
- "build": "pnpm exec vite build --config vite.config.ts",
51
- "test": "pnpm exec vitest",
52
- "docs:dev": "vitepress dev docs",
53
- "docs:build": "pnpm docs:generate && vitepress build docs",
54
- "docs:preview": "vitepress preview docs",
55
- "docs:generate": "typedoc",
56
- "api:extract": "pnpm exec api-extractor run --local",
57
- "api:generate": "pnpm exec api-documenter markdown -i ./api/temp -o ./api/doc",
58
- "api:clean": "rm ./api/temp/*",
59
- "api": "pnpm api:extract && pnpm api:generate && pnpm api:clean"
60
- }
61
- }
2
+ "name": "@ersbeth/picoflow",
3
+ "version": "2.0.0",
4
+ "description": "Minimal Dataflow library for TypeScript",
5
+ "type": "module",
6
+ "exports": {
7
+ "types": "./dist/types/index.d.ts",
8
+ "default": "./dist/picoflow.js"
9
+ },
10
+ "scripts": {
11
+ "check": "pnpm exec tsc --noEmit",
12
+ "lint": "pnpm exec biome check --fix",
13
+ "build": "pnpm exec vite build --config vite.config.ts",
14
+ "test": "pnpm exec vitest",
15
+ "test:browser": "pnpm exec vitest --config=vitest.browser.config.ts",
16
+ "docs:dev": "pnpm exec vitepress dev docs",
17
+ "docs:build": "pnpm docs:generate && pnpm exec vitepress build docs",
18
+ "docs:preview": "pnpm exec vitepress preview docs",
19
+ "docs:generate": "pnpm exec typedoc"
20
+ },
21
+ "peerDependencies": {
22
+ "solid-js": "^1.9.7"
23
+ },
24
+ "devDependencies": {
25
+ "@biomejs/biome": "2.3.8",
26
+ "@braintree/sanitize-url": "^7.1.1",
27
+ "@solidjs/testing-library": "^0.8.10",
28
+ "@vitest/browser-playwright": "^4.0.16",
29
+ "cytoscape": "^3.33.1",
30
+ "cytoscape-cose-bilkent": "^4.1.0",
31
+ "dayjs": "^1.11.19",
32
+ "dompurify": "^3.3.0",
33
+ "jsdom": "^27.3.0",
34
+ "mermaid": "^11.12.1",
35
+ "typedoc": "^0.28.15",
36
+ "typedoc-plugin-markdown": "^4.9.0",
37
+ "typedoc-vitepress-theme": "^1.1.2",
38
+ "typescript": "^5.9.3",
39
+ "vite": "^7.3.0",
40
+ "vite-plugin-dts": "^4.5.4",
41
+ "vite-plugin-solid": "^2.11.10",
42
+ "vite-tsconfig-paths": "^6.0.3",
43
+ "vitepress": "^1.6.4",
44
+ "vitepress-plugin-mermaid": "^2.0.17",
45
+ "vitest": "^4.0.16"
46
+ },
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+ssh://git@gitlab.com/ersbeth-web/picoflow.git"
50
+ },
51
+ "author": "Elisabeth Rousset",
52
+ "license": "MIT",
53
+ "bugs": {
54
+ "url": "https://gitlab.com/ersbeth-web/picoflow/issues"
55
+ },
56
+ "homepage": "https://gitlab.com/ersbeth-web/picoflow#readme"
57
+ }