@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 @@
|
|
|
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 validate: (input: unknown) => Effect.Effect<A, ParseResult.ParseError, never>;
|
|
38
|
+
readonly validateSync: (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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Context, Effect, FiberRef, Layer, Option, Schema } from 'effect';
|
|
2
|
+
import { yieldableClass } from '../definition/definition.js';
|
|
3
|
+
import { resolveScheduler } from '../internal/scheduler.js';
|
|
4
|
+
import { CurrentSeedOverrides } from '../internal/seeds.js';
|
|
5
|
+
import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
|
|
6
|
+
import { claimStateTag } from '../internal/stateRegistry.js';
|
|
7
|
+
import { makeStore } from '../internal/store.js';
|
|
8
|
+
import { readTracked } from '../internal/track.js';
|
|
9
|
+
export const StateStoreTypeId = Symbol.for('reform/StateStore');
|
|
10
|
+
export const make = (name, schema, options = {}) => {
|
|
11
|
+
const identifier = `reform/state/${name}`;
|
|
12
|
+
claimStateTag(identifier);
|
|
13
|
+
const store = Context.GenericTag(identifier);
|
|
14
|
+
const manifest = {
|
|
15
|
+
kind: 'State',
|
|
16
|
+
name,
|
|
17
|
+
schema,
|
|
18
|
+
...(options.title !== undefined ? { title: options.title } : {}),
|
|
19
|
+
...(options.description !== undefined ? { description: options.description } : {}),
|
|
20
|
+
};
|
|
21
|
+
const read = Effect.flatMap(store, readTracked);
|
|
22
|
+
const state = yieldableClass(read, {
|
|
23
|
+
manifest,
|
|
24
|
+
name,
|
|
25
|
+
store,
|
|
26
|
+
validate: Schema.validate(schema),
|
|
27
|
+
validateSync: Schema.validateSync(schema),
|
|
28
|
+
decodeUnknownOption: Schema.decodeUnknownOption(schema),
|
|
29
|
+
capture: (visit) => visit(state),
|
|
30
|
+
});
|
|
31
|
+
return state;
|
|
32
|
+
};
|
|
33
|
+
const resolveSeed = (state, initial) => Effect.map(FiberRef.get(CurrentSeedOverrides), (overrides) => {
|
|
34
|
+
if (!(state.manifest.name in overrides)) {
|
|
35
|
+
return initial;
|
|
36
|
+
}
|
|
37
|
+
const override = state.decodeUnknownOption(overrides[state.manifest.name]);
|
|
38
|
+
return Option.getOrElse(override, () => initial);
|
|
39
|
+
});
|
|
40
|
+
export const live = (state, initial) => Layer.effect(state.store, Effect.all([resolveScheduler, resolveSeed(state, initial), resolveInstrumentation]).pipe(Effect.map(([scheduler, seed, instrumentation]) => makeStore(seed, scheduler, stateUpdateHook(instrumentation, state.manifest.name)))));
|
|
41
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAoB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE3F,OAAO,EAAiB,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAsB/C,MAAM,CAAC,MAAM,gBAAgB,GAAkB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AA8C9E,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAO,EACP,MAAmB,EACnB,UAAwB,EAAE,EACwC,EAAE;IAEpE,MAAM,UAAU,GAAG,gBAAgB,IAAI,EAAE,CAAA;IACzC,aAAa,CAAC,UAAU,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAA6B,UAAU,CAAC,CAAA;IACxE,MAAM,QAAQ,GAAwD;QACpE,IAAI,EAAE,OAAO;QACb,IAAI;QACJ,MAAM;QACN,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAuC,cAAc,CAO9D,IAAI,EAAE;QACN,QAAQ;QACR,IAAI;QACJ,KAAK;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QACzC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACvD,OAAO,EAAE,CAAS,KAA2B,EAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;KACvE,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAClB,KAAuB,EACvB,OAAU,EACsB,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE;IAC3D,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,KAAuB,EACvB,OAAU,EACqB,EAAE,CACjC,KAAK,CAAC,MAAM,CACV,KAAK,CAAC,KAAK,EACX,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,IAAI,CACtF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,CAChD,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAClF,CACF,CACF,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Context, Effect, Layer, Schema } from 'effect';
|
|
2
|
+
import { type Manifest } from '../definition/definition.js';
|
|
3
|
+
import { type Store } from '../internal/store.js';
|
|
4
|
+
export declare const Tombstone: unique symbol;
|
|
5
|
+
export type Tombstone = typeof Tombstone;
|
|
6
|
+
export interface FamilyStore<K, V> {
|
|
7
|
+
at(key: K): Store<V>;
|
|
8
|
+
forget(key: K): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
size(): number;
|
|
11
|
+
}
|
|
12
|
+
export interface FamilyOptionsExternalApi {
|
|
13
|
+
readonly evictWhenUnused?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type FamilyOptions = FamilyOptionsExternalApi;
|
|
16
|
+
export interface FamilySchemaReflection {
|
|
17
|
+
readonly ast: Schema.Schema<unknown, unknown, unknown>['ast'];
|
|
18
|
+
}
|
|
19
|
+
export interface StateFamilyManifestExternalApi<N extends string> extends Manifest {
|
|
20
|
+
readonly kind: 'StateFamily';
|
|
21
|
+
readonly name: N;
|
|
22
|
+
readonly key: FamilySchemaReflection;
|
|
23
|
+
readonly value: FamilySchemaReflection;
|
|
24
|
+
readonly title?: string;
|
|
25
|
+
readonly description?: string;
|
|
26
|
+
}
|
|
27
|
+
export type StateFamilyManifest<N extends string> = StateFamilyManifestExternalApi<N>;
|
|
28
|
+
export declare const StateFamilyStoreTypeId: unique symbol;
|
|
29
|
+
export type StateFamilyStoreTypeId = typeof StateFamilyStoreTypeId;
|
|
30
|
+
export interface StateFamilyStore<N extends string, in out K, in out V> extends FamilyStore<K, V> {
|
|
31
|
+
readonly [StateFamilyStoreTypeId]: N;
|
|
32
|
+
}
|
|
33
|
+
export type StateFamilyCapture<Result> = <N extends string, K, V>(family: StateFamilyClass<N, K, V>) => Result;
|
|
34
|
+
export interface AnyFamily {
|
|
35
|
+
new (): {};
|
|
36
|
+
readonly manifest: StateFamilyManifest<string>;
|
|
37
|
+
readonly capture: <Result>(visit: StateFamilyCapture<Result>) => Result;
|
|
38
|
+
}
|
|
39
|
+
export interface StateFamilyClass<N extends string, K, V> {
|
|
40
|
+
new (): {
|
|
41
|
+
readonly Key: K;
|
|
42
|
+
};
|
|
43
|
+
readonly manifest: StateFamilyManifest<N>;
|
|
44
|
+
readonly capture: <Result>(visit: StateFamilyCapture<Result>) => Result;
|
|
45
|
+
readonly store: Context.Tag<StateFamilyStore<N, K, V>, FamilyStore<K, V>>;
|
|
46
|
+
readonly validateKeySync: (input: unknown) => K;
|
|
47
|
+
readonly validateValueSync: (input: unknown) => V;
|
|
48
|
+
}
|
|
49
|
+
export type FamilyName<F> = F extends StateFamilyClass<infer N, infer _K, infer _V> ? N : never;
|
|
50
|
+
export type FamilyKey<F> = F extends StateFamilyClass<infer _N, infer K, infer _V> ? K : never;
|
|
51
|
+
export type FamilyValue<F> = F extends StateFamilyClass<infer _N, infer _K, infer V> ? V : never;
|
|
52
|
+
export interface StateFamilyMakeOptionsExternalApi {
|
|
53
|
+
readonly title?: string;
|
|
54
|
+
readonly description?: string;
|
|
55
|
+
}
|
|
56
|
+
export declare const make: <const N extends string, K, KeyEncoded, V, ValueEncoded>(name: N, key: Schema.Schema<K, KeyEncoded, never>, valueSchema: Schema.Schema<V, ValueEncoded, never>, options?: StateFamilyMakeOptionsExternalApi) => StateFamilyClass<N, K, V>;
|
|
57
|
+
export declare const read: <N extends string, K, V>(family: StateFamilyClass<N, K, V>, key: K) => Effect.Effect<V, never, StateFamilyStore<N, K, V>>;
|
|
58
|
+
export declare const live: <N extends string, K, V>(family: StateFamilyClass<N, K, V>, initial: V | ((key: K) => V), options?: FamilyOptions) => Layer.Layer<StateFamilyStore<N, K, V>>;
|
|
59
|
+
//# sourceMappingURL=stateFamily.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateFamily.d.ts","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Context, Effect, Layer, MutableRef, Schema } from 'effect';
|
|
2
|
+
import { definitionClass } from '../definition/definition.js';
|
|
3
|
+
import { makeKeyCanonicalizer } from '../internal/familyKeys.js';
|
|
4
|
+
import { resolveScheduler } from '../internal/scheduler.js';
|
|
5
|
+
import { claimStateTag } from '../internal/stateRegistry.js';
|
|
6
|
+
import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
|
|
7
|
+
import { makeStore } from '../internal/store.js';
|
|
8
|
+
import { readTracked } from '../internal/track.js';
|
|
9
|
+
import { microtask } from '../internal/platform.js';
|
|
10
|
+
export const Tombstone = Symbol.for('reform/StateFamily/Tombstone');
|
|
11
|
+
const makeFamilyStore = (seed, scheduler, options = {}, onChange = () => { }) => {
|
|
12
|
+
const entries = new Map();
|
|
13
|
+
const keys = makeKeyCanonicalizer();
|
|
14
|
+
const evictWhenUnused = options.evictWhenUnused === true;
|
|
15
|
+
// Stamps identify a store *instance*, not a key: `forget` lets one key hold a
|
|
16
|
+
// succession of stores, and a stale unsubscribe from an earlier one must not
|
|
17
|
+
// decrement — or evict — the one that replaced it.
|
|
18
|
+
const stamps = new Map();
|
|
19
|
+
const nextStamp = MutableRef.make(0);
|
|
20
|
+
// A forgotten key's store is orphaned — `at(key)` mints a fresh one — so its
|
|
21
|
+
// subscribers must be woken to re-read, or they hold a store nothing writes to
|
|
22
|
+
// again and never hear about the key another way.
|
|
23
|
+
const wakers = new Map();
|
|
24
|
+
const wakersFor = (key) => {
|
|
25
|
+
const existing = wakers.get(key);
|
|
26
|
+
if (existing !== undefined) {
|
|
27
|
+
return existing;
|
|
28
|
+
}
|
|
29
|
+
const created = new Set();
|
|
30
|
+
wakers.set(key, created);
|
|
31
|
+
return created;
|
|
32
|
+
};
|
|
33
|
+
const wakeable = (key, store) => ({
|
|
34
|
+
...store,
|
|
35
|
+
subscribe: (listener) => {
|
|
36
|
+
const registered = wakersFor(key);
|
|
37
|
+
registered.add(listener);
|
|
38
|
+
const off = store.subscribe(listener);
|
|
39
|
+
return () => {
|
|
40
|
+
registered.delete(listener);
|
|
41
|
+
off();
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const dropKey = (key) => {
|
|
46
|
+
entries.delete(key);
|
|
47
|
+
stamps.delete(key);
|
|
48
|
+
keys.release(key);
|
|
49
|
+
const woken = wakers.get(key);
|
|
50
|
+
wakers.delete(key);
|
|
51
|
+
if (woken !== undefined && woken.size > 0) {
|
|
52
|
+
scheduler.schedule(woken);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const refCounted = (key, store, stamp) => {
|
|
56
|
+
const count = MutableRef.make(0);
|
|
57
|
+
return {
|
|
58
|
+
...store,
|
|
59
|
+
subscribe: (listener) => {
|
|
60
|
+
MutableRef.update(count, (current) => current + 1);
|
|
61
|
+
const off = store.subscribe(listener);
|
|
62
|
+
const released = { done: false };
|
|
63
|
+
return () => {
|
|
64
|
+
if (released.done) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
released.done = true;
|
|
68
|
+
off();
|
|
69
|
+
MutableRef.update(count, (current) => Math.max(0, current - 1));
|
|
70
|
+
if (MutableRef.get(count) > 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
microtask(() => {
|
|
74
|
+
// Still unused, and still the store this key holds.
|
|
75
|
+
if (MutableRef.get(count) === 0 && stamps.get(key) === stamp) {
|
|
76
|
+
entries.delete(key);
|
|
77
|
+
stamps.delete(key);
|
|
78
|
+
keys.release(key);
|
|
79
|
+
if (wakersFor(key).size === 0) {
|
|
80
|
+
wakers.delete(key);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
at: (rawKey) => {
|
|
90
|
+
const key = keys.canonical(rawKey);
|
|
91
|
+
const existing = entries.get(key);
|
|
92
|
+
if (existing !== undefined) {
|
|
93
|
+
return existing;
|
|
94
|
+
}
|
|
95
|
+
const stamp = MutableRef.updateAndGet(nextStamp, (current) => current + 1);
|
|
96
|
+
const base = makeStore(seed(key), scheduler, onChange);
|
|
97
|
+
const created = wakeable(key, evictWhenUnused ? refCounted(key, base, stamp) : base);
|
|
98
|
+
entries.set(key, created);
|
|
99
|
+
stamps.set(key, stamp);
|
|
100
|
+
return created;
|
|
101
|
+
},
|
|
102
|
+
forget: (key) => dropKey(keys.canonical(key)),
|
|
103
|
+
clear: () => {
|
|
104
|
+
Array.from(entries.keys()).forEach(dropKey);
|
|
105
|
+
keys.reset();
|
|
106
|
+
},
|
|
107
|
+
size: () => entries.size,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
export const StateFamilyStoreTypeId = Symbol.for('reform/StateFamilyStore');
|
|
111
|
+
export const make = (name, key, valueSchema, options = {}) => {
|
|
112
|
+
const identifier = `reform/family/${name}`;
|
|
113
|
+
claimStateTag(identifier);
|
|
114
|
+
const store = Context.GenericTag(identifier);
|
|
115
|
+
const manifest = {
|
|
116
|
+
kind: 'StateFamily',
|
|
117
|
+
name,
|
|
118
|
+
key,
|
|
119
|
+
value: valueSchema,
|
|
120
|
+
...(options.title !== undefined ? { title: options.title } : {}),
|
|
121
|
+
...(options.description !== undefined ? { description: options.description } : {}),
|
|
122
|
+
};
|
|
123
|
+
const family = definitionClass({
|
|
124
|
+
manifest,
|
|
125
|
+
store,
|
|
126
|
+
validateKeySync: Schema.validateSync(key),
|
|
127
|
+
validateValueSync: Schema.validateSync(valueSchema),
|
|
128
|
+
capture: (visit) => visit(family),
|
|
129
|
+
});
|
|
130
|
+
return family;
|
|
131
|
+
};
|
|
132
|
+
export const read = (family, key) => Effect.flatMap(family.store, (familyStore) => readTracked(familyStore.at(key)));
|
|
133
|
+
export const live = (family, initial, options = {}) => {
|
|
134
|
+
const seed = (key) => typeof initial === 'function'
|
|
135
|
+
? family.validateValueSync(Reflect.apply(initial, undefined, [key]))
|
|
136
|
+
: initial;
|
|
137
|
+
return Layer.effect(family.store, Effect.zipWith(resolveScheduler, resolveInstrumentation, (scheduler, instrumentation) => makeFamilyStore(seed, scheduler, options, stateUpdateHook(instrumentation, family.manifest.name))));
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=stateFamily.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateFamily.js","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Layer } from 'effect';
|
|
2
|
+
import { type StoresOf } from '../internal/sources.js';
|
|
3
|
+
import { type AnyState, type StateName, type StateValue } from './state.js';
|
|
4
|
+
import { StateToken } from './token.js';
|
|
5
|
+
type MemberForName<Members extends ReadonlyArray<AnyState>, N extends string> = Extract<Members[number], {
|
|
6
|
+
readonly manifest: {
|
|
7
|
+
readonly name: N;
|
|
8
|
+
};
|
|
9
|
+
}>;
|
|
10
|
+
type ValueForName<Members extends ReadonlyArray<AnyState>, N extends string> = StateValue<MemberForName<Members, N>>;
|
|
11
|
+
export interface StateGroupClass<Members extends ReadonlyArray<AnyState>> {
|
|
12
|
+
new (): {};
|
|
13
|
+
readonly kind: 'StateGroup';
|
|
14
|
+
readonly members: Members;
|
|
15
|
+
readonly byName: ReadonlyMap<string, AnyState>;
|
|
16
|
+
}
|
|
17
|
+
export type AnyStateGroup = StateGroupClass<ReadonlyArray<AnyState>>;
|
|
18
|
+
type DuplicateStateName<N extends string> = readonly ['reform: duplicate state name in group', N];
|
|
19
|
+
type NoDuplicateNames<Members extends ReadonlyArray<AnyState>, Seen extends string = never, Acc extends ReadonlyArray<unknown> = readonly []> = Members extends readonly [
|
|
20
|
+
infer Head extends AnyState,
|
|
21
|
+
...infer Tail extends ReadonlyArray<AnyState>
|
|
22
|
+
] ? NoDuplicateNames<Tail, Seen | StateName<Head>, readonly [
|
|
23
|
+
...Acc,
|
|
24
|
+
StateName<Head> extends Seen ? DuplicateStateName<StateName<Head>> : Head
|
|
25
|
+
]> : Acc;
|
|
26
|
+
export type GroupSeeds<G extends AnyStateGroup> = G extends StateGroupClass<infer Members> ? {
|
|
27
|
+
readonly [N in StateName<Members[number]>]: ValueForName<Members, N>;
|
|
28
|
+
} : never;
|
|
29
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
30
|
+
type EntrySeeds<G> = G extends AnyStateGroup ? GroupSeeds<G> : never;
|
|
31
|
+
export type SeedsOf<St extends ReadonlyArray<unknown>> = Partial<UnionToIntersection<EntrySeeds<St[number]>>>;
|
|
32
|
+
export declare const make: <const Members extends ReadonlyArray<AnyState>>(...members: Members & NoDuplicateNames<Members>) => StateGroupClass<Members>;
|
|
33
|
+
export declare const select: <Members extends ReadonlyArray<AnyState>, N extends StateName<Members[number]>>(group: StateGroupClass<Members>, name: N) => StateToken<N, ValueForName<Members, N>>;
|
|
34
|
+
export declare function live<Members extends ReadonlyArray<AnyState>>(group: StateGroupClass<Members>, seeds: GroupSeeds<StateGroupClass<Members>>): Layer.Layer<StoresOf<Members>>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=stateGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateGroup.d.ts","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Array as Arr, Context, Effect, Layer, Option } from 'effect';
|
|
2
|
+
import { definitionClass } from '../definition/definition.js';
|
|
3
|
+
import { DuplicateRegistration, UnknownGroupState } from '../internal/errors.js';
|
|
4
|
+
import {} from '../internal/sources.js';
|
|
5
|
+
import { live as stateLive, } from './state.js';
|
|
6
|
+
import { StateToken } from './token.js';
|
|
7
|
+
export const make = (...members) => {
|
|
8
|
+
const names = members.map((member) => member.manifest.name);
|
|
9
|
+
const duplicate = Arr.findFirst(names, (name, index) => Option.exists(Arr.findFirstIndex(names, (candidate) => candidate === name), (firstIndex) => firstIndex !== index));
|
|
10
|
+
if (Option.isSome(duplicate)) {
|
|
11
|
+
// oxlint-disable-next-line reform-rules/no-throw -- definition-time invariant; sync factory has no Effect context (see internal/errors.ts)
|
|
12
|
+
throw new DuplicateRegistration({ kind: 'state in group', name: duplicate.value });
|
|
13
|
+
}
|
|
14
|
+
return definitionClass({
|
|
15
|
+
kind: 'StateGroup',
|
|
16
|
+
members,
|
|
17
|
+
byName: new Map(members.map((member) => [member.manifest.name, member])),
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export const select = (group, name) => {
|
|
21
|
+
const member = group.byName.get(name);
|
|
22
|
+
if (member === undefined) {
|
|
23
|
+
// oxlint-disable-next-line reform-rules/no-throw -- definition-time invariant; sync lookup has no Effect context (see internal/errors.ts)
|
|
24
|
+
throw new UnknownGroupState({ name });
|
|
25
|
+
}
|
|
26
|
+
const store = Context.GenericTag(`reform/state/${name}`);
|
|
27
|
+
return new StateToken(name, store);
|
|
28
|
+
};
|
|
29
|
+
export function live(group, seeds) {
|
|
30
|
+
const layers = group.members.map((member) => member.capture((state) => Layer.unwrapEffect(state.validate(seeds[state.manifest.name]).pipe(Effect.orDie, Effect.map((seed) => stateLive(state, seed))))));
|
|
31
|
+
return layers.reduce((merged, memberLayer) => Layer.merge(merged, memberLayer), Layer.empty);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=stateGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateGroup.js","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Context, Effect, Effectable } from 'effect';
|
|
2
|
+
import type { Store } from '../internal/store.js';
|
|
3
|
+
import type { StateStore } from './state.js';
|
|
4
|
+
export declare class StateToken<N extends string, in out A, Identifier = StateStore<N, A>> extends Effectable.Class<A, never, Identifier> {
|
|
5
|
+
readonly name: N;
|
|
6
|
+
readonly store: Context.Tag<Identifier, Store<A>>;
|
|
7
|
+
constructor(name: N, store: Context.Tag<Identifier, Store<A>>);
|
|
8
|
+
commit(): Effect.Effect<A, never, Identifier>;
|
|
9
|
+
capture<Result>(visit: SourceCapture<Result>): Result;
|
|
10
|
+
}
|
|
11
|
+
export type SourceCapture<Result> = <N extends string, A, Identifier>(source: Source<N, A, Identifier>) => Result;
|
|
12
|
+
export interface AnySource {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly store: {
|
|
15
|
+
readonly key: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface Source<N extends string, A, Identifier> extends AnySource {
|
|
19
|
+
readonly name: N;
|
|
20
|
+
readonly store: Context.Tag<Identifier, Store<A>>;
|
|
21
|
+
}
|
|
22
|
+
export type SourceName<S> = S extends {
|
|
23
|
+
readonly manifest: {
|
|
24
|
+
readonly name: infer N extends string;
|
|
25
|
+
};
|
|
26
|
+
} ? N : S extends {
|
|
27
|
+
readonly name: infer N extends string;
|
|
28
|
+
} ? N : never;
|
|
29
|
+
export type SourceValue<S> = S extends {
|
|
30
|
+
readonly store: Context.Tag<infer _Identifier, Store<infer A>>;
|
|
31
|
+
} ? A : never;
|
|
32
|
+
export type SourceIdentifier<S> = S extends {
|
|
33
|
+
readonly store: Context.Tag<infer Identifier, infer _Service>;
|
|
34
|
+
} ? Identifier : never;
|
|
35
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/state/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,qBAAa,UAAU,CACrB,CAAC,SAAS,MAAM,EAChB,EAAE,CAAC,GAAG,CAAC,CAAC,EACR,UAAU,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7B,SAAQ,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAK7D,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAG7C,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM;CAGtD;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,UAAU,EAClE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAC7B,MAAM,CAAA;AAEX,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,UAAU,CAAE,SAAQ,SAAS;IACxE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS;IACpC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;KAAE,CAAA;CAC7D,GACG,CAAC,GACD,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACjD,CAAC,GACD,KAAK,CAAA;AACX,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAC/D,GACG,CAAC,GACD,KAAK,CAAA;AACT,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,EAAE,MAAM,QAAQ,CAAC,CAAA;CAC9D,GACG,UAAU,GACV,KAAK,CAAA"}
|