@ersbeth/picoflow 1.0.0 → 1.1.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/unifier-flowresource-avec-flowderivation-c9506e24.plan.md +372 -0
- package/README.md +25 -171
- package/biome.json +4 -1
- package/dist/picoflow.js +1129 -661
- package/dist/types/flow/base/flowDisposable.d.ts +67 -0
- package/dist/types/flow/base/flowDisposable.d.ts.map +1 -0
- package/dist/types/flow/base/flowEffect.d.ts +127 -0
- package/dist/types/flow/base/flowEffect.d.ts.map +1 -0
- package/dist/types/flow/base/flowGraph.d.ts +97 -0
- package/dist/types/flow/base/flowGraph.d.ts.map +1 -0
- package/dist/types/flow/base/flowSignal.d.ts +134 -0
- package/dist/types/flow/base/flowSignal.d.ts.map +1 -0
- package/dist/types/flow/base/flowTracker.d.ts +15 -0
- package/dist/types/flow/base/flowTracker.d.ts.map +1 -0
- package/dist/types/flow/base/index.d.ts +7 -0
- package/dist/types/flow/base/index.d.ts.map +1 -0
- package/dist/types/flow/base/utils.d.ts +20 -0
- package/dist/types/flow/base/utils.d.ts.map +1 -0
- package/dist/types/{advanced/array.d.ts → flow/collections/flowArray.d.ts} +50 -12
- package/dist/types/flow/collections/flowArray.d.ts.map +1 -0
- package/dist/types/flow/collections/flowMap.d.ts +224 -0
- package/dist/types/flow/collections/flowMap.d.ts.map +1 -0
- package/dist/types/flow/collections/index.d.ts +3 -0
- package/dist/types/flow/collections/index.d.ts.map +1 -0
- package/dist/types/flow/index.d.ts +4 -0
- package/dist/types/flow/index.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/flowConstantAsync.d.ts +137 -0
- package/dist/types/flow/nodes/async/flowConstantAsync.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts +137 -0
- package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/flowNodeAsync.d.ts +343 -0
- package/dist/types/flow/nodes/async/flowNodeAsync.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts +81 -0
- package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/flowStateAsync.d.ts +111 -0
- package/dist/types/flow/nodes/async/flowStateAsync.d.ts.map +1 -0
- package/dist/types/flow/nodes/async/index.d.ts +6 -0
- package/dist/types/flow/nodes/async/index.d.ts.map +1 -0
- package/dist/types/flow/nodes/index.d.ts +3 -0
- package/dist/types/flow/nodes/index.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/flowConstant.d.ts +108 -0
- package/dist/types/flow/nodes/sync/flowConstant.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/flowDerivation.d.ts +100 -0
- package/dist/types/flow/nodes/sync/flowDerivation.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/flowNode.d.ts +314 -0
- package/dist/types/flow/nodes/sync/flowNode.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/flowReadonly.d.ts +57 -0
- package/dist/types/flow/nodes/sync/flowReadonly.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/flowState.d.ts +96 -0
- package/dist/types/flow/nodes/sync/flowState.d.ts.map +1 -0
- package/dist/types/flow/nodes/sync/index.d.ts +6 -0
- package/dist/types/flow/nodes/sync/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/solid/converters.d.ts +34 -44
- package/dist/types/solid/converters.d.ts.map +1 -1
- package/dist/types/solid/primitives.d.ts +1 -0
- package/dist/types/solid/primitives.d.ts.map +1 -1
- package/docs/.vitepress/config.mts +1 -1
- package/docs/api/typedoc-sidebar.json +81 -1
- package/package.json +60 -58
- package/src/flow/base/flowDisposable.ts +71 -0
- package/src/flow/base/flowEffect.ts +171 -0
- package/src/flow/base/flowGraph.ts +288 -0
- package/src/flow/base/flowSignal.ts +207 -0
- package/src/flow/base/flowTracker.ts +17 -0
- package/src/flow/base/index.ts +6 -0
- package/src/flow/base/utils.ts +19 -0
- package/src/flow/collections/flowArray.ts +409 -0
- package/src/flow/collections/flowMap.ts +398 -0
- package/src/flow/collections/index.ts +2 -0
- package/src/flow/index.ts +3 -0
- package/src/flow/nodes/async/flowConstantAsync.ts +142 -0
- package/src/flow/nodes/async/flowDerivationAsync.ts +143 -0
- package/src/flow/nodes/async/flowNodeAsync.ts +474 -0
- package/src/flow/nodes/async/flowReadonlyAsync.ts +81 -0
- package/src/flow/nodes/async/flowStateAsync.ts +116 -0
- package/src/flow/nodes/async/index.ts +5 -0
- package/src/flow/nodes/await/advanced/index.ts +5 -0
- package/src/{advanced → flow/nodes/await/advanced}/resource.ts +37 -3
- package/src/{advanced → flow/nodes/await/advanced}/resourceAsync.ts +35 -3
- package/src/{advanced → flow/nodes/await/advanced}/stream.ts +40 -2
- package/src/{advanced → flow/nodes/await/advanced}/streamAsync.ts +38 -3
- package/src/flow/nodes/await/flowConstantAwait.ts +154 -0
- package/src/flow/nodes/await/flowDerivationAwait.ts +154 -0
- package/src/flow/nodes/await/flowNodeAwait.ts +508 -0
- package/src/flow/nodes/await/flowReadonlyAwait.ts +89 -0
- package/src/flow/nodes/await/flowStateAwait.ts +130 -0
- package/src/flow/nodes/await/index.ts +5 -0
- package/src/flow/nodes/index.ts +3 -0
- package/src/flow/nodes/sync/flowConstant.ts +111 -0
- package/src/flow/nodes/sync/flowDerivation.ts +105 -0
- package/src/flow/nodes/sync/flowNode.ts +439 -0
- package/src/flow/nodes/sync/flowReadonly.ts +57 -0
- package/src/flow/nodes/sync/flowState.ts +101 -0
- package/src/flow/nodes/sync/index.ts +5 -0
- package/src/index.ts +1 -47
- package/src/solid/converters.ts +59 -198
- package/src/solid/primitives.ts +4 -0
- package/test/base/flowEffect.test.ts +108 -0
- package/test/base/flowGraph.test.ts +485 -0
- package/test/base/flowSignal.test.ts +372 -0
- package/test/collections/flowArray.asyncStates.test.ts +1553 -0
- package/test/collections/flowArray.scalars.test.ts +1129 -0
- package/test/collections/flowArray.states.test.ts +1365 -0
- package/test/collections/flowMap.asyncStates.test.ts +1105 -0
- package/test/collections/flowMap.scalars.test.ts +877 -0
- package/test/collections/flowMap.states.test.ts +1097 -0
- package/test/nodes/async/flowConstantAsync.test.ts +860 -0
- package/test/nodes/async/flowDerivationAsync.test.ts +1517 -0
- package/test/nodes/async/flowStateAsync.test.ts +1387 -0
- package/test/{resource.test.ts → nodes/await/advanced/resource.test.ts} +21 -19
- package/test/{resourceAsync.test.ts → nodes/await/advanced/resourceAsync.test.ts} +3 -1
- package/test/{stream.test.ts → nodes/await/advanced/stream.test.ts} +30 -28
- package/test/{streamAsync.test.ts → nodes/await/advanced/streamAsync.test.ts} +16 -14
- package/test/nodes/await/flowConstantAwait.test.ts +643 -0
- package/test/nodes/await/flowDerivationAwait.test.ts +1583 -0
- package/test/nodes/await/flowStateAwait.test.ts +999 -0
- package/test/nodes/mixed/derivation.test.ts +1527 -0
- package/test/nodes/sync/flowConstant.test.ts +620 -0
- package/test/nodes/sync/flowDerivation.test.ts +1373 -0
- package/test/nodes/sync/flowState.test.ts +945 -0
- package/test/solid/converters.test.ts +721 -0
- package/test/solid/primitives.test.ts +1031 -0
- package/tsconfig.json +2 -1
- package/vitest.config.ts +7 -1
- package/IMPLEMENTATION_GUIDE.md +0 -1578
- package/dist/types/advanced/array.d.ts.map +0 -1
- package/dist/types/advanced/index.d.ts +0 -9
- package/dist/types/advanced/index.d.ts.map +0 -1
- package/dist/types/advanced/map.d.ts +0 -166
- package/dist/types/advanced/map.d.ts.map +0 -1
- package/dist/types/advanced/resource.d.ts +0 -78
- package/dist/types/advanced/resource.d.ts.map +0 -1
- package/dist/types/advanced/resourceAsync.d.ts +0 -56
- package/dist/types/advanced/resourceAsync.d.ts.map +0 -1
- package/dist/types/advanced/stream.d.ts +0 -117
- package/dist/types/advanced/stream.d.ts.map +0 -1
- package/dist/types/advanced/streamAsync.d.ts +0 -97
- package/dist/types/advanced/streamAsync.d.ts.map +0 -1
- package/dist/types/basic/constant.d.ts +0 -60
- package/dist/types/basic/constant.d.ts.map +0 -1
- package/dist/types/basic/derivation.d.ts +0 -89
- package/dist/types/basic/derivation.d.ts.map +0 -1
- package/dist/types/basic/disposable.d.ts +0 -82
- package/dist/types/basic/disposable.d.ts.map +0 -1
- package/dist/types/basic/effect.d.ts +0 -67
- package/dist/types/basic/effect.d.ts.map +0 -1
- package/dist/types/basic/index.d.ts +0 -10
- package/dist/types/basic/index.d.ts.map +0 -1
- package/dist/types/basic/observable.d.ts +0 -83
- package/dist/types/basic/observable.d.ts.map +0 -1
- package/dist/types/basic/signal.d.ts +0 -69
- package/dist/types/basic/signal.d.ts.map +0 -1
- package/dist/types/basic/state.d.ts +0 -47
- package/dist/types/basic/state.d.ts.map +0 -1
- package/dist/types/basic/trackingContext.d.ts +0 -33
- package/dist/types/basic/trackingContext.d.ts.map +0 -1
- package/dist/types/creators.d.ts +0 -340
- package/dist/types/creators.d.ts.map +0 -1
- package/src/advanced/array.ts +0 -222
- package/src/advanced/index.ts +0 -12
- package/src/advanced/map.ts +0 -193
- package/src/basic/constant.ts +0 -97
- package/src/basic/derivation.ts +0 -147
- package/src/basic/disposable.ts +0 -86
- package/src/basic/effect.ts +0 -104
- package/src/basic/index.ts +0 -9
- package/src/basic/observable.ts +0 -109
- package/src/basic/signal.ts +0 -145
- package/src/basic/state.ts +0 -60
- package/src/basic/trackingContext.ts +0 -45
- package/src/creators.ts +0 -395
- package/test/array.test.ts +0 -600
- package/test/constant.test.ts +0 -44
- package/test/derivation.test.ts +0 -539
- package/test/effect.test.ts +0 -29
- package/test/map.test.ts +0 -240
- package/test/signal.test.ts +0 -72
- package/test/state.test.ts +0 -212
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { FlowTracker, NotPromise } from '../../base';
|
|
2
|
+
import { FlowNode } from './flowNode';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a reactive derivation whose value is computed based on other reactive signals.
|
|
5
|
+
*
|
|
6
|
+
* @typeParam T - The type of the computed value.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* `FlowDerivation` is a type alias based on {@link FlowNode} with the `set()` method removed,
|
|
10
|
+
* making it immutable. It provides all the reactive capabilities of `FlowNode` (dependency tracking,
|
|
11
|
+
* lazy computation, caching) but prevents value mutation after initialization.
|
|
12
|
+
*
|
|
13
|
+
* Unlike {@link FlowConstant}, which computes its value once and never changes, derivations
|
|
14
|
+
* automatically recompute when any tracked dependency changes. This makes them ideal for
|
|
15
|
+
* creating derived state that stays in sync with its sources.
|
|
16
|
+
*
|
|
17
|
+
* **Lazy Computation:**
|
|
18
|
+
* The compute function doesn't run immediately upon creation. It executes only when:
|
|
19
|
+
* - The value is first read via `get()` or `pick()`
|
|
20
|
+
* - The derivation is watched via `watch()`
|
|
21
|
+
*
|
|
22
|
+
* **Automatic Recomputation:**
|
|
23
|
+
* When a tracked dependency changes, the derivation is marked as "dirty" but doesn't recompute
|
|
24
|
+
* immediately. Recomputation happens lazily on the next value access. This prevents unnecessary
|
|
25
|
+
* computations when multiple dependencies change in quick succession. You can also force
|
|
26
|
+
* recomputation using the `refresh()` method.
|
|
27
|
+
*
|
|
28
|
+
* **Dynamic Dependencies:**
|
|
29
|
+
* Dependencies are tracked dynamically during each computation. If the compute function
|
|
30
|
+
* conditionally tracks different observables, the dependency graph updates automatically.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const $firstName = state('John');
|
|
35
|
+
* const $lastName = state('Doe');
|
|
36
|
+
*
|
|
37
|
+
* const $fullName = derivation((t) => {
|
|
38
|
+
* return `${$firstName.get(t)} ${$lastName.get(t)}`;
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // Compute function hasn't run yet (lazy)
|
|
42
|
+
* const name = await $fullName.pick(); // Now it computes: "John Doe"
|
|
43
|
+
*
|
|
44
|
+
* // When dependencies change, derivation recomputes automatically
|
|
45
|
+
* await $firstName.set('Jane');
|
|
46
|
+
* const newName = await $fullName.pick(); // "Jane Doe" (recomputed)
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
export type FlowDerivation<T> = Omit<FlowNode<T>, "set">;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new reactive derivation whose value is computed based on other reactive signals.
|
|
54
|
+
*
|
|
55
|
+
* @typeParam T - The type of the derived value.
|
|
56
|
+
*
|
|
57
|
+
* @param fn - A function that computes the derived value using a tracking context. The function
|
|
58
|
+
* receives a tracking context (`t`) that should be used to access dependencies via `.get(t)`.
|
|
59
|
+
* The function is not executed immediately; it runs lazily on first access.
|
|
60
|
+
*
|
|
61
|
+
* @returns A new instance of {@link FlowDerivation} that provides reactive access to the computed value.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* A derivation is a computed reactive value that automatically tracks its dependencies and
|
|
65
|
+
* recomputes when they change. The computation is lazy - it runs only when the value is
|
|
66
|
+
* accessed, not on construction. Use derivations to create derived state without manual
|
|
67
|
+
* dependency management.
|
|
68
|
+
*
|
|
69
|
+
* **Lazy Computation:**
|
|
70
|
+
* The compute function is not executed immediately upon creation. It runs only when:
|
|
71
|
+
* - The value is first read via `get(t)` or `pick()`
|
|
72
|
+
* - The derivation is watched via `watch()`
|
|
73
|
+
*
|
|
74
|
+
* **When to Use Derivations:**
|
|
75
|
+
* - Use `derivation()` for values that should recompute when dependencies change
|
|
76
|
+
* - Use `constant()` for values that compute once and never change
|
|
77
|
+
* - Use `state()` for mutable values that can be updated directly
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const $firstName = state('John');
|
|
82
|
+
* const $lastName = state('Doe');
|
|
83
|
+
*
|
|
84
|
+
* const $fullName = derivation((t) => {
|
|
85
|
+
* return `${$firstName.get(t)} ${$lastName.get(t)}`;
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* // Use in reactive context
|
|
89
|
+
* effect((t) => {
|
|
90
|
+
* console.log($fullName.get(t)); // Logs: "John Doe"
|
|
91
|
+
* });
|
|
92
|
+
*
|
|
93
|
+
* // When dependencies change, derivation recomputes automatically
|
|
94
|
+
* await $firstName.set('Jane'); // Logs: "Jane Doe"
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* @public
|
|
98
|
+
*/
|
|
99
|
+
export declare function derivation<T>(fn: (t: FlowTracker) => NotPromise<T>): FlowDerivation<T>;
|
|
100
|
+
//# sourceMappingURL=flowDerivation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowDerivation.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC3B,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,GACnC,cAAc,CAAC,CAAC,CAAC,CAEnB"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { FlowSignal, FlowTracker, NotPromise } from '../../base';
|
|
2
|
+
/**
|
|
3
|
+
* A versatile reactive node that can operate as mutable state or computed derivation.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T - The type of the value held by this node.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* FlowNode is a flexible reactive primitive that adapts its behavior based on how it's initialized.
|
|
9
|
+
* It extends {@link FlowSignal} and provides reactive value access with automatic dependency tracking.
|
|
10
|
+
*
|
|
11
|
+
* **Operating Modes:**
|
|
12
|
+
*
|
|
13
|
+
* - **Mutable State Mode**: When constructed with a constant value, FlowNode acts as a mutable
|
|
14
|
+
* reactive state. You can update its value using `set()`, and all dependents are automatically
|
|
15
|
+
* notified when the value changes.
|
|
16
|
+
*
|
|
17
|
+
* - **Computed Derivation Mode**: When constructed with a compute function, FlowNode acts as a
|
|
18
|
+
* computed value that automatically tracks its dependencies. The compute function runs lazily
|
|
19
|
+
* (only when the value is first accessed) and recomputes when any tracked dependency changes.
|
|
20
|
+
* The computed value can be temporarily overridden using `set()`, but the override is cleared
|
|
21
|
+
* on the next recomputation (triggered by dependency changes or `refresh()`).
|
|
22
|
+
*
|
|
23
|
+
* **Lazy Computation:**
|
|
24
|
+
* When using a compute function, the computation doesn't run immediately upon construction. It
|
|
25
|
+
* executes only when:
|
|
26
|
+
* - The value is first read via `get()` or `pick()`
|
|
27
|
+
* - The node is watched via `watch()`
|
|
28
|
+
*
|
|
29
|
+
* **Dirty Tracking:**
|
|
30
|
+
* When a tracked dependency changes, the node is marked as "dirty" but doesn't recompute
|
|
31
|
+
* immediately. Recomputation happens lazily on the next value access, preventing unnecessary
|
|
32
|
+
* computations when multiple dependencies change in quick succession.
|
|
33
|
+
*
|
|
34
|
+
* **Dynamic Dependencies:**
|
|
35
|
+
* Dependencies are tracked dynamically during each computation. If the compute function
|
|
36
|
+
* conditionally tracks different observables, the dependency graph updates automatically.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // Mutable state mode
|
|
41
|
+
* const $count = new FlowNode(0);
|
|
42
|
+
* $count.set(1); // Updates the value
|
|
43
|
+
*
|
|
44
|
+
* // Computed derivation mode
|
|
45
|
+
* const $firstName = new FlowNode('John');
|
|
46
|
+
* const $lastName = new FlowNode('Doe');
|
|
47
|
+
* const $fullName = new FlowNode((t) => {
|
|
48
|
+
* return `${$firstName.get(t)} ${$lastName.get(t)}`;
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Compute function hasn't run yet (lazy)
|
|
52
|
+
* const name = await $fullName.pick(); // Now it computes: "John Doe"
|
|
53
|
+
*
|
|
54
|
+
* // Temporarily override computed value
|
|
55
|
+
* $fullName.set('Override');
|
|
56
|
+
* console.log(await $fullName.pick()); // "Override"
|
|
57
|
+
*
|
|
58
|
+
* // Trigger recomputation (clears override)
|
|
59
|
+
* $firstName.set('Jane');
|
|
60
|
+
* console.log(await $fullName.pick()); // "Jane Doe" (override cleared)
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export declare class FlowNode<T extends NotPromise<unknown>> extends FlowSignal {
|
|
66
|
+
protected _value?: T;
|
|
67
|
+
private _dirty;
|
|
68
|
+
private _compute?;
|
|
69
|
+
/**
|
|
70
|
+
* Creates a new FlowNode.
|
|
71
|
+
*
|
|
72
|
+
* @param compute - Either a constant value or a compute function that derives the value.
|
|
73
|
+
*
|
|
74
|
+
* @remarks
|
|
75
|
+
* The constructor accepts two different initialization modes:
|
|
76
|
+
*
|
|
77
|
+
* - **Constant value**: Creates a mutable reactive node that can be updated via `set()`.
|
|
78
|
+
* The value is stored immediately and can be changed at any time.
|
|
79
|
+
*
|
|
80
|
+
* - **Compute function**: Creates a computed reactive node that automatically tracks dependencies
|
|
81
|
+
* and recomputes when they change. The compute function receives a tracking context (`t`)
|
|
82
|
+
* that should be used to access dependencies via `.get(t)`. The function is not executed
|
|
83
|
+
* immediately; it runs lazily on first access. The computed value can be temporarily
|
|
84
|
+
* overridden using `set()`, but the override is cleared on the next recomputation
|
|
85
|
+
* (triggered by dependency changes or `refresh()`).
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Mutable state with constant value
|
|
90
|
+
* const $count = new FlowNode(0);
|
|
91
|
+
* $count.set(5);
|
|
92
|
+
*
|
|
93
|
+
* // Computed derivation with function
|
|
94
|
+
* const $a = new FlowNode(10);
|
|
95
|
+
* const $b = new FlowNode(20);
|
|
96
|
+
* const $sum = new FlowNode((t) => $a.get(t) + $b.get(t));
|
|
97
|
+
*
|
|
98
|
+
* // Lazy evaluation - compute function hasn't run yet
|
|
99
|
+
* console.log(await $sum.pick()); // Now it computes: 30
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
constructor(compute: NotPromise<T> | ((t: FlowTracker) => NotPromise<T>));
|
|
105
|
+
watch(tracker: FlowTracker): void;
|
|
106
|
+
/**
|
|
107
|
+
* Gets the current value with dependency tracking.
|
|
108
|
+
*
|
|
109
|
+
* @param tracker - The tracking context for reactive tracking. This observable is registered
|
|
110
|
+
* as a dependency when accessed through this method.
|
|
111
|
+
*
|
|
112
|
+
* @returns The current value of type T.
|
|
113
|
+
*
|
|
114
|
+
* @remarks
|
|
115
|
+
* Use `get(t)` within effects and derivations to create reactive dependencies. The tracker
|
|
116
|
+
* parameter must be provided from the reactive context (typically the `t` parameter in effect
|
|
117
|
+
* or derivation callbacks).
|
|
118
|
+
*
|
|
119
|
+
* To read a value without creating a dependency, use `pick()` instead.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* effect((t) => {
|
|
124
|
+
* const tracked = $state.get(t); // Dependency registered
|
|
125
|
+
* const untracked = await $other.pick(); // No dependency
|
|
126
|
+
* });
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @throws Error if the node has been disposed.
|
|
130
|
+
*
|
|
131
|
+
* @public
|
|
132
|
+
*/
|
|
133
|
+
get(tracker: FlowTracker | null): T;
|
|
134
|
+
/**
|
|
135
|
+
* Updates the node with a new value.
|
|
136
|
+
*
|
|
137
|
+
* @param value - A new value or a callback function that computes a new value based on the current value.
|
|
138
|
+
*
|
|
139
|
+
* @returns A promise that resolves after the update is processed and all dependent effects have been notified.
|
|
140
|
+
*
|
|
141
|
+
* @remarks
|
|
142
|
+
* This method can be used in two ways:
|
|
143
|
+
*
|
|
144
|
+
* **For mutable state nodes** (constructed with a constant value):
|
|
145
|
+
* - Updates the stored value directly
|
|
146
|
+
* - All dependents are notified of the change
|
|
147
|
+
*
|
|
148
|
+
* **For computed nodes** (constructed with a compute function):
|
|
149
|
+
* - Temporarily overrides the computed value
|
|
150
|
+
* - The override persists until the next recomputation, which occurs when:
|
|
151
|
+
* - A tracked dependency changes, or
|
|
152
|
+
* - `refresh()` is called
|
|
153
|
+
* - This allows temporarily overriding computed values for testing or manual control
|
|
154
|
+
*
|
|
155
|
+
* **Value Comparison:**
|
|
156
|
+
* If the new value is strictly equal (`===`) to the current value, no update occurs
|
|
157
|
+
* and subscribers are not notified. This prevents unnecessary re-renders and effect
|
|
158
|
+
* executions.
|
|
159
|
+
*
|
|
160
|
+
* **Asynchronous Processing:**
|
|
161
|
+
* The update is processed asynchronously through the reactive graph, ensuring proper
|
|
162
|
+
* ordering of updates and effect execution.
|
|
163
|
+
*
|
|
164
|
+
* @throws Error if the node has been disposed.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* // Mutable state usage
|
|
169
|
+
* const $count = new FlowNode(0);
|
|
170
|
+
* await $count.set(5);
|
|
171
|
+
* await $count.set(current => current + 1); // 6
|
|
172
|
+
*
|
|
173
|
+
* // Temporary override of computed value
|
|
174
|
+
* const $source = new FlowNode(10);
|
|
175
|
+
* const $doubled = new FlowNode((t) => $source.get(t) * 2);
|
|
176
|
+
*
|
|
177
|
+
* console.log(await $doubled.pick()); // 20
|
|
178
|
+
*
|
|
179
|
+
* // Temporarily override
|
|
180
|
+
* await $doubled.set(50);
|
|
181
|
+
* console.log(await $doubled.pick()); // 50 (override active)
|
|
182
|
+
*
|
|
183
|
+
* // Dependency change clears override
|
|
184
|
+
* await $source.set(15);
|
|
185
|
+
* console.log(await $doubled.pick()); // 30 (recomputed, override cleared)
|
|
186
|
+
* ```
|
|
187
|
+
*
|
|
188
|
+
* @public
|
|
189
|
+
*/
|
|
190
|
+
set(value: NotPromise<T> | ((current: T) => NotPromise<T>)): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Forces recomputation of the value, even if it's not marked as dirty.
|
|
193
|
+
*
|
|
194
|
+
* @returns A promise that resolves after the recomputation is complete and all
|
|
195
|
+
* dependent effects have been notified.
|
|
196
|
+
*
|
|
197
|
+
* @remarks
|
|
198
|
+
* This method is useful when you need to force a recomputation of a computed value,
|
|
199
|
+
* for example when the computation depends on external data that has changed outside
|
|
200
|
+
* the reactive system.
|
|
201
|
+
*
|
|
202
|
+
* **Behavior:**
|
|
203
|
+
* - For nodes with a compute function: Forces the compute function to run again,
|
|
204
|
+
* even if no dependencies have changed. This effectively clears any temporary
|
|
205
|
+
* override that was set using `set()`.
|
|
206
|
+
* - For nodes without a compute function (mutable state): Recomputes the current
|
|
207
|
+
* value (which is just the stored value), useful for consistency but typically
|
|
208
|
+
* not necessary.
|
|
209
|
+
*
|
|
210
|
+
* The recomputation happens asynchronously through the reactive graph, ensuring
|
|
211
|
+
* proper ordering of updates and effect execution.
|
|
212
|
+
*
|
|
213
|
+
* @throws Error if the node has been disposed.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* const $externalData = new FlowNode(() => fetchExternalData());
|
|
218
|
+
*
|
|
219
|
+
* // Some external event occurs that changes the data source
|
|
220
|
+
* externalDataChanged();
|
|
221
|
+
*
|
|
222
|
+
* // Force recomputation to get the new value
|
|
223
|
+
* await $externalData.refresh();
|
|
224
|
+
*
|
|
225
|
+
* // For computed nodes with temporary overrides
|
|
226
|
+
* const $computed = new FlowNode((t) => $source.get(t) * 2);
|
|
227
|
+
* $computed.set(100); // Temporary override
|
|
228
|
+
* await $computed.refresh(); // Clears override, recomputes from source
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
233
|
+
refresh(): Promise<void>;
|
|
234
|
+
/**
|
|
235
|
+
* Gets the current value without any dependency tracking.
|
|
236
|
+
*
|
|
237
|
+
* @returns A promise that resolves with the current value of type T.
|
|
238
|
+
*
|
|
239
|
+
* @remarks
|
|
240
|
+
* This method reads the value asynchronously through the reactive graph, ensuring proper ordering of
|
|
241
|
+
* read operations. Unlike `get(t)`, this method does not create a reactive dependency.
|
|
242
|
+
*
|
|
243
|
+
* Use `pick()` when you want to read a snapshot of the current value without creating a reactive
|
|
244
|
+
* dependency. This is useful for:
|
|
245
|
+
* - Reading initial values outside reactive contexts
|
|
246
|
+
* - Accessing configuration that shouldn't trigger updates
|
|
247
|
+
* - Mixing tracked and untracked reads in the same effect
|
|
248
|
+
*
|
|
249
|
+
* **Note:** This is an async method. Always use `await` when calling it.
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* // Read a snapshot outside reactive context
|
|
254
|
+
* const currentValue = await $state.pick();
|
|
255
|
+
*
|
|
256
|
+
* // Mix tracked and untracked reads
|
|
257
|
+
* effect(async (t) => {
|
|
258
|
+
* const tracked = $reactive.get(t); // Triggers re-runs
|
|
259
|
+
* const snapshot = await $config.pick(); // Doesn't trigger re-runs
|
|
260
|
+
* processData(tracked, snapshot);
|
|
261
|
+
* });
|
|
262
|
+
* ```
|
|
263
|
+
*
|
|
264
|
+
* @throws Error if the node has been disposed.
|
|
265
|
+
*
|
|
266
|
+
* @public
|
|
267
|
+
*/
|
|
268
|
+
pick(): Promise<T>;
|
|
269
|
+
/**
|
|
270
|
+
* Subscribes a listener function to changes of this node.
|
|
271
|
+
*
|
|
272
|
+
* @param listener - A callback function that receives the new value whenever it changes.
|
|
273
|
+
*
|
|
274
|
+
* @returns A disposer function that cancels the subscription when called.
|
|
275
|
+
*
|
|
276
|
+
* @remarks
|
|
277
|
+
* This method creates a reactive subscription that automatically tracks this node as a dependency.
|
|
278
|
+
* The listener is executed:
|
|
279
|
+
* - Immediately with the current value when the subscription is created
|
|
280
|
+
* - Automatically whenever the value changes
|
|
281
|
+
*
|
|
282
|
+
* The subscription uses a {@link FlowEffect} internally to manage the reactive tracking and
|
|
283
|
+
* automatic re-execution. When the value changes, the listener is called with the new value
|
|
284
|
+
* after the update is processed through the reactive graph.
|
|
285
|
+
*
|
|
286
|
+
* **Cleanup:**
|
|
287
|
+
* Always call the returned disposer function when you no longer need the subscription to
|
|
288
|
+
* prevent memory leaks and unnecessary computations.
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const $count = new FlowNode(0);
|
|
293
|
+
*
|
|
294
|
+
* // Subscribe to changes
|
|
295
|
+
* const unsubscribe = $count.subscribe((value) => {
|
|
296
|
+
* console.log(`Count is now: ${value}`);
|
|
297
|
+
* });
|
|
298
|
+
* // Logs immediately: "Count is now: 0"
|
|
299
|
+
*
|
|
300
|
+
* await $count.set(5);
|
|
301
|
+
* // Logs: "Count is now: 5"
|
|
302
|
+
*
|
|
303
|
+
* // Clean up when done
|
|
304
|
+
* unsubscribe();
|
|
305
|
+
* ```
|
|
306
|
+
*
|
|
307
|
+
* @throws Error if the node has been disposed.
|
|
308
|
+
*
|
|
309
|
+
* @public
|
|
310
|
+
*/
|
|
311
|
+
subscribe(listener: (value: T) => void): () => void;
|
|
312
|
+
private _computeValue;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=flowNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,CAAE,SAAQ,UAAU;IACtE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAwB;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;gBACS,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;IAU/D,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAM1C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,CAAC;IAOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuDG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAMxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAkBnD,OAAO,CAAC,aAAa;CA0BrB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { FlowNode } from './flowNode';
|
|
2
|
+
/**
|
|
3
|
+
* A generic utility type for creating read-only views of reactive nodes.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T - The type of the value held by the reactive node.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* `FlowReadonly` is a type alias based on {@link FlowNode} with the `set()` method removed,
|
|
9
|
+
* making it a read-only view. It provides all the reactive capabilities of `FlowNode`
|
|
10
|
+
* (dependency tracking, lazy computation, caching, reading values) but prevents mutation.
|
|
11
|
+
*
|
|
12
|
+
* **Difference from FlowConstant and FlowDerivation:**
|
|
13
|
+
* - {@link FlowConstant}: Specialized type for immutable constants that compute once and never change
|
|
14
|
+
* - {@link FlowDerivation}: Specialized type for computed values that automatically recompute when dependencies change
|
|
15
|
+
* - `FlowReadonly`: Generic utility type that can be used with any `FlowNode` to create a read-only view
|
|
16
|
+
*
|
|
17
|
+
* **Use Cases:**
|
|
18
|
+
* - **Type Safety**: Ensure functions don't accidentally mutate state by accepting `FlowReadonly` instead of `FlowState`
|
|
19
|
+
* - **API Design**: Expose read-only views of internal state to prevent external mutation
|
|
20
|
+
* - **Function Parameters**: Accept any reactive node (state, derivation, constant) but prevent mutation
|
|
21
|
+
* - **Composition**: Create read-only wrappers around mutable states for safer sharing
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Type safety: Function that only reads state
|
|
26
|
+
* function displayCount(count: FlowReadonly<number>) {
|
|
27
|
+
* // count.set(100); // TypeScript error: Property 'set' does not exist
|
|
28
|
+
* effect((t) => {
|
|
29
|
+
* console.log(count.get(t)); // OK: Reading is allowed
|
|
30
|
+
* });
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* const $count = state(0);
|
|
34
|
+
* displayCount($count); // OK: FlowState is assignable to FlowReadonly
|
|
35
|
+
*
|
|
36
|
+
* // API design: Expose read-only view
|
|
37
|
+
* class Counter {
|
|
38
|
+
* private _count = state(0);
|
|
39
|
+
*
|
|
40
|
+
* get count(): FlowReadonly<number> {
|
|
41
|
+
* return this._count; // FlowState is assignable to FlowReadonly
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* increment() {
|
|
45
|
+
* this._count.set(n => n + 1); // Internal mutation allowed
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
*
|
|
49
|
+
* const counter = new Counter();
|
|
50
|
+
* // counter.count.set(100); // TypeScript error: Cannot mutate read-only view
|
|
51
|
+
* const current = await counter.count.pick(); // OK: Reading is allowed
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @public
|
|
55
|
+
*/
|
|
56
|
+
export type FlowReadonly<T> = Omit<FlowNode<T>, "set" | "refresh">;
|
|
57
|
+
//# sourceMappingURL=flowReadonly.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowReadonly.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { NotPromise } from '../../base';
|
|
2
|
+
import { FlowNode } from './flowNode';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a reactive state that holds a mutable value.
|
|
5
|
+
*
|
|
6
|
+
* @typeParam T - The type of the state value.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* `FlowState` is a type alias of {@link FlowNode}, providing a mutable reactive state that can be
|
|
10
|
+
* updated using the `set()` method. It provides all the reactive capabilities of `FlowNode`
|
|
11
|
+
* (lazy computation, caching) with the ability to mutate the value.
|
|
12
|
+
*
|
|
13
|
+
* Unlike {@link FlowConstant}, which is immutable and computes once, states can be updated at any
|
|
14
|
+
* time. Unlike {@link FlowDerivation}, which recomputes when dependencies change, states are
|
|
15
|
+
* updated explicitly via `set()`.
|
|
16
|
+
*
|
|
17
|
+
* **Reading Values:**
|
|
18
|
+
* You can read the state value using `get(t)` for tracked access (creates reactive dependency)
|
|
19
|
+
* or `pick()` for untracked access (reads without creating dependency).
|
|
20
|
+
*
|
|
21
|
+
* **Updating Values:**
|
|
22
|
+
* When the state is updated with a new value that differs from the current value (strict equality),
|
|
23
|
+
* all dependent effects and derivations are automatically notified and re-executed. If the new value
|
|
24
|
+
* is strictly equal to the current value, no notification occurs.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const $count = state(0);
|
|
29
|
+
*
|
|
30
|
+
* // Read with tracking
|
|
31
|
+
* effect((t) => {
|
|
32
|
+
* console.log($count.get(t)); // Effect re-runs when $count changes
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Read without tracking
|
|
36
|
+
* const snapshot = await $count.pick();
|
|
37
|
+
*
|
|
38
|
+
* // Update the value
|
|
39
|
+
* await $count.set(1);
|
|
40
|
+
* await $count.set(current => current + 1);
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export type FlowState<T> = Omit<FlowNode<T>, "refresh">;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new reactive state holding a mutable value.
|
|
48
|
+
*
|
|
49
|
+
* @typeParam T - The type of the state value.
|
|
50
|
+
*
|
|
51
|
+
* @param value - The initial value for the state, or a function that returns the initial value.
|
|
52
|
+
* If a function is provided, it is called lazily only when the value is first accessed via
|
|
53
|
+
* `get()` or `pick()`. If a direct value is provided, it is stored immediately.
|
|
54
|
+
*
|
|
55
|
+
* @returns A new instance of {@link FlowState} that provides reactive access to the mutable value.
|
|
56
|
+
*
|
|
57
|
+
* @remarks
|
|
58
|
+
* State is the most common reactive primitive - a mutable container that notifies dependents
|
|
59
|
+
* when its value changes. Use `set()` to update the value (returns `Promise<void>`) and `get(t)`
|
|
60
|
+
* or `pick()` to read it.
|
|
61
|
+
*
|
|
62
|
+
* **Lazy Initialization:**
|
|
63
|
+
* When a function is provided, the initialization is lazy - the function is not called immediately
|
|
64
|
+
* upon creation. It executes only when:
|
|
65
|
+
* - The value is first read via `get(t)` or `pick()`
|
|
66
|
+
* - The state is watched via `watch()`
|
|
67
|
+
*
|
|
68
|
+
* This is useful for expensive initializations that may not be needed immediately.
|
|
69
|
+
*
|
|
70
|
+
* **When to Use States:**
|
|
71
|
+
* - Use `state()` for mutable values that can be updated directly
|
|
72
|
+
* - Use `constant()` for values that compute once and never change
|
|
73
|
+
* - Use `derivation()` for values that recompute when dependencies change
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* // Direct value - initialized immediately
|
|
78
|
+
* const $count = state(0);
|
|
79
|
+
*
|
|
80
|
+
* // Lazy initialization - computed on first access
|
|
81
|
+
* const $config = state(() => {
|
|
82
|
+
* return loadConfiguration();
|
|
83
|
+
* });
|
|
84
|
+
*
|
|
85
|
+
* effect((t) => {
|
|
86
|
+
* console.log($count.get(t));
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* await $count.set(1); // Logs: 1
|
|
90
|
+
* await $count.set(n => n + 1); // Logs: 2
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @public
|
|
94
|
+
*/
|
|
95
|
+
export declare function state<T>(value: NotPromise<T> | (() => NotPromise<T>)): FlowState<T>;
|
|
96
|
+
//# sourceMappingURL=flowState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowState.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/flowState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,KAAK,CAAC,CAAC,EACtB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,GAC1C,SAAS,CAAC,CAAC,CAAC,CAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/flow/nodes/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -59,8 +59,5 @@
|
|
|
59
59
|
*
|
|
60
60
|
* @see {@link https://github.com/yourusername/picoflow | GitHub Repository}
|
|
61
61
|
*/
|
|
62
|
-
export
|
|
63
|
-
export { FlowConstant, FlowDerivation, type FlowDisposable, FlowEffect, FlowObservable, FlowSignal, FlowState, isDisposable, TrackingContext, } from './basic/';
|
|
64
|
-
export { array, constant, derivation, effect, map, resource, resourceAsync, signal, state, stream, streamAsync, } from './creators';
|
|
65
|
-
export { from, type NotPromise, SolidDerivation, type SolidGetter, type SolidObservable, SolidResource, SolidState, } from './solid/';
|
|
62
|
+
export * from './flow';
|
|
66
63
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,cAAc,QAAQ,CAAC"}
|