@ersbeth/picoflow 0.2.4 → 1.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 (248) hide show
  1. package/.cursor/plans/update-js-e795d61b.plan.md +567 -0
  2. package/.gitlab-ci.yml +24 -0
  3. package/.vscode/settings.json +3 -3
  4. package/CHANGELOG.md +51 -0
  5. package/IMPLEMENTATION_GUIDE.md +1578 -0
  6. package/README.md +62 -25
  7. package/biome.json +32 -32
  8. package/dist/picoflow.js +610 -436
  9. package/dist/types/advanced/array.d.ts +0 -6
  10. package/dist/types/advanced/array.d.ts.map +1 -1
  11. package/dist/types/advanced/index.d.ts +5 -5
  12. package/dist/types/advanced/index.d.ts.map +1 -1
  13. package/dist/types/advanced/map.d.ts +114 -23
  14. package/dist/types/advanced/map.d.ts.map +1 -1
  15. package/dist/types/advanced/resource.d.ts +51 -12
  16. package/dist/types/advanced/resource.d.ts.map +1 -1
  17. package/dist/types/advanced/resourceAsync.d.ts +28 -13
  18. package/dist/types/advanced/resourceAsync.d.ts.map +1 -1
  19. package/dist/types/advanced/stream.d.ts +74 -16
  20. package/dist/types/advanced/stream.d.ts.map +1 -1
  21. package/dist/types/advanced/streamAsync.d.ts +69 -15
  22. package/dist/types/advanced/streamAsync.d.ts.map +1 -1
  23. package/dist/types/basic/constant.d.ts +44 -16
  24. package/dist/types/basic/constant.d.ts.map +1 -1
  25. package/dist/types/basic/derivation.d.ts +73 -24
  26. package/dist/types/basic/derivation.d.ts.map +1 -1
  27. package/dist/types/basic/disposable.d.ts +65 -6
  28. package/dist/types/basic/disposable.d.ts.map +1 -1
  29. package/dist/types/basic/effect.d.ts +27 -16
  30. package/dist/types/basic/effect.d.ts.map +1 -1
  31. package/dist/types/basic/index.d.ts +7 -8
  32. package/dist/types/basic/index.d.ts.map +1 -1
  33. package/dist/types/basic/observable.d.ts +62 -13
  34. package/dist/types/basic/observable.d.ts.map +1 -1
  35. package/dist/types/basic/signal.d.ts +35 -6
  36. package/dist/types/basic/signal.d.ts.map +1 -1
  37. package/dist/types/basic/state.d.ts +25 -4
  38. package/dist/types/basic/state.d.ts.map +1 -1
  39. package/dist/types/basic/trackingContext.d.ts +33 -0
  40. package/dist/types/basic/trackingContext.d.ts.map +1 -0
  41. package/dist/types/creators.d.ts +271 -26
  42. package/dist/types/creators.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +60 -7
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/solid/converters.d.ts +5 -5
  46. package/dist/types/solid/converters.d.ts.map +1 -1
  47. package/dist/types/solid/index.d.ts +2 -2
  48. package/dist/types/solid/index.d.ts.map +1 -1
  49. package/dist/types/solid/primitives.d.ts +96 -4
  50. package/dist/types/solid/primitives.d.ts.map +1 -1
  51. package/docs/.vitepress/config.mts +110 -0
  52. package/docs/api/classes/FlowArray.md +489 -0
  53. package/docs/api/classes/FlowConstant.md +350 -0
  54. package/docs/api/classes/FlowDerivation.md +334 -0
  55. package/docs/api/classes/FlowEffect.md +100 -0
  56. package/docs/api/classes/FlowMap.md +512 -0
  57. package/docs/api/classes/FlowObservable.md +306 -0
  58. package/docs/api/classes/FlowResource.md +380 -0
  59. package/docs/api/classes/FlowResourceAsync.md +362 -0
  60. package/docs/api/classes/FlowSignal.md +160 -0
  61. package/docs/api/classes/FlowState.md +368 -0
  62. package/docs/api/classes/FlowStream.md +367 -0
  63. package/docs/api/classes/FlowStreamAsync.md +364 -0
  64. package/docs/api/classes/SolidDerivation.md +75 -0
  65. package/docs/api/classes/SolidResource.md +91 -0
  66. package/docs/api/classes/SolidState.md +71 -0
  67. package/docs/api/classes/TrackingContext.md +33 -0
  68. package/docs/api/functions/array.md +58 -0
  69. package/docs/api/functions/constant.md +45 -0
  70. package/docs/api/functions/derivation.md +53 -0
  71. package/docs/api/functions/effect.md +49 -0
  72. package/docs/api/functions/from.md +220 -0
  73. package/docs/api/functions/isDisposable.md +49 -0
  74. package/docs/api/functions/map.md +57 -0
  75. package/docs/api/functions/resource.md +52 -0
  76. package/docs/api/functions/resourceAsync.md +50 -0
  77. package/docs/api/functions/signal.md +36 -0
  78. package/docs/api/functions/state.md +47 -0
  79. package/docs/api/functions/stream.md +53 -0
  80. package/docs/api/functions/streamAsync.md +50 -0
  81. package/docs/api/index.md +118 -0
  82. package/docs/api/interfaces/FlowDisposable.md +65 -0
  83. package/docs/api/interfaces/SolidObservable.md +19 -0
  84. package/docs/api/type-aliases/FlowArrayAction.md +49 -0
  85. package/docs/api/type-aliases/FlowStreamDisposer.md +15 -0
  86. package/docs/api/type-aliases/FlowStreamSetter.md +27 -0
  87. package/docs/api/type-aliases/FlowStreamUpdater.md +32 -0
  88. package/docs/api/type-aliases/NotPromise.md +18 -0
  89. package/docs/api/type-aliases/SolidGetter.md +17 -0
  90. package/docs/api/typedoc-sidebar.json +1 -0
  91. package/docs/examples/examples.md +2313 -0
  92. package/docs/examples/patterns.md +649 -0
  93. package/docs/guide/advanced/disposal.md +426 -0
  94. package/docs/guide/advanced/solidjs.md +221 -0
  95. package/docs/guide/advanced/upgrading.md +464 -0
  96. package/docs/guide/introduction/concepts.md +56 -0
  97. package/docs/guide/introduction/conventions.md +61 -0
  98. package/docs/guide/introduction/getting-started.md +134 -0
  99. package/docs/guide/introduction/lifecycle.md +371 -0
  100. package/docs/guide/primitives/array.md +400 -0
  101. package/docs/guide/primitives/constant.md +380 -0
  102. package/docs/guide/primitives/derivations.md +348 -0
  103. package/docs/guide/primitives/effects.md +458 -0
  104. package/docs/guide/primitives/map.md +387 -0
  105. package/docs/guide/primitives/overview.md +175 -0
  106. package/docs/guide/primitives/resources.md +858 -0
  107. package/docs/guide/primitives/signal.md +259 -0
  108. package/docs/guide/primitives/state.md +368 -0
  109. package/docs/guide/primitives/streams.md +931 -0
  110. package/docs/index.md +47 -0
  111. package/docs/public/logo.svg +1 -0
  112. package/package.json +57 -41
  113. package/src/advanced/array.ts +208 -210
  114. package/src/advanced/index.ts +7 -7
  115. package/src/advanced/map.ts +178 -68
  116. package/src/advanced/resource.ts +87 -43
  117. package/src/advanced/resourceAsync.ts +62 -42
  118. package/src/advanced/stream.ts +113 -50
  119. package/src/advanced/streamAsync.ts +120 -61
  120. package/src/basic/constant.ts +82 -49
  121. package/src/basic/derivation.ts +128 -84
  122. package/src/basic/disposable.ts +74 -15
  123. package/src/basic/effect.ts +85 -77
  124. package/src/basic/index.ts +7 -8
  125. package/src/basic/observable.ts +94 -36
  126. package/src/basic/signal.ts +133 -105
  127. package/src/basic/state.ts +46 -25
  128. package/src/basic/trackingContext.ts +45 -0
  129. package/src/creators.ts +297 -54
  130. package/src/index.ts +96 -43
  131. package/src/solid/converters.ts +186 -67
  132. package/src/solid/index.ts +8 -2
  133. package/src/solid/primitives.ts +167 -65
  134. package/test/array.test.ts +592 -612
  135. package/test/constant.test.ts +31 -33
  136. package/test/derivation.test.ts +531 -536
  137. package/test/effect.test.ts +21 -21
  138. package/test/map.test.ts +233 -137
  139. package/test/resource.test.ts +119 -121
  140. package/test/resourceAsync.test.ts +98 -100
  141. package/test/signal.test.ts +51 -55
  142. package/test/state.test.ts +186 -168
  143. package/test/stream.test.ts +189 -189
  144. package/test/streamAsync.test.ts +186 -186
  145. package/tsconfig.json +19 -18
  146. package/typedoc.json +37 -0
  147. package/vite.config.ts +23 -23
  148. package/vitest.config.ts +7 -7
  149. package/api/doc/index.md +0 -31
  150. package/api/doc/picoflow.array.md +0 -55
  151. package/api/doc/picoflow.constant.md +0 -55
  152. package/api/doc/picoflow.derivation.md +0 -55
  153. package/api/doc/picoflow.effect.md +0 -55
  154. package/api/doc/picoflow.flowarray._constructor_.md +0 -49
  155. package/api/doc/picoflow.flowarray._lastaction.md +0 -13
  156. package/api/doc/picoflow.flowarray.clear.md +0 -17
  157. package/api/doc/picoflow.flowarray.dispose.md +0 -55
  158. package/api/doc/picoflow.flowarray.get.md +0 -19
  159. package/api/doc/picoflow.flowarray.length.md +0 -13
  160. package/api/doc/picoflow.flowarray.md +0 -273
  161. package/api/doc/picoflow.flowarray.pop.md +0 -17
  162. package/api/doc/picoflow.flowarray.push.md +0 -53
  163. package/api/doc/picoflow.flowarray.set.md +0 -53
  164. package/api/doc/picoflow.flowarray.setitem.md +0 -69
  165. package/api/doc/picoflow.flowarray.shift.md +0 -17
  166. package/api/doc/picoflow.flowarray.splice.md +0 -85
  167. package/api/doc/picoflow.flowarray.unshift.md +0 -53
  168. package/api/doc/picoflow.flowarrayaction.md +0 -37
  169. package/api/doc/picoflow.flowconstant._constructor_.md +0 -49
  170. package/api/doc/picoflow.flowconstant.get.md +0 -25
  171. package/api/doc/picoflow.flowconstant.md +0 -88
  172. package/api/doc/picoflow.flowderivation._constructor_.md +0 -49
  173. package/api/doc/picoflow.flowderivation.get.md +0 -23
  174. package/api/doc/picoflow.flowderivation.md +0 -86
  175. package/api/doc/picoflow.flowdisposable.dispose.md +0 -55
  176. package/api/doc/picoflow.flowdisposable.md +0 -43
  177. package/api/doc/picoflow.floweffect._constructor_.md +0 -54
  178. package/api/doc/picoflow.floweffect.dispose.md +0 -21
  179. package/api/doc/picoflow.floweffect.disposed.md +0 -13
  180. package/api/doc/picoflow.floweffect.md +0 -131
  181. package/api/doc/picoflow.flowgetter.md +0 -15
  182. package/api/doc/picoflow.flowmap._lastdeleted.md +0 -21
  183. package/api/doc/picoflow.flowmap._lastset.md +0 -21
  184. package/api/doc/picoflow.flowmap.delete.md +0 -61
  185. package/api/doc/picoflow.flowmap.md +0 -133
  186. package/api/doc/picoflow.flowmap.setat.md +0 -77
  187. package/api/doc/picoflow.flowobservable.get.md +0 -19
  188. package/api/doc/picoflow.flowobservable.md +0 -68
  189. package/api/doc/picoflow.flowobservable.subscribe.md +0 -55
  190. package/api/doc/picoflow.flowresource._constructor_.md +0 -49
  191. package/api/doc/picoflow.flowresource.fetch.md +0 -27
  192. package/api/doc/picoflow.flowresource.get.md +0 -23
  193. package/api/doc/picoflow.flowresource.md +0 -100
  194. package/api/doc/picoflow.flowresourceasync._constructor_.md +0 -49
  195. package/api/doc/picoflow.flowresourceasync.fetch.md +0 -27
  196. package/api/doc/picoflow.flowresourceasync.get.md +0 -23
  197. package/api/doc/picoflow.flowresourceasync.md +0 -100
  198. package/api/doc/picoflow.flowsignal.dispose.md +0 -59
  199. package/api/doc/picoflow.flowsignal.disposed.md +0 -18
  200. package/api/doc/picoflow.flowsignal.md +0 -112
  201. package/api/doc/picoflow.flowsignal.trigger.md +0 -21
  202. package/api/doc/picoflow.flowstate.md +0 -52
  203. package/api/doc/picoflow.flowstate.set.md +0 -61
  204. package/api/doc/picoflow.flowstream._constructor_.md +0 -49
  205. package/api/doc/picoflow.flowstream.dispose.md +0 -21
  206. package/api/doc/picoflow.flowstream.get.md +0 -23
  207. package/api/doc/picoflow.flowstream.md +0 -100
  208. package/api/doc/picoflow.flowstreamasync._constructor_.md +0 -54
  209. package/api/doc/picoflow.flowstreamasync.dispose.md +0 -21
  210. package/api/doc/picoflow.flowstreamasync.get.md +0 -23
  211. package/api/doc/picoflow.flowstreamasync.md +0 -100
  212. package/api/doc/picoflow.flowstreamdisposer.md +0 -13
  213. package/api/doc/picoflow.flowstreamsetter.md +0 -13
  214. package/api/doc/picoflow.flowstreamupdater.md +0 -19
  215. package/api/doc/picoflow.flowwatcher.md +0 -15
  216. package/api/doc/picoflow.from.md +0 -55
  217. package/api/doc/picoflow.from_1.md +0 -55
  218. package/api/doc/picoflow.from_2.md +0 -55
  219. package/api/doc/picoflow.from_3.md +0 -55
  220. package/api/doc/picoflow.from_4.md +0 -55
  221. package/api/doc/picoflow.from_5.md +0 -55
  222. package/api/doc/picoflow.isdisposable.md +0 -55
  223. package/api/doc/picoflow.map.md +0 -59
  224. package/api/doc/picoflow.md +0 -544
  225. package/api/doc/picoflow.resource.md +0 -55
  226. package/api/doc/picoflow.resourceasync.md +0 -55
  227. package/api/doc/picoflow.signal.md +0 -19
  228. package/api/doc/picoflow.solidderivation._constructor_.md +0 -49
  229. package/api/doc/picoflow.solidderivation.get.md +0 -13
  230. package/api/doc/picoflow.solidderivation.md +0 -94
  231. package/api/doc/picoflow.solidgetter.md +0 -13
  232. package/api/doc/picoflow.solidobservable.get.md +0 -13
  233. package/api/doc/picoflow.solidobservable.md +0 -57
  234. package/api/doc/picoflow.solidresource._constructor_.md +0 -49
  235. package/api/doc/picoflow.solidresource.get.md +0 -13
  236. package/api/doc/picoflow.solidresource.latest.md +0 -13
  237. package/api/doc/picoflow.solidresource.md +0 -157
  238. package/api/doc/picoflow.solidresource.refetch.md +0 -13
  239. package/api/doc/picoflow.solidresource.state.md +0 -13
  240. package/api/doc/picoflow.solidstate._constructor_.md +0 -49
  241. package/api/doc/picoflow.solidstate.get.md +0 -13
  242. package/api/doc/picoflow.solidstate.md +0 -115
  243. package/api/doc/picoflow.solidstate.set.md +0 -13
  244. package/api/doc/picoflow.state.md +0 -55
  245. package/api/doc/picoflow.stream.md +0 -55
  246. package/api/doc/picoflow.streamasync.md +0 -55
  247. package/api/picoflow.public.api.md +0 -244
  248. package/api-extractor.json +0 -61
@@ -0,0 +1,306 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowObservable
2
+
3
+ # Abstract Class: FlowObservable\<T\>
4
+
5
+ Defined in: [basic/observable.ts:23](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L23)
6
+
7
+ Represents a reactive observable that holds and tracks a value.
8
+
9
+ ## Remarks
10
+
11
+ FlowObservable is the base class for all reactive values in PicoFlow. It provides two ways
12
+ to access the current value:
13
+
14
+ 1. **Tracked access** via `get(context)`: Registers the observable as a dependency in the
15
+ tracking context, so changes trigger re-execution of the effect or derivation.
16
+
17
+ 2. **Untracked access** via `pick()` or `get(null)`: Reads the current value without registering
18
+ a dependency, useful for reading values within effects that shouldn't trigger re-runs.
19
+
20
+ Subclasses must implement the [FlowObservable.\_getRaw](#) method to provide the actual value.
21
+
22
+ ## Extends
23
+
24
+ - [`FlowSignal`](/api/classes/FlowSignal.md)
25
+
26
+ ## Extended by
27
+
28
+ - [`FlowArray`](/api/classes/FlowArray.md)
29
+ - [`FlowResource`](/api/classes/FlowResource.md)
30
+ - [`FlowResourceAsync`](/api/classes/FlowResourceAsync.md)
31
+ - [`FlowStream`](/api/classes/FlowStream.md)
32
+ - [`FlowStreamAsync`](/api/classes/FlowStreamAsync.md)
33
+ - [`FlowConstant`](/api/classes/FlowConstant.md)
34
+ - [`FlowDerivation`](/api/classes/FlowDerivation.md)
35
+
36
+ ## Type Parameters
37
+
38
+ | Type Parameter | Description |
39
+ | ------ | ------ |
40
+ | `T` | The type of the value held by the observable. |
41
+
42
+ ## Constructors
43
+
44
+ ### Constructor
45
+
46
+ ```ts
47
+ new FlowObservable<T>(): FlowObservable<T>;
48
+ ```
49
+
50
+ #### Returns
51
+
52
+ `FlowObservable`\<`T`\>
53
+
54
+ #### Inherited from
55
+
56
+ [`FlowSignal`](/api/classes/FlowSignal.md).[`constructor`](/api/classes/FlowSignal.md#constructor)
57
+
58
+ ## Accessors
59
+
60
+ ### disposed
61
+
62
+ #### Get Signature
63
+
64
+ ```ts
65
+ get disposed(): boolean;
66
+ ```
67
+
68
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
69
+
70
+ Indicates whether the FlowSignal has been disposed.
71
+
72
+ ##### Remarks
73
+
74
+ Once disposed, the signal should not be used.
75
+
76
+ ##### Returns
77
+
78
+ `boolean`
79
+
80
+ #### Inherited from
81
+
82
+ [`FlowSignal`](/api/classes/FlowSignal.md).[`disposed`](/api/classes/FlowSignal.md#disposed)
83
+
84
+ ## Methods
85
+
86
+ ### dispose()
87
+
88
+ ```ts
89
+ dispose(options?): void;
90
+ ```
91
+
92
+ Defined in: [basic/signal.ts:69](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L69)
93
+
94
+ Disposes the FlowSignal.
95
+ Cleans up all registered effects, listeners, and dependencies.
96
+ Once disposed, further usage of the signal will throw an error.
97
+
98
+ #### Parameters
99
+
100
+ | Parameter | Type |
101
+ | ------ | ------ |
102
+ | `options?` | \{ `self`: `boolean`; \} |
103
+ | `options.self?` | `boolean` |
104
+
105
+ #### Returns
106
+
107
+ `void`
108
+
109
+ #### Throws
110
+
111
+ If the FlowSignal is already disposed.
112
+
113
+ #### Inherited from
114
+
115
+ [`FlowSignal`](/api/classes/FlowSignal.md).[`dispose`](/api/classes/FlowSignal.md#dispose)
116
+
117
+ ***
118
+
119
+ ### get()
120
+
121
+ ```ts
122
+ get(context): T;
123
+ ```
124
+
125
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
126
+
127
+ Gets the current value with optional dependency tracking.
128
+
129
+ #### Parameters
130
+
131
+ | Parameter | Type | Description |
132
+ | ------ | ------ | ------ |
133
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) \| `null` | The tracking context for reactive tracking, or null for untracked access. When a context is provided, this observable is registered as a dependency. When null, the value is read without any tracking. |
134
+
135
+ #### Returns
136
+
137
+ `T`
138
+
139
+ The current value of type T.
140
+
141
+ #### Remarks
142
+
143
+ Use `get(t)` within effects and derivations to create reactive dependencies.
144
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
145
+
146
+ #### Example
147
+
148
+ ```typescript
149
+ effect((t) => {
150
+ const tracked = $state.get(t); // Dependency registered
151
+ const untracked = $other.get(null); // No dependency
152
+ });
153
+ ```
154
+
155
+ ***
156
+
157
+ ### pick()
158
+
159
+ ```ts
160
+ pick(): T;
161
+ ```
162
+
163
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
164
+
165
+ Gets the current value without any dependency tracking.
166
+
167
+ #### Returns
168
+
169
+ `T`
170
+
171
+ The current value of type T.
172
+
173
+ #### Remarks
174
+
175
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
176
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
177
+ dependency. This is useful for:
178
+ - Reading initial values
179
+ - Accessing configuration that shouldn't trigger updates
180
+ - Mixing tracked and untracked reads in the same effect
181
+
182
+ #### Example
183
+
184
+ ```typescript
185
+ // Read a snapshot outside reactive context
186
+ const currentValue = $state.pick();
187
+
188
+ // Mix tracked and untracked reads
189
+ effect((t) => {
190
+ const tracked = $reactive.get(t); // Triggers re-runs
191
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
192
+ processData(tracked, snapshot);
193
+ });
194
+ ```
195
+
196
+ ***
197
+
198
+ ### subscribe()
199
+
200
+ ```ts
201
+ subscribe(listener): () => void;
202
+ ```
203
+
204
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
205
+
206
+ Subscribes a listener function to changes of the observable.
207
+ The listener is executed immediately with the current value and on subsequent updates.
208
+
209
+ #### Parameters
210
+
211
+ | Parameter | Type | Description |
212
+ | ------ | ------ | ------ |
213
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
214
+
215
+ #### Returns
216
+
217
+ A disposer function to cancel the subscription.
218
+
219
+ ```ts
220
+ (): void;
221
+ ```
222
+
223
+ ##### Returns
224
+
225
+ `void`
226
+
227
+ ***
228
+
229
+ ### trigger()
230
+
231
+ ```ts
232
+ trigger(): void;
233
+ ```
234
+
235
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
236
+
237
+ Triggers the FlowSignal.
238
+ Notifies all registered listeners and schedules execution of associated effects.
239
+
240
+ #### Returns
241
+
242
+ `void`
243
+
244
+ #### Throws
245
+
246
+ If the FlowSignal has already been disposed.
247
+
248
+ #### Inherited from
249
+
250
+ [`FlowSignal`](/api/classes/FlowSignal.md).[`trigger`](/api/classes/FlowSignal.md#trigger)
251
+
252
+ ***
253
+
254
+ ### watch()
255
+
256
+ ```ts
257
+ watch(context): void;
258
+ ```
259
+
260
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
261
+
262
+ Watches the signal, registering it as a dependency in the tracking context.
263
+
264
+ #### Parameters
265
+
266
+ | Parameter | Type | Description |
267
+ | ------ | ------ | ------ |
268
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
269
+
270
+ #### Returns
271
+
272
+ `void`
273
+
274
+ #### Remarks
275
+
276
+ Use `watch()` when you want to track a signal without reading its value (signals don't
277
+ have values to read). This is useful for triggering effects based on signal events
278
+ without needing associated data.
279
+
280
+ When the signal is triggered via `trigger()`, any effects or derivations that have
281
+ watched this signal will automatically re-execute.
282
+
283
+ This method must be called within an effect or derivation context where a TrackingContext
284
+ is available. For observables (which hold values), use `.get(t)` instead, which both
285
+ reads the value and watches for changes.
286
+
287
+ #### Throws
288
+
289
+ Error if the signal has been disposed.
290
+
291
+ #### Example
292
+
293
+ ```typescript
294
+ const $signal = signal();
295
+
296
+ effect((t) => {
297
+ $signal.watch(t); // Track the signal
298
+ console.log('Signal triggered!');
299
+ });
300
+
301
+ $signal.trigger(); // Logs: "Signal triggered!"
302
+ ```
303
+
304
+ #### Inherited from
305
+
306
+ [`FlowSignal`](/api/classes/FlowSignal.md).[`watch`](/api/classes/FlowSignal.md#watch)
@@ -0,0 +1,380 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowResource
2
+
3
+ # Class: FlowResource\<T\>
4
+
5
+ Defined in: [advanced/resource.ts:56](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resource.ts#L56)
6
+
7
+ Represents a reactive resource that asynchronously fetches its value and returns `T | undefined`.
8
+
9
+ ## Remarks
10
+
11
+ FlowResource extends FlowObservable to manage asynchronous data fetching with reactive updates.
12
+ Unlike [FlowResourceAsync](/api/classes/FlowResourceAsync.md) which always returns a Promise, FlowResource returns the resolved
13
+ value directly (or `undefined` if not yet fetched), making it more convenient for synchronous access
14
+ patterns in effects and derivations.
15
+
16
+ **Key Characteristics:**
17
+ - The value is `undefined` initially, before the first fetch
18
+ - Call `fetch()` to trigger the asynchronous fetch operation
19
+ - When fetched, the value is compared to the current value; only different values trigger updates
20
+ - Reading via `get(t)` or `pick()` returns the current value (possibly `undefined`) without triggering a fetch
21
+
22
+ **Fetch Behavior:**
23
+ The fetch function is NOT called automatically on construction. You must explicitly call the
24
+ `fetch()` method to retrieve the resource. This gives you control over when network requests
25
+ or expensive async operations occur.
26
+
27
+ **Use Cases:**
28
+ - API data fetching where you want synchronous access to the cached value
29
+ - Lazy-loaded data that shouldn't fetch on construction
30
+ - Resources that need manual refresh control
31
+ - Data that may or may not be available (hence `T | undefined`)
32
+
33
+ ## Example
34
+
35
+ ```typescript
36
+ const $user = resource(() => fetchUserFromAPI());
37
+
38
+ // Initially undefined
39
+ console.log($user.pick()); // undefined
40
+
41
+ // Trigger the fetch
42
+ await $user.fetch();
43
+ console.log($user.pick()); // { id: 1, name: 'John' }
44
+
45
+ // Use in an effect
46
+ effect((t) => {
47
+ const user = $user.get(t);
48
+ if (user) {
49
+ console.log(`Hello, ${user.name}`);
50
+ }
51
+ });
52
+
53
+ // Refetch to update
54
+ await $user.fetch();
55
+ ```
56
+
57
+ ## Extends
58
+
59
+ - [`FlowObservable`](/api/classes/FlowObservable.md)\<`T` \| `undefined`\>
60
+
61
+ ## Type Parameters
62
+
63
+ | Type Parameter | Description |
64
+ | ------ | ------ |
65
+ | `T` | The type of the resource value (not including the undefined case). |
66
+
67
+ ## Constructors
68
+
69
+ ### Constructor
70
+
71
+ ```ts
72
+ new FlowResource<T>(fetch): FlowResource<T>;
73
+ ```
74
+
75
+ Defined in: [advanced/resource.ts:66](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resource.ts#L66)
76
+
77
+ Creates a new FlowResource.
78
+
79
+ #### Parameters
80
+
81
+ | Parameter | Type | Description |
82
+ | ------ | ------ | ------ |
83
+ | `fetch` | () => `Promise`\<`T`\> | An asynchronous function that retrieves the resource's value. This function is not invoked on construction; you must call the `fetch()` method to execute it. |
84
+
85
+ #### Returns
86
+
87
+ `FlowResource`\<`T`\>
88
+
89
+ #### Overrides
90
+
91
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`constructor`](/api/classes/FlowObservable.md#constructor)
92
+
93
+ ## Accessors
94
+
95
+ ### disposed
96
+
97
+ #### Get Signature
98
+
99
+ ```ts
100
+ get disposed(): boolean;
101
+ ```
102
+
103
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
104
+
105
+ Indicates whether the FlowSignal has been disposed.
106
+
107
+ ##### Remarks
108
+
109
+ Once disposed, the signal should not be used.
110
+
111
+ ##### Returns
112
+
113
+ `boolean`
114
+
115
+ #### Inherited from
116
+
117
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`disposed`](/api/classes/FlowObservable.md#disposed)
118
+
119
+ ## Methods
120
+
121
+ ### dispose()
122
+
123
+ ```ts
124
+ dispose(options?): void;
125
+ ```
126
+
127
+ Defined in: [basic/signal.ts:69](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L69)
128
+
129
+ Disposes the FlowSignal.
130
+ Cleans up all registered effects, listeners, and dependencies.
131
+ Once disposed, further usage of the signal will throw an error.
132
+
133
+ #### Parameters
134
+
135
+ | Parameter | Type |
136
+ | ------ | ------ |
137
+ | `options?` | \{ `self`: `boolean`; \} |
138
+ | `options.self?` | `boolean` |
139
+
140
+ #### Returns
141
+
142
+ `void`
143
+
144
+ #### Throws
145
+
146
+ If the FlowSignal is already disposed.
147
+
148
+ #### Inherited from
149
+
150
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`dispose`](/api/classes/FlowObservable.md#dispose)
151
+
152
+ ***
153
+
154
+ ### fetch()
155
+
156
+ ```ts
157
+ fetch(): Promise<void>;
158
+ ```
159
+
160
+ Defined in: [advanced/resource.ts:89](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resource.ts#L89)
161
+
162
+ Asynchronously fetches a new value for the resource.
163
+
164
+ #### Returns
165
+
166
+ `Promise`\<`void`\>
167
+
168
+ A Promise that resolves when the fetch operation is complete.
169
+
170
+ #### Remarks
171
+
172
+ Executes the internal fetch function. If the fetched value differs from the current one,
173
+ updates the resource's value and notifies subscribers.
174
+
175
+ #### Throws
176
+
177
+ Error if the resource is disposed.
178
+
179
+ ***
180
+
181
+ ### get()
182
+
183
+ ```ts
184
+ get(context): T | undefined;
185
+ ```
186
+
187
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
188
+
189
+ Gets the current value with optional dependency tracking.
190
+
191
+ #### Parameters
192
+
193
+ | Parameter | Type | Description |
194
+ | ------ | ------ | ------ |
195
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) \| `null` | The tracking context for reactive tracking, or null for untracked access. When a context is provided, this observable is registered as a dependency. When null, the value is read without any tracking. |
196
+
197
+ #### Returns
198
+
199
+ `T` \| `undefined`
200
+
201
+ The current value of type T.
202
+
203
+ #### Remarks
204
+
205
+ Use `get(t)` within effects and derivations to create reactive dependencies.
206
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
207
+
208
+ #### Example
209
+
210
+ ```typescript
211
+ effect((t) => {
212
+ const tracked = $state.get(t); // Dependency registered
213
+ const untracked = $other.get(null); // No dependency
214
+ });
215
+ ```
216
+
217
+ #### Inherited from
218
+
219
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`get`](/api/classes/FlowObservable.md#get)
220
+
221
+ ***
222
+
223
+ ### pick()
224
+
225
+ ```ts
226
+ pick(): T | undefined;
227
+ ```
228
+
229
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
230
+
231
+ Gets the current value without any dependency tracking.
232
+
233
+ #### Returns
234
+
235
+ `T` \| `undefined`
236
+
237
+ The current value of type T.
238
+
239
+ #### Remarks
240
+
241
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
242
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
243
+ dependency. This is useful for:
244
+ - Reading initial values
245
+ - Accessing configuration that shouldn't trigger updates
246
+ - Mixing tracked and untracked reads in the same effect
247
+
248
+ #### Example
249
+
250
+ ```typescript
251
+ // Read a snapshot outside reactive context
252
+ const currentValue = $state.pick();
253
+
254
+ // Mix tracked and untracked reads
255
+ effect((t) => {
256
+ const tracked = $reactive.get(t); // Triggers re-runs
257
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
258
+ processData(tracked, snapshot);
259
+ });
260
+ ```
261
+
262
+ #### Inherited from
263
+
264
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`pick`](/api/classes/FlowObservable.md#pick)
265
+
266
+ ***
267
+
268
+ ### subscribe()
269
+
270
+ ```ts
271
+ subscribe(listener): () => void;
272
+ ```
273
+
274
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
275
+
276
+ Subscribes a listener function to changes of the observable.
277
+ The listener is executed immediately with the current value and on subsequent updates.
278
+
279
+ #### Parameters
280
+
281
+ | Parameter | Type | Description |
282
+ | ------ | ------ | ------ |
283
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
284
+
285
+ #### Returns
286
+
287
+ A disposer function to cancel the subscription.
288
+
289
+ ```ts
290
+ (): void;
291
+ ```
292
+
293
+ ##### Returns
294
+
295
+ `void`
296
+
297
+ #### Inherited from
298
+
299
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`subscribe`](/api/classes/FlowObservable.md#subscribe)
300
+
301
+ ***
302
+
303
+ ### trigger()
304
+
305
+ ```ts
306
+ trigger(): void;
307
+ ```
308
+
309
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
310
+
311
+ Triggers the FlowSignal.
312
+ Notifies all registered listeners and schedules execution of associated effects.
313
+
314
+ #### Returns
315
+
316
+ `void`
317
+
318
+ #### Throws
319
+
320
+ If the FlowSignal has already been disposed.
321
+
322
+ #### Inherited from
323
+
324
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`trigger`](/api/classes/FlowObservable.md#trigger)
325
+
326
+ ***
327
+
328
+ ### watch()
329
+
330
+ ```ts
331
+ watch(context): void;
332
+ ```
333
+
334
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
335
+
336
+ Watches the signal, registering it as a dependency in the tracking context.
337
+
338
+ #### Parameters
339
+
340
+ | Parameter | Type | Description |
341
+ | ------ | ------ | ------ |
342
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
343
+
344
+ #### Returns
345
+
346
+ `void`
347
+
348
+ #### Remarks
349
+
350
+ Use `watch()` when you want to track a signal without reading its value (signals don't
351
+ have values to read). This is useful for triggering effects based on signal events
352
+ without needing associated data.
353
+
354
+ When the signal is triggered via `trigger()`, any effects or derivations that have
355
+ watched this signal will automatically re-execute.
356
+
357
+ This method must be called within an effect or derivation context where a TrackingContext
358
+ is available. For observables (which hold values), use `.get(t)` instead, which both
359
+ reads the value and watches for changes.
360
+
361
+ #### Throws
362
+
363
+ Error if the signal has been disposed.
364
+
365
+ #### Example
366
+
367
+ ```typescript
368
+ const $signal = signal();
369
+
370
+ effect((t) => {
371
+ $signal.watch(t); // Track the signal
372
+ console.log('Signal triggered!');
373
+ });
374
+
375
+ $signal.trigger(); // Logs: "Signal triggered!"
376
+ ```
377
+
378
+ #### Inherited from
379
+
380
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`watch`](/api/classes/FlowObservable.md#watch)