@playfast/reform 1.2.0 → 1.3.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/dist/boundary/boundary.d.ts +64 -0
- package/dist/boundary/boundary.d.ts.map +1 -0
- package/dist/boundary/boundary.js +102 -0
- package/dist/boundary/boundary.js.map +1 -0
- package/dist/calc/asyncCalc.d.ts +21 -0
- package/dist/calc/asyncCalc.d.ts.map +1 -0
- package/dist/calc/asyncCalc.js +90 -0
- package/dist/calc/asyncCalc.js.map +1 -0
- package/dist/calc/asyncCalcTypes.d.ts +78 -0
- package/dist/calc/asyncCalcTypes.d.ts.map +1 -0
- package/dist/calc/asyncCalcTypes.js +2 -0
- package/dist/calc/asyncCalcTypes.js.map +1 -0
- package/dist/calc/asyncData.d.ts +29 -0
- package/dist/calc/asyncData.d.ts.map +1 -0
- package/dist/calc/asyncData.js +21 -0
- package/dist/calc/asyncData.js.map +1 -0
- package/dist/calc/calc.d.ts +39 -0
- package/dist/calc/calc.d.ts.map +1 -0
- package/dist/calc/calc.js +48 -0
- package/dist/calc/calc.js.map +1 -0
- package/dist/calc/calcFamily.d.ts +40 -0
- package/dist/calc/calcFamily.d.ts.map +1 -0
- package/dist/calc/calcFamily.js +113 -0
- package/dist/calc/calcFamily.js.map +1 -0
- package/dist/calc/compose.d.ts +5 -0
- package/dist/calc/compose.d.ts.map +1 -0
- package/dist/calc/compose.js +5 -0
- package/dist/calc/compose.js.map +1 -0
- package/dist/calc/queryState.d.ts +12 -0
- package/dist/calc/queryState.d.ts.map +1 -0
- package/dist/calc/queryState.js +17 -0
- package/dist/calc/queryState.js.map +1 -0
- package/dist/channel/channel.d.ts +51 -0
- package/dist/channel/channel.d.ts.map +1 -0
- package/dist/channel/channel.js +86 -0
- package/dist/channel/channel.js.map +1 -0
- package/dist/channel/procedures.d.ts +24 -0
- package/dist/channel/procedures.d.ts.map +1 -0
- package/dist/channel/procedures.js +82 -0
- package/dist/channel/procedures.js.map +1 -0
- package/dist/compose/composition.d.ts +12 -0
- package/dist/compose/composition.d.ts.map +1 -0
- package/dist/compose/composition.js +56 -0
- package/dist/compose/composition.js.map +1 -0
- package/dist/compose/compositionTypes.d.ts +127 -0
- package/dist/compose/compositionTypes.d.ts.map +1 -0
- package/dist/compose/compositionTypes.js +2 -0
- package/dist/compose/compositionTypes.js.map +1 -0
- package/dist/compose/host.d.ts +6 -0
- package/dist/compose/host.d.ts.map +1 -0
- package/dist/compose/host.js +2 -0
- package/dist/compose/host.js.map +1 -0
- package/dist/compose/props.d.ts +10 -0
- package/dist/compose/props.d.ts.map +1 -0
- package/dist/compose/props.js +6 -0
- package/dist/compose/props.js.map +1 -0
- package/dist/compose/provide.d.ts +18 -0
- package/dist/compose/provide.d.ts.map +1 -0
- package/dist/compose/provide.js +49 -0
- package/dist/compose/provide.js.map +1 -0
- package/dist/compose/slot.d.ts +70 -0
- package/dist/compose/slot.d.ts.map +1 -0
- package/dist/compose/slot.js +26 -0
- package/dist/compose/slot.js.map +1 -0
- package/dist/compose/structure.d.ts +51 -0
- package/dist/compose/structure.d.ts.map +1 -0
- package/dist/compose/structure.js +92 -0
- package/dist/compose/structure.js.map +1 -0
- package/dist/compose/ui.d.ts +112 -0
- package/dist/compose/ui.d.ts.map +1 -0
- package/dist/compose/ui.js +47 -0
- package/dist/compose/ui.js.map +1 -0
- package/dist/definition/definition.d.ts +11 -0
- package/dist/definition/definition.d.ts.map +1 -0
- package/dist/definition/definition.js +35 -0
- package/dist/definition/definition.js.map +1 -0
- package/dist/event/event.d.ts +52 -0
- package/dist/event/event.d.ts.map +1 -0
- package/dist/event/event.js +67 -0
- package/dist/event/event.js.map +1 -0
- package/dist/event/eventGroup.d.ts +8 -0
- package/dist/event/eventGroup.d.ts.map +1 -0
- package/dist/event/eventGroup.js +3 -0
- package/dist/event/eventGroup.js.map +1 -0
- package/dist/feature/feature.d.ts +27 -0
- package/dist/feature/feature.d.ts.map +1 -0
- package/dist/feature/feature.js +20 -0
- package/dist/feature/feature.js.map +1 -0
- package/dist/feature/featureBinding.d.ts +85 -0
- package/dist/feature/featureBinding.d.ts.map +1 -0
- package/dist/feature/featureBinding.js +10 -0
- package/dist/feature/featureBinding.js.map +1 -0
- package/dist/feature/featureClass.d.ts +10 -0
- package/dist/feature/featureClass.d.ts.map +1 -0
- package/dist/feature/featureClass.js +2 -0
- package/dist/feature/featureClass.js.map +1 -0
- package/dist/feature/featureConfig.d.ts +86 -0
- package/dist/feature/featureConfig.d.ts.map +1 -0
- package/dist/feature/featureConfig.js +13 -0
- package/dist/feature/featureConfig.js.map +1 -0
- package/dist/feature/featureFactory.d.ts +15 -0
- package/dist/feature/featureFactory.d.ts.map +1 -0
- package/dist/feature/featureFactory.js +59 -0
- package/dist/feature/featureFactory.js.map +1 -0
- package/dist/feature/featureModule.d.ts +28 -0
- package/dist/feature/featureModule.d.ts.map +1 -0
- package/dist/feature/featureModule.js +33 -0
- package/dist/feature/featureModule.js.map +1 -0
- package/dist/feature/featureNativeTree.d.ts +26 -0
- package/dist/feature/featureNativeTree.d.ts.map +1 -0
- package/dist/feature/featureNativeTree.js +2 -0
- package/dist/feature/featureNativeTree.js.map +1 -0
- package/dist/feature/featureRequirement.d.ts +43 -0
- package/dist/feature/featureRequirement.d.ts.map +1 -0
- package/dist/feature/featureRequirement.js +6 -0
- package/dist/feature/featureRequirement.js.map +1 -0
- package/dist/feature/featureVariants.d.ts +9 -0
- package/dist/feature/featureVariants.d.ts.map +1 -0
- package/dist/feature/featureVariants.js +59 -0
- package/dist/feature/featureVariants.js.map +1 -0
- package/dist/feature/mountFeature.d.ts +10 -0
- package/dist/feature/mountFeature.d.ts.map +1 -0
- package/dist/feature/mountFeature.js +14 -0
- package/dist/feature/mountFeature.js.map +1 -0
- package/dist/graph/closure.d.ts +77 -0
- package/dist/graph/closure.d.ts.map +1 -0
- package/dist/graph/closure.js +4 -0
- package/dist/graph/closure.js.map +1 -0
- package/dist/graph/services.d.ts +30 -0
- package/dist/graph/services.d.ts.map +1 -0
- package/dist/graph/services.js +2 -0
- package/dist/graph/services.js.map +1 -0
- package/dist/graph/summary.d.ts +60 -0
- package/dist/graph/summary.d.ts.map +1 -0
- package/dist/graph/summary.js +7 -0
- package/dist/graph/summary.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/bucketCache.d.ts +19 -0
- package/dist/internal/bucketCache.d.ts.map +1 -0
- package/dist/internal/bucketCache.js +20 -0
- package/dist/internal/bucketCache.js.map +1 -0
- package/dist/internal/capture.d.ts +17 -0
- package/dist/internal/capture.d.ts.map +1 -0
- package/dist/internal/capture.js +5 -0
- package/dist/internal/capture.js.map +1 -0
- package/dist/internal/env.d.ts +2 -0
- package/dist/internal/env.d.ts.map +1 -0
- package/dist/internal/env.js +5 -0
- package/dist/internal/env.js.map +1 -0
- package/dist/internal/errors.d.ts +48 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +69 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/inspect.d.ts +5 -0
- package/dist/internal/inspect.d.ts.map +1 -0
- package/dist/internal/inspect.js +20 -0
- package/dist/internal/inspect.js.map +1 -0
- package/dist/internal/queryDriver.d.ts +7 -0
- package/dist/internal/queryDriver.d.ts.map +1 -0
- package/dist/internal/queryDriver.js +198 -0
- package/dist/internal/queryDriver.js.map +1 -0
- package/dist/internal/queryDriverHydrate.d.ts +17 -0
- package/dist/internal/queryDriverHydrate.d.ts.map +1 -0
- package/dist/internal/queryDriverHydrate.js +19 -0
- package/dist/internal/queryDriverHydrate.js.map +1 -0
- package/dist/internal/queryDriverStore.d.ts +54 -0
- package/dist/internal/queryDriverStore.d.ts.map +1 -0
- package/dist/internal/queryDriverStore.js +77 -0
- package/dist/internal/queryDriverStore.js.map +1 -0
- package/dist/internal/queryDriverTypes.d.ts +41 -0
- package/dist/internal/queryDriverTypes.d.ts.map +1 -0
- package/dist/internal/queryDriverTypes.js +9 -0
- package/dist/internal/queryDriverTypes.js.map +1 -0
- package/dist/internal/queryEvents.d.ts +12 -0
- package/dist/internal/queryEvents.d.ts.map +1 -0
- package/dist/internal/queryEvents.js +11 -0
- package/dist/internal/queryEvents.js.map +1 -0
- package/dist/internal/queryStore.d.ts +13 -0
- package/dist/internal/queryStore.d.ts.map +1 -0
- package/dist/internal/queryStore.js +11 -0
- package/dist/internal/queryStore.js.map +1 -0
- package/dist/internal/reuse.d.ts +2 -0
- package/dist/internal/reuse.d.ts.map +1 -0
- package/dist/internal/reuse.js +55 -0
- package/dist/internal/reuse.js.map +1 -0
- package/dist/internal/scheduler.d.ts +13 -0
- package/dist/internal/scheduler.d.ts.map +1 -0
- package/dist/internal/scheduler.js +38 -0
- package/dist/internal/scheduler.js.map +1 -0
- package/dist/internal/seeds.d.ts +3 -0
- package/dist/internal/seeds.d.ts.map +1 -0
- package/dist/internal/seeds.js +3 -0
- package/dist/internal/seeds.js.map +1 -0
- package/dist/internal/sources.d.ts +20 -0
- package/dist/internal/sources.d.ts.map +1 -0
- package/dist/internal/sources.js +39 -0
- package/dist/internal/sources.js.map +1 -0
- package/dist/internal/stateRegistry.d.ts +2 -0
- package/dist/internal/stateRegistry.d.ts.map +1 -0
- package/dist/internal/stateRegistry.js +15 -0
- package/dist/internal/stateRegistry.js.map +1 -0
- package/dist/internal/store.d.ts +15 -0
- package/dist/internal/store.d.ts.map +1 -0
- package/dist/internal/store.js +61 -0
- package/dist/internal/store.js.map +1 -0
- package/dist/internal/track.d.ts +15 -0
- package/dist/internal/track.d.ts.map +1 -0
- package/dist/internal/track.js +11 -0
- package/dist/internal/track.js.map +1 -0
- package/dist/internal/variance.d.ts +4 -0
- package/dist/internal/variance.d.ts.map +1 -0
- package/dist/internal/variance.js +2 -0
- package/dist/internal/variance.js.map +1 -0
- package/dist/internal.d.ts +42 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +58 -0
- package/dist/internal.js.map +1 -0
- package/dist/namespace/namespace.d.ts +24 -0
- package/dist/namespace/namespace.d.ts.map +1 -0
- package/dist/namespace/namespace.js +20 -0
- package/dist/namespace/namespace.js.map +1 -0
- package/dist/procedure/procedure.d.ts +32 -0
- package/dist/procedure/procedure.d.ts.map +1 -0
- package/dist/procedure/procedure.js +34 -0
- package/dist/procedure/procedure.js.map +1 -0
- package/dist/reducer/reducer.d.ts +35 -0
- package/dist/reducer/reducer.d.ts.map +1 -0
- package/dist/reducer/reducer.js +73 -0
- package/dist/reducer/reducer.js.map +1 -0
- package/dist/remote/pendingQueue.d.ts +20 -0
- package/dist/remote/pendingQueue.d.ts.map +1 -0
- package/dist/remote/pendingQueue.js +113 -0
- package/dist/remote/pendingQueue.js.map +1 -0
- package/dist/remote/remoteState.d.ts +13 -0
- package/dist/remote/remoteState.d.ts.map +1 -0
- package/dist/remote/remoteState.js +176 -0
- package/dist/remote/remoteState.js.map +1 -0
- package/dist/remote/remoteStateMake.d.ts +8 -0
- package/dist/remote/remoteStateMake.d.ts.map +1 -0
- package/dist/remote/remoteStateMake.js +46 -0
- package/dist/remote/remoteStateMake.js.map +1 -0
- package/dist/remote/remoteStateSend.d.ts +41 -0
- package/dist/remote/remoteStateSend.d.ts.map +1 -0
- package/dist/remote/remoteStateSend.js +67 -0
- package/dist/remote/remoteStateSend.js.map +1 -0
- package/dist/remote/remoteStateTypes.d.ts +103 -0
- package/dist/remote/remoteStateTypes.d.ts.map +1 -0
- package/dist/remote/remoteStateTypes.js +4 -0
- package/dist/remote/remoteStateTypes.js.map +1 -0
- package/dist/runtime/appRuntime.d.ts +10 -0
- package/dist/runtime/appRuntime.d.ts.map +1 -0
- package/dist/runtime/appRuntime.js +6 -0
- package/dist/runtime/appRuntime.js.map +1 -0
- package/dist/runtime/bus.d.ts +17 -0
- package/dist/runtime/bus.d.ts.map +1 -0
- package/dist/runtime/bus.js +12 -0
- package/dist/runtime/bus.js.map +1 -0
- package/dist/runtime/capturedAppRuntime.d.ts +7 -0
- package/dist/runtime/capturedAppRuntime.d.ts.map +1 -0
- package/dist/runtime/capturedAppRuntime.js +151 -0
- package/dist/runtime/capturedAppRuntime.js.map +1 -0
- package/dist/runtime/eventBudget.d.ts +32 -0
- package/dist/runtime/eventBudget.d.ts.map +1 -0
- package/dist/runtime/eventBudget.js +67 -0
- package/dist/runtime/eventBudget.js.map +1 -0
- package/dist/runtime/featureMount.d.ts +16 -0
- package/dist/runtime/featureMount.d.ts.map +1 -0
- package/dist/runtime/featureMount.js +54 -0
- package/dist/runtime/featureMount.js.map +1 -0
- package/dist/runtime/instrumentation.d.ts +18 -0
- package/dist/runtime/instrumentation.d.ts.map +1 -0
- package/dist/runtime/instrumentation.js +16 -0
- package/dist/runtime/instrumentation.js.map +1 -0
- package/dist/runtime/loop.d.ts +32 -0
- package/dist/runtime/loop.d.ts.map +1 -0
- package/dist/runtime/loop.js +128 -0
- package/dist/runtime/loop.js.map +1 -0
- package/dist/runtime/queries.d.ts +20 -0
- package/dist/runtime/queries.d.ts.map +1 -0
- package/dist/runtime/queries.js +21 -0
- package/dist/runtime/queries.js.map +1 -0
- package/dist/runtime/runtimeHandle.d.ts +56 -0
- package/dist/runtime/runtimeHandle.d.ts.map +1 -0
- package/dist/runtime/runtimeHandle.js +2 -0
- package/dist/runtime/runtimeHandle.js.map +1 -0
- package/dist/scene/scene.d.ts +55 -0
- package/dist/scene/scene.d.ts.map +1 -0
- package/dist/scene/scene.js +74 -0
- package/dist/scene/scene.js.map +1 -0
- package/dist/state/state.d.ts +54 -0
- package/dist/state/state.d.ts.map +1 -0
- package/dist/state/state.js +41 -0
- package/dist/state/state.js.map +1 -0
- package/dist/state/stateFamily.d.ts +59 -0
- package/dist/state/stateFamily.d.ts.map +1 -0
- package/dist/state/stateFamily.js +91 -0
- package/dist/state/stateFamily.js.map +1 -0
- package/dist/state/stateGroup.d.ts +36 -0
- package/dist/state/stateGroup.d.ts.map +1 -0
- package/dist/state/stateGroup.js +33 -0
- package/dist/state/stateGroup.js.map +1 -0
- package/dist/state/token.d.ts +35 -0
- package/dist/state/token.d.ts.map +1 -0
- package/dist/state/token.js +18 -0
- package/dist/state/token.js.map +1 -0
- package/dist/synced/syncedStore.d.ts +44 -0
- package/dist/synced/syncedStore.d.ts.map +1 -0
- package/dist/synced/syncedStore.js +32 -0
- package/dist/synced/syncedStore.js.map +1 -0
- package/dist/testkit/flight.testkit.d.ts +18 -0
- package/dist/testkit/flight.testkit.d.ts.map +1 -0
- package/dist/testkit/flight.testkit.js +45 -0
- package/dist/testkit/flight.testkit.js.map +1 -0
- package/dist/ui/node.d.ts +3 -0
- package/dist/ui/node.d.ts.map +1 -0
- package/dist/ui/node.js +2 -0
- package/dist/ui/node.js.map +1 -0
- package/dist/ui/trigger.d.ts +2 -0
- package/dist/ui/trigger.d.ts.map +1 -0
- package/dist/ui/trigger.js +2 -0
- package/dist/ui/trigger.js.map +1 -0
- package/dist/wire/tree.d.ts +32 -0
- package/dist/wire/tree.d.ts.map +1 -0
- package/dist/wire/tree.js +59 -0
- package/dist/wire/tree.js.map +1 -0
- package/dist/wire/triggers.d.ts +25 -0
- package/dist/wire/triggers.d.ts.map +1 -0
- package/dist/wire/triggers.js +31 -0
- package/dist/wire/triggers.js.map +1 -0
- package/package.json +17 -5
- package/src/boundary/boundary.test.ts +26 -23
- package/src/calc/asyncCalc.invalidate.test.ts +258 -55
- package/src/calc/asyncCalc.test.ts +225 -85
- package/src/calc/asyncCalc.ts +27 -141
- package/src/calc/asyncCalcTypes.test.ts +64 -0
- package/src/calc/asyncCalcTypes.ts +139 -0
- package/src/calc/calc.test.ts +10 -11
- package/src/calc/calcFamily.test.ts +12 -12
- package/src/channel/channel.ts +8 -106
- package/src/channel/procedures.ts +108 -0
- package/src/compose/composition.ts +49 -246
- package/src/compose/compositionTypes.ts +249 -0
- package/src/event/event.fromSource.test.ts +12 -12
- package/src/feature/feature.ts +50 -1210
- package/src/feature/feature.typecheck.ts +2 -61
- package/src/feature/featureBinding.ts +158 -0
- package/src/feature/featureClass.ts +162 -0
- package/src/feature/featureConfig.ts +192 -0
- package/src/feature/featureFactory.ts +163 -0
- package/src/feature/featureModule.ts +136 -0
- package/src/feature/featureModule.typecheck.ts +63 -0
- package/src/feature/featureNativeTree.ts +152 -0
- package/src/feature/featureRequirement.ts +82 -0
- package/src/feature/featureVariants.ts +234 -0
- package/src/feature/mountFeature.ts +54 -0
- package/src/graph/closure.ts +45 -226
- package/src/graph/services.ts +95 -0
- package/src/graph/summary.ts +134 -0
- package/src/internal/queryDriver.ts +20 -89
- package/src/internal/queryDriverHydrate.ts +45 -0
- package/src/internal/queryDriverTypes.ts +8 -10
- package/src/internal/store.test.ts +27 -6
- package/src/remote/pendingQueue.ts +145 -0
- package/src/remote/remoteState.test.ts +28 -22
- package/src/remote/remoteState.ts +63 -489
- package/src/remote/remoteStateMake.ts +97 -0
- package/src/remote/remoteStateSend.ts +122 -0
- package/src/remote/remoteStateTypes.ts +155 -0
- package/src/runtime/appRuntime.activation.test.ts +9 -5
- package/src/runtime/appRuntime.test.ts +40 -16
- package/src/runtime/appRuntime.ts +17 -472
- package/src/runtime/capturedAppRuntime.ts +274 -0
- package/src/runtime/eventBudget.test.ts +38 -8
- package/src/runtime/featureMount.ts +94 -0
- package/src/runtime/hardening.test.ts +18 -4
- package/src/runtime/instrumentation.test.ts +49 -12
- package/src/runtime/loop.test.ts +51 -10
- package/src/runtime/runtimeHandle.ts +124 -0
- package/src/state/stateFamily.test.ts +25 -8
- package/src/testkit/flight.testkit.ts +9 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Cause, Context, Effect, Exit, Fiber, Option, Scope } from 'effect';
|
|
2
|
+
import { FeatureLoadFailed } from '../internal/errors.js';
|
|
3
|
+
import { EngineRequirements } from './loop.js';
|
|
4
|
+
const isObjectLike = (candidate) => (typeof candidate === 'object' || typeof candidate === 'function') && candidate !== null;
|
|
5
|
+
const isContextTag = (candidate) => isObjectLike(candidate) &&
|
|
6
|
+
Context.TagTypeId in candidate &&
|
|
7
|
+
'key' in candidate &&
|
|
8
|
+
typeof candidate.key === 'string';
|
|
9
|
+
const isUnknownArray = (candidate) => Array.isArray(candidate);
|
|
10
|
+
const requirementAvailable = (context, requirement) => {
|
|
11
|
+
if (isContextTag(requirement)) {
|
|
12
|
+
return Option.isSome(Context.getOption(context, requirement));
|
|
13
|
+
}
|
|
14
|
+
if (!isObjectLike(requirement)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if ('store' in requirement) {
|
|
18
|
+
return requirementAvailable(context, requirement.store);
|
|
19
|
+
}
|
|
20
|
+
if ('members' in requirement && isUnknownArray(requirement.members)) {
|
|
21
|
+
return requirement.members.every((member) => requirementAvailable(context, member));
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
};
|
|
25
|
+
export const hasFeatureRequirements = (context, requires) => EngineRequirements.every((tag) => requirementAvailable(context, tag)) &&
|
|
26
|
+
requires.every((requirement) => requirementAvailable(context, requirement));
|
|
27
|
+
export const featureMountFailure = (message) => new FeatureLoadFailed({ cause: message });
|
|
28
|
+
/**
|
|
29
|
+
* Fork a feature mount onto the host runtime and hand back its disposer. Both
|
|
30
|
+
* the typed and captured mount paths settle failures and tear down identically.
|
|
31
|
+
*/
|
|
32
|
+
export const forkFeatureMount = (host, scope, mount, onFailed) => {
|
|
33
|
+
const fiber = host.runFork(mount.pipe(Effect.provideService(Scope.Scope, scope), Effect.matchCause({
|
|
34
|
+
onFailure: (cause) => {
|
|
35
|
+
// Disposer interruption is cancellation, not a failed feature.
|
|
36
|
+
if (!Cause.isInterruptedOnly(cause)) {
|
|
37
|
+
onFailed(Option.getOrElse(Cause.failureOption(cause), () => new FeatureLoadFailed({ cause })));
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
onSuccess: () => undefined,
|
|
41
|
+
})));
|
|
42
|
+
return () => {
|
|
43
|
+
// Interrupt first, then await finalizer registration before closing the scope.
|
|
44
|
+
fiber.unsafeInterruptAsFork(fiber.id());
|
|
45
|
+
const close = Fiber.await(fiber).pipe(Effect.zipRight(Scope.close(scope, Exit.succeed(undefined))));
|
|
46
|
+
if (host.isDisposed()) {
|
|
47
|
+
Effect.runFork(close);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
host.runFork(close);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=featureMount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureMount.js","sourceRoot":"","sources":["../../src/runtime/featureMount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Effect, FiberRef } from 'effect';
|
|
2
|
+
import type { Priority } from './bus.js';
|
|
3
|
+
export type SpanEnd = () => void;
|
|
4
|
+
export interface Instrumentation {
|
|
5
|
+
eventDispatched(tag: string, priority: Priority): void;
|
|
6
|
+
reducerRun(name: string, eventTag: string): SpanEnd;
|
|
7
|
+
stateUpdated(name: string): void;
|
|
8
|
+
calcRecomputed(name: string): SpanEnd;
|
|
9
|
+
queryRun(name: string): SpanEnd;
|
|
10
|
+
procedureRun(name: string, channel: string, eventTag: string): SpanEnd;
|
|
11
|
+
uiRendered(composition: string): SpanEnd;
|
|
12
|
+
frame(eventCount: number): SpanEnd;
|
|
13
|
+
}
|
|
14
|
+
export declare const noopInstrumentation: Instrumentation;
|
|
15
|
+
export declare const CurrentInstrumentation: FiberRef.FiberRef<Instrumentation>;
|
|
16
|
+
export declare const resolveInstrumentation: Effect.Effect<Instrumentation>;
|
|
17
|
+
export declare const stateUpdateHook: (instrumentation: Instrumentation, name: string) => (() => void);
|
|
18
|
+
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/runtime/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAe,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAA;AAEhC,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IACnD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IACtE,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;CACnC;AAID,eAAO,MAAM,mBAAmB,EAAE,eASjC,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAGrE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAC5B,CAAA;AAEtC,eAAO,MAAM,eAAe,GAAI,iBAAiB,eAAe,EAAE,MAAM,MAAM,KAAG,CAAC,MAAM,IAAI,CACM,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effect, FiberRef, GlobalValue } from 'effect';
|
|
2
|
+
const noopSpanEnd = () => { };
|
|
3
|
+
export const noopInstrumentation = {
|
|
4
|
+
eventDispatched: () => { },
|
|
5
|
+
reducerRun: () => noopSpanEnd,
|
|
6
|
+
stateUpdated: () => { },
|
|
7
|
+
calcRecomputed: () => noopSpanEnd,
|
|
8
|
+
queryRun: () => noopSpanEnd,
|
|
9
|
+
procedureRun: () => noopSpanEnd,
|
|
10
|
+
uiRendered: () => noopSpanEnd,
|
|
11
|
+
frame: () => noopSpanEnd,
|
|
12
|
+
};
|
|
13
|
+
export const CurrentInstrumentation = GlobalValue.globalValue(Symbol.for('reform/CurrentInstrumentation'), () => FiberRef.unsafeMake(noopInstrumentation));
|
|
14
|
+
export const resolveInstrumentation = FiberRef.get(CurrentInstrumentation);
|
|
15
|
+
export const stateUpdateHook = (instrumentation, name) => instrumentation === noopInstrumentation ? noopSpanEnd : () => instrumentation.stateUpdated(name);
|
|
16
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/runtime/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAgBtD,MAAM,WAAW,GAAY,GAAG,EAAE,GAAE,CAAC,CAAA;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAClD,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;IACzB,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW;IAC7B,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;IACtB,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW;IACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW;IAC3B,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;IAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW;IAC7B,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW;CACzB,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAuC,WAAW,CAAC,WAAW,CAC/F,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAC3C,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAkB,mBAAmB,CAAC,CAChE,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GACjC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,eAAgC,EAAE,IAAY,EAAgB,EAAE,CAC9F,eAAe,KAAK,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Context, Layer } from 'effect';
|
|
2
|
+
import { Channels, Procedures } from '../channel/channel.js';
|
|
3
|
+
import { Bus, type Tagged } from './bus.js';
|
|
4
|
+
import { Queries } from './queries.js';
|
|
5
|
+
export interface ReducerEntry {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly handles: ReadonlySet<string>;
|
|
8
|
+
readonly apply: (event: Tagged) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface ReducerRegistry {
|
|
11
|
+
readonly entries: Array<ReducerEntry>;
|
|
12
|
+
readonly byName: Map<string, Set<ReducerEntry>>;
|
|
13
|
+
readonly byTag: Map<string, Set<ReducerEntry>>;
|
|
14
|
+
readonly tagged: (tag: string) => ReadonlyArray<ReducerEntry>;
|
|
15
|
+
readonly register: (entry: ReducerEntry) => void;
|
|
16
|
+
readonly unregister: (entry: ReducerEntry) => void;
|
|
17
|
+
}
|
|
18
|
+
declare const ReducersBase: Context.TagClass<Reducers, 'reform/Reducers', ReducerRegistry>;
|
|
19
|
+
export declare class Reducers extends ReducersBase {
|
|
20
|
+
}
|
|
21
|
+
export declare const reducersLayer: Layer.Layer<Reducers>;
|
|
22
|
+
export declare const Engine: Layer.Layer<Bus | Reducers | Channels | Procedures | Queries>;
|
|
23
|
+
export declare const EngineRequirements: readonly [
|
|
24
|
+
typeof Bus,
|
|
25
|
+
typeof Reducers,
|
|
26
|
+
typeof Channels,
|
|
27
|
+
typeof Procedures,
|
|
28
|
+
typeof Queries
|
|
29
|
+
];
|
|
30
|
+
export type EngineServices = Layer.Layer.Success<typeof Engine>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAU,KAAK,EAAyB,MAAM,QAAQ,CAAA;AAClG,OAAO,EAAE,QAAQ,EAAiB,UAAU,EAAmB,MAAM,oBAAoB,CAAA;AAGzF,OAAO,EAAE,GAAG,EAA2B,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;AAGjE,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAA;AAEjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;CACnD;AAED,QAAA,MAAM,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,eAAe,CAEnD,CAAA;AAC9B,qBAAa,QAAS,SAAQ,YAAY;CAAG;AAmF7C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAA6C,CAAA;AA8E7F,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAY9E,CAAA;AAEH,eAAO,MAAM,kBAAkB,EAAE,SAAS;IACxC,OAAO,GAAG;IACV,OAAO,QAAQ;IACf,OAAO,QAAQ;IACf,OAAO,UAAU;IACjB,OAAO,OAAO;CACkC,CAAA;AAElD,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,CAAA"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Array as Arr, Cause, Chunk, Context, Effect, Layer, Option, PubSub, Queue } from 'effect';
|
|
2
|
+
import { Channels, channelsLayer, Procedures, proceduresLayer } from '../channel/channel.js';
|
|
3
|
+
import { makeBucketCache } from '../internal/bucketCache.js';
|
|
4
|
+
import { notificationsLayer } from '../internal/scheduler.js';
|
|
5
|
+
import { Bus, busLayer } from './bus.js';
|
|
6
|
+
import { enforceBudget, makeTickCounter, resolveCurrentEventBudget } from './eventBudget.js';
|
|
7
|
+
import { resolveInstrumentation } from './instrumentation.js';
|
|
8
|
+
import { Queries, queriesLayer } from './queries.js';
|
|
9
|
+
const ReducersBase = Context.Tag('reform/Reducers')();
|
|
10
|
+
export class Reducers extends ReducersBase {
|
|
11
|
+
}
|
|
12
|
+
const dropFromBuckets = (map, key, target) => {
|
|
13
|
+
const bucket = map.get(key);
|
|
14
|
+
if (bucket === undefined) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
bucket.delete(target);
|
|
18
|
+
if (bucket.size === 0) {
|
|
19
|
+
map.delete(key);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const makeReducerRegistry = () => {
|
|
23
|
+
const entries = new Set();
|
|
24
|
+
const byName = new Map();
|
|
25
|
+
const byTag = new Map();
|
|
26
|
+
const tagged = makeBucketCache(byTag);
|
|
27
|
+
const snapshot = {
|
|
28
|
+
value: Option.some([]),
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
get entries() {
|
|
32
|
+
return Option.getOrElse(snapshot.value, () => {
|
|
33
|
+
const current = Array.from(entries);
|
|
34
|
+
snapshot.value = Option.some(current);
|
|
35
|
+
return current;
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
byName,
|
|
39
|
+
byTag,
|
|
40
|
+
tagged: tagged.read,
|
|
41
|
+
register: (entry) => {
|
|
42
|
+
entries.add(entry);
|
|
43
|
+
snapshot.value = Option.none();
|
|
44
|
+
getOrCreateBucket(byName, entry.name).add(entry);
|
|
45
|
+
entry.handles.forEach((tag) => {
|
|
46
|
+
getOrCreateBucket(byTag, tag).add(entry);
|
|
47
|
+
tagged.invalidate(tag);
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
unregister: (entry) => {
|
|
51
|
+
entries.delete(entry);
|
|
52
|
+
snapshot.value = Option.none();
|
|
53
|
+
dropFromBuckets(byName, entry.name, entry);
|
|
54
|
+
entry.handles.forEach((tag) => {
|
|
55
|
+
dropFromBuckets(byTag, tag, entry);
|
|
56
|
+
tagged.invalidate(tag);
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const getOrCreateBucket = (map, key) => {
|
|
62
|
+
const existing = map.get(key);
|
|
63
|
+
if (existing !== undefined) {
|
|
64
|
+
return existing;
|
|
65
|
+
}
|
|
66
|
+
const created = new Set();
|
|
67
|
+
map.set(key, created);
|
|
68
|
+
return created;
|
|
69
|
+
};
|
|
70
|
+
const isolateApply = (reducer, event, instrumentation) => {
|
|
71
|
+
const end = instrumentation.reducerRun(reducer.name, event._tag);
|
|
72
|
+
return Effect.runSync(Effect.match(Effect.try({
|
|
73
|
+
try: () => reducer.apply(event),
|
|
74
|
+
catch: (error) => error,
|
|
75
|
+
}).pipe(Effect.ensuring(Effect.sync(end))), {
|
|
76
|
+
onFailure: (error) => Option.some({ event, error }),
|
|
77
|
+
onSuccess: () => Option.none(),
|
|
78
|
+
}));
|
|
79
|
+
};
|
|
80
|
+
export const reducersLayer = Layer.sync(Reducers, makeReducerRegistry);
|
|
81
|
+
// Partitioning keeps dispatch order stable within each priority.
|
|
82
|
+
const rank = (priority) => (priority === 'High' ? 0 : 1);
|
|
83
|
+
const drain = Effect.gen(function* () {
|
|
84
|
+
const bus = yield* Bus;
|
|
85
|
+
const reducers = yield* Reducers;
|
|
86
|
+
const { byName: channels } = yield* Channels;
|
|
87
|
+
const procedures = yield* Procedures;
|
|
88
|
+
const instrumentation = yield* resolveInstrumentation;
|
|
89
|
+
const budget = yield* resolveCurrentEventBudget;
|
|
90
|
+
// Child feature runtimes share this engine-level counter with the root.
|
|
91
|
+
const counter = makeTickCounter(budget);
|
|
92
|
+
const subscription = yield* PubSub.subscribe(bus);
|
|
93
|
+
yield* Effect.forkScoped(Effect.forever(Effect.gen(function* () {
|
|
94
|
+
const first = yield* Queue.take(subscription);
|
|
95
|
+
const rest = yield* Queue.takeAll(subscription);
|
|
96
|
+
const frame = [first, ...Chunk.toArray(rest)];
|
|
97
|
+
const [high, normal] = Arr.partition(frame, (envelope) => rank(envelope.priority) !== 0);
|
|
98
|
+
const ordered = [...high, ...normal];
|
|
99
|
+
// Check before folding so runaway frames stop at the hard limit.
|
|
100
|
+
const sample = yield* Effect.sync(() => counter.add(ordered.length));
|
|
101
|
+
yield* enforceBudget(budget, sample);
|
|
102
|
+
// One synchronous block coalesces reducer writes into a single flush.
|
|
103
|
+
const failures = yield* Effect.sync(() => {
|
|
104
|
+
const endFrame = instrumentation.frame(ordered.length);
|
|
105
|
+
ordered.forEach((envelope) => instrumentation.eventDispatched(envelope.event._tag, envelope.priority));
|
|
106
|
+
const collected = Arr.flatMap(ordered, (envelope) =>
|
|
107
|
+
// A reducer defect must not abandon the remaining frame.
|
|
108
|
+
Arr.filterMap(reducers.tagged(envelope.event._tag), (reducer) => isolateApply(reducer, envelope.event, instrumentation)));
|
|
109
|
+
ordered.forEach((envelope) => {
|
|
110
|
+
// channelsFor is distinct; per-procedure offers would double-run shared channels.
|
|
111
|
+
procedures.channelsFor(envelope.event._tag).forEach((channelName) => {
|
|
112
|
+
channels.get(channelName)?.offer(envelope.event);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
endFrame();
|
|
116
|
+
return collected;
|
|
117
|
+
});
|
|
118
|
+
yield* Effect.forEach(failures, (failure) => Effect.logError(`reform: reducer threw handling '${failure.event._tag}'`, failure.error), { discard: true });
|
|
119
|
+
}).pipe(
|
|
120
|
+
// Typed overflow halts the loop; defects are logged and the next tick continues.
|
|
121
|
+
Effect.catchAllCause((cause) => Option.match(Cause.failureOption(cause), {
|
|
122
|
+
onSome: () => Effect.failCause(cause),
|
|
123
|
+
onNone: () => Effect.logError('reform: drain tick crashed', cause),
|
|
124
|
+
})))).pipe(Effect.tapErrorCause((cause) => Effect.logError('reform: event budget exceeded — the drain loop has been halted', cause)), Effect.tapError((overflow) => Effect.sync(() => budget.onOverflow(overflow)))));
|
|
125
|
+
});
|
|
126
|
+
export const Engine = Layer.scopedDiscard(drain).pipe(Layer.provideMerge(Layer.mergeAll(busLayer, reducersLayer, channelsLayer, proceduresLayer, notificationsLayer, queriesLayer)));
|
|
127
|
+
export const EngineRequirements = [Bus, Reducers, Channels, Procedures, Queries];
|
|
128
|
+
//# sourceMappingURL=loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Context, Layer } from 'effect';
|
|
2
|
+
import { type QueryState } from '../calc/queryState.js';
|
|
3
|
+
export interface QueryHandle {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly invalidate: () => void;
|
|
6
|
+
readonly refetch: () => void;
|
|
7
|
+
readonly snapshot: () => QueryState<unknown, unknown>;
|
|
8
|
+
readonly subscribe: (listener: () => void) => () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface QueryRegistry {
|
|
11
|
+
readonly byName: Map<string, QueryHandle>;
|
|
12
|
+
readonly register: (handle: QueryHandle) => void;
|
|
13
|
+
readonly unregister: (handle: QueryHandle) => void;
|
|
14
|
+
}
|
|
15
|
+
declare const QueriesBase: Context.TagClass<Queries, 'reform/Queries', QueryRegistry>;
|
|
16
|
+
export declare class Queries extends QueriesBase {
|
|
17
|
+
}
|
|
18
|
+
export declare const queriesLayer: Layer.Layer<Queries>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/runtime/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACrD,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CACzD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CACnD;AAED,QAAA,MAAM,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAEjD,CAAA;AAC3B,qBAAa,OAAQ,SAAQ,WAAW;CAAG;AAiB3C,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAA0C,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Context, Layer } from 'effect';
|
|
2
|
+
import {} from '../calc/queryState.js';
|
|
3
|
+
const QueriesBase = Context.Tag('reform/Queries')();
|
|
4
|
+
export class Queries extends QueriesBase {
|
|
5
|
+
}
|
|
6
|
+
const makeQueryRegistry = () => {
|
|
7
|
+
const byName = new Map();
|
|
8
|
+
return {
|
|
9
|
+
byName,
|
|
10
|
+
register: (handle) => {
|
|
11
|
+
byName.set(handle.name, handle);
|
|
12
|
+
},
|
|
13
|
+
unregister: (handle) => {
|
|
14
|
+
if (byName.get(handle.name) === handle) {
|
|
15
|
+
byName.delete(handle.name);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export const queriesLayer = Layer.sync(Queries, makeQueryRegistry);
|
|
21
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/runtime/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAmB,MAAM,oBAAoB,CAAA;AAgBpD,MAAM,WAAW,GAA+D,OAAO,CAAC,GAAG,CACzF,gBAAgB,CACjB,EAA0B,CAAA;AAC3B,MAAM,OAAO,OAAQ,SAAQ,WAAW;CAAG;AAE3C,MAAM,iBAAiB,GAAG,GAAkB,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC7C,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACjC,CAAC;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAyB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Context, Effect, Option } from 'effect';
|
|
2
|
+
import type { CompositionActivation, CompositionId, RequiredSlotIdentities } from '../compose/composition.js';
|
|
3
|
+
import type { UiContract } from '../compose/ui.js';
|
|
4
|
+
import type { AnyFeatureBinding, CapturedFeatureBinding, FeatureBinding, FeatureRequirement } from '../feature/feature.js';
|
|
5
|
+
import type { AnyFeatureGraphSummary, FeatureSummaryCompositionIdentity, FeatureSummaryContract, FeatureSummaryInput, FeatureSummaryMountProps, FeatureSummaryName, FeatureSummaryOpenServices, FeatureSummaryUsesInput } from '../graph/closure.js';
|
|
6
|
+
import type { FeatureLoadFailed } from '../internal/errors.js';
|
|
7
|
+
import type { Node } from '../ui/node.js';
|
|
8
|
+
import type { Priority, Tagged } from './bus.js';
|
|
9
|
+
import type { Instrumentation } from './instrumentation.js';
|
|
10
|
+
import type { EngineServices } from './loop.js';
|
|
11
|
+
export declare const UnspecifiedRuntimeServicesTypeId: unique symbol;
|
|
12
|
+
export type UnspecifiedRuntimeServicesTypeId = typeof UnspecifiedRuntimeServicesTypeId;
|
|
13
|
+
export interface UnspecifiedRuntimeServices {
|
|
14
|
+
readonly [UnspecifiedRuntimeServicesTypeId]: UnspecifiedRuntimeServicesTypeId;
|
|
15
|
+
}
|
|
16
|
+
export type FeatureMountHandlersExternalApi<UsesInput extends boolean, Input, Services> = {
|
|
17
|
+
readonly onLive: (runtime: RuntimeHandle<Services>) => void;
|
|
18
|
+
readonly onFailed: (error: FeatureLoadFailed) => void;
|
|
19
|
+
} & (UsesInput extends true ? {
|
|
20
|
+
readonly props: Input;
|
|
21
|
+
} : {
|
|
22
|
+
readonly props?: never;
|
|
23
|
+
});
|
|
24
|
+
export type FeatureMountHandlers<UsesInput extends boolean, Input, Services> = FeatureMountHandlersExternalApi<UsesInput, Input, Services>;
|
|
25
|
+
export type RuntimeFeatureAvailability<Services, OpenServices> = [
|
|
26
|
+
EngineServices | OpenServices
|
|
27
|
+
] extends [Services] ? object : {
|
|
28
|
+
readonly missingFeatureServices: Exclude<EngineServices | OpenServices, Services>;
|
|
29
|
+
};
|
|
30
|
+
export interface AnyFeatureMountHandlers {
|
|
31
|
+
readonly props: unknown;
|
|
32
|
+
readonly onLive: <Services>(runtime: RuntimeHandle<Services>) => void;
|
|
33
|
+
readonly onFailed: (error: FeatureLoadFailed) => void;
|
|
34
|
+
}
|
|
35
|
+
export interface CapturedFeatureMountHandlers<Props, HostServices, FeatureServices, C extends UiContract, N extends string, Identity> {
|
|
36
|
+
readonly props: Props;
|
|
37
|
+
readonly onLive: (runtime: RuntimeHandle<HostServices | FeatureServices | CompositionId<N, Identity, RequiredSlotIdentities<C>>>) => void;
|
|
38
|
+
readonly onFailed: (error: FeatureLoadFailed) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface RuntimeHandle<Services = UnspecifiedRuntimeServices> {
|
|
41
|
+
read<Identifier extends Services, Service>(tag: Context.Tag<Identifier, Service>): Service;
|
|
42
|
+
readOption<Identifier, Service>(tag: Context.Tag<Identifier, Service>): Option.Option<Service>;
|
|
43
|
+
runRender(effect: Effect.Effect<Node, never, never>): Node;
|
|
44
|
+
dispatch(priority: Priority, event: Tagged): void;
|
|
45
|
+
mountScoped(activation: CompositionActivation): () => void;
|
|
46
|
+
mountFeature<Summary extends AnyFeatureGraphSummary, ROut, const DirectRequires extends ReadonlyArray<FeatureRequirement>>(binding: [EngineServices | FeatureSummaryOpenServices<Summary>] extends [Services] ? FeatureBinding<Summary, ROut, DirectRequires> : never, handlers: FeatureMountHandlers<FeatureSummaryUsesInput<Summary>, FeatureSummaryInput<Summary>, Services | ROut>): () => void;
|
|
47
|
+
mountCapturedFeature<Summary extends AnyFeatureGraphSummary, ROut, const DirectRequires extends ReadonlyArray<FeatureRequirement>>(binding: CapturedFeatureBinding<Summary, ROut, DirectRequires> & RuntimeFeatureAvailability<Services, FeatureSummaryOpenServices<Summary>>, handlers: CapturedFeatureMountHandlers<FeatureSummaryMountProps<Summary>, Services, ROut, FeatureSummaryContract<Summary>, FeatureSummaryName<Summary>, FeatureSummaryCompositionIdentity<Summary>>): () => void;
|
|
48
|
+
mountAnyFeature(binding: AnyFeatureBinding, handlers: AnyFeatureMountHandlers): () => void;
|
|
49
|
+
readonly instrumentation: Instrumentation;
|
|
50
|
+
}
|
|
51
|
+
export interface AppRuntime<Services = UnspecifiedRuntimeServices> extends RuntimeHandle<Services> {
|
|
52
|
+
boot(): void;
|
|
53
|
+
dispose(): void;
|
|
54
|
+
isDisposed(): boolean;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=runtimeHandle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeHandle.d.ts","sourceRoot":"","sources":["../../src/runtime/runtimeHandle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeHandle.js","sourceRoot":"","sources":["../../src/runtime/runtimeHandle.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,gCAAgC,GAAkB,MAAM,CAAC,GAAG,CACvE,mCAAmC,CACpC,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Layer } from 'effect';
|
|
2
|
+
import type { AnyComposition, CompositionClass, CompositionId, CompositionReflection, HasExactCompositionId } from '../compose/composition.js';
|
|
3
|
+
import type { UiContract } from '../compose/ui.js';
|
|
4
|
+
import type { EventOf } from '../event/event.js';
|
|
5
|
+
import { type EagerFeatureClass, type FeatureRequirement } from '../feature/feature.js';
|
|
6
|
+
import type { SeedsOf } from '../state/stateGroup.js';
|
|
7
|
+
import type { Bus } from '../runtime/bus.js';
|
|
8
|
+
import { type Instrumentation } from '../runtime/instrumentation.js';
|
|
9
|
+
import type { EngineServices } from '../runtime/loop.js';
|
|
10
|
+
export type MountedServices = CompositionId<string> | Bus;
|
|
11
|
+
export type SceneCapture<C extends UiContract, S extends ReadonlyArray<unknown>, Result> = <Services, P, N extends string, Identity>(scene: CapturedScene<C, S, Services, P, N, Identity>) => Result;
|
|
12
|
+
export type AnySceneCapture<Result> = <C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity>(scene: CapturedScene<C, S, Services, P, N, Identity>) => Result;
|
|
13
|
+
interface SceneOptionalFields {
|
|
14
|
+
readonly boot: ReadonlyArray<BootEvent>;
|
|
15
|
+
readonly instrumentation: Instrumentation;
|
|
16
|
+
}
|
|
17
|
+
export interface AnySceneExternalApi extends Partial<SceneOptionalFields> {
|
|
18
|
+
readonly kind: 'Scene';
|
|
19
|
+
readonly composition: AnyComposition;
|
|
20
|
+
readonly captureAny: <Result>(visit: AnySceneCapture<Result>) => Result;
|
|
21
|
+
}
|
|
22
|
+
export type AnyScene = AnySceneExternalApi;
|
|
23
|
+
export interface Scene<C extends UiContract = UiContract, S extends ReadonlyArray<unknown> = ReadonlyArray<unknown>> extends AnySceneExternalApi {
|
|
24
|
+
readonly composition: AnyComposition & CompositionReflection<unknown, C, S>;
|
|
25
|
+
readonly capture: <Result>(visit: SceneCapture<C, S, Result>) => Result;
|
|
26
|
+
}
|
|
27
|
+
type BootEvent = EventOf<string, unknown>;
|
|
28
|
+
export interface CapturedScene<C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity = unknown> extends Scene<C, S> {
|
|
29
|
+
readonly kind: 'Scene';
|
|
30
|
+
readonly composition: CompositionClass<P, C, S, N, Identity>;
|
|
31
|
+
readonly provide: ReadonlyArray<Layer.Layer<Services, never, never>>;
|
|
32
|
+
}
|
|
33
|
+
interface SceneConfigOptionalFields {
|
|
34
|
+
readonly boot: ReadonlyArray<BootEvent>;
|
|
35
|
+
}
|
|
36
|
+
export interface SceneConfig<Services> extends Partial<SceneConfigOptionalFields> {
|
|
37
|
+
readonly provide: ReadonlyArray<Layer.Layer<Services, never, never>>;
|
|
38
|
+
}
|
|
39
|
+
type SceneConfigIncludingRootComposition<Services, N extends string, Identity> = HasExactCompositionId<Services, N, Identity> extends true ? SceneConfig<Services> : SceneConfig<Services> & {
|
|
40
|
+
readonly missingCompositionService: 'The scene must provide its root composition';
|
|
41
|
+
};
|
|
42
|
+
export declare const scene: <P, C extends UiContract, S extends ReadonlyArray<unknown>, N extends string, Identity, Services>(composition: CompositionClass<P, C, S, N, Identity>, config: SceneConfigIncludingRootComposition<Services, N, Identity>) => CapturedScene<C, S, Services, P, N, Identity>;
|
|
43
|
+
export interface FeatureSceneConfig<OpenServices> {
|
|
44
|
+
readonly provide: Layer.Layer<EngineServices | OpenServices, never, never>;
|
|
45
|
+
}
|
|
46
|
+
export declare const featureScene: <FeatureIdentity, P, C extends UiContract, ROut, DirectRequires extends ReadonlyArray<FeatureRequirement>, OpenServices, S extends ReadonlyArray<unknown>, N extends string, Identity>(feature: EagerFeatureClass<FeatureIdentity, P, C, ROut, DirectRequires, OpenServices, S, N, Identity>, config: FeatureSceneConfig<OpenServices>) => CapturedScene<C, S, ROut | EngineServices | OpenServices, P, N, Identity>;
|
|
47
|
+
export declare function seedScene<C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity>(base: CapturedScene<C, S, Services, P, N, Identity>, seeds: SeedsOf<S>): CapturedScene<C, S, Services, P, N, Identity>;
|
|
48
|
+
export declare function seedScene<C extends UiContract, S extends ReadonlyArray<unknown>>(base: Scene<C, S>, seeds: SeedsOf<S>): Scene<C, S>;
|
|
49
|
+
export declare const seedAnyScene: (base: AnyScene, seeds: Readonly<Record<string, unknown>>) => AnyScene;
|
|
50
|
+
export declare function profiledScene<C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity>(base: CapturedScene<C, S, Services, P, N, Identity>, instrumentation: Instrumentation): CapturedScene<C, S, Services, P, N, Identity>;
|
|
51
|
+
export declare function profiledScene<C extends UiContract, S extends ReadonlyArray<unknown>>(base: Scene<C, S>, instrumentation: Instrumentation): Scene<C, S>;
|
|
52
|
+
export declare const sceneInstrumentation: (candidate: AnyScene) => Instrumentation;
|
|
53
|
+
export declare const isScene: (candidate: unknown) => candidate is AnyScene;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=scene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../../src/scene/scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Layer, Predicate, Struct } from 'effect';
|
|
2
|
+
import { tree } from '../feature/feature.js';
|
|
3
|
+
import { CurrentSeedOverrides } from '../internal/seeds.js';
|
|
4
|
+
import { CurrentInstrumentation, noopInstrumentation, } from '../runtime/instrumentation.js';
|
|
5
|
+
const makeSceneValue = (composition, config) => {
|
|
6
|
+
const sceneValue = {
|
|
7
|
+
kind: 'Scene',
|
|
8
|
+
composition,
|
|
9
|
+
provide: config.provide,
|
|
10
|
+
...(config.boot !== undefined ? { boot: config.boot } : {}),
|
|
11
|
+
...(config.instrumentation !== undefined ? { instrumentation: config.instrumentation } : {}),
|
|
12
|
+
capture: (visit) => visit(sceneValue),
|
|
13
|
+
captureAny: (visit) => visit(sceneValue),
|
|
14
|
+
};
|
|
15
|
+
return sceneValue;
|
|
16
|
+
};
|
|
17
|
+
export const scene = (composition, config) => {
|
|
18
|
+
return makeSceneValue(composition, config);
|
|
19
|
+
};
|
|
20
|
+
export const featureScene = (feature, config) => {
|
|
21
|
+
const native = tree(feature.token);
|
|
22
|
+
const app = native.eagerModule.layer.pipe(Layer.provideMerge(config.provide));
|
|
23
|
+
return makeSceneValue(native.composition, {
|
|
24
|
+
provide: [app],
|
|
25
|
+
boot: native.binding.boot,
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export function seedScene(base, seeds) {
|
|
29
|
+
if (Struct.keys(seeds).length === 0) {
|
|
30
|
+
return base;
|
|
31
|
+
}
|
|
32
|
+
// Tooling overlays closed layers; member names, not group names, are the keys.
|
|
33
|
+
return base.capture((exactScene) => makeSceneValue(exactScene.composition, {
|
|
34
|
+
provide: exactScene.provide.map(Layer.locally(CurrentSeedOverrides, seeds)),
|
|
35
|
+
...(exactScene.boot === undefined ? {} : { boot: exactScene.boot }),
|
|
36
|
+
...(exactScene.instrumentation === undefined
|
|
37
|
+
? {}
|
|
38
|
+
: { instrumentation: exactScene.instrumentation }),
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
export const seedAnyScene = (base, seeds) => {
|
|
42
|
+
if (Struct.keys(seeds).length === 0) {
|
|
43
|
+
return base;
|
|
44
|
+
}
|
|
45
|
+
return base.captureAny((exactScene) => makeSceneValue(exactScene.composition, {
|
|
46
|
+
provide: exactScene.provide.map(Layer.locally(CurrentSeedOverrides, seeds)),
|
|
47
|
+
...(exactScene.boot === undefined ? {} : { boot: exactScene.boot }),
|
|
48
|
+
...(exactScene.instrumentation === undefined
|
|
49
|
+
? {}
|
|
50
|
+
: { instrumentation: exactScene.instrumentation }),
|
|
51
|
+
}));
|
|
52
|
+
};
|
|
53
|
+
export function profiledScene(base, instrumentation) {
|
|
54
|
+
return base.capture((exactScene) => makeSceneValue(exactScene.composition, {
|
|
55
|
+
provide: exactScene.provide.map(Layer.locally(CurrentInstrumentation, instrumentation)),
|
|
56
|
+
...(exactScene.boot === undefined ? {} : { boot: exactScene.boot }),
|
|
57
|
+
instrumentation,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
export const sceneInstrumentation = (candidate) => candidate.instrumentation ?? noopInstrumentation;
|
|
61
|
+
const isReflectableComposition = (candidate) => typeof candidate === 'function' &&
|
|
62
|
+
Predicate.hasProperty(candidate, 'manifest') &&
|
|
63
|
+
Predicate.isRecord(candidate.manifest) &&
|
|
64
|
+
candidate.manifest['kind'] === 'Composition' &&
|
|
65
|
+
Predicate.hasProperty(candidate, 'parseProps') &&
|
|
66
|
+
typeof candidate.parseProps === 'function' &&
|
|
67
|
+
Predicate.hasProperty(candidate, 'capture') &&
|
|
68
|
+
typeof candidate.capture === 'function';
|
|
69
|
+
export const isScene = (candidate) => Predicate.isRecord(candidate) &&
|
|
70
|
+
candidate['kind'] === 'Scene' &&
|
|
71
|
+
isReflectableComposition(candidate['composition']) &&
|
|
72
|
+
typeof candidate['capture'] === 'function' &&
|
|
73
|
+
typeof candidate['captureAny'] === 'function';
|
|
74
|
+
//# sourceMappingURL=scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../../src/scene/scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Context, Effect, Layer, Option, type ParseResult, Schema } from 'effect';
|
|
2
|
+
import type { Effect as EffectType } from 'effect/Effect';
|
|
3
|
+
import { type Manifest } from '../definition/definition.js';
|
|
4
|
+
import { type Store } from '../internal/store.js';
|
|
5
|
+
export interface StateOptionsExternalApi {
|
|
6
|
+
readonly title?: string;
|
|
7
|
+
readonly description?: string;
|
|
8
|
+
}
|
|
9
|
+
export type StateOptions = StateOptionsExternalApi;
|
|
10
|
+
export interface StateSchemaReflection {
|
|
11
|
+
readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
|
|
12
|
+
}
|
|
13
|
+
export interface StateManifestExternalApi<N extends string> extends Manifest {
|
|
14
|
+
readonly kind: 'State';
|
|
15
|
+
readonly name: N;
|
|
16
|
+
readonly schema: StateSchemaReflection;
|
|
17
|
+
readonly title?: string;
|
|
18
|
+
readonly description?: string;
|
|
19
|
+
}
|
|
20
|
+
export type StateManifest<N extends string> = StateManifestExternalApi<N>;
|
|
21
|
+
export declare const StateStoreTypeId: unique symbol;
|
|
22
|
+
export type StateStoreTypeId = typeof StateStoreTypeId;
|
|
23
|
+
export interface StateStore<N extends string, in out A> extends Store<A> {
|
|
24
|
+
readonly [StateStoreTypeId]: N;
|
|
25
|
+
}
|
|
26
|
+
export type StateCapture<Result> = <N extends string, A>(state: StateClass<N, A>) => Result;
|
|
27
|
+
export interface AnyState {
|
|
28
|
+
new (): {};
|
|
29
|
+
readonly manifest: StateManifest<string>;
|
|
30
|
+
readonly capture: <Result>(visit: StateCapture<Result>) => Result;
|
|
31
|
+
}
|
|
32
|
+
interface StateStatics<N extends string, A> {
|
|
33
|
+
readonly manifest: StateManifest<N>;
|
|
34
|
+
readonly name: N;
|
|
35
|
+
readonly capture: <Result>(visit: StateCapture<Result>) => Result;
|
|
36
|
+
readonly store: Context.Tag<StateStore<N, A>, Store<A>>;
|
|
37
|
+
readonly decodeUnknown: (input: unknown) => Effect.Effect<A, ParseResult.ParseError, never>;
|
|
38
|
+
readonly decodeUnknownSync: (input: unknown) => A;
|
|
39
|
+
readonly decodeUnknownOption: (input: unknown) => Option.Option<A>;
|
|
40
|
+
}
|
|
41
|
+
export interface StateClass<N extends string, A> extends EffectType<A, never, StateStore<N, A>>, StateStatics<N, A> {
|
|
42
|
+
new (): {};
|
|
43
|
+
}
|
|
44
|
+
export type StateDefinition<N extends string, A, StateSchema extends Schema.Schema.AnyNoContext> = StateClass<N, A> & {
|
|
45
|
+
readonly manifest: StateManifest<N> & {
|
|
46
|
+
readonly schema: StateSchema;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export type StateValue<S> = S extends StateClass<infer _N, infer A> ? A : never;
|
|
50
|
+
export type StateName<S> = S extends StateClass<infer N, infer _A> ? N : never;
|
|
51
|
+
export declare const make: <const N extends string, StateSchema extends Schema.Schema.AnyNoContext>(name: N, schema: StateSchema, options?: StateOptions) => StateDefinition<N, Schema.Schema.Type<StateSchema>, StateSchema>;
|
|
52
|
+
export declare const live: <N extends string, A>(state: StateClass<N, A>, initial: A) => Layer.Layer<StateStore<N, A>>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=state.d.ts.map
|