@ersbeth/picoflow 0.2.4 → 1.0.1

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 +9 -134
  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,362 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowResourceAsync
2
+
3
+ # Class: FlowResourceAsync\<T\>
4
+
5
+ Defined in: [advanced/resourceAsync.ts:38](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resourceAsync.ts#L38)
6
+
7
+ Represents a reactive resource that asynchronously fetches its value and always returns a Promise.
8
+
9
+ ## Remarks
10
+
11
+ FlowResourceAsync extends FlowObservable and encapsulates an asynchronous fetch function.
12
+ Unlike [FlowResource](/api/classes/FlowResource.md) which returns `T | undefined`, FlowResourceAsync always returns
13
+ a `Promise<T>`, making it suitable for async/await patterns.
14
+
15
+ **Key Characteristics:**
16
+ - The first call to `get()` or `pick()` creates and caches a Promise
17
+ - Subsequent calls return the same Promise until `fetch()` is called
18
+ - Calling `fetch()` creates a new Promise and notifies subscribers
19
+ - The Promise resolves to the fetched value of type T
20
+
21
+ **Lazy Promise Creation:**
22
+ The fetch function doesn't execute until the resource's value is first accessed.
23
+ This allows you to define resources without immediately triggering network requests.
24
+
25
+ ## Example
26
+
27
+ ```typescript
28
+ const $user = resourceAsync(() => fetchUserFromAPI());
29
+
30
+ effect(async (t) => {
31
+ const user = await $user.get(t); // Tracked, effect re-runs on fetch()
32
+ console.log(user.name);
33
+ });
34
+
35
+ // Trigger a refetch
36
+ await $user.fetch();
37
+ ```
38
+
39
+ ## Extends
40
+
41
+ - [`FlowObservable`](/api/classes/FlowObservable.md)\<`Promise`\<`T`\>\>
42
+
43
+ ## Type Parameters
44
+
45
+ | Type Parameter | Description |
46
+ | ------ | ------ |
47
+ | `T` | The type of the resource value (not the Promise itself). |
48
+
49
+ ## Constructors
50
+
51
+ ### Constructor
52
+
53
+ ```ts
54
+ new FlowResourceAsync<T>(fetch): FlowResourceAsync<T>;
55
+ ```
56
+
57
+ Defined in: [advanced/resourceAsync.ts:44](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resourceAsync.ts#L44)
58
+
59
+ Creates a new FlowResource.
60
+
61
+ #### Parameters
62
+
63
+ | Parameter | Type | Description |
64
+ | ------ | ------ | ------ |
65
+ | `fetch` | () => `Promise`\<`T`\> | An asynchronous function that retrieves the resource's value. |
66
+
67
+ #### Returns
68
+
69
+ `FlowResourceAsync`\<`T`\>
70
+
71
+ #### Overrides
72
+
73
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`constructor`](/api/classes/FlowObservable.md#constructor)
74
+
75
+ ## Accessors
76
+
77
+ ### disposed
78
+
79
+ #### Get Signature
80
+
81
+ ```ts
82
+ get disposed(): boolean;
83
+ ```
84
+
85
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
86
+
87
+ Indicates whether the FlowSignal has been disposed.
88
+
89
+ ##### Remarks
90
+
91
+ Once disposed, the signal should not be used.
92
+
93
+ ##### Returns
94
+
95
+ `boolean`
96
+
97
+ #### Inherited from
98
+
99
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`disposed`](/api/classes/FlowObservable.md#disposed)
100
+
101
+ ## Methods
102
+
103
+ ### dispose()
104
+
105
+ ```ts
106
+ dispose(options?): void;
107
+ ```
108
+
109
+ Defined in: [basic/signal.ts:69](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L69)
110
+
111
+ Disposes the FlowSignal.
112
+ Cleans up all registered effects, listeners, and dependencies.
113
+ Once disposed, further usage of the signal will throw an error.
114
+
115
+ #### Parameters
116
+
117
+ | Parameter | Type |
118
+ | ------ | ------ |
119
+ | `options?` | \{ `self`: `boolean`; \} |
120
+ | `options.self?` | `boolean` |
121
+
122
+ #### Returns
123
+
124
+ `void`
125
+
126
+ #### Throws
127
+
128
+ If the FlowSignal is already disposed.
129
+
130
+ #### Inherited from
131
+
132
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`dispose`](/api/classes/FlowObservable.md#dispose)
133
+
134
+ ***
135
+
136
+ ### fetch()
137
+
138
+ ```ts
139
+ fetch(): Promise<void>;
140
+ ```
141
+
142
+ Defined in: [advanced/resourceAsync.ts:68](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/resourceAsync.ts#L68)
143
+
144
+ Asynchronously fetches a new value for the resource.
145
+
146
+ #### Returns
147
+
148
+ `Promise`\<`void`\>
149
+
150
+ A Promise that resolves when the fetch operation is complete.
151
+
152
+ #### Remarks
153
+
154
+ Executes the internal fetch function. If the fetched value differs from the current one,
155
+ updates the resource's value and notifies subscribers.
156
+
157
+ #### Throws
158
+
159
+ Error if the resource is disposed.
160
+
161
+ ***
162
+
163
+ ### get()
164
+
165
+ ```ts
166
+ get(context): Promise;
167
+ ```
168
+
169
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
170
+
171
+ Gets the current value with optional dependency tracking.
172
+
173
+ #### Parameters
174
+
175
+ | Parameter | Type | Description |
176
+ | ------ | ------ | ------ |
177
+ | `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. |
178
+
179
+ #### Returns
180
+
181
+ `Promise`
182
+
183
+ The current value of type T.
184
+
185
+ #### Remarks
186
+
187
+ Use `get(t)` within effects and derivations to create reactive dependencies.
188
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
189
+
190
+ #### Example
191
+
192
+ ```typescript
193
+ effect((t) => {
194
+ const tracked = $state.get(t); // Dependency registered
195
+ const untracked = $other.get(null); // No dependency
196
+ });
197
+ ```
198
+
199
+ #### Inherited from
200
+
201
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`get`](/api/classes/FlowObservable.md#get)
202
+
203
+ ***
204
+
205
+ ### pick()
206
+
207
+ ```ts
208
+ pick(): Promise;
209
+ ```
210
+
211
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
212
+
213
+ Gets the current value without any dependency tracking.
214
+
215
+ #### Returns
216
+
217
+ `Promise`
218
+
219
+ The current value of type T.
220
+
221
+ #### Remarks
222
+
223
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
224
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
225
+ dependency. This is useful for:
226
+ - Reading initial values
227
+ - Accessing configuration that shouldn't trigger updates
228
+ - Mixing tracked and untracked reads in the same effect
229
+
230
+ #### Example
231
+
232
+ ```typescript
233
+ // Read a snapshot outside reactive context
234
+ const currentValue = $state.pick();
235
+
236
+ // Mix tracked and untracked reads
237
+ effect((t) => {
238
+ const tracked = $reactive.get(t); // Triggers re-runs
239
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
240
+ processData(tracked, snapshot);
241
+ });
242
+ ```
243
+
244
+ #### Inherited from
245
+
246
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`pick`](/api/classes/FlowObservable.md#pick)
247
+
248
+ ***
249
+
250
+ ### subscribe()
251
+
252
+ ```ts
253
+ subscribe(listener): () => void;
254
+ ```
255
+
256
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
257
+
258
+ Subscribes a listener function to changes of the observable.
259
+ The listener is executed immediately with the current value and on subsequent updates.
260
+
261
+ #### Parameters
262
+
263
+ | Parameter | Type | Description |
264
+ | ------ | ------ | ------ |
265
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
266
+
267
+ #### Returns
268
+
269
+ A disposer function to cancel the subscription.
270
+
271
+ ```ts
272
+ (): void;
273
+ ```
274
+
275
+ ##### Returns
276
+
277
+ `void`
278
+
279
+ #### Inherited from
280
+
281
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`subscribe`](/api/classes/FlowObservable.md#subscribe)
282
+
283
+ ***
284
+
285
+ ### trigger()
286
+
287
+ ```ts
288
+ trigger(): void;
289
+ ```
290
+
291
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
292
+
293
+ Triggers the FlowSignal.
294
+ Notifies all registered listeners and schedules execution of associated effects.
295
+
296
+ #### Returns
297
+
298
+ `void`
299
+
300
+ #### Throws
301
+
302
+ If the FlowSignal has already been disposed.
303
+
304
+ #### Inherited from
305
+
306
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`trigger`](/api/classes/FlowObservable.md#trigger)
307
+
308
+ ***
309
+
310
+ ### watch()
311
+
312
+ ```ts
313
+ watch(context): void;
314
+ ```
315
+
316
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
317
+
318
+ Watches the signal, registering it as a dependency in the tracking context.
319
+
320
+ #### Parameters
321
+
322
+ | Parameter | Type | Description |
323
+ | ------ | ------ | ------ |
324
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
325
+
326
+ #### Returns
327
+
328
+ `void`
329
+
330
+ #### Remarks
331
+
332
+ Use `watch()` when you want to track a signal without reading its value (signals don't
333
+ have values to read). This is useful for triggering effects based on signal events
334
+ without needing associated data.
335
+
336
+ When the signal is triggered via `trigger()`, any effects or derivations that have
337
+ watched this signal will automatically re-execute.
338
+
339
+ This method must be called within an effect or derivation context where a TrackingContext
340
+ is available. For observables (which hold values), use `.get(t)` instead, which both
341
+ reads the value and watches for changes.
342
+
343
+ #### Throws
344
+
345
+ Error if the signal has been disposed.
346
+
347
+ #### Example
348
+
349
+ ```typescript
350
+ const $signal = signal();
351
+
352
+ effect((t) => {
353
+ $signal.watch(t); // Track the signal
354
+ console.log('Signal triggered!');
355
+ });
356
+
357
+ $signal.trigger(); // Logs: "Signal triggered!"
358
+ ```
359
+
360
+ #### Inherited from
361
+
362
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`watch`](/api/classes/FlowObservable.md#watch)
@@ -0,0 +1,160 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowSignal
2
+
3
+ # Class: FlowSignal
4
+
5
+ Defined in: [basic/signal.ts:12](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L12)
6
+
7
+ Represents a reactive signal.
8
+
9
+ ## Remarks
10
+
11
+ Use FlowSignal to create reactive streams that notify listeners and execute associated effects.
12
+ Signals can be triggered and disposed. Once disposed, interactions with the signal will throw errors.
13
+
14
+ ## Extended by
15
+
16
+ - [`FlowObservable`](/api/classes/FlowObservable.md)
17
+
18
+ ## Implements
19
+
20
+ - [`FlowDisposable`](/api/interfaces/FlowDisposable.md)
21
+
22
+ ## Constructors
23
+
24
+ ### Constructor
25
+
26
+ ```ts
27
+ new FlowSignal(): FlowSignal;
28
+ ```
29
+
30
+ #### Returns
31
+
32
+ `FlowSignal`
33
+
34
+ ## Accessors
35
+
36
+ ### disposed
37
+
38
+ #### Get Signature
39
+
40
+ ```ts
41
+ get disposed(): boolean;
42
+ ```
43
+
44
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
45
+
46
+ Indicates whether the FlowSignal has been disposed.
47
+
48
+ ##### Remarks
49
+
50
+ Once disposed, the signal should not be used.
51
+
52
+ ##### Returns
53
+
54
+ `boolean`
55
+
56
+ ## Methods
57
+
58
+ ### dispose()
59
+
60
+ ```ts
61
+ dispose(options?): void;
62
+ ```
63
+
64
+ Defined in: [basic/signal.ts:69](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L69)
65
+
66
+ Disposes the FlowSignal.
67
+ Cleans up all registered effects, listeners, and dependencies.
68
+ Once disposed, further usage of the signal will throw an error.
69
+
70
+ #### Parameters
71
+
72
+ | Parameter | Type |
73
+ | ------ | ------ |
74
+ | `options?` | \{ `self`: `boolean`; \} |
75
+ | `options.self?` | `boolean` |
76
+
77
+ #### Returns
78
+
79
+ `void`
80
+
81
+ #### Throws
82
+
83
+ If the FlowSignal is already disposed.
84
+
85
+ #### Implementation of
86
+
87
+ [`FlowDisposable`](/api/interfaces/FlowDisposable.md).[`dispose`](/api/interfaces/FlowDisposable.md#dispose)
88
+
89
+ ***
90
+
91
+ ### trigger()
92
+
93
+ ```ts
94
+ trigger(): void;
95
+ ```
96
+
97
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
98
+
99
+ Triggers the FlowSignal.
100
+ Notifies all registered listeners and schedules execution of associated effects.
101
+
102
+ #### Returns
103
+
104
+ `void`
105
+
106
+ #### Throws
107
+
108
+ If the FlowSignal has already been disposed.
109
+
110
+ ***
111
+
112
+ ### watch()
113
+
114
+ ```ts
115
+ watch(context): void;
116
+ ```
117
+
118
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
119
+
120
+ Watches the signal, registering it as a dependency in the tracking context.
121
+
122
+ #### Parameters
123
+
124
+ | Parameter | Type | Description |
125
+ | ------ | ------ | ------ |
126
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
127
+
128
+ #### Returns
129
+
130
+ `void`
131
+
132
+ #### Remarks
133
+
134
+ Use `watch()` when you want to track a signal without reading its value (signals don't
135
+ have values to read). This is useful for triggering effects based on signal events
136
+ without needing associated data.
137
+
138
+ When the signal is triggered via `trigger()`, any effects or derivations that have
139
+ watched this signal will automatically re-execute.
140
+
141
+ This method must be called within an effect or derivation context where a TrackingContext
142
+ is available. For observables (which hold values), use `.get(t)` instead, which both
143
+ reads the value and watches for changes.
144
+
145
+ #### Throws
146
+
147
+ Error if the signal has been disposed.
148
+
149
+ #### Example
150
+
151
+ ```typescript
152
+ const $signal = signal();
153
+
154
+ effect((t) => {
155
+ $signal.watch(t); // Track the signal
156
+ console.log('Signal triggered!');
157
+ });
158
+
159
+ $signal.trigger(); // Logs: "Signal triggered!"
160
+ ```