@ersbeth/picoflow 1.1.1 → 2.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/.vscode/settings.json +3 -3
- package/CHANGELOG.md +43 -0
- package/README.md +2 -18
- package/biome.json +45 -35
- package/dist/picoflow.js +857 -1528
- package/dist/types/api/base/flowDisposable.d.ts +41 -0
- package/dist/types/api/base/flowDisposable.d.ts.map +1 -0
- package/dist/types/api/base/flowObservable.d.ts +27 -0
- package/dist/types/api/base/flowObservable.d.ts.map +1 -0
- package/dist/types/api/base/flowSubscribable.d.ts +79 -0
- package/dist/types/api/base/flowSubscribable.d.ts.map +1 -0
- package/dist/types/api/base/flowTracker.d.ts +8 -0
- package/dist/types/api/base/flowTracker.d.ts.map +1 -0
- package/dist/types/api/base/index.d.ts +5 -0
- package/dist/types/api/base/index.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +3 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/api/nodes/async/flowConstantAsync.d.ts +31 -0
- package/dist/types/api/nodes/async/flowConstantAsync.d.ts.map +1 -0
- package/dist/types/api/nodes/async/flowDerivationAsync.d.ts +37 -0
- package/dist/types/api/nodes/async/flowDerivationAsync.d.ts.map +1 -0
- package/dist/types/api/nodes/async/flowStateAsync.d.ts +41 -0
- package/dist/types/api/nodes/async/flowStateAsync.d.ts.map +1 -0
- package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts +30 -0
- package/dist/types/api/nodes/async/flowWritableDerivationAsync.d.ts.map +1 -0
- package/dist/types/{flow → api}/nodes/async/index.d.ts +1 -2
- package/dist/types/api/nodes/async/index.d.ts.map +1 -0
- package/dist/types/api/nodes/collections/flowArray.d.ts +134 -0
- package/dist/types/api/nodes/collections/flowArray.d.ts.map +1 -0
- package/dist/types/api/nodes/collections/flowMap.d.ts +98 -0
- package/dist/types/api/nodes/collections/flowMap.d.ts.map +1 -0
- package/dist/types/api/nodes/collections/index.d.ts.map +1 -0
- package/dist/types/api/nodes/flowEffect.d.ts +28 -0
- package/dist/types/api/nodes/flowEffect.d.ts.map +1 -0
- package/dist/types/api/nodes/flowSignal.d.ts +25 -0
- package/dist/types/api/nodes/flowSignal.d.ts.map +1 -0
- package/dist/types/api/nodes/flowValue.d.ts +35 -0
- package/dist/types/api/nodes/flowValue.d.ts.map +1 -0
- package/dist/types/api/nodes/index.d.ts +8 -0
- package/dist/types/api/nodes/index.d.ts.map +1 -0
- package/dist/types/api/nodes/sync/flowConstant.d.ts +29 -0
- package/dist/types/api/nodes/sync/flowConstant.d.ts.map +1 -0
- package/dist/types/api/nodes/sync/flowDerivation.d.ts +36 -0
- package/dist/types/api/nodes/sync/flowDerivation.d.ts.map +1 -0
- package/dist/types/api/nodes/sync/flowState.d.ts +39 -0
- package/dist/types/api/nodes/sync/flowState.d.ts.map +1 -0
- package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts +28 -0
- package/dist/types/api/nodes/sync/flowWritableDerivation.d.ts.map +1 -0
- package/dist/types/{flow → api}/nodes/sync/index.d.ts +1 -2
- package/dist/types/api/nodes/sync/index.d.ts.map +1 -0
- package/dist/types/api/nodes/utils.d.ts +22 -0
- package/dist/types/api/nodes/utils.d.ts.map +1 -0
- package/dist/types/base/disposable.d.ts +11 -0
- package/dist/types/base/disposable.d.ts.map +1 -0
- package/dist/types/base/executionStack.d.ts +14 -0
- package/dist/types/base/executionStack.d.ts.map +1 -0
- package/dist/types/base/index.d.ts +6 -0
- package/dist/types/base/index.d.ts.map +1 -0
- package/dist/types/base/node.d.ts +27 -0
- package/dist/types/base/node.d.ts.map +1 -0
- package/dist/types/base/observable.d.ts +37 -0
- package/dist/types/base/observable.d.ts.map +1 -0
- package/dist/types/base/observer.d.ts +25 -0
- package/dist/types/base/observer.d.ts.map +1 -0
- package/dist/types/converters/index.d.ts +2 -0
- package/dist/types/converters/index.d.ts.map +1 -0
- package/dist/types/converters/solid.d.ts +46 -0
- package/dist/types/converters/solid.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -63
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/nodes/arrayNode.d.ts +2 -0
- package/dist/types/nodes/arrayNode.d.ts.map +1 -0
- package/dist/types/nodes/effectNode.d.ts +2 -0
- package/dist/types/nodes/effectNode.d.ts.map +1 -0
- package/dist/types/nodes/index.d.ts +9 -0
- package/dist/types/nodes/index.d.ts.map +1 -0
- package/dist/types/nodes/mapNode.d.ts +2 -0
- package/dist/types/nodes/mapNode.d.ts.map +1 -0
- package/dist/types/nodes/signalNode.d.ts +2 -0
- package/dist/types/nodes/signalNode.d.ts.map +1 -0
- package/dist/types/nodes/valueAsyncNode.d.ts +2 -0
- package/dist/types/nodes/valueAsyncNode.d.ts.map +1 -0
- package/dist/types/nodes/valueNode.d.ts +2 -0
- package/dist/types/nodes/valueNode.d.ts.map +1 -0
- package/dist/types/nodes/valueSyncNode.d.ts +2 -0
- package/dist/types/nodes/valueSyncNode.d.ts.map +1 -0
- package/dist/types/schedulers/asyncResolver.d.ts +2 -0
- package/dist/types/schedulers/asyncResolver.d.ts.map +1 -0
- package/dist/types/schedulers/asyncScheduler.d.ts +2 -0
- package/dist/types/schedulers/asyncScheduler.d.ts.map +1 -0
- package/dist/types/schedulers/index.d.ts +5 -0
- package/dist/types/schedulers/index.d.ts.map +1 -0
- package/dist/types/schedulers/pendingError.d.ts +2 -0
- package/dist/types/schedulers/pendingError.d.ts.map +1 -0
- package/dist/types/schedulers/scheduler.d.ts +2 -0
- package/dist/types/schedulers/scheduler.d.ts.map +1 -0
- package/dist/types/schedulers/syncResolver.d.ts +2 -0
- package/dist/types/schedulers/syncResolver.d.ts.map +1 -0
- package/dist/types/schedulers/syncScheduler.d.ts +2 -0
- package/dist/types/schedulers/syncScheduler.d.ts.map +1 -0
- package/docs/.vitepress/config.mts +128 -93
- package/docs/api/functions/array.md +14 -37
- package/docs/api/functions/constant.md +13 -25
- package/docs/api/functions/constantAsync.md +69 -0
- package/docs/api/functions/derivation.md +14 -33
- package/docs/api/functions/derivationAsync.md +34 -0
- package/docs/api/functions/from.md +62 -153
- package/docs/api/functions/isDisposable.md +8 -30
- package/docs/api/functions/map.md +15 -36
- package/docs/api/functions/signal.md +8 -23
- package/docs/api/functions/state.md +43 -23
- package/docs/api/functions/stateAsync.md +69 -0
- package/docs/api/functions/subscribe.md +40 -0
- package/docs/api/functions/writableDerivation.md +33 -0
- package/docs/api/functions/writableDerivationAsync.md +34 -0
- package/docs/api/index.md +45 -102
- package/docs/api/interfaces/FlowArray.md +439 -0
- package/docs/api/interfaces/FlowConstant.md +220 -0
- package/docs/api/interfaces/FlowConstantAsync.md +221 -0
- package/docs/api/interfaces/FlowDerivation.md +241 -0
- package/docs/api/interfaces/FlowDerivationAsync.md +242 -0
- package/docs/api/interfaces/FlowDisposable.md +32 -38
- package/docs/api/interfaces/FlowEffect.md +64 -0
- package/docs/api/interfaces/FlowMap.md +374 -0
- package/docs/api/interfaces/FlowObservable.md +155 -0
- package/docs/api/interfaces/FlowSignal.md +156 -0
- package/docs/api/interfaces/FlowState.md +269 -0
- package/docs/api/interfaces/FlowStateAsync.md +268 -0
- package/docs/api/interfaces/FlowSubscribable.md +55 -0
- package/docs/api/interfaces/FlowTracker.md +61 -0
- package/docs/api/interfaces/FlowValue.md +222 -0
- package/docs/api/interfaces/FlowWritableDerivation.md +292 -0
- package/docs/api/interfaces/FlowWritableDerivationAsync.md +293 -0
- package/docs/api/type-aliases/DerivationFunction.md +28 -0
- package/docs/api/type-aliases/DerivationFunctionAsync.md +28 -0
- package/docs/api/type-aliases/FlowArrayAction.md +19 -8
- package/docs/api/type-aliases/FlowDataTracker.md +33 -0
- package/docs/api/type-aliases/FlowMapAction.md +48 -0
- package/docs/api/type-aliases/FlowOnDataListener.md +33 -0
- package/docs/api/type-aliases/FlowOnErrorListener.md +27 -0
- package/docs/api/type-aliases/FlowOnPendingListener.md +21 -0
- package/docs/api/type-aliases/FlowReadonly.md +22 -0
- package/docs/api/type-aliases/InitFunction.md +21 -0
- package/docs/api/type-aliases/InitFunctionAsync.md +21 -0
- package/docs/api/type-aliases/NotPromise.md +6 -3
- package/docs/api/type-aliases/UpdateFunction.md +27 -0
- package/docs/api/type-aliases/UpdateFunctionAsync.md +27 -0
- package/docs/api/typedoc-sidebar.json +1 -81
- package/docs/examples/examples.md +0 -2
- package/docs/guide/advanced/architecture.md +1234 -0
- package/docs/guide/advanced/migration-v2.md +204 -0
- package/docs/guide/advanced/solidjs.md +2 -88
- package/docs/guide/introduction/concepts.md +4 -3
- package/docs/guide/introduction/conventions.md +2 -33
- package/docs/guide/introduction/getting-started.md +28 -23
- package/docs/guide/introduction/lifecycle.md +16 -19
- package/docs/guide/primitives/array.md +102 -216
- package/docs/guide/primitives/constant.md +39 -212
- package/docs/guide/primitives/derivations.md +55 -122
- package/docs/guide/primitives/effects.md +155 -241
- package/docs/guide/primitives/map.md +64 -186
- package/docs/guide/primitives/overview.md +45 -128
- package/docs/guide/primitives/signal.md +51 -88
- package/docs/guide/primitives/state.md +34 -130
- package/package.json +56 -60
- package/src/api/base/flowDisposable.ts +44 -0
- package/src/api/base/flowObservable.ts +28 -0
- package/src/api/base/flowSubscribable.ts +87 -0
- package/src/api/base/flowTracker.ts +7 -0
- package/src/api/base/index.ts +4 -0
- package/src/{flow → api}/index.ts +0 -1
- package/src/api/nodes/async/flowConstantAsync.ts +36 -0
- package/src/api/nodes/async/flowDerivationAsync.ts +42 -0
- package/src/api/nodes/async/flowStateAsync.ts +47 -0
- package/src/api/nodes/async/flowWritableDerivationAsync.ts +33 -0
- package/src/{flow → api}/nodes/async/index.ts +1 -2
- package/src/api/nodes/collections/flowArray.ts +155 -0
- package/src/api/nodes/collections/flowMap.ts +115 -0
- package/src/api/nodes/flowEffect.ts +42 -0
- package/src/api/nodes/flowSignal.ts +28 -0
- package/src/api/nodes/flowValue.ts +36 -0
- package/src/api/nodes/index.ts +7 -0
- package/src/api/nodes/sync/flowConstant.ts +33 -0
- package/src/api/nodes/sync/flowDerivation.ts +41 -0
- package/src/api/nodes/sync/flowState.ts +45 -0
- package/src/api/nodes/sync/flowWritableDerivation.ts +31 -0
- package/src/{flow → api}/nodes/sync/index.ts +1 -2
- package/src/api/nodes/utils.ts +22 -0
- package/src/base/disposable.ts +18 -0
- package/src/base/executionStack.ts +42 -0
- package/src/base/index.ts +5 -0
- package/src/base/node.ts +98 -0
- package/src/base/observable.ts +87 -0
- package/src/base/observer.ts +51 -0
- package/src/converters/index.ts +1 -0
- package/src/converters/solid.ts +109 -0
- package/src/index.ts +2 -64
- package/src/nodes/arrayNode.ts +172 -0
- package/src/nodes/effectNode.ts +59 -0
- package/src/nodes/index.ts +8 -0
- package/src/nodes/mapNode.ts +127 -0
- package/src/nodes/signalNode.ts +21 -0
- package/src/nodes/valueAsyncNode.ts +88 -0
- package/src/nodes/valueNode.ts +144 -0
- package/src/nodes/valueSyncNode.ts +128 -0
- package/src/schedulers/asyncResolver.ts +78 -0
- package/src/schedulers/asyncScheduler.ts +66 -0
- package/src/schedulers/index.ts +4 -0
- package/src/schedulers/pendingError.ts +13 -0
- package/src/schedulers/scheduler.ts +9 -0
- package/src/schedulers/syncResolver.ts +69 -0
- package/src/schedulers/syncScheduler.ts +55 -0
- package/test/base/pendingError.test.ts +67 -0
- package/test/converters/solid.derivation.browser.test.tsx +69 -0
- package/test/converters/solid.node.test.ts +654 -0
- package/test/converters/solid.state.browser.test.tsx +1592 -0
- package/test/reactivity/flowSignal.test.ts +226 -0
- package/test/reactivity/nodes/async/asyncScheduler/asyncResolver.test.ts +593 -0
- package/test/reactivity/nodes/async/asyncScheduler/asyncScheduler.test.ts +317 -0
- package/test/reactivity/nodes/async/flowConstantAsync.test.ts +652 -0
- package/test/reactivity/nodes/async/flowDerivation.test.ts +898 -0
- package/test/reactivity/nodes/async/flowDerivationAsync.test.ts +1716 -0
- package/test/reactivity/nodes/async/flowStateAsync.test.ts +708 -0
- package/test/reactivity/nodes/async/flowWritableDerivationAsync.test.ts +614 -0
- package/test/reactivity/nodes/collections/flowArray.asyncStates.test.ts +1289 -0
- package/test/reactivity/nodes/collections/flowArray.scalars.test.ts +961 -0
- package/test/reactivity/nodes/collections/flowArray.states.test.ts +1035 -0
- package/test/reactivity/nodes/collections/flowMap.asyncStates.test.ts +960 -0
- package/test/reactivity/nodes/collections/flowMap.scalars.test.ts +775 -0
- package/test/reactivity/nodes/collections/flowMap.states.test.ts +958 -0
- package/test/reactivity/nodes/sync/flowConstant.test.ts +377 -0
- package/test/reactivity/nodes/sync/flowDerivation.test.ts +896 -0
- package/test/reactivity/nodes/sync/flowState.test.ts +341 -0
- package/test/reactivity/nodes/sync/flowWritableDerivation.test.ts +603 -0
- package/test/vitest.d.ts +10 -0
- package/tsconfig.json +31 -20
- package/typedoc.json +35 -35
- package/vite.config.ts +25 -23
- package/vitest.browser.config.ts +21 -0
- package/vitest.config.ts +12 -12
- package/.cursor/plans/unifier-flowresource-avec-flowderivation-c9506e24.plan.md +0 -372
- package/.cursor/plans/update-js-e795d61b.plan.md +0 -567
- package/dist/types/flow/base/flowDisposable.d.ts +0 -67
- package/dist/types/flow/base/flowDisposable.d.ts.map +0 -1
- package/dist/types/flow/base/flowEffect.d.ts +0 -127
- package/dist/types/flow/base/flowEffect.d.ts.map +0 -1
- package/dist/types/flow/base/flowGraph.d.ts +0 -97
- package/dist/types/flow/base/flowGraph.d.ts.map +0 -1
- package/dist/types/flow/base/flowSignal.d.ts +0 -134
- package/dist/types/flow/base/flowSignal.d.ts.map +0 -1
- package/dist/types/flow/base/flowTracker.d.ts +0 -15
- package/dist/types/flow/base/flowTracker.d.ts.map +0 -1
- package/dist/types/flow/base/index.d.ts +0 -7
- package/dist/types/flow/base/index.d.ts.map +0 -1
- package/dist/types/flow/base/utils.d.ts +0 -20
- package/dist/types/flow/base/utils.d.ts.map +0 -1
- package/dist/types/flow/collections/flowArray.d.ts +0 -148
- package/dist/types/flow/collections/flowArray.d.ts.map +0 -1
- package/dist/types/flow/collections/flowMap.d.ts +0 -224
- package/dist/types/flow/collections/flowMap.d.ts.map +0 -1
- package/dist/types/flow/collections/index.d.ts.map +0 -1
- package/dist/types/flow/index.d.ts +0 -4
- package/dist/types/flow/index.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/flowConstantAsync.d.ts +0 -137
- package/dist/types/flow/nodes/async/flowConstantAsync.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts +0 -137
- package/dist/types/flow/nodes/async/flowDerivationAsync.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/flowNodeAsync.d.ts +0 -343
- package/dist/types/flow/nodes/async/flowNodeAsync.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts +0 -81
- package/dist/types/flow/nodes/async/flowReadonlyAsync.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/flowStateAsync.d.ts +0 -111
- package/dist/types/flow/nodes/async/flowStateAsync.d.ts.map +0 -1
- package/dist/types/flow/nodes/async/index.d.ts.map +0 -1
- package/dist/types/flow/nodes/index.d.ts +0 -3
- package/dist/types/flow/nodes/index.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/flowConstant.d.ts +0 -108
- package/dist/types/flow/nodes/sync/flowConstant.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/flowDerivation.d.ts +0 -100
- package/dist/types/flow/nodes/sync/flowDerivation.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/flowNode.d.ts +0 -314
- package/dist/types/flow/nodes/sync/flowNode.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/flowReadonly.d.ts +0 -57
- package/dist/types/flow/nodes/sync/flowReadonly.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/flowState.d.ts +0 -96
- package/dist/types/flow/nodes/sync/flowState.d.ts.map +0 -1
- package/dist/types/flow/nodes/sync/index.d.ts.map +0 -1
- package/dist/types/solid/converters.d.ts +0 -53
- package/dist/types/solid/converters.d.ts.map +0 -1
- package/dist/types/solid/index.d.ts +0 -3
- package/dist/types/solid/index.d.ts.map +0 -1
- package/dist/types/solid/primitives.d.ts +0 -181
- package/dist/types/solid/primitives.d.ts.map +0 -1
- package/docs/api/classes/FlowArray.md +0 -489
- package/docs/api/classes/FlowConstant.md +0 -350
- package/docs/api/classes/FlowDerivation.md +0 -334
- package/docs/api/classes/FlowEffect.md +0 -100
- package/docs/api/classes/FlowMap.md +0 -512
- package/docs/api/classes/FlowObservable.md +0 -306
- package/docs/api/classes/FlowResource.md +0 -380
- package/docs/api/classes/FlowResourceAsync.md +0 -362
- package/docs/api/classes/FlowSignal.md +0 -160
- package/docs/api/classes/FlowState.md +0 -368
- package/docs/api/classes/FlowStream.md +0 -367
- package/docs/api/classes/FlowStreamAsync.md +0 -364
- package/docs/api/classes/SolidDerivation.md +0 -75
- package/docs/api/classes/SolidResource.md +0 -91
- package/docs/api/classes/SolidState.md +0 -71
- package/docs/api/classes/TrackingContext.md +0 -33
- package/docs/api/functions/effect.md +0 -49
- package/docs/api/functions/resource.md +0 -52
- package/docs/api/functions/resourceAsync.md +0 -50
- package/docs/api/functions/stream.md +0 -53
- package/docs/api/functions/streamAsync.md +0 -50
- package/docs/api/interfaces/SolidObservable.md +0 -19
- package/docs/api/type-aliases/FlowStreamDisposer.md +0 -15
- package/docs/api/type-aliases/FlowStreamSetter.md +0 -27
- package/docs/api/type-aliases/FlowStreamUpdater.md +0 -32
- package/docs/api/type-aliases/SolidGetter.md +0 -17
- package/docs/guide/primitives/resources.md +0 -858
- package/docs/guide/primitives/streams.md +0 -931
- package/src/flow/base/flowDisposable.ts +0 -71
- package/src/flow/base/flowEffect.ts +0 -171
- package/src/flow/base/flowGraph.ts +0 -288
- package/src/flow/base/flowSignal.ts +0 -207
- package/src/flow/base/flowTracker.ts +0 -17
- package/src/flow/base/index.ts +0 -6
- package/src/flow/base/utils.ts +0 -19
- package/src/flow/collections/flowArray.ts +0 -409
- package/src/flow/collections/flowMap.ts +0 -398
- package/src/flow/nodes/async/flowConstantAsync.ts +0 -142
- package/src/flow/nodes/async/flowDerivationAsync.ts +0 -143
- package/src/flow/nodes/async/flowNodeAsync.ts +0 -474
- package/src/flow/nodes/async/flowReadonlyAsync.ts +0 -81
- package/src/flow/nodes/async/flowStateAsync.ts +0 -116
- package/src/flow/nodes/await/advanced/index.ts +0 -5
- package/src/flow/nodes/await/advanced/resource.ts +0 -134
- package/src/flow/nodes/await/advanced/resourceAsync.ts +0 -109
- package/src/flow/nodes/await/advanced/stream.ts +0 -188
- package/src/flow/nodes/await/advanced/streamAsync.ts +0 -176
- package/src/flow/nodes/await/flowConstantAwait.ts +0 -154
- package/src/flow/nodes/await/flowDerivationAwait.ts +0 -154
- package/src/flow/nodes/await/flowNodeAwait.ts +0 -508
- package/src/flow/nodes/await/flowReadonlyAwait.ts +0 -89
- package/src/flow/nodes/await/flowStateAwait.ts +0 -130
- package/src/flow/nodes/await/index.ts +0 -5
- package/src/flow/nodes/index.ts +0 -3
- package/src/flow/nodes/sync/flowConstant.ts +0 -111
- package/src/flow/nodes/sync/flowDerivation.ts +0 -105
- package/src/flow/nodes/sync/flowNode.ts +0 -439
- package/src/flow/nodes/sync/flowReadonly.ts +0 -57
- package/src/flow/nodes/sync/flowState.ts +0 -101
- package/src/solid/converters.ts +0 -139
- package/src/solid/index.ts +0 -2
- package/src/solid/primitives.ts +0 -215
- package/test/base/flowEffect.test.ts +0 -108
- package/test/base/flowGraph.test.ts +0 -485
- package/test/base/flowSignal.test.ts +0 -372
- package/test/collections/flowArray.asyncStates.test.ts +0 -1553
- package/test/collections/flowArray.scalars.test.ts +0 -1129
- package/test/collections/flowArray.states.test.ts +0 -1365
- package/test/collections/flowMap.asyncStates.test.ts +0 -1105
- package/test/collections/flowMap.scalars.test.ts +0 -877
- package/test/collections/flowMap.states.test.ts +0 -1097
- package/test/nodes/async/flowConstantAsync.test.ts +0 -860
- package/test/nodes/async/flowDerivationAsync.test.ts +0 -1517
- package/test/nodes/async/flowStateAsync.test.ts +0 -1387
- package/test/nodes/await/advanced/resource.test.ts +0 -129
- package/test/nodes/await/advanced/resourceAsync.test.ts +0 -108
- package/test/nodes/await/advanced/stream.test.ts +0 -198
- package/test/nodes/await/advanced/streamAsync.test.ts +0 -196
- package/test/nodes/await/flowConstantAwait.test.ts +0 -643
- package/test/nodes/await/flowDerivationAwait.test.ts +0 -1583
- package/test/nodes/await/flowStateAwait.test.ts +0 -999
- package/test/nodes/mixed/derivation.test.ts +0 -1527
- package/test/nodes/sync/flowConstant.test.ts +0 -620
- package/test/nodes/sync/flowDerivation.test.ts +0 -1373
- package/test/nodes/sync/flowState.test.ts +0 -945
- package/test/solid/converters.test.ts +0 -721
- package/test/solid/primitives.test.ts +0 -1031
- /package/dist/types/{flow → api/nodes}/collections/index.d.ts +0 -0
- /package/docs/guide/advanced/{upgrading.md → migration-v1.md} +0 -0
- /package/src/{flow → api/nodes}/collections/index.ts +0 -0
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { FlowNodeAwait } from "./flowNodeAwait";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents a reactive state that holds a mutable value, with asynchronous values.
|
|
5
|
-
*
|
|
6
|
-
* @typeParam T - The type of the state value (not the Promise itself).
|
|
7
|
-
*
|
|
8
|
-
* @remarks
|
|
9
|
-
* `FlowStateAwait` is a type alias of {@link FlowNodeAwait}, providing a mutable reactive state that can be
|
|
10
|
-
* updated using the `set()` method. It provides all the reactive capabilities of `FlowNodeAwait`
|
|
11
|
-
* (lazy computation, caching) with the ability to mutate the value.
|
|
12
|
-
*
|
|
13
|
-
* Unlike {@link FlowConstantAwait}, which is immutable and computes once, states can be updated at any
|
|
14
|
-
* time. Unlike {@link FlowDerivationAwait}, which recomputes when dependencies change, states are
|
|
15
|
-
* updated explicitly via `set()`.
|
|
16
|
-
*
|
|
17
|
-
* **Key Difference from FlowStateAsync:**
|
|
18
|
-
* Unlike {@link FlowStateAsync}, which returns Promises from `get()`, FlowStateAwait returns
|
|
19
|
-
* the resolved value directly. This makes the API more convenient for reactive code that doesn't want
|
|
20
|
-
* to deal with Promises in every access. The Promise is awaited internally and the resolved value is cached.
|
|
21
|
-
*
|
|
22
|
-
* **Asynchronous Nature:**
|
|
23
|
-
* FlowStateAwait works with Promises internally, but provides a synchronous-looking API:
|
|
24
|
-
* - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
|
|
25
|
-
* if the Promise hasn't resolved yet on first access.
|
|
26
|
-
* - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
|
|
27
|
-
* is fully resolved before proceeding.
|
|
28
|
-
* - The Promise is awaited internally and the resolved value is cached until the state is updated.
|
|
29
|
-
* - The `set()` method returns `Promise<void>` and must be awaited.
|
|
30
|
-
*
|
|
31
|
-
* **Reading Values:**
|
|
32
|
-
* You can read the state value using `get(t)` for tracked access (creates reactive dependency)
|
|
33
|
-
* or `pick()` for untracked access (reads without creating dependency):
|
|
34
|
-
* - `get(t)` returns the resolved value synchronously (`T | undefined`)
|
|
35
|
-
* - `pick()` returns a `Promise<T>` that must be awaited
|
|
36
|
-
*
|
|
37
|
-
* **Updating Values:**
|
|
38
|
-
* When the state is updated with a new value that differs from the current value (strict equality),
|
|
39
|
-
* all dependent effects and derivations are automatically notified and re-executed. If the new value
|
|
40
|
-
* is strictly equal to the current value, no notification occurs. The `set()` method accepts either
|
|
41
|
-
* a `Promise<T>` or a function `(current: T) => Promise<T>` and returns `Promise<void>`.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* const $count = stateAwait(Promise.resolve(0));
|
|
46
|
-
*
|
|
47
|
-
* // Read with tracking
|
|
48
|
-
* effect((t) => {
|
|
49
|
-
* const value = $count.get(t); // Synchronous - returns resolved value, effect re-runs when $count changes
|
|
50
|
-
* console.log(value);
|
|
51
|
-
* });
|
|
52
|
-
*
|
|
53
|
-
* // Read without tracking
|
|
54
|
-
* const snapshot = await $count.pick(); // Async - returns Promise
|
|
55
|
-
*
|
|
56
|
-
* // Update the value
|
|
57
|
-
* await $count.set(Promise.resolve(1));
|
|
58
|
-
* await $count.set(async (current) => Promise.resolve(current + 1));
|
|
59
|
-
* ```
|
|
60
|
-
*
|
|
61
|
-
* @public
|
|
62
|
-
*/
|
|
63
|
-
export type FlowStateAwait<T> = Omit<FlowNodeAwait<T>, "refresh">;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Creates a new reactive state holding a mutable value.
|
|
67
|
-
*
|
|
68
|
-
* @typeParam T - The type of the state value (not the Promise itself).
|
|
69
|
-
*
|
|
70
|
-
* @param value - The initial value for the state, or a function that returns the initial value.
|
|
71
|
-
* If a function is provided, it is called lazily only when the value is first accessed via
|
|
72
|
-
* `get()` or `pick()`. If a direct Promise is provided, it is stored immediately and resolved internally.
|
|
73
|
-
*
|
|
74
|
-
* @returns A new instance of {@link FlowStateAwait} that provides reactive access to the mutable value.
|
|
75
|
-
*
|
|
76
|
-
* @remarks
|
|
77
|
-
* State is the most common reactive primitive - a mutable container that notifies dependents
|
|
78
|
-
* when its value changes. Use `set()` to update the value (returns `Promise<void>`) and `get(t)`
|
|
79
|
-
* or `pick()` to read it:
|
|
80
|
-
* - `get(t)` returns the resolved value synchronously (`T | undefined`)
|
|
81
|
-
* - `pick()` returns a `Promise<T>` that must be awaited
|
|
82
|
-
*
|
|
83
|
-
* **Asynchronous Nature:**
|
|
84
|
-
* FlowStateAwait works with Promises internally, but provides a synchronous-looking API:
|
|
85
|
-
* - `get(t)` returns the resolved value synchronously (`T | undefined`). The value may be `undefined`
|
|
86
|
-
* if the Promise hasn't resolved yet on first access.
|
|
87
|
-
* - `pick()` returns a `Promise<T>` that must be awaited. Use this when you need to ensure the value
|
|
88
|
-
* is fully resolved before proceeding.
|
|
89
|
-
* - The Promise is awaited internally and the resolved value is cached until the state is updated.
|
|
90
|
-
* - The `set()` method returns `Promise<void>` and must be awaited.
|
|
91
|
-
*
|
|
92
|
-
* **Lazy Initialization:**
|
|
93
|
-
* When a function is provided, the initialization is lazy - the function is not called immediately
|
|
94
|
-
* upon creation. It executes only when:
|
|
95
|
-
* - The value is first read via `get(t)` or `pick()`
|
|
96
|
-
* - The state is watched via `watch()`
|
|
97
|
-
*
|
|
98
|
-
* This is useful for expensive async initializations that may not be needed immediately.
|
|
99
|
-
*
|
|
100
|
-
* **When to Use States:**
|
|
101
|
-
* - Use `stateAwait()` for mutable values that can be updated directly
|
|
102
|
-
* - Use `constantAwait()` for values that compute once and never change
|
|
103
|
-
* - Use `derivationAwait()` for values that recompute when dependencies change
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* // Direct Promise - initialized immediately
|
|
108
|
-
* const $count = stateAwait(Promise.resolve(0));
|
|
109
|
-
*
|
|
110
|
-
* // Lazy initialization - computed on first access
|
|
111
|
-
* const $config = stateAwait(async () => {
|
|
112
|
-
* return await loadConfiguration();
|
|
113
|
-
* });
|
|
114
|
-
*
|
|
115
|
-
* effect((t) => {
|
|
116
|
-
* const value = $count.get(t); // Synchronous - returns resolved value
|
|
117
|
-
* console.log(value);
|
|
118
|
-
* });
|
|
119
|
-
*
|
|
120
|
-
* await $count.set(Promise.resolve(1)); // Logs: 1
|
|
121
|
-
* await $count.set(async (current) => Promise.resolve(current + 1)); // Logs: 2
|
|
122
|
-
* ```
|
|
123
|
-
*
|
|
124
|
-
* @public
|
|
125
|
-
*/
|
|
126
|
-
export function stateAwait<T>(
|
|
127
|
-
value: Promise<T> | (() => Promise<T>),
|
|
128
|
-
): FlowStateAwait<T> {
|
|
129
|
-
return new FlowNodeAwait(value);
|
|
130
|
-
}
|
package/src/flow/nodes/index.ts
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import type { NotPromise } from "../../base";
|
|
2
|
-
import { FlowNode } from "./flowNode";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Represents a constant value that can be computed lazily upon first access.
|
|
6
|
-
*
|
|
7
|
-
* @typeParam T - The type of the constant value.
|
|
8
|
-
*
|
|
9
|
-
* @remarks
|
|
10
|
-
* `FlowConstant` is a type alias based on {@link FlowNode} with the `set()` method removed,
|
|
11
|
-
* making it immutable. It provides all the reactive capabilities of `FlowNode` (
|
|
12
|
-
* lazy computation, caching) but prevents value mutation after initialization.
|
|
13
|
-
*
|
|
14
|
-
* Unlike {@link FlowState}, which is mutable via the `set()` method, a constant's value never
|
|
15
|
-
* changes after it's computed. This makes it ideal for values that should remain stable throughout
|
|
16
|
-
* the application lifecycle.
|
|
17
|
-
*
|
|
18
|
-
* **Lazy Computation:**
|
|
19
|
-
* Constants are created using the `constant()` factory function, which accepts a compute function.
|
|
20
|
-
* The computation doesn't run immediately upon creation. It executes only when:
|
|
21
|
-
* - The value is first read via `get()` or `pick()`
|
|
22
|
-
* - The constant is watched via `watch()`
|
|
23
|
-
* This allows you to defer expensive computations until they're actually needed.
|
|
24
|
-
*
|
|
25
|
-
* **Caching:**
|
|
26
|
-
* Once computed, the value is cached permanently. All subsequent accesses return the cached value
|
|
27
|
-
* without re-computation, ensuring the value remains constant and the computation runs only once.
|
|
28
|
-
*
|
|
29
|
-
* **Use Cases:**
|
|
30
|
-
* - Configuration values that don't change
|
|
31
|
-
* - Expensive computations that should only run once
|
|
32
|
-
* - Initialization values for other reactive primitives
|
|
33
|
-
* - Values derived from external sources that shouldn't be modified
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* // Lazy initialization - computed on first access
|
|
38
|
-
* const $expensiveValue = constant(() => {
|
|
39
|
-
* return performExpensiveCalculation();
|
|
40
|
-
* });
|
|
41
|
-
*
|
|
42
|
-
* // First access triggers computation
|
|
43
|
-
* const value1 = await $expensiveValue.pick();
|
|
44
|
-
*
|
|
45
|
-
* // Subsequent accesses return cached value
|
|
46
|
-
* const value2 = await $expensiveValue.pick();
|
|
47
|
-
*
|
|
48
|
-
* // Value cannot be changed (set() method is not available)
|
|
49
|
-
* // $expensiveValue.set(100); // TypeScript error: Property 'set' does not exist
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
* @public
|
|
53
|
-
*/
|
|
54
|
-
export type FlowConstant<T> = Omit<FlowNode<T>, "set" | "refresh">;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Creates a new reactive constant with lazy initialization.
|
|
58
|
-
*
|
|
59
|
-
* @typeParam T - The type of the constant value.
|
|
60
|
-
*
|
|
61
|
-
* @param value - A function that computes the constant value. This function is called lazily
|
|
62
|
-
* only when the value is first accessed via `get()` or `pick()`.
|
|
63
|
-
*
|
|
64
|
-
* @returns A new instance of {@link FlowConstant} that provides reactive access to the computed value.
|
|
65
|
-
*
|
|
66
|
-
* @remarks
|
|
67
|
-
* Constants are immutable reactive values that are computed once and cached permanently. Unlike
|
|
68
|
-
* states (created with `state()`), constants cannot be modified after initialization - they don't
|
|
69
|
-
* have a `set()` method.
|
|
70
|
-
*
|
|
71
|
-
* **Lazy Computation:**
|
|
72
|
-
* The compute function is not executed immediately upon creation. It runs only when:
|
|
73
|
-
* - The value is first read via `get(t)` or `pick()`
|
|
74
|
-
* - The constant is watched via `watch()`
|
|
75
|
-
*
|
|
76
|
-
* This lazy computation is useful for:
|
|
77
|
-
* - Expensive computations that may not be needed immediately
|
|
78
|
-
* - Values that depend on resources not available at construction time
|
|
79
|
-
* - Deferring computation until the value is actually needed
|
|
80
|
-
*
|
|
81
|
-
* **When to Use Constants:**
|
|
82
|
-
* - Use `constant()` for values that should never change after initialization
|
|
83
|
-
* - Use `state()` for mutable values that can be updated
|
|
84
|
-
* - Use `derivation()` for values that recompute when dependencies change
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```typescript
|
|
88
|
-
* // Expensive computation that runs only once
|
|
89
|
-
* const $config = constant(() => {
|
|
90
|
-
* return loadConfigurationFromFile();
|
|
91
|
-
* });
|
|
92
|
-
*
|
|
93
|
-
* // Computation hasn't run yet
|
|
94
|
-
* // First access triggers it
|
|
95
|
-
* const config = await $config.pick();
|
|
96
|
-
*
|
|
97
|
-
* // Subsequent accesses return cached value
|
|
98
|
-
* const config2 = await $config.pick();
|
|
99
|
-
*
|
|
100
|
-
* // Use in reactive context
|
|
101
|
-
* effect((t) => {
|
|
102
|
-
* const cfg = $config.get(t);
|
|
103
|
-
* console.log(`API URL: ${cfg.apiUrl}`);
|
|
104
|
-
* });
|
|
105
|
-
* ```
|
|
106
|
-
*
|
|
107
|
-
* @public
|
|
108
|
-
*/
|
|
109
|
-
export function constant<T>(value: () => NotPromise<T>): FlowConstant<T> {
|
|
110
|
-
return new FlowNode(value);
|
|
111
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import type { FlowTracker, NotPromise } from "../../base";
|
|
2
|
-
import { FlowNode } from "./flowNode";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Represents a reactive derivation whose value is computed based on other reactive signals.
|
|
6
|
-
*
|
|
7
|
-
* @typeParam T - The type of the computed value.
|
|
8
|
-
*
|
|
9
|
-
* @remarks
|
|
10
|
-
* `FlowDerivation` is a type alias based on {@link FlowNode} with the `set()` method removed,
|
|
11
|
-
* making it immutable. It provides all the reactive capabilities of `FlowNode` (dependency tracking,
|
|
12
|
-
* lazy computation, caching) but prevents value mutation after initialization.
|
|
13
|
-
*
|
|
14
|
-
* Unlike {@link FlowConstant}, which computes its value once and never changes, derivations
|
|
15
|
-
* automatically recompute when any tracked dependency changes. This makes them ideal for
|
|
16
|
-
* creating derived state that stays in sync with its sources.
|
|
17
|
-
*
|
|
18
|
-
* **Lazy Computation:**
|
|
19
|
-
* The compute function doesn't run immediately upon creation. It executes only when:
|
|
20
|
-
* - The value is first read via `get()` or `pick()`
|
|
21
|
-
* - The derivation is watched via `watch()`
|
|
22
|
-
*
|
|
23
|
-
* **Automatic Recomputation:**
|
|
24
|
-
* When a tracked dependency changes, the derivation is marked as "dirty" but doesn't recompute
|
|
25
|
-
* immediately. Recomputation happens lazily on the next value access. This prevents unnecessary
|
|
26
|
-
* computations when multiple dependencies change in quick succession. You can also force
|
|
27
|
-
* recomputation using the `refresh()` method.
|
|
28
|
-
*
|
|
29
|
-
* **Dynamic Dependencies:**
|
|
30
|
-
* Dependencies are tracked dynamically during each computation. If the compute function
|
|
31
|
-
* conditionally tracks different observables, the dependency graph updates automatically.
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```typescript
|
|
35
|
-
* const $firstName = state('John');
|
|
36
|
-
* const $lastName = state('Doe');
|
|
37
|
-
*
|
|
38
|
-
* const $fullName = derivation((t) => {
|
|
39
|
-
* return `${$firstName.get(t)} ${$lastName.get(t)}`;
|
|
40
|
-
* });
|
|
41
|
-
*
|
|
42
|
-
* // Compute function hasn't run yet (lazy)
|
|
43
|
-
* const name = await $fullName.pick(); // Now it computes: "John Doe"
|
|
44
|
-
*
|
|
45
|
-
* // When dependencies change, derivation recomputes automatically
|
|
46
|
-
* await $firstName.set('Jane');
|
|
47
|
-
* const newName = await $fullName.pick(); // "Jane Doe" (recomputed)
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @public
|
|
51
|
-
*/
|
|
52
|
-
export type FlowDerivation<T> = Omit<FlowNode<T>, "set">;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Creates a new reactive derivation whose value is computed based on other reactive signals.
|
|
56
|
-
*
|
|
57
|
-
* @typeParam T - The type of the derived value.
|
|
58
|
-
*
|
|
59
|
-
* @param fn - A function that computes the derived value using a tracking context. The function
|
|
60
|
-
* receives a tracking context (`t`) that should be used to access dependencies via `.get(t)`.
|
|
61
|
-
* The function is not executed immediately; it runs lazily on first access.
|
|
62
|
-
*
|
|
63
|
-
* @returns A new instance of {@link FlowDerivation} that provides reactive access to the computed value.
|
|
64
|
-
*
|
|
65
|
-
* @remarks
|
|
66
|
-
* A derivation is a computed reactive value that automatically tracks its dependencies and
|
|
67
|
-
* recomputes when they change. The computation is lazy - it runs only when the value is
|
|
68
|
-
* accessed, not on construction. Use derivations to create derived state without manual
|
|
69
|
-
* dependency management.
|
|
70
|
-
*
|
|
71
|
-
* **Lazy Computation:**
|
|
72
|
-
* The compute function is not executed immediately upon creation. It runs only when:
|
|
73
|
-
* - The value is first read via `get(t)` or `pick()`
|
|
74
|
-
* - The derivation is watched via `watch()`
|
|
75
|
-
*
|
|
76
|
-
* **When to Use Derivations:**
|
|
77
|
-
* - Use `derivation()` for values that should recompute when dependencies change
|
|
78
|
-
* - Use `constant()` for values that compute once and never change
|
|
79
|
-
* - Use `state()` for mutable values that can be updated directly
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* ```typescript
|
|
83
|
-
* const $firstName = state('John');
|
|
84
|
-
* const $lastName = state('Doe');
|
|
85
|
-
*
|
|
86
|
-
* const $fullName = derivation((t) => {
|
|
87
|
-
* return `${$firstName.get(t)} ${$lastName.get(t)}`;
|
|
88
|
-
* });
|
|
89
|
-
*
|
|
90
|
-
* // Use in reactive context
|
|
91
|
-
* effect((t) => {
|
|
92
|
-
* console.log($fullName.get(t)); // Logs: "John Doe"
|
|
93
|
-
* });
|
|
94
|
-
*
|
|
95
|
-
* // When dependencies change, derivation recomputes automatically
|
|
96
|
-
* await $firstName.set('Jane'); // Logs: "Jane Doe"
|
|
97
|
-
* ```
|
|
98
|
-
*
|
|
99
|
-
* @public
|
|
100
|
-
*/
|
|
101
|
-
export function derivation<T>(
|
|
102
|
-
fn: (t: FlowTracker) => NotPromise<T>,
|
|
103
|
-
): FlowDerivation<T> {
|
|
104
|
-
return new FlowNode(fn);
|
|
105
|
-
}
|