@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,745 @@
|
|
|
1
|
+
import type { StringKeyOf } from "./table";
|
|
2
|
+
import type {
|
|
3
|
+
GeneratedManifestContractLike,
|
|
4
|
+
ManifestContract,
|
|
5
|
+
StateDefinition,
|
|
6
|
+
} from "./manifest";
|
|
7
|
+
import type { z } from "zod";
|
|
8
|
+
import type { SchemaLike } from "./table";
|
|
9
|
+
|
|
10
|
+
export type TableOfState<State> = State extends { table: infer Table }
|
|
11
|
+
? Table
|
|
12
|
+
: never;
|
|
13
|
+
export type TableOfManifest<Manifest> =
|
|
14
|
+
Manifest extends GeneratedManifestContractLike<infer Table> ? Table : never;
|
|
15
|
+
export type PhaseNameOfState<State> = State extends {
|
|
16
|
+
flow: { currentPhase: infer PhaseName };
|
|
17
|
+
}
|
|
18
|
+
? Extract<PhaseName, string>
|
|
19
|
+
: never;
|
|
20
|
+
export type PhaseNameOfManifest<Manifest> = Manifest extends {
|
|
21
|
+
literals: { phaseNames: readonly (infer PhaseName)[] };
|
|
22
|
+
}
|
|
23
|
+
? Extract<PhaseName, string>
|
|
24
|
+
: never;
|
|
25
|
+
export type PlayerIdOfTable<Table> = Table extends {
|
|
26
|
+
playerOrder: readonly (infer PlayerId)[];
|
|
27
|
+
}
|
|
28
|
+
? Extract<PlayerId, string>
|
|
29
|
+
: never;
|
|
30
|
+
export type PlayerIdOfManifest<Manifest> = Manifest extends {
|
|
31
|
+
literals: { playerIds: readonly (infer PlayerId)[] };
|
|
32
|
+
}
|
|
33
|
+
? Extract<PlayerId, string>
|
|
34
|
+
: string;
|
|
35
|
+
export type PlayerIdOfState<State> = PlayerIdOfTable<TableOfState<State>>;
|
|
36
|
+
/**
|
|
37
|
+
* Manifest-declared resource id union for a runtime table.
|
|
38
|
+
*
|
|
39
|
+
* Derived from the shape of `table.resources`, which the generated
|
|
40
|
+
* manifest contract seeds as `PerPlayer<Record<ResourceId, number>>`.
|
|
41
|
+
* The helper peeks inside the `PerPlayer` wrapper to surface the
|
|
42
|
+
* resource-id keys without forcing callers to remember the wrapper.
|
|
43
|
+
*/
|
|
44
|
+
export type ResourceIdOfTable<Table> = Table extends {
|
|
45
|
+
resources: infer Resources;
|
|
46
|
+
}
|
|
47
|
+
? ValueOfPerPlayer<Resources> extends infer PerPlayerValue
|
|
48
|
+
? PerPlayerValue extends Record<string, unknown>
|
|
49
|
+
? StringKeyOf<PerPlayerValue>
|
|
50
|
+
: never
|
|
51
|
+
: never
|
|
52
|
+
: never;
|
|
53
|
+
export type ResourceIdOfState<State> = ResourceIdOfTable<TableOfState<State>>;
|
|
54
|
+
/**
|
|
55
|
+
* Per-player balance shape for a runtime table. Strips the `PerPlayer`
|
|
56
|
+
* wrapper around `table.resources` so callers receive the manifest-typed
|
|
57
|
+
* record directly (e.g. `Record<ResourceId, number>`).
|
|
58
|
+
*/
|
|
59
|
+
export type ResourceBalancesOfTable<Table> = Table extends {
|
|
60
|
+
resources: infer Resources;
|
|
61
|
+
}
|
|
62
|
+
? ValueOfPerPlayer<Resources> extends infer PerPlayerValue
|
|
63
|
+
? PerPlayerValue extends Record<string, unknown>
|
|
64
|
+
? PerPlayerValue
|
|
65
|
+
: never
|
|
66
|
+
: never
|
|
67
|
+
: never;
|
|
68
|
+
export type ResourceBalancesOfState<State> = ResourceBalancesOfTable<
|
|
69
|
+
TableOfState<State>
|
|
70
|
+
>;
|
|
71
|
+
export type ResourceIdOfManifest<Manifest> = Manifest extends {
|
|
72
|
+
literals: { resourceIds: readonly (infer ResourceId)[] };
|
|
73
|
+
}
|
|
74
|
+
? Extract<ResourceId, string>
|
|
75
|
+
: string;
|
|
76
|
+
/**
|
|
77
|
+
* Per-player resource counts: a partial `Record<ResourceId, number>`.
|
|
78
|
+
*
|
|
79
|
+
* Used as the input shape for {@link ReducerOps.addResources},
|
|
80
|
+
* {@link ReducerOps.spendResources}, and {@link ReducerOps.transferResources}.
|
|
81
|
+
*/
|
|
82
|
+
export type ResourceAmountsOfTable<Table> = Partial<
|
|
83
|
+
Record<ResourceIdOfTable<Table>, number>
|
|
84
|
+
>;
|
|
85
|
+
export type PhaseStateOfState<State> = State extends { phase: infer PhaseState }
|
|
86
|
+
? PhaseState
|
|
87
|
+
: never;
|
|
88
|
+
export type PhaseStepOfState<State> =
|
|
89
|
+
PhaseStateOfState<State> extends {
|
|
90
|
+
step?: infer Step;
|
|
91
|
+
}
|
|
92
|
+
? Extract<NonNullable<Step>, string>
|
|
93
|
+
: never;
|
|
94
|
+
export type PhaseMapOfState<State> = PhaseStateOfState<State>;
|
|
95
|
+
export type PublicStateOfState<State> = State extends {
|
|
96
|
+
publicState: infer PublicState;
|
|
97
|
+
}
|
|
98
|
+
? PublicState
|
|
99
|
+
: never;
|
|
100
|
+
export type HiddenStateOfState<State> = State extends {
|
|
101
|
+
hiddenState: infer HiddenState;
|
|
102
|
+
}
|
|
103
|
+
? HiddenState
|
|
104
|
+
: never;
|
|
105
|
+
export type PrivateStateOfState<State> = State extends {
|
|
106
|
+
privateState: Record<string, infer PrivateState>;
|
|
107
|
+
}
|
|
108
|
+
? PrivateState
|
|
109
|
+
: never;
|
|
110
|
+
export type DeckIdOfTable<Table> = Table extends { decks: infer Decks }
|
|
111
|
+
? StringKeyOf<Decks>
|
|
112
|
+
: never;
|
|
113
|
+
export type HandIdOfTable<Table> = Table extends { hands: infer Hands }
|
|
114
|
+
? StringKeyOf<Hands>
|
|
115
|
+
: never;
|
|
116
|
+
export type CardIdOfTable<Table> = Table extends { cards: infer Cards }
|
|
117
|
+
? StringKeyOf<Cards>
|
|
118
|
+
: never;
|
|
119
|
+
export type CardTypeOfTable<Table> = Table extends {
|
|
120
|
+
cards: Record<string, { cardType: infer CardType }>;
|
|
121
|
+
}
|
|
122
|
+
? Extract<CardType, string>
|
|
123
|
+
: string;
|
|
124
|
+
export type DeckIdOfState<State> = DeckIdOfTable<TableOfState<State>>;
|
|
125
|
+
export type HandIdOfState<State> = HandIdOfTable<TableOfState<State>>;
|
|
126
|
+
export type CardIdOfState<State> = CardIdOfTable<TableOfState<State>>;
|
|
127
|
+
export type CardTypeOfState<State> = CardTypeOfTable<TableOfState<State>>;
|
|
128
|
+
export type CardIdOfManifest<Manifest> = Manifest extends {
|
|
129
|
+
literals: { cardIds: readonly (infer CardId)[] };
|
|
130
|
+
}
|
|
131
|
+
? Extract<CardId, string>
|
|
132
|
+
: string;
|
|
133
|
+
export type SharedZoneIdOfTable<Table> = DeckIdOfTable<Table>;
|
|
134
|
+
export type PlayerZoneIdOfTable<Table> = HandIdOfTable<Table>;
|
|
135
|
+
export type BoardMapOfTable<Table> = Table extends {
|
|
136
|
+
boards: { byId: infer Boards };
|
|
137
|
+
}
|
|
138
|
+
? Boards
|
|
139
|
+
: never;
|
|
140
|
+
export type BoardIdOfTable<Table> = StringKeyOf<BoardMapOfTable<Table>>;
|
|
141
|
+
export type BoardStateOfTable<
|
|
142
|
+
Table,
|
|
143
|
+
BoardId extends BoardIdOfTable<Table>,
|
|
144
|
+
> = BoardMapOfTable<Table>[BoardId];
|
|
145
|
+
export type BoardTypeIdOfTable<Table> =
|
|
146
|
+
BoardStateOfTable<Table, BoardIdOfTable<Table>> extends {
|
|
147
|
+
typeId?: infer BoardTypeId | null;
|
|
148
|
+
}
|
|
149
|
+
? Extract<BoardTypeId, string>
|
|
150
|
+
: never;
|
|
151
|
+
export type TiledBoardIdOfTable<Table> = {
|
|
152
|
+
[BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
|
|
153
|
+
Table,
|
|
154
|
+
BoardId
|
|
155
|
+
> extends { layout: "hex" | "square" }
|
|
156
|
+
? BoardId
|
|
157
|
+
: never;
|
|
158
|
+
}[BoardIdOfTable<Table>];
|
|
159
|
+
export type TiledBoardStateOfTable<
|
|
160
|
+
Table,
|
|
161
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
162
|
+
> =
|
|
163
|
+
BoardStateOfTable<Table, BoardId> extends infer BoardState
|
|
164
|
+
? BoardState extends {
|
|
165
|
+
layout: "hex" | "square";
|
|
166
|
+
spaces: Record<string, unknown>;
|
|
167
|
+
edges: readonly { id: string }[];
|
|
168
|
+
vertices: readonly { id: string }[];
|
|
169
|
+
}
|
|
170
|
+
? BoardState
|
|
171
|
+
: never
|
|
172
|
+
: never;
|
|
173
|
+
export type HexBoardIdOfTable<Table> = {
|
|
174
|
+
[BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
|
|
175
|
+
Table,
|
|
176
|
+
BoardId
|
|
177
|
+
> extends { layout: "hex" }
|
|
178
|
+
? BoardId
|
|
179
|
+
: never;
|
|
180
|
+
}[BoardIdOfTable<Table>];
|
|
181
|
+
export type HexBoardStateOfTable<
|
|
182
|
+
Table,
|
|
183
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
184
|
+
> =
|
|
185
|
+
BoardStateOfTable<Table, BoardId> extends infer BoardState
|
|
186
|
+
? BoardState extends {
|
|
187
|
+
layout: "hex";
|
|
188
|
+
spaces: Record<string, unknown>;
|
|
189
|
+
edges: readonly { id: string }[];
|
|
190
|
+
vertices: readonly { id: string }[];
|
|
191
|
+
}
|
|
192
|
+
? BoardState
|
|
193
|
+
: never
|
|
194
|
+
: never;
|
|
195
|
+
export type SquareBoardIdOfTable<Table> = {
|
|
196
|
+
[BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
|
|
197
|
+
Table,
|
|
198
|
+
BoardId
|
|
199
|
+
> extends { layout: "square" }
|
|
200
|
+
? BoardId
|
|
201
|
+
: never;
|
|
202
|
+
}[BoardIdOfTable<Table>];
|
|
203
|
+
export type SquareBoardStateOfTable<
|
|
204
|
+
Table,
|
|
205
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
206
|
+
> =
|
|
207
|
+
BoardStateOfTable<Table, BoardId> extends infer BoardState
|
|
208
|
+
? BoardState extends {
|
|
209
|
+
layout: "square";
|
|
210
|
+
spaces: Record<string, unknown>;
|
|
211
|
+
edges: readonly { id: string }[];
|
|
212
|
+
vertices: readonly { id: string }[];
|
|
213
|
+
}
|
|
214
|
+
? BoardState
|
|
215
|
+
: never
|
|
216
|
+
: never;
|
|
217
|
+
export type SpaceIdOfTable<Table, BoardId extends BoardIdOfTable<Table>> =
|
|
218
|
+
BoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
|
|
219
|
+
? StringKeyOf<Spaces>
|
|
220
|
+
: never;
|
|
221
|
+
export type SpaceTypeIdOfTable<Table, BoardId extends BoardIdOfTable<Table>> =
|
|
222
|
+
BoardStateOfTable<Table, BoardId> extends {
|
|
223
|
+
spaces: infer Spaces extends Record<string, unknown>;
|
|
224
|
+
}
|
|
225
|
+
? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
|
|
226
|
+
? Extract<SpaceTypeId, string>
|
|
227
|
+
: never
|
|
228
|
+
: never;
|
|
229
|
+
export type BoardContainerIdOfTable<
|
|
230
|
+
Table,
|
|
231
|
+
BoardId extends BoardIdOfTable<Table>,
|
|
232
|
+
> =
|
|
233
|
+
BoardStateOfTable<Table, BoardId> extends { containers: infer Containers }
|
|
234
|
+
? StringKeyOf<Containers>
|
|
235
|
+
: never;
|
|
236
|
+
export type RelationTypeIdOfTable<
|
|
237
|
+
Table,
|
|
238
|
+
BoardId extends BoardIdOfTable<Table>,
|
|
239
|
+
> =
|
|
240
|
+
BoardStateOfTable<Table, BoardId> extends {
|
|
241
|
+
relations: readonly (infer Relation)[];
|
|
242
|
+
}
|
|
243
|
+
? Relation extends { typeId: infer RelationTypeId }
|
|
244
|
+
? Extract<RelationTypeId, string>
|
|
245
|
+
: never
|
|
246
|
+
: never;
|
|
247
|
+
export type TiledSpaceIdOfTable<
|
|
248
|
+
Table,
|
|
249
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
250
|
+
> =
|
|
251
|
+
TiledBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
|
|
252
|
+
? StringKeyOf<Spaces>
|
|
253
|
+
: never;
|
|
254
|
+
export type HexSpaceIdOfTable<Table, BoardId extends HexBoardIdOfTable<Table>> =
|
|
255
|
+
HexBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
|
|
256
|
+
? StringKeyOf<Spaces>
|
|
257
|
+
: never;
|
|
258
|
+
export type SquareSpaceIdOfTable<
|
|
259
|
+
Table,
|
|
260
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
261
|
+
> =
|
|
262
|
+
SquareBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
|
|
263
|
+
? StringKeyOf<Spaces>
|
|
264
|
+
: never;
|
|
265
|
+
export type HexSpaceTypeIdOfTable<
|
|
266
|
+
Table,
|
|
267
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
268
|
+
> =
|
|
269
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
270
|
+
spaces: infer Spaces extends Record<string, unknown>;
|
|
271
|
+
}
|
|
272
|
+
? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
|
|
273
|
+
? Extract<SpaceTypeId, string>
|
|
274
|
+
: never
|
|
275
|
+
: never;
|
|
276
|
+
export type SquareSpaceTypeIdOfTable<
|
|
277
|
+
Table,
|
|
278
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
279
|
+
> =
|
|
280
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
281
|
+
spaces: infer Spaces extends Record<string, unknown>;
|
|
282
|
+
}
|
|
283
|
+
? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
|
|
284
|
+
? Extract<SpaceTypeId, string>
|
|
285
|
+
: never
|
|
286
|
+
: never;
|
|
287
|
+
export type TiledEdgeIdOfTable<
|
|
288
|
+
Table,
|
|
289
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
290
|
+
> =
|
|
291
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
292
|
+
edges: readonly (infer Edge)[];
|
|
293
|
+
}
|
|
294
|
+
? Edge extends { id: infer EdgeId }
|
|
295
|
+
? Extract<EdgeId, string>
|
|
296
|
+
: never
|
|
297
|
+
: never;
|
|
298
|
+
export type HexEdgeIdOfTable<Table, BoardId extends HexBoardIdOfTable<Table>> =
|
|
299
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
300
|
+
edges: readonly (infer Edge)[];
|
|
301
|
+
}
|
|
302
|
+
? Edge extends { id: infer EdgeId }
|
|
303
|
+
? Extract<EdgeId, string>
|
|
304
|
+
: never
|
|
305
|
+
: never;
|
|
306
|
+
export type SquareEdgeIdOfTable<
|
|
307
|
+
Table,
|
|
308
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
309
|
+
> =
|
|
310
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
311
|
+
edges: readonly (infer Edge)[];
|
|
312
|
+
}
|
|
313
|
+
? Edge extends { id: infer EdgeId }
|
|
314
|
+
? Extract<EdgeId, string>
|
|
315
|
+
: never
|
|
316
|
+
: never;
|
|
317
|
+
/**
|
|
318
|
+
* Edge record on a tiled board narrowed to a specific `EdgeId` literal.
|
|
319
|
+
*
|
|
320
|
+
* The generated board state stores edges as a single array element type
|
|
321
|
+
* `{ id: <union-of-edge-ids>, spaceIds, typeId, fields, ... }`. Looking up an
|
|
322
|
+
* edge by id should return a record whose `id` is narrowed to the literal
|
|
323
|
+
* that was requested, not the entire edge-id union.
|
|
324
|
+
*/
|
|
325
|
+
export type TiledEdgeStateOfTable<
|
|
326
|
+
Table,
|
|
327
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
328
|
+
EdgeId extends TiledEdgeIdOfTable<Table, BoardId>,
|
|
329
|
+
> =
|
|
330
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
331
|
+
edges: readonly (infer Edge)[];
|
|
332
|
+
}
|
|
333
|
+
? Edge extends { id: string }
|
|
334
|
+
? Omit<Edge, "id"> & { id: EdgeId }
|
|
335
|
+
: never
|
|
336
|
+
: never;
|
|
337
|
+
|
|
338
|
+
export type HexEdgeStateOfTable<
|
|
339
|
+
Table,
|
|
340
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
341
|
+
EdgeId extends HexEdgeIdOfTable<Table, BoardId>,
|
|
342
|
+
> =
|
|
343
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
344
|
+
edges: readonly (infer Edge)[];
|
|
345
|
+
}
|
|
346
|
+
? Edge extends { id: string }
|
|
347
|
+
? Omit<Edge, "id"> & { id: EdgeId }
|
|
348
|
+
: never
|
|
349
|
+
: never;
|
|
350
|
+
|
|
351
|
+
export type SquareEdgeStateOfTable<
|
|
352
|
+
Table,
|
|
353
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
354
|
+
EdgeId extends SquareEdgeIdOfTable<Table, BoardId>,
|
|
355
|
+
> =
|
|
356
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
357
|
+
edges: readonly (infer Edge)[];
|
|
358
|
+
}
|
|
359
|
+
? Edge extends { id: string }
|
|
360
|
+
? Omit<Edge, "id"> & { id: EdgeId }
|
|
361
|
+
: never
|
|
362
|
+
: never;
|
|
363
|
+
|
|
364
|
+
export type TiledEdgeTypeIdOfTable<
|
|
365
|
+
Table,
|
|
366
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
367
|
+
> =
|
|
368
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
369
|
+
edges: readonly (infer Edge)[];
|
|
370
|
+
}
|
|
371
|
+
? Edge extends { typeId?: infer EdgeTypeId | null }
|
|
372
|
+
? Extract<EdgeTypeId, string>
|
|
373
|
+
: never
|
|
374
|
+
: never;
|
|
375
|
+
export type HexEdgeTypeIdOfTable<
|
|
376
|
+
Table,
|
|
377
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
378
|
+
> =
|
|
379
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
380
|
+
edges: readonly (infer Edge)[];
|
|
381
|
+
}
|
|
382
|
+
? Edge extends { typeId?: infer EdgeTypeId | null }
|
|
383
|
+
? Extract<EdgeTypeId, string>
|
|
384
|
+
: never
|
|
385
|
+
: never;
|
|
386
|
+
export type SquareEdgeTypeIdOfTable<
|
|
387
|
+
Table,
|
|
388
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
389
|
+
> =
|
|
390
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
391
|
+
edges: readonly (infer Edge)[];
|
|
392
|
+
}
|
|
393
|
+
? Edge extends { typeId?: infer EdgeTypeId | null }
|
|
394
|
+
? Extract<EdgeTypeId, string>
|
|
395
|
+
: never
|
|
396
|
+
: never;
|
|
397
|
+
export type TiledVertexIdOfTable<
|
|
398
|
+
Table,
|
|
399
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
400
|
+
> =
|
|
401
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
402
|
+
vertices: readonly (infer Vertex)[];
|
|
403
|
+
}
|
|
404
|
+
? Vertex extends { id: infer VertexId }
|
|
405
|
+
? Extract<VertexId, string>
|
|
406
|
+
: never
|
|
407
|
+
: never;
|
|
408
|
+
export type HexVertexIdOfTable<
|
|
409
|
+
Table,
|
|
410
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
411
|
+
> =
|
|
412
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
413
|
+
vertices: readonly (infer Vertex)[];
|
|
414
|
+
}
|
|
415
|
+
? Vertex extends { id: infer VertexId }
|
|
416
|
+
? Extract<VertexId, string>
|
|
417
|
+
: never
|
|
418
|
+
: never;
|
|
419
|
+
export type SquareVertexIdOfTable<
|
|
420
|
+
Table,
|
|
421
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
422
|
+
> =
|
|
423
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
424
|
+
vertices: readonly (infer Vertex)[];
|
|
425
|
+
}
|
|
426
|
+
? Vertex extends { id: infer VertexId }
|
|
427
|
+
? Extract<VertexId, string>
|
|
428
|
+
: never
|
|
429
|
+
: never;
|
|
430
|
+
/**
|
|
431
|
+
* Vertex record on a tiled board narrowed to a specific `VertexId` literal.
|
|
432
|
+
* See {@link TiledEdgeStateOfTable} for rationale.
|
|
433
|
+
*/
|
|
434
|
+
export type TiledVertexStateOfTable<
|
|
435
|
+
Table,
|
|
436
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
437
|
+
VertexId extends TiledVertexIdOfTable<Table, BoardId>,
|
|
438
|
+
> =
|
|
439
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
440
|
+
vertices: readonly (infer Vertex)[];
|
|
441
|
+
}
|
|
442
|
+
? Vertex extends { id: string }
|
|
443
|
+
? Omit<Vertex, "id"> & { id: VertexId }
|
|
444
|
+
: never
|
|
445
|
+
: never;
|
|
446
|
+
|
|
447
|
+
export type HexVertexStateOfTable<
|
|
448
|
+
Table,
|
|
449
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
450
|
+
VertexId extends HexVertexIdOfTable<Table, BoardId>,
|
|
451
|
+
> =
|
|
452
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
453
|
+
vertices: readonly (infer Vertex)[];
|
|
454
|
+
}
|
|
455
|
+
? Vertex extends { id: string }
|
|
456
|
+
? Omit<Vertex, "id"> & { id: VertexId }
|
|
457
|
+
: never
|
|
458
|
+
: never;
|
|
459
|
+
|
|
460
|
+
export type SquareVertexStateOfTable<
|
|
461
|
+
Table,
|
|
462
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
463
|
+
VertexId extends SquareVertexIdOfTable<Table, BoardId>,
|
|
464
|
+
> =
|
|
465
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
466
|
+
vertices: readonly (infer Vertex)[];
|
|
467
|
+
}
|
|
468
|
+
? Vertex extends { id: string }
|
|
469
|
+
? Omit<Vertex, "id"> & { id: VertexId }
|
|
470
|
+
: never
|
|
471
|
+
: never;
|
|
472
|
+
|
|
473
|
+
export type TiledVertexTypeIdOfTable<
|
|
474
|
+
Table,
|
|
475
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
476
|
+
> =
|
|
477
|
+
TiledBoardStateOfTable<Table, BoardId> extends {
|
|
478
|
+
vertices: readonly (infer Vertex)[];
|
|
479
|
+
}
|
|
480
|
+
? Vertex extends { typeId?: infer VertexTypeId | null }
|
|
481
|
+
? Extract<VertexTypeId, string>
|
|
482
|
+
: never
|
|
483
|
+
: never;
|
|
484
|
+
export type HexVertexTypeIdOfTable<
|
|
485
|
+
Table,
|
|
486
|
+
BoardId extends HexBoardIdOfTable<Table>,
|
|
487
|
+
> =
|
|
488
|
+
HexBoardStateOfTable<Table, BoardId> extends {
|
|
489
|
+
vertices: readonly (infer Vertex)[];
|
|
490
|
+
}
|
|
491
|
+
? Vertex extends { typeId?: infer VertexTypeId | null }
|
|
492
|
+
? Extract<VertexTypeId, string>
|
|
493
|
+
: never
|
|
494
|
+
: never;
|
|
495
|
+
export type SquareVertexTypeIdOfTable<
|
|
496
|
+
Table,
|
|
497
|
+
BoardId extends SquareBoardIdOfTable<Table>,
|
|
498
|
+
> =
|
|
499
|
+
SquareBoardStateOfTable<Table, BoardId> extends {
|
|
500
|
+
vertices: readonly (infer Vertex)[];
|
|
501
|
+
}
|
|
502
|
+
? Vertex extends { typeId?: infer VertexTypeId | null }
|
|
503
|
+
? Extract<VertexTypeId, string>
|
|
504
|
+
: never
|
|
505
|
+
: never;
|
|
506
|
+
export type TiledSpaceMap<
|
|
507
|
+
Table,
|
|
508
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
509
|
+
Value,
|
|
510
|
+
> = Partial<Record<TiledSpaceIdOfTable<Table, BoardId>, Value>>;
|
|
511
|
+
export type TiledEdgeMap<
|
|
512
|
+
Table,
|
|
513
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
514
|
+
Value,
|
|
515
|
+
> = Partial<Record<TiledEdgeIdOfTable<Table, BoardId>, Value>>;
|
|
516
|
+
export type TiledVertexMap<
|
|
517
|
+
Table,
|
|
518
|
+
BoardId extends TiledBoardIdOfTable<Table>,
|
|
519
|
+
Value,
|
|
520
|
+
> = Partial<Record<TiledVertexIdOfTable<Table, BoardId>, Value>>;
|
|
521
|
+
export type ComponentIdOfTable<Table> = Table extends {
|
|
522
|
+
componentLocations: infer ComponentLocations;
|
|
523
|
+
}
|
|
524
|
+
? StringKeyOf<ComponentLocations>
|
|
525
|
+
: never;
|
|
526
|
+
export type SharedZoneIdOfManifest<Manifest> = Manifest extends {
|
|
527
|
+
literals: { sharedZoneIds: readonly (infer ZoneId)[] };
|
|
528
|
+
}
|
|
529
|
+
? Extract<ZoneId, string>
|
|
530
|
+
: string;
|
|
531
|
+
export type PlayerZoneIdOfManifest<Manifest> = Manifest extends {
|
|
532
|
+
literals: { playerZoneIds: readonly (infer ZoneId)[] };
|
|
533
|
+
}
|
|
534
|
+
? Extract<ZoneId, string>
|
|
535
|
+
: string;
|
|
536
|
+
export type SharedZoneIdOfState<State> = DeckIdOfState<State>;
|
|
537
|
+
export type PlayerZoneIdOfState<State> = HandIdOfState<State>;
|
|
538
|
+
export type BoardIdOfManifest<Manifest> = Manifest extends {
|
|
539
|
+
literals: { boardIds: readonly (infer BoardId)[] };
|
|
540
|
+
}
|
|
541
|
+
? Extract<BoardId, string>
|
|
542
|
+
: string;
|
|
543
|
+
export type BoardLayoutOfManifest<Manifest> = Manifest extends {
|
|
544
|
+
literals: { boardLayouts: readonly (infer BoardLayout)[] };
|
|
545
|
+
}
|
|
546
|
+
? Extract<BoardLayout, string>
|
|
547
|
+
: "generic" | "hex" | "square";
|
|
548
|
+
export type BoardTypeIdOfManifest<Manifest> = Manifest extends {
|
|
549
|
+
literals: { boardTypeIds: readonly (infer BoardTypeId)[] };
|
|
550
|
+
}
|
|
551
|
+
? Extract<BoardTypeId, string>
|
|
552
|
+
: string;
|
|
553
|
+
export type BoardBaseIdOfManifest<Manifest> = Manifest extends {
|
|
554
|
+
literals: { boardBaseIds: readonly (infer BoardBaseId)[] };
|
|
555
|
+
}
|
|
556
|
+
? Extract<BoardBaseId, string>
|
|
557
|
+
: string;
|
|
558
|
+
export type RelationTypeIdOfManifest<Manifest> = Manifest extends {
|
|
559
|
+
literals: { relationTypeIds: readonly (infer RelationTypeId)[] };
|
|
560
|
+
}
|
|
561
|
+
? Extract<RelationTypeId, string>
|
|
562
|
+
: string;
|
|
563
|
+
export type BoardContainerIdOfManifest<Manifest> = Manifest extends {
|
|
564
|
+
literals: { boardContainerIds: readonly (infer ContainerId)[] };
|
|
565
|
+
}
|
|
566
|
+
? Extract<ContainerId, string>
|
|
567
|
+
: string;
|
|
568
|
+
export type EdgeTypeIdOfManifest<Manifest> = Manifest extends {
|
|
569
|
+
literals: { edgeTypeIds: readonly (infer EdgeTypeId)[] };
|
|
570
|
+
}
|
|
571
|
+
? Extract<EdgeTypeId, string>
|
|
572
|
+
: string;
|
|
573
|
+
export type VertexTypeIdOfManifest<Manifest> = Manifest extends {
|
|
574
|
+
literals: { vertexTypeIds: readonly (infer VertexTypeId)[] };
|
|
575
|
+
}
|
|
576
|
+
? Extract<VertexTypeId, string>
|
|
577
|
+
: string;
|
|
578
|
+
export type SpaceIdOfManifest<Manifest> = Manifest extends {
|
|
579
|
+
literals: { spaceIds: readonly (infer SpaceId)[] };
|
|
580
|
+
}
|
|
581
|
+
? Extract<SpaceId, string>
|
|
582
|
+
: string;
|
|
583
|
+
export type SpaceTypeIdOfManifest<Manifest> = Manifest extends {
|
|
584
|
+
literals: { spaceTypeIds: readonly (infer SpaceTypeId)[] };
|
|
585
|
+
}
|
|
586
|
+
? Extract<SpaceTypeId, string>
|
|
587
|
+
: string;
|
|
588
|
+
export type PieceIdOfManifest<Manifest> = Manifest extends {
|
|
589
|
+
literals: { pieceIds: readonly (infer PieceId)[] };
|
|
590
|
+
}
|
|
591
|
+
? Extract<PieceId, string>
|
|
592
|
+
: string;
|
|
593
|
+
export type DieIdOfManifest<Manifest> = Manifest extends {
|
|
594
|
+
literals: { dieIds: readonly (infer DieId)[] };
|
|
595
|
+
}
|
|
596
|
+
? Extract<DieId, string>
|
|
597
|
+
: string;
|
|
598
|
+
export type ManifestOf<Source> = Source extends { contract: infer Contract }
|
|
599
|
+
? ManifestOf<Contract>
|
|
600
|
+
: Source extends { manifest: infer Manifest }
|
|
601
|
+
? Manifest
|
|
602
|
+
: never;
|
|
603
|
+
export type SetupOptionIdOfManifest<Manifest> = Manifest extends {
|
|
604
|
+
literals: { setupOptionIds: readonly (infer SetupOptionId)[] };
|
|
605
|
+
}
|
|
606
|
+
? Extract<SetupOptionId, string>
|
|
607
|
+
: string;
|
|
608
|
+
export type SetupProfileIdOfManifest<Manifest> = Manifest extends {
|
|
609
|
+
literals: { setupProfileIds: readonly (infer SetupProfileId)[] };
|
|
610
|
+
}
|
|
611
|
+
? Extract<SetupProfileId, string>
|
|
612
|
+
: string;
|
|
613
|
+
export type SetupSelectionInputOfManifest<Manifest> = {
|
|
614
|
+
profileId: SetupProfileIdOfManifest<Manifest>;
|
|
615
|
+
optionValues?: Partial<Record<SetupOptionIdOfManifest<Manifest>, string>>;
|
|
616
|
+
};
|
|
617
|
+
export type SetupSelectionOfManifest<Manifest> = {
|
|
618
|
+
profileId: SetupProfileIdOfManifest<Manifest>;
|
|
619
|
+
optionValues: Record<SetupOptionIdOfManifest<Manifest>, string | null>;
|
|
620
|
+
};
|
|
621
|
+
export type RuntimeSetupSelectionInput<
|
|
622
|
+
Manifest extends GeneratedManifestContractLike =
|
|
623
|
+
GeneratedManifestContractLike,
|
|
624
|
+
> = SetupSelectionInputOfManifest<Manifest>;
|
|
625
|
+
export type RuntimeSetupSelection<
|
|
626
|
+
Manifest extends GeneratedManifestContractLike =
|
|
627
|
+
GeneratedManifestContractLike,
|
|
628
|
+
> = SetupSelectionOfManifest<Manifest>;
|
|
629
|
+
export type RuntimeSetupSelectionOverride<
|
|
630
|
+
Manifest extends GeneratedManifestContractLike =
|
|
631
|
+
GeneratedManifestContractLike,
|
|
632
|
+
> = SetupSelectionInputOfManifest<Manifest>;
|
|
633
|
+
export type StateDefinitionOfContract<Contract> = Contract extends {
|
|
634
|
+
state: infer StateDefinitionValue;
|
|
635
|
+
}
|
|
636
|
+
? StateDefinitionValue
|
|
637
|
+
: never;
|
|
638
|
+
export type PhaseSchemasOfContract<Contract> = Contract extends {
|
|
639
|
+
phases: infer Phases extends Record<string, SchemaLike<object>>;
|
|
640
|
+
}
|
|
641
|
+
? Phases
|
|
642
|
+
: Record<PhaseNameOfManifest<ManifestOf<Contract>>, SchemaLike<object>>;
|
|
643
|
+
export type PhaseStateMapOfContract<Contract> = {
|
|
644
|
+
[Name in keyof PhaseSchemasOfContract<Contract> & string]: z.infer<
|
|
645
|
+
PhaseSchemasOfContract<Contract>[Name]
|
|
646
|
+
>;
|
|
647
|
+
};
|
|
648
|
+
export type PublicSchemaOfContract<Contract> =
|
|
649
|
+
StateDefinitionOfContract<Contract> extends StateDefinition<
|
|
650
|
+
infer PublicSchema,
|
|
651
|
+
infer _PrivateSchema,
|
|
652
|
+
infer _HiddenSchema
|
|
653
|
+
>
|
|
654
|
+
? PublicSchema
|
|
655
|
+
: never;
|
|
656
|
+
export type PrivateSchemaOfContract<Contract> =
|
|
657
|
+
StateDefinitionOfContract<Contract> extends StateDefinition<
|
|
658
|
+
infer _PublicSchema,
|
|
659
|
+
infer PrivateSchema,
|
|
660
|
+
infer _HiddenSchema
|
|
661
|
+
>
|
|
662
|
+
? PrivateSchema
|
|
663
|
+
: never;
|
|
664
|
+
export type HiddenSchemaOfContract<Contract> =
|
|
665
|
+
StateDefinitionOfContract<Contract> extends StateDefinition<
|
|
666
|
+
infer _PublicSchema,
|
|
667
|
+
infer _PrivateSchema,
|
|
668
|
+
infer HiddenSchema
|
|
669
|
+
>
|
|
670
|
+
? HiddenSchema
|
|
671
|
+
: never;
|
|
672
|
+
export type PhaseNameOfContract<Contract> =
|
|
673
|
+
keyof PhaseSchemasOfContract<Contract> extends string
|
|
674
|
+
? keyof PhaseSchemasOfContract<Contract> & string
|
|
675
|
+
: PhaseNameOfManifest<ManifestOf<Contract>>;
|
|
676
|
+
export type ManifestContractOf<Contract> = ManifestContract<
|
|
677
|
+
TableOfManifest<ManifestOf<Contract>>
|
|
678
|
+
>;
|
|
679
|
+
export type ExactManifestContractOf<Contract> = ManifestOf<Contract> &
|
|
680
|
+
GeneratedManifestContractLike<TableOfManifest<ManifestOf<Contract>>>;
|
|
681
|
+
export type PhaseNameOf<Source> = Source extends {
|
|
682
|
+
flow: { currentPhase: infer PhaseName };
|
|
683
|
+
}
|
|
684
|
+
? Extract<PhaseName, string>
|
|
685
|
+
: PhaseNameOfContract<Source>;
|
|
686
|
+
export type DeckCardsOfTable<
|
|
687
|
+
Table,
|
|
688
|
+
DeckId extends DeckIdOfTable<Table>,
|
|
689
|
+
> = Table extends {
|
|
690
|
+
decks: infer Decks extends Record<string, readonly unknown[]>;
|
|
691
|
+
}
|
|
692
|
+
? Decks[DeckId]
|
|
693
|
+
: never;
|
|
694
|
+
// `hands` is a `Record<string, PerPlayer<string[]>>`-shaped map. Extracting the
|
|
695
|
+
// per-player cards type through the `PerPlayer<Value>` wrapper requires
|
|
696
|
+
// digging into the `entries` tuple. This intermediate helper resolves the
|
|
697
|
+
// tuple-value type even when `PerPlayer` is generic.
|
|
698
|
+
type ValueOfPerPlayer<T> = T extends {
|
|
699
|
+
readonly entries: ReadonlyArray<readonly [unknown, infer Value]>;
|
|
700
|
+
}
|
|
701
|
+
? Value
|
|
702
|
+
: never;
|
|
703
|
+
export type HandCardsOfTable<
|
|
704
|
+
Table,
|
|
705
|
+
HandId extends HandIdOfTable<Table>,
|
|
706
|
+
> = Table extends {
|
|
707
|
+
hands: infer Hands extends Record<string, unknown>;
|
|
708
|
+
}
|
|
709
|
+
? HandId extends keyof Hands
|
|
710
|
+
? ValueOfPerPlayer<Hands[HandId]> extends infer Value
|
|
711
|
+
? Value extends readonly unknown[]
|
|
712
|
+
? Value
|
|
713
|
+
: never
|
|
714
|
+
: never
|
|
715
|
+
: never
|
|
716
|
+
: never;
|
|
717
|
+
export type CardIdOfDeck<
|
|
718
|
+
Table,
|
|
719
|
+
DeckId extends DeckIdOfTable<Table>,
|
|
720
|
+
> = DeckCardsOfTable<Table, DeckId>[number];
|
|
721
|
+
export type CardIdOfHand<
|
|
722
|
+
Table,
|
|
723
|
+
HandId extends HandIdOfTable<Table>,
|
|
724
|
+
> = HandCardsOfTable<Table, HandId>[number];
|
|
725
|
+
export type CompatibleHandIdForDeck<
|
|
726
|
+
Table,
|
|
727
|
+
DeckId extends DeckIdOfTable<Table>,
|
|
728
|
+
> = {
|
|
729
|
+
[CandidateHandId in HandIdOfTable<Table>]: Extract<
|
|
730
|
+
CardIdOfDeck<Table, DeckId>,
|
|
731
|
+
CardIdOfHand<Table, CandidateHandId>
|
|
732
|
+
> extends never
|
|
733
|
+
? never
|
|
734
|
+
: CandidateHandId;
|
|
735
|
+
}[HandIdOfTable<Table>];
|
|
736
|
+
export type CompatibleCardIdForHandAndDeck<
|
|
737
|
+
Table,
|
|
738
|
+
HandId extends HandIdOfTable<Table>,
|
|
739
|
+
DeckId extends DeckIdOfTable<Table>,
|
|
740
|
+
> = Extract<CardIdOfHand<Table, HandId>, CardIdOfDeck<Table, DeckId>>;
|
|
741
|
+
export type CompatibleCardIdForTwoPlayerZones<
|
|
742
|
+
Table,
|
|
743
|
+
FromZoneId extends HandIdOfTable<Table>,
|
|
744
|
+
ToZoneId extends HandIdOfTable<Table>,
|
|
745
|
+
> = Extract<CardIdOfHand<Table, FromZoneId>, CardIdOfHand<Table, ToZoneId>>;
|