@playfast/reform 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boundary/boundary.d.ts +64 -0
- package/dist/boundary/boundary.d.ts.map +1 -0
- package/dist/boundary/boundary.js +102 -0
- package/dist/boundary/boundary.js.map +1 -0
- package/dist/calc/asyncCalc.d.ts +21 -0
- package/dist/calc/asyncCalc.d.ts.map +1 -0
- package/dist/calc/asyncCalc.js +90 -0
- package/dist/calc/asyncCalc.js.map +1 -0
- package/dist/calc/asyncCalcTypes.d.ts +78 -0
- package/dist/calc/asyncCalcTypes.d.ts.map +1 -0
- package/dist/calc/asyncCalcTypes.js +2 -0
- package/dist/calc/asyncCalcTypes.js.map +1 -0
- package/dist/calc/asyncData.d.ts +29 -0
- package/dist/calc/asyncData.d.ts.map +1 -0
- package/dist/calc/asyncData.js +21 -0
- package/dist/calc/asyncData.js.map +1 -0
- package/dist/calc/calc.d.ts +39 -0
- package/dist/calc/calc.d.ts.map +1 -0
- package/dist/calc/calc.js +48 -0
- package/dist/calc/calc.js.map +1 -0
- package/dist/calc/calcFamily.d.ts +40 -0
- package/dist/calc/calcFamily.d.ts.map +1 -0
- package/dist/calc/calcFamily.js +113 -0
- package/dist/calc/calcFamily.js.map +1 -0
- package/dist/calc/compose.d.ts +5 -0
- package/dist/calc/compose.d.ts.map +1 -0
- package/dist/calc/compose.js +5 -0
- package/dist/calc/compose.js.map +1 -0
- package/dist/calc/queryState.d.ts +12 -0
- package/dist/calc/queryState.d.ts.map +1 -0
- package/dist/calc/queryState.js +17 -0
- package/dist/calc/queryState.js.map +1 -0
- package/dist/channel/channel.d.ts +51 -0
- package/dist/channel/channel.d.ts.map +1 -0
- package/dist/channel/channel.js +86 -0
- package/dist/channel/channel.js.map +1 -0
- package/dist/channel/procedures.d.ts +24 -0
- package/dist/channel/procedures.d.ts.map +1 -0
- package/dist/channel/procedures.js +82 -0
- package/dist/channel/procedures.js.map +1 -0
- package/dist/compose/composition.d.ts +12 -0
- package/dist/compose/composition.d.ts.map +1 -0
- package/dist/compose/composition.js +56 -0
- package/dist/compose/composition.js.map +1 -0
- package/dist/compose/compositionTypes.d.ts +127 -0
- package/dist/compose/compositionTypes.d.ts.map +1 -0
- package/dist/compose/compositionTypes.js +2 -0
- package/dist/compose/compositionTypes.js.map +1 -0
- package/dist/compose/host.d.ts +6 -0
- package/dist/compose/host.d.ts.map +1 -0
- package/dist/compose/host.js +2 -0
- package/dist/compose/host.js.map +1 -0
- package/dist/compose/props.d.ts +10 -0
- package/dist/compose/props.d.ts.map +1 -0
- package/dist/compose/props.js +6 -0
- package/dist/compose/props.js.map +1 -0
- package/dist/compose/provide.d.ts +18 -0
- package/dist/compose/provide.d.ts.map +1 -0
- package/dist/compose/provide.js +49 -0
- package/dist/compose/provide.js.map +1 -0
- package/dist/compose/slot.d.ts +70 -0
- package/dist/compose/slot.d.ts.map +1 -0
- package/dist/compose/slot.js +26 -0
- package/dist/compose/slot.js.map +1 -0
- package/dist/compose/structure.d.ts +51 -0
- package/dist/compose/structure.d.ts.map +1 -0
- package/dist/compose/structure.js +92 -0
- package/dist/compose/structure.js.map +1 -0
- package/dist/compose/ui.d.ts +112 -0
- package/dist/compose/ui.d.ts.map +1 -0
- package/dist/compose/ui.js +47 -0
- package/dist/compose/ui.js.map +1 -0
- package/dist/definition/definition.d.ts +11 -0
- package/dist/definition/definition.d.ts.map +1 -0
- package/dist/definition/definition.js +35 -0
- package/dist/definition/definition.js.map +1 -0
- package/dist/event/event.d.ts +52 -0
- package/dist/event/event.d.ts.map +1 -0
- package/dist/event/event.js +67 -0
- package/dist/event/event.js.map +1 -0
- package/dist/event/eventGroup.d.ts +8 -0
- package/dist/event/eventGroup.d.ts.map +1 -0
- package/dist/event/eventGroup.js +3 -0
- package/dist/event/eventGroup.js.map +1 -0
- package/dist/feature/feature.d.ts +27 -0
- package/dist/feature/feature.d.ts.map +1 -0
- package/dist/feature/feature.js +20 -0
- package/dist/feature/feature.js.map +1 -0
- package/dist/feature/featureBinding.d.ts +85 -0
- package/dist/feature/featureBinding.d.ts.map +1 -0
- package/dist/feature/featureBinding.js +10 -0
- package/dist/feature/featureBinding.js.map +1 -0
- package/dist/feature/featureClass.d.ts +10 -0
- package/dist/feature/featureClass.d.ts.map +1 -0
- package/dist/feature/featureClass.js +2 -0
- package/dist/feature/featureClass.js.map +1 -0
- package/dist/feature/featureConfig.d.ts +86 -0
- package/dist/feature/featureConfig.d.ts.map +1 -0
- package/dist/feature/featureConfig.js +13 -0
- package/dist/feature/featureConfig.js.map +1 -0
- package/dist/feature/featureFactory.d.ts +15 -0
- package/dist/feature/featureFactory.d.ts.map +1 -0
- package/dist/feature/featureFactory.js +59 -0
- package/dist/feature/featureFactory.js.map +1 -0
- package/dist/feature/featureModule.d.ts +28 -0
- package/dist/feature/featureModule.d.ts.map +1 -0
- package/dist/feature/featureModule.js +33 -0
- package/dist/feature/featureModule.js.map +1 -0
- package/dist/feature/featureNativeTree.d.ts +26 -0
- package/dist/feature/featureNativeTree.d.ts.map +1 -0
- package/dist/feature/featureNativeTree.js +2 -0
- package/dist/feature/featureNativeTree.js.map +1 -0
- package/dist/feature/featureRequirement.d.ts +43 -0
- package/dist/feature/featureRequirement.d.ts.map +1 -0
- package/dist/feature/featureRequirement.js +6 -0
- package/dist/feature/featureRequirement.js.map +1 -0
- package/dist/feature/featureVariants.d.ts +9 -0
- package/dist/feature/featureVariants.d.ts.map +1 -0
- package/dist/feature/featureVariants.js +59 -0
- package/dist/feature/featureVariants.js.map +1 -0
- package/dist/feature/mountFeature.d.ts +10 -0
- package/dist/feature/mountFeature.d.ts.map +1 -0
- package/dist/feature/mountFeature.js +14 -0
- package/dist/feature/mountFeature.js.map +1 -0
- package/dist/graph/closure.d.ts +77 -0
- package/dist/graph/closure.d.ts.map +1 -0
- package/dist/graph/closure.js +4 -0
- package/dist/graph/closure.js.map +1 -0
- package/dist/graph/services.d.ts +30 -0
- package/dist/graph/services.d.ts.map +1 -0
- package/dist/graph/services.js +2 -0
- package/dist/graph/services.js.map +1 -0
- package/dist/graph/summary.d.ts +60 -0
- package/dist/graph/summary.d.ts.map +1 -0
- package/dist/graph/summary.js +7 -0
- package/dist/graph/summary.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/bucketCache.d.ts +19 -0
- package/dist/internal/bucketCache.d.ts.map +1 -0
- package/dist/internal/bucketCache.js +20 -0
- package/dist/internal/bucketCache.js.map +1 -0
- package/dist/internal/capture.d.ts +17 -0
- package/dist/internal/capture.d.ts.map +1 -0
- package/dist/internal/capture.js +5 -0
- package/dist/internal/capture.js.map +1 -0
- package/dist/internal/env.d.ts +2 -0
- package/dist/internal/env.d.ts.map +1 -0
- package/dist/internal/env.js +5 -0
- package/dist/internal/env.js.map +1 -0
- package/dist/internal/errors.d.ts +48 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +69 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/inspect.d.ts +5 -0
- package/dist/internal/inspect.d.ts.map +1 -0
- package/dist/internal/inspect.js +20 -0
- package/dist/internal/inspect.js.map +1 -0
- package/dist/internal/queryDriver.d.ts +7 -0
- package/dist/internal/queryDriver.d.ts.map +1 -0
- package/dist/internal/queryDriver.js +198 -0
- package/dist/internal/queryDriver.js.map +1 -0
- package/dist/internal/queryDriverHydrate.d.ts +17 -0
- package/dist/internal/queryDriverHydrate.d.ts.map +1 -0
- package/dist/internal/queryDriverHydrate.js +19 -0
- package/dist/internal/queryDriverHydrate.js.map +1 -0
- package/dist/internal/queryDriverStore.d.ts +54 -0
- package/dist/internal/queryDriverStore.d.ts.map +1 -0
- package/dist/internal/queryDriverStore.js +77 -0
- package/dist/internal/queryDriverStore.js.map +1 -0
- package/dist/internal/queryDriverTypes.d.ts +41 -0
- package/dist/internal/queryDriverTypes.d.ts.map +1 -0
- package/dist/internal/queryDriverTypes.js +9 -0
- package/dist/internal/queryDriverTypes.js.map +1 -0
- package/dist/internal/queryEvents.d.ts +12 -0
- package/dist/internal/queryEvents.d.ts.map +1 -0
- package/dist/internal/queryEvents.js +11 -0
- package/dist/internal/queryEvents.js.map +1 -0
- package/dist/internal/queryStore.d.ts +13 -0
- package/dist/internal/queryStore.d.ts.map +1 -0
- package/dist/internal/queryStore.js +11 -0
- package/dist/internal/queryStore.js.map +1 -0
- package/dist/internal/reuse.d.ts +2 -0
- package/dist/internal/reuse.d.ts.map +1 -0
- package/dist/internal/reuse.js +55 -0
- package/dist/internal/reuse.js.map +1 -0
- package/dist/internal/scheduler.d.ts +13 -0
- package/dist/internal/scheduler.d.ts.map +1 -0
- package/dist/internal/scheduler.js +38 -0
- package/dist/internal/scheduler.js.map +1 -0
- package/dist/internal/seeds.d.ts +3 -0
- package/dist/internal/seeds.d.ts.map +1 -0
- package/dist/internal/seeds.js +3 -0
- package/dist/internal/seeds.js.map +1 -0
- package/dist/internal/sources.d.ts +20 -0
- package/dist/internal/sources.d.ts.map +1 -0
- package/dist/internal/sources.js +39 -0
- package/dist/internal/sources.js.map +1 -0
- package/dist/internal/stateRegistry.d.ts +2 -0
- package/dist/internal/stateRegistry.d.ts.map +1 -0
- package/dist/internal/stateRegistry.js +15 -0
- package/dist/internal/stateRegistry.js.map +1 -0
- package/dist/internal/store.d.ts +15 -0
- package/dist/internal/store.d.ts.map +1 -0
- package/dist/internal/store.js +61 -0
- package/dist/internal/store.js.map +1 -0
- package/dist/internal/track.d.ts +15 -0
- package/dist/internal/track.d.ts.map +1 -0
- package/dist/internal/track.js +11 -0
- package/dist/internal/track.js.map +1 -0
- package/dist/internal/variance.d.ts +4 -0
- package/dist/internal/variance.d.ts.map +1 -0
- package/dist/internal/variance.js +2 -0
- package/dist/internal/variance.js.map +1 -0
- package/dist/internal.d.ts +42 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +58 -0
- package/dist/internal.js.map +1 -0
- package/dist/namespace/namespace.d.ts +24 -0
- package/dist/namespace/namespace.d.ts.map +1 -0
- package/dist/namespace/namespace.js +20 -0
- package/dist/namespace/namespace.js.map +1 -0
- package/dist/procedure/procedure.d.ts +32 -0
- package/dist/procedure/procedure.d.ts.map +1 -0
- package/dist/procedure/procedure.js +34 -0
- package/dist/procedure/procedure.js.map +1 -0
- package/dist/reducer/reducer.d.ts +35 -0
- package/dist/reducer/reducer.d.ts.map +1 -0
- package/dist/reducer/reducer.js +73 -0
- package/dist/reducer/reducer.js.map +1 -0
- package/dist/remote/pendingQueue.d.ts +20 -0
- package/dist/remote/pendingQueue.d.ts.map +1 -0
- package/dist/remote/pendingQueue.js +113 -0
- package/dist/remote/pendingQueue.js.map +1 -0
- package/dist/remote/remoteState.d.ts +13 -0
- package/dist/remote/remoteState.d.ts.map +1 -0
- package/dist/remote/remoteState.js +176 -0
- package/dist/remote/remoteState.js.map +1 -0
- package/dist/remote/remoteStateMake.d.ts +8 -0
- package/dist/remote/remoteStateMake.d.ts.map +1 -0
- package/dist/remote/remoteStateMake.js +46 -0
- package/dist/remote/remoteStateMake.js.map +1 -0
- package/dist/remote/remoteStateSend.d.ts +41 -0
- package/dist/remote/remoteStateSend.d.ts.map +1 -0
- package/dist/remote/remoteStateSend.js +67 -0
- package/dist/remote/remoteStateSend.js.map +1 -0
- package/dist/remote/remoteStateTypes.d.ts +103 -0
- package/dist/remote/remoteStateTypes.d.ts.map +1 -0
- package/dist/remote/remoteStateTypes.js +4 -0
- package/dist/remote/remoteStateTypes.js.map +1 -0
- package/dist/runtime/appRuntime.d.ts +10 -0
- package/dist/runtime/appRuntime.d.ts.map +1 -0
- package/dist/runtime/appRuntime.js +6 -0
- package/dist/runtime/appRuntime.js.map +1 -0
- package/dist/runtime/bus.d.ts +17 -0
- package/dist/runtime/bus.d.ts.map +1 -0
- package/dist/runtime/bus.js +12 -0
- package/dist/runtime/bus.js.map +1 -0
- package/dist/runtime/capturedAppRuntime.d.ts +7 -0
- package/dist/runtime/capturedAppRuntime.d.ts.map +1 -0
- package/dist/runtime/capturedAppRuntime.js +151 -0
- package/dist/runtime/capturedAppRuntime.js.map +1 -0
- package/dist/runtime/eventBudget.d.ts +32 -0
- package/dist/runtime/eventBudget.d.ts.map +1 -0
- package/dist/runtime/eventBudget.js +67 -0
- package/dist/runtime/eventBudget.js.map +1 -0
- package/dist/runtime/featureMount.d.ts +16 -0
- package/dist/runtime/featureMount.d.ts.map +1 -0
- package/dist/runtime/featureMount.js +54 -0
- package/dist/runtime/featureMount.js.map +1 -0
- package/dist/runtime/instrumentation.d.ts +18 -0
- package/dist/runtime/instrumentation.d.ts.map +1 -0
- package/dist/runtime/instrumentation.js +16 -0
- package/dist/runtime/instrumentation.js.map +1 -0
- package/dist/runtime/loop.d.ts +32 -0
- package/dist/runtime/loop.d.ts.map +1 -0
- package/dist/runtime/loop.js +128 -0
- package/dist/runtime/loop.js.map +1 -0
- package/dist/runtime/queries.d.ts +20 -0
- package/dist/runtime/queries.d.ts.map +1 -0
- package/dist/runtime/queries.js +21 -0
- package/dist/runtime/queries.js.map +1 -0
- package/dist/runtime/runtimeHandle.d.ts +56 -0
- package/dist/runtime/runtimeHandle.d.ts.map +1 -0
- package/dist/runtime/runtimeHandle.js +2 -0
- package/dist/runtime/runtimeHandle.js.map +1 -0
- package/dist/scene/scene.d.ts +55 -0
- package/dist/scene/scene.d.ts.map +1 -0
- package/dist/scene/scene.js +74 -0
- package/dist/scene/scene.js.map +1 -0
- package/dist/state/state.d.ts +54 -0
- package/dist/state/state.d.ts.map +1 -0
- package/dist/state/state.js +41 -0
- package/dist/state/state.js.map +1 -0
- package/dist/state/stateFamily.d.ts +59 -0
- package/dist/state/stateFamily.d.ts.map +1 -0
- package/dist/state/stateFamily.js +91 -0
- package/dist/state/stateFamily.js.map +1 -0
- package/dist/state/stateGroup.d.ts +36 -0
- package/dist/state/stateGroup.d.ts.map +1 -0
- package/dist/state/stateGroup.js +33 -0
- package/dist/state/stateGroup.js.map +1 -0
- package/dist/state/token.d.ts +35 -0
- package/dist/state/token.d.ts.map +1 -0
- package/dist/state/token.js +18 -0
- package/dist/state/token.js.map +1 -0
- package/dist/synced/syncedStore.d.ts +44 -0
- package/dist/synced/syncedStore.d.ts.map +1 -0
- package/dist/synced/syncedStore.js +32 -0
- package/dist/synced/syncedStore.js.map +1 -0
- package/dist/testkit/flight.testkit.d.ts +18 -0
- package/dist/testkit/flight.testkit.d.ts.map +1 -0
- package/dist/testkit/flight.testkit.js +45 -0
- package/dist/testkit/flight.testkit.js.map +1 -0
- package/dist/ui/node.d.ts +3 -0
- package/dist/ui/node.d.ts.map +1 -0
- package/dist/ui/node.js +2 -0
- package/dist/ui/node.js.map +1 -0
- package/dist/ui/trigger.d.ts +2 -0
- package/dist/ui/trigger.d.ts.map +1 -0
- package/dist/ui/trigger.js +2 -0
- package/dist/ui/trigger.js.map +1 -0
- package/dist/wire/tree.d.ts +32 -0
- package/dist/wire/tree.d.ts.map +1 -0
- package/dist/wire/tree.js +59 -0
- package/dist/wire/tree.js.map +1 -0
- package/dist/wire/triggers.d.ts +25 -0
- package/dist/wire/triggers.d.ts.map +1 -0
- package/dist/wire/triggers.js +31 -0
- package/dist/wire/triggers.js.map +1 -0
- package/package.json +17 -5
- package/src/boundary/boundary.test.ts +26 -23
- package/src/calc/asyncCalc.invalidate.test.ts +258 -55
- package/src/calc/asyncCalc.test.ts +225 -85
- package/src/calc/asyncCalc.ts +27 -141
- package/src/calc/asyncCalcTypes.test.ts +64 -0
- package/src/calc/asyncCalcTypes.ts +139 -0
- package/src/calc/calc.test.ts +10 -11
- package/src/calc/calcFamily.test.ts +12 -12
- package/src/channel/channel.ts +8 -106
- package/src/channel/procedures.ts +108 -0
- package/src/compose/composition.ts +49 -246
- package/src/compose/compositionTypes.ts +249 -0
- package/src/event/event.fromSource.test.ts +12 -12
- package/src/feature/feature.ts +50 -1210
- package/src/feature/feature.typecheck.ts +2 -61
- package/src/feature/featureBinding.ts +158 -0
- package/src/feature/featureClass.ts +162 -0
- package/src/feature/featureConfig.ts +192 -0
- package/src/feature/featureFactory.ts +163 -0
- package/src/feature/featureModule.ts +136 -0
- package/src/feature/featureModule.typecheck.ts +63 -0
- package/src/feature/featureNativeTree.ts +152 -0
- package/src/feature/featureRequirement.ts +82 -0
- package/src/feature/featureVariants.ts +234 -0
- package/src/feature/mountFeature.ts +54 -0
- package/src/graph/closure.ts +45 -226
- package/src/graph/services.ts +95 -0
- package/src/graph/summary.ts +134 -0
- package/src/internal/queryDriver.ts +20 -89
- package/src/internal/queryDriverHydrate.ts +45 -0
- package/src/internal/queryDriverTypes.ts +8 -10
- package/src/internal/store.test.ts +27 -6
- package/src/remote/pendingQueue.ts +145 -0
- package/src/remote/remoteState.test.ts +28 -22
- package/src/remote/remoteState.ts +63 -489
- package/src/remote/remoteStateMake.ts +97 -0
- package/src/remote/remoteStateSend.ts +122 -0
- package/src/remote/remoteStateTypes.ts +155 -0
- package/src/runtime/appRuntime.activation.test.ts +9 -5
- package/src/runtime/appRuntime.test.ts +40 -16
- package/src/runtime/appRuntime.ts +17 -472
- package/src/runtime/capturedAppRuntime.ts +274 -0
- package/src/runtime/eventBudget.test.ts +38 -8
- package/src/runtime/featureMount.ts +94 -0
- package/src/runtime/hardening.test.ts +18 -4
- package/src/runtime/instrumentation.test.ts +49 -12
- package/src/runtime/loop.test.ts +51 -10
- package/src/runtime/runtimeHandle.ts +124 -0
- package/src/state/stateFamily.test.ts +25 -8
- package/src/testkit/flight.testkit.ts +9 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { Context, Effect, Layer, Option, Schema, Scope } from 'effect';
|
|
2
|
+
import type { AST } from 'effect/SchemaAST';
|
|
3
|
+
import type { YieldWrap } from 'effect/Utils';
|
|
4
|
+
import type { Manifest } from '../definition/definition.js';
|
|
5
|
+
import type { Tracker } from '../internal/track.js';
|
|
6
|
+
import type { CurrentTracker } from '../internal/track.js';
|
|
7
|
+
import type { PropsId, PropsTag } from './props.js';
|
|
8
|
+
import type { AnySlot, AnySlotInstance, SlotClass, SlotInstance } from './slot.js';
|
|
9
|
+
import type { Structure } from './structure.js';
|
|
10
|
+
import type { UiClass, UiContract, UiReflection } from './ui.js';
|
|
11
|
+
export type Frame<C extends UiContract = UiContract> = Structure<C>;
|
|
12
|
+
export interface RenderEnv<out P = unknown> {
|
|
13
|
+
readonly props: P;
|
|
14
|
+
readonly tracker: Tracker;
|
|
15
|
+
}
|
|
16
|
+
export type CompositionActivation = Layer.Layer<never, never, never>;
|
|
17
|
+
export interface CompositionService<in out P = unknown, out C extends UiContract = UiContract> {
|
|
18
|
+
readonly render: (env: RenderEnv<P>) => Effect.Effect<Frame<C>, never, never>;
|
|
19
|
+
readonly activation: (props: P) => Option.Option<CompositionActivation>;
|
|
20
|
+
}
|
|
21
|
+
export declare const CompositionIdTypeId: unique symbol;
|
|
22
|
+
export type CompositionIdTypeId = typeof CompositionIdTypeId;
|
|
23
|
+
export interface CompositionId<out N extends string, out Identity = unknown, out RequiredSlots = unknown> {
|
|
24
|
+
readonly [CompositionIdTypeId]: {
|
|
25
|
+
readonly name: N;
|
|
26
|
+
readonly identity: Identity;
|
|
27
|
+
readonly requiredSlots: RequiredSlots;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export type IsExact<Left, Right> = [Left] extends [Right] ? ([Right] extends [Left] ? true : false) : false;
|
|
31
|
+
export type IsExactCompositionId<Service, N extends string, Identity> = Service extends {
|
|
32
|
+
readonly [CompositionIdTypeId]: {
|
|
33
|
+
readonly name: infer ServiceName extends string;
|
|
34
|
+
readonly identity: infer ServiceIdentity;
|
|
35
|
+
};
|
|
36
|
+
} ? IsExact<ServiceName, N> extends true ? IsExact<ServiceIdentity, Identity> : false : false;
|
|
37
|
+
export type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
38
|
+
export type HasExactCompositionId<Services, N extends string, Identity> = IsAny<Services> extends true ? false : true extends IsExactCompositionId<Services, N, Identity> ? true : false;
|
|
39
|
+
export type CompositionTag<N extends string, P, C extends UiContract, Identity = unknown> = Context.Tag<CompositionId<N, Identity, RequiredSlotIdentities<C>>, CompositionService<P, C>>;
|
|
40
|
+
export type SlotClassesOf<C extends UiContract> = C extends {
|
|
41
|
+
readonly slots: infer Slots extends Record<string, AnySlotInstance>;
|
|
42
|
+
} ? {
|
|
43
|
+
readonly [K in keyof Slots]: Slots[K] extends SlotInstance<infer Child, infer SlotName, infer SlotIdentity> ? SlotClass<Child, SlotName, SlotIdentity> : never;
|
|
44
|
+
} : Readonly<Record<PropertyKey, never>>;
|
|
45
|
+
export type RequiredSlotIdentity<Slot> = Slot extends SlotInstance<infer _Target, infer _Name, infer Identity> ? Identity : never;
|
|
46
|
+
export type RequiredSlotIdentities<C extends UiContract> = C extends {
|
|
47
|
+
readonly slots: infer Slots extends Record<string, AnySlotInstance>;
|
|
48
|
+
} ? RequiredSlotIdentity<Slots[keyof Slots]> : never;
|
|
49
|
+
export type CompositionSlots<C extends UiContract> = C extends {
|
|
50
|
+
readonly slots: infer Slots extends Record<string, AnySlotInstance>;
|
|
51
|
+
} ? [Slots[keyof Slots]] extends [never] ? {} : {
|
|
52
|
+
readonly slots: SlotClassesOf<C>;
|
|
53
|
+
} : {};
|
|
54
|
+
export type CompositionManifest<C extends UiContract = UiContract, N extends string = string> = Manifest & Omit<CompositionConfig, 'slots' | 'ui'> & CompositionSlots<C> & {
|
|
55
|
+
readonly kind: 'Composition';
|
|
56
|
+
readonly name: N;
|
|
57
|
+
readonly ui: UiReflection<C>;
|
|
58
|
+
};
|
|
59
|
+
export interface CompositionInstance<out Identity = unknown> {
|
|
60
|
+
readonly _compositionIdentity: Identity;
|
|
61
|
+
}
|
|
62
|
+
export interface CompositionReflection<out P = unknown, out C extends UiContract = UiContract, out S extends ReadonlyArray<unknown> = ReadonlyArray<unknown>, out N extends string = string, out Identity = unknown> {
|
|
63
|
+
new (): CompositionInstance<Identity>;
|
|
64
|
+
readonly manifest: CompositionManifest<C, N>;
|
|
65
|
+
readonly Props: P;
|
|
66
|
+
readonly Contract: C;
|
|
67
|
+
readonly States: S;
|
|
68
|
+
readonly parseProps: (input: unknown) => Option.Option<P>;
|
|
69
|
+
}
|
|
70
|
+
export interface CompositionPropsReceiver<in P> {
|
|
71
|
+
readonly acceptsProps: (props: P) => void;
|
|
72
|
+
}
|
|
73
|
+
export type CompositionCapture<Result> = <P, C extends UiContract, S extends ReadonlyArray<unknown>, N extends string, Identity>(composition: CompositionClass<P, C, S, N, Identity>) => Result;
|
|
74
|
+
export interface AnyComposition extends CompositionReflection {
|
|
75
|
+
readonly capture: <Result>(visit: CompositionCapture<Result>) => Result;
|
|
76
|
+
}
|
|
77
|
+
export interface CompositionSchema {
|
|
78
|
+
readonly ast: AST;
|
|
79
|
+
}
|
|
80
|
+
export type GeneratorContext<Eff> = [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect.Effect<infer _Success, infer _Error, infer R>>] ? R : never;
|
|
81
|
+
export interface CompositionConfigOptionalFields {
|
|
82
|
+
readonly description: string;
|
|
83
|
+
readonly props: CompositionSchema;
|
|
84
|
+
readonly states: ReadonlyArray<unknown>;
|
|
85
|
+
readonly calcs: ReadonlyArray<unknown>;
|
|
86
|
+
readonly events: ReadonlyArray<unknown>;
|
|
87
|
+
readonly slots: Record<string, AnySlot>;
|
|
88
|
+
}
|
|
89
|
+
export interface CompositionConfig extends Partial<CompositionConfigOptionalFields> {
|
|
90
|
+
readonly title: string;
|
|
91
|
+
readonly ui: UiReflection;
|
|
92
|
+
}
|
|
93
|
+
export type PropsOf<Config> = Config extends {
|
|
94
|
+
props: infer PropsSchema;
|
|
95
|
+
} ? PropsSchema extends Schema.Schema<infer P, infer _Encoded, infer _Context> ? P : unknown : unknown;
|
|
96
|
+
export type EncodedPropsOf<Config> = Config extends {
|
|
97
|
+
props: infer PropsSchema;
|
|
98
|
+
} ? PropsSchema extends Schema.Schema<infer _Props, infer Encoded, infer _Context> ? Encoded : unknown : unknown;
|
|
99
|
+
export type StatesOf<Config> = Config extends {
|
|
100
|
+
states: infer S extends ReadonlyArray<unknown>;
|
|
101
|
+
} ? S : readonly [];
|
|
102
|
+
export interface CompositionClass<in out P, in out C extends UiContract = UiContract, out S extends ReadonlyArray<unknown> = ReadonlyArray<unknown>, in out N extends string = string, in out Identity = unknown> extends CompositionReflection<P, C, S, N, Identity>, CompositionPropsReceiver<P> {
|
|
103
|
+
readonly Props: P;
|
|
104
|
+
readonly Contract: C;
|
|
105
|
+
readonly States: S;
|
|
106
|
+
readonly identity: symbol;
|
|
107
|
+
readonly props: PropsTag<P>;
|
|
108
|
+
readonly tag: CompositionTag<N, P, C, Identity>;
|
|
109
|
+
readonly capture: <Result>(visit: CompositionCapture<Result>) => Result;
|
|
110
|
+
}
|
|
111
|
+
export type CompositionDefinitionStatics<P, C extends UiContract, S extends ReadonlyArray<unknown>, N extends string, Identity> = Pick<CompositionClass<P, C, S, N, Identity>, 'manifest' | 'identity' | 'props' | 'parseProps' | 'acceptsProps' | 'tag' | 'capture'>;
|
|
112
|
+
export interface UiCarrier<C extends UiContract, UiName extends string> {
|
|
113
|
+
readonly ui: UiClass<C, UiName>;
|
|
114
|
+
}
|
|
115
|
+
export type ContractSlots<C extends UiContract> = CompositionSlots<C>;
|
|
116
|
+
export type ContextFreeProps<Config> = Config extends {
|
|
117
|
+
readonly props: infer PropsSchema;
|
|
118
|
+
} ? PropsSchema extends Schema.Schema<infer _P, infer _Encoded, infer Context> ? [Context] extends [never] ? unknown : {
|
|
119
|
+
readonly propsSchemaMustNotRequireServices: never;
|
|
120
|
+
} : unknown : unknown;
|
|
121
|
+
export type CompositionLayerInput<Eff> = Exclude<Exclude<GeneratorContext<Eff>, PropsId>, CurrentTracker>;
|
|
122
|
+
export type CompositionActivationLayerInput<Eff> = Exclude<Exclude<GeneratorContext<Eff>, PropsId>, Scope.Scope>;
|
|
123
|
+
export interface ScopedCompositionLiveConfig<C extends UiContract, RenderEff extends YieldWrap<Effect.Effect<unknown, never, unknown>>, ActivationEff extends YieldWrap<Effect.Effect<unknown, never, unknown>>> {
|
|
124
|
+
readonly render: () => Generator<RenderEff, Frame<C>, never>;
|
|
125
|
+
readonly activate: () => Generator<ActivationEff, void, never>;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=compositionTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionTypes.d.ts","sourceRoot":"","sources":["../../src/compose/compositionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,MAAM,WAAW,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAEpE,MAAM,WAAW,kBAAkB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC3F,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC7E,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;CACxE;AAED,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAA2C,CAAA;AACpF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA;AAE5D,MAAM,WAAW,aAAa,CAC5B,GAAG,CAAC,CAAC,SAAS,MAAM,EACpB,GAAG,CAAC,QAAQ,GAAG,OAAO,EACtB,GAAG,CAAC,aAAa,GAAG,OAAO;IAE3B,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE;QAC9B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;QAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;KACtC,CAAA;CACF;AAED,MAAM,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;AAE3G,MAAM,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC,SAAS,MAAM,EAAE,QAAQ,IAAI,OAAO,SAAS;IACtF,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE;QAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,SAAS,MAAM,CAAA;QAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,eAAe,CAAA;KACzC,CAAA;CACF,GACG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,IAAI,GAClC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,GAClC,KAAK,GACP,KAAK,CAAA;AAET,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAErD,MAAM,MAAM,qBAAqB,CAAC,QAAQ,EAAE,CAAC,SAAS,MAAM,EAAE,QAAQ,IACpE,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,GACxB,KAAK,GACL,IAAI,SAAS,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,GACtD,IAAI,GACJ,KAAK,CAAA;AAEb,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,MAAM,EAChB,CAAC,EACD,CAAC,SAAS,UAAU,EACpB,QAAQ,GAAG,OAAO,IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAEhG,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACpE,GACG;IACE,QAAQ,EAAE,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,YAAY,CACxD,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,YAAY,CACnB,GACG,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,GACxC,KAAK;CACV,GACD,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;AAExC,MAAM,MAAM,oBAAoB,CAAC,IAAI,IACnC,IAAI,SAAS,YAAY,CAAC,MAAM,OAAO,EAAE,MAAM,KAAK,EAAE,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE1F,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACpE,GACG,oBAAoB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,GACxC,KAAK,CAAA;AAET,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACpE,GACG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClC,EAAE,GACF;IAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAAE,GACtC,EAAE,CAAA;AAEN,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,MAAM,GAAG,MAAM,IACvB,QAAQ,GACV,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC,GACvC,gBAAgB,CAAC,CAAC,CAAC,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CAC7B,CAAA;AAEH,MAAM,WAAW,mBAAmB,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO;IACzD,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAA;CACxC;AAED,MAAM,WAAW,qBAAqB,CACpC,GAAG,CAAC,CAAC,GAAG,OAAO,EACf,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACrC,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAC7D,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7B,GAAG,CAAC,QAAQ,GAAG,OAAO;IAEtB,QAAQ,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAC1C;AAED,MAAM,MAAM,kBAAkB,CAAC,MAAM,IAAI,CACvC,CAAC,EACD,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAChC,CAAC,SAAS,MAAM,EAChB,QAAQ,EAER,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAChD,MAAM,CAAA;AAEX,MAAM,WAAW,cAAe,SAAQ,qBAAqB;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;CACxE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAClB;AAED,MAAM,MAAM,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GACrD,KAAK,GACL,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,QAAQ,EAAE,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAC7E,CAAC,GACD,KAAK,CAAA;AAGX,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAAC,+BAA+B,CAAC;IACjF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAA;CAC1B;AAED,MAAM,MAAM,OAAO,CAAC,MAAM,IAAI,MAAM,SAAS;IAAE,KAAK,EAAE,MAAM,WAAW,CAAA;CAAE,GACrE,WAAW,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,QAAQ,EAAE,MAAM,QAAQ,CAAC,GACxE,CAAC,GACD,OAAO,GACT,OAAO,CAAA;AAEX,MAAM,MAAM,cAAc,CAAC,MAAM,IAAI,MAAM,SAAS;IAAE,KAAK,EAAE,MAAM,WAAW,CAAA;CAAE,GAC5E,WAAW,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,QAAQ,CAAC,GAC5E,OAAO,GACP,OAAO,GACT,OAAO,CAAA;AAEX,MAAM,MAAM,QAAQ,CAAC,MAAM,IAAI,MAAM,SAAS;IAC5C,MAAM,EAAE,MAAM,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,CAAA;CAC/C,GACG,CAAC,GACD,SAAS,EAAE,CAAA;AAEf,MAAM,WAAW,gBAAgB,CAC/B,EAAE,CAAC,GAAG,CAAC,CAAC,EACR,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACxC,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAC7D,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAChC,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAEzB,SAAQ,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAChF,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/C,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;CACxE;AAED,MAAM,MAAM,4BAA4B,CACtC,CAAC,EACD,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAChC,CAAC,SAAS,MAAM,EAChB,QAAQ,IACN,IAAI,CACN,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EACtC,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,cAAc,GAAG,KAAK,GAAG,SAAS,CACtF,CAAA;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,SAAS,MAAM;IACpE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,UAAU,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAErE,MAAM,MAAM,gBAAgB,CAAC,MAAM,IAAI,MAAM,SAAS;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,WAAW,CAAA;CAClC,GACG,WAAW,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,QAAQ,EAAE,MAAM,OAAO,CAAC,GACxE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GACvB,OAAO,GACP;IAAE,QAAQ,CAAC,iCAAiC,EAAE,KAAK,CAAA;CAAE,GACvD,OAAO,GACT,OAAO,CAAA;AACX,MAAM,MAAM,qBAAqB,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAA;AAEzG,MAAM,MAAM,+BAA+B,CAAC,GAAG,IAAI,OAAO,CACxD,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EACvC,KAAK,CAAC,KAAK,CACZ,CAAA;AAED,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,UAAU,EACpB,SAAS,SAAS,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,EACnE,aAAa,SAAS,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvE,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionTypes.js","sourceRoot":"","sources":["../../src/compose/compositionTypes.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/compose/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,WAAW,YAAY;IAC3B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/compose/host.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Context } from 'effect';
|
|
2
|
+
export declare const PropsIdTypeId: unique symbol;
|
|
3
|
+
export type PropsIdTypeId = typeof PropsIdTypeId;
|
|
4
|
+
export interface PropsId {
|
|
5
|
+
readonly [PropsIdTypeId]: PropsIdTypeId;
|
|
6
|
+
}
|
|
7
|
+
export type PropsTag<P> = Context.Tag<PropsId, P>;
|
|
8
|
+
export declare const propsTag: <P>() => PropsTag<P>;
|
|
9
|
+
export declare const Props: PropsTag<unknown>;
|
|
10
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/compose/props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,eAAO,MAAM,aAAa,EAAE,OAAO,MAAqC,CAAA;AACxE,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CACxC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AAEjD,eAAO,MAAM,QAAQ,GAAI,CAAC,OAAK,QAAQ,CAAC,CAAC,CAAmD,CAAA;AAG5F,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAuB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Context } from 'effect';
|
|
2
|
+
export const PropsIdTypeId = Symbol.for('reform/PropsId');
|
|
3
|
+
export const propsTag = () => Context.GenericTag('reform/Props');
|
|
4
|
+
// Unknown keeps the compatibility reader from leaking untyped props.
|
|
5
|
+
export const Props = propsTag();
|
|
6
|
+
//# sourceMappingURL=props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/compose/props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAkB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AASxE,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAmB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAa,cAAc,CAAC,CAAA;AAE5F,qEAAqE;AACrE,MAAM,CAAC,MAAM,KAAK,GAAsB,QAAQ,EAAW,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Layer } from 'effect';
|
|
2
|
+
import { type EngineServices } from '../feature/feature.js';
|
|
3
|
+
import type { AnyComposition, CompositionClass, CompositionId, RequiredSlotIdentities } from './composition.js';
|
|
4
|
+
import type { CompositionChildSummary, ExactServiceExclude, FeatureSummaryOpenServices, FeatureSummarySupportOpenServices } from '../graph/closure.js';
|
|
5
|
+
import { type AnyFeatureSlotTarget, type AnySlot, type SlotClass, type SlotService } from './slot.js';
|
|
6
|
+
import { type Contract, type AnyUi, type UiName, type UiContract, type UiService, type ViewImpl } from './ui.js';
|
|
7
|
+
type TargetOfSlotClass<Slot extends AnySlot> = InstanceType<Slot>['_slot'];
|
|
8
|
+
type NameOfSlotClass<Slot extends AnySlot> = InstanceType<Slot>['_slotName'];
|
|
9
|
+
type IdentityOfSlotClass<Slot extends AnySlot> = InstanceType<Slot>['_slotIdentity'];
|
|
10
|
+
type FeatureTargetOfSlotClass<Slot extends AnySlot> = TargetOfSlotClass<Slot> extends AnyFeatureSlotTarget ? TargetOfSlotClass<Slot> : never;
|
|
11
|
+
type CompositionIdentityOf<Composition extends AnyComposition> = InstanceType<Composition>['_compositionIdentity'];
|
|
12
|
+
export declare const provideMergeExact: <Provided, ProviderError, ProviderInput>(provider: Layer.Layer<Provided, ProviderError, ProviderInput>) => <Output, Error, Input>(consumer: Layer.Layer<Output, Error, Input>) => Layer.Layer<Provided | Output, ProviderError | Error, ProviderInput | Exclude<Input, Provided> | ExactServiceExclude<Input, Provided>>;
|
|
13
|
+
export declare const provideExisting: <P, C extends UiContract, S extends ReadonlyArray<unknown>, CompositionName extends string, CompositionIdentity, SlotName extends string, SlotIdentity>(hole: SlotClass<CompositionClass<P, C, S, CompositionName, CompositionIdentity>, SlotName, SlotIdentity>, composition: NoInfer<CompositionClass<P, C, S, CompositionName, CompositionIdentity>>) => Layer.Layer<SlotService<SlotName, SlotIdentity, CompositionChildSummary<CompositionIdentity>>, never, CompositionId<CompositionName, CompositionIdentity, RequiredSlotIdentities<C>>>;
|
|
14
|
+
export declare function provide<U extends AnyUi>(contract: U, view: ViewImpl<Contract<U>>): Layer.Layer<UiService<UiName<U>>>;
|
|
15
|
+
export declare function provide<Comp extends AnyComposition, N extends string, Identity>(hole: SlotClass<Comp, N, Identity>, composition: NoInfer<Comp>): Layer.Layer<SlotService<N, Identity, CompositionChildSummary<CompositionIdentityOf<Comp>>>>;
|
|
16
|
+
export declare function provide<Slot extends AnySlot>(hole: Slot, feature: NoInfer<FeatureTargetOfSlotClass<Slot>>): Layer.Layer<SlotService<NameOfSlotClass<Slot>, IdentityOfSlotClass<Slot>, FeatureTargetOfSlotClass<Slot>['summary']>, never, EngineServices | FeatureSummaryOpenServices<FeatureTargetOfSlotClass<Slot>['summary']> | FeatureSummarySupportOpenServices<FeatureTargetOfSlotClass<Slot>['summary']>>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=provide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provide.d.ts","sourceRoot":"","sources":["../../src/compose/provide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Context, Effect, Layer, Predicate } from 'effect';
|
|
2
|
+
import { InvalidProvideTarget } from '../internal/errors.js';
|
|
3
|
+
import { isFeature, tree, } from '../feature/feature.js';
|
|
4
|
+
import { isSlot, } from './slot.js';
|
|
5
|
+
import { isUi, } from './ui.js';
|
|
6
|
+
// Preserve exact residual inputs that Layer.provideMerge's union subtraction hides.
|
|
7
|
+
export const provideMergeExact = (provider) => (consumer) => Layer.merge(Layer.provideMerge(provider)(consumer), Layer.effectDiscard(Effect.context()));
|
|
8
|
+
const compositionSlotLayer = (slotDefinition, composition) => Layer.succeed(Context.GenericTag(slotDefinition.tag.key), composition);
|
|
9
|
+
export const provideExisting = (hole, composition) => Layer.effect(Context.GenericTag(hole.tag.key), Effect.as(composition.tag, composition));
|
|
10
|
+
const featureSlotLayer = (slotDefinition, binding) => Layer.succeed(Context.GenericTag(slotDefinition.tag.key), binding);
|
|
11
|
+
const isComposition = (candidate) => (typeof candidate === 'function' || typeof candidate === 'object') &&
|
|
12
|
+
candidate !== null &&
|
|
13
|
+
Predicate.hasProperty(candidate, 'manifest') &&
|
|
14
|
+
Predicate.isRecord(candidate.manifest) &&
|
|
15
|
+
candidate.manifest['kind'] === 'Composition' &&
|
|
16
|
+
Predicate.hasProperty(candidate, 'capture') &&
|
|
17
|
+
typeof candidate.capture === 'function';
|
|
18
|
+
const isCallableView = (candidate) => typeof candidate === 'function';
|
|
19
|
+
export function provide(...args) {
|
|
20
|
+
const [target, implementation] = args;
|
|
21
|
+
if (isUi(target)) {
|
|
22
|
+
if (!isCallableView(implementation)) {
|
|
23
|
+
return Layer.die(new InvalidProvideTarget());
|
|
24
|
+
}
|
|
25
|
+
return target.capture((contract) => Layer.succeed(contract.provider, implementation));
|
|
26
|
+
}
|
|
27
|
+
if (!isSlot(target)) {
|
|
28
|
+
return Layer.die(new InvalidProvideTarget());
|
|
29
|
+
}
|
|
30
|
+
return target.capture((slotDefinition) => {
|
|
31
|
+
if (isFeature(implementation)) {
|
|
32
|
+
const native = tree(implementation.token);
|
|
33
|
+
return native.binding.capture((featureBinding) => {
|
|
34
|
+
// Lazy features merge only eager support; default features merge their live module.
|
|
35
|
+
const eager = native.eagerModule ?? native.supportModule;
|
|
36
|
+
const binding = featureSlotLayer(slotDefinition, featureBinding);
|
|
37
|
+
if (eager === undefined) {
|
|
38
|
+
return binding;
|
|
39
|
+
}
|
|
40
|
+
return eager.capture((module) => Layer.merge(binding, module.layer));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!isComposition(implementation)) {
|
|
44
|
+
return Layer.die(new InvalidProvideTarget());
|
|
45
|
+
}
|
|
46
|
+
return implementation.capture((composition) => compositionSlotLayer(slotDefinition, composition));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=provide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provide.js","sourceRoot":"","sources":["../../src/compose/provide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Context } from 'effect';
|
|
2
|
+
import { type Manifest } from '../definition/definition.js';
|
|
3
|
+
import type { AnyFeatureBinding, ProvideableFeature } from '../feature/feature.js';
|
|
4
|
+
import type { AnyFeatureGraphSummary, FeatureSummaryCompositionIdentity, FeatureSummaryCompositionProps, FeatureSummaryContract, FeatureSummaryMountProps, FeatureSummaryName, FeatureSummaryStates, FeatureSummaryIdentity, SlotBindingSummary } from '../graph/closure.js';
|
|
5
|
+
import type { Node } from '../ui/node.js';
|
|
6
|
+
import type { AnyComposition, CompositionClass } from './composition.js';
|
|
7
|
+
export type { Node };
|
|
8
|
+
export type { AnyComposition } from './composition.js';
|
|
9
|
+
type AnyProvideableFeature = ProvideableFeature<unknown, AnyFeatureGraphSummary>;
|
|
10
|
+
export type FeatureSlotTarget<Feature extends AnyProvideableFeature> = ProvideableFeature<FeatureSummaryIdentity<Feature['summary']>, Feature['summary']>;
|
|
11
|
+
export type AnyFeatureSlotTarget = FeatureSlotTarget<AnyProvideableFeature>;
|
|
12
|
+
export type SlotTarget = AnyComposition | AnyFeatureSlotTarget;
|
|
13
|
+
export type CompositionOfSlotTarget<Target extends SlotTarget> = Target extends AnyComposition ? Target : Target extends AnyFeatureSlotTarget ? CompositionClass<FeatureSummaryCompositionProps<Target['summary']>, FeatureSummaryContract<Target['summary']>, FeatureSummaryStates<Target['summary']>, FeatureSummaryName<Target['summary']>, FeatureSummaryCompositionIdentity<Target['summary']>> : never;
|
|
14
|
+
export type PropsOfSlotTarget<Target extends SlotTarget> = Target extends AnyComposition ? Target['Props'] : Target extends AnyFeatureSlotTarget ? FeatureSummaryMountProps<Target['summary']> : never;
|
|
15
|
+
export type ContractOfSlotTarget<Target extends SlotTarget> = Target extends AnyComposition ? Target['Contract'] : Target extends AnyFeatureSlotTarget ? FeatureSummaryContract<Target['summary']> : never;
|
|
16
|
+
export type SlotChild<Target extends SlotTarget> = Target extends AnyComposition ? Target | (AnyFeatureBinding & {
|
|
17
|
+
readonly composition: Target;
|
|
18
|
+
}) : Target extends AnyFeatureSlotTarget ? AnyFeatureBinding & {
|
|
19
|
+
readonly summary: Target['summary'];
|
|
20
|
+
} : never;
|
|
21
|
+
export type AnySlotChild = AnyComposition | AnyFeatureBinding;
|
|
22
|
+
export interface AnySlotInstance {
|
|
23
|
+
readonly _slot: SlotTarget;
|
|
24
|
+
readonly _slotName: string;
|
|
25
|
+
readonly _slotIdentity: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface SlotInstance<Target extends SlotTarget, N extends string, Identity> extends AnySlotInstance {
|
|
28
|
+
readonly _slot: Target;
|
|
29
|
+
readonly _slotName: N;
|
|
30
|
+
readonly _slotIdentity: Identity;
|
|
31
|
+
}
|
|
32
|
+
export declare const SlotTypeId: unique symbol;
|
|
33
|
+
export type SlotTypeId = typeof SlotTypeId;
|
|
34
|
+
export declare const SlotServiceTypeId: unique symbol;
|
|
35
|
+
export type SlotServiceTypeId = typeof SlotServiceTypeId;
|
|
36
|
+
export interface SlotService<N extends string, Identity = unknown, out Binding extends SlotBindingSummary = SlotBindingSummary> {
|
|
37
|
+
readonly [SlotServiceTypeId]: {
|
|
38
|
+
readonly name: N;
|
|
39
|
+
readonly identity: Identity;
|
|
40
|
+
readonly binding: Binding;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface SlotManifest<N extends string = string> extends Manifest {
|
|
44
|
+
readonly kind: 'Slot';
|
|
45
|
+
readonly name: N;
|
|
46
|
+
}
|
|
47
|
+
export type SlotCapture<Result> = <Target extends SlotTarget, N extends string, Identity>(slotDefinition: SlotClass<Target, N, Identity>) => Result;
|
|
48
|
+
export interface AnySlot {
|
|
49
|
+
new (): AnySlotInstance;
|
|
50
|
+
readonly [SlotTypeId]: SlotTypeId;
|
|
51
|
+
readonly manifest: SlotManifest;
|
|
52
|
+
readonly identity: symbol;
|
|
53
|
+
readonly capture: <Result>(visit: SlotCapture<Result>) => Result;
|
|
54
|
+
}
|
|
55
|
+
export interface SlotClass<Target extends SlotTarget, N extends string, Identity> {
|
|
56
|
+
new (): SlotInstance<Target, N, Identity>;
|
|
57
|
+
readonly [SlotTypeId]: SlotTypeId;
|
|
58
|
+
readonly manifest: SlotManifest<N>;
|
|
59
|
+
readonly identity: symbol;
|
|
60
|
+
readonly capture: <Result>(visit: SlotCapture<Result>) => Result;
|
|
61
|
+
readonly tag: Context.Tag<SlotService<N, Identity>, SlotChild<Target>>;
|
|
62
|
+
readonly provider: Context.Tag<SlotService<N, Identity>, AnySlotChild>;
|
|
63
|
+
}
|
|
64
|
+
export declare const isSlot: (candidate: unknown) => candidate is AnySlot;
|
|
65
|
+
export type TargetOfSlot<S> = S extends SlotInstance<infer Target, infer _N, infer _Identity> ? Target : never;
|
|
66
|
+
export type SlotProps<S> = S extends SlotInstance<infer Target, infer _N, infer _Identity> ? PropsOfSlotTarget<Target> : never;
|
|
67
|
+
export type SlotComposition<S> = S extends SlotInstance<infer Target, infer _N, infer _Identity> ? CompositionOfSlotTarget<Target> : never;
|
|
68
|
+
export type SlotContract<S> = S extends SlotInstance<infer Target, infer _N, infer _Identity> ? ContractOfSlotTarget<Target> : never;
|
|
69
|
+
export declare const slot: <const N extends string>(name: N) => <Self, Target extends SlotTarget = AnyComposition>() => SlotClass<Target, N, Self>;
|
|
70
|
+
//# sourceMappingURL=slot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../../src/compose/slot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Context, GlobalValue, MutableRef } from 'effect';
|
|
2
|
+
import { definitionClass } from '../definition/definition.js';
|
|
3
|
+
export const SlotTypeId = Symbol.for('reform/Slot');
|
|
4
|
+
export const SlotServiceTypeId = Symbol.for('reform/SlotService');
|
|
5
|
+
export const isSlot = (candidate) => (typeof candidate === 'function' || typeof candidate === 'object') &&
|
|
6
|
+
candidate !== null &&
|
|
7
|
+
SlotTypeId in candidate;
|
|
8
|
+
const slotDefinitionSequence = GlobalValue.globalValue(Symbol.for('reform/SlotDefinitionSequence'), () => MutableRef.make(0));
|
|
9
|
+
const nextSlotTagKey = (name) => `reform/slot/${name}/${MutableRef.incrementAndGet(slotDefinitionSequence)}`;
|
|
10
|
+
export const slot = (name) => () => {
|
|
11
|
+
const key = nextSlotTagKey(name);
|
|
12
|
+
const identity = Symbol(name);
|
|
13
|
+
const tag = Context.GenericTag(key);
|
|
14
|
+
const provider = Context.GenericTag(key);
|
|
15
|
+
const manifest = { kind: 'Slot', name };
|
|
16
|
+
const slotDefinition = definitionClass({
|
|
17
|
+
[SlotTypeId]: SlotTypeId,
|
|
18
|
+
manifest,
|
|
19
|
+
identity,
|
|
20
|
+
tag,
|
|
21
|
+
provider,
|
|
22
|
+
capture: (visit) => visit(slotDefinition),
|
|
23
|
+
});
|
|
24
|
+
return slotDefinition;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=slot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.js","sourceRoot":"","sources":["../../src/compose/slot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAiB,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAiFzE,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAGlE,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AA2ChF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAkB,EAAwB,EAAE,CACjE,CAAC,OAAO,SAAS,KAAK,UAAU,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC;IAClE,SAAS,KAAK,IAAI;IAClB,UAAU,IAAI,SAAS,CAAA;AAoBzB,MAAM,sBAAsB,GAAkC,WAAW,CAAC,WAAW,CACnF,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAC3C,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CAC9C,eAAe,IAAI,IAAI,UAAU,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAA;AAE7E,MAAM,CAAC,MAAM,IAAI,GACf,CAAyB,IAAO,EAAE,EAAE,CACpC,GAAiF,EAAE;IACjF,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAA0C,GAAG,CAAC,CAAA;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAqC,GAAG,CAAC,CAAA;IAC5E,MAAM,QAAQ,GAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACxD,MAAM,cAAc,GAA+B,eAAe,CAA6B;QAC7F,CAAC,UAAU,CAAC,EAAE,UAAU;QACxB,QAAQ;QACR,QAAQ;QACR,GAAG;QACH,QAAQ;QACR,OAAO,EAAE,CAAS,KAA0B,EAAU,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;KAC/E,CAAC,CAAA;IACF,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { SlotProps } from './slot.js';
|
|
2
|
+
import type { EventsOf, UiContract } from './ui.js';
|
|
3
|
+
export interface EachFill<P> {
|
|
4
|
+
readonly _tag: 'Each';
|
|
5
|
+
readonly items: ReadonlyArray<{
|
|
6
|
+
readonly key: string;
|
|
7
|
+
readonly props: P;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export interface OneFill<P> {
|
|
11
|
+
readonly _tag: 'One';
|
|
12
|
+
readonly props: P;
|
|
13
|
+
}
|
|
14
|
+
export interface AbsentFill {
|
|
15
|
+
readonly _tag: 'Absent';
|
|
16
|
+
}
|
|
17
|
+
export type SlotFill<P> = EachFill<P> | OneFill<P> | AbsentFill;
|
|
18
|
+
export type StructureSlots<C extends UiContract> = C extends {
|
|
19
|
+
slots: infer S;
|
|
20
|
+
} ? {
|
|
21
|
+
readonly [K in keyof S]: SlotFill<SlotProps<S[K]>>;
|
|
22
|
+
} : Readonly<Record<PropertyKey, never>>;
|
|
23
|
+
interface SerializableFrame<C extends UiContract> {
|
|
24
|
+
readonly props: C['props'];
|
|
25
|
+
readonly slots: StructureSlots<C>;
|
|
26
|
+
}
|
|
27
|
+
interface TriggeredFrame<C extends UiContract> extends SerializableFrame<C> {
|
|
28
|
+
readonly events: EventsOf<C>;
|
|
29
|
+
}
|
|
30
|
+
type MountFrame<C extends UiContract> = SerializableFrame<C> | TriggeredFrame<C>;
|
|
31
|
+
export declare const StructureTypeId: unique symbol;
|
|
32
|
+
export type StructureTypeId = typeof StructureTypeId;
|
|
33
|
+
export interface Structure<C extends UiContract> {
|
|
34
|
+
readonly [StructureTypeId]: StructureTypeId;
|
|
35
|
+
readonly props: C['props'];
|
|
36
|
+
readonly slots: StructureSlots<C>;
|
|
37
|
+
readonly events: EventsOf<C> | undefined;
|
|
38
|
+
}
|
|
39
|
+
export declare const mount: <C extends UiContract>(frame: MountFrame<C>) => Structure<C>;
|
|
40
|
+
export interface EachOptions<T, P> {
|
|
41
|
+
readonly key: (item: T) => string;
|
|
42
|
+
readonly props: (item: T) => P;
|
|
43
|
+
}
|
|
44
|
+
export declare const each: <T, P>(collection: Iterable<T>, options: EachOptions<T, P>) => EachFill<P>;
|
|
45
|
+
export declare const one: <P>(props: P) => OneFill<P>;
|
|
46
|
+
export declare const absent: AbsentFill;
|
|
47
|
+
export declare const when: <F extends SlotFill<unknown>>(cond: boolean, fill: F) => F | AbsentFill;
|
|
48
|
+
export declare const isStructure: (frame: unknown) => frame is Structure<UiContract>;
|
|
49
|
+
export declare const structureEquals: (left: Structure<UiContract>, right: Structure<UiContract>) => boolean;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../src/compose/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Option, Struct } from 'effect';
|
|
2
|
+
import { reuse } from '../internal/reuse.js';
|
|
3
|
+
export const StructureTypeId = Symbol.for('reform/Structure');
|
|
4
|
+
const frameEvents = (frame) => 'events' in frame ? Option.some(frame.events) : Option.none();
|
|
5
|
+
export const mount = (frame) => ({
|
|
6
|
+
events: Option.getOrUndefined(frameEvents(frame)),
|
|
7
|
+
props: frame.props,
|
|
8
|
+
slots: frame.slots,
|
|
9
|
+
[StructureTypeId]: StructureTypeId,
|
|
10
|
+
});
|
|
11
|
+
// Stable collection and callback identities retain unchanged fills by reference.
|
|
12
|
+
const eachRetentions = new WeakMap();
|
|
13
|
+
const latestEachRetentions = new WeakMap();
|
|
14
|
+
const hasIdentity = (candidate) => (typeof candidate === 'object' && candidate !== null) || typeof candidate === 'function';
|
|
15
|
+
const collectionRetentionsFor = (collection) => {
|
|
16
|
+
if (!hasIdentity(collection)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return (eachRetentions.get(collection) ?? {
|
|
20
|
+
byProps: new WeakMap(),
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const sameElements = (previous, next) => previous.length === next.length &&
|
|
24
|
+
previous.every((element, index) => Object.is(element, next[index]));
|
|
25
|
+
const isEachFill = (candidate) => isRecord(candidate) &&
|
|
26
|
+
candidate['_tag'] === 'Each' &&
|
|
27
|
+
Array.isArray(candidate['items']) &&
|
|
28
|
+
candidate['items'].every((entry) => isRecord(entry) && typeof entry['key'] === 'string' && 'props' in entry);
|
|
29
|
+
const materializeEach = (elements, options) => ({
|
|
30
|
+
_tag: 'Each',
|
|
31
|
+
items: elements.map((element) => ({
|
|
32
|
+
key: options.key(element),
|
|
33
|
+
props: options.props(element),
|
|
34
|
+
})),
|
|
35
|
+
});
|
|
36
|
+
const retainEach = (previous, next) => {
|
|
37
|
+
if (!isEachFill(previous)) {
|
|
38
|
+
return next;
|
|
39
|
+
}
|
|
40
|
+
if (deepEquals({ left: previous, right: next })) {
|
|
41
|
+
return previous;
|
|
42
|
+
}
|
|
43
|
+
return reuse(previous, next);
|
|
44
|
+
};
|
|
45
|
+
export const each = (collection, options) => {
|
|
46
|
+
const elements = Array.from(collection);
|
|
47
|
+
const collectionRetentions = collectionRetentionsFor(collection);
|
|
48
|
+
const retained = collectionRetentions?.byProps.get(options.props)?.get(options.key);
|
|
49
|
+
const latest = hasIdentity(collection) ? latestEachRetentions.get(collection) : undefined;
|
|
50
|
+
if (retained !== undefined &&
|
|
51
|
+
sameElements(retained.elements, elements) &&
|
|
52
|
+
isEachFill(retained.fill)) {
|
|
53
|
+
return retained.fill;
|
|
54
|
+
}
|
|
55
|
+
const fill = retainEach(retained?.fill ?? latest?.fill, materializeEach(elements, options));
|
|
56
|
+
if (hasIdentity(collection) && collectionRetentions !== undefined) {
|
|
57
|
+
const byKey = collectionRetentions.byProps.get(options.props) ?? new WeakMap();
|
|
58
|
+
const retention = { elements, fill };
|
|
59
|
+
byKey.set(options.key, retention);
|
|
60
|
+
collectionRetentions.byProps.set(options.props, byKey);
|
|
61
|
+
eachRetentions.set(collection, collectionRetentions);
|
|
62
|
+
latestEachRetentions.set(collection, retention);
|
|
63
|
+
}
|
|
64
|
+
return fill;
|
|
65
|
+
};
|
|
66
|
+
export const one = (props) => ({ _tag: 'One', props });
|
|
67
|
+
export const absent = { _tag: 'Absent' };
|
|
68
|
+
export const when = (cond, fill) => cond ? fill : absent;
|
|
69
|
+
export const isStructure = (frame) => typeof frame === 'object' && frame !== null && StructureTypeId in frame;
|
|
70
|
+
const isRecord = (candidate) => typeof candidate === 'object' && candidate !== null && !Array.isArray(candidate);
|
|
71
|
+
const deepEquals = ({ left, right }) => {
|
|
72
|
+
if (Object.is(left, right)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
76
|
+
return (left.length === right.length &&
|
|
77
|
+
left.every((element, index) => deepEquals({ left: element, right: right[index] })));
|
|
78
|
+
}
|
|
79
|
+
if (isRecord(left) && isRecord(right)) {
|
|
80
|
+
const leftKeys = Struct.keys(left);
|
|
81
|
+
const rightKeys = Struct.keys(right);
|
|
82
|
+
return (leftKeys.length === rightKeys.length &&
|
|
83
|
+
leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) &&
|
|
84
|
+
deepEquals({ left: left[key], right: right[key] })));
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
};
|
|
88
|
+
export const structureEquals = (left, right) =>
|
|
89
|
+
// Events are fresh trigger functions, so equality covers serializable frame data only.
|
|
90
|
+
deepEquals({ left: left.props, right: right.props }) &&
|
|
91
|
+
deepEquals({ left: left.slots, right: right.slots });
|
|
92
|
+
//# sourceMappingURL=structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/compose/structure.ts"],"names":[],"mappings":"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"}
|