@playfast/reform 1.2.1 → 1.4.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/README.md +15 -6
- 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 +23 -0
- package/dist/calc/asyncCalc.d.ts.map +1 -0
- package/dist/calc/asyncCalc.js +100 -0
- package/dist/calc/asyncCalc.js.map +1 -0
- package/dist/calc/asyncCalcTypes.d.ts +80 -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 +156 -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 +14 -0
- package/dist/calc/queryState.d.ts.map +1 -0
- package/dist/calc/queryState.js +39 -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 +91 -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 +62 -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 +117 -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 +58 -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 +88 -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/familyKeys.d.ts +16 -0
- package/dist/internal/familyKeys.d.ts.map +1 -0
- package/dist/internal/familyKeys.js +35 -0
- package/dist/internal/familyKeys.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/platform.d.ts +43 -0
- package/dist/internal/platform.d.ts.map +1 -0
- package/dist/internal/platform.js +68 -0
- package/dist/internal/platform.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 +222 -0
- package/dist/internal/queryDriver.js.map +1 -0
- package/dist/internal/queryDriverConsume.d.ts +9 -0
- package/dist/internal/queryDriverConsume.d.ts.map +1 -0
- package/dist/internal/queryDriverConsume.js +16 -0
- package/dist/internal/queryDriverConsume.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 +25 -0
- package/dist/internal/queryDriverHydrate.js.map +1 -0
- package/dist/internal/queryDriverPersist.d.ts +16 -0
- package/dist/internal/queryDriverPersist.d.ts.map +1 -0
- package/dist/internal/queryDriverPersist.js +15 -0
- package/dist/internal/queryDriverPersist.js.map +1 -0
- package/dist/internal/queryDriverPersistWarn.d.ts +12 -0
- package/dist/internal/queryDriverPersistWarn.d.ts.map +1 -0
- package/dist/internal/queryDriverPersistWarn.js +31 -0
- package/dist/internal/queryDriverPersistWarn.js.map +1 -0
- package/dist/internal/queryDriverSettle.d.ts +23 -0
- package/dist/internal/queryDriverSettle.d.ts.map +1 -0
- package/dist/internal/queryDriverSettle.js +52 -0
- package/dist/internal/queryDriverSettle.js.map +1 -0
- package/dist/internal/queryDriverStore.d.ts +28 -0
- package/dist/internal/queryDriverStore.d.ts.map +1 -0
- package/dist/internal/queryDriverStore.js +53 -0
- package/dist/internal/queryDriverStore.js.map +1 -0
- package/dist/internal/queryDriverTypes.d.ts +44 -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 +14 -0
- package/dist/internal/scheduler.d.ts.map +1 -0
- package/dist/internal/scheduler.js +101 -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 +43 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +59 -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 +22 -0
- package/dist/remote/pendingQueue.d.ts.map +1 -0
- package/dist/remote/pendingQueue.js +129 -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 +189 -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 +43 -0
- package/dist/remote/remoteStateSend.d.ts.map +1 -0
- package/dist/remote/remoteStateSend.js +83 -0
- package/dist/remote/remoteStateSend.js.map +1 -0
- package/dist/remote/remoteStateTypes.d.ts +106 -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 +22 -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 +137 -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 +68 -0
- package/dist/runtime/eventBudget.js.map +1 -0
- package/dist/runtime/featureMount.d.ts +48 -0
- package/dist/runtime/featureMount.d.ts.map +1 -0
- package/dist/runtime/featureMount.js +118 -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 +44 -0
- package/dist/runtime/loop.d.ts.map +1 -0
- package/dist/runtime/loop.js +131 -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 +139 -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 +46 -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 +64 -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/calc/asyncCalc-key-attribution.test.ts +182 -0
- package/src/calc/asyncCalc-registry-name.test.ts +82 -0
- package/src/calc/asyncCalc.superseded-commit.test.ts +162 -0
- package/src/calc/asyncCalc.test.ts +35 -7
- package/src/calc/asyncCalc.ts +33 -10
- package/src/calc/asyncCalcTypes.test.ts +64 -0
- package/src/calc/asyncCalcTypes.ts +8 -10
- package/src/calc/calcFamily.ts +81 -34
- package/src/calc/family-identity.test.ts +231 -0
- package/src/calc/queryState.ts +36 -5
- package/src/channel/channel-throttle-frames.test.ts +163 -0
- package/src/channel/channel.ts +5 -0
- package/src/compose/compose-identity.test.ts +175 -0
- package/src/compose/composition.ts +8 -4
- package/src/compose/structure.ts +45 -13
- package/src/compose/ui.ts +22 -5
- package/src/event/event.ts +31 -2
- package/src/event/syncTrigger.test.ts +66 -0
- package/src/internal/familyKeys.ts +41 -0
- package/src/internal/platform.test.ts +55 -0
- package/src/internal/platform.ts +72 -0
- package/src/internal/queryDriver-defect-attribution.test.ts +107 -0
- package/src/internal/queryDriver-persist-key.test.ts +118 -0
- package/src/internal/queryDriver.persistence-staleness.test.ts +209 -0
- package/src/internal/queryDriver.ts +92 -80
- package/src/internal/queryDriverConsume.ts +42 -0
- package/src/internal/queryDriverHydrate.ts +9 -3
- package/src/internal/queryDriverPersist.ts +42 -0
- package/src/internal/queryDriverPersistWarn.ts +61 -0
- package/src/internal/queryDriverSettle.ts +85 -0
- package/src/internal/queryDriverStore.ts +9 -74
- package/src/internal/queryDriverTypes.ts +10 -0
- package/src/internal/queryState-and-scheduler-audit.test.ts +170 -0
- package/src/internal/scheduler-multi-source-wake.test.ts +111 -0
- package/src/internal/scheduler.ts +80 -6
- package/src/internal.ts +1 -0
- package/src/reducer/reducer.ts +3 -3
- package/src/remote/pendingQueue.ts +35 -5
- package/src/remote/remoteState.intent-key-stamp.test.ts +207 -0
- package/src/remote/remoteState.key-attribution.test.ts +174 -0
- package/src/remote/remoteState.ts +27 -15
- package/src/remote/remoteStateSend.ts +29 -8
- package/src/remote/remoteStateTypes.ts +7 -0
- package/src/runtime/bus.ts +6 -1
- package/src/runtime/capturedAppRuntime.ts +134 -110
- package/src/runtime/eventBudget.ts +2 -1
- package/src/runtime/feature-mount-ownership.test.ts +539 -0
- package/src/runtime/featureMount.ts +110 -3
- package/src/runtime/loop.ts +29 -6
- package/src/runtime/mount-inflight-ownership.test.ts +361 -0
- package/src/runtime/mount-scope-hardening.test.ts +440 -0
- package/src/runtime/runtime.schema-identity.test.ts +188 -0
- package/src/state/state.ts +8 -4
- package/src/state/stateFamily.ts +86 -36
- package/src/state/stateGroup.ts +24 -6
- package/src/testkit/flight.testkit.ts +2 -1
- package/src/wire/tree-key-presence.test.ts +46 -0
- package/src/wire/tree.ts +9 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Context, Effect, Schema } from 'effect';
|
|
2
|
+
import { yieldableClass } from '../definition/definition.js';
|
|
3
|
+
import * as Event from '../event/event.js';
|
|
4
|
+
import { gatedFlag } from '../internal/queryDriver.js';
|
|
5
|
+
import { readTracked } from '../internal/track.js';
|
|
6
|
+
import { StateToken } from '../state/token.js';
|
|
7
|
+
// Schema.Unknown is structural because Intents is open at make-time; the declaration preserves its authored payload type.
|
|
8
|
+
export const looseSchema = (schema) => Schema.declare((input) => Schema.is(schema)(input));
|
|
9
|
+
export const make = (name, config) => {
|
|
10
|
+
const store = Context.GenericTag(`reform/remoteState/${name}`);
|
|
11
|
+
const truthTag = Context.GenericTag(`reform/remoteState/${name}/truth`);
|
|
12
|
+
const pendingTag = Context.GenericTag(`reform/remoteState/${name}/pending`);
|
|
13
|
+
const gated = gatedFlag(config.alwaysOn);
|
|
14
|
+
const manifest = {
|
|
15
|
+
kind: 'RemoteState',
|
|
16
|
+
name,
|
|
17
|
+
output: config.output,
|
|
18
|
+
gated,
|
|
19
|
+
intents: config.intents.map((event) => event.tag),
|
|
20
|
+
...(config.error !== undefined ? { error: config.error } : {}),
|
|
21
|
+
};
|
|
22
|
+
const codec = {
|
|
23
|
+
encode: Schema.encode(config.output),
|
|
24
|
+
decode: Schema.decodeUnknown(config.output),
|
|
25
|
+
};
|
|
26
|
+
// Annotations preserve template-literal types for the public statics.
|
|
27
|
+
const truthName = `${name}/truth`;
|
|
28
|
+
const pendingName = `${name}/pending`;
|
|
29
|
+
const failedName = `${name}/Failed`;
|
|
30
|
+
const read = Effect.flatMap(store, readTracked);
|
|
31
|
+
const remote = yieldableClass(read, {
|
|
32
|
+
manifest,
|
|
33
|
+
codec,
|
|
34
|
+
store,
|
|
35
|
+
name,
|
|
36
|
+
inputs: config.inputs,
|
|
37
|
+
intents: config.intents,
|
|
38
|
+
gated,
|
|
39
|
+
capture: (visit) => visit(remote),
|
|
40
|
+
truth: new StateToken(truthName, truthTag),
|
|
41
|
+
pending: new StateToken(pendingName, pendingTag),
|
|
42
|
+
Failed: Event.make(failedName, looseSchema(Schema.Struct({ intent: Schema.Unknown, error: Schema.Unknown }))),
|
|
43
|
+
});
|
|
44
|
+
return remote;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=remoteStateMake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteStateMake.js","sourceRoot":"","sources":["../../src/remote/remoteStateMake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAgB,SAAS,EAAmB,MAAM,yBAAyB,CAAA;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAsC,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAY/E,0HAA0H;AAC1H,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,MAAkC,EAA8B,EAAE,CAC/F,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAc,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG,CAQlB,IAAO,EACP,MAA0F,EAQ1F,EAAE;IAIF,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAG9B,sBAAsB,IAAI,EAAE,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAGjC,sBAAsB,IAAI,QAAQ,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAGnC,sBAAsB,IAAI,UAAU,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAsC;QAClD,IAAI,EAAE,aAAa;QACnB,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACjD,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAA;IACD,MAAM,KAAK,GAAkB;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;KAC5C,CAAA;IACD,sEAAsE;IACtE,MAAM,SAAS,GAAiB,GAAG,IAAI,QAAQ,CAAA;IAC/C,MAAM,WAAW,GAAmB,GAAG,IAAI,UAAU,CAAA;IACrD,MAAM,UAAU,GAAkB,GAAG,IAAI,SAAS,CAAA;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAkE,cAAc,CAC1F,IAAI,EACJ;QACE,QAAQ;QACR,KAAK;QACL,KAAK;QACL,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK;QACL,OAAO,EAAE,CAAS,KAA4B,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QACxE,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC1C,OAAO,EAAE,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,IAAI,CAChB,UAAU,EACV,WAAW,CACT,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CACjE,CACF;KACF,CACF,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from 'effect';
|
|
2
|
+
import * as Channel from '../channel/channel.js';
|
|
3
|
+
import * as Event from '../event/event.js';
|
|
4
|
+
import { Bus } from '../runtime/bus.js';
|
|
5
|
+
import { Reducers } from '../runtime/loop.js';
|
|
6
|
+
import type { PendingQueue } from './pendingQueue.js';
|
|
7
|
+
import type { SettleLink } from './remoteStateTypes.js';
|
|
8
|
+
export interface IntentEvents<I> {
|
|
9
|
+
readonly queued: Event.EventClass<string, {
|
|
10
|
+
readonly opId: string;
|
|
11
|
+
readonly intent: I;
|
|
12
|
+
}>;
|
|
13
|
+
readonly acked: Event.EventClass<string, {
|
|
14
|
+
readonly opId: string;
|
|
15
|
+
}>;
|
|
16
|
+
readonly settled: Event.EventClass<string, {
|
|
17
|
+
readonly opId: string;
|
|
18
|
+
}>;
|
|
19
|
+
readonly invalidated: Event.EventClass<string, {}>;
|
|
20
|
+
}
|
|
21
|
+
interface QueueReducerOptions<I> {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly queueTag: Context.Tag<PendingQueue<I>, PendingQueue<I>>;
|
|
24
|
+
readonly linkTag: Context.Tag<SettleLink, SettleLink>;
|
|
25
|
+
readonly handles: ReadonlySet<string>;
|
|
26
|
+
readonly events: IntentEvents<I>;
|
|
27
|
+
}
|
|
28
|
+
export declare const queueReducerLayer: <I>(options: QueueReducerOptions<I>) => Layer.Layer<never, never, Reducers | PendingQueue<I> | SettleLink>;
|
|
29
|
+
interface SendProcedureOptions<I, R2> {
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly channel: Channel.ChannelClass;
|
|
32
|
+
readonly handles: ReadonlySet<string>;
|
|
33
|
+
readonly linkTag: Context.Tag<SettleLink, SettleLink>;
|
|
34
|
+
readonly failed: Event.EventClass<string, {
|
|
35
|
+
readonly intent: I;
|
|
36
|
+
readonly error: unknown;
|
|
37
|
+
}>;
|
|
38
|
+
readonly send: (intent: I) => Effect.Effect<unknown, unknown, R2>;
|
|
39
|
+
readonly events: IntentEvents<I>;
|
|
40
|
+
}
|
|
41
|
+
export declare const sendProcedureLayer: <I, R2>(options: SendProcedureOptions<I, R2>) => Layer.Layer<never, never, Channel.Procedures | Bus | R2 | SettleLink>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=remoteStateSend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteStateSend.d.ts","sourceRoot":"","sources":["../../src/remote/remoteStateSend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Context, Effect, Either, Layer, Option, Predicate } from 'effect';
|
|
2
|
+
import * as Channel from '../channel/channel.js';
|
|
3
|
+
import * as Event from '../event/event.js';
|
|
4
|
+
import { Bus, narrowHandled } from '../runtime/bus.js';
|
|
5
|
+
import { Reducers } from '../runtime/loop.js';
|
|
6
|
+
import { operationId } from '../internal/platform.js';
|
|
7
|
+
// Direct registry assembly avoids deferred conditional parameters while Intents is generic.
|
|
8
|
+
export const queueReducerLayer = (options) => Layer.scopedDiscard(Effect.gen(function* () {
|
|
9
|
+
const reducers = yield* Reducers;
|
|
10
|
+
if (reducers.entries.some((entry) => entry.name === options.name)) {
|
|
11
|
+
yield* Effect.logWarning(`reform: duplicate reducer name '${options.name}' registered`);
|
|
12
|
+
}
|
|
13
|
+
const queue = yield* options.queueTag;
|
|
14
|
+
const link = yield* options.linkTag;
|
|
15
|
+
// `Queued` is dispatched from the send procedure, which runs on the intent's
|
|
16
|
+
// channel — a `debounce`/`throttle`/`exclusive` policy can hold an intent across
|
|
17
|
+
// a key change, so the key at that moment is not the key the intent targets.
|
|
18
|
+
// Reducers run before channels are offered in the same drain frame, so reading
|
|
19
|
+
// the key here records the one the user was actually looking at.
|
|
20
|
+
const issuedKeys = new WeakMap();
|
|
21
|
+
const entry = {
|
|
22
|
+
name: options.name,
|
|
23
|
+
handles: new Set([
|
|
24
|
+
...options.handles,
|
|
25
|
+
options.events.queued.tag,
|
|
26
|
+
options.events.acked.tag,
|
|
27
|
+
options.events.settled.tag,
|
|
28
|
+
]),
|
|
29
|
+
apply: (event) => {
|
|
30
|
+
if (options.handles.has(event._tag)) {
|
|
31
|
+
issuedKeys.set(event, link.key());
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const handled = narrowHandled(event);
|
|
35
|
+
if (handled._tag === options.events.queued.tag) {
|
|
36
|
+
if (handled.intent !== undefined) {
|
|
37
|
+
const issued = Predicate.isObject(handled.intent)
|
|
38
|
+
? Option.fromNullable(issuedKeys.get(handled.intent))
|
|
39
|
+
: Option.none();
|
|
40
|
+
queue.append({
|
|
41
|
+
opId: handled.opId,
|
|
42
|
+
intent: handled.intent,
|
|
43
|
+
status: 'sending',
|
|
44
|
+
}, Option.some(Option.getOrElse(issued, () => link.key())));
|
|
45
|
+
}
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (handled._tag === options.events.acked.tag) {
|
|
49
|
+
queue.ack(handled.opId);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
queue.settle(handled.opId);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
yield* Effect.acquireRelease(Effect.sync(() => reducers.register(entry)), () => Effect.sync(() => reducers.unregister(entry)));
|
|
56
|
+
}));
|
|
57
|
+
export const sendProcedureLayer = (options) => Layer.scopedDiscard(Effect.gen(function* () {
|
|
58
|
+
const procedures = yield* Channel.Procedures;
|
|
59
|
+
if (procedures.entries.some((entry) => entry.name === options.name)) {
|
|
60
|
+
yield* Effect.logWarning(`reform: duplicate procedure name '${options.name}' registered`);
|
|
61
|
+
}
|
|
62
|
+
const link = yield* options.linkTag;
|
|
63
|
+
const runtime = yield* Effect.runtime();
|
|
64
|
+
const deliver = Effect.fn('deliver')(function* (intent) {
|
|
65
|
+
const opId = yield* Effect.sync(() => operationId());
|
|
66
|
+
yield* Event.dispatch(options.events.queued, { opId, intent });
|
|
67
|
+
const outcome = yield* options.send(intent).pipe(Effect.catchAllDefect((defect) => Effect.fail(defect)), Effect.either, Effect.onInterrupt(() => Event.dispatch(options.events.settled, { opId })));
|
|
68
|
+
yield* Either.match(outcome, {
|
|
69
|
+
onLeft: (error) => Effect.zipRight(Event.dispatch(options.failed, { intent, error }), Event.dispatch(options.events.settled, { opId })),
|
|
70
|
+
onRight: () =>
|
|
71
|
+
// Register before invalidation so a pre-ack refetch cannot settle this intent.
|
|
72
|
+
Effect.sync(() => link.register(opId, link.requested() + 1)).pipe(Effect.zipRight(Event.dispatch(options.events.acked, { opId })), Effect.zipRight(Event.dispatch(options.events.invalidated, {}))),
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
const entry = {
|
|
76
|
+
name: options.name,
|
|
77
|
+
channelName: options.channel.manifest.name,
|
|
78
|
+
handles: options.handles,
|
|
79
|
+
run: (event) => Effect.provide(deliver(narrowHandled(event)), runtime),
|
|
80
|
+
};
|
|
81
|
+
yield* Effect.acquireRelease(Effect.sync(() => procedures.register(entry)), () => Effect.sync(() => procedures.unregister(entry)));
|
|
82
|
+
}));
|
|
83
|
+
//# sourceMappingURL=remoteStateSend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteStateSend.js","sourceRoot":"","sources":["../../src/remote/remoteStateSend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Context, Effect, Schema } from 'effect';
|
|
2
|
+
import type { Effect as EffectType } from 'effect/Effect';
|
|
3
|
+
import type { AsyncData, AsyncError, AsyncSuccess } from '../calc/asyncData.js';
|
|
4
|
+
import type * as Channel from '../channel/channel.js';
|
|
5
|
+
import type { Manifest } from '../definition/definition.js';
|
|
6
|
+
import type * as Event from '../event/event.js';
|
|
7
|
+
import type { QueryCodec } from '../internal/queryDriver.js';
|
|
8
|
+
import type { InputsObject, InvalidateBy } from '../internal/sources.js';
|
|
9
|
+
import type { Store } from '../internal/store.js';
|
|
10
|
+
import type { AnySource, SourceCapture, StateToken } from '../state/token.js';
|
|
11
|
+
export interface PendingIntent<I> {
|
|
12
|
+
readonly opId: string;
|
|
13
|
+
readonly intent: I;
|
|
14
|
+
readonly status: 'sending' | 'confirmed';
|
|
15
|
+
}
|
|
16
|
+
export interface FailedIntent<I> {
|
|
17
|
+
readonly intent: I;
|
|
18
|
+
readonly error: unknown;
|
|
19
|
+
}
|
|
20
|
+
export type RemoteStateSettled<A, E> = AsyncSuccess<A> | AsyncError<E>;
|
|
21
|
+
export declare const RemoteStateVisibleStoreTypeId: unique symbol;
|
|
22
|
+
export type RemoteStateVisibleStoreTypeId = typeof RemoteStateVisibleStoreTypeId;
|
|
23
|
+
export interface RemoteStateVisibleStore<N extends string> {
|
|
24
|
+
readonly [RemoteStateVisibleStoreTypeId]: N;
|
|
25
|
+
}
|
|
26
|
+
export declare const RemoteStateTruthStoreTypeId: unique symbol;
|
|
27
|
+
export type RemoteStateTruthStoreTypeId = typeof RemoteStateTruthStoreTypeId;
|
|
28
|
+
export interface RemoteStateTruthStore<N extends string> {
|
|
29
|
+
readonly [RemoteStateTruthStoreTypeId]: N;
|
|
30
|
+
}
|
|
31
|
+
export declare const RemoteStatePendingStoreTypeId: unique symbol;
|
|
32
|
+
export type RemoteStatePendingStoreTypeId = typeof RemoteStatePendingStoreTypeId;
|
|
33
|
+
export interface RemoteStatePendingStore<N extends string> {
|
|
34
|
+
readonly [RemoteStatePendingStoreTypeId]: N;
|
|
35
|
+
}
|
|
36
|
+
export type EventPayload<Ev extends Event.AnyEvent> = Ev extends Event.EventClass<string, infer P> ? P : never;
|
|
37
|
+
export interface QueueFoldEventExternalApi<I> {
|
|
38
|
+
readonly _tag: string;
|
|
39
|
+
readonly opId: string;
|
|
40
|
+
readonly intent?: I;
|
|
41
|
+
}
|
|
42
|
+
export interface RemoteStateSchemaReflection {
|
|
43
|
+
readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
|
|
44
|
+
}
|
|
45
|
+
export interface RemoteStateManifestExternalApi<N extends string> extends Manifest {
|
|
46
|
+
readonly kind: 'RemoteState';
|
|
47
|
+
readonly name: N;
|
|
48
|
+
readonly output: RemoteStateSchemaReflection;
|
|
49
|
+
readonly error?: RemoteStateSchemaReflection;
|
|
50
|
+
readonly gated: boolean;
|
|
51
|
+
readonly intents: ReadonlyArray<string>;
|
|
52
|
+
}
|
|
53
|
+
export interface RemoteStateClass<N extends string, out Inputs extends ReadonlyArray<AnySource>, in out Intents extends ReadonlyArray<Event.AnyEvent>, in out A, in out E, in out Gated extends boolean> extends EffectType<AsyncData<A, E, Gated>, never, RemoteStateVisibleStore<N>> {
|
|
54
|
+
new (): {};
|
|
55
|
+
readonly manifest: RemoteStateManifestExternalApi<N>;
|
|
56
|
+
readonly codec: QueryCodec<A>;
|
|
57
|
+
readonly store: Context.Tag<RemoteStateVisibleStore<N>, Store<AsyncData<A, E, Gated>>>;
|
|
58
|
+
readonly name: N;
|
|
59
|
+
readonly inputs: Inputs;
|
|
60
|
+
readonly intents: Intents;
|
|
61
|
+
readonly gated: Gated;
|
|
62
|
+
readonly capture: <Result>(visit: SourceCapture<Result>) => Result;
|
|
63
|
+
readonly truth: StateToken<`${N}/truth`, AsyncData<A, E, Gated>, RemoteStateTruthStore<N>>;
|
|
64
|
+
readonly pending: StateToken<`${N}/pending`, ReadonlyArray<PendingIntent<Event.EventType<Intents[number]>>>, RemoteStatePendingStore<N>>;
|
|
65
|
+
readonly Failed: Event.EventClass<`${N}/Failed`, FailedIntent<Event.EventType<Intents[number]>>>;
|
|
66
|
+
}
|
|
67
|
+
export interface RemoteStateConfigExternalApi<Inputs extends ReadonlyArray<AnySource>, Intents extends ReadonlyArray<Event.AnyEvent>, OutputSchema extends Schema.Schema.AnyNoContext, ErrorSchema extends Schema.Schema.AnyNoContext | undefined, AlwaysOn extends boolean> {
|
|
68
|
+
readonly inputs: Inputs;
|
|
69
|
+
readonly output: OutputSchema;
|
|
70
|
+
readonly error?: ErrorSchema;
|
|
71
|
+
readonly alwaysOn?: AlwaysOn;
|
|
72
|
+
readonly intents: Intents;
|
|
73
|
+
}
|
|
74
|
+
export type RemoteStateLiveExternalApi<Inputs extends ReadonlyArray<AnySource>, Intents extends ReadonlyArray<Event.AnyEvent>, A, E, Gated extends boolean, R, R2, SettledEvent extends Event.AnyEvent> = {
|
|
75
|
+
readonly query: (inputs: InputsObject<Inputs>) => Effect.Effect<A, E, R>;
|
|
76
|
+
readonly send: (intent: Event.EventType<Intents[number]>) => Effect.Effect<unknown, unknown, R2>;
|
|
77
|
+
readonly apply: (value: A, intent: Event.EventType<Intents[number]>) => A;
|
|
78
|
+
readonly channel?: Channel.ChannelClass;
|
|
79
|
+
readonly invalidateBy?: InvalidateBy<Inputs>;
|
|
80
|
+
readonly invalidateOn?: ReadonlyArray<Event.AnyEvent>;
|
|
81
|
+
readonly coalesce?: 'switch' | 'trailing';
|
|
82
|
+
readonly reuse?: boolean;
|
|
83
|
+
readonly keepPreviousData?: boolean;
|
|
84
|
+
readonly settled?: {
|
|
85
|
+
readonly event: SettledEvent;
|
|
86
|
+
readonly payload: (result: RemoteStateSettled<A, E>) => EventPayload<SettledEvent>;
|
|
87
|
+
};
|
|
88
|
+
readonly persist?: boolean | {
|
|
89
|
+
readonly key?: string | ((inputs: InputsObject<Inputs>) => string);
|
|
90
|
+
};
|
|
91
|
+
} & (Gated extends true ? {
|
|
92
|
+
readonly disabled?: (inputs: InputsObject<Inputs>) => boolean;
|
|
93
|
+
} : {
|
|
94
|
+
readonly disabled?: never;
|
|
95
|
+
});
|
|
96
|
+
export interface SettleLink {
|
|
97
|
+
readonly requested: () => number;
|
|
98
|
+
readonly register: (opId: string, waitFor: number) => void;
|
|
99
|
+
readonly key: () => ReadonlyArray<unknown>;
|
|
100
|
+
readonly subscribeKey: (listener: () => void) => () => void;
|
|
101
|
+
}
|
|
102
|
+
export interface WaiterRegistration {
|
|
103
|
+
readonly opId: string;
|
|
104
|
+
readonly waitFor: number;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=remoteStateTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteStateTypes.d.ts","sourceRoot":"","sources":["../../src/remote/remoteStateTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export const RemoteStateVisibleStoreTypeId = Symbol.for('reform/RemoteStateVisibleStore');
|
|
2
|
+
export const RemoteStateTruthStoreTypeId = Symbol.for('reform/RemoteStateTruthStore');
|
|
3
|
+
export const RemoteStatePendingStoreTypeId = Symbol.for('reform/RemoteStatePendingStore');
|
|
4
|
+
//# sourceMappingURL=remoteStateTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteStateTypes.js","sourceRoot":"","sources":["../../src/remote/remoteStateTypes.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,6BAA6B,GAAkB,MAAM,CAAC,GAAG,CACpE,gCAAgC,CACjC,CAAA;AAOD,MAAM,CAAC,MAAM,2BAA2B,GAAkB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;AAOpG,MAAM,CAAC,MAAM,6BAA6B,GAAkB,MAAM,CAAC,GAAG,CACpE,gCAAgC,CACjC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CompositionId, RequiredSlotIdentities } from '../compose/composition.js';
|
|
2
|
+
import type { UiContract } from '../compose/ui.js';
|
|
3
|
+
import type { CapturedScene, Scene } from '../scene/scene.js';
|
|
4
|
+
import type { ReformOptions } from './eventBudget.js';
|
|
5
|
+
import type { AppRuntime, UnspecifiedRuntimeServices } from './runtimeHandle.js';
|
|
6
|
+
export { UnspecifiedRuntimeServicesTypeId } from './runtimeHandle.js';
|
|
7
|
+
export type { AnyFeatureMountHandlers, AppRuntime, CapturedFeatureMountHandlers, FeatureMountHandlers, FeatureMountHandlersExternalApi, RuntimeFeatureAvailability, RuntimeHandle, UnspecifiedRuntimeServices, } from './runtimeHandle.js';
|
|
8
|
+
export declare function makeAppRuntime<C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity>(scene: CapturedScene<C, S, Services, P, N, Identity>, options?: ReformOptions): AppRuntime<Services | CompositionId<N, Identity, RequiredSlotIdentities<C>>>;
|
|
9
|
+
export declare function makeAppRuntime<C extends UiContract, S extends ReadonlyArray<unknown>>(scene: Scene<C, S>, options?: ReformOptions): AppRuntime<UnspecifiedRuntimeServices>;
|
|
10
|
+
//# sourceMappingURL=appRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appRuntime.d.ts","sourceRoot":"","sources":["../../src/runtime/appRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAY,aAAa,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAE7E,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AAClE,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,+BAA+B,EAC/B,0BAA0B,EAC1B,aAAa,EACb,0BAA0B,GAC3B,MAAM,iBAAiB,CAAA;AAExB,wBAAgB,cAAc,CAC5B,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAChC,QAAQ,EACR,CAAC,EACD,CAAC,SAAS,MAAM,EAChB,QAAQ,EAER,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EACpD,OAAO,CAAC,EAAE,aAAa,GACtB,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/E,wBAAgB,cAAc,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EACnF,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,OAAO,CAAC,EAAE,aAAa,GACtB,UAAU,CAAC,0BAA0B,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { makeCapturedAppRuntime } from './capturedAppRuntime.js';
|
|
2
|
+
export { UnspecifiedRuntimeServicesTypeId } from './runtimeHandle.js';
|
|
3
|
+
export function makeAppRuntime(scene, options = {}) {
|
|
4
|
+
return scene.captureAny((exactScene) => makeCapturedAppRuntime(exactScene, options));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=appRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appRuntime.js","sourceRoot":"","sources":["../../src/runtime/appRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAI7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AA2BlE,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,UAAyB,EAAE;IACzE,OAAO,KAAK,CAAC,UAAU,CAAU,CAAC,UAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;AAC/F,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Context, Effect, Layer, PubSub } from 'effect';
|
|
2
|
+
export interface Tagged {
|
|
3
|
+
readonly _tag: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const narrowHandled: <E>(event: Tagged) => E;
|
|
6
|
+
export type Priority = 'High' | 'Normal';
|
|
7
|
+
export interface Envelope {
|
|
8
|
+
readonly priority: Priority;
|
|
9
|
+
readonly event: Tagged;
|
|
10
|
+
/**
|
|
11
|
+
* Set when the synchronous trigger path already ran this event's reducers, so the
|
|
12
|
+
* drain contributes only the channel/procedure half and never applies them twice.
|
|
13
|
+
*/
|
|
14
|
+
readonly reduced: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const BusBase: Context.TagClass<Bus, 'reform/Bus', PubSub.PubSub<Envelope>>;
|
|
17
|
+
export declare class Bus extends BusBase {
|
|
18
|
+
}
|
|
19
|
+
export declare const busLayer: Layer.Layer<Bus>;
|
|
20
|
+
export declare const publish: (priority: Priority, event: Tagged) => Effect.Effect<void, never, Bus>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/runtime/bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAGD,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,MAAM,KAAG,CAEjC,CAAA;AAEhB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,QAAA,MAAM,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAEzC,CAAA;AAEjC,qBAAa,GAAI,SAAQ,OAAO;CAAG;AAGnC,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAmD,CAAA;AAEzF,eAAO,MAAM,OAAO,GAAI,UAAU,QAAQ,EAAE,OAAO,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CACF,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context, Effect, Layer, PubSub } from 'effect';
|
|
2
|
+
// Re-narrow routed Tagged to handler event union (handles set guarantees membership)
|
|
3
|
+
export const narrowHandled = (event) =>
|
|
4
|
+
// oxlint-disable-next-line reform-rules/no-type-assertion -- documented runtime re-narrow of a routed Tagged envelope to its handler's declared event union (see jsdoc above)
|
|
5
|
+
event;
|
|
6
|
+
const BusBase = Context.Tag('reform/Bus')();
|
|
7
|
+
export class Bus extends BusBase {
|
|
8
|
+
}
|
|
9
|
+
// Unbounded so publish never suspends (UI runSync); drain empties every microtask
|
|
10
|
+
export const busLayer = Layer.scoped(Bus, PubSub.unbounded());
|
|
11
|
+
export const publish = (priority, event) => Effect.flatMap(Bus, (bus) => PubSub.publish(bus, { priority, event, reduced: false }));
|
|
12
|
+
//# sourceMappingURL=bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../src/runtime/bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAMvD,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,KAAa,EAAK,EAAE;AACnD,8KAA8K;AAC9K,KAAc,CAAA;AAchB,MAAM,OAAO,GAAiE,OAAO,CAAC,GAAG,CACvF,YAAY,CACb,EAAgC,CAAA;AAEjC,MAAM,OAAO,GAAI,SAAQ,OAAO;CAAG;AAEnC,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAqB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAY,CAAC,CAAA;AAEzF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAE,KAAa,EAAmC,EAAE,CAC5F,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CompositionId, RequiredSlotIdentities } from '../compose/composition.js';
|
|
2
|
+
import type { UiContract } from '../compose/ui.js';
|
|
3
|
+
import { type CapturedScene } from '../scene/scene.js';
|
|
4
|
+
import { type ReformOptions } from './eventBudget.js';
|
|
5
|
+
import type { AppRuntime } from './runtimeHandle.js';
|
|
6
|
+
export declare const makeCapturedAppRuntime: <C extends UiContract, S extends ReadonlyArray<unknown>, Services, P, N extends string, Identity>(scene: CapturedScene<C, S, Services, P, N, Identity>, options?: ReformOptions) => AppRuntime<Services | CompositionId<N, Identity, RequiredSlotIdentities<C>>>;
|
|
7
|
+
//# sourceMappingURL=capturedAppRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capturedAppRuntime.d.ts","sourceRoot":"","sources":["../../src/runtime/capturedAppRuntime.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAEV,aAAa,EACb,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoB/C,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,gBAAgB,CAAA;AAEzE,OAAO,EAAsB,KAAK,aAAa,EAAsB,MAAM,eAAe,CAAA;AAW1F,OAAO,KAAK,EAEV,UAAU,EAIX,MAAM,iBAAiB,CAAA;AAExB,eAAO,MAAM,sBAAsB,GACjC,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAChC,QAAQ,EACR,CAAC,EACD,CAAC,SAAS,MAAM,EAChB,QAAQ,EAER,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EACpD,UAAS,aAAkB,KAC1B,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAuO7E,CAAA"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Context, Effect, ExecutionStrategy, Exit, Layer, ManagedRuntime, Option, Scope, } from 'effect';
|
|
2
|
+
import { FeatureInput, } from '../feature/feature.js';
|
|
3
|
+
import { forceSync } from '../internal/errors.js';
|
|
4
|
+
import {} from '../ui/node.js';
|
|
5
|
+
import { sceneInstrumentation } from '../scene/scene.js';
|
|
6
|
+
import { Bus, publish } from './bus.js';
|
|
7
|
+
import { CurrentEventBudget, resolveEventBudget } from './eventBudget.js';
|
|
8
|
+
import { invalidMountProps, missingHostServices, forkFeatureMount, hasFeatureRequirements, mountActivation, startMount, withInstrumentation, } from './featureMount.js';
|
|
9
|
+
export const makeCapturedAppRuntime = (scene, options = {}) => {
|
|
10
|
+
const instrumentation = sceneInstrumentation(scene);
|
|
11
|
+
const provide = scene.provide.map(Layer.locally(CurrentEventBudget, resolveEventBudget(options)));
|
|
12
|
+
const layer = provide.reduce((accLayer, nextLayer) => Layer.merge(accLayer, nextLayer));
|
|
13
|
+
const runtime = ManagedRuntime.make(layer);
|
|
14
|
+
const capturedContext = forceSync(() => runtime.runSync(Effect.context()));
|
|
15
|
+
const rootCompositionService = Option.getOrThrow(Context.getOption(capturedContext, scene.composition.tag));
|
|
16
|
+
// Re-add the exact tag so the captured context retains the root's nominal identity.
|
|
17
|
+
const rootContext = Context.add(capturedContext, scene.composition.tag, rootCompositionService);
|
|
18
|
+
const rootBus = Context.getOption(rootContext, Bus);
|
|
19
|
+
// Hosts can still render tearing-down trees after the managed runtime is disposed.
|
|
20
|
+
const status = { disposed: false, booted: false };
|
|
21
|
+
const activationDisposers = new Set();
|
|
22
|
+
// Everything this runtime mounts is forked from here, so `dispose()` closes it all
|
|
23
|
+
// without having to be handed each mount's disposer. A forked scope deregisters
|
|
24
|
+
// itself from its owner when it closes first, so churn does not accumulate.
|
|
25
|
+
// Parallel: the root's finalizers are one independent mount each, so a teardown that
|
|
26
|
+
// takes a turn must not withhold its siblings'.
|
|
27
|
+
const rootScope = Effect.runSync(Scope.make(ExecutionStrategy.parallel));
|
|
28
|
+
const instrumented = withInstrumentation(instrumentation);
|
|
29
|
+
const mountHost = {
|
|
30
|
+
runFork: (effect) => runtime.runFork(effect),
|
|
31
|
+
isDisposed: () => status.disposed,
|
|
32
|
+
};
|
|
33
|
+
// A closed render Effect remains safe on the default runtime after disposal.
|
|
34
|
+
const runRender = (effect) => status.disposed ? Effect.runSync(effect) : runtime.runSync(effect);
|
|
35
|
+
const dispatch = (priority, event) => {
|
|
36
|
+
if (status.disposed || Option.isNone(rootBus)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
runtime.runFork(publish(priority, event).pipe(Effect.provideService(Bus, rootBus.value)));
|
|
40
|
+
};
|
|
41
|
+
const mountScopedOnto = (ownerScope, activation) => mountActivation(mountHost, activationDisposers, instrumented(Layer.build(activation)), ownerScope);
|
|
42
|
+
// A feature's handle mounts into the feature's own scope: whatever it mounts must
|
|
43
|
+
// not outlive the context it was built against.
|
|
44
|
+
const makeChildRuntime = (context, ownerScope) => ({
|
|
45
|
+
read: (tag) => Context.get(context, tag),
|
|
46
|
+
readOption: (tag) => Context.getOption(context, tag),
|
|
47
|
+
runRender,
|
|
48
|
+
dispatch,
|
|
49
|
+
mountScoped: (activation) => mountScopedOnto(ownerScope, activation),
|
|
50
|
+
mountFeature: (binding, handlers) => mountFeatureOnto(context, ownerScope, binding, handlers),
|
|
51
|
+
mountCapturedFeature: (binding, handlers) => mountCapturedFeatureOnto(context, ownerScope, binding, handlers),
|
|
52
|
+
mountAnyFeature: (binding, handlers) => mountAnyFeatureOnto(context, ownerScope, binding, handlers),
|
|
53
|
+
instrumentation,
|
|
54
|
+
});
|
|
55
|
+
const mountFeatureOnto = (hostContext, ownerScope, binding, handlers) => {
|
|
56
|
+
const mountInto = (scope) => Effect.flatMap(binding.load, (loaded) => {
|
|
57
|
+
if (!hasFeatureRequirements(hostContext, loaded.requires)) {
|
|
58
|
+
return missingHostServices(binding.manifest.name);
|
|
59
|
+
}
|
|
60
|
+
return Effect.gen(function* () {
|
|
61
|
+
const bus = Context.get(hostContext, Bus);
|
|
62
|
+
const featureContext = Context.add(hostContext, FeatureInput, handlers.props);
|
|
63
|
+
const context = yield* Layer.build(Layer.provide(loaded.layer, Layer.succeedContext(featureContext)));
|
|
64
|
+
yield* Effect.forEach(binding.boot, (event) => publish('High', event), {
|
|
65
|
+
discard: true,
|
|
66
|
+
}).pipe(Effect.provideService(Bus, bus));
|
|
67
|
+
const merged = Context.merge(hostContext, context);
|
|
68
|
+
yield* Effect.sync(() => handlers.onLive(makeChildRuntime(merged, scope)));
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
return startMount(mountHost, ownerScope, (scope) => forkFeatureMount(mountHost, scope, instrumented(mountInto(scope)), handlers.onFailed));
|
|
72
|
+
};
|
|
73
|
+
const mountCapturedFeatureOnto = (hostContext, ownerScope, binding, handlers) => {
|
|
74
|
+
const mountInto = (scope) => Effect.flatMap(binding.load, (loaded) => {
|
|
75
|
+
if (!hasFeatureRequirements(hostContext, loaded.requires)) {
|
|
76
|
+
return missingHostServices(binding.manifest.name);
|
|
77
|
+
}
|
|
78
|
+
const input = loaded.usesInput ? binding.parseInput(handlers.props) : Option.some(undefined);
|
|
79
|
+
return Option.match(input, {
|
|
80
|
+
onNone: () => invalidMountProps(binding.manifest.name),
|
|
81
|
+
onSome: (props) => Effect.gen(function* () {
|
|
82
|
+
const bus = Context.get(hostContext, Bus);
|
|
83
|
+
const featureContext = Context.add(hostContext, FeatureInput, props);
|
|
84
|
+
const context = yield* Layer.build(Layer.provide(loaded.layer, Layer.succeedContext(featureContext)));
|
|
85
|
+
yield* Effect.forEach(binding.boot, (event) => publish('High', event), {
|
|
86
|
+
discard: true,
|
|
87
|
+
}).pipe(Effect.provideService(Bus, bus));
|
|
88
|
+
const merged = Context.merge(hostContext, context);
|
|
89
|
+
const compositionService = Option.getOrThrow(Context.getOption(merged, binding.composition.tag));
|
|
90
|
+
const rooted = Context.add(merged, binding.composition.tag, compositionService);
|
|
91
|
+
yield* Effect.sync(() => handlers.onLive(makeChildRuntime(rooted, scope)));
|
|
92
|
+
}),
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
return startMount(mountHost, ownerScope, (scope) => forkFeatureMount(mountHost, scope, instrumented(mountInto(scope)), handlers.onFailed));
|
|
96
|
+
};
|
|
97
|
+
const mountAnyFeatureOnto = (hostContext, ownerScope, binding, handlers) => binding.capture((exactBinding) => mountCapturedFeatureOnto(hostContext, ownerScope, exactBinding, {
|
|
98
|
+
props: handlers.props,
|
|
99
|
+
onLive: (childRuntime) => handlers.onLive(childRuntime),
|
|
100
|
+
onFailed: handlers.onFailed,
|
|
101
|
+
}));
|
|
102
|
+
const app = {
|
|
103
|
+
// Captured reads stay available while the managed runtime is tearing down.
|
|
104
|
+
read: (tag) => Context.get(rootContext, tag),
|
|
105
|
+
readOption: (tag) => Context.getOption(rootContext, tag),
|
|
106
|
+
runRender,
|
|
107
|
+
dispatch,
|
|
108
|
+
mountScoped: (activation) => mountScopedOnto(rootScope, activation),
|
|
109
|
+
mountFeature: (binding, handlers) => mountFeatureOnto(rootContext, rootScope, binding, handlers),
|
|
110
|
+
mountCapturedFeature: (binding, handlers) => mountCapturedFeatureOnto(rootContext, rootScope, binding, handlers),
|
|
111
|
+
mountAnyFeature: (binding, handlers) => mountAnyFeatureOnto(rootContext, rootScope, binding, handlers),
|
|
112
|
+
boot: () => {
|
|
113
|
+
if (status.disposed || status.booted) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
status.booted = true;
|
|
117
|
+
Option.fromNullable(scene.boot)
|
|
118
|
+
.pipe(Option.getOrElse(() => []))
|
|
119
|
+
.forEach((event) => dispatch('High', event));
|
|
120
|
+
},
|
|
121
|
+
dispose: () => {
|
|
122
|
+
if (status.disposed) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
status.disposed = true;
|
|
126
|
+
activationDisposers.forEach((dispose) => dispose());
|
|
127
|
+
// On the default runtime: the managed runtime is going away underneath us and
|
|
128
|
+
// must not interrupt the finalizers of what it mounted.
|
|
129
|
+
Effect.runFork(Scope.close(rootScope, Exit.succeed(undefined)));
|
|
130
|
+
void runtime.dispose();
|
|
131
|
+
},
|
|
132
|
+
isDisposed: () => status.disposed,
|
|
133
|
+
instrumentation,
|
|
134
|
+
};
|
|
135
|
+
return app;
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=capturedAppRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capturedAppRuntime.js","sourceRoot":"","sources":["../../src/runtime/capturedAppRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Effect, FiberRef, Option } from 'effect';
|
|
2
|
+
import { EventLoopOverflow } from '../internal/errors.js';
|
|
3
|
+
interface EventLimitFields {
|
|
4
|
+
readonly errorAt: number;
|
|
5
|
+
readonly warningAt: number;
|
|
6
|
+
}
|
|
7
|
+
interface ReformOptionFields {
|
|
8
|
+
readonly maxEventsPerJsTick: Partial<EventLimitFields>;
|
|
9
|
+
}
|
|
10
|
+
export interface ReformOptions extends Partial<ReformOptionFields> {
|
|
11
|
+
}
|
|
12
|
+
export interface EventBudget {
|
|
13
|
+
readonly errorAt: number;
|
|
14
|
+
readonly warningAt: Option.Option<number>;
|
|
15
|
+
readonly onOverflow: (error: EventLoopOverflow) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare const makeDefaultBudget: (dev: boolean) => EventBudget;
|
|
18
|
+
export declare const defaultEventBudget: EventBudget;
|
|
19
|
+
export declare const resolveEventBudget: (options: ReformOptions) => EventBudget;
|
|
20
|
+
export declare const CurrentEventBudget: FiberRef.FiberRef<EventBudget>;
|
|
21
|
+
export declare const resolveCurrentEventBudget: Effect.Effect<EventBudget>;
|
|
22
|
+
export interface TickSample {
|
|
23
|
+
readonly total: number;
|
|
24
|
+
readonly warnNow: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface TickCounter {
|
|
27
|
+
readonly add: (eventCount: number) => TickSample;
|
|
28
|
+
}
|
|
29
|
+
export declare const makeTickCounter: (budget: EventBudget) => TickCounter;
|
|
30
|
+
export declare const enforceBudget: (budget: EventBudget, sample: TickSample) => Effect.Effect<void, EventLoopOverflow>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=eventBudget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBudget.d.ts","sourceRoot":"","sources":["../../src/runtime/eventBudget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,QAAQ,EAA2B,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGtD,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,kBAAkB,CAAC;CAAG;AAErE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;CACxD;AAWD,eAAO,MAAM,iBAAiB,GAAI,KAAK,OAAO,KAAG,WAO/C,CAAA;AAEF,eAAO,MAAM,kBAAkB,EAAE,WAAsC,CAAA;AAEvE,eAAO,MAAM,kBAAkB,GAAI,SAAS,aAAa,KAAG,WAa3D,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAG7D,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAC/B,CAAA;AAElC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,UAAU,CAAA;CACjD;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,WAAW,KAAG,WA6BrD,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,CAC1B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAYxC,CAAA"}
|