@ersbeth/picoflow 0.2.3 → 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.
- package/.cursor/plans/update-js-e795d61b.plan.md +567 -0
- package/.gitlab-ci.yml +24 -0
- package/.vscode/settings.json +3 -3
- package/CHANGELOG.md +51 -0
- package/IMPLEMENTATION_GUIDE.md +1578 -0
- package/README.md +62 -25
- package/biome.json +32 -32
- package/dist/picoflow.js +557 -1099
- package/dist/types/advanced/array.d.ts +0 -6
- package/dist/types/advanced/array.d.ts.map +1 -1
- package/dist/types/advanced/index.d.ts +5 -5
- package/dist/types/advanced/index.d.ts.map +1 -1
- package/dist/types/advanced/map.d.ts +114 -23
- package/dist/types/advanced/map.d.ts.map +1 -1
- package/dist/types/advanced/resource.d.ts +51 -12
- package/dist/types/advanced/resource.d.ts.map +1 -1
- package/dist/types/advanced/resourceAsync.d.ts +28 -13
- package/dist/types/advanced/resourceAsync.d.ts.map +1 -1
- package/dist/types/advanced/stream.d.ts +74 -16
- package/dist/types/advanced/stream.d.ts.map +1 -1
- package/dist/types/advanced/streamAsync.d.ts +69 -15
- package/dist/types/advanced/streamAsync.d.ts.map +1 -1
- package/dist/types/basic/constant.d.ts +44 -16
- package/dist/types/basic/constant.d.ts.map +1 -1
- package/dist/types/basic/derivation.d.ts +73 -24
- package/dist/types/basic/derivation.d.ts.map +1 -1
- package/dist/types/basic/disposable.d.ts +65 -6
- package/dist/types/basic/disposable.d.ts.map +1 -1
- package/dist/types/basic/effect.d.ts +27 -16
- package/dist/types/basic/effect.d.ts.map +1 -1
- package/dist/types/basic/index.d.ts +7 -8
- package/dist/types/basic/index.d.ts.map +1 -1
- package/dist/types/basic/observable.d.ts +62 -13
- package/dist/types/basic/observable.d.ts.map +1 -1
- package/dist/types/basic/signal.d.ts +35 -6
- package/dist/types/basic/signal.d.ts.map +1 -1
- package/dist/types/basic/state.d.ts +25 -4
- package/dist/types/basic/state.d.ts.map +1 -1
- package/dist/types/basic/trackingContext.d.ts +33 -0
- package/dist/types/basic/trackingContext.d.ts.map +1 -0
- package/dist/types/creators.d.ts +271 -26
- package/dist/types/creators.d.ts.map +1 -1
- package/dist/types/index.d.ts +60 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/solid/converters.d.ts +5 -5
- package/dist/types/solid/converters.d.ts.map +1 -1
- package/dist/types/solid/index.d.ts +2 -2
- package/dist/types/solid/index.d.ts.map +1 -1
- package/dist/types/solid/primitives.d.ts +96 -4
- package/dist/types/solid/primitives.d.ts.map +1 -1
- package/docs/.vitepress/config.mts +110 -0
- package/docs/api/classes/FlowArray.md +489 -0
- package/docs/api/classes/FlowConstant.md +350 -0
- package/docs/api/classes/FlowDerivation.md +334 -0
- package/docs/api/classes/FlowEffect.md +100 -0
- package/docs/api/classes/FlowMap.md +512 -0
- package/docs/api/classes/FlowObservable.md +306 -0
- package/docs/api/classes/FlowResource.md +380 -0
- package/docs/api/classes/FlowResourceAsync.md +362 -0
- package/docs/api/classes/FlowSignal.md +160 -0
- package/docs/api/classes/FlowState.md +368 -0
- package/docs/api/classes/FlowStream.md +367 -0
- package/docs/api/classes/FlowStreamAsync.md +364 -0
- package/docs/api/classes/SolidDerivation.md +75 -0
- package/docs/api/classes/SolidResource.md +91 -0
- package/docs/api/classes/SolidState.md +71 -0
- package/docs/api/classes/TrackingContext.md +33 -0
- package/docs/api/functions/array.md +58 -0
- package/docs/api/functions/constant.md +45 -0
- package/docs/api/functions/derivation.md +53 -0
- package/docs/api/functions/effect.md +49 -0
- package/docs/api/functions/from.md +220 -0
- package/docs/api/functions/isDisposable.md +49 -0
- package/docs/api/functions/map.md +57 -0
- package/docs/api/functions/resource.md +52 -0
- package/docs/api/functions/resourceAsync.md +50 -0
- package/docs/api/functions/signal.md +36 -0
- package/docs/api/functions/state.md +47 -0
- package/docs/api/functions/stream.md +53 -0
- package/docs/api/functions/streamAsync.md +50 -0
- package/docs/api/index.md +118 -0
- package/docs/api/interfaces/FlowDisposable.md +65 -0
- package/docs/api/interfaces/SolidObservable.md +19 -0
- package/docs/api/type-aliases/FlowArrayAction.md +49 -0
- package/docs/api/type-aliases/FlowStreamDisposer.md +15 -0
- package/docs/api/type-aliases/FlowStreamSetter.md +27 -0
- package/docs/api/type-aliases/FlowStreamUpdater.md +32 -0
- package/docs/api/type-aliases/NotPromise.md +18 -0
- package/docs/api/type-aliases/SolidGetter.md +17 -0
- package/docs/api/typedoc-sidebar.json +1 -0
- package/docs/examples/examples.md +2313 -0
- package/docs/examples/patterns.md +649 -0
- package/docs/guide/advanced/disposal.md +426 -0
- package/docs/guide/advanced/solidjs.md +221 -0
- package/docs/guide/advanced/upgrading.md +464 -0
- package/docs/guide/introduction/concepts.md +56 -0
- package/docs/guide/introduction/conventions.md +61 -0
- package/docs/guide/introduction/getting-started.md +134 -0
- package/docs/guide/introduction/lifecycle.md +371 -0
- package/docs/guide/primitives/array.md +400 -0
- package/docs/guide/primitives/constant.md +380 -0
- package/docs/guide/primitives/derivations.md +348 -0
- package/docs/guide/primitives/effects.md +458 -0
- package/docs/guide/primitives/map.md +387 -0
- package/docs/guide/primitives/overview.md +175 -0
- package/docs/guide/primitives/resources.md +858 -0
- package/docs/guide/primitives/signal.md +259 -0
- package/docs/guide/primitives/state.md +368 -0
- package/docs/guide/primitives/streams.md +931 -0
- package/docs/index.md +47 -0
- package/docs/public/logo.svg +1 -0
- package/package.json +57 -41
- package/src/advanced/array.ts +208 -210
- package/src/advanced/index.ts +7 -7
- package/src/advanced/map.ts +178 -68
- package/src/advanced/resource.ts +87 -43
- package/src/advanced/resourceAsync.ts +62 -42
- package/src/advanced/stream.ts +113 -50
- package/src/advanced/streamAsync.ts +120 -61
- package/src/basic/constant.ts +82 -49
- package/src/basic/derivation.ts +128 -84
- package/src/basic/disposable.ts +74 -15
- package/src/basic/effect.ts +85 -77
- package/src/basic/index.ts +7 -8
- package/src/basic/observable.ts +94 -36
- package/src/basic/signal.ts +133 -105
- package/src/basic/state.ts +46 -25
- package/src/basic/trackingContext.ts +45 -0
- package/src/creators.ts +297 -54
- package/src/index.ts +96 -43
- package/src/solid/converters.ts +186 -67
- package/src/solid/index.ts +8 -2
- package/src/solid/primitives.ts +167 -65
- package/test/array.test.ts +592 -612
- package/test/constant.test.ts +31 -33
- package/test/derivation.test.ts +531 -536
- package/test/effect.test.ts +21 -21
- package/test/map.test.ts +233 -137
- package/test/resource.test.ts +119 -121
- package/test/resourceAsync.test.ts +98 -100
- package/test/signal.test.ts +51 -55
- package/test/state.test.ts +186 -168
- package/test/stream.test.ts +189 -189
- package/test/streamAsync.test.ts +186 -186
- package/tsconfig.json +19 -18
- package/typedoc.json +37 -0
- package/vite.config.ts +23 -20
- package/vitest.config.ts +7 -7
- package/api/doc/index.md +0 -31
- package/api/doc/picoflow.array.md +0 -55
- package/api/doc/picoflow.constant.md +0 -55
- package/api/doc/picoflow.derivation.md +0 -55
- package/api/doc/picoflow.effect.md +0 -55
- package/api/doc/picoflow.flowarray._constructor_.md +0 -49
- package/api/doc/picoflow.flowarray._lastaction.md +0 -13
- package/api/doc/picoflow.flowarray.clear.md +0 -17
- package/api/doc/picoflow.flowarray.dispose.md +0 -55
- package/api/doc/picoflow.flowarray.get.md +0 -19
- package/api/doc/picoflow.flowarray.length.md +0 -13
- package/api/doc/picoflow.flowarray.md +0 -273
- package/api/doc/picoflow.flowarray.pop.md +0 -17
- package/api/doc/picoflow.flowarray.push.md +0 -53
- package/api/doc/picoflow.flowarray.set.md +0 -53
- package/api/doc/picoflow.flowarray.setitem.md +0 -69
- package/api/doc/picoflow.flowarray.shift.md +0 -17
- package/api/doc/picoflow.flowarray.splice.md +0 -85
- package/api/doc/picoflow.flowarray.unshift.md +0 -53
- package/api/doc/picoflow.flowarrayaction.md +0 -37
- package/api/doc/picoflow.flowconstant._constructor_.md +0 -49
- package/api/doc/picoflow.flowconstant.get.md +0 -25
- package/api/doc/picoflow.flowconstant.md +0 -88
- package/api/doc/picoflow.flowderivation._constructor_.md +0 -49
- package/api/doc/picoflow.flowderivation.get.md +0 -23
- package/api/doc/picoflow.flowderivation.md +0 -86
- package/api/doc/picoflow.flowdisposable.dispose.md +0 -55
- package/api/doc/picoflow.flowdisposable.md +0 -43
- package/api/doc/picoflow.floweffect._constructor_.md +0 -54
- package/api/doc/picoflow.floweffect.dispose.md +0 -21
- package/api/doc/picoflow.floweffect.disposed.md +0 -13
- package/api/doc/picoflow.floweffect.md +0 -131
- package/api/doc/picoflow.flowgetter.md +0 -15
- package/api/doc/picoflow.flowmap._lastdeleted.md +0 -21
- package/api/doc/picoflow.flowmap._lastset.md +0 -21
- package/api/doc/picoflow.flowmap.delete.md +0 -61
- package/api/doc/picoflow.flowmap.md +0 -133
- package/api/doc/picoflow.flowmap.setat.md +0 -77
- package/api/doc/picoflow.flowobservable.get.md +0 -19
- package/api/doc/picoflow.flowobservable.md +0 -68
- package/api/doc/picoflow.flowobservable.subscribe.md +0 -55
- package/api/doc/picoflow.flowresource._constructor_.md +0 -49
- package/api/doc/picoflow.flowresource.fetch.md +0 -27
- package/api/doc/picoflow.flowresource.get.md +0 -23
- package/api/doc/picoflow.flowresource.md +0 -100
- package/api/doc/picoflow.flowresourceasync._constructor_.md +0 -49
- package/api/doc/picoflow.flowresourceasync.fetch.md +0 -27
- package/api/doc/picoflow.flowresourceasync.get.md +0 -23
- package/api/doc/picoflow.flowresourceasync.md +0 -100
- package/api/doc/picoflow.flowsignal.dispose.md +0 -59
- package/api/doc/picoflow.flowsignal.disposed.md +0 -18
- package/api/doc/picoflow.flowsignal.md +0 -112
- package/api/doc/picoflow.flowsignal.trigger.md +0 -21
- package/api/doc/picoflow.flowstate.md +0 -52
- package/api/doc/picoflow.flowstate.set.md +0 -61
- package/api/doc/picoflow.flowstream._constructor_.md +0 -49
- package/api/doc/picoflow.flowstream.dispose.md +0 -21
- package/api/doc/picoflow.flowstream.get.md +0 -23
- package/api/doc/picoflow.flowstream.md +0 -100
- package/api/doc/picoflow.flowstreamasync._constructor_.md +0 -54
- package/api/doc/picoflow.flowstreamasync.dispose.md +0 -21
- package/api/doc/picoflow.flowstreamasync.get.md +0 -23
- package/api/doc/picoflow.flowstreamasync.md +0 -100
- package/api/doc/picoflow.flowstreamdisposer.md +0 -13
- package/api/doc/picoflow.flowstreamsetter.md +0 -13
- package/api/doc/picoflow.flowstreamupdater.md +0 -19
- package/api/doc/picoflow.flowwatcher.md +0 -15
- package/api/doc/picoflow.from.md +0 -55
- package/api/doc/picoflow.from_1.md +0 -55
- package/api/doc/picoflow.from_2.md +0 -55
- package/api/doc/picoflow.from_3.md +0 -55
- package/api/doc/picoflow.from_4.md +0 -55
- package/api/doc/picoflow.from_5.md +0 -55
- package/api/doc/picoflow.isdisposable.md +0 -55
- package/api/doc/picoflow.map.md +0 -59
- package/api/doc/picoflow.md +0 -544
- package/api/doc/picoflow.resource.md +0 -55
- package/api/doc/picoflow.resourceasync.md +0 -55
- package/api/doc/picoflow.signal.md +0 -19
- package/api/doc/picoflow.solidderivation._constructor_.md +0 -49
- package/api/doc/picoflow.solidderivation.get.md +0 -13
- package/api/doc/picoflow.solidderivation.md +0 -94
- package/api/doc/picoflow.solidgetter.md +0 -13
- package/api/doc/picoflow.solidobservable.get.md +0 -13
- package/api/doc/picoflow.solidobservable.md +0 -57
- package/api/doc/picoflow.solidresource._constructor_.md +0 -49
- package/api/doc/picoflow.solidresource.get.md +0 -13
- package/api/doc/picoflow.solidresource.latest.md +0 -13
- package/api/doc/picoflow.solidresource.md +0 -157
- package/api/doc/picoflow.solidresource.refetch.md +0 -13
- package/api/doc/picoflow.solidresource.state.md +0 -13
- package/api/doc/picoflow.solidstate._constructor_.md +0 -49
- package/api/doc/picoflow.solidstate.get.md +0 -13
- package/api/doc/picoflow.solidstate.md +0 -115
- package/api/doc/picoflow.solidstate.set.md +0 -13
- package/api/doc/picoflow.state.md +0 -55
- package/api/doc/picoflow.stream.md +0 -55
- package/api/doc/picoflow.streamasync.md +0 -55
- package/api/picoflow.public.api.md +0 -244
- package/api-extractor.json +0 -61
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
[@ersbeth/picoflow](/api/index.md) / FlowEffect
|
|
2
|
+
|
|
3
|
+
# Class: FlowEffect
|
|
4
|
+
|
|
5
|
+
Defined in: [basic/effect.ts:31](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L31)
|
|
6
|
+
|
|
7
|
+
Represents a reactive effect that executes side-effect functions based
|
|
8
|
+
on its tracked dependencies.
|
|
9
|
+
|
|
10
|
+
## Remarks
|
|
11
|
+
|
|
12
|
+
FlowEffect executes an apply function that performs side effects. The effect always runs
|
|
13
|
+
with a tracking context, allowing you to explicitly control which observables and signals
|
|
14
|
+
become dependencies using `.get(t)` for tracked reads or `.pick()` for untracked reads.
|
|
15
|
+
|
|
16
|
+
When any tracked dependency changes, the effect automatically re-executes. The effect
|
|
17
|
+
runs immediately upon creation and whenever its dependencies trigger updates.
|
|
18
|
+
|
|
19
|
+
Unlike the old API, effects in the new TrackingContext-based system always execute with
|
|
20
|
+
a tracking context available. You control reactivity by choosing which observables to track
|
|
21
|
+
within the effect body.
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
const fx = effect((t) => {
|
|
27
|
+
const reactive = $stateA.get(t); // Tracked - effect re-runs when $stateA changes
|
|
28
|
+
const snapshot = $stateB.pick(); // Not tracked - changes don't trigger re-runs
|
|
29
|
+
console.log(reactive, snapshot);
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Constructors
|
|
34
|
+
|
|
35
|
+
### Constructor
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
new FlowEffect(apply): FlowEffect;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Defined in: [basic/effect.ts:45](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L45)
|
|
42
|
+
|
|
43
|
+
Creates a new FlowEffect.
|
|
44
|
+
|
|
45
|
+
#### Parameters
|
|
46
|
+
|
|
47
|
+
| Parameter | Type | Description |
|
|
48
|
+
| ------ | ------ | ------ |
|
|
49
|
+
| `apply` | (`t`) => `void` | A side-effect function that receives a tracking context to access and register dependencies on reactive observables and signals. |
|
|
50
|
+
|
|
51
|
+
#### Returns
|
|
52
|
+
|
|
53
|
+
`FlowEffect`
|
|
54
|
+
|
|
55
|
+
#### Remarks
|
|
56
|
+
|
|
57
|
+
The provided function is executed immediately upon construction with a tracking context.
|
|
58
|
+
Use the context parameter to call `.get(t)` on observables you want to track, or `.pick()`
|
|
59
|
+
on observables you want to read without creating dependencies.
|
|
60
|
+
|
|
61
|
+
## Accessors
|
|
62
|
+
|
|
63
|
+
### disposed
|
|
64
|
+
|
|
65
|
+
#### Get Signature
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
get disposed(): boolean;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Defined in: [basic/effect.ts:75](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L75)
|
|
72
|
+
|
|
73
|
+
Indicates whether this effect has been disposed.
|
|
74
|
+
|
|
75
|
+
##### Returns
|
|
76
|
+
|
|
77
|
+
`boolean`
|
|
78
|
+
|
|
79
|
+
A boolean value that is true if the effect is disposed, false otherwise.
|
|
80
|
+
|
|
81
|
+
## Methods
|
|
82
|
+
|
|
83
|
+
### dispose()
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
dispose(): void;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Defined in: [basic/effect.ts:60](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L60)
|
|
90
|
+
|
|
91
|
+
Disposes the effect, unregistering all its tracked dependencies.
|
|
92
|
+
|
|
93
|
+
#### Returns
|
|
94
|
+
|
|
95
|
+
`void`
|
|
96
|
+
|
|
97
|
+
#### Remarks
|
|
98
|
+
|
|
99
|
+
Once disposed, the effect must no longer be used. Trying to dispose an effect
|
|
100
|
+
that is already disposed will throw an error.
|
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
[@ersbeth/picoflow](/api/index.md) / FlowMap
|
|
2
|
+
|
|
3
|
+
# Class: FlowMap\<K, V\>
|
|
4
|
+
|
|
5
|
+
Defined in: [advanced/map.ts:75](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L75)
|
|
6
|
+
|
|
7
|
+
Represents a reactive map that extends [FlowState](/api/classes/FlowState.md) for tracking key-value pairs.
|
|
8
|
+
|
|
9
|
+
## Remarks
|
|
10
|
+
|
|
11
|
+
FlowMap wraps a native JavaScript Map and provides reactive tracking at multiple granularity levels.
|
|
12
|
+
Unlike plain reactive state, FlowMap offers fine-grained reactivity that lets you track:
|
|
13
|
+
|
|
14
|
+
1. **Whole map changes**: Via `get(t)` or `pick()` on the FlowMap itself
|
|
15
|
+
2. **Last add operation**: Via the `$lastAdded` signal, track which key-value pair was most recently added
|
|
16
|
+
3. **Last update operation**: Via the `$lastUpdated` signal, track which key-value pair was most recently updated
|
|
17
|
+
4. **Last delete operation**: Via the `$lastDeleted` signal, track which key-value pair was most recently removed
|
|
18
|
+
|
|
19
|
+
**Reactive Signals:**
|
|
20
|
+
- **$lastAdded**: A FlowState containing `{ key?: K, value?: V }` updated on each `add()` call
|
|
21
|
+
- **$lastUpdated**: A FlowState containing `{ key?: K, value?: V }` updated on each `update()` call
|
|
22
|
+
- **$lastDeleted**: A FlowState containing `{ key?: K, value?: V }` updated on each `delete()` call
|
|
23
|
+
|
|
24
|
+
These signals enable fine-grained reactivity patterns where effects can respond to specific
|
|
25
|
+
map operations without re-processing the entire map.
|
|
26
|
+
|
|
27
|
+
**Use Cases:**
|
|
28
|
+
- Entity stores where you want to track additions/removals separately
|
|
29
|
+
- Cache implementations with granular invalidation
|
|
30
|
+
- Collections where operations on individual keys matter
|
|
31
|
+
- UI state where you want to animate specific additions or removals
|
|
32
|
+
|
|
33
|
+
## Example
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
const $users = map<string, User>();
|
|
37
|
+
|
|
38
|
+
// Track the whole map
|
|
39
|
+
effect((t) => {
|
|
40
|
+
const users = $users.get(t);
|
|
41
|
+
console.log(`Total users: ${users.size}`);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Track only additions
|
|
45
|
+
effect((t) => {
|
|
46
|
+
const { key, value } = $users.$lastAdded.get(t);
|
|
47
|
+
if (key && value) {
|
|
48
|
+
console.log(`User ${key} was added:`, value);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Track only updates
|
|
53
|
+
effect((t) => {
|
|
54
|
+
const { key, value } = $users.$lastUpdated.get(t);
|
|
55
|
+
if (key && value) {
|
|
56
|
+
console.log(`User ${key} was updated:`, value);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Track only deletions
|
|
61
|
+
effect((t) => {
|
|
62
|
+
const { key, value } = $users.$lastDeleted.get(t);
|
|
63
|
+
if (key && value) {
|
|
64
|
+
console.log(`User ${key} was deleted:`, value);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Modify the map
|
|
69
|
+
$users.add('user1', { name: 'John', age: 30 });
|
|
70
|
+
$users.add('user2', { name: 'Jane', age: 25 });
|
|
71
|
+
$users.update('user1', { name: 'John', age: 31 });
|
|
72
|
+
$users.delete('user1');
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Extends
|
|
76
|
+
|
|
77
|
+
- [`FlowState`](/api/classes/FlowState.md)\<`Map`\<`K`, `V`\>\>
|
|
78
|
+
|
|
79
|
+
## Type Parameters
|
|
80
|
+
|
|
81
|
+
| Type Parameter | Description |
|
|
82
|
+
| ------ | ------ |
|
|
83
|
+
| `K` | The type of the map keys. |
|
|
84
|
+
| `V` | The type of the map values. |
|
|
85
|
+
|
|
86
|
+
## Constructors
|
|
87
|
+
|
|
88
|
+
### Constructor
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
new FlowMap<K, V>(value): FlowMap<K, V>;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Defined in: [basic/constant.ts:59](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/constant.ts#L59)
|
|
95
|
+
|
|
96
|
+
Creates a new FlowConstant instance.
|
|
97
|
+
|
|
98
|
+
#### Parameters
|
|
99
|
+
|
|
100
|
+
| Parameter | Type | Description |
|
|
101
|
+
| ------ | ------ | ------ |
|
|
102
|
+
| `value` | `Map`\<`K`, `V`\> \| () => `Map` | Either a direct value of type T or a function returning a value of type T. If a function is provided, it will be invoked lazily on the first value access. If a direct value is provided, it is stored immediately. |
|
|
103
|
+
|
|
104
|
+
#### Returns
|
|
105
|
+
|
|
106
|
+
`FlowMap`\<`K`, `V`\>
|
|
107
|
+
|
|
108
|
+
#### Inherited from
|
|
109
|
+
|
|
110
|
+
[`FlowState`](/api/classes/FlowState.md).[`constructor`](/api/classes/FlowState.md#constructor)
|
|
111
|
+
|
|
112
|
+
## Properties
|
|
113
|
+
|
|
114
|
+
| Property | Modifier | Type | Description | Defined in |
|
|
115
|
+
| ------ | ------ | ------ | ------ | ------ |
|
|
116
|
+
| <a id="lastadded"></a> `$lastAdded` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were added. **Remarks** When a key is added via [FlowMap.add](/api/classes/FlowMap.md#add), this state is updated with the corresponding key and value. | [advanced/map.ts:85](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L85) |
|
|
117
|
+
| <a id="lastdeleted"></a> `$lastDeleted` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were deleted. **Remarks** When a key is deleted via [FlowMap.delete](/api/classes/FlowMap.md#delete), this state is updated with the corresponding key and its last known value. | [advanced/map.ts:107](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L107) |
|
|
118
|
+
| <a id="lastupdated"></a> `$lastUpdated` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were updated. **Remarks** When a key is updated via [FlowMap.update](/api/classes/FlowMap.md#update), this state is updated with the corresponding key and value. | [advanced/map.ts:96](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L96) |
|
|
119
|
+
|
|
120
|
+
## Accessors
|
|
121
|
+
|
|
122
|
+
### disposed
|
|
123
|
+
|
|
124
|
+
#### Get Signature
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
get disposed(): boolean;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
|
|
131
|
+
|
|
132
|
+
Indicates whether the FlowSignal has been disposed.
|
|
133
|
+
|
|
134
|
+
##### Remarks
|
|
135
|
+
|
|
136
|
+
Once disposed, the signal should not be used.
|
|
137
|
+
|
|
138
|
+
##### Returns
|
|
139
|
+
|
|
140
|
+
`boolean`
|
|
141
|
+
|
|
142
|
+
#### Inherited from
|
|
143
|
+
|
|
144
|
+
[`FlowState`](/api/classes/FlowState.md).[`disposed`](/api/classes/FlowState.md#disposed)
|
|
145
|
+
|
|
146
|
+
## Methods
|
|
147
|
+
|
|
148
|
+
### add()
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
add(key, value): void;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Defined in: [advanced/map.ts:123](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L123)
|
|
155
|
+
|
|
156
|
+
Adds a new key-value pair to the map.
|
|
157
|
+
|
|
158
|
+
#### Parameters
|
|
159
|
+
|
|
160
|
+
| Parameter | Type | Description |
|
|
161
|
+
| ------ | ------ | ------ |
|
|
162
|
+
| `key` | `K` | The key to add. |
|
|
163
|
+
| `value` | `V` | The value to associate with the key. |
|
|
164
|
+
|
|
165
|
+
#### Returns
|
|
166
|
+
|
|
167
|
+
`void`
|
|
168
|
+
|
|
169
|
+
#### Throws
|
|
170
|
+
|
|
171
|
+
If the FlowMap instance is disposed.
|
|
172
|
+
|
|
173
|
+
#### Throws
|
|
174
|
+
|
|
175
|
+
If the key already exists in the map.
|
|
176
|
+
|
|
177
|
+
#### Remarks
|
|
178
|
+
|
|
179
|
+
Adds a new entry to the internal map, emits the key-value pair via [FlowMap.$lastAdded](/api/classes/FlowMap.md#lastadded),
|
|
180
|
+
and notifies all subscribers of the change.
|
|
181
|
+
|
|
182
|
+
***
|
|
183
|
+
|
|
184
|
+
### delete()
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
delete(key): void;
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Defined in: [advanced/map.ts:169](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L169)
|
|
191
|
+
|
|
192
|
+
Deletes the value at the specified key from the underlying map.
|
|
193
|
+
|
|
194
|
+
#### Parameters
|
|
195
|
+
|
|
196
|
+
| Parameter | Type | Description |
|
|
197
|
+
| ------ | ------ | ------ |
|
|
198
|
+
| `key` | `K` | The key to delete. |
|
|
199
|
+
|
|
200
|
+
#### Returns
|
|
201
|
+
|
|
202
|
+
`void`
|
|
203
|
+
|
|
204
|
+
#### Throws
|
|
205
|
+
|
|
206
|
+
If the FlowMap instance is disposed.
|
|
207
|
+
|
|
208
|
+
#### Remarks
|
|
209
|
+
|
|
210
|
+
Removes the key from the internal map, emits the deleted key and its value via [FlowMap.$lastDeleted](/api/classes/FlowMap.md#lastdeleted),
|
|
211
|
+
and notifies all subscribers of the change.
|
|
212
|
+
|
|
213
|
+
***
|
|
214
|
+
|
|
215
|
+
### dispose()
|
|
216
|
+
|
|
217
|
+
```ts
|
|
218
|
+
dispose(options?): void;
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Defined in: [advanced/map.ts:183](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L183)
|
|
222
|
+
|
|
223
|
+
Disposes the FlowMap and its values.
|
|
224
|
+
|
|
225
|
+
#### Parameters
|
|
226
|
+
|
|
227
|
+
| Parameter | Type | Description |
|
|
228
|
+
| ------ | ------ | ------ |
|
|
229
|
+
| `options?` | \{ `self`: `boolean`; \} | Disposal options. |
|
|
230
|
+
| `options.self?` | `boolean` | - |
|
|
231
|
+
|
|
232
|
+
#### Returns
|
|
233
|
+
|
|
234
|
+
`void`
|
|
235
|
+
|
|
236
|
+
#### Overrides
|
|
237
|
+
|
|
238
|
+
[`FlowState`](/api/classes/FlowState.md).[`dispose`](/api/classes/FlowState.md#dispose)
|
|
239
|
+
|
|
240
|
+
***
|
|
241
|
+
|
|
242
|
+
### get()
|
|
243
|
+
|
|
244
|
+
```ts
|
|
245
|
+
get(context): Map;
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
|
|
249
|
+
|
|
250
|
+
Gets the current value with optional dependency tracking.
|
|
251
|
+
|
|
252
|
+
#### Parameters
|
|
253
|
+
|
|
254
|
+
| Parameter | Type | Description |
|
|
255
|
+
| ------ | ------ | ------ |
|
|
256
|
+
| `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. |
|
|
257
|
+
|
|
258
|
+
#### Returns
|
|
259
|
+
|
|
260
|
+
`Map`
|
|
261
|
+
|
|
262
|
+
The current value of type T.
|
|
263
|
+
|
|
264
|
+
#### Remarks
|
|
265
|
+
|
|
266
|
+
Use `get(t)` within effects and derivations to create reactive dependencies.
|
|
267
|
+
Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
|
|
268
|
+
|
|
269
|
+
#### Example
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
effect((t) => {
|
|
273
|
+
const tracked = $state.get(t); // Dependency registered
|
|
274
|
+
const untracked = $other.get(null); // No dependency
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
#### Inherited from
|
|
279
|
+
|
|
280
|
+
[`FlowState`](/api/classes/FlowState.md).[`get`](/api/classes/FlowState.md#get)
|
|
281
|
+
|
|
282
|
+
***
|
|
283
|
+
|
|
284
|
+
### pick()
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
pick(): Map;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
|
|
291
|
+
|
|
292
|
+
Gets the current value without any dependency tracking.
|
|
293
|
+
|
|
294
|
+
#### Returns
|
|
295
|
+
|
|
296
|
+
`Map`
|
|
297
|
+
|
|
298
|
+
The current value of type T.
|
|
299
|
+
|
|
300
|
+
#### Remarks
|
|
301
|
+
|
|
302
|
+
This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
|
|
303
|
+
Use `pick()` when you want to read a snapshot of the current value without creating a reactive
|
|
304
|
+
dependency. This is useful for:
|
|
305
|
+
- Reading initial values
|
|
306
|
+
- Accessing configuration that shouldn't trigger updates
|
|
307
|
+
- Mixing tracked and untracked reads in the same effect
|
|
308
|
+
|
|
309
|
+
#### Example
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
// Read a snapshot outside reactive context
|
|
313
|
+
const currentValue = $state.pick();
|
|
314
|
+
|
|
315
|
+
// Mix tracked and untracked reads
|
|
316
|
+
effect((t) => {
|
|
317
|
+
const tracked = $reactive.get(t); // Triggers re-runs
|
|
318
|
+
const snapshot = $config.pick(); // Doesn't trigger re-runs
|
|
319
|
+
processData(tracked, snapshot);
|
|
320
|
+
});
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
#### Inherited from
|
|
324
|
+
|
|
325
|
+
[`FlowState`](/api/classes/FlowState.md).[`pick`](/api/classes/FlowState.md#pick)
|
|
326
|
+
|
|
327
|
+
***
|
|
328
|
+
|
|
329
|
+
### set()
|
|
330
|
+
|
|
331
|
+
```ts
|
|
332
|
+
set(value): void;
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Defined in: [basic/state.ts:46](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/state.ts#L46)
|
|
336
|
+
|
|
337
|
+
Updates the state with a new value.
|
|
338
|
+
|
|
339
|
+
#### Parameters
|
|
340
|
+
|
|
341
|
+
| Parameter | Type | Description |
|
|
342
|
+
| ------ | ------ | ------ |
|
|
343
|
+
| `value` | `Map`\<`K`, `V`\> \| (`current`) => `Map` | A new value or a callback function that computes a new value based on the current state. |
|
|
344
|
+
|
|
345
|
+
#### Returns
|
|
346
|
+
|
|
347
|
+
`void`
|
|
348
|
+
|
|
349
|
+
#### Remarks
|
|
350
|
+
|
|
351
|
+
If the computed new value is strictly equal to the current state value, no change is made and subscribers
|
|
352
|
+
will not be notified. Otherwise, the state is updated and all subscribers are informed of the change.
|
|
353
|
+
|
|
354
|
+
#### Throws
|
|
355
|
+
|
|
356
|
+
Error if the state has been disposed.
|
|
357
|
+
|
|
358
|
+
#### Inherited from
|
|
359
|
+
|
|
360
|
+
[`FlowState`](/api/classes/FlowState.md).[`set`](/api/classes/FlowState.md#set)
|
|
361
|
+
|
|
362
|
+
***
|
|
363
|
+
|
|
364
|
+
### subscribe()
|
|
365
|
+
|
|
366
|
+
```ts
|
|
367
|
+
subscribe(listener): () => void;
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
|
|
371
|
+
|
|
372
|
+
Subscribes a listener function to changes of the observable.
|
|
373
|
+
The listener is executed immediately with the current value and on subsequent updates.
|
|
374
|
+
|
|
375
|
+
#### Parameters
|
|
376
|
+
|
|
377
|
+
| Parameter | Type | Description |
|
|
378
|
+
| ------ | ------ | ------ |
|
|
379
|
+
| `listener` | (`value`) => `void` | A callback function that receives the new value. |
|
|
380
|
+
|
|
381
|
+
#### Returns
|
|
382
|
+
|
|
383
|
+
A disposer function to cancel the subscription.
|
|
384
|
+
|
|
385
|
+
```ts
|
|
386
|
+
(): void;
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
##### Returns
|
|
390
|
+
|
|
391
|
+
`void`
|
|
392
|
+
|
|
393
|
+
#### Inherited from
|
|
394
|
+
|
|
395
|
+
[`FlowState`](/api/classes/FlowState.md).[`subscribe`](/api/classes/FlowState.md#subscribe)
|
|
396
|
+
|
|
397
|
+
***
|
|
398
|
+
|
|
399
|
+
### trigger()
|
|
400
|
+
|
|
401
|
+
```ts
|
|
402
|
+
trigger(): void;
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
|
|
406
|
+
|
|
407
|
+
Triggers the FlowSignal.
|
|
408
|
+
Notifies all registered listeners and schedules execution of associated effects.
|
|
409
|
+
|
|
410
|
+
#### Returns
|
|
411
|
+
|
|
412
|
+
`void`
|
|
413
|
+
|
|
414
|
+
#### Throws
|
|
415
|
+
|
|
416
|
+
If the FlowSignal has already been disposed.
|
|
417
|
+
|
|
418
|
+
#### Inherited from
|
|
419
|
+
|
|
420
|
+
[`FlowState`](/api/classes/FlowState.md).[`trigger`](/api/classes/FlowState.md#trigger)
|
|
421
|
+
|
|
422
|
+
***
|
|
423
|
+
|
|
424
|
+
### update()
|
|
425
|
+
|
|
426
|
+
```ts
|
|
427
|
+
update(key, value): void;
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
Defined in: [advanced/map.ts:147](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L147)
|
|
431
|
+
|
|
432
|
+
Updates an existing key-value pair in the map.
|
|
433
|
+
|
|
434
|
+
#### Parameters
|
|
435
|
+
|
|
436
|
+
| Parameter | Type | Description |
|
|
437
|
+
| ------ | ------ | ------ |
|
|
438
|
+
| `key` | `K` | The key to update. |
|
|
439
|
+
| `value` | `V` | The new value to associate with the key. |
|
|
440
|
+
|
|
441
|
+
#### Returns
|
|
442
|
+
|
|
443
|
+
`void`
|
|
444
|
+
|
|
445
|
+
#### Throws
|
|
446
|
+
|
|
447
|
+
If the FlowMap instance is disposed.
|
|
448
|
+
|
|
449
|
+
#### Throws
|
|
450
|
+
|
|
451
|
+
If the key does not exist in the map.
|
|
452
|
+
|
|
453
|
+
#### Remarks
|
|
454
|
+
|
|
455
|
+
Updates an existing entry in the internal map, emits the key-value pair via [FlowMap.$lastUpdated](/api/classes/FlowMap.md#lastupdated),
|
|
456
|
+
and notifies all subscribers of the change.
|
|
457
|
+
|
|
458
|
+
***
|
|
459
|
+
|
|
460
|
+
### watch()
|
|
461
|
+
|
|
462
|
+
```ts
|
|
463
|
+
watch(context): void;
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
|
|
467
|
+
|
|
468
|
+
Watches the signal, registering it as a dependency in the tracking context.
|
|
469
|
+
|
|
470
|
+
#### Parameters
|
|
471
|
+
|
|
472
|
+
| Parameter | Type | Description |
|
|
473
|
+
| ------ | ------ | ------ |
|
|
474
|
+
| `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
|
|
475
|
+
|
|
476
|
+
#### Returns
|
|
477
|
+
|
|
478
|
+
`void`
|
|
479
|
+
|
|
480
|
+
#### Remarks
|
|
481
|
+
|
|
482
|
+
Use `watch()` when you want to track a signal without reading its value (signals don't
|
|
483
|
+
have values to read). This is useful for triggering effects based on signal events
|
|
484
|
+
without needing associated data.
|
|
485
|
+
|
|
486
|
+
When the signal is triggered via `trigger()`, any effects or derivations that have
|
|
487
|
+
watched this signal will automatically re-execute.
|
|
488
|
+
|
|
489
|
+
This method must be called within an effect or derivation context where a TrackingContext
|
|
490
|
+
is available. For observables (which hold values), use `.get(t)` instead, which both
|
|
491
|
+
reads the value and watches for changes.
|
|
492
|
+
|
|
493
|
+
#### Throws
|
|
494
|
+
|
|
495
|
+
Error if the signal has been disposed.
|
|
496
|
+
|
|
497
|
+
#### Example
|
|
498
|
+
|
|
499
|
+
```typescript
|
|
500
|
+
const $signal = signal();
|
|
501
|
+
|
|
502
|
+
effect((t) => {
|
|
503
|
+
$signal.watch(t); // Track the signal
|
|
504
|
+
console.log('Signal triggered!');
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
$signal.trigger(); // Logs: "Signal triggered!"
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
#### Inherited from
|
|
511
|
+
|
|
512
|
+
[`FlowState`](/api/classes/FlowState.md).[`watch`](/api/classes/FlowState.md#watch)
|