@dreamboard-games/sdk 0.2.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/LICENSE.md +96 -0
- package/README.md +12 -0
- package/dist/HandView-ncJIVLhN.d.ts +193 -0
- package/dist/ResourceCounter-CTREyF73.d.ts +102 -0
- package/dist/ThemeProvider-fy0_QzgO.d.ts +99 -0
- package/dist/bundle-TIZcw8LB.d.ts +281 -0
- package/dist/cards-Sl3b40Mv.d.ts +13 -0
- package/dist/chunk-7YAHLYBR.js +481 -0
- package/dist/chunk-7YAHLYBR.js.map +1 -0
- package/dist/chunk-FDNZTDD6.js +8085 -0
- package/dist/chunk-FDNZTDD6.js.map +1 -0
- package/dist/chunk-GKKBPPSW.js +598 -0
- package/dist/chunk-GKKBPPSW.js.map +1 -0
- package/dist/chunk-I46YJSOD.js +1 -0
- package/dist/chunk-I46YJSOD.js.map +1 -0
- package/dist/chunk-KAELH4KC.js +104 -0
- package/dist/chunk-KAELH4KC.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-T3ZKNUZ7.js +1 -0
- package/dist/chunk-T3ZKNUZ7.js.map +1 -0
- package/dist/chunk-T52J5RMF.js +1 -0
- package/dist/chunk-T52J5RMF.js.map +1 -0
- package/dist/chunk-TDSWKVZ4.js +5401 -0
- package/dist/chunk-TDSWKVZ4.js.map +1 -0
- package/dist/chunk-U5C6BONG.js +34 -0
- package/dist/chunk-U5C6BONG.js.map +1 -0
- package/dist/chunk-VDXOF4FW.js +69 -0
- package/dist/chunk-VDXOF4FW.js.map +1 -0
- package/dist/chunk-VFTAA4WO.js +115 -0
- package/dist/chunk-VFTAA4WO.js.map +1 -0
- package/dist/chunk-WN74KVNY.js +17 -0
- package/dist/chunk-WN74KVNY.js.map +1 -0
- package/dist/chunk-WYPQ3GG5.js +10990 -0
- package/dist/chunk-WYPQ3GG5.js.map +1 -0
- package/dist/components-D5ZRE2Hl.d.ts +1451 -0
- package/dist/generated/runtime/primitives.d.ts +12 -0
- package/dist/generated/runtime/primitives.js +180 -0
- package/dist/generated/runtime/primitives.js.map +1 -0
- package/dist/generated/runtime-api.d.ts +3 -0
- package/dist/generated/runtime-api.js +2 -0
- package/dist/generated/runtime-api.js.map +1 -0
- package/dist/generated/runtime.d.ts +14 -0
- package/dist/generated/runtime.js +18 -0
- package/dist/generated/runtime.js.map +1 -0
- package/dist/generated/workspace-contract.d.ts +14 -0
- package/dist/generated/workspace-contract.js +14 -0
- package/dist/generated/workspace-contract.js.map +1 -0
- package/dist/hex-board-view-D_07hO6O.d.ts +933 -0
- package/dist/hex-color-MhOyuY-o.d.ts +8 -0
- package/dist/index-BwqPQtBu.d.ts +1433 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/reducer-bundle-abi.d.ts +1083 -0
- package/dist/infrastructure/reducer-bundle-abi.js +14 -0
- package/dist/infrastructure/reducer-bundle-abi.js.map +1 -0
- package/dist/infrastructure/workspace-codegen.d.ts +53 -0
- package/dist/infrastructure/workspace-codegen.js +44 -0
- package/dist/infrastructure/workspace-codegen.js.map +1 -0
- package/dist/manifest-contract-BNHVGFtU.d.ts +9 -0
- package/dist/package-set.d.ts +13 -0
- package/dist/package-set.js +12 -0
- package/dist/package-set.js.map +1 -0
- package/dist/primitive-props-DpKs-GCr.d.ts +11 -0
- package/dist/reducer.d.ts +3786 -0
- package/dist/reducer.js +8131 -0
- package/dist/reducer.js.map +1 -0
- package/dist/runtime/primitives.d.ts +226 -0
- package/dist/runtime/primitives.js +180 -0
- package/dist/runtime/primitives.js.map +1 -0
- package/dist/runtime/types/runtime-api.d.ts +1 -0
- package/dist/runtime/types/runtime-api.js +2 -0
- package/dist/runtime/types/runtime-api.js.map +1 -0
- package/dist/runtime/workspace-contract.d.ts +172 -0
- package/dist/runtime/workspace-contract.js +14 -0
- package/dist/runtime/workspace-contract.js.map +1 -0
- package/dist/runtime-api-3dshj6kK.d.ts +101 -0
- package/dist/runtime-api-DWxvTr-O.d.ts +379 -0
- package/dist/runtime.d.ts +58 -0
- package/dist/runtime.js +13 -0
- package/dist/runtime.js.map +1 -0
- package/dist/slots-1GPGihk8.d.ts +8 -0
- package/dist/testing.d.ts +149 -0
- package/dist/testing.js +513 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +496 -0
- package/dist/types.js +28 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/components.d.ts +16 -0
- package/dist/ui/components.js +192 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/defaults.d.ts +19 -0
- package/dist/ui/defaults.js +104 -0
- package/dist/ui/defaults.js.map +1 -0
- package/dist/ui/plugin-styles.css +250 -0
- package/dist/ui/types/player-state.d.ts +365 -0
- package/dist/ui/types/player-state.js +1 -0
- package/dist/ui/types/player-state.js.map +1 -0
- package/dist/ui-contract-iQfTtUSL.d.ts +1161 -0
- package/dist/ui.d.ts +320 -0
- package/dist/ui.js +253 -0
- package/dist/ui.js.map +1 -0
- package/package.json +199 -0
- package/src/generated/reducer-contract/builders.ts +90 -0
- package/src/generated/reducer-contract/version.ts +9 -0
- package/src/generated/reducer-contract/wire.ts +100 -0
- package/src/generated/reducer-contract/zod.ts +101 -0
- package/src/generated/runtime/primitives.ts +2 -0
- package/src/generated/runtime-api.ts +5 -0
- package/src/generated/runtime.ts +35 -0
- package/src/generated/workspace-contract.ts +2 -0
- package/src/index.ts +7 -0
- package/src/infrastructure/reducer-bundle-abi.ts +8 -0
- package/src/infrastructure/reducer-contract/bundle.ts +37 -0
- package/src/infrastructure/workspace-codegen/hex-geometry.ts +69 -0
- package/src/infrastructure/workspace-codegen/index.ts +64 -0
- package/src/infrastructure/workspace-codegen/manifest-contract.ts +6632 -0
- package/src/infrastructure/workspace-codegen/manifest-validation.ts +795 -0
- package/src/infrastructure/workspace-codegen/ownership.ts +131 -0
- package/src/infrastructure/workspace-codegen/preset-card-sets.ts +169 -0
- package/src/infrastructure/workspace-codegen/seeds.ts +1705 -0
- package/src/infrastructure/workspace-codegen.ts +1 -0
- package/src/package-set.ts +19 -0
- package/src/reducer/authoring/contract.ts +157 -0
- package/src/reducer/authoring/effect.ts +224 -0
- package/src/reducer/authoring/game.ts +23 -0
- package/src/reducer/authoring/interaction.ts +98 -0
- package/src/reducer/authoring/phase.ts +300 -0
- package/src/reducer/authoring/types.ts +70 -0
- package/src/reducer/authoring/validation.ts +382 -0
- package/src/reducer/authoring/view-stage.ts +68 -0
- package/src/reducer/authoring.ts +29 -0
- package/src/reducer/bundle/ingress-bundle.ts +491 -0
- package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +254 -0
- package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +73 -0
- package/src/reducer/bundle/trusted/instruction-runner.ts +414 -0
- package/src/reducer/bundle/trusted/interaction-authorization.ts +137 -0
- package/src/reducer/bundle/trusted/interaction-collectors.ts +859 -0
- package/src/reducer/bundle/trusted/interaction-decision.ts +747 -0
- package/src/reducer/bundle/trusted/interaction-resolver.ts +95 -0
- package/src/reducer/bundle/trusted/interaction-types.ts +171 -0
- package/src/reducer/bundle/trusted/lifecycle-runner.ts +427 -0
- package/src/reducer/bundle/trusted/projection-builder.ts +356 -0
- package/src/reducer/bundle/trusted/projection-context.ts +39 -0
- package/src/reducer/bundle/trusted/rng-sampler.ts +150 -0
- package/src/reducer/bundle/trusted/runtime-registry.ts +120 -0
- package/src/reducer/bundle/trusted/runtime-scope.ts +336 -0
- package/src/reducer/bundle/trusted/simultaneous-player.ts +97 -0
- package/src/reducer/bundle/trusted/stage-resolver.ts +87 -0
- package/src/reducer/bundle/trusted/static-projection.ts +116 -0
- package/src/reducer/bundle/trusted/trusted-runtime-args.ts +97 -0
- package/src/reducer/bundle/trusted/trusted-runtime-result.ts +39 -0
- package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +43 -0
- package/src/reducer/bundle/trusted/trusted-state-codec.ts +48 -0
- package/src/reducer/bundle/trusted-bundle.ts +97 -0
- package/src/reducer/bundle/types.ts +171 -0
- package/src/reducer/bundle.ts +2 -0
- package/src/reducer/client-param-schemas.ts +57 -0
- package/src/reducer/compose.ts +34 -0
- package/src/reducer/core/runtime-input.ts +30 -0
- package/src/reducer/core/runtime-instruction.ts +59 -0
- package/src/reducer/core/types.ts +62 -0
- package/src/reducer/definition-index.ts +277 -0
- package/src/reducer/derived.ts +106 -0
- package/src/reducer/effects.ts +92 -0
- package/src/reducer/engine/runtime-instruction-engine.ts +155 -0
- package/src/reducer/ingress/decode-runtime-input.ts +7 -0
- package/src/reducer/ingress/decode-session-state.ts +9 -0
- package/src/reducer/ingress/encode-session-state.ts +6 -0
- package/src/reducer/ingress/input-codec.ts +18 -0
- package/src/reducer/ingress/phase-schemas.ts +62 -0
- package/src/reducer/ingress/raw-types.ts +107 -0
- package/src/reducer/ingress/runtime-codec.ts +14 -0
- package/src/reducer/ingress/runtime-payload.ts +13 -0
- package/src/reducer/ingress/session-codec.ts +392 -0
- package/src/reducer/ingress/types.ts +6 -0
- package/src/reducer/inputs/boardInput.ts +217 -0
- package/src/reducer/inputs/boardTarget.ts +190 -0
- package/src/reducer/inputs/cardInput.ts +86 -0
- package/src/reducer/inputs/cardTarget.ts +101 -0
- package/src/reducer/inputs/choiceTarget.ts +104 -0
- package/src/reducer/inputs/defineInputs.ts +71 -0
- package/src/reducer/inputs/formInput.ts +809 -0
- package/src/reducer/inputs/many.ts +120 -0
- package/src/reducer/inputs/promptInput.ts +87 -0
- package/src/reducer/inputs/rngInput.ts +58 -0
- package/src/reducer/inputs/targetRule.ts +123 -0
- package/src/reducer/inputs.ts +41 -0
- package/src/reducer/model/definition.ts +1072 -0
- package/src/reducer/model/extract.ts +745 -0
- package/src/reducer/model/manifest.ts +570 -0
- package/src/reducer/model/queries.ts +641 -0
- package/src/reducer/model/runtime.ts +264 -0
- package/src/reducer/model/spec.ts +1386 -0
- package/src/reducer/model/table.ts +260 -0
- package/src/reducer/model.ts +7 -0
- package/src/reducer/ops.ts +1034 -0
- package/src/reducer/parse-utils.ts +28 -0
- package/src/reducer/per-player.ts +422 -0
- package/src/reducer/rng.ts +69 -0
- package/src/reducer/schema-helpers.ts +185 -0
- package/src/reducer/setup-bootstrap-helpers.ts +171 -0
- package/src/reducer/setup-bootstrap.ts +481 -0
- package/src/reducer/table-ops.ts +2671 -0
- package/src/reducer/table-queries.ts +372 -0
- package/src/reducer/transaction.ts +120 -0
- package/src/reducer.ts +314 -0
- package/src/runtime/primitives.ts +1 -0
- package/src/runtime/types/runtime-api.ts +1 -0
- package/src/runtime/workspace-contract.ts +32 -0
- package/src/runtime-internal/components/InteractionForm.tsx +1309 -0
- package/src/runtime-internal/components/PluginRuntime.tsx +103 -0
- package/src/runtime-internal/components/board/target-layer.ts +70 -0
- package/src/runtime-internal/context/ClientParamSchemaContext.tsx +44 -0
- package/src/runtime-internal/context/InteractionDraftContext.tsx +279 -0
- package/src/runtime-internal/context/PluginSessionContext.tsx +47 -0
- package/src/runtime-internal/context/PluginStateContext.tsx +262 -0
- package/src/runtime-internal/context/RuntimeContext.tsx +96 -0
- package/src/runtime-internal/defaults/components.tsx +409 -0
- package/src/runtime-internal/defaults/index.ts +11 -0
- package/src/runtime-internal/errors/ValidationError.ts +29 -0
- package/src/runtime-internal/hooks/useActivePlayers.ts +33 -0
- package/src/runtime-internal/hooks/useBoardInteractions.ts +665 -0
- package/src/runtime-internal/hooks/useGameSelector.ts +105 -0
- package/src/runtime-internal/hooks/useGameView.ts +9 -0
- package/src/runtime-internal/hooks/useInteractionByKey.ts +354 -0
- package/src/runtime-internal/hooks/useInteractionHandle.ts +438 -0
- package/src/runtime-internal/hooks/useIsMyTurn.ts +20 -0
- package/src/runtime-internal/hooks/useLobby.ts +76 -0
- package/src/runtime-internal/hooks/useMe.ts +48 -0
- package/src/runtime-internal/hooks/usePlayerInfo.ts +28 -0
- package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +23 -0
- package/src/runtime-internal/hooks/usePluginRuntime.ts +147 -0
- package/src/runtime-internal/hooks/useSeatInbox.ts +61 -0
- package/src/runtime-internal/hooks/useSimultaneousPhase.ts +10 -0
- package/src/runtime-internal/index.ts +42 -0
- package/src/runtime-internal/internal.ts +43 -0
- package/src/runtime-internal/plugin-styles.css +250 -0
- package/src/runtime-internal/primitives/board.tsx +459 -0
- package/src/runtime-internal/primitives/dialog-lifecycle.ts +58 -0
- package/src/runtime-internal/primitives/dice.tsx +79 -0
- package/src/runtime-internal/primitives/game-ui-provider.tsx +35 -0
- package/src/runtime-internal/primitives/game.tsx +387 -0
- package/src/runtime-internal/primitives/hand-intent-adapter.ts +147 -0
- package/src/runtime-internal/primitives/hand-surface.tsx +594 -0
- package/src/runtime-internal/primitives/index.ts +196 -0
- package/src/runtime-internal/primitives/interaction-form-binding.tsx +56 -0
- package/src/runtime-internal/primitives/interaction-submit.ts +90 -0
- package/src/runtime-internal/primitives/interaction.tsx +987 -0
- package/src/runtime-internal/primitives/phase.tsx +43 -0
- package/src/runtime-internal/primitives/player-roster.tsx +302 -0
- package/src/runtime-internal/primitives/primitive-props.tsx +101 -0
- package/src/runtime-internal/primitives/prompt.tsx +255 -0
- package/src/runtime-internal/primitives/ui.tsx +60 -0
- package/src/runtime-internal/primitives/zone.tsx +791 -0
- package/src/runtime-internal/reducer.ts +30 -0
- package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +605 -0
- package/src/runtime-internal/types/plugin-state.ts +508 -0
- package/src/runtime-internal/types/reducer-state.ts +24 -0
- package/src/runtime-internal/types/runtime-api.ts +114 -0
- package/src/runtime-internal/ui-contract.ts +519 -0
- package/src/runtime-internal/utils/card-intent-adapter.ts +546 -0
- package/src/runtime-internal/utils/interaction-inputs.ts +492 -0
- package/src/runtime-internal/utils/interaction-labels.ts +23 -0
- package/src/runtime-internal/utils/interaction-router.ts +273 -0
- package/src/runtime-internal/utils/interaction-status.ts +74 -0
- package/src/runtime-internal/workspace-contract.ts +1170 -0
- package/src/runtime.ts +34 -0
- package/src/testing/create-expect-api.ts +352 -0
- package/src/testing/create-test-runtime.ts +381 -0
- package/src/testing/definitions.ts +127 -0
- package/src/testing/index.ts +3 -0
- package/src/testing.ts +1 -0
- package/src/type-stubs/manifest-contract.d.ts +42 -0
- package/src/type-stubs/manifest-contract.js +72 -0
- package/src/type-stubs/ui-contract.d.ts +5 -0
- package/src/type-stubs/ui-contract.js +1 -0
- package/src/types/authoring-card-properties.type-test.ts +266 -0
- package/src/types/authoring.ts +1282 -0
- package/src/types/cards.ts +19 -0
- package/src/types/contracts.ts +1550 -0
- package/src/types/generated-helpers.ts +35 -0
- package/src/types/index.ts +147 -0
- package/src/types/slots.ts +11 -0
- package/src/types.ts +1 -0
- package/src/ui/components/ActionButton.tsx +97 -0
- package/src/ui/components/ActionPanel.tsx +315 -0
- package/src/ui/components/Card.tsx +378 -0
- package/src/ui/components/CardDragSurface.tsx +1076 -0
- package/src/ui/components/ChromeSuppressionContext.tsx +70 -0
- package/src/ui/components/CostDisplay.tsx +145 -0
- package/src/ui/components/DiceRoller.tsx +581 -0
- package/src/ui/components/Drawer.tsx +180 -0
- package/src/ui/components/ErrorBoundary.tsx +275 -0
- package/src/ui/components/GameEndDisplay.tsx +398 -0
- package/src/ui/components/GameSkeleton.tsx +260 -0
- package/src/ui/components/Hand.tsx +468 -0
- package/src/ui/components/HandDock.tsx +299 -0
- package/src/ui/components/HandView.tsx +441 -0
- package/src/ui/components/MobileHandTray.tsx +381 -0
- package/src/ui/components/MoreActions.tsx +143 -0
- package/src/ui/components/PhaseIndicator.tsx +341 -0
- package/src/ui/components/PlayArea.tsx +146 -0
- package/src/ui/components/PrimaryActionButton.tsx +336 -0
- package/src/ui/components/PrimaryButton.tsx +45 -0
- package/src/ui/components/ResourceCounter.tsx +270 -0
- package/src/ui/components/StagingZone.tsx +134 -0
- package/src/ui/components/ThemedButton.tsx +113 -0
- package/src/ui/components/Toast.tsx +264 -0
- package/src/ui/components/board/HexGrid.tsx +1294 -0
- package/src/ui/components/board/NetworkGraph.tsx +476 -0
- package/src/ui/components/board/SlotSystem.tsx +388 -0
- package/src/ui/components/board/SquareGrid.tsx +1165 -0
- package/src/ui/components/board/TrackBoard.tsx +496 -0
- package/src/ui/components/board/ZoneMap.tsx +448 -0
- package/src/ui/components/board/hex-board-view.ts +123 -0
- package/src/ui/components/board/index.ts +142 -0
- package/src/ui/components/board/interaction-accessibility.ts +21 -0
- package/src/ui/components/board/target-layer.ts +66 -0
- package/src/ui/components/card-render-content.type-test.ts +27 -0
- package/src/ui/components/hand-layout-math.ts +163 -0
- package/src/ui/components/hand-pointer-engine.ts +413 -0
- package/src/ui/components/index.ts +245 -0
- package/src/ui/components.ts +1 -0
- package/src/ui/defaults/components.tsx +106 -0
- package/src/ui/defaults/index.ts +8 -0
- package/src/ui/defaults.ts +1 -0
- package/src/ui/errors/ValidationError.ts +29 -0
- package/src/ui/helpers/cards.ts +19 -0
- package/src/ui/helpers/track-board.ts +211 -0
- package/src/ui/hooks/useBoardTopology.ts +316 -0
- package/src/ui/hooks/useCards.ts +10 -0
- package/src/ui/hooks/useHandCardPointer.ts +381 -0
- package/src/ui/hooks/useHandLayout.ts +378 -0
- package/src/ui/hooks/useHandPresentation.ts +121 -0
- package/src/ui/hooks/useHexBoard.ts +74 -0
- package/src/ui/hooks/useHexGrid.ts +185 -0
- package/src/ui/hooks/useIsMobile.ts +35 -0
- package/src/ui/hooks/usePanZoom.ts +278 -0
- package/src/ui/hooks/useSquareBoard.ts +124 -0
- package/src/ui/hooks/useSquareGrid.ts +328 -0
- package/src/ui/index.ts +98 -0
- package/src/ui/internal/ui/alert.tsx +51 -0
- package/src/ui/internal/ui/button.tsx +58 -0
- package/src/ui/internal/ui/dialog.tsx +134 -0
- package/src/ui/internal/ui/input.tsx +21 -0
- package/src/ui/internal/ui/label.tsx +21 -0
- package/src/ui/internal/ui/select.tsx +129 -0
- package/src/ui/internal/ui/tooltip.tsx +54 -0
- package/src/ui/internal/ui/utils.ts +5 -0
- package/src/ui/plugin-styles.css +250 -0
- package/src/ui/primitives/dialog-lifecycle.ts +58 -0
- package/src/ui/primitives/dice.tsx +79 -0
- package/src/ui/primitives/primitive-props.tsx +101 -0
- package/src/ui/theme/ThemeProvider.tsx +252 -0
- package/src/ui/theme/board.ts +61 -0
- package/src/ui/theme/css-vars.ts +105 -0
- package/src/ui/theme/derive.ts +240 -0
- package/src/ui/theme/index.ts +61 -0
- package/src/ui/theme/presets/arcade.ts +261 -0
- package/src/ui/theme/presets/studio.ts +261 -0
- package/src/ui/theme/presets/tabletop.ts +266 -0
- package/src/ui/theme/tokens.ts +392 -0
- package/src/ui/types/hex-color.ts +20 -0
- package/src/ui/types/player-state.ts +463 -0
- package/src/ui/types/tiled-board.ts +785 -0
- package/src/ui/types/visual-state.ts +137 -0
- package/src/ui.ts +1 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type {
|
|
3
|
+
AnySchema,
|
|
4
|
+
RuntimePayload,
|
|
5
|
+
RuntimeTableRecord,
|
|
6
|
+
StringKeyOf,
|
|
7
|
+
} from "./table";
|
|
8
|
+
import type {
|
|
9
|
+
DeckIdOfState,
|
|
10
|
+
PhaseNameOfState,
|
|
11
|
+
PlayerIdOfState,
|
|
12
|
+
PlayerIdOfTable,
|
|
13
|
+
PlayerZoneIdOfState,
|
|
14
|
+
RuntimeSetupSelection,
|
|
15
|
+
TableOfState,
|
|
16
|
+
} from "./extract";
|
|
17
|
+
import type {
|
|
18
|
+
EngineRollDieInstruction,
|
|
19
|
+
EngineShufflePlayerZoneInstruction,
|
|
20
|
+
EngineShuffleSharedZoneInstruction,
|
|
21
|
+
FlowInstruction,
|
|
22
|
+
RuntimeInstructionForState,
|
|
23
|
+
} from "../core/runtime-instruction";
|
|
24
|
+
|
|
25
|
+
// --- Continuation Tokens ---
|
|
26
|
+
|
|
27
|
+
export type ContinuationToken<
|
|
28
|
+
Data = RuntimePayload,
|
|
29
|
+
ContinuationId extends string = string,
|
|
30
|
+
Response = RuntimePayload,
|
|
31
|
+
> = {
|
|
32
|
+
id: ContinuationId;
|
|
33
|
+
data: Data;
|
|
34
|
+
readonly __responseType?: Response;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type ContinuationResponseOf<Token> =
|
|
38
|
+
Token extends ContinuationToken<any, string, infer Response>
|
|
39
|
+
? Response
|
|
40
|
+
: never;
|
|
41
|
+
|
|
42
|
+
export type AnyContinuationToken = ContinuationToken<
|
|
43
|
+
RuntimePayload,
|
|
44
|
+
string,
|
|
45
|
+
RuntimePayload
|
|
46
|
+
>;
|
|
47
|
+
|
|
48
|
+
// --- Shared authoring primitives ---
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Declarative choice option. Retained as the shape used by prompt-kind
|
|
52
|
+
* interactions' `options` field (see `InteractionSpec.options` in
|
|
53
|
+
* `model/spec.ts`). Independent of any specific prompt authoring API.
|
|
54
|
+
*/
|
|
55
|
+
export type ChoiceOption<OptionId extends string = string> = {
|
|
56
|
+
id: OptionId;
|
|
57
|
+
label: string;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// --- Runtime Flow & State ---
|
|
61
|
+
|
|
62
|
+
export type RuntimePhaseState = object;
|
|
63
|
+
|
|
64
|
+
export type PhaseAccessor<
|
|
65
|
+
PhaseStates extends Record<string, object>,
|
|
66
|
+
CurrentPhase extends keyof PhaseStates & string = keyof PhaseStates & string,
|
|
67
|
+
> = {
|
|
68
|
+
get<PhaseName extends keyof PhaseStates & string>(
|
|
69
|
+
phaseName: PhaseName,
|
|
70
|
+
): CurrentPhase extends PhaseName
|
|
71
|
+
? PhaseStates[PhaseName]
|
|
72
|
+
: PhaseStates[PhaseName] | null;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export type PhasePayload<
|
|
76
|
+
PhaseStates extends Record<string, object>,
|
|
77
|
+
CurrentPhase extends keyof PhaseStates & string,
|
|
78
|
+
> = PhaseStates[CurrentPhase] & PhaseAccessor<PhaseStates, CurrentPhase>;
|
|
79
|
+
|
|
80
|
+
export type FlowState<PhaseName extends string, PlayerId extends string> = {
|
|
81
|
+
currentPhase: PhaseName;
|
|
82
|
+
turn: number;
|
|
83
|
+
round: number;
|
|
84
|
+
activePlayers: PlayerId[];
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export type RuntimeRngState = {
|
|
88
|
+
seed?: number | null;
|
|
89
|
+
cursor: number;
|
|
90
|
+
trace: string[];
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export type RuntimeSimultaneousSubmission = {
|
|
94
|
+
interactionId: string;
|
|
95
|
+
params: RuntimePayload;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export type RuntimeSimultaneousState<
|
|
99
|
+
PhaseName extends string,
|
|
100
|
+
PlayerId extends string,
|
|
101
|
+
> = {
|
|
102
|
+
current: {
|
|
103
|
+
phaseName: PhaseName;
|
|
104
|
+
actors: PlayerId[];
|
|
105
|
+
submissions: Partial<Record<PlayerId, RuntimeSimultaneousSubmission>>;
|
|
106
|
+
} | null;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Marker tag attached by `defineEffect` to every effect spec. `fx.effect`
|
|
111
|
+
* uses `type` to dispatch to the right wire-effect builder.
|
|
112
|
+
*/
|
|
113
|
+
export type EffectTypeTag =
|
|
114
|
+
| "rollDie"
|
|
115
|
+
| "shuffleSharedZone"
|
|
116
|
+
| "shufflePlayerZone";
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Structural shape of the objects produced by `defineEffect`, as seen by
|
|
120
|
+
* the `fx.effect` dispatcher. The public, per-type effect definitions live
|
|
121
|
+
* in `model/spec.ts`.
|
|
122
|
+
*/
|
|
123
|
+
export type EffectSpecLike<ContextSchema extends AnySchema = AnySchema> = {
|
|
124
|
+
type: EffectTypeTag;
|
|
125
|
+
id: string;
|
|
126
|
+
contextSchema?: ContextSchema;
|
|
127
|
+
/**
|
|
128
|
+
* Opaque authoring-time continuation callable. The runtime only needs its
|
|
129
|
+
* `id`; the heterogeneously-typed `(data) => ...` signature is erased
|
|
130
|
+
* here. The `data` parameter is typed as `never` so that this structural
|
|
131
|
+
* upper bound is assignable-from every concrete per-effect continuation
|
|
132
|
+
* (function parameters are contravariant — a specific `(data: T) => R`
|
|
133
|
+
* is assignable to `(data: X) => R` only when `X <: T`, and `never <: T`
|
|
134
|
+
* holds for every `T`).
|
|
135
|
+
*/
|
|
136
|
+
__continuation?: ((data: never) => unknown) & { id: string };
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Options accepted by `fx.effect(effect, options)`, specialized by
|
|
141
|
+
* `effect.type`.
|
|
142
|
+
*/
|
|
143
|
+
type EffectContextValue<Effect extends EffectSpecLike> =
|
|
144
|
+
NonNullable<Effect["contextSchema"]> extends AnySchema
|
|
145
|
+
? z.infer<NonNullable<Effect["contextSchema"]>>
|
|
146
|
+
: undefined;
|
|
147
|
+
|
|
148
|
+
export type EffectInvokeOptions<
|
|
149
|
+
Effect extends EffectSpecLike,
|
|
150
|
+
State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },
|
|
151
|
+
> = Effect["type"] extends "rollDie"
|
|
152
|
+
? {
|
|
153
|
+
dieId: StringKeyOf<TableOfState<State>["dice"]>;
|
|
154
|
+
context?: EffectContextValue<Effect>;
|
|
155
|
+
}
|
|
156
|
+
: Effect["type"] extends "shuffleSharedZone"
|
|
157
|
+
? {
|
|
158
|
+
zoneId: DeckIdOfState<State>;
|
|
159
|
+
context?: EffectContextValue<Effect>;
|
|
160
|
+
}
|
|
161
|
+
: Effect["type"] extends "shufflePlayerZone"
|
|
162
|
+
? {
|
|
163
|
+
zoneId: PlayerZoneIdOfState<State>;
|
|
164
|
+
playerId: PlayerIdOfState<State>;
|
|
165
|
+
context?: EffectContextValue<Effect>;
|
|
166
|
+
}
|
|
167
|
+
: never;
|
|
168
|
+
|
|
169
|
+
type EffectInstructionForState<
|
|
170
|
+
Effect extends EffectSpecLike,
|
|
171
|
+
State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },
|
|
172
|
+
> = Effect["type"] extends "rollDie"
|
|
173
|
+
? EngineRollDieInstruction
|
|
174
|
+
: Effect["type"] extends "shuffleSharedZone"
|
|
175
|
+
? EngineShuffleSharedZoneInstruction<DeckIdOfState<State>>
|
|
176
|
+
: Effect["type"] extends "shufflePlayerZone"
|
|
177
|
+
? EngineShufflePlayerZoneInstruction<
|
|
178
|
+
PlayerZoneIdOfState<State>,
|
|
179
|
+
PlayerIdOfState<State>
|
|
180
|
+
>
|
|
181
|
+
: never;
|
|
182
|
+
|
|
183
|
+
export type ReducerFx<
|
|
184
|
+
State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },
|
|
185
|
+
> = {
|
|
186
|
+
transition: <To extends PhaseNameOfState<State>>(
|
|
187
|
+
to: To,
|
|
188
|
+
) => FlowInstruction<To>;
|
|
189
|
+
/**
|
|
190
|
+
* Invoke an engine-side resumable effect authored via `defineEffect`.
|
|
191
|
+
* The returned runtime instruction is consumed by the engine; if the effect
|
|
192
|
+
* has a `reduce`, its continuation is delivered back as a typed input.
|
|
193
|
+
*/
|
|
194
|
+
effect: <Effect extends EffectSpecLike>(
|
|
195
|
+
effect: Effect,
|
|
196
|
+
options: EffectInvokeOptions<Effect, State>,
|
|
197
|
+
) => EffectInstructionForState<Effect, State>;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// --- Composite State ---
|
|
201
|
+
|
|
202
|
+
export type RuntimeState<
|
|
203
|
+
PhaseName extends string,
|
|
204
|
+
PlayerId extends string,
|
|
205
|
+
Setup extends RuntimeSetupSelection = RuntimeSetupSelection,
|
|
206
|
+
> = {
|
|
207
|
+
rng: RuntimeRngState;
|
|
208
|
+
setup: Setup | null;
|
|
209
|
+
simultaneous: RuntimeSimultaneousState<PhaseName, PlayerId>;
|
|
210
|
+
lastTransition: {
|
|
211
|
+
from: PhaseName;
|
|
212
|
+
to: PhaseName;
|
|
213
|
+
} | null;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export type ReducerRuntimeStateForState<
|
|
217
|
+
State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },
|
|
218
|
+
Setup extends RuntimeSetupSelection = RuntimeSetupSelection,
|
|
219
|
+
> = RuntimeState<PhaseNameOfState<State>, PlayerIdOfState<State>, Setup>;
|
|
220
|
+
|
|
221
|
+
export type ReducerGameState<
|
|
222
|
+
Table extends RuntimeTableRecord,
|
|
223
|
+
PublicState extends object,
|
|
224
|
+
PrivateState extends object,
|
|
225
|
+
HiddenState extends object,
|
|
226
|
+
PhaseState extends RuntimePhaseState,
|
|
227
|
+
PhaseName extends string,
|
|
228
|
+
PhaseStates extends Record<PhaseName, object> = Record<PhaseName, PhaseState>,
|
|
229
|
+
> = {
|
|
230
|
+
table: Table;
|
|
231
|
+
publicState: PublicState;
|
|
232
|
+
privateState: Record<PlayerIdOfTable<Table>, PrivateState>;
|
|
233
|
+
hiddenState: HiddenState;
|
|
234
|
+
flow: FlowState<PhaseName, PlayerIdOfTable<Table>>;
|
|
235
|
+
phase: PhaseState & PhaseAccessor<PhaseStates>;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
export type ReducerSessionState<
|
|
239
|
+
State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },
|
|
240
|
+
Setup extends RuntimeSetupSelection = RuntimeSetupSelection,
|
|
241
|
+
> = {
|
|
242
|
+
domain: State;
|
|
243
|
+
runtime: ReducerRuntimeStateForState<State, Setup>;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// --- Results ---
|
|
247
|
+
|
|
248
|
+
export type ReducerValidationResult =
|
|
249
|
+
| { valid: true }
|
|
250
|
+
| { valid: false; errorCode: string; message?: string };
|
|
251
|
+
|
|
252
|
+
export type ReducerReject = {
|
|
253
|
+
type: "reject";
|
|
254
|
+
errorCode: string;
|
|
255
|
+
message?: string;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export type ReducerAccept<State> = {
|
|
259
|
+
type: "accept";
|
|
260
|
+
state: State;
|
|
261
|
+
instructions?: RuntimeInstructionForState<State>[];
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export type ReducerResult<State> = ReducerAccept<State> | ReducerReject;
|