@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,367 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowStream
2
+
3
+ # Class: FlowStream\<T\>
4
+
5
+ Defined in: [advanced/stream.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/stream.ts#L97)
6
+
7
+ Represents a reactive stream that updates its value based on an external updater function.
8
+
9
+ ## Remarks
10
+
11
+ FlowStream extends FlowObservable to bridge external event sources with PicoFlow's reactive
12
+ system. It's designed for integrating with event emitters, WebSocket connections, timers,
13
+ or any push-based data source that sends updates over time.
14
+
15
+ **How It Works:**
16
+ 1. You provide an updater function that receives a setter callback
17
+ 2. The updater sets up subscriptions to external events and calls the setter with new values
18
+ 3. When the setter is called, the stream notifies all dependent effects and derivations
19
+ 4. The updater returns a disposer function for cleanup
20
+
21
+ **Initial Value:**
22
+ The stream's value is `undefined` until the first time the setter is called. This allows
23
+ you to check if any data has been received yet.
24
+
25
+ **Change Detection:**
26
+ The stream only notifies subscribers when the new value differs from the current value
27
+ (using strict equality `===`). This prevents unnecessary updates for duplicate values.
28
+
29
+ **Resource Management:**
30
+ The disposer function returned by your updater is automatically called when the stream
31
+ is disposed. Use it to clean up subscriptions, close connections, or clear timers.
32
+
33
+ **Use Cases:**
34
+ - WebSocket message streams
35
+ - DOM event listeners
36
+ - setInterval/setTimeout timers
37
+ - Server-sent events (SSE)
38
+ - Observable subscriptions from other libraries
39
+ - Any push-based data source
40
+
41
+ ## Example
42
+
43
+ ```typescript
44
+ // WebSocket stream
45
+ const $messages = stream<string>((set) => {
46
+ const ws = new WebSocket('ws://example.com');
47
+ ws.onmessage = (event) => set(event.data);
48
+ return () => ws.close();
49
+ });
50
+
51
+ // Timer stream
52
+ const $tick = stream<number>((set) => {
53
+ let count = 0;
54
+ const id = setInterval(() => set(count++), 1000);
55
+ return () => clearInterval(id);
56
+ });
57
+
58
+ // DOM event stream
59
+ const $clicks = stream<MouseEvent>((set) => {
60
+ const handler = (e: MouseEvent) => set(e);
61
+ document.addEventListener('click', handler);
62
+ return () => document.removeEventListener('click', handler);
63
+ });
64
+
65
+ // Use in an effect
66
+ effect((t) => {
67
+ const message = $messages.get(t);
68
+ if (message) {
69
+ console.log('Received:', message);
70
+ }
71
+ });
72
+ ```
73
+
74
+ ## Extends
75
+
76
+ - [`FlowObservable`](/api/classes/FlowObservable.md)\<`T` \| `undefined`\>
77
+
78
+ ## Type Parameters
79
+
80
+ | Type Parameter | Description |
81
+ | ------ | ------ |
82
+ | `T` | The type of the values emitted by the stream. |
83
+
84
+ ## Constructors
85
+
86
+ ### Constructor
87
+
88
+ ```ts
89
+ new FlowStream<T>(updater): FlowStream<T>;
90
+ ```
91
+
92
+ Defined in: [advanced/stream.ts:111](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/stream.ts#L111)
93
+
94
+ Creates a new FlowStream.
95
+
96
+ #### Parameters
97
+
98
+ | Parameter | Type | Description |
99
+ | ------ | ------ | ------ |
100
+ | `updater` | [`FlowStreamUpdater`](/api/type-aliases/FlowStreamUpdater.md)\<`T`\> | A function that receives a setter callback and returns a disposer. The setter should be called whenever new data is available. The disposer will be invoked when the stream is disposed to clean up resources. |
101
+
102
+ #### Returns
103
+
104
+ `FlowStream`\<`T`\>
105
+
106
+ #### Remarks
107
+
108
+ The updater is invoked immediately during construction. Make sure to return a proper
109
+ cleanup function to avoid resource leaks.
110
+
111
+ #### Overrides
112
+
113
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`constructor`](/api/classes/FlowObservable.md#constructor)
114
+
115
+ ## Accessors
116
+
117
+ ### disposed
118
+
119
+ #### Get Signature
120
+
121
+ ```ts
122
+ get disposed(): boolean;
123
+ ```
124
+
125
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
126
+
127
+ Indicates whether the FlowSignal has been disposed.
128
+
129
+ ##### Remarks
130
+
131
+ Once disposed, the signal should not be used.
132
+
133
+ ##### Returns
134
+
135
+ `boolean`
136
+
137
+ #### Inherited from
138
+
139
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`disposed`](/api/classes/FlowObservable.md#disposed)
140
+
141
+ ## Methods
142
+
143
+ ### dispose()
144
+
145
+ ```ts
146
+ dispose(): void;
147
+ ```
148
+
149
+ Defined in: [advanced/stream.ts:134](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/stream.ts#L134)
150
+
151
+ Disposes the stream, releasing all resources.
152
+
153
+ #### Returns
154
+
155
+ `void`
156
+
157
+ #### Remarks
158
+
159
+ In addition to disposing the underlying observable, this method calls the disposer
160
+ returned by the updater.
161
+
162
+ #### Overrides
163
+
164
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`dispose`](/api/classes/FlowObservable.md#dispose)
165
+
166
+ ***
167
+
168
+ ### get()
169
+
170
+ ```ts
171
+ get(context): T | undefined;
172
+ ```
173
+
174
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
175
+
176
+ Gets the current value with optional dependency tracking.
177
+
178
+ #### Parameters
179
+
180
+ | Parameter | Type | Description |
181
+ | ------ | ------ | ------ |
182
+ | `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. |
183
+
184
+ #### Returns
185
+
186
+ `T` \| `undefined`
187
+
188
+ The current value of type T.
189
+
190
+ #### Remarks
191
+
192
+ Use `get(t)` within effects and derivations to create reactive dependencies.
193
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
194
+
195
+ #### Example
196
+
197
+ ```typescript
198
+ effect((t) => {
199
+ const tracked = $state.get(t); // Dependency registered
200
+ const untracked = $other.get(null); // No dependency
201
+ });
202
+ ```
203
+
204
+ #### Inherited from
205
+
206
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`get`](/api/classes/FlowObservable.md#get)
207
+
208
+ ***
209
+
210
+ ### pick()
211
+
212
+ ```ts
213
+ pick(): T | undefined;
214
+ ```
215
+
216
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
217
+
218
+ Gets the current value without any dependency tracking.
219
+
220
+ #### Returns
221
+
222
+ `T` \| `undefined`
223
+
224
+ The current value of type T.
225
+
226
+ #### Remarks
227
+
228
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
229
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
230
+ dependency. This is useful for:
231
+ - Reading initial values
232
+ - Accessing configuration that shouldn't trigger updates
233
+ - Mixing tracked and untracked reads in the same effect
234
+
235
+ #### Example
236
+
237
+ ```typescript
238
+ // Read a snapshot outside reactive context
239
+ const currentValue = $state.pick();
240
+
241
+ // Mix tracked and untracked reads
242
+ effect((t) => {
243
+ const tracked = $reactive.get(t); // Triggers re-runs
244
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
245
+ processData(tracked, snapshot);
246
+ });
247
+ ```
248
+
249
+ #### Inherited from
250
+
251
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`pick`](/api/classes/FlowObservable.md#pick)
252
+
253
+ ***
254
+
255
+ ### subscribe()
256
+
257
+ ```ts
258
+ subscribe(listener): () => void;
259
+ ```
260
+
261
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
262
+
263
+ Subscribes a listener function to changes of the observable.
264
+ The listener is executed immediately with the current value and on subsequent updates.
265
+
266
+ #### Parameters
267
+
268
+ | Parameter | Type | Description |
269
+ | ------ | ------ | ------ |
270
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
271
+
272
+ #### Returns
273
+
274
+ A disposer function to cancel the subscription.
275
+
276
+ ```ts
277
+ (): void;
278
+ ```
279
+
280
+ ##### Returns
281
+
282
+ `void`
283
+
284
+ #### Inherited from
285
+
286
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`subscribe`](/api/classes/FlowObservable.md#subscribe)
287
+
288
+ ***
289
+
290
+ ### trigger()
291
+
292
+ ```ts
293
+ trigger(): void;
294
+ ```
295
+
296
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
297
+
298
+ Triggers the FlowSignal.
299
+ Notifies all registered listeners and schedules execution of associated effects.
300
+
301
+ #### Returns
302
+
303
+ `void`
304
+
305
+ #### Throws
306
+
307
+ If the FlowSignal has already been disposed.
308
+
309
+ #### Inherited from
310
+
311
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`trigger`](/api/classes/FlowObservable.md#trigger)
312
+
313
+ ***
314
+
315
+ ### watch()
316
+
317
+ ```ts
318
+ watch(context): void;
319
+ ```
320
+
321
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
322
+
323
+ Watches the signal, registering it as a dependency in the tracking context.
324
+
325
+ #### Parameters
326
+
327
+ | Parameter | Type | Description |
328
+ | ------ | ------ | ------ |
329
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
330
+
331
+ #### Returns
332
+
333
+ `void`
334
+
335
+ #### Remarks
336
+
337
+ Use `watch()` when you want to track a signal without reading its value (signals don't
338
+ have values to read). This is useful for triggering effects based on signal events
339
+ without needing associated data.
340
+
341
+ When the signal is triggered via `trigger()`, any effects or derivations that have
342
+ watched this signal will automatically re-execute.
343
+
344
+ This method must be called within an effect or derivation context where a TrackingContext
345
+ is available. For observables (which hold values), use `.get(t)` instead, which both
346
+ reads the value and watches for changes.
347
+
348
+ #### Throws
349
+
350
+ Error if the signal has been disposed.
351
+
352
+ #### Example
353
+
354
+ ```typescript
355
+ const $signal = signal();
356
+
357
+ effect((t) => {
358
+ $signal.watch(t); // Track the signal
359
+ console.log('Signal triggered!');
360
+ });
361
+
362
+ $signal.trigger(); // Logs: "Signal triggered!"
363
+ ```
364
+
365
+ #### Inherited from
366
+
367
+ [`FlowObservable`](/api/classes/FlowObservable.md).[`watch`](/api/classes/FlowObservable.md#watch)