@dreamboard-games/sdk 0.5.0-alpha.2 → 0.5.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -45
- package/dist/chunk-DMFVAZI2.js +16 -0
- package/dist/chunk-DMFVAZI2.js.map +1 -0
- package/dist/chunk-FMM5LVJW.js +833 -0
- package/dist/chunk-FMM5LVJW.js.map +1 -0
- package/dist/{chunk-S2JEDVWH.js → chunk-LRILEVKC.js} +6113 -6489
- package/dist/chunk-LRILEVKC.js.map +1 -0
- package/dist/chunk-SP234IY4.js +1363 -0
- package/dist/chunk-SP234IY4.js.map +1 -0
- package/dist/chunk-VUWNJXLJ.js +52 -0
- package/dist/chunk-VUWNJXLJ.js.map +1 -0
- package/dist/chunk-ZPRKWPEP.js +511 -0
- package/dist/chunk-ZPRKWPEP.js.map +1 -0
- package/dist/definition-BaHNPZol.d.ts +4639 -0
- package/dist/diagnostics-B0lgnuZ6.d.ts +65 -0
- package/dist/index.d.ts +3553 -1
- package/dist/index.js +1045 -6
- package/dist/index.js.map +1 -1
- package/dist/model-BHro6yXu.d.ts +288 -0
- package/dist/react.d.ts +32 -0
- package/dist/react.js +80 -0
- package/dist/react.js.map +1 -0
- package/dist/reducer.d.ts +1194 -79
- package/dist/reducer.js +4326 -121
- package/dist/reducer.js.map +1 -1
- package/dist/testing.d.ts +518 -564
- package/dist/testing.js +2448 -915
- package/dist/testing.js.map +1 -1
- package/dist/types-DimqnJBq.d.ts +86 -0
- package/package.json +26 -131
- package/dist/HandView-Bi2lxzQP.d.ts +0 -79
- package/dist/ResourceCounter-BFxJknqp.d.ts +0 -98
- package/dist/ThemeProvider-CElaL2ik.d.ts +0 -99
- package/dist/attributes-DbvyMbXw.d.ts +0 -68
- package/dist/browser-interaction.d.ts +0 -910
- package/dist/browser-interaction.js +0 -119
- package/dist/browser-interaction.js.map +0 -1
- package/dist/chunk-32PFKDV7.js +0 -11705
- package/dist/chunk-32PFKDV7.js.map +0 -1
- package/dist/chunk-3BAD4VC2.js +0 -263
- package/dist/chunk-3BAD4VC2.js.map +0 -1
- package/dist/chunk-3SKDNDPG.js +0 -104
- package/dist/chunk-3SKDNDPG.js.map +0 -1
- package/dist/chunk-5YV2WHJ4.js +0 -25
- package/dist/chunk-5YV2WHJ4.js.map +0 -1
- package/dist/chunk-ANRB4XKA.js +0 -90
- package/dist/chunk-ANRB4XKA.js.map +0 -1
- package/dist/chunk-BI4G3PM2.js +0 -1864
- package/dist/chunk-BI4G3PM2.js.map +0 -1
- package/dist/chunk-EVCLTY4Q.js +0 -935
- package/dist/chunk-EVCLTY4Q.js.map +0 -1
- package/dist/chunk-GDPKTBUR.js +0 -564
- package/dist/chunk-GDPKTBUR.js.map +0 -1
- package/dist/chunk-H6VDGFL5.js +0 -2903
- package/dist/chunk-H6VDGFL5.js.map +0 -1
- package/dist/chunk-LR3ZTWQF.js +0 -5960
- package/dist/chunk-LR3ZTWQF.js.map +0 -1
- package/dist/chunk-PF7L4BMG.js +0 -117
- package/dist/chunk-PF7L4BMG.js.map +0 -1
- package/dist/chunk-PN5O6GG2.js +0 -32
- package/dist/chunk-PN5O6GG2.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js +0 -10
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-S2JEDVWH.js.map +0 -1
- package/dist/chunk-T3ZKNUZ7.js +0 -1
- package/dist/chunk-T3ZKNUZ7.js.map +0 -1
- package/dist/chunk-UGH54WZ2.js +0 -223
- package/dist/chunk-UGH54WZ2.js.map +0 -1
- package/dist/chunk-VCDWP5VL.js +0 -746
- package/dist/chunk-VCDWP5VL.js.map +0 -1
- package/dist/chunk-VDXOF4FW.js +0 -69
- package/dist/chunk-VDXOF4FW.js.map +0 -1
- package/dist/chunk-WHR5UW3F.js +0 -1988
- package/dist/chunk-WHR5UW3F.js.map +0 -1
- package/dist/chunk-Y75CFE77.js +0 -17
- package/dist/chunk-Y75CFE77.js.map +0 -1
- package/dist/chunk-Z7QCREWI.js +0 -3435
- package/dist/chunk-Z7QCREWI.js.map +0 -1
- package/dist/chunk-ZZGN2ATS.js +0 -1941
- package/dist/chunk-ZZGN2ATS.js.map +0 -1
- package/dist/components-gAbIz7hK.d.ts +0 -1284
- package/dist/definitions-BgmV_GhC.d.ts +0 -300
- package/dist/diagnostics-DIi3ina7.d.ts +0 -50
- package/dist/digest.d.ts +0 -8
- package/dist/game-CsZScpcn.d.ts +0 -763
- package/dist/hex-board-view-aKkblDp6.d.ts +0 -1228
- package/dist/index-CcT9Q7N7.d.ts +0 -193
- package/dist/index.d-DjzoK7zn.d.ts +0 -2101
- package/dist/package-set.d.ts +0 -13
- package/dist/package-set.js +0 -12
- package/dist/package-set.js.map +0 -1
- package/dist/player-state-Cqpyeql0.d.ts +0 -371
- package/dist/plugin-runtime-contract.d.ts +0 -17
- package/dist/plugin-runtime-contract.js +0 -92
- package/dist/plugin-runtime-contract.js.map +0 -1
- package/dist/primitive-props-BNHDkgd7.d.ts +0 -16
- package/dist/protocol-dYgafTYY.d.ts +0 -314
- package/dist/reducer/advanced.d.ts +0 -82
- package/dist/reducer/advanced.js +0 -51
- package/dist/reducer/advanced.js.map +0 -1
- package/dist/reducer-contract.d.ts +0 -11
- package/dist/reducer-contract.js +0 -16
- package/dist/reducer-contract.js.map +0 -1
- package/dist/reference-games/index.d.ts +0 -31
- package/dist/reference-games/index.js +0 -48
- package/dist/reference-games/index.js.map +0 -1
- package/dist/runtime/primitives.d.ts +0 -250
- package/dist/runtime/primitives.js +0 -189
- package/dist/runtime/primitives.js.map +0 -1
- package/dist/runtime/runtime-api.d.ts +0 -2
- package/dist/runtime/runtime-api.js +0 -1
- package/dist/runtime/runtime-api.js.map +0 -1
- package/dist/runtime/workspace-contract.d.ts +0 -392
- package/dist/runtime/workspace-contract.js +0 -28
- package/dist/runtime/workspace-contract.js.map +0 -1
- package/dist/runtime-RJ5orDJU.d.ts +0 -1699
- package/dist/runtime-api-Bz5pwNU_.d.ts +0 -296
- package/dist/runtime-json-CQ9QbLZ5.d.ts +0 -5
- package/dist/runtime.d.ts +0 -83
- package/dist/runtime.js +0 -242
- package/dist/runtime.js.map +0 -1
- package/dist/schema.d.ts +0 -379
- package/dist/stale-contract-artifact-error-XLaweZtF.d.ts +0 -18
- package/dist/testing-compiler.d.ts +0 -37
- package/dist/testing-compiler.js +0 -272
- package/dist/testing-compiler.js.map +0 -1
- package/dist/testing-runtime.d.ts +0 -119
- package/dist/testing-runtime.js +0 -212
- package/dist/testing-runtime.js.map +0 -1
- package/dist/types-DJj5MJkl.d.ts +0 -256
- package/dist/types-DR7DoB1x.d.ts +0 -28
- package/dist/types-JWCYHmu7.d.ts +0 -122
- package/dist/types.d.ts +0 -1958
- package/dist/types.js +0 -14
- package/dist/types.js.map +0 -1
- package/dist/ui/components.d.ts +0 -17
- package/dist/ui/components.js +0 -216
- package/dist/ui/components.js.map +0 -1
- package/dist/ui/defaults.d.ts +0 -19
- package/dist/ui/defaults.js +0 -104
- package/dist/ui/defaults.js.map +0 -1
- package/dist/ui/player-state.d.ts +0 -2
- package/dist/ui/player-state.js +0 -1
- package/dist/ui/player-state.js.map +0 -1
- package/dist/ui/plugin-styles.css +0 -2
- package/dist/ui-contract-GTUPkf8z.d.ts +0 -1168
- package/dist/ui.d.ts +0 -317
- package/dist/ui.js +0 -277
- package/dist/ui.js.map +0 -1
- package/dist/views-BpuWcOyN.d.ts +0 -1641
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/reducer/schema-helpers.ts","../src/reducer/inputs/defineInputs.ts","../src/reducer/inputs/many.ts","../src/reducer/inputs/formInput.ts","../src/reducer/inputs/boardInput.ts","../src/reducer/inputs/boardTarget.ts","../src/reducer/inputs/choiceTarget.ts","../src/reducer/inputs/promptInput.ts","../src/reducer/inputs/rngInput.ts","../src/reducer/manifest/compiler.ts","../src/reducer/manifest/schema.ts","../src/reducer/authoring/validation.ts","../src/reducer/authoring/interaction.ts","../src/reducer/authoring/phase.ts","../src/reducer/authoring/view-stage.ts","../src/reducer/authoring/contract-authoring.ts","../src/reducer/authoring/contract.ts","../src/reducer/authoring/game.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { SchemaLike } from \"./model\";\n\nexport type SparseMap<Key extends string, Value> = Partial<Record<Key, Value>>;\nexport type SparseCounts<Key extends string> = SparseMap<Key, number>;\n\ntype SparseSchemaMetadata = {\n keySchema: z.ZodType<string>;\n valueSchema: z.ZodTypeAny;\n};\n\nconst sparseSchemas = new WeakMap<object, SparseSchemaMetadata>();\n\nexport function sparseMap<\n KeySchema extends z.ZodType<string>,\n ValueSchema extends z.ZodTypeAny,\n>(\n keySchema: KeySchema,\n valueSchema: ValueSchema,\n): z.ZodType<SparseMap<z.infer<KeySchema>, z.infer<ValueSchema>>> {\n const schema = z.partialRecord(keySchema, valueSchema) as z.ZodType<\n SparseMap<z.infer<KeySchema>, z.infer<ValueSchema>>\n >;\n sparseSchemas.set(schema as unknown as object, {\n keySchema,\n valueSchema,\n });\n return schema;\n}\n\nexport function sparseCounts<KeySchema extends z.ZodType<string>>(\n keySchema: KeySchema,\n): z.ZodType<SparseCounts<z.infer<KeySchema>>> {\n return sparseMap(keySchema, z.number().int().min(0)) as z.ZodType<\n SparseCounts<z.infer<KeySchema>>\n >;\n}\n\nexport function getZodDef(schema: unknown): {\n type?: string;\n} & Record<string, unknown> {\n const anySchema = schema as {\n _zod?: { def?: Record<string, unknown> };\n def?: Record<string, unknown>;\n };\n const fromInternal = anySchema?._zod?.def;\n if (fromInternal && typeof fromInternal === \"object\") {\n return fromInternal;\n }\n const fromLegacy = anySchema?.def;\n if (fromLegacy && typeof fromLegacy === \"object\") {\n return fromLegacy;\n }\n return {};\n}\n\nexport function unwrapWrappers(schema: unknown): unknown {\n let current = schema;\n while (true) {\n const def = getZodDef(current);\n const innerType = def.innerType;\n if (\n (def.type === \"nullable\" ||\n def.type === \"optional\" ||\n def.type === \"default\" ||\n def.type === \"readonly\" ||\n def.type === \"catch\") &&\n innerType\n ) {\n current = innerType;\n continue;\n }\n return current;\n }\n}\n\nexport function isPlainZodString(schema: unknown): boolean {\n return getZodDef(schema).type === \"string\";\n}\n\nexport function isZodArray(schema: unknown): boolean {\n return getZodDef(schema).type === \"array\";\n}\n\nexport function isEnumKeyedRecordSchema(schema: unknown): boolean {\n const def = getZodDef(schema);\n const keyType = def.keyType;\n return (\n def.type === \"record\" &&\n typeof keyType === \"object\" &&\n keyType !== null &&\n getZodDef(keyType).type === \"enum\"\n );\n}\n\nexport function isSparseMapSchema(schema: unknown): boolean {\n const inner = unwrapWrappers(schema);\n return (\n typeof inner === \"object\" &&\n inner !== null &&\n sparseSchemas.has(inner as object)\n );\n}\n\nfunction getSparseSchemaMetadata(\n schema: unknown,\n): SparseSchemaMetadata | undefined {\n const inner = unwrapWrappers(schema);\n if (typeof inner !== \"object\" || inner === null) {\n return undefined;\n }\n return sparseSchemas.get(inner as object);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function getObjectShape(\n schema: unknown,\n): Record<string, unknown> | null {\n const def = getZodDef(schema);\n if (def.type !== \"object\") {\n return null;\n }\n const shape = def.shape;\n if (typeof shape === \"function\") {\n const resolved = shape();\n return resolved && typeof resolved === \"object\"\n ? (resolved as Record<string, unknown>)\n : null;\n }\n return shape && typeof shape === \"object\"\n ? (shape as Record<string, unknown>)\n : null;\n}\n\nfunction normalizeSchemaInput(schema: unknown, input: unknown): unknown {\n const inner = unwrapWrappers(schema);\n const sparse = getSparseSchemaMetadata(inner);\n if (sparse && isPlainObject(input)) {\n const filtered = Object.fromEntries(\n Object.entries(input)\n .filter(\n ([key, value]) =>\n typeof value !== \"undefined\" &&\n sparse.keySchema.safeParse(key).success,\n )\n .map(([key, value]) => [\n key,\n normalizeSchemaInput(sparse.valueSchema, value),\n ]),\n );\n return filtered;\n }\n\n const shape = getObjectShape(inner);\n if (shape && isPlainObject(input)) {\n return Object.fromEntries(\n Object.entries(input).map(([key, value]) => {\n const fieldSchema = shape[key];\n return [\n key,\n typeof fieldSchema === \"undefined\"\n ? value\n : normalizeSchemaInput(fieldSchema, value),\n ];\n }),\n );\n }\n\n const def = getZodDef(inner);\n if (def.type === \"array\" && Array.isArray(input) && def.element) {\n return input.map((value) => normalizeSchemaInput(def.element, value));\n }\n\n return input;\n}\n\nexport function normalizeCommandParams<Output>(\n schema: SchemaLike<Output>,\n input: unknown,\n): Output {\n return schema.parse(normalizeSchemaInput(schema, input));\n}\n","import type { z } from \"zod\";\nimport type { InputCollector } from \"../model/spec\";\nimport type { SchemaLike } from \"../model/table\";\n\nexport type InputFieldRef<\n Key extends string = string,\n Value = unknown,\n Collector extends InputCollector = InputCollector,\n> = {\n readonly key: Key;\n readonly collector: Collector;\n readonly __value?: Value;\n};\n\ntype RefValue<Ref> =\n Ref extends InputFieldRef<string, infer Value, InputCollector>\n ? Value\n : never;\n\ntype CollectorOfRef<Ref> =\n Ref extends InputFieldRef<string, unknown, infer Collector>\n ? Collector\n : never;\n\ntype CollectorValue<Collector> =\n Collector extends InputCollector<infer Schema> ? z.infer<Schema> : never;\n\nexport type DependencyValues<\n Dependencies extends readonly InputFieldRef<\n string,\n unknown,\n InputCollector\n >[],\n> = {\n readonly [Ref in Dependencies[number] as Ref[\"key\"]]: RefValue<Ref>;\n};\n\ntype DefinedInputRefs = Record<\n string,\n InputFieldRef<string, unknown, InputCollector>\n>;\n\nexport type DefinedInputs<Refs extends DefinedInputRefs> = {\n readonly [Key in keyof Refs]: CollectorOfRef<Refs[Key]>;\n};\n\nclass InputBuilder {\n add<\n const Key extends string,\n Collector extends InputCollector<SchemaLike<unknown>>,\n >(\n key: Key,\n collector: Collector,\n ): InputFieldRef<Key, CollectorValue<Collector>, Collector> {\n return { key, collector };\n }\n}\n\n/**\n * Define an interaction's inputs with typed field references. Field refs can be\n * passed to dependent input domains, and the returned collector map preserves\n * the original key/value types for interaction params.\n */\nexport function defineInputs<const Refs extends DefinedInputRefs>(\n define: (input: InputBuilder) => Refs,\n): DefinedInputs<Refs> {\n const refs = define(new InputBuilder());\n return Object.fromEntries(\n Object.entries(refs).map(([key, ref]) => [key, ref.collector]),\n ) as DefinedInputs<Refs>;\n}\n","import { z } from \"zod\";\nimport type {\n CollectorState,\n InputCollector,\n InputSelectionDescriptor,\n} from \"../model/spec\";\nimport type { SchemaLike } from \"../model/table\";\n\nexport type ManyOptions =\n | {\n count: number;\n distinct?: boolean;\n }\n | {\n min?: number;\n max?: number;\n distinct?: boolean;\n };\n\ntype NonRngCollector = InputCollector<SchemaLike<unknown>, CollectorState> & {\n readonly kind: Exclude<InputCollector[\"kind\"], \"rng\">;\n};\n\ntype CollectorSchema<Collector extends NonRngCollector> = [Collector] extends [\n InputCollector<infer Schema, CollectorState>,\n]\n ? Schema\n : never;\n\ntype CollectorStateOf<Collector extends NonRngCollector> = [Collector] extends [\n InputCollector<SchemaLike<unknown>, infer State>,\n]\n ? State\n : never;\n\ntype CollectorKindOf<Collector extends NonRngCollector> = [Collector] extends [\n {\n readonly kind: infer Kind extends Exclude<InputCollector[\"kind\"], \"rng\">;\n },\n]\n ? Kind\n : never;\n\nexport type ManyInputCollector<\n Schema extends SchemaLike<unknown> = SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n Kind extends Exclude<InputCollector[\"kind\"], \"rng\"> = Exclude<\n InputCollector[\"kind\"],\n \"rng\"\n >,\n> = InputCollector<z.ZodArray<Schema>, State, Kind> & {\n readonly selection: Extract<InputSelectionDescriptor, { mode: \"many\" }>;\n};\n\nfunction normalizeManyOptions(\n options: ManyOptions,\n): Extract<InputSelectionDescriptor, { mode: \"many\" }> {\n if (\"count\" in options) {\n assertNonNegativeInteger(options.count, \"many(...).count\");\n return {\n mode: \"many\",\n min: options.count,\n max: options.count,\n distinct: options.distinct,\n };\n }\n const min = options.min ?? 0;\n assertNonNegativeInteger(min, \"many(...).min\");\n if (options.max !== undefined) {\n assertNonNegativeInteger(options.max, \"many(...).max\");\n if (options.max < min) {\n throw new Error(\"many(...).max must be greater than or equal to min.\");\n }\n }\n return {\n mode: \"many\",\n min,\n max: options.max,\n distinct: options.distinct,\n };\n}\n\nfunction assertNonNegativeInteger(value: number, label: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer.`);\n }\n}\n\nexport function many<Collector extends NonRngCollector>(\n collector: Collector,\n options: ManyOptions,\n): ManyInputCollector<\n CollectorSchema<Collector>,\n CollectorStateOf<Collector>,\n CollectorKindOf<Collector>\n> &\n Pick<Collector, \"meta\"> {\n if ((collector as InputCollector).kind === \"rng\") {\n throw new Error(\"many(...) cannot wrap rngInput collectors.\");\n }\n const selection = normalizeManyOptions(options);\n const rest = { ...collector } as Omit<\n Collector,\n \"schema\" | \"selection\" | \"defaultValue\"\n > & {\n schema?: unknown;\n selection?: unknown;\n defaultValue?: unknown;\n };\n delete rest.schema;\n delete rest.selection;\n delete rest.defaultValue;\n return {\n ...rest,\n schema: z.array(\n collector.schema as CollectorSchema<Collector>,\n ) as z.ZodArray<CollectorSchema<Collector>>,\n selection,\n } as unknown as ManyInputCollector<\n CollectorSchema<Collector>,\n CollectorStateOf<Collector>,\n CollectorKindOf<Collector>\n > &\n Pick<Collector, \"meta\">;\n}\n","import { z } from \"zod\";\nimport type { SchemaLike } from \"../model/table\";\nimport type { ManifestIdSchema } from \"../model/manifest\";\nimport type {\n BoundedNumberDomainDescriptor,\n ChoiceDomainDescriptor,\n ChoiceListDomainDescriptor,\n CollectorState,\n InputCollector,\n ResourceMapDomainDescriptor,\n} from \"../model/spec\";\nimport type { PlayerIdOfState } from \"../model/extract\";\nimport type { TableQueriesOfState } from \"../model/queries\";\nimport type { DerivedResolver } from \"../derived\";\nimport { isPerPlayer } from \"../per-player\";\nimport type { DependencyValues, InputFieldRef } from \"./defineInputs\";\n\ntype DomainContext<\n State extends CollectorState,\n Values extends Readonly<Record<string, unknown>> = Record<string, never>,\n> = {\n state: State;\n playerId: PlayerIdOfState<State>;\n q: TableQueriesOfState<State>;\n derived: DerivedResolver;\n values: Values;\n};\n\ntype ManifestFormInputSchema =\n | ManifestIdSchema<unknown>\n | z.ZodOptional<ManifestIdSchema<unknown>>\n | z.ZodNullable<ManifestIdSchema<unknown>>;\n\ntype DomainNumber<State extends CollectorState> =\n | number\n | ((context: DomainContext<State>) => number);\n\ntype ResourceMapInputOptions<State extends CollectorState> = {\n resources: ReadonlyArray<{\n resourceId: string;\n label?: string;\n icon?: string;\n min?: DomainNumber<State>;\n max: DomainNumber<State>;\n }>;\n};\n\ntype ChoiceValue = string | null;\n\ntype FormInputDomainDescriptor =\n | ResourceMapDomainDescriptor\n | BoundedNumberDomainDescriptor\n | ChoiceDomainDescriptor\n | ChoiceListDomainDescriptor;\n\ntype DomainChoice<Value extends ChoiceValue> = {\n value: Value;\n label: string;\n icon?: string;\n badge?: string;\n description?: string;\n disabled?: boolean;\n disabledReason?: string;\n};\n\ntype DomainChoicePresentation = {\n badge?: string;\n description?: string;\n disabled?: boolean;\n disabledReason?: string;\n};\n\ntype ResourceMapChoiceDecorator<State extends CollectorState> = (\n context: DomainContext<State> & {\n resourceId: string;\n label: string;\n icon?: string;\n },\n) => DomainChoicePresentation | null | undefined;\n\ntype ResourceMapChoiceSource<State extends CollectorState> =\n | \"resourceMap\"\n | {\n source: \"resourceMap\";\n decorate?: ResourceMapChoiceDecorator<State>;\n };\n\ntype DomainChoices<Value extends ChoiceValue, State extends CollectorState> =\n | ReadonlyArray<DomainChoice<Value>>\n | ResourceMapChoiceSource<State>\n | ((context: DomainContext<State>) => ReadonlyArray<DomainChoice<Value>>);\n\ntype DependentDomainChoices<\n Value extends ChoiceValue,\n State extends CollectorState,\n Dependencies extends readonly InputFieldRef<string, unknown>[],\n> =\n | ReadonlyArray<DomainChoice<Value>>\n | ((\n context: DomainContext<State, DependencyValues<Dependencies>>,\n ) => ReadonlyArray<DomainChoice<Value>>);\n\ntype ChoiceListDefaultValue<\n Value extends string,\n State extends CollectorState,\n> =\n | Value[]\n | \"all\"\n | ((\n context: DomainContext<State> & {\n choices: ReadonlyArray<DomainChoice<Value>>;\n },\n ) => Value[]);\n\ntype ChoiceDefaultValue<\n Value extends ChoiceValue,\n State extends CollectorState,\n Values extends Readonly<Record<string, unknown>> = Record<string, never>,\n> =\n | Value\n | ((\n context: DomainContext<State, Values> & {\n choices: ReadonlyArray<DomainChoice<Value>>;\n },\n ) => Value);\n\ntype ChoiceDefaultResolver<\n Value extends ChoiceValue,\n State extends CollectorState,\n Values extends Readonly<Record<string, unknown>> = Record<string, never>,\n> = (\n context: DomainContext<State, Values> & {\n choices: ReadonlyArray<DomainChoice<Value>>;\n },\n) => Value | undefined;\n\nfunction isResourceMapChoiceSource<State extends CollectorState>(\n choices: DomainChoices<ChoiceValue, State>,\n): choices is ResourceMapChoiceSource<State> {\n return (\n choices === \"resourceMap\" ||\n (typeof choices === \"object\" &&\n choices !== null &&\n !Array.isArray(choices) &&\n \"source\" in choices &&\n choices.source === \"resourceMap\")\n );\n}\n\nfunction resolveDomainNumber<State extends CollectorState>(\n value: DomainNumber<State> | undefined,\n context: DomainContext<State>,\n fallback: number,\n): number {\n if (typeof value === \"function\") return value(context);\n return value ?? fallback;\n}\n\nfunction resolveDomainChoices<\n Value extends ChoiceValue,\n State extends CollectorState,\n>(\n choices: DomainChoices<Value, State>,\n context: DomainContext<State>,\n): Array<{\n value: ChoiceValue;\n label: string;\n icon?: string;\n badge?: string;\n description?: string;\n disabled?: boolean;\n disabledReason?: string;\n}> {\n if (isResourceMapChoiceSource(choices)) {\n return resolveResourceMapChoices(choices, context);\n }\n const resolved = typeof choices === \"function\" ? choices(context) : choices;\n return resolved.map((choice) => ({\n value: choice.value,\n label: choice.label,\n icon: choice.icon,\n badge: choice.badge,\n description: choice.description,\n disabled: choice.disabled,\n disabledReason: choice.disabledReason,\n }));\n}\n\nfunction resolveDependentDomainChoices<\n Value extends ChoiceValue,\n State extends CollectorState,\n Dependencies extends readonly InputFieldRef<string, unknown>[],\n>(\n choices: DependentDomainChoices<Value, State, Dependencies>,\n context: DomainContext<State, DependencyValues<Dependencies>>,\n): Array<{\n value: ChoiceValue;\n label: string;\n icon?: string;\n badge?: string;\n description?: string;\n disabled?: boolean;\n disabledReason?: string;\n}> {\n const resolved = typeof choices === \"function\" ? choices(context) : choices;\n return resolved.map((choice) => ({\n value: choice.value,\n label: choice.label,\n icon: choice.icon,\n badge: choice.badge,\n description: choice.description,\n disabled: choice.disabled,\n disabledReason: choice.disabledReason,\n }));\n}\n\nfunction choiceValuesInclude(\n choices: ReadonlyArray<{ value: ChoiceValue }>,\n value: ChoiceValue,\n): boolean {\n return choices.some((choice) => Object.is(choice.value, value));\n}\n\nfunction assertChoiceDefaultInChoices(\n inputName: string,\n choices: ReadonlyArray<{ value: ChoiceValue }>,\n defaultValue: ChoiceValue,\n): void {\n if (choiceValuesInclude(choices, defaultValue)) return;\n const printable = defaultValue === null ? \"null\" : `'${defaultValue}'`;\n throw new Error(\n `${inputName} defaultValue ${printable} must be one of its choices. ` +\n \"If null is a valid value, add an explicit { value: null, label: ... } choice.\",\n );\n}\n\nfunction choiceSchema<Value extends ChoiceValue>(\n choices: ReadonlyArray<DomainChoice<Value>>,\n): SchemaLike<Value> {\n const values = choices.map((choice) => choice.value);\n const stringValues = values.filter(\n (value): value is Exclude<Value, null> => value !== null,\n );\n const hasNull = values.some((value) => value === null);\n\n if (stringValues.length === 0) {\n return z.null() as unknown as SchemaLike<Value>;\n }\n\n const stringSchema = z.enum(\n stringValues as [Exclude<Value, null>, ...Array<Exclude<Value, null>>],\n );\n\n if (hasNull) {\n return z.union([stringSchema, z.null()]) as unknown as SchemaLike<Value>;\n }\n\n return stringSchema as unknown as SchemaLike<Value>;\n}\n\nfunction resolveResourceMapChoices<State extends CollectorState>(\n choices: ResourceMapChoiceSource<State>,\n context: DomainContext<State>,\n): Array<{\n value: string;\n label: string;\n badge?: string;\n description?: string;\n disabled?: boolean;\n disabledReason?: string;\n}> {\n const resources = context.state.table.resources as unknown;\n const firstResourceMap =\n isPerPlayer(resources) && resources.entries.length > 0\n ? resources.entries[0]?.[1]\n : resources;\n if (\n typeof firstResourceMap !== \"object\" ||\n firstResourceMap === null ||\n Array.isArray(firstResourceMap)\n ) {\n return [];\n }\n const decorate = choices === \"resourceMap\" ? undefined : choices.decorate;\n return Object.keys(firstResourceMap)\n .sort()\n .map((resourceId) => {\n const label = resourceId;\n const presentation = decorate?.({ ...context, resourceId, label });\n return {\n value: resourceId,\n label,\n badge: presentation?.badge,\n description: presentation?.description,\n disabled: presentation?.disabled,\n disabledReason: presentation?.disabledReason,\n };\n });\n}\n\nfunction createFormInput<\n Schema extends SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n>(\n schema: Schema,\n options?: { defaultValue?: z.infer<Schema> },\n): InputCollector<Schema, State, \"form\"> {\n return {\n kind: \"form\",\n schema,\n ...(options && \"defaultValue\" in options\n ? { defaultValue: options.defaultValue }\n : {}),\n };\n}\n\nfunction baseFormInput<\n Schema extends ManifestFormInputSchema & SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n>(schema: Schema): InputCollector<Schema, State, \"form\">;\nfunction baseFormInput<\n Schema extends ManifestFormInputSchema & SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n>(\n schema: Schema,\n options: { defaultValue: z.infer<Schema> },\n): InputCollector<Schema, State, \"form\"> & {\n readonly defaultValue: z.infer<Schema>;\n};\nfunction baseFormInput<\n Schema extends ManifestFormInputSchema & SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n>(\n schema: Schema,\n options?: { defaultValue?: z.infer<Schema> },\n): InputCollector<Schema, State, \"form\"> {\n return createFormInput(schema, options);\n}\n\nfunction resourceMapInput<State extends CollectorState = CollectorState>(\n options: ResourceMapInputOptions<State>,\n): InputCollector<z.ZodRecord<z.ZodString, z.ZodNumber>, State, \"form\">;\nfunction resourceMapInput<State extends CollectorState = CollectorState>(\n options: ResourceMapInputOptions<State> & {\n defaultValue: Record<string, number>;\n },\n): InputCollector<z.ZodRecord<z.ZodString, z.ZodNumber>, State, \"form\"> & {\n readonly defaultValue: Record<string, number>;\n};\nfunction resourceMapInput<State extends CollectorState = CollectorState>(\n options: ResourceMapInputOptions<State> & {\n defaultValue?: Record<string, number>;\n },\n): InputCollector<z.ZodRecord<z.ZodString, z.ZodNumber>, State, \"form\"> {\n return {\n kind: \"form\",\n schema: z.record(z.string(), z.number().int().nonnegative()),\n ...(\"defaultValue\" in options\n ? { defaultValue: options.defaultValue }\n : {}),\n domain: (state, playerId, q, derived): FormInputDomainDescriptor => {\n const context = {\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n values: {},\n };\n return {\n type: \"resourceMap\",\n resources: options.resources.map((resource) => ({\n resourceId: resource.resourceId,\n label: resource.label,\n icon: resource.icon,\n min: resolveDomainNumber(resource.min, context, 0),\n max: resolveDomainNumber(resource.max, context, 0),\n })),\n };\n },\n };\n}\n\nfunction numberInput<State extends CollectorState = CollectorState>(options: {\n min: DomainNumber<State>;\n max: DomainNumber<State>;\n step?: DomainNumber<State>;\n}): InputCollector<z.ZodNumber, State, \"form\">;\nfunction numberInput<State extends CollectorState = CollectorState>(options: {\n min: DomainNumber<State>;\n max: DomainNumber<State>;\n step?: DomainNumber<State>;\n defaultValue: number;\n}): InputCollector<z.ZodNumber, State, \"form\"> & {\n readonly defaultValue: number;\n};\nfunction numberInput<State extends CollectorState = CollectorState>(options: {\n min: DomainNumber<State>;\n max: DomainNumber<State>;\n step?: DomainNumber<State>;\n defaultValue?: number;\n}): InputCollector<z.ZodNumber, State, \"form\"> {\n return {\n kind: \"form\",\n schema: z.number(),\n ...(\"defaultValue\" in options\n ? { defaultValue: options.defaultValue }\n : {}),\n domain: (state, playerId, q, derived): FormInputDomainDescriptor => {\n const context = {\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n values: {},\n };\n return {\n type: \"boundedNumber\",\n min: resolveDomainNumber(options.min, context, 0),\n max: resolveDomainNumber(options.max, context, 0),\n step:\n options.step === undefined\n ? undefined\n : resolveDomainNumber(options.step, context, 1),\n };\n },\n };\n}\n\nfunction choiceInput<\n const Dependencies extends readonly InputFieldRef<string, unknown>[],\n Value extends ChoiceValue = string,\n State extends CollectorState = CollectorState,\n>(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: Value;\n}): InputCollector<SchemaLike<Value>, State, \"form\"> & {\n readonly defaultValue: Value;\n};\nfunction choiceInput<\n const Dependencies extends readonly InputFieldRef<string, unknown>[],\n Value extends ChoiceValue = string,\n State extends CollectorState = CollectorState,\n>(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: ChoiceDefaultResolver<\n Value,\n State,\n DependencyValues<Dependencies>\n >;\n}): InputCollector<SchemaLike<Value>, State, \"form\">;\nfunction choiceInput<\n Value extends ChoiceValue,\n State extends CollectorState = CollectorState,\n>(options: {\n choices: DomainChoices<Value, State>;\n defaultValue: Value;\n}): InputCollector<SchemaLike<Value>, State, \"form\"> & {\n readonly defaultValue: Value;\n};\nfunction choiceInput<\n Value extends ChoiceValue,\n State extends CollectorState = CollectorState,\n>(options: {\n choices: DomainChoices<Value, State>;\n defaultValue: ChoiceDefaultResolver<Value, State>;\n}): InputCollector<SchemaLike<Value>, State, \"form\">;\nfunction choiceInput<\n Value extends ChoiceValue,\n State extends CollectorState = CollectorState,\n const Dependencies extends readonly InputFieldRef<string, unknown>[] =\n readonly InputFieldRef<string, unknown>[],\n>(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: Value;\n}): InputCollector<SchemaLike<Value>, State, \"form\"> & {\n readonly defaultValue: Value;\n};\nfunction choiceInput<\n Value extends ChoiceValue,\n State extends CollectorState = CollectorState,\n const Dependencies extends readonly InputFieldRef<string, unknown>[] =\n readonly InputFieldRef<string, unknown>[],\n>(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: ChoiceDefaultResolver<\n Value,\n State,\n DependencyValues<Dependencies>\n >;\n}): InputCollector<SchemaLike<Value>, State, \"form\">;\nfunction choiceInput<\n Value extends ChoiceValue,\n State extends CollectorState = CollectorState,\n>(options: {\n choices:\n | DomainChoices<Value, State>\n | DependentDomainChoices<\n Value,\n State,\n readonly InputFieldRef<string, unknown>[]\n >;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n defaultValue: ChoiceDefaultValue<\n Value,\n State,\n Readonly<Record<string, unknown>>\n >;\n}): InputCollector<SchemaLike<Value>, State, \"form\"> {\n const dependsOn = options.dependsOn?.map((dependency) => dependency.key);\n if (Array.isArray(options.choices) && options.choices.length === 0) {\n throw new Error(\"formInput.choice requires at least one choice.\");\n }\n const staticChoices = Array.isArray(options.choices) ? options.choices : null;\n const hasStaticDefault = typeof options.defaultValue !== \"function\";\n const staticDefault = options.defaultValue as ChoiceValue;\n if (staticChoices && hasStaticDefault) {\n assertChoiceDefaultInChoices(\n \"formInput.choice\",\n staticChoices,\n staticDefault,\n );\n }\n const schema = staticChoices\n ? (choiceSchema(staticChoices) as SchemaLike<Value>)\n : (z.string().nullable() as unknown as SchemaLike<Value>);\n const dynamicDefault =\n typeof options.defaultValue === \"function\"\n ? options.defaultValue\n : undefined;\n return {\n kind: \"form\",\n schema,\n ...(hasStaticDefault ? { defaultValue: staticDefault as Value } : {}),\n ...(dependsOn ? { dependsOn } : {}),\n domain: (\n state,\n playerId,\n q,\n derived,\n values,\n ): FormInputDomainDescriptor => {\n const context = {\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n };\n const choices = dependsOn\n ? resolveDependentDomainChoices(\n options.choices as DependentDomainChoices<\n Value,\n State,\n readonly InputFieldRef<string, unknown>[]\n >,\n {\n ...context,\n values: (values ?? {}) as DependencyValues<\n readonly InputFieldRef<string, unknown>[]\n >,\n },\n )\n : resolveDomainChoices(options.choices as DomainChoices<Value, State>, {\n ...context,\n values: {},\n });\n if (hasStaticDefault) {\n assertChoiceDefaultInChoices(\n \"formInput.choice\",\n choices,\n staticDefault,\n );\n }\n return {\n type: \"choice\",\n choices,\n };\n },\n ...(dynamicDefault\n ? {\n resolveDefaultValue: (state, playerId, q, derived, domain) => {\n const choices =\n domain.type === \"choice\"\n ? domain.choices.map((choice) => ({\n value: choice.value as Value,\n label: choice.label,\n icon: choice.icon,\n badge: choice.badge,\n description: choice.description,\n disabled: choice.disabled,\n disabledReason: choice.disabledReason,\n }))\n : [];\n const resolved = dynamicDefault({\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n values: {},\n choices,\n });\n if (resolved === undefined) return undefined;\n assertChoiceDefaultInChoices(\"formInput.choice\", choices, resolved);\n return resolved;\n },\n }\n : {}),\n };\n}\n\nfunction choiceListInput<\n Value extends string,\n State extends CollectorState = CollectorState,\n>(options: {\n choices: DomainChoices<Value, State>;\n min?: DomainNumber<State>;\n max?: DomainNumber<State>;\n defaultValue: Value[];\n}): InputCollector<SchemaLike<Value[]>, State, \"form\"> & {\n readonly defaultValue: Value[];\n};\nfunction choiceListInput<\n Value extends string,\n State extends CollectorState = CollectorState,\n>(options: {\n choices: DomainChoices<Value, State>;\n min?: DomainNumber<State>;\n max?: DomainNumber<State>;\n defaultValue?: ChoiceListDefaultValue<Value, State>;\n}): InputCollector<SchemaLike<Value[]>, State, \"form\">;\nfunction choiceListInput<\n Value extends string,\n State extends CollectorState = CollectorState,\n>(options: {\n choices: DomainChoices<Value, State>;\n min?: DomainNumber<State>;\n max?: DomainNumber<State>;\n defaultValue?: ChoiceListDefaultValue<Value, State>;\n}): InputCollector<SchemaLike<Value[]>, State, \"form\"> {\n if (Array.isArray(options.choices) && options.choices.length === 0) {\n throw new Error(\"formInput.choiceList requires at least one choice.\");\n }\n const staticDefaultValue = Array.isArray(options.defaultValue)\n ? options.defaultValue\n : undefined;\n const dynamicDefaultValue =\n options.defaultValue === \"all\" || typeof options.defaultValue === \"function\"\n ? options.defaultValue\n : undefined;\n return {\n kind: \"form\",\n schema: z.array(z.string()) as unknown as SchemaLike<Value[]>,\n ...(staticDefaultValue !== undefined\n ? { defaultValue: staticDefaultValue }\n : {}),\n domain: (state, playerId, q, derived): FormInputDomainDescriptor => {\n const context = {\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n values: {},\n };\n const choices = resolveDomainChoices(options.choices, context).map(\n (choice) => ({\n ...choice,\n value: choice.value as string,\n }),\n );\n return {\n type: \"choiceList\",\n choices,\n min: resolveDomainNumber(options.min, context, 0),\n max: resolveDomainNumber(options.max, context, choices.length),\n };\n },\n ...(dynamicDefaultValue\n ? {\n resolveDefaultValue: (state, playerId, q, derived, domain) => {\n const choices =\n domain.type === \"choiceList\"\n ? domain.choices.map((choice) => ({\n value: choice.value as Value,\n label: choice.label,\n icon: choice.icon,\n badge: choice.badge,\n description: choice.description,\n disabled: choice.disabled,\n disabledReason: choice.disabledReason,\n }))\n : [];\n if (dynamicDefaultValue === \"all\") {\n return choices.map((choice) => choice.value);\n }\n return dynamicDefaultValue({\n state: state as State,\n playerId: playerId as PlayerIdOfState<State>,\n q: q as TableQueriesOfState<State>,\n derived,\n values: {},\n choices,\n });\n },\n }\n : {}),\n };\n}\n\ntype FormInputForState<State extends CollectorState> = {\n <Schema extends ManifestFormInputSchema & SchemaLike<unknown>>(\n schema: Schema,\n ): InputCollector<Schema, State, \"form\">;\n <Schema extends ManifestFormInputSchema & SchemaLike<unknown>>(\n schema: Schema,\n options: { defaultValue: z.infer<Schema> },\n ): InputCollector<Schema, State, \"form\"> & {\n readonly defaultValue: z.infer<Schema>;\n };\n resourceMap(\n options: ResourceMapInputOptions<State>,\n ): InputCollector<z.ZodRecord<z.ZodString, z.ZodNumber>, State, \"form\">;\n resourceMap(\n options: ResourceMapInputOptions<State> & {\n defaultValue: Record<string, number>;\n },\n ): InputCollector<z.ZodRecord<z.ZodString, z.ZodNumber>, State, \"form\"> & {\n readonly defaultValue: Record<string, number>;\n };\n resourceChoices(options?: {\n decorate?: ResourceMapChoiceDecorator<State>;\n }): ResourceMapChoiceSource<State>;\n number(\n options: Parameters<typeof numberInput<State>>[0],\n ): ReturnType<typeof numberInput<State>>;\n choice<\n Value extends ChoiceValue,\n const Dependencies extends readonly InputFieldRef<string, unknown>[],\n >(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: Value;\n }): InputCollector<SchemaLike<Value>, State, \"form\"> & {\n readonly defaultValue: Value;\n };\n choice<\n Value extends ChoiceValue,\n const Dependencies extends readonly InputFieldRef<string, unknown>[],\n >(options: {\n dependsOn: Dependencies;\n choices: DependentDomainChoices<Value, State, Dependencies>;\n defaultValue: ChoiceDefaultResolver<\n Value,\n State,\n DependencyValues<Dependencies>\n >;\n }): InputCollector<SchemaLike<Value>, State, \"form\">;\n choice<Value extends ChoiceValue>(options: {\n choices: DomainChoices<Value, State>;\n defaultValue: Value;\n }): InputCollector<SchemaLike<Value>, State, \"form\"> & {\n readonly defaultValue: Value;\n };\n choice<Value extends ChoiceValue>(options: {\n choices: DomainChoices<Value, State>;\n defaultValue: ChoiceDefaultResolver<Value, State>;\n }): InputCollector<SchemaLike<Value>, State, \"form\">;\n choiceList<Value extends string>(options: {\n choices: DomainChoices<Value, State>;\n min?: DomainNumber<State>;\n max?: DomainNumber<State>;\n defaultValue: Value[];\n }): InputCollector<SchemaLike<Value[]>, State, \"form\"> & {\n readonly defaultValue: Value[];\n };\n choiceList<Value extends string>(options: {\n choices: DomainChoices<Value, State>;\n min?: DomainNumber<State>;\n max?: DomainNumber<State>;\n defaultValue?: ChoiceListDefaultValue<Value, State>;\n }): InputCollector<SchemaLike<Value[]>, State, \"form\">;\n};\n\nfunction formInputForState<\n State extends CollectorState,\n>(): FormInputForState<State> {\n return Object.assign(\n ((\n schema: ManifestFormInputSchema & SchemaLike<unknown>,\n options?: object,\n ) => baseFormInput(schema, options as never)) as FormInputForState<State>,\n {\n resourceMap: (\n options: ResourceMapInputOptions<State> & {\n defaultValue?: Record<string, number>;\n },\n ) => resourceMapInput<State>(options),\n resourceChoices: (options?: {\n decorate?: ResourceMapChoiceDecorator<State>;\n }) => formInput.resourceChoices<State>(options),\n number: (options: Parameters<typeof numberInput<State>>[0]) =>\n numberInput<State>(options),\n choice: (options: never) => choiceInput(options),\n choiceList: (options: never) => choiceListInput(options),\n },\n );\n}\n\n/**\n * Manifest-backed id input. Free-form Zod schemas are intentionally explicit:\n * if the runtime cannot disclose valid values or numeric bounds through a\n * manifest id or domain helper, use a custom interaction surface with an\n * explicit `paramsSchema` instead of the default form renderer.\n */\nexport const formInput = Object.assign(baseFormInput, {\n resourceMap: resourceMapInput,\n resourceChoices: <State extends CollectorState = CollectorState>(options?: {\n decorate?: ResourceMapChoiceDecorator<State>;\n }): ResourceMapChoiceSource<State> => ({\n source: \"resourceMap\",\n ...options,\n }),\n number: numberInput,\n choice: choiceInput,\n choiceList: choiceListInput,\n forState: formInputForState,\n});\n","import { z } from \"zod\";\nimport type {\n BoardTargetDomainDescriptor,\n CollectorState,\n InputCollector,\n TargetKind,\n} from \"../model/spec\";\nimport {\n markManifestScopedSchema,\n type ManifestIdSchema,\n} from \"../model/manifest\";\nimport type { BoardTargetRule, PlayerBoardSpaceTarget } from \"./boardTarget\";\nimport type { InputFieldRef } from \"./defineInputs\";\n\nexport type PlayerSpaceInputSchema<\n BoardId extends string,\n SpaceId extends string,\n PlayerId extends string,\n> = z.ZodObject<{\n boardId: z.ZodLiteral<BoardId>;\n playerId: ManifestIdSchema<PlayerId, \"playerId\">;\n spaceId: z.ZodType<SpaceId>;\n}>;\n\n/**\n * `boardInput.*` helpers produce collectors that accept a board-element id\n * (vertex / edge / space / tile) scoped to one built `boardTarget` rule.\n *\n * Id typing:\n * The `Id` type parameter is the branded id for the board you target,\n * e.g. `HexVertexIdOfTable<Table, \"main\">` or\n * `SquareSpaceIdOfTable<Table, \"board\">`. Once tightened,\n * `ParamsOf<Collectors>` downstream typing reflects the branded id too.\n *\n * Eligibility:\n * Pass a built `boardTarget.*(...).where(...).build()` rule. The same rule\n * feeds server-authoritative eligible-target projection, submit validation,\n * and tests through its `bind({ state, playerId, q })` helper.\n *\n * Runtime vs. compile time:\n * At runtime the submitted value is a string. Branding is purely a\n * compile-time discipline.\n */\nfunction makeBoardCollector<\n Kind extends \"board-vertex\" | \"board-edge\" | \"board-tile\" | \"board-space\",\n>(kind: Kind) {\n return function collector<\n State extends CollectorState = CollectorState,\n Id extends string = string,\n >(options: {\n target: BoardTargetRule<State, Id>;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n }): InputCollector<z.ZodType<Id>, State, Kind> {\n const target = options.target;\n const dependsOn = options.dependsOn?.map((dependency) => dependency.key);\n return {\n kind,\n schema: z.string() as unknown as z.ZodType<Id>,\n eligibleTargets: ((state, playerId, q, values) =>\n target.eligible({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n })) as\n | ((\n state: CollectorState,\n playerId: string,\n q: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) => ReadonlyArray<unknown>)\n | undefined,\n validateTarget: ((state, playerId, q, targetId, values) =>\n target.validate(\n {\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n },\n targetId as Id,\n )) as\n | ((\n state: CollectorState,\n playerId: string,\n q: unknown,\n targetId: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) => ReturnType<BoardTargetRule<CollectorState, string>[\"validate\"]>)\n | undefined,\n ...(dependsOn ? { dependsOn } : {}),\n domain: (\n state: CollectorState,\n playerId: string,\n q: unknown,\n _derived: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) =>\n ({\n type: \"boardTarget\" as const,\n projection: \"resolved\" as const,\n targetKind: target.targetKind as Exclude<TargetKind, \"card\">,\n boardId: target.boardId,\n valueKind: target.valueKind,\n eligibleTargets: target\n .eligible({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n })\n .map(String),\n }) satisfies BoardTargetDomainDescriptor,\n meta: {\n targetKind: target.targetKind,\n boardId: target.boardId,\n valueKind: target.valueKind,\n },\n } as unknown as InputCollector<z.ZodType<Id>, State, Kind>;\n };\n}\n\nexport const vertexInput = makeBoardCollector(\"board-vertex\");\nexport const edgeInput = makeBoardCollector(\"board-edge\");\nexport const tileInput = makeBoardCollector(\"board-tile\");\nexport const spaceInput = makeBoardCollector(\"board-space\");\n\nexport function playerSpaceInput<\n State extends CollectorState = CollectorState,\n BoardId extends string = string,\n SpaceId extends string = string,\n PlayerId extends string = string,\n>(options: {\n target: BoardTargetRule<\n State,\n PlayerBoardSpaceTarget<BoardId, SpaceId, PlayerId>\n >;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n}): InputCollector<\n PlayerSpaceInputSchema<BoardId, SpaceId, PlayerId>,\n State,\n \"board-space\"\n> {\n const target = options.target;\n const dependsOn = options.dependsOn?.map((dependency) => dependency.key);\n const playerIdSchema = markManifestScopedSchema(\n z.string(),\n \"playerId\",\n ) as unknown as ManifestIdSchema<PlayerId, \"playerId\">;\n return {\n kind: \"board-space\",\n schema: z.object({\n boardId: z.literal(target.boardId),\n playerId: playerIdSchema,\n spaceId: z.string() as unknown as z.ZodType<SpaceId>,\n }) as PlayerSpaceInputSchema<BoardId, SpaceId, PlayerId>,\n eligibleTargets: ((state, playerId, q, values) =>\n target.eligible({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n })) as\n | ((\n state: CollectorState,\n playerId: string,\n q: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) => ReadonlyArray<unknown>)\n | undefined,\n validateTarget: ((state, playerId, q, targetValue, values) =>\n target.validate(\n {\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n },\n targetValue as PlayerBoardSpaceTarget<BoardId, SpaceId, PlayerId>,\n )) as\n | ((\n state: CollectorState,\n playerId: string,\n q: unknown,\n targetId: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) => ReturnType<\n BoardTargetRule<\n CollectorState,\n PlayerBoardSpaceTarget<string, string, string>\n >[\"validate\"]\n >)\n | undefined,\n ...(dependsOn ? { dependsOn } : {}),\n domain: (\n state: CollectorState,\n playerId: string,\n q: unknown,\n _derived: unknown,\n values?: Readonly<Record<string, unknown>>,\n ) =>\n ({\n type: \"boardTarget\" as const,\n projection: \"resolved\" as const,\n targetKind: target.targetKind as Exclude<TargetKind, \"card\">,\n boardId: target.boardId,\n valueKind: target.valueKind,\n eligibleTargets: target\n .eligible({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n values,\n })\n .map((candidate) => candidate.spaceId),\n }) satisfies BoardTargetDomainDescriptor,\n meta: {\n targetKind: target.targetKind,\n boardId: target.boardId,\n valueKind: target.valueKind,\n },\n };\n}\n\nexport const boardInput = {\n vertex: vertexInput,\n edge: edgeInput,\n tile: tileInput,\n space: spaceInput,\n playerSpace: playerSpaceInput,\n};\n","import type { CollectorState, TargetKind } from \"../model/spec\";\nimport type { PlayerIdOfState } from \"../model/extract\";\nimport type { TableQueriesOfState } from \"../model/queries\";\nimport {\n createTargetRule,\n createTargetRuleBuilder,\n type TargetPredicate,\n type TargetRule,\n type TargetRuleBuilder,\n} from \"./targetRule\";\n\nexport type BoardTargetPredicate<\n State extends CollectorState,\n Target,\n> = TargetPredicate<State, Target>;\n\nexport type BoardTargetRule<State extends CollectorState, Target> = TargetRule<\n State,\n Target\n> & {\n readonly boardId: string;\n readonly targetKind: TargetKind;\n readonly valueKind: \"board-id\" | \"player-board-space\";\n};\n\nexport type BoardTargetBuilder<\n State extends CollectorState,\n Target,\n> = TargetRuleBuilder<State, Target, BoardTargetRule<State, Target>>;\n\nexport type PlayerBoardSpaceTarget<\n BoardId extends string,\n SpaceId extends string,\n PlayerId extends string,\n> = {\n readonly boardId: BoardId;\n readonly playerId: PlayerId;\n readonly spaceId: SpaceId;\n};\n\nfunction candidateIdsForKind<State extends CollectorState, Id extends string>(\n q: TableQueriesOfState<State>,\n boardId: string,\n targetKind: TargetKind,\n): readonly Id[] {\n if (targetKind === \"edge\") {\n return idsFromCollection<Id>(q.board.tiled(boardId as never).edges);\n }\n if (targetKind === \"vertex\") {\n return idsFromCollection<Id>(q.board.tiled(boardId as never).vertices);\n }\n return idsFromCollection<Id>(q.board.get(boardId as never)?.spaces);\n}\n\nfunction idsFromCollection<Id extends string>(\n collection: unknown,\n): readonly Id[] {\n if (!collection) return [];\n const values = Array.isArray(collection)\n ? collection\n : Object.values(collection as Record<string, unknown>);\n return values.flatMap((value) => {\n if (typeof value === \"string\") return [value as Id];\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"id\" in value &&\n typeof (value as { id?: unknown }).id === \"string\"\n ) {\n return [(value as { id: string }).id as Id];\n }\n return [];\n });\n}\n\nfunction createBoardTargetBuilder<\n State extends CollectorState,\n Id extends string,\n>(targetKind: TargetKind, boardId: string): BoardTargetBuilder<State, Id> {\n return createTargetRuleBuilder<State, Id, BoardTargetRule<State, Id>>(\n (predicates) => ({\n ...createTargetRule(\n ({ q }) => candidateIdsForKind<State, Id>(q, boardId, targetKind),\n predicates,\n {\n missingCandidateIssue: {\n errorCode: \"BOARD_TARGET_NOT_ELIGIBLE\",\n message: \"Board target is not eligible.\",\n },\n },\n ),\n boardId,\n targetKind,\n valueKind: \"board-id\",\n }),\n );\n}\n\nfunction createPlayerSpaceTargetBuilder<\n State extends CollectorState,\n BoardId extends string,\n SpaceId extends string,\n>(\n boardId: BoardId,\n): BoardTargetBuilder<\n State,\n PlayerBoardSpaceTarget<BoardId, SpaceId, PlayerIdOfState<State>>\n> {\n type Target = PlayerBoardSpaceTarget<\n BoardId,\n SpaceId,\n PlayerIdOfState<State>\n >;\n return createTargetRuleBuilder<State, Target, BoardTargetRule<State, Target>>(\n (predicates) => ({\n ...createTargetRule(\n ({ state, q }) => {\n const spacesForPlayer = (playerId: string): readonly SpaceId[] =>\n candidateIdsForKind<State, SpaceId>(\n q,\n `${boardId}:${playerId}`,\n \"space\",\n );\n return state.table.playerOrder.flatMap((playerId) =>\n spacesForPlayer(playerId).map((spaceId) => ({\n boardId,\n playerId: playerId as PlayerIdOfState<State>,\n spaceId,\n })),\n );\n },\n predicates,\n {\n missingCandidateIssue: {\n errorCode: \"BOARD_TARGET_NOT_ELIGIBLE\",\n message: \"Board target is not eligible.\",\n },\n equals: (left, right) =>\n isPlayerBoardSpaceTarget(left) &&\n isPlayerBoardSpaceTarget(right) &&\n left.boardId === right.boardId &&\n left.playerId === right.playerId &&\n left.spaceId === right.spaceId,\n },\n ),\n boardId,\n targetKind: \"space\",\n valueKind: \"player-board-space\",\n }),\n );\n}\n\nfunction isPlayerBoardSpaceTarget(\n value: unknown,\n): value is PlayerBoardSpaceTarget<string, string, string> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"boardId\" in value &&\n \"playerId\" in value &&\n \"spaceId\" in value\n );\n}\n\nfunction makeBoardTargetFactory(targetKind: TargetKind) {\n return function target<State extends CollectorState, Id extends string>(\n boardId: string,\n ): BoardTargetBuilder<State, Id> {\n return createBoardTargetBuilder<State, Id>(targetKind, boardId);\n };\n}\n\nexport const boardTarget = {\n edge: makeBoardTargetFactory(\"edge\"),\n vertex: makeBoardTargetFactory(\"vertex\"),\n space: makeBoardTargetFactory(\"space\"),\n tile: makeBoardTargetFactory(\"tile\"),\n playerSpace<\n State extends CollectorState,\n BoardId extends string,\n SpaceId extends string,\n >(\n boardId: BoardId,\n ): BoardTargetBuilder<\n State,\n PlayerBoardSpaceTarget<BoardId, SpaceId, PlayerIdOfState<State>>\n > {\n return createPlayerSpaceTargetBuilder<State, BoardId, SpaceId>(boardId);\n },\n};\n","import type { CollectorState } from \"../model/spec\";\nimport type { PlayerIdOfState } from \"../model/extract\";\nimport type { TableQueriesOfState } from \"../model/queries\";\nimport {\n createTargetRule,\n createTargetRuleBuilder,\n type TargetContext,\n type TargetPredicate,\n type TargetRule,\n type TargetRuleBuilder,\n} from \"./targetRule\";\n\nexport type ChoiceTargetOption<Id extends string> = {\n id: Id;\n label?: string;\n};\n\nexport type ChoiceOptionsFactory<\n State extends CollectorState,\n Id extends string,\n> = (\n state: State,\n playerId: PlayerIdOfState<State>,\n q: TableQueriesOfState<State>,\n) => ReadonlyArray<ChoiceTargetOption<Id>>;\n\nexport type ChoiceTargetPredicate<\n State extends CollectorState,\n Id extends string,\n> = TargetPredicate<State, Id>;\n\nexport type ChoiceTargetRule<\n State extends CollectorState,\n Id extends string,\n> = TargetRule<State, Id> & {\n readonly targetKind: \"choice\";\n readonly options: (\n ctx: TargetContext<State>,\n ) => ReadonlyArray<ChoiceTargetOption<Id>>;\n readonly eligibleOptions: (\n ctx: TargetContext<State>,\n ) => ReadonlyArray<ChoiceTargetOption<Id>>;\n};\n\nexport type ChoiceTargetBuilder<\n State extends CollectorState,\n Id extends string,\n> = TargetRuleBuilder<State, Id, ChoiceTargetRule<State, Id>>;\n\nfunction normalizeOptions<State extends CollectorState, Id extends string>(\n options:\n | ReadonlyArray<ChoiceTargetOption<Id>>\n | ChoiceOptionsFactory<State, Id>,\n): ChoiceOptionsFactory<State, Id> {\n if (typeof options === \"function\") return options;\n return () => options;\n}\n\nfunction createChoiceTargetBuilder<\n State extends CollectorState,\n Id extends string,\n>(\n options:\n | ReadonlyArray<ChoiceTargetOption<Id>>\n | ChoiceOptionsFactory<State, Id>,\n): ChoiceTargetBuilder<State, Id> {\n const optionsFactory = normalizeOptions(options);\n return createTargetRuleBuilder<State, Id, ChoiceTargetRule<State, Id>>(\n (predicates) => {\n const baseRule = createTargetRule(\n (ctx) =>\n optionsFactory(ctx.state, ctx.playerId, ctx.q).map(\n (option) => option.id,\n ),\n predicates,\n {\n missingCandidateIssue: {\n errorCode: \"CHOICE_TARGET_NOT_ELIGIBLE\",\n message: \"Choice target is not eligible.\",\n },\n },\n );\n return {\n ...baseRule,\n targetKind: \"choice\",\n options: (ctx) => optionsFactory(ctx.state, ctx.playerId, ctx.q),\n eligibleOptions: (ctx) =>\n optionsFactory(ctx.state, ctx.playerId, ctx.q).filter((option) =>\n baseRule.isEligible(ctx, option.id),\n ),\n };\n },\n );\n}\n\nexport const choiceTarget = {\n options<State extends CollectorState, Id extends string>(\n options:\n | ReadonlyArray<ChoiceTargetOption<Id>>\n | ChoiceOptionsFactory<State, Id>,\n ): ChoiceTargetBuilder<State, Id> {\n return createChoiceTargetBuilder(options);\n },\n};\n","import type { SchemaLike } from \"../model/table\";\nimport type { CollectorState, InputCollector } from \"../model/spec\";\nimport type { ChoiceTargetRule } from \"./choiceTarget\";\nimport type { z } from \"zod\";\n\ntype SchemaStringValue<Schema extends SchemaLike<unknown>> = Extract<\n Schema extends z.ZodType<infer V> ? V : never,\n string\n>;\n\n/**\n * `promptInput` marks an interaction as a prompt delivered to a player's\n * inbox. The submitted value is validated by the supplied Zod schema.\n *\n * Static or free-form prompts need only `schema`. Finite dynamic choices use\n * a built `choiceTarget.options(...).build()` rule so projected options and\n * submit validation share one source of truth.\n */\nexport function promptInput<\n Schema extends SchemaLike<unknown>,\n State extends CollectorState = CollectorState,\n>(options: {\n schema: Schema;\n target?: ChoiceTargetRule<State, SchemaStringValue<Schema>>;\n}): InputCollector<Schema, State, \"prompt\"> {\n const target = options.target;\n return {\n kind: \"prompt\",\n schema: options.schema,\n eligibleTargets: target\n ? (((state, playerId, q) =>\n target.eligible({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n })) as\n | ((\n state: CollectorState,\n playerId: string,\n q: unknown,\n ) => ReadonlyArray<unknown>)\n | undefined)\n : undefined,\n validateTarget: target\n ? (((state, playerId, q, targetId) =>\n target.validate(\n {\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n },\n targetId as SchemaStringValue<Schema>,\n )) as InputCollector<Schema, State, \"prompt\">[\"validateTarget\"])\n : undefined,\n meta: target\n ? {\n options: (state: unknown, playerId: unknown, q: unknown) =>\n target.options({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n }),\n eligibleOptions: (state: unknown, playerId: unknown, q: unknown) =>\n target.eligibleOptions({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n }),\n }\n : undefined,\n domain: (state, playerId, q) => ({\n type: \"choice\" as const,\n choices: target\n ? target\n .options({\n state: state as State,\n playerId: playerId as never,\n q: q as never,\n })\n .map((option) => ({\n value: String(option.id),\n label: option.label ?? String(option.id),\n }))\n : [],\n }),\n };\n}\n","import { z } from \"zod\";\nimport type { CollectorState, InputCollector } from \"../model/spec\";\n\n/**\n * `rngInput.*` helpers produce collectors whose value is *sampled by the\n * engine on submit* rather than supplied by the client. The schema pins\n * the exact output shape so `ParamsOf<Collectors>` sees precisely typed\n * results.\n *\n * Determinism:\n * Sampling happens inside `submitInteraction` only, never inside\n * reducer validation. This lets clients check a submission without\n * burning RNG state.\n */\n\ntype DieRoll = z.ZodObject<{ values: z.ZodArray<z.ZodNumber> }>;\ntype CoinFlip = z.ZodObject<{\n value: z.ZodEnum<{ heads: \"heads\"; tails: \"tails\" }>;\n}>;\n\n// The literal `kind: \"rng\"` is intentionally preserved in the return type\n// so `ClientParamsOf<Collectors>` can structurally detect engine-sampled\n// collectors and omit them from client-facing submit params.\ntype RngCollector<\n Schema extends DieRoll | CoinFlip,\n State extends CollectorState,\n> = InputCollector<Schema, State, \"rng\">;\n\n/**\n * Roll `count` d6s. The submitted value is `{ values: number[] }` with\n * `values.length === count` and each face `1..6`.\n */\nexport function d6<State extends CollectorState = CollectorState>(\n count: number = 1,\n): RngCollector<DieRoll, State> {\n return {\n kind: \"rng\",\n schema: z.object({\n values: z.array(z.number().int().min(1).max(6)).length(count),\n }),\n meta: { rng: \"d6\", count },\n };\n}\n\n/** Flip a coin. The submitted value is `{ value: \"heads\" | \"tails\" }`. */\nexport function coin<\n State extends CollectorState = CollectorState,\n>(): RngCollector<CoinFlip, State> {\n return {\n kind: \"rng\",\n schema: z.object({\n value: z.enum([\"heads\", \"tails\"]),\n }),\n meta: { rng: \"coin\" },\n };\n}\n\nexport const rngInput = { d6, coin };\n","import { z } from \"zod\";\nimport {\n buildTypedRecord,\n type GameTopologyManifest,\n} from \"@dreamboard-games/sdk-types\";\nimport { analyzeManifest, materializeManifestTable } from \"./materialize\";\nimport { createTableSchema, type RuntimeManifestIds } from \"./schema\";\nimport { asPlayerId, perPlayer } from \"../per-player\";\nimport {\n assumeManifestSchema,\n createManifestStringLiteralSchema,\n markManifestScopedSchema,\n createManifestRuntimeSchema,\n createManifestGameStateSchema,\n} from \"../model/manifest\";\nimport type { ReducerManifestContract, RuntimeTableRecord } from \"../model\";\nimport type { AuthoredManifest, CompiledManifest } from \"./types\";\n\n/** Compile authored topology once, in memory, with the same validation used by initialization. */\nexport function compileManifest<const M extends AuthoredManifest>(\n manifest: M,\n): CompiledManifest<M> {\n const source = manifest as unknown as GameTopologyManifest;\n const analysis = analyzeManifest(source);\n const initial = materializeManifestTable({\n manifest: source,\n playerIds: analysis.playerIds,\n shuffleItems: (values) => [...values],\n });\n const sharedZoneIds = analysis.sharedZones.map((zone) => zone.id).sort();\n const playerZoneIds = analysis.playerZones.map((zone) => zone.id).sort();\n const literals = {\n ...Object.fromEntries(\n Object.entries(analysis)\n .filter(([key]) => key.endsWith(\"Ids\") || key === \"cardTypes\")\n .map(([key, value]) => [key, value]),\n ),\n playerIds: analysis.playerIds.map(asPlayerId),\n phaseNames: [],\n boardLayouts: [\"generic\", \"hex\", \"square\"],\n deckIds: sharedZoneIds,\n handIds: playerZoneIds,\n sharedZoneIds,\n playerZoneIds,\n resourcePresentationById: analysis.resourcePresentationById,\n handVisibilityById: Object.fromEntries(\n playerZoneIds.map((id) => [\n id,\n analysis.zoneVisibilityById.get(id) ?? \"ownerOnly\",\n ]),\n ),\n zoneVisibilityById: Object.fromEntries(analysis.zoneVisibilityById),\n cardSetIdByCardId: Object.fromEntries(analysis.cardSetIdByCardId),\n cardTypeByCardId: Object.fromEntries(analysis.cardTypeByCardId),\n setupChoiceIdsByOptionId: Object.fromEntries(\n analysis.setupChoiceIdsByOptionId,\n ),\n cardSetIdsBySharedZoneId: Object.fromEntries(analysis.sharedZoneCardSetIds),\n cardSetIdsByPlayerZoneId: Object.fromEntries(analysis.playerZoneCardSetIds),\n } as unknown as ReducerManifestContract<\n RuntimeTableRecord,\n string,\n string,\n string,\n string,\n string\n >[\"literals\"];\n const families = [\n \"phaseName\",\n \"boardLayout\",\n \"setupOptionId\",\n \"setupProfileId\",\n \"cardSetId\",\n \"cardType\",\n \"cardId\",\n \"deckId\",\n \"handId\",\n \"sharedZoneId\",\n \"playerZoneId\",\n \"zoneId\",\n \"resourceId\",\n \"pieceTypeId\",\n \"pieceId\",\n \"dieTypeId\",\n \"dieId\",\n \"boardTypeId\",\n \"boardBaseId\",\n \"boardId\",\n \"boardContainerId\",\n \"relationTypeId\",\n \"edgeId\",\n \"edgeTypeId\",\n \"vertexId\",\n \"vertexTypeId\",\n \"spaceId\",\n \"spaceTypeId\",\n ] as const;\n const ids = {\n ...Object.fromEntries(\n families.map((family) => {\n const values = literals[\n `${family}s` as keyof typeof literals\n ] as readonly string[];\n return [\n family,\n family === \"phaseName\"\n ? markManifestScopedSchema(z.string(), family)\n : values.length\n ? createManifestStringLiteralSchema(values, family)\n : markManifestScopedSchema(z.never(), family),\n ];\n }),\n ),\n playerId: markManifestScopedSchema(\n z.string().min(1).transform(asPlayerId),\n \"playerId\",\n ),\n } as unknown as RuntimeManifestIds;\n const boardIdSchemas = analysis.analyzedBoards.map((board) =>\n board.board.scope === \"perPlayer\"\n ? z.templateLiteral([board.board.id, \":\", z.string().min(1)])\n : z.literal(board.board.id),\n );\n ids.boardId = markManifestScopedSchema(\n boardIdSchemas.length ? z.union(boardIdSchemas) : z.never(),\n \"boardId\",\n );\n const tableSchema = assumeManifestSchema<RuntimeTableRecord>(\n createTableSchema(analysis, ids),\n );\n const resolvePlayers = (players: readonly string[] = analysis.playerIds) =>\n players.map(asPlayerId);\n const emptyDecks = () =>\n Object.fromEntries(sharedZoneIds.map((id) => [id, []]));\n const hands = (players?: readonly string[]) =>\n Object.fromEntries(\n playerZoneIds.map((id) => [\n id,\n perPlayer(resolvePlayers(players), () => []),\n ]),\n );\n const defaults = {\n zones: (players?: readonly string[]) => ({\n shared: emptyDecks(),\n perPlayer: hands(players),\n visibility: structuredClone(literals.zoneVisibilityById),\n cardSetIdsByZoneId: Object.fromEntries(analysis.zoneCardSetIdsById),\n }),\n decks: emptyDecks,\n hands,\n handVisibility: () => structuredClone(literals.handVisibilityById),\n ownerOfCard: () =>\n Object.fromEntries(analysis.cardIds.map((id) => [id, null])),\n visibility: () =>\n Object.fromEntries(analysis.cardIds.map((id) => [id, { faceUp: true }])),\n resources: (players?: readonly string[]) =>\n perPlayer(resolvePlayers(players), () =>\n Object.fromEntries(analysis.resourceIds.map((id) => [id, 0])),\n ),\n };\n const runtimeSchema = createManifestRuntimeSchema({\n phaseNameSchema: z.string(),\n playerIdSchema: ids.playerId,\n setupProfileIdSchema: ids.setupProfileId,\n });\n const createInitialTable = (\n options: {\n playerIds?: readonly string[];\n shuffleItems?: <V>(values: readonly V[]) => V[];\n } = {},\n ) =>\n tableSchema.parse(\n materializeManifestTable({\n manifest: source,\n playerIds: options.playerIds ?? analysis.playerIds,\n shuffleItems: options.shuffleItems ?? ((values) => [...values]),\n }),\n );\n return {\n literals,\n ids,\n defaults,\n records: Object.fromEntries(\n [...families, \"playerId\"].map((family) => [\n `${family}s`,\n <V>(initial: V | ((id: string) => V)) =>\n buildTypedRecord(\n literals[\n `${family}s` as keyof typeof literals\n ] as readonly string[],\n initial,\n ),\n ]),\n ),\n tableSchema,\n runtimeSchema,\n schemas: { table: tableSchema, runtime: runtimeSchema },\n staticBoards: initial.boards,\n setupOptionsById: analysis.setupOptionsById,\n setupChoiceIdsByOptionId: literals.setupChoiceIdsByOptionId,\n setupProfilesById: analysis.setupProfilesById,\n createInitialTable,\n normalSetup: {\n minPlayers: source.players.minPlayers,\n maxPlayers: source.players.maxPlayers,\n createInitialTable,\n },\n createGameStateSchema: (\n config: Parameters<CompiledManifest<M>[\"createGameStateSchema\"]>[0],\n ) =>\n createManifestGameStateSchema({\n ...config,\n tableSchema,\n playerIdSchema: ids.playerId,\n setupProfileIdSchema: ids.setupProfileId,\n }),\n } as unknown as CompiledManifest<M>;\n}\n","import { z } from \"zod\";\nimport type { ObjectSchema, PropertySchema } from \"@dreamboard-games/sdk-types\";\nimport type { ManifestIds } from \"../model\";\nimport { perPlayerSchema } from \"../per-player\";\nimport type { analyzeManifest } from \"./materialize\";\ntype Analysis = ReturnType<typeof analyzeManifest>;\nexport type RuntimeManifestIds = {\n [K in keyof ManifestIds<\n string,\n string,\n string,\n string,\n string\n >]: z.ZodType<string>;\n};\ntype Ids = RuntimeManifestIds;\nexport function createTableSchema(analysis: Analysis, ids: Ids) {\n const unknownRecordSchema = z.record(z.string(), z.unknown());\n const objectSchema = (\n schema: ObjectSchema | null | undefined,\n ): z.ZodTypeAny =>\n schema && Object.keys(schema.properties).length\n ? z.object(\n Object.fromEntries(\n Object.entries(schema.properties).map(([key, value]) => [\n key,\n propertySchema(value),\n ]),\n ),\n )\n : unknownRecordSchema;\n function propertySchema(schema: PropertySchema | undefined): z.ZodTypeAny {\n if (!schema) return z.unknown();\n let result: z.ZodTypeAny;\n switch (schema.type) {\n case \"string\":\n result = z.string();\n break;\n case \"integer\":\n result = z.number().int();\n break;\n case \"number\":\n result = z.number();\n break;\n case \"boolean\":\n result = z.boolean();\n break;\n case \"enum\":\n result = schema.enums?.length\n ? z.enum(schema.enums as [string, ...string[]])\n : z.string();\n break;\n case \"array\":\n result = z.array(propertySchema(schema.items));\n break;\n case \"record\":\n result = z.record(z.string(), propertySchema(schema.values));\n break;\n case \"object\":\n result = objectSchema({ properties: schema.properties ?? {} });\n break;\n default:\n result = ids[schema.type];\n }\n if (schema.nullable) result = result.nullable();\n if (schema.optional) result = result.optional();\n if (Object.prototype.hasOwnProperty.call(schema, \"default\"))\n result = result.default(schema.default);\n return result;\n }\n const shape = <T>(\n items: readonly T[],\n getKey: (item: T) => string,\n getSchema: (item: T) => z.ZodTypeAny,\n ) =>\n z.object(\n Object.fromEntries(items.map((item) => [getKey(item), getSchema(item)])),\n );\n const cardStateByIdSchema = shape(\n analysis.cardIds,\n (id) => id,\n (id) => {\n const setId = analysis.cardSetIdByCardId.get(id)!;\n const type = analysis.cardTypeByCardId.get(id)!;\n const schema = analysis.cardSets.find(\n (set) => set.id === setId,\n )!.cardSchema;\n const properties =\n schema && \"variants\" in schema\n ? objectSchema({\n properties: {\n ...schema.shared,\n ...schema.variants[type]?.properties,\n },\n })\n : objectSchema(schema);\n return z.object({\n componentType: z.string().optional(),\n id: z.literal(id),\n cardSetId: z.literal(setId),\n cardType: z.literal(type),\n name: z.string().optional(),\n text: z.string().optional(),\n properties,\n });\n },\n );\n const pieceStateByIdSchema = shape(\n analysis.pieceIds,\n (id) => id,\n (id) => {\n const type = analysis.pieceTypeIdByPieceId.get(id)!;\n return z.object({\n componentType: z.string().optional(),\n id: z.literal(id),\n pieceTypeId: z.literal(type),\n pieceName: z.string().nullish(),\n ownerId: ids.playerId.nullish(),\n properties: objectSchema(analysis.pieceTypeSchemasById.get(type)),\n });\n },\n );\n const dieStateByIdSchema = shape(\n analysis.dieIds,\n (id) => id,\n (id) => {\n const type = analysis.dieTypeIdByDieId.get(id)!;\n return z.object({\n componentType: z.string().optional(),\n id: z.literal(id),\n dieTypeId: z.literal(type),\n dieName: z.string().nullish(),\n ownerId: ids.playerId.nullish(),\n sides: z.literal(\n analysis.manifest.dieTypes?.find((die) => die.id === type)?.sides ??\n 6,\n ),\n value: z.number().int().nullish(),\n properties: objectSchema(analysis.dieTypeSchemasById.get(type)),\n });\n },\n );\n const sharedZoneSchema = shape(\n analysis.sharedZones,\n (zone) => zone.id,\n () => z.array(ids.cardId),\n );\n const playerZoneSchema = shape(\n analysis.playerZones,\n (zone) => zone.id,\n () => perPlayerSchema(z.array(ids.cardId)),\n );\n const zoneIdSchema = ids.zoneId;\n const playerZoneIdSchema = ids.playerZoneId;\n const slotVariants = analysis.strictSlotHosts.flatMap((host) =>\n host.slotIds.map((slotId) =>\n z.object({\n type: z.literal(\"InSlot\"),\n host: z.object({ kind: z.literal(host.kind), id: z.literal(host.id) }),\n slotId: z.literal(slotId),\n position: z.number().int().nullish(),\n }),\n ),\n );\n const slotLocationSchema = slotVariants.length\n ? z.union(\n slotVariants as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ],\n )\n : z.never();\n const boardSpaceTypeIdSchema = ids.spaceTypeId.nullable().optional();\n const boardSpaceStateSchema = z.object({\n id: ids.spaceId,\n name: z.string().nullable().optional(),\n typeId: boardSpaceTypeIdSchema,\n fields: unknownRecordSchema,\n zoneId: z.string().nullable().optional(),\n });\n const hexSpaceStateSchema = boardSpaceStateSchema.extend({\n q: z.number().int(),\n r: z.number().int(),\n });\n const squareSpaceStateSchema = boardSpaceStateSchema.extend({\n row: z.number().int(),\n col: z.number().int(),\n });\n const boardRelationStateSchema = z.object({\n id: z.string().nullable().optional(),\n typeId: ids.relationTypeId,\n fromSpaceId: ids.spaceId,\n toSpaceId: ids.spaceId,\n directed: z.boolean(),\n fields: unknownRecordSchema,\n });\n const boardContainerStateSchema = z.object({\n id: ids.boardContainerId,\n name: z.string(),\n host: z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"board\") }),\n z.object({ type: z.literal(\"space\"), spaceId: ids.spaceId }),\n ]),\n allowedCardSetIds: z.array(ids.cardSetId).optional(),\n zoneId: z.string(),\n fields: unknownRecordSchema,\n });\n const runtimeGenericBoardStateSchema = z.object({\n id: ids.boardId,\n baseId: ids.boardBaseId,\n layout: z.literal(\"generic\"),\n typeId: ids.boardTypeId.nullable().optional(),\n scope: z.enum([\"shared\", \"perPlayer\"]),\n playerId: ids.playerId.nullable().optional(),\n templateId: z.string().nullable().optional(),\n fields: unknownRecordSchema,\n // T220: per-board state.spaces is loose-keyed by string. See the\n // codegen-template comment in renderGenericBoardStateSchema for\n // the rationale; the wire shape is unchanged (additionalProperties\n // JSON), and the inner id field narrows at parse time.\n spaces: z.record(z.string(), boardSpaceStateSchema),\n relations: z.array(boardRelationStateSchema),\n containers: z.record(z.string(), boardContainerStateSchema),\n });\n const hexEdgeStateSchema = z.object({\n id: ids.edgeId,\n spaceIds: z.array(ids.spaceId).min(1).max(2),\n typeId: ids.edgeTypeId.nullable().optional(),\n label: z.string().nullable().optional(),\n ownerId: ids.playerId.nullable().optional(),\n fields: unknownRecordSchema,\n });\n const hexVertexStateSchema = z.object({\n id: ids.vertexId,\n spaceIds: z.array(ids.spaceId).min(1).max(3),\n typeId: ids.vertexTypeId.nullable().optional(),\n label: z.string().nullable().optional(),\n ownerId: ids.playerId.nullable().optional(),\n fields: unknownRecordSchema,\n });\n const squareVertexStateSchema = z.object({\n id: ids.vertexId,\n spaceIds: z.array(ids.spaceId).min(1).max(4),\n typeId: ids.vertexTypeId.nullable().optional(),\n label: z.string().nullable().optional(),\n ownerId: ids.playerId.nullable().optional(),\n fields: unknownRecordSchema,\n });\n const runtimeHexBoardStateSchema = runtimeGenericBoardStateSchema.extend({\n layout: z.literal(\"hex\"),\n // T220: loose-keyed by string — see comment above.\n spaces: z.record(z.string(), hexSpaceStateSchema),\n relations: z.array(boardRelationStateSchema),\n containers: z.object({}),\n orientation: z.enum([\"pointy-top\", \"flat-top\"]),\n edges: z.array(hexEdgeStateSchema),\n vertices: z.array(hexVertexStateSchema),\n });\n const runtimeSquareBoardStateSchema = runtimeGenericBoardStateSchema.extend({\n layout: z.literal(\"square\"),\n // T220: loose-keyed by string — see comment above.\n spaces: z.record(z.string(), squareSpaceStateSchema),\n relations: z.array(boardRelationStateSchema),\n containers: z.record(z.string(), boardContainerStateSchema),\n edges: z.array(hexEdgeStateSchema),\n vertices: z.array(squareVertexStateSchema),\n });\n const boards = analysis.analyzedBoards.flatMap((board) =>\n board.runtimeBoardIds.map((id) => {\n const base = {\n id:\n board.board.scope === \"perPlayer\"\n ? z.templateLiteral([board.board.id, \":\", z.string().min(1)])\n : z.literal(id),\n baseId: z.literal(board.board.id),\n scope: z.literal(board.board.scope),\n fields: objectSchema(board.boardFieldsSchema),\n };\n const spaces = boardSpaceStateSchema.extend({\n fields: objectSchema(board.spaceFieldsSchema),\n });\n const relations = z.array(\n boardRelationStateSchema.extend({\n fields: objectSchema(\n \"relationFieldsSchema\" in board\n ? board.relationFieldsSchema\n : undefined,\n ),\n }),\n );\n const containers =\n \"containers\" in board\n ? shape(\n board.containers,\n (item) => item.id,\n (item) =>\n boardContainerStateSchema.extend({\n id: z.literal(item.id),\n fields: objectSchema(board.containerFieldsSchema),\n }),\n )\n : z.object({});\n if (board.layout === \"generic\")\n return {\n id,\n scope: board.board.scope,\n layout: board.layout,\n schema: runtimeGenericBoardStateSchema.extend({\n ...base,\n spaces: z.record(z.string(), spaces),\n relations,\n containers,\n }),\n };\n const edges = z.array(\n hexEdgeStateSchema.extend({\n fields: objectSchema(board.edgeFieldsSchema),\n }),\n );\n const vertices = z.array(\n (board.layout === \"hex\"\n ? hexVertexStateSchema\n : squareVertexStateSchema\n ).extend({ fields: objectSchema(board.vertexFieldsSchema) }),\n );\n return {\n id,\n scope: board.board.scope,\n layout: board.layout,\n schema:\n board.layout === \"hex\"\n ? runtimeHexBoardStateSchema.extend({\n ...base,\n spaces: z.record(\n z.string(),\n spaces.extend({ q: z.number().int(), r: z.number().int() }),\n ),\n edges,\n vertices,\n })\n : runtimeSquareBoardStateSchema.extend({\n ...base,\n spaces: z.record(\n z.string(),\n spaces.extend({\n row: z.number().int(),\n col: z.number().int(),\n }),\n ),\n relations,\n containers,\n edges,\n vertices,\n }),\n };\n }),\n );\n const boardCollection = (entries: typeof boards) => {\n const shared = entries.filter((board) => board.scope === \"shared\");\n const scoped = entries\n .filter((board) => board.scope === \"perPlayer\")\n .map((board) => board.schema);\n return shape(\n shared,\n (board) => board.id,\n (board) => board.schema,\n ).catchall(scoped.length ? z.union(scoped) : z.never());\n };\n const boardStateByIdSchema = boardCollection(boards);\n const hexBoardStateByIdSchema = boardCollection(\n boards.filter((board) => board.layout === \"hex\"),\n );\n const squareBoardStateByIdSchema = boardCollection(\n boards.filter((board) => board.layout === \"square\"),\n );\n return z.object({\n playerOrder: z.array(ids.playerId),\n zones: z.object({\n shared: sharedZoneSchema,\n perPlayer: playerZoneSchema,\n visibility: z.record(\n zoneIdSchema,\n z.enum([\"all\", \"ownerOnly\", \"public\", \"hidden\"]),\n ),\n cardSetIdsByZoneId: z\n .record(zoneIdSchema, z.array(ids.cardSetId))\n .optional(),\n }),\n decks: sharedZoneSchema,\n hands: playerZoneSchema,\n handVisibility: z.record(\n playerZoneIdSchema,\n z.enum([\"all\", \"ownerOnly\", \"public\", \"hidden\"]),\n ),\n cards: cardStateByIdSchema,\n pieces: pieceStateByIdSchema,\n componentLocations: z.record(\n z.string(),\n z.union([\n z.object({ type: z.literal(\"Detached\") }),\n z.object({\n type: z.literal(\"InDeck\"),\n deckId: ids.deckId,\n playedBy: ids.playerId.nullable(),\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"InHand\"),\n handId: ids.handId,\n playerId: ids.playerId,\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"InZone\"),\n zoneId: z.string(),\n playedBy: ids.playerId.nullable().optional(),\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"OnSpace\"),\n boardId: ids.boardId,\n spaceId: ids.spaceId,\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"InContainer\"),\n boardId: ids.boardId,\n containerId: ids.boardContainerId,\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"OnEdge\"),\n boardId: ids.boardId,\n edgeId: ids.edgeId,\n position: z.number().int().nullable().optional(),\n }),\n z.object({\n type: z.literal(\"OnVertex\"),\n boardId: ids.boardId,\n vertexId: ids.vertexId,\n position: z.number().int().nullable().optional(),\n }),\n slotLocationSchema,\n ]),\n ),\n ownerOfCard: z.record(ids.cardId, ids.playerId.nullable()),\n visibility: z.record(\n ids.cardId,\n z.object({\n faceUp: z.boolean(),\n visibleTo: z.array(ids.playerId).nullable().optional(),\n }),\n ),\n resources: perPlayerSchema(z.record(ids.resourceId, z.number().int())),\n boards: z.object({\n byId: boardStateByIdSchema,\n hex: hexBoardStateByIdSchema,\n square: squareBoardStateByIdSchema,\n network: z.record(z.string(), unknownRecordSchema).default({}),\n track: z.record(z.string(), unknownRecordSchema).default({}),\n }),\n dice: dieStateByIdSchema,\n });\n}\n","import {\n isManifestScopedSchema,\n type ManifestContract,\n type RuntimeTableRecord,\n type SchemaLike,\n} from \"../model\";\nimport type { InputCollector } from \"../model\";\nimport {\n getObjectShape,\n getZodDef,\n isEnumKeyedRecordSchema,\n isPlainZodString,\n isSparseMapSchema,\n isZodArray,\n unwrapWrappers,\n} from \"../schema-helpers\";\nimport type { AnyReducerGameContract } from \"./types\";\n\n/**\n * Canonical set of manifest-scoped id field names. `defineGameContract`\n * uses this list to reject state schemas that describe one of these fields\n * with a raw `z.string()` instead of the corresponding branded enum from\n * `manifest.ids.*` (or `gameContract.schemas.*`).\n *\n * The rule of thumb is \"one way to do things\": if a field *is* a player id,\n * card id, zone id, etc. in the manifest, the authored state schema must\n * reuse the same literal/branded schema so generated types line up with the\n * runtime checks, instead of silently widening to `string`.\n */\nconst MANIFEST_SCOPED_ID_NAMES = [\n \"playerId\",\n \"cardId\",\n \"deckId\",\n \"handId\",\n \"zoneId\",\n \"sharedZoneId\",\n \"playerZoneId\",\n \"boardId\",\n \"boardContainerId\",\n \"boardTypeId\",\n \"boardBaseId\",\n \"edgeId\",\n \"edgeTypeId\",\n \"vertexId\",\n \"vertexTypeId\",\n \"spaceId\",\n \"spaceTypeId\",\n \"relationTypeId\",\n \"resourceId\",\n \"pieceId\",\n \"pieceTypeId\",\n \"dieId\",\n \"dieTypeId\",\n \"setupOptionId\",\n \"setupProfileId\",\n \"cardSetId\",\n \"cardType\",\n] as const;\n\ntype ManifestScopedIdName = (typeof MANIFEST_SCOPED_ID_NAMES)[number];\n\nfunction matchManifestScopedIdName(\n key: string,\n): { name: ManifestScopedIdName; kind: \"singular\" | \"plural\" } | null {\n for (const name of MANIFEST_SCOPED_ID_NAMES) {\n const capitalized = `${name.charAt(0).toUpperCase()}${name.slice(1)}`;\n if (key === name || key.endsWith(capitalized)) {\n return { name, kind: \"singular\" };\n }\n const plural = `${name}s`;\n const capitalizedPlural = `${capitalized}s`;\n if (key === plural || key.endsWith(capitalizedPlural)) {\n return { name, kind: \"plural\" };\n }\n }\n return null;\n}\n\nexport function validateInteractionParamsSchema(\n schema: unknown,\n context: \"defineInteraction\" | \"defineCardAction\",\n path: string,\n): void {\n const inner = unwrapWrappers(schema);\n if (isEnumKeyedRecordSchema(inner) && !isSparseMapSchema(inner)) {\n throw new Error(\n `${context}: ${path} uses an enum-keyed z.record(...), which parses as a total map at runtime. ` +\n `Use sparseMap(...) or sparseCounts(...) from @dreamboard-games/sdk/reducer instead so interaction params stay sparse and match runtime validation.`,\n );\n }\n\n const shape = getObjectShape(inner);\n if (shape) {\n for (const [key, fieldSchema] of Object.entries(shape)) {\n validateInteractionParamsSchema(fieldSchema, context, `${path}.${key}`);\n }\n return;\n }\n\n const def = getZodDef(inner);\n if (def.type === \"array\" && def.element) {\n validateInteractionParamsSchema(def.element, context, `${path}[]`);\n return;\n }\n\n if (def.type === \"record\" && def.valueType) {\n validateInteractionParamsSchema(def.valueType, context, `${path}.*`);\n }\n}\n\nexport function validateInteractionInputsSchema(\n inputs: Record<string, InputCollector> | undefined,\n context: \"defineInteraction\" | \"defineCardAction\",\n): void {\n if (!inputs) return;\n for (const [key, collector] of Object.entries(inputs)) {\n validateInteractionParamsSchema(collector.schema, context, `inputs.${key}`);\n }\n}\n\nexport function validateManyCommitPolicy(input: {\n inputs: Record<string, InputCollector> | undefined;\n commit?: { mode: string };\n context: string;\n}): void {\n if (input.commit?.mode !== \"autoWhenReady\") return;\n if (\n Object.values(input.inputs ?? {}).some(\n (collector) => collector.selection?.mode === \"many\",\n )\n ) {\n throw new Error(\n `${input.context}: interactions with many(...) inputs must use commit: { mode: \"manual\" }.`,\n );\n }\n}\n\nexport function validateInteractionLikeDefinition(\n input: {\n inputs?: Record<string, InputCollector>;\n commit?: { mode: string };\n paramsSchema?: unknown;\n },\n context: \"defineInteraction\" | \"defineCardAction\",\n): void {\n validateInteractionInputsSchema(input.inputs, context);\n validateManyCommitPolicy({\n inputs: input.inputs,\n commit: input.commit,\n context,\n });\n if (input.paramsSchema) {\n validateInteractionParamsSchema(\n input.paramsSchema,\n context,\n \"paramsSchema\",\n );\n }\n}\n\nexport function validateStateSchemaIdBranding(\n schema: unknown,\n scope: \"public\" | \"private\" | \"hidden\",\n): void {\n const def = getZodDef(schema);\n if (def.type !== \"object\") {\n return;\n }\n const shape = def.shape as Record<string, unknown> | undefined;\n if (!shape) {\n return;\n }\n for (const [key, fieldSchema] of Object.entries(shape)) {\n const match = matchManifestScopedIdName(key);\n if (!match) {\n continue;\n }\n const inner = unwrapWrappers(fieldSchema);\n if (match.kind === \"singular\") {\n if (isPlainZodString(inner) && !isManifestScopedSchema(inner)) {\n throw new Error(\n `defineGameContract: state.${scope}.${key} uses a raw z.string() ` +\n `but its name identifies it as a manifest-scoped '${match.name}'. ` +\n `Use gameContract.schemas.${match.name} (or manifest.ids.${match.name}) ` +\n `so the branded literal union flows through state types.`,\n );\n }\n continue;\n }\n if (match.kind === \"plural\" && isZodArray(inner)) {\n const element = unwrapWrappers(getZodDef(inner).element);\n if (isPlainZodString(element) && !isManifestScopedSchema(element)) {\n throw new Error(\n `defineGameContract: state.${scope}.${key} uses z.array(z.string()) ` +\n `but its name identifies it as manifest-scoped '${match.name}' values. ` +\n `Use z.array(gameContract.schemas.${match.name}) ` +\n `(or manifest.ids.${match.name}) so the branded literal union flows through state types.`,\n );\n }\n }\n }\n}\n\nexport function validateDefineGamePhaseNames(definition: {\n contract: AnyReducerGameContract;\n phases: Record<string, unknown>;\n initialPhase?: string;\n setupProfiles?: Record<string, { initialPhase?: string }>;\n}): void {\n const contractPhaseNames = (\n definition.contract as AnyReducerGameContract & {\n phaseNames?: readonly string[];\n }\n ).phaseNames;\n if (!Array.isArray(contractPhaseNames)) {\n return;\n }\n const declared = new Set(contractPhaseNames);\n const actual = new Set(Object.keys(definition.phases));\n const missing = [...declared].filter((name) => !actual.has(name));\n const extra = [...actual].filter((name) => !declared.has(name));\n if (missing.length > 0 || extra.length > 0) {\n const parts: string[] = [];\n if (missing.length > 0) {\n parts.push(`missing: [${missing.join(\", \")}]`);\n }\n if (extra.length > 0) {\n parts.push(`extra: [${extra.join(\", \")}]`);\n }\n throw new Error(\n `defineGame: phases record does not match contract.phaseNames (${parts.join(\n \"; \",\n )}). Update contract.phaseNames or the phases record so they agree.`,\n );\n }\n if (\n definition.initialPhase !== undefined &&\n !declared.has(definition.initialPhase)\n ) {\n throw new Error(\n `defineGame: initialPhase '${definition.initialPhase}' is not declared in contract.phaseNames.`,\n );\n }\n if (definition.setupProfiles) {\n for (const [profileId, profile] of Object.entries(\n definition.setupProfiles,\n )) {\n const initial = profile?.initialPhase;\n if (initial !== undefined && !declared.has(initial)) {\n throw new Error(\n `defineGame: setupProfiles.${profileId}.initialPhase '${initial}' is not declared in contract.phaseNames.`,\n );\n }\n }\n }\n}\n\nexport function validateDefineGameZoneWiring(definition: {\n contract: {\n manifest: ManifestContract<RuntimeTableRecord>;\n };\n phases: Record<string, unknown>;\n}): void {\n const manifestPlayerZoneIds = new Set(\n definition.contract.manifest.literals.playerZoneIds ?? [],\n );\n for (const [phaseName, phase] of Object.entries(definition.phases)) {\n const phaseRecord =\n typeof phase === \"object\" && phase !== null\n ? (phase as {\n zones?: Record<string, unknown>;\n cardActions?: Record<string, unknown>;\n })\n : null;\n if (!phaseRecord) continue;\n\n if (phaseRecord.zones !== undefined && !Array.isArray(phaseRecord.zones)) {\n const zonesRecord =\n typeof phaseRecord.zones === \"object\" && phaseRecord.zones !== null\n ? (phaseRecord.zones as Record<string, unknown>)\n : null;\n const hasRemovedZoneSpec =\n zonesRecord &&\n Object.values(zonesRecord).some(\n (zone) =>\n typeof zone === \"object\" &&\n zone !== null &&\n (\"cardsFrom\" in zone || \"playableVia\" in zone || \"from\" in zone),\n );\n if (hasRemovedZoneSpec) {\n throw new Error(\n `defineGame: phases.${phaseName}.zones uses removed zone spec objects. Use zones: [\"manifest-player-zone-id\"] and cardActions[*].playFrom instead.`,\n );\n }\n throw new Error(\n `defineGame: phases.${phaseName}.zones must be an array of manifest player zone ids.`,\n );\n }\n\n for (const [index, zoneId] of (phaseRecord.zones ?? []).entries()) {\n if (typeof zoneId !== \"string\") {\n throw new Error(\n `defineGame: phases.${phaseName}.zones[${index}] must be a manifest player zone id string.`,\n );\n }\n if (!manifestPlayerZoneIds.has(zoneId)) {\n throw new Error(\n `defineGame: phases.${phaseName}.zones[${index}] '${zoneId}' is not declared in manifest.literals.playerZoneIds.`,\n );\n }\n }\n\n for (const [actionId, action] of Object.entries(\n phaseRecord.cardActions ?? {},\n )) {\n const actionRecord =\n typeof action === \"object\" && action !== null\n ? (action as Record<string, unknown>)\n : null;\n const playFrom = actionRecord?.playFrom;\n if (\n typeof playFrom === \"string\" &&\n !manifestPlayerZoneIds.has(playFrom)\n ) {\n throw new Error(\n `defineGame: phases.${phaseName}.cardActions.${actionId}.playFrom '${playFrom}' is not declared in manifest.literals.playerZoneIds.`,\n );\n }\n }\n }\n}\n\nexport function validateDefineGameSimultaneousPhases(definition: {\n phases: Record<string, unknown>;\n}): void {\n for (const [phaseName, phase] of Object.entries(definition.phases)) {\n const phaseRecord =\n typeof phase === \"object\" && phase !== null\n ? (phase as {\n kind?: unknown;\n submit?: { inputs?: Record<string, InputCollector> };\n resolve?: unknown;\n interactions?: Record<string, unknown>;\n })\n : null;\n if (!phaseRecord || phaseRecord.kind !== \"simultaneousPlayer\") {\n continue;\n }\n if (!phaseRecord.submit) {\n throw new Error(\n `defineGame: phases.${phaseName} is kind 'simultaneousPlayer' but does not declare submit.`,\n );\n }\n if (typeof phaseRecord.resolve !== \"function\") {\n throw new Error(\n `defineGame: phases.${phaseName} is kind 'simultaneousPlayer' but does not declare resolve.`,\n );\n }\n if (phaseRecord.interactions?.submit) {\n throw new Error(\n `defineGame: phases.${phaseName}.interactions.submit conflicts with the reserved simultaneous submit interaction id.`,\n );\n }\n validateInteractionInputsSchema(\n phaseRecord.submit.inputs,\n \"defineInteraction\",\n );\n validateManyCommitPolicy({\n inputs: phaseRecord.submit.inputs,\n commit: (phaseRecord.submit as { commit?: { mode: string } }).commit,\n context: `defineGame: phases.${phaseName}.submit`,\n });\n }\n}\n\nexport type ManifestIdSchemasOf<\n Ids extends Record<string, SchemaLike<unknown>>,\n> = {\n readonly [Key in keyof Ids]: Ids[Key] extends SchemaLike<infer Output>\n ? Ids[Key] & import(\"../model\").ManifestIdSchema<Output>\n : Ids[Key];\n};\n","import type {\n CardActionSpec,\n InputCollector,\n InteractionRule,\n InteractionSpec,\n PlayerZoneIdOfManifest,\n} from \"../model\";\nimport type { ScopedPhaseState } from \"../model/spec/runtime-args\";\nimport type {\n AnyReducerGameContract,\n ContractErrorCode,\n ContractManifest,\n ContractState,\n InferPhaseState,\n PhaseStateInput,\n} from \"./types\";\nimport { validateInteractionLikeDefinition } from \"./validation\";\n\nexport function defineInteraction<\n Contract extends AnyReducerGameContract,\n PhaseState extends PhaseStateInput = import(\"../model\").SchemaLike<object>,\n>() {\n return <Collectors extends Record<string, InputCollector>>(\n definition: InteractionSpec<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n ContractErrorCode<Contract>\n >,\n ): InteractionSpec<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n ContractErrorCode<Contract>\n > => {\n validateInteractionLikeDefinition(\n definition as {\n inputs?: Record<string, InputCollector>;\n commit?: { mode: string };\n paramsSchema?: unknown;\n },\n \"defineInteraction\",\n );\n return definition;\n };\n}\n\nexport function defineInteractionRule<\n Contract extends AnyReducerGameContract,\n PhaseState extends PhaseStateInput = import(\"../model\").SchemaLike<object>,\n>() {\n return <\n Collectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n >(\n definition: InteractionRule<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n ContractErrorCode<Contract>\n >,\n ): InteractionRule<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n ContractErrorCode<Contract>\n > => definition;\n}\n\nexport function defineCardAction<\n Contract extends AnyReducerGameContract,\n PhaseState extends PhaseStateInput,\n>() {\n return <\n Collectors extends Record<string, InputCollector> = Record<string, never>,\n const PlayFrom extends PlayerZoneIdOfManifest<ContractManifest<Contract>> =\n PlayerZoneIdOfManifest<ContractManifest<Contract>>,\n >(\n definition: CardActionSpec<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n PlayFrom,\n ContractErrorCode<Contract>\n >,\n ): CardActionSpec<\n Collectors,\n ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,\n ContractManifest<Contract>,\n PlayFrom,\n ContractErrorCode<Contract>\n > => {\n validateInteractionLikeDefinition(\n definition as {\n inputs?: Record<string, InputCollector>;\n commit?: { mode: string };\n paramsSchema?: unknown;\n },\n \"defineCardAction\",\n );\n return definition;\n };\n}\n","import { z } from \"zod\";\nimport type {\n AnyCardActionSpec,\n AnyInteractionSpec,\n CardActionMap,\n EffectMap,\n InputCollector,\n ManifestContract,\n PhaseDefinition,\n PhaseZoneList,\n PlayerIdOfState,\n RuntimeTableRecord,\n SchemaLike,\n SetupSelectionOfManifest,\n StageMap,\n TableOfState,\n} from \"../model\";\nimport type { ScopedPhaseState } from \"../model/spec/runtime-args\";\nimport type {\n AnyReducerGameContract,\n ContractManifest,\n ContractState,\n} from \"./types\";\n\nexport type StepPhaseState<\n PhaseStateSchema extends SchemaLike<object>,\n Steps extends readonly string[],\n> = z.infer<PhaseStateSchema> & { step: Steps[number] };\n\ntype StepPhaseInteractionEntry<Step extends string, Interaction> = {\n steps: readonly Step[];\n interaction: Interaction;\n};\n\ntype StepPhaseCardActionEntry<Step extends string, Action> = {\n steps: readonly Step[];\n action: Action;\n};\n\nexport type StepPhaseInteractionMap<\n Step extends string,\n State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },\n Manifest extends ManifestContract<TableOfState<State>>,\n> = Record<\n string,\n StepPhaseInteractionEntry<Step, AnyInteractionSpec<State, Manifest>>\n>;\n\nexport type StepPhaseCardActionMap<\n Step extends string,\n State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },\n Manifest extends ManifestContract<TableOfState<State>>,\n> = Record<\n string,\n StepPhaseCardActionEntry<Step, AnyCardActionSpec<State, Manifest>>\n>;\n\nexport type UnwrappedStepInteractions<\n State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },\n Manifest extends ManifestContract<TableOfState<State>>,\n Interactions extends Record<\n string,\n StepPhaseInteractionEntry<string, AnyInteractionSpec<State, Manifest>>\n >,\n> = {\n [Key in keyof Interactions]: Interactions[Key][\"interaction\"];\n};\n\nexport type UnwrappedStepCardActions<\n State extends { table: RuntimeTableRecord; flow: { currentPhase: string } },\n Manifest extends ManifestContract<TableOfState<State>>,\n CardActions extends Record<\n string,\n StepPhaseCardActionEntry<string, AnyCardActionSpec<State, Manifest>>\n >,\n> = {\n [Key in keyof CardActions]: CardActions[Key][\"action\"];\n};\n\nfunction stepStateSchema<Steps extends readonly [string, ...string[]]>(\n schema: SchemaLike<object>,\n steps: Steps,\n): SchemaLike<object> {\n const stepSchema = z.enum(steps);\n const maybeObject = schema as {\n extend?: (shape: { step: typeof stepSchema }) => SchemaLike<object>;\n };\n if (typeof maybeObject.extend === \"function\") {\n return maybeObject.extend({ step: stepSchema });\n }\n return z.intersection(schema, z.object({ step: stepSchema }));\n}\n\nfunction unwrapStepInteractions<\n Step extends string,\n Interactions extends Record<string, StepPhaseInteractionEntry<Step, unknown>>,\n>(interactions: Interactions | undefined) {\n if (!interactions) return undefined;\n return Object.fromEntries(\n Object.entries(interactions).map(([key, entry]) => [\n key,\n {\n ...(entry.interaction as object),\n __steps: entry.steps,\n },\n ]),\n );\n}\n\nfunction unwrapStepCardActions<\n Step extends string,\n CardActions extends Record<string, StepPhaseCardActionEntry<Step, unknown>>,\n>(cardActions: CardActions | undefined) {\n if (!cardActions) return undefined;\n return Object.fromEntries(\n Object.entries(cardActions).map(([key, entry]) => [\n key,\n {\n ...(entry.action as object),\n __steps: entry.steps,\n },\n ]),\n );\n}\n\nexport function definePhase<Contract extends AnyReducerGameContract>() {\n return <\n PhaseStateSchema extends SchemaLike<object>,\n SubmitCollectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n Effects extends EffectMap<\n ContractState<Contract>,\n ContractManifest<Contract>\n > = Record<string, never>,\n Interactions extends Record<\n string,\n AnyInteractionSpec<\n ScopedPhaseState<ContractState<Contract>, z.infer<PhaseStateSchema>>,\n ContractManifest<Contract>\n >\n > = Record<string, never>,\n Stages extends StageMap<\n ScopedPhaseState<ContractState<Contract>, z.infer<PhaseStateSchema>>,\n ContractManifest<Contract>\n > = Record<string, never>,\n const Zones extends PhaseZoneList<ContractManifest<Contract>> = readonly [],\n CardActions extends CardActionMap<\n ScopedPhaseState<ContractState<Contract>, z.infer<PhaseStateSchema>>,\n ContractManifest<Contract>\n > = Record<string, never>,\n >(\n definition: PhaseDefinition<\n PhaseStateSchema,\n ContractState<Contract>,\n ContractManifest<Contract>,\n SubmitCollectors,\n Effects,\n Interactions,\n Stages,\n Zones,\n CardActions\n >,\n ): PhaseDefinition<\n PhaseStateSchema,\n ContractState<Contract>,\n ContractManifest<Contract>,\n SubmitCollectors,\n Effects,\n Interactions,\n Stages,\n Zones,\n CardActions\n > => {\n return definition;\n };\n}\n\nexport function defineStepPhase<Contract extends AnyReducerGameContract>() {\n return <\n const Steps extends readonly [string, ...string[]],\n PhaseStateSchema extends SchemaLike<object>,\n SubmitCollectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n Effects extends EffectMap<\n ContractState<Contract>,\n ContractManifest<Contract>\n > = Record<string, never>,\n Interactions extends StepPhaseInteractionMap<\n Steps[number],\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>\n > = Record<string, never>,\n Stages extends StageMap<\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>\n > = Record<string, never>,\n const Zones extends PhaseZoneList<ContractManifest<Contract>> = readonly [],\n CardActions extends StepPhaseCardActionMap<\n Steps[number],\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>\n > = Record<string, never>,\n >(\n definition: Omit<\n PhaseDefinition<\n PhaseStateSchema,\n ContractState<Contract>,\n ContractManifest<Contract>,\n SubmitCollectors,\n Effects,\n UnwrappedStepInteractions<\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>,\n Interactions\n >,\n Stages,\n Zones,\n UnwrappedStepCardActions<\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>,\n CardActions\n >\n >,\n \"state\" | \"initialState\" | \"interactions\" | \"cardActions\"\n > & {\n steps: Steps;\n state: PhaseStateSchema;\n initialState?: (ctx: {\n manifest: ContractManifest<Contract>;\n state: ContractState<Contract>;\n playerIds: PlayerIdOfState<ContractState<Contract>>[];\n setup: SetupSelectionOfManifest<ContractManifest<Contract>> | null;\n }) => z.infer<PhaseStateSchema>;\n interactions?: Interactions;\n cardActions?: CardActions;\n },\n ) => {\n const [initialStep] = definition.steps;\n const state = stepStateSchema(definition.state, definition.steps);\n const initialState = definition.initialState\n ? (ctx: Parameters<NonNullable<typeof definition.initialState>>[0]) => ({\n ...definition.initialState?.(ctx),\n step: initialStep,\n })\n : () => ({ step: initialStep });\n const { steps: _steps, ...rest } = definition;\n void _steps;\n const normalized = {\n ...rest,\n state,\n initialState,\n interactions: unwrapStepInteractions(definition.interactions),\n cardActions: unwrapStepCardActions(definition.cardActions),\n };\n return normalized as unknown as PhaseDefinition<\n SchemaLike<StepPhaseState<PhaseStateSchema, Steps>>,\n ContractState<Contract>,\n ContractManifest<Contract>,\n SubmitCollectors,\n Effects,\n UnwrappedStepInteractions<\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>,\n Interactions\n >,\n Stages,\n Zones,\n UnwrappedStepCardActions<\n ScopedPhaseState<\n ContractState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n ContractManifest<Contract>,\n CardActions\n >\n >;\n };\n}\n","import type { z } from \"zod\";\nimport type {\n ExactManifestContractOf,\n SchemaLike,\n StageSpec,\n StaticViewDefinition,\n EmptyViewDefinition,\n PlayerViewDefinition,\n SharedViewDefinition,\n} from \"../model\";\nimport type { ScopedPhaseState } from \"../model/spec/runtime-args\";\nimport type {\n AnyReducerGameContract,\n ContractManifest,\n ContractState,\n} from \"./types\";\n\nexport function defineSharedView<Contract extends AnyReducerGameContract>() {\n return <Projection>(\n definition: SharedViewDefinition<\n ContractState<Contract>,\n ContractManifest<Contract>,\n Projection\n >,\n ): SharedViewDefinition<\n ContractState<Contract>,\n ContractManifest<Contract>,\n Projection\n > => definition;\n}\n\nexport function definePlayerView<Contract extends AnyReducerGameContract>() {\n return <SharedProjection = unknown, Projection = unknown>(\n definition: PlayerViewDefinition<\n ContractState<Contract>,\n ContractManifest<Contract>,\n SharedProjection,\n Projection\n >,\n ): PlayerViewDefinition<\n ContractState<Contract>,\n ContractManifest<Contract>,\n SharedProjection,\n Projection\n > => definition;\n}\n\nexport function defineEmptyView<\n Contract extends AnyReducerGameContract,\n>(): EmptyViewDefinition<ContractState<Contract>, ContractManifest<Contract>> {\n return {\n project: () => ({}),\n } as EmptyViewDefinition<ContractState<Contract>, ContractManifest<Contract>>;\n}\n\n/**\n * Factory for the session-scoped static view (see {@link StaticViewDefinition}).\n * Kept separate from dynamic view helpers because the argument shape is\n * structurally different: it exposes only the manifest and generated static\n * queries, with no `state`, `playerId`, `runtime`, `fx`, `ops`, or\n * `accept/reject`. That shape is what prevents authors from accidentally\n * projecting per-tick state into the once-per-session payload.\n */\nexport function defineStaticView<Contract extends AnyReducerGameContract>() {\n return <Projection>(\n definition: StaticViewDefinition<\n ExactManifestContractOf<Contract>,\n Projection\n >,\n ): StaticViewDefinition<ExactManifestContractOf<Contract>, Projection> =>\n definition;\n}\n\nexport function defineStage<Contract extends AnyReducerGameContract>() {\n return (\n definition: StageSpec<ContractState<Contract>, ContractManifest<Contract>>,\n ): StageSpec<ContractState<Contract>, ContractManifest<Contract>> =>\n definition;\n}\n\nexport function definePhaseStage<\n Contract extends AnyReducerGameContract,\n PhaseStateSchema extends SchemaLike<object>,\n>() {\n return (\n definition: StageSpec<\n ScopedPhaseState<ContractState<Contract>, z.infer<PhaseStateSchema>>,\n ContractManifest<Contract>\n >,\n ): StageSpec<\n ScopedPhaseState<ContractState<Contract>, z.infer<PhaseStateSchema>>,\n ContractManifest<Contract>\n > => definition;\n}\n","import type { z } from \"zod\";\nimport type {\n CardActionMap,\n CardActionSpec,\n CardIdOfManifest,\n EffectMap,\n InputCollector,\n InteractionMap,\n InteractionRule,\n InteractionSpec,\n PhaseDefinition,\n PhaseMapOf,\n PhaseNameOfContract,\n PhaseSchemasOfContract,\n PhaseZoneList,\n PlayerViewDefinition,\n PlayerIdOfState,\n PlayerZoneIdOfManifest,\n SchemaLike,\n SetupSelectionOfManifest,\n SharedViewDefinition,\n StageMap,\n StaticViewDefinition,\n TableOfManifest,\n TiledBoardIdOfTable,\n TiledEdgeIdOfTable,\n TiledSpaceIdOfTable,\n TiledVertexIdOfTable,\n ViewMapOf,\n} from \"../model\";\nimport type { ScopedPhaseState } from \"../model/spec/runtime-args\";\nimport type {\n ChoiceOptionsFactory,\n ChoiceTargetOption,\n InputFieldRef,\n PlayerBoardSpaceTarget,\n PlayerSpaceInputSchema,\n} from \"../inputs\";\nimport type { TargetPredicate } from \"../inputs/targetRule\";\nimport type { CollectorState } from \"../model/spec\";\nimport type { TableQueriesOfState } from \"../model/queries\";\nimport type { ReducerTransaction } from \"../transaction\";\nimport {\n boardInput,\n boardTarget,\n cardInput,\n cardTarget,\n choiceTarget,\n formInput,\n promptInput,\n rngInput,\n} from \"../inputs\";\nimport type {\n AnyReducerGameContract,\n ContractErrorCode,\n ContractManifest,\n ContractState,\n InferPhaseState,\n} from \"./types\";\nimport { defineGameDefinition } from \"./game\";\nimport {\n defineCardAction,\n defineInteraction,\n defineInteractionRule,\n} from \"./interaction\";\nimport {\n definePhase,\n defineStepPhase,\n type StepPhaseCardActionMap,\n type StepPhaseInteractionMap,\n type StepPhaseState,\n type UnwrappedStepCardActions,\n type UnwrappedStepInteractions,\n} from \"./phase\";\nimport {\n defineEmptyView,\n definePlayerView,\n defineSharedView,\n defineStaticView,\n} from \"./view-stage\";\n\nexport type ContractWithPhases = AnyReducerGameContract & {\n readonly phases: Record<string, SchemaLike<object>>;\n};\n\ntype BoundState<Contract extends ContractWithPhases> = ContractState<Contract>;\n\ntype BoundManifest<Contract extends ContractWithPhases> =\n ContractManifest<Contract>;\n\ntype BoundTable<Contract extends ContractWithPhases> = TableOfManifest<\n BoundManifest<Contract>\n>;\n\ntype BoundPhaseState<\n Contract extends ContractWithPhases,\n PhaseStateSchema extends SchemaLike<object>,\n> = ScopedPhaseState<BoundState<Contract>, z.infer<PhaseStateSchema>>;\n\ntype BoundFormInputs<Contract extends ContractWithPhases> = ReturnType<\n typeof formInput.forState<BoundState<Contract>>\n>;\n\n/** Board element collector options: the board and the predicates that filter it. */\ntype BoundBoardInputOptions<Contract extends ContractWithPhases, Id> = {\n boardId: string;\n where?: BoundWhere<Contract, Id>;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n};\n\ntype BoundBoardInputs<Contract extends ContractWithPhases> = {\n vertex<\n Id extends string = TiledVertexIdOfTable<\n BoundTable<Contract>,\n TiledBoardIdOfTable<BoundTable<Contract>>\n >,\n >(\n options: BoundBoardInputOptions<Contract, Id>,\n ): InputCollector<z.ZodType<Id>, BoundState<Contract>, \"board-vertex\">;\n edge<\n Id extends string = TiledEdgeIdOfTable<\n BoundTable<Contract>,\n TiledBoardIdOfTable<BoundTable<Contract>>\n >,\n >(\n options: BoundBoardInputOptions<Contract, Id>,\n ): InputCollector<z.ZodType<Id>, BoundState<Contract>, \"board-edge\">;\n tile<Id extends string = string>(\n options: BoundBoardInputOptions<Contract, Id>,\n ): InputCollector<z.ZodType<Id>, BoundState<Contract>, \"board-tile\">;\n space<\n Id extends string = TiledSpaceIdOfTable<\n BoundTable<Contract>,\n TiledBoardIdOfTable<BoundTable<Contract>>\n >,\n >(\n options: BoundBoardInputOptions<Contract, Id>,\n ): InputCollector<z.ZodType<Id>, BoundState<Contract>, \"board-space\">;\n playerSpace<\n BoardId extends string = string,\n SpaceId extends string = string,\n PlayerId extends string = PlayerIdOfState<BoundState<Contract>>,\n >(options: {\n boardId: BoardId;\n where?: BoundWhere<\n Contract,\n PlayerBoardSpaceTarget<BoardId, SpaceId, PlayerId>\n >;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n }): InputCollector<\n PlayerSpaceInputSchema<BoardId, SpaceId, PlayerId>,\n BoundState<Contract>,\n \"board-space\"\n >;\n};\n\n/**\n * An eligibility predicate whose `errorCode` is checked against the model's\n * declared error codes. The unbound `TargetPredicate` accepts any string.\n */\nexport type BoundTargetPredicate<\n Contract extends ContractWithPhases,\n Target,\n> = Omit<TargetPredicate<BoundState<Contract>, Target>, \"errorCode\"> & {\n errorCode: ContractErrorCode<Contract>;\n};\n\ntype BoundWhere<Contract extends ContractWithPhases, Target> =\n | BoundTargetPredicate<Contract, Target>\n | readonly BoundTargetPredicate<Contract, Target>[];\n\ntype BoundCardCollector<\n Contract extends ContractWithPhases,\n Id extends string,\n ZoneIds extends readonly string[],\n> = InputCollector<z.ZodType<Id>, BoundState<Contract>, \"card\"> & {\n readonly meta: {\n readonly zoneId: ZoneIds[number];\n readonly zoneIds: ZoneIds;\n readonly targetKind: \"card\";\n };\n};\n\n/**\n * Card collector: the zones to draw candidates from and the predicates that\n * filter them. The target rule is built internally.\n */\ntype BoundCardInput<Contract extends ContractWithPhases> = <\n Id extends string = CardIdOfManifest<BoundManifest<Contract>>,\n const ZoneIds extends readonly string[] = readonly string[],\n>(options: {\n from: ZoneIds;\n where?: BoundWhere<Contract, Id>;\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n}) => BoundCardCollector<Contract, Id, ZoneIds>;\n\n/**\n * Prompt collector. `choices` names the option domain (a list or a factory\n * over state) and `where` filters it; the target rule is built internally.\n */\ntype BoundPromptInput<Contract extends ContractWithPhases> = <\n Schema extends SchemaLike<unknown>,\n>(options: {\n schema: Schema;\n choices?:\n | ReadonlyArray<\n ChoiceTargetOption<\n Extract<Schema extends z.ZodType<infer Value> ? Value : never, string>\n >\n >\n | ChoiceOptionsFactory<\n BoundState<Contract>,\n Extract<Schema extends z.ZodType<infer Value> ? Value : never, string>\n >;\n where?: BoundWhere<\n Contract,\n Extract<Schema extends z.ZodType<infer Value> ? Value : never, string>\n >;\n}) => InputCollector<Schema, BoundState<Contract>, \"prompt\">;\n\ntype BoundRngInputs<Contract extends ContractWithPhases> = {\n d6(count?: number): ReturnType<typeof rngInput.d6<BoundState<Contract>>>;\n coin(): ReturnType<typeof rngInput.coin<BoundState<Contract>>>;\n};\n\nexport type BoundInputBuilders<Contract extends ContractWithPhases> = {\n readonly board: BoundBoardInputs<Contract>;\n readonly card: BoundCardInput<Contract>;\n readonly form: BoundFormInputs<Contract>;\n readonly prompt: BoundPromptInput<Contract>;\n readonly rng: BoundRngInputs<Contract>;\n};\n\ntype StepPhaseInput<\n Contract extends ContractWithPhases,\n PhaseStateSchema extends SchemaLike<object>,\n Steps extends readonly [string, ...string[]],\n SubmitCollectors extends Record<string, InputCollector>,\n Effects extends EffectMap<BoundState<Contract>, BoundManifest<Contract>>,\n Interactions extends StepPhaseInteractionMap<\n Steps[number],\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n >,\n Stages extends StageMap<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n >,\n Zones extends PhaseZoneList<BoundManifest<Contract>>,\n CardActions extends StepPhaseCardActionMap<\n Steps[number],\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n >,\n> = Omit<\n PhaseDefinition<\n PhaseStateSchema,\n BoundState<Contract>,\n BoundManifest<Contract>,\n SubmitCollectors,\n Effects,\n UnwrappedStepInteractions<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>,\n Interactions\n >,\n Stages,\n Zones,\n UnwrappedStepCardActions<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>,\n CardActions\n >,\n ContractErrorCode<Contract>\n >,\n \"state\" | \"initialState\" | \"interactions\" | \"cardActions\"\n> & {\n steps: Steps;\n state?: never;\n initialState?: (ctx: {\n manifest: BoundManifest<Contract>;\n state: BoundState<Contract>;\n playerIds: PlayerIdOfState<BoundState<Contract>>[];\n setup: SetupSelectionOfManifest<BoundManifest<Contract>> | null;\n }) => InferPhaseState<PhaseStateSchema>;\n interactions?: Interactions;\n cardActions?: CardActions;\n};\n\nexport type PhaseAuthoring<\n Contract extends ContractWithPhases,\n PhaseStateSchema extends SchemaLike<object>,\n> = {\n interaction<Collectors extends Record<string, InputCollector>>(\n spec: InteractionSpec<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n ContractErrorCode<Contract>\n >,\n ): InteractionSpec<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n ContractErrorCode<Contract>\n >;\n cardAction<\n Collectors extends Record<string, InputCollector> = Record<string, never>,\n const PlayFrom extends PlayerZoneIdOfManifest<BoundManifest<Contract>> =\n PlayerZoneIdOfManifest<BoundManifest<Contract>>,\n >(\n spec: CardActionSpec<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n PlayFrom,\n ContractErrorCode<Contract>\n >,\n ): CardActionSpec<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n PlayFrom,\n ContractErrorCode<Contract>\n >;\n rule<\n Collectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n >(\n rule: InteractionRule<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n ContractErrorCode<Contract>\n >,\n ): InteractionRule<\n Collectors,\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>,\n ContractErrorCode<Contract>\n >;\n define<\n SubmitCollectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n Effects extends EffectMap<BoundState<Contract>, BoundManifest<Contract>> =\n Record<string, never>,\n Interactions extends InteractionMap<\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>\n > = Record<string, never>,\n Stages extends StageMap<\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>\n > = Record<string, never>,\n const Zones extends PhaseZoneList<BoundManifest<Contract>> = readonly [],\n CardActions extends CardActionMap<\n BoundPhaseState<Contract, PhaseStateSchema>,\n BoundManifest<Contract>\n > = Record<string, never>,\n >(\n definition: Omit<\n PhaseDefinition<\n PhaseStateSchema,\n BoundState<Contract>,\n BoundManifest<Contract>,\n SubmitCollectors,\n Effects,\n Interactions,\n Stages,\n Zones,\n CardActions,\n ContractErrorCode<Contract>\n >,\n \"state\"\n >,\n ): PhaseDefinition<\n PhaseStateSchema,\n BoundState<Contract>,\n BoundManifest<Contract>,\n SubmitCollectors,\n Effects,\n Interactions,\n Stages,\n Zones,\n CardActions,\n ContractErrorCode<Contract>\n >;\n stepPhase<\n const Steps extends readonly [string, ...string[]],\n SubmitCollectors extends Record<string, InputCollector> = Record<\n string,\n InputCollector\n >,\n Effects extends EffectMap<BoundState<Contract>, BoundManifest<Contract>> =\n Record<string, never>,\n Interactions extends StepPhaseInteractionMap<\n Steps[number],\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n > = Record<string, never>,\n Stages extends StageMap<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n > = Record<string, never>,\n const Zones extends PhaseZoneList<BoundManifest<Contract>> = readonly [],\n CardActions extends StepPhaseCardActionMap<\n Steps[number],\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>\n > = Record<string, never>,\n >(\n definition: StepPhaseInput<\n Contract,\n PhaseStateSchema,\n Steps,\n SubmitCollectors,\n Effects,\n Interactions,\n Stages,\n Zones,\n CardActions\n >,\n ): PhaseDefinition<\n SchemaLike<StepPhaseState<PhaseStateSchema, Steps>>,\n BoundState<Contract>,\n BoundManifest<Contract>,\n SubmitCollectors,\n Effects,\n UnwrappedStepInteractions<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>,\n Interactions\n >,\n Stages,\n Zones,\n UnwrappedStepCardActions<\n ScopedPhaseState<\n BoundState<Contract>,\n StepPhaseState<PhaseStateSchema, Steps>\n >,\n BoundManifest<Contract>,\n CardActions\n >,\n ContractErrorCode<Contract>\n >;\n readonly inputs: BoundInputBuilders<Contract>;\n /** Compile-time only. Reading any member at runtime throws. */\n readonly types: PhaseTypes<Contract, PhaseStateSchema>;\n};\n\n/**\n * Phantom type carriers for one phase: `typeof playing.types.State` is the\n * phase-scoped game state (`state.phase` narrowed to this phase's schema).\n */\nexport type PhaseTypes<\n Contract extends ContractWithPhases,\n PhaseStateSchema extends SchemaLike<object>,\n> = {\n readonly State: BoundPhaseState<Contract, PhaseStateSchema>;\n readonly PhaseState: z.infer<PhaseStateSchema>;\n readonly Tx: ReducerTransaction<\n BoundPhaseState<Contract, PhaseStateSchema>,\n ContractErrorCode<Contract>\n >;\n};\n\n/**\n * Phantom type carriers for the whole game. These replace the\n * `GameStateOf<GameContractOf<typeof model>>` chain: a module that has the\n * bound game value can write `typeof game.types.State` and stop there.\n */\nexport type ContractTypes<Contract extends ContractWithPhases> = {\n readonly Contract: Contract;\n readonly State: BoundState<Contract>;\n readonly Manifest: BoundManifest<Contract>;\n readonly ErrorCode: ContractErrorCode<Contract>;\n readonly PlayerId: PlayerIdOfState<BoundState<Contract>>;\n readonly Queries: TableQueriesOfState<BoundState<Contract>>;\n readonly Tx: ReducerTransaction<\n BoundState<Contract>,\n ContractErrorCode<Contract>\n >;\n};\n\n/**\n * View factories bound to the contract's state and manifest. Grouped under\n * `game.views` so the assembled `views: { shared, player }` map reads the same\n * way it is authored.\n */\nexport type BoundViewBuilders<Contract extends ContractWithPhases> = {\n shared<Projection>(\n definition: SharedViewDefinition<\n BoundState<Contract>,\n BoundManifest<Contract>,\n Projection\n >,\n ): SharedViewDefinition<\n BoundState<Contract>,\n BoundManifest<Contract>,\n Projection\n >;\n player<SharedProjection = unknown, Projection = unknown>(\n definition: PlayerViewDefinition<\n BoundState<Contract>,\n BoundManifest<Contract>,\n SharedProjection,\n Projection\n >,\n ): PlayerViewDefinition<\n BoundState<Contract>,\n BoundManifest<Contract>,\n SharedProjection,\n Projection\n >;\n empty(): import(\"../model\").EmptyViewDefinition<\n BoundState<Contract>,\n BoundManifest<Contract>\n >;\n static<Projection>(\n definition: StaticViewDefinition<\n import(\"../model\").ExactManifestContractOf<Contract>,\n Projection\n >,\n ): StaticViewDefinition<\n import(\"../model\").ExactManifestContractOf<Contract>,\n Projection\n >;\n};\n\n/**\n * Rejects phase keys the model did not declare. `PhaseMapOf<Contract>` already\n * requires every declared phase; this closes the other direction so an extra\n * key fails at `assemble` instead of at runtime.\n */\ntype NoUndeclaredPhases<Contract, Definitions> = {\n [Name in Exclude<\n keyof Definitions,\n PhaseNameOfContract<Contract>\n >]: `Phase '${Name & string}' is not declared in model.phases`;\n};\n\nexport type GameAuthoring<Contract extends ContractWithPhases> = {\n readonly contract: Contract;\n readonly views: BoundViewBuilders<Contract>;\n /** Compile-time only. Reading any member at runtime throws. */\n readonly types: ContractTypes<Contract>;\n /** Assemble the final game definition from phases and views. */\n assemble<\n Definitions extends PhaseMapOf<Contract>,\n Views extends ViewMapOf<Contract>,\n >(\n definition: Omit<\n import(\"../model\").ReducerGameDefinition<Contract, Definitions, Views>,\n \"contract\"\n > & { phases: NoUndeclaredPhases<Contract, Definitions> },\n ): import(\"../model\").ReducerGameDefinition<Contract, Definitions, Views>;\n phase<Name extends PhaseNameOfContract<Contract>>(\n name: Name,\n ): PhaseAuthoring<Contract, PhaseSchemasOfContract<Contract>[Name]>;\n};\n\n/** @deprecated internal alias; use {@link GameAuthoring}. */\nexport type ContractAuthoring<Contract extends ContractWithPhases> =\n GameAuthoring<Contract>;\n\nconst PHANTOM_TYPES_MESSAGE =\n \"`.types` is a compile-time carrier: use it only in `typeof` positions.\";\n\nfunction phantomTypes<Types>(): Types {\n return new Proxy(Object.freeze({}), {\n get() {\n throw new TypeError(PHANTOM_TYPES_MESSAGE);\n },\n }) as Types;\n}\n\ntype AnyPredicate = TargetPredicate<never, never>;\n\nfunction toPredicateList(\n where: AnyPredicate | readonly AnyPredicate[] | undefined,\n): readonly AnyPredicate[] {\n if (!where) return [];\n return Array.isArray(where) ? where : [where as AnyPredicate];\n}\n\nfunction applyWhere<Builder extends { where: (p: never) => Builder }>(\n builder: Builder,\n where: AnyPredicate | readonly AnyPredicate[] | undefined,\n): Builder {\n return toPredicateList(where).reduce(\n (current, predicate) => current.where(predicate as never),\n builder,\n );\n}\n\nfunction createFusedCardInput<\n Contract extends ContractWithPhases,\n>(): BoundCardInput<Contract> {\n return ((options: {\n from: readonly string[];\n where?: AnyPredicate | readonly AnyPredicate[];\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n }) => {\n const target = applyWhere(\n cardTarget.zones<never, string, readonly string[]>(options.from),\n options.where,\n ).build();\n return cardInput({\n target: target as never,\n ...(options.dependsOn ? { dependsOn: options.dependsOn } : {}),\n });\n }) as unknown as BoundCardInput<Contract>;\n}\n\nfunction createFusedBoardInputs<\n Contract extends ContractWithPhases,\n>(): BoundBoardInputs<Contract> {\n const fuse =\n (kind: \"vertex\" | \"edge\" | \"space\" | \"tile\") =>\n (options: {\n boardId: string;\n where?: AnyPredicate | readonly AnyPredicate[];\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n }) => {\n const target = applyWhere(\n boardTarget[kind]<never, string>(options.boardId),\n options.where,\n ).build();\n return boardInput[kind]({\n target: target as never,\n ...(options.dependsOn ? { dependsOn: options.dependsOn } : {}),\n });\n };\n const playerSpace = (options: {\n boardId: string;\n where?: AnyPredicate | readonly AnyPredicate[];\n dependsOn?: readonly InputFieldRef<string, unknown>[];\n }) =>\n boardInput.playerSpace({\n target: applyWhere(\n boardTarget.playerSpace<never, string, string>(options.boardId),\n options.where,\n ).build() as never,\n ...(options.dependsOn ? { dependsOn: options.dependsOn } : {}),\n });\n return {\n vertex: fuse(\"vertex\"),\n edge: fuse(\"edge\"),\n space: fuse(\"space\"),\n tile: fuse(\"tile\"),\n playerSpace,\n } as unknown as BoundBoardInputs<Contract>;\n}\n\nfunction createFusedPromptInput<\n Contract extends ContractWithPhases,\n>(): BoundPromptInput<Contract> {\n return ((options: {\n schema: SchemaLike<unknown>;\n choices?: unknown;\n where?: AnyPredicate | readonly AnyPredicate[];\n }) =>\n promptInput({\n schema: options.schema as z.ZodType<string>,\n ...(options.choices\n ? {\n target: applyWhere(\n choiceTarget.options<CollectorState, string>(\n options.choices as never,\n ),\n options.where,\n ).build(),\n }\n : {}),\n })) as unknown as BoundPromptInput<Contract>;\n}\n\nfunction createBoundInputBuilders<\n Contract extends ContractWithPhases,\n>(): BoundInputBuilders<Contract> {\n return {\n board: createFusedBoardInputs<Contract>(),\n card: createFusedCardInput<Contract>(),\n form: formInput.forState<BoundState<Contract>>(),\n prompt: createFusedPromptInput<Contract>(),\n rng: rngInput as BoundRngInputs<Contract>,\n };\n}\n\nfunction createPhaseAuthoring<\n Contract extends ContractWithPhases,\n PhaseStateSchema extends SchemaLike<object>,\n>(\n _contract: Contract,\n schema: PhaseStateSchema,\n): PhaseAuthoring<Contract, PhaseStateSchema> {\n return {\n interaction: (spec) =>\n defineInteraction<Contract, PhaseStateSchema>()(\n spec as Parameters<\n ReturnType<typeof defineInteraction<Contract, PhaseStateSchema>>\n >[0],\n ) as typeof spec,\n cardAction: (spec) =>\n defineCardAction<Contract, PhaseStateSchema>()(\n spec as unknown as Parameters<\n ReturnType<typeof defineCardAction<Contract, PhaseStateSchema>>\n >[0],\n ) as unknown as typeof spec,\n rule: (rule) =>\n defineInteractionRule<Contract, PhaseStateSchema>()(\n rule as Parameters<\n ReturnType<typeof defineInteractionRule<Contract, PhaseStateSchema>>\n >[0],\n ) as typeof rule,\n define: (definition) =>\n definePhase<Contract>()({\n ...definition,\n state: schema,\n } as Parameters<ReturnType<typeof definePhase<Contract>>>[0]) as never,\n stepPhase: (definition) =>\n defineStepPhase<Contract>()({\n ...definition,\n state: schema,\n } as Parameters<\n ReturnType<typeof defineStepPhase<Contract>>\n >[0]) as never,\n inputs: createBoundInputBuilders<Contract>(),\n types: phantomTypes<PhaseTypes<Contract, PhaseStateSchema>>(),\n };\n}\n\nexport function createContractAuthoring<\n const Contract extends ContractWithPhases,\n>(contract: Contract): GameAuthoring<Contract> {\n const phaseCache = new Map<string, unknown>();\n const views: BoundViewBuilders<Contract> = {\n shared: (definition) => defineSharedView<Contract>()(definition),\n player: (definition) => definePlayerView<Contract>()(definition),\n empty: () => defineEmptyView<Contract>(),\n static: (definition) => defineStaticView<Contract>()(definition),\n };\n const assemble: GameAuthoring<Contract>[\"assemble\"] = (definition) =>\n defineGameDefinition({\n contract,\n ...(definition as Omit<\n import(\"../model\").ReducerGameDefinition<\n Contract,\n PhaseMapOf<Contract>,\n ViewMapOf<Contract>\n >,\n \"contract\"\n >),\n }) as never;\n return {\n contract,\n views,\n types: phantomTypes<ContractTypes<Contract>>(),\n assemble,\n phase: (name) => {\n const cached = phaseCache.get(name);\n if (cached) return cached as never;\n const schema = contract.phases[name];\n const bound = createPhaseAuthoring(contract, schema);\n phaseCache.set(name, bound);\n return bound as never;\n },\n };\n}\n","import { z } from \"zod\";\nimport { createManifestStringLiteralSchema } from \"../model/manifest\";\nimport type {\n ReducerGameContract,\n ReducerManifestContract,\n RuntimeTableRecord,\n SchemaLike,\n StateDefinition,\n} from \"../model\";\nimport {\n type ManifestIdSchemasOf,\n validateStateSchemaIdBranding,\n} from \"./validation\";\n\n/**\n * Narrows a manifest's `literals.phaseNames` and `ids.phaseName` to the\n * author-supplied phase-name tuple. Lets `defineGameContract` override the\n * codegen-emitted `phaseNames: readonly string[]` / `phaseName: z.string()`\n * placeholders so `PhaseNameOfContract<Contract>` resolves to a literal\n * union and flows through `fx.transition`, `PhaseMapOf`, and the flow\n * state's `currentPhase`.\n */\nexport type NarrowManifestPhaseNames<\n Manifest,\n PhaseNames extends readonly string[],\n> = Manifest & {\n literals: Manifest extends { literals: infer L }\n ? Omit<L, \"phaseNames\"> & { phaseNames: PhaseNames }\n : { phaseNames: PhaseNames };\n ids: Manifest extends { ids: infer I }\n ? Omit<I, \"phaseName\"> & { phaseName: z.ZodType<PhaseNames[number]> }\n : { phaseName: z.ZodType<PhaseNames[number]> };\n};\n\nexport type ReducerGameContractInput<\n Table extends RuntimeTableRecord,\n Manifest extends ReducerManifestContract<\n Table,\n string,\n string,\n string,\n string,\n string\n >,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n Phases extends Record<string, SchemaLike<object>>,\n Errors extends Record<string, string> | undefined = undefined,\n> = {\n manifest: Manifest;\n state: StateDefinition<PublicSchema, PrivateSchema, HiddenSchema>;\n phases: Phases;\n errors?: Errors;\n};\n\nexport type DefinedGameContract<\n Table extends RuntimeTableRecord,\n Manifest extends ReducerManifestContract<\n Table,\n string,\n string,\n string,\n string,\n string\n >,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n Phases extends Record<string, SchemaLike<object>>,\n Errors extends Record<string, string> | undefined = undefined,\n> = ReducerGameContract<\n Table,\n NarrowManifestPhaseNames<Manifest, readonly (keyof Phases & string)[]>,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n> & {\n readonly phases: Phases;\n readonly errors: Errors;\n readonly phaseNames: readonly (keyof Phases & string)[];\n readonly schemas: ManifestIdSchemasOf<\n NarrowManifestPhaseNames<\n Manifest,\n readonly (keyof Phases & string)[]\n >[\"ids\"]\n >;\n};\n\nfunction validateErrorMap(errors: Record<string, string> | undefined): void {\n if (!errors) return;\n const codePattern = /^[A-Z][A-Z0-9_]*$/;\n for (const [code, message] of Object.entries(errors)) {\n if (!codePattern.test(code)) {\n throw new Error(\n `defineGameContract: error code '${code}' must use UPPER_SNAKE_CASE.`,\n );\n }\n if (typeof message !== \"string\" || message.length === 0) {\n throw new Error(\n `defineGameContract: error code '${code}' must declare a non-empty default message.`,\n );\n }\n }\n}\n\nexport function defineGameContract<\n Table extends RuntimeTableRecord,\n const Manifest extends ReducerManifestContract<\n Table,\n string,\n string,\n string,\n string,\n string\n >,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n const Phases extends Record<string, SchemaLike<object>>,\n const Errors extends Record<string, string> | undefined = undefined,\n>(\n definition: ReducerGameContractInput<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >,\n): DefinedGameContract<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n> {\n validateStateSchemaIdBranding(definition.state.public, \"public\");\n validateStateSchemaIdBranding(definition.state.private, \"private\");\n validateStateSchemaIdBranding(definition.state.hidden, \"hidden\");\n validateErrorMap(definition.errors);\n const phaseNames = Object.keys(definition.phases) as (keyof Phases &\n string)[];\n if (phaseNames.length === 0) {\n throw new Error(\n \"defineGameContract: phases must be a non-empty record of phase schemas.\",\n );\n }\n for (const name of phaseNames) {\n if (typeof name !== \"string\" || name.length === 0) {\n throw new Error(\n \"defineGameContract: phase names must be non-empty strings.\",\n );\n }\n }\n const phaseNameSchema = createManifestStringLiteralSchema(phaseNames);\n const narrowedManifest = {\n ...definition.manifest,\n literals: {\n ...definition.manifest.literals,\n phaseNames,\n },\n ids: {\n ...definition.manifest.ids,\n phaseName: phaseNameSchema,\n },\n } as unknown as NarrowManifestPhaseNames<\n Manifest,\n readonly (keyof Phases & string)[]\n >;\n const contract = {\n manifest: narrowedManifest,\n state: definition.state,\n phases: definition.phases,\n errors: definition.errors,\n phaseNames,\n schemas: narrowedManifest.ids,\n } as DefinedGameContract<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >;\n return contract;\n}\n","import { compileManifest } from \"../manifest/compiler\";\nimport type {\n AuthoredManifest,\n CompiledManifest,\n ManifestTable,\n} from \"../manifest/types\";\nimport type {\n PhaseMapOf,\n PhaseNameOfContract,\n ReducerGameDefinition,\n ReducerManifestContract,\n RuntimeTableRecord,\n SchemaLike,\n ViewMapOf,\n} from \"../model\";\nimport { createContractAuthoring } from \"./contract-authoring\";\nimport {\n defineGameContract,\n type DefinedGameContract,\n type ReducerGameContractInput,\n} from \"./contract\";\nimport type { AnyReducerGameContract } from \"./types\";\nimport {\n validateDefineGamePhaseNames,\n validateDefineGameSimultaneousPhases,\n validateDefineGameZoneWiring,\n} from \"./validation\";\n\nexport function defineGameDefinition<\n const Contract extends AnyReducerGameContract,\n Definitions extends PhaseMapOf<Contract>,\n Views extends ViewMapOf<Contract>,\n>(\n definition: { contract: Contract } & Omit<\n ReducerGameDefinition<NoInfer<Contract>, Definitions, Views>,\n \"contract\"\n >,\n): ReducerGameDefinition<Contract, Definitions, Views> {\n validateDefineGamePhaseNames(definition);\n validateDefineGameSimultaneousPhases(definition);\n validateDefineGameZoneWiring(definition);\n return definition;\n}\n\n/**\n * Creates the bound authoring object for a model without assembling the game.\n *\n * This is the module-level primitive behind {@link defineGame}: the returned\n * value is the type leaf (`typeof game.types.State`), the factory namespace\n * (`game.phase(name)`, `game.views.*`), and the assembler (`game.assemble`).\n * Phase files import it directly, so no factory wrappers or `*AuthoringOf`\n * parameter types are needed.\n */\nexport function createGame<\n const Manifest extends AuthoredManifest,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n const Phases extends Record<string, SchemaLike<object>>,\n const Errors extends Record<string, string> | undefined = undefined,\n>(model: {\n manifest: Manifest;\n state: { public: PublicSchema; private: PrivateSchema; hidden: HiddenSchema };\n phases: Phases;\n errors?: Errors;\n}): import(\"./contract-authoring\").GameAuthoring<\n DefinedGameContract<\n ManifestTable<Manifest>,\n CompiledManifest<Manifest>,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >\n>;\n\nexport function createGame<\n Table extends RuntimeTableRecord,\n const Manifest extends ReducerManifestContract<\n Table,\n string,\n string,\n string,\n string,\n string\n >,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n const Phases extends Record<string, SchemaLike<object>>,\n const Errors extends Record<string, string> | undefined = undefined,\n>(\n model: ReducerGameContractInput<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >,\n): import(\"./contract-authoring\").GameAuthoring<\n DefinedGameContract<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >\n>;\nexport function createGame(\n model:\n | ReducerGameContractInput<\n RuntimeTableRecord,\n ReducerManifestContract<\n RuntimeTableRecord,\n string,\n string,\n string,\n string,\n string\n >,\n SchemaLike<object>,\n SchemaLike<object>,\n SchemaLike<object>,\n Record<string, SchemaLike<object>>,\n Record<string, string> | undefined\n >\n | {\n manifest: AuthoredManifest;\n state: {\n public: SchemaLike<object>;\n private: SchemaLike<object>;\n hidden: SchemaLike<object>;\n };\n phases: Record<string, SchemaLike<object>>;\n errors?: Record<string, string>;\n },\n): unknown {\n const manifest =\n \"literals\" in model.manifest\n ? model.manifest\n : compileManifest(model.manifest);\n return createContractAuthoring(defineGameContract({ ...model, manifest }));\n}\n\n/**\n * Rejects phase keys that the model did not declare. `PhaseMapOf<Contract>`\n * already requires every declared phase; this closes the other direction so\n * an extra key fails at the `defineGame` return instead of at runtime.\n */\ntype NoUndeclaredPhases<Contract, Definitions> = {\n [Name in Exclude<\n keyof Definitions,\n PhaseNameOfContract<Contract>\n >]: `Phase '${Name & string}' is not declared in model.phases`;\n};\n\n/**\n * Defines the complete game through two deliberate inference stages.\n *\n * The model argument establishes manifest ids, state schemas, phase names,\n * phase-state schemas, and error codes. The implementation callback then\n * receives helpers bound to that fixed model. Authors may keep the callback\n * in one file or pass the bound helpers to any module structure they prefer.\n */\nexport function defineGame<\n Table extends RuntimeTableRecord,\n const Manifest extends ReducerManifestContract<\n Table,\n string,\n string,\n string,\n string,\n string\n >,\n PublicSchema extends SchemaLike<object>,\n PrivateSchema extends SchemaLike<object>,\n HiddenSchema extends SchemaLike<object>,\n const Phases extends Record<string, SchemaLike<object>>,\n const Errors extends Record<string, string> | undefined = undefined,\n Contract extends DefinedGameContract<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n > = DefinedGameContract<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >,\n Definitions extends PhaseMapOf<Contract> = PhaseMapOf<Contract>,\n Views extends ViewMapOf<Contract> = ViewMapOf<Contract>,\n>(\n model: ReducerGameContractInput<\n Table,\n Manifest,\n PublicSchema,\n PrivateSchema,\n HiddenSchema,\n Phases,\n Errors\n >,\n implement: (\n game: import(\"./contract-authoring\").GameAuthoring<Contract>,\n ) => Omit<ReducerGameDefinition<Contract, Definitions, Views>, \"contract\"> & {\n phases: NoUndeclaredPhases<Contract, Definitions>;\n },\n): ReducerGameDefinition<Contract, Definitions, Views> {\n const contract = defineGameContract(model) as Contract;\n const authoring = createContractAuthoring(contract);\n // The intersection with `NoUndeclaredPhases` only exists to reject extra\n // keys at the call site; the assembled definition keeps the inferred map.\n const implemented: Omit<\n ReducerGameDefinition<Contract, Definitions, Views>,\n \"contract\"\n > = implement(authoring);\n return defineGameDefinition<Contract, Definitions, Views>({\n contract,\n ...implemented,\n });\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z","initial","z"]}
|