@dreamboard-games/sdk 0.4.0-alpha.13 → 0.4.0-alpha.14
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 +29 -11
- package/dist/authoring/index.d.ts +3 -6
- package/dist/authoring/index.js +2 -2
- package/dist/authoring-compiler.d.ts +3 -3
- package/dist/authoring-compiler.js +3 -4
- package/dist/authoring-materialize-cli.js +5 -6
- package/dist/authoring-materialize-cli.js.map +1 -1
- package/dist/browser-interaction.d.ts +21 -21
- package/dist/{chunk-3PFDHTR7.js → chunk-3VSOH3TZ.js} +29 -2
- package/dist/chunk-3VSOH3TZ.js.map +1 -0
- package/dist/{chunk-OFIDC7DJ.js → chunk-73YISGYO.js} +4 -4
- package/dist/chunk-73YISGYO.js.map +1 -0
- package/dist/{chunk-YNW3KBDE.js → chunk-7QKE5BFU.js} +2 -2
- package/dist/{chunk-KZFHTUI5.js → chunk-CHOXM43O.js} +4 -4
- package/dist/chunk-CSIEFYTC.js +9 -0
- package/dist/chunk-CSIEFYTC.js.map +1 -0
- package/dist/{chunk-MLFHVYF7.js → chunk-KH6AET7P.js} +4 -4
- package/dist/chunk-KH6AET7P.js.map +1 -0
- package/dist/{chunk-MPVC2SU6.js → chunk-LMHCGCA6.js} +2 -2
- package/dist/{chunk-WAQUD4IG.js → chunk-NLZDRIVW.js} +16 -16
- package/dist/{chunk-5XTAQ4EQ.js → chunk-TO6WRLRN.js} +2 -2
- package/dist/{chunk-42HQLHVA.js → chunk-VJVKGWHW.js} +4 -7
- package/dist/chunk-VJVKGWHW.js.map +1 -0
- package/dist/{chunk-YOLIZMXR.js → chunk-VRRR6QZT.js} +3 -3
- package/dist/{chunk-YOLIZMXR.js.map → chunk-VRRR6QZT.js.map} +1 -1
- package/dist/{chunk-XDGRC6OR.js → chunk-WASWAYYX.js} +3 -3
- package/dist/{chunk-7JBPOJOF.js → chunk-ZGQGFXFG.js} +9 -9
- package/dist/{index.d-C7Ztirg6.d.ts → index.d-90ms7Mwh.d.ts} +124 -115
- package/dist/index.js +2 -2
- package/dist/package-set.d.ts +2 -2
- package/dist/package-set.js +2 -2
- package/dist/reducer/advanced.js +3 -3
- package/dist/reducer-contract.d.ts +1 -1
- package/dist/reducer-contract.js +3 -1
- package/dist/reducer.d.ts +1 -1
- package/dist/reducer.js +3 -3
- package/dist/reference-games/index.d.ts +29 -11
- package/dist/reference-games/index.js +43 -45
- package/dist/reference-games/index.js.map +1 -1
- package/dist/runtime/primitives.js +4 -4
- package/dist/runtime/workspace-contract.js +8 -8
- package/dist/runtime.js +12 -12
- package/dist/testing-compiler.d.ts +1 -1
- package/dist/testing-compiler.js +1 -4
- package/dist/testing-compiler.js.map +1 -1
- package/dist/testing-runtime.d.ts +3 -3
- package/dist/testing-runtime.js +5 -5
- package/dist/testing.d.ts +5 -140
- package/dist/testing.js +5 -450
- package/dist/testing.js.map +1 -1
- package/dist/{types-B-FI0jrx.d.ts → types-Cs_Jp0cf.d.ts} +1 -1
- package/dist/ui/components.js +1 -1
- package/dist/ui.js +2 -2
- package/package.json +22 -29
- package/REFERENCE.md +0 -25375
- package/dist/chunk-3PFDHTR7.js.map +0 -1
- package/dist/chunk-42HQLHVA.js.map +0 -1
- package/dist/chunk-MLFHVYF7.js.map +0 -1
- package/dist/chunk-OFIDC7DJ.js.map +0 -1
- package/dist/chunk-THWT4V3Z.js +0 -12
- package/dist/chunk-THWT4V3Z.js.map +0 -1
- package/dist/chunk-UNVCT5Z7.js +0 -73
- package/dist/chunk-UNVCT5Z7.js.map +0 -1
- package/dist/chunk-UTSBXZAM.js +0 -435
- package/dist/chunk-UTSBXZAM.js.map +0 -1
- package/dist/chunk-YN5W67YL.js +0 -174
- package/dist/chunk-YN5W67YL.js.map +0 -1
- package/dist/reference-game-compiler.d.ts +0 -45
- package/dist/reference-game-compiler.js +0 -25
- package/dist/reference-game-compiler.js.map +0 -1
- package/dist/reference-game-source-manifest-cli.d.ts +0 -1
- package/dist/reference-game-source-manifest-cli.js +0 -84
- package/dist/reference-game-source-manifest-cli.js.map +0 -1
- package/dist/schema-CJc0UfjJ.d.ts +0 -216
- /package/dist/{chunk-YNW3KBDE.js.map → chunk-7QKE5BFU.js.map} +0 -0
- /package/dist/{chunk-KZFHTUI5.js.map → chunk-CHOXM43O.js.map} +0 -0
- /package/dist/{chunk-MPVC2SU6.js.map → chunk-LMHCGCA6.js.map} +0 -0
- /package/dist/{chunk-WAQUD4IG.js.map → chunk-NLZDRIVW.js.map} +0 -0
- /package/dist/{chunk-5XTAQ4EQ.js.map → chunk-TO6WRLRN.js.map} +0 -0
- /package/dist/{chunk-XDGRC6OR.js.map → chunk-WASWAYYX.js.map} +0 -0
- /package/dist/{chunk-7JBPOJOF.js.map → chunk-ZGQGFXFG.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../reducer-contract/generated/zod.ts","../../reducer-contract/generated/version.ts","../../reducer-contract/generated/builders.ts"],"sourcesContent":["// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/* eslint-disable */\nimport { z } from \"zod\";\n\nexport const ReducerContractVersionSchema = z.string().regex(new RegExp(\"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\"));\n\nexport const EffectIdSchema = z.string().min(1);\n\nlet JsonValueSchemaInternal: z.ZodType<unknown>;\nJsonValueSchemaInternal = z.lazy(() => z.union([z.record(z.string(), JsonValueSchemaInternal), z.array(JsonValueSchemaInternal), z.string(), z.number(), z.boolean(), z.null()]));\nexport const JsonValueSchema = JsonValueSchemaInternal;\n\nexport const ContinuationTokenSchema = z.object({ \"id\": z.string().min(1), \"data\": JsonValueSchema }).strict();\n\nexport const ContinuationMapSchema = z.record(z.string(), ContinuationTokenSchema);\n\nexport const ReducerSetupSelectionSchema = z.object({ \"profileId\": z.string().min(1), \"optionValues\": z.record(z.string(), z.union([z.string(), z.null()])) }).strict();\n\nexport const RngOperationParameterSchema = z.union([z.string(), z.number().finite(), z.boolean()]);\n\nexport const RngOperationSchema = z.object({ \"kind\": z.string().min(1), \"parameters\": z.record(z.string(), RngOperationParameterSchema) }).strict();\n\nexport const RngDrawSchema = z.object({ \"index\": z.number().int().gte(0), \"cursorBefore\": z.number().int().gte(0), \"cursorAfter\": z.number().int().gte(0), \"operation\": RngOperationSchema }).strict();\n\nexport const RngStateSchema = z.object({ \"seed\": z.union([z.number().refine(Number.isInteger, { message: \"Expected integer\" }), z.null()]), \"cursor\": z.number().int(), \"trace\": z.array(z.string()), \"draws\": z.array(RngDrawSchema).optional() }).strict();\n\nexport const ReducerFlowStateSchema = z.object({ \"currentPhase\": z.string().min(1), \"turn\": z.number().int(), \"round\": z.number().int(), \"activePlayers\": z.array(z.string().min(1)) }).strict();\n\nexport const RuntimeSimultaneousSubmissionSchema = z.object({ \"interactionId\": z.string().min(1), \"params\": JsonValueSchema }).strict();\n\nexport const RuntimeSimultaneousCurrentSchema = z.object({ \"phaseName\": z.string().min(1), \"actors\": z.array(z.string().min(1)), \"submissions\": z.record(z.string(), RuntimeSimultaneousSubmissionSchema) }).strict();\n\nexport const RuntimeSimultaneousStateSchema = z.object({ \"current\": z.union([RuntimeSimultaneousCurrentSchema, z.null()]) }).strict();\n\nexport const TransitionRecordSchema = z.object({ \"from\": z.string().min(1), \"to\": z.string().min(1) }).strict();\n\nexport const ReducerRuntimeStateSchema = z.object({ \"rng\": RngStateSchema, \"setup\": z.union([ReducerSetupSelectionSchema, z.null()]), \"simultaneous\": RuntimeSimultaneousStateSchema, \"lastTransition\": z.union([TransitionRecordSchema, z.null()]) }).strict();\n\nexport const ReducerDomainStateSchema = z.object({ \"table\": JsonValueSchema, \"publicState\": JsonValueSchema, \"privateState\": z.record(z.string(), JsonValueSchema), \"hiddenState\": JsonValueSchema, \"flow\": ReducerFlowStateSchema, \"phase\": JsonValueSchema }).strict();\n\nexport const ReducerSessionMetaSchema = z.object({ \"contractFingerprint\": z.string().regex(new RegExp(\"^cfp[0-9]+:[a-f0-9]{16}$\")) }).strict();\n\nexport const ReducerSessionStateSchema = z.object({ \"meta\": ReducerSessionMetaSchema.optional(), \"domain\": ReducerDomainStateSchema, \"runtime\": ReducerRuntimeStateSchema }).strict();\n\nexport const GameInputInteractionSchema = z.object({ \"kind\": z.literal(\"interaction\"), \"playerId\": z.string().min(1), \"interactionId\": z.string().min(1), \"params\": JsonValueSchema }).strict();\n\nexport const GameInputSchema = z.discriminatedUnion(\"kind\", [GameInputInteractionSchema]);\n\nexport const EffectTransitionSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"transition\"), \"to\": z.string().min(1) }).strict();\n\nexport const EffectRollDieSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"rollDie\"), \"dieId\": z.string().min(1) }).strict();\n\nexport const EffectShuffleSharedZoneSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"shuffleSharedZone\"), \"zoneId\": z.string().min(1) }).strict();\n\nexport const EffectShufflePlayerZoneSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"shufflePlayerZone\"), \"zoneId\": z.string().min(1), \"playerId\": z.string().min(1) }).strict();\n\nexport const EffectSchema = z.discriminatedUnion(\"type\", [EffectTransitionSchema, EffectRollDieSchema, EffectShuffleSharedZoneSchema, EffectShufflePlayerZoneSchema]);\n\nexport const ReducerInputValidationResultSchema = z.object({ \"valid\": z.boolean(), \"errorCode\": z.string().optional(), \"message\": z.string().optional() }).strict();\n\nexport const InitializeRequestSchema = z.object({ \"table\": JsonValueSchema, \"playerIds\": z.array(z.string().min(1)), \"rngSeed\": z.union([z.number().refine(Number.isInteger, { message: \"Expected integer\" }), z.null()]).optional(), \"setup\": z.union([ReducerSetupSelectionSchema, z.null()]).optional() }).strict();\n\nexport const InitializePhaseRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"to\": z.string().min(1) }).strict();\n\nexport const ValidateInputRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const ReduceRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const DispatchRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const ReduceResultRejectSchema = z.object({ \"kind\": z.literal(\"reject\"), \"errorCode\": z.string().min(1), \"message\": z.string().optional() }).strict();\n\nexport const GameOutcomeReasonSchema = z.object({ \"code\": z.string().min(1), \"message\": z.string().min(1).optional() }).strict();\n\nexport const OutcomeResultSchema = z.enum([\"win\", \"draw\", \"loss\", \"eliminated\"]);\n\nexport const OutcomeScoreComponentSchema = z.object({ \"id\": z.string().min(1), \"label\": z.string().min(1), \"value\": z.number().finite() }).strict();\n\nexport const OutcomeTieBreakSchema = z.object({ \"id\": z.string().min(1), \"label\": z.string().min(1), \"value\": z.union([z.number().finite(), z.string()]) }).strict();\n\nexport const OutcomeStandingSchema = z.object({ \"playerId\": z.string().min(1), \"rank\": z.number().int().gte(1), \"result\": OutcomeResultSchema, \"score\": z.number().finite().optional(), \"scoreBreakdown\": z.array(OutcomeScoreComponentSchema).optional(), \"tieBreaks\": z.array(OutcomeTieBreakSchema).optional() }).strict();\n\nexport const GameOutcomeSchema = z.object({ \"reason\": GameOutcomeReasonSchema, \"standings\": z.array(OutcomeStandingSchema).min(1) }).strict();\n\nexport const GameEventDetailSchema = z.object({ \"label\": z.string().min(1), \"value\": z.union([z.string(), z.number().finite(), z.boolean()]) }).strict();\n\nexport const SystemActionEventSchema = z.object({ \"kind\": z.literal(\"systemAction\"), \"procedureId\": z.string().min(1), \"title\": z.string().min(1), \"summary\": z.string().min(1).optional(), \"details\": z.array(GameEventDetailSchema).max(16).optional() }).strict();\n\nexport const GameEventSchema = z.discriminatedUnion(\"kind\", [SystemActionEventSchema]);\n\nexport const ReduceResultAcceptSchema = z.object({ \"kind\": z.literal(\"accept\"), \"state\": ReducerSessionStateSchema, \"terminal\": GameOutcomeSchema.optional(), \"effects\": z.array(EffectSchema), \"continuations\": ContinuationMapSchema, \"events\": z.array(GameEventSchema).max(32) }).strict();\n\nexport const ReduceResultSchema = z.discriminatedUnion(\"kind\", [ReduceResultRejectSchema, ReduceResultAcceptSchema]);\n\nexport const DispatchTraceAcceptedClientInputSchema = z.object({ \"kind\": z.literal(\"acceptedClientInput\"), \"input\": GameInputSchema }).strict();\n\nexport const DispatchTraceAppliedEffectSchema = z.object({ \"kind\": z.literal(\"appliedEffect\"), \"effect\": EffectSchema, \"continuation\": ContinuationTokenSchema.optional() }).strict();\n\nexport const DispatchTraceRngConsumptionSchema = z.object({ \"kind\": z.literal(\"rngConsumption\"), \"version\": z.literal(2), \"operation\": z.string().min(1), \"drawIndex\": z.number().int().gte(0), \"traceEntry\": z.string() }).strict();\n\nexport const DispatchTraceSchema = z.discriminatedUnion(\"kind\", [DispatchTraceAcceptedClientInputSchema, DispatchTraceAppliedEffectSchema, DispatchTraceRngConsumptionSchema]);\n\nexport const DispatchResultRejectSchema = z.object({ \"kind\": z.literal(\"reject\"), \"errorCode\": z.string().min(1), \"message\": z.string().optional() }).strict();\n\nexport const DispatchResultAcceptSchema = z.object({ \"kind\": z.literal(\"accept\"), \"state\": ReducerSessionStateSchema, \"terminal\": GameOutcomeSchema.optional(), \"trace\": z.array(DispatchTraceSchema), \"events\": z.array(GameEventSchema).max(32) }).strict();\n\nexport const DispatchResultSchema = z.discriminatedUnion(\"kind\", [DispatchResultRejectSchema, DispatchResultAcceptSchema]);\n\nexport const ReducerRuntimeLogEntryAcceptedClientInputSchema = z.object({ \"kind\": z.literal(\"acceptedClientInput\"), \"version\": z.number().int(), \"input\": GameInputSchema }).strict();\n\nexport const ReducerRuntimeLogEntryAppliedEffectSchema = z.object({ \"kind\": z.literal(\"appliedEffect\"), \"version\": z.number().int(), \"effect\": EffectSchema, \"continuation\": z.union([ContinuationTokenSchema, z.null()]) }).strict();\n\nexport const ReducerRuntimeLogEntryRngConsumptionSchema = z.object({ \"kind\": z.literal(\"rngConsumption\"), \"version\": z.number().int(), \"operation\": z.string().min(1), \"drawIndex\": z.number().int().gte(0).optional(), \"traceEntry\": z.string() }).strict();\n\nexport const ReducerRuntimeLogEntryStateCommitSchema = z.object({ \"kind\": z.literal(\"stateCommit\"), \"version\": z.number().int(), \"state\": ReducerSessionStateSchema }).strict();\n\nexport const ReducerRuntimeLogEntrySchema = z.discriminatedUnion(\"kind\", [ReducerRuntimeLogEntryAcceptedClientInputSchema, ReducerRuntimeLogEntryAppliedEffectSchema, ReducerRuntimeLogEntryRngConsumptionSchema, ReducerRuntimeLogEntryStateCommitSchema]);\n\nexport const SeatProjectionSchema = z.object({ \"view\": JsonValueSchema.optional(), \"availableInteractionRefs\": JsonValueSchema.optional(), \"zones\": JsonValueSchema.optional() }).strict();\n\nexport const SimultaneousPhaseProjectionSchema = z.object({ \"phaseName\": z.string().min(1), \"interactionId\": z.string().min(1), \"actorIds\": z.array(z.string().min(1)), \"sealedPlayerIds\": z.array(z.string().min(1)), \"pendingPlayerIds\": z.array(z.string().min(1)) }).strict();\n\nexport const SchedulerContinuationDependencySchema = z.object({ \"waiterPlayerId\": z.string().min(1), \"blockerPlayerIds\": z.array(z.string().min(1)) }).strict();\n\nexport const SchedulerFlowAuthorityProjectionSchema = z.object({ \"version\": z.literal(1), \"activePlayerIds\": z.array(z.string().min(1)), \"pendingPlayerIds\": z.array(z.string().min(1)), \"continuationDependencies\": z.array(SchedulerContinuationDependencySchema) }).strict();\n\nexport const ProjectionTimingMetadataSchema = z.object({ \"resolveAvailableInteractionsMs\": z.number().finite().gte(0), \"resolveViewMs\": z.number().finite().gte(0), \"resolveZoneHandlesMs\": z.number().finite().gte(0), \"descriptorHashMs\": z.number().finite().gte(0) }).strict();\n\nexport const SeatProjectionBundleSchema = z.object({ \"currentStage\": z.union([z.string().min(1), z.null()]).optional(), \"stageSeats\": z.array(z.string().min(1)).optional(), \"simultaneousPhase\": z.union([SimultaneousPhaseProjectionSchema, z.null()]).optional(), \"schedulerFlow\": SchedulerFlowAuthorityProjectionSchema.optional(), \"sharedView\": JsonValueSchema.optional(), \"interactionsByRef\": JsonValueSchema.optional(), \"seats\": z.record(z.string(), SeatProjectionSchema), \"timing\": ProjectionTimingMetadataSchema.optional() }).strict();\n\nexport const ProjectSeatsDynamicRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"playerIds\": z.array(z.string().min(1)), \"projectionMode\": z.union([z.enum([\"full\", \"actionsOnly\"]), z.null()]).optional() }).strict();\n\nexport const BoardStaticProjectionSchema = z.object({ \"view\": JsonValueSchema, \"hash\": z.string().min(1), \"manifestVersion\": z.string() }).strict();\n","// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/**\n * The wire-protocol version this package implements. Bumped in lockstep with\n * any breaking change to schema/reducer-runtime.schema.json. At bundle load\n * time hosts refuse bundles whose major version differs.\n */\nexport const REDUCER_CONTRACT_VERSION = \"0.4.0\" as const;\n","// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/* eslint-disable */\nimport type * as Wire from \"./wire\";\n\n/**\n * Typed effect constructors. Authors MUST go through these; hand-constructing\n * Wire.Effect objects is banned by convention because it's how wire drift\n * re-enters the codebase.\n *\n * The `effectId` is minted by the runtime (see createEffectIdMinter below),\n * not by the author. Each builder returns a `PendingEffect` that carries\n * the optional continuation; the reducer bundle's accept materializer splits\n * pending effects into the wire's `effects[]` + `continuations` map.\n */\n\nexport type PendingEffect = Wire.Effect & {\n readonly __continuation?: Wire.ContinuationToken;\n};\n\nexport type EffectIdMinter = () => Wire.EffectId;\n\n/**\n * Produces sequential, deterministic effect ids scoped to a single accept\n * payload: \"ef0\", \"ef1\", ... . Uniqueness only needs to be local to the\n * payload because the host consumes and discards them per dispatch.\n */\nexport function createEffectIdMinter(): EffectIdMinter {\n let i = 0;\n return () => `ef${i++}` as Wire.EffectId;\n}\n\nexport type EffectBuilders = {\n transition(args: { to: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n rollDie(args: { dieId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n shuffleSharedZone(args: { zoneId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n shufflePlayerZone(args: { zoneId: string; playerId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n};\n\nexport function createEffectBuilders(mint: EffectIdMinter): EffectBuilders {\n return {\n transition(args, continuation) {\n const effect = { effectId: mint(), type: \"transition\" as const, to: args.to };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n rollDie(args, continuation) {\n const effect = { effectId: mint(), type: \"rollDie\" as const, dieId: args.dieId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n shuffleSharedZone(args, continuation) {\n const effect = { effectId: mint(), type: \"shuffleSharedZone\" as const, zoneId: args.zoneId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n shufflePlayerZone(args, continuation) {\n const effect = { effectId: mint(), type: \"shufflePlayerZone\" as const, zoneId: args.zoneId, playerId: args.playerId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n };\n}\n\n/**\n * Takes a list of PendingEffects and splits them into the canonical wire\n * shape: `effects[]` (stripped of `__continuation`) + `continuations` map\n * keyed by effectId. Use at the boundary where reduce/dispatch results leave\n * author code and enter the wire.\n */\nexport function materializeAccept(pending: ReadonlyArray<PendingEffect>): {\n effects: Wire.Effect[];\n continuations: Wire.ContinuationMap;\n} {\n const effects: Wire.Effect[] = [];\n const continuations: Wire.ContinuationMap = {};\n for (const pe of pending) {\n const { __continuation, ...effect } = pe as PendingEffect & { __continuation?: Wire.ContinuationToken };\n effects.push(effect as Wire.Effect);\n if (__continuation !== undefined) {\n continuations[(effect as Wire.Effect).effectId] = __continuation;\n }\n }\n return { effects, continuations };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/authoring/materialize-workspace.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { WORKSPACE_CODEGEN_OWNERSHIP } from \"@dreamboard-games/workspace-codegen\";\nimport { build } from \"esbuild\";\nimport { compareReferenceGameCanonicalStrings } from \"../reference-games/canonical.js\";\nimport { generateWorkspaceArtifacts } from \"./adapter.js\";\n\nexport type MaterializeWorkspaceOptions = {\n readonly manifestPath: string;\n readonly projectRoot?: string;\n /** Scaffolding-only. Existing build/test paths leave seed files untouched. */\n readonly writeMissingSeeds?: boolean;\n};\n\nexport type MaterializedWorkspaceReceipt = {\n readonly schemaVersion: 1;\n readonly projectRoot: string;\n readonly authoritativeFiles: number;\n readonly seededFiles: number;\n readonly artifacts: readonly {\n readonly path: string;\n readonly ownership: \"authoritative\";\n readonly sha256: `sha256:${string}`;\n }[];\n readonly digest: `sha256:${string}`;\n};\n\ntype ManifestModule = {\n readonly default?: unknown;\n readonly manifest?: unknown;\n};\n\nconst authoritativePaths = new Set(\n WORKSPACE_CODEGEN_OWNERSHIP.dynamic.generatedFiles,\n);\n\n/**\n * Materialize SDK-owned workspace contracts from authored manifest source.\n * Authoritative files are always replaced. Seed files are untouched unless a\n * scaffolding caller explicitly opts in. No test state or projection artifact\n * is emitted.\n */\nexport async function materializeWorkspace(\n options: MaterializeWorkspaceOptions,\n): Promise<MaterializedWorkspaceReceipt> {\n const projectRoot = path.resolve(options.projectRoot ?? process.cwd());\n const manifestPath = resolveProjectPath(projectRoot, options.manifestPath);\n if (!(await isFile(manifestPath))) {\n throw new Error(`Manifest source does not exist: ${manifestPath}.`);\n }\n const manifest = await loadManifest({ manifestPath, projectRoot });\n const artifacts = generateWorkspaceArtifacts(manifest);\n const emittedAuthoritative = new Set(\n artifacts\n .filter(({ ownership }) => ownership === \"authoritative\")\n .map(({ path: artifactPath }) => artifactPath),\n );\n assertExactAuthoritativeInventory(emittedAuthoritative);\n\n let seededFiles = 0;\n const records: Array<{\n readonly path: string;\n readonly ownership: \"authoritative\";\n readonly sha256: `sha256:${string}`;\n }> = [];\n for (const artifact of artifacts) {\n const destination = resolveProjectPath(projectRoot, artifact.path);\n if (artifact.ownership === \"seed\") {\n if (!options.writeMissingSeeds || (await isFile(destination))) {\n continue;\n }\n }\n await mkdir(path.dirname(destination), { recursive: true });\n if (artifact.ownership === \"authoritative\") {\n await writeAuthoritativeFile(destination, artifact.content);\n } else {\n await writeFile(destination, artifact.content);\n }\n if (artifact.ownership === \"seed\") {\n seededFiles += 1;\n continue;\n }\n const bytes = await readFile(destination);\n const actual = createHash(\"sha256\").update(bytes).digest(\"hex\");\n if (actual !== artifact.contentSha256) {\n throw new Error(\n `Generated ${artifact.path} digest does not match its SDK receipt.`,\n );\n }\n records.push({\n path: artifact.path,\n ownership: \"authoritative\",\n sha256: `sha256:${actual}`,\n });\n }\n records.sort((left, right) =>\n compareReferenceGameCanonicalStrings(left.path, right.path),\n );\n return {\n schemaVersion: 1,\n projectRoot,\n authoritativeFiles: records.length,\n seededFiles,\n artifacts: records,\n digest: `sha256:${createHash(\"sha256\")\n .update(JSON.stringify(records))\n .digest(\"hex\")}`,\n };\n}\n\nasync function loadManifest(options: {\n readonly manifestPath: string;\n readonly projectRoot: string;\n}): Promise<unknown> {\n const typesEntry = await resolveCurrentSdkTypesFacade();\n const entryPath = path.join(\n options.projectRoot,\n \"node_modules/.cache/dreamboard-workspace-compiler\",\n `manifest-${process.pid}-${randomUUID()}.mjs`,\n );\n await mkdir(path.dirname(entryPath), { recursive: true });\n try {\n const result = await build({\n entryPoints: [options.manifestPath],\n outfile: entryPath,\n absWorkingDir: options.projectRoot,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node24\",\n alias: {\n \"@dreamboard-games/sdk/types\": typesEntry,\n },\n sourcemap: \"inline\",\n logLevel: \"silent\",\n });\n void result;\n const loaded = (await import(\n pathToFileURL(entryPath).href\n )) as ManifestModule;\n const manifest = loaded.manifest ?? loaded.default;\n if (!manifest || typeof manifest !== \"object\") {\n throw new Error(\"Manifest source must export a manifest object.\");\n }\n return manifest;\n } finally {\n await rm(entryPath, { force: true });\n }\n}\n\nasync function resolveCurrentSdkTypesFacade(): Promise<string> {\n const candidates = [\n path.resolve(import.meta.dirname, \"../types.ts\"),\n path.resolve(import.meta.dirname, \"types.js\"),\n ];\n for (const candidate of candidates) {\n if (await isFile(candidate)) return candidate;\n }\n throw new Error(\n `Could not resolve the current @dreamboard-games/sdk/types facade from ${import.meta.dirname}.`,\n );\n}\n\nasync function writeAuthoritativeFile(\n destination: string,\n content: string,\n): Promise<void> {\n const temporaryPath = path.join(\n path.dirname(destination),\n `.${path.basename(destination)}.${process.pid}.${randomUUID()}.tmp`,\n );\n try {\n await writeFile(temporaryPath, content);\n await rename(temporaryPath, destination);\n } finally {\n await rm(temporaryPath, { force: true });\n }\n}\n\nfunction assertExactAuthoritativeInventory(emitted: ReadonlySet<string>): void {\n const missing = [...authoritativePaths].filter(\n (value) => !emitted.has(value),\n );\n const unexpected = [...emitted].filter(\n (value) => !authoritativePaths.has(value),\n );\n if (missing.length > 0 || unexpected.length > 0) {\n throw new Error(\n `SDK workspace ownership mismatch (missing: ${missing.join(\", \") || \"none\"}; unexpected: ${unexpected.join(\", \") || \"none\"}).`,\n );\n }\n}\n\nfunction resolveProjectPath(projectRoot: string, value: string): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n path.isAbsolute(value) ||\n value.split(/[\\\\/]+/).some((segment) => segment === \"..\")\n ) {\n throw new Error(`Workspace path must be project-relative: ${value}.`);\n }\n const resolved = path.resolve(projectRoot, value);\n if (!resolved.startsWith(`${projectRoot}${path.sep}`)) {\n throw new Error(`Workspace path escapes the project root: ${value}.`);\n }\n return resolved;\n}\n\nasync function isFile(filePath: string): Promise<boolean> {\n return stat(filePath)\n .then((value) => value.isFile())\n .catch((error: unknown) => {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/package-set.ts"],"sourcesContent":["import { GENERATED_AUTHORING_METADATA } from \"./authoring/generated-metadata.js\";\n\nexport const DREAMBOARD_SDK_VERSION = GENERATED_AUTHORING_METADATA.sdkVersion;\n\nexport const DREAMBOARD_SDK_PACKAGES = {\n \"@dreamboard-games/sdk\": DREAMBOARD_SDK_VERSION,\n} as const;\n\nexport type DreamboardSdkPackageName = keyof typeof DREAMBOARD_SDK_PACKAGES;\n\nexport type DreamboardSdkPackageSet = {\n version: 1;\n sdkVersion: string;\n packages: Record<DreamboardSdkPackageName, string>;\n};\n\nexport const DREAMBOARD_SDK_PACKAGE_SET: DreamboardSdkPackageSet = {\n version: 1,\n sdkVersion: DREAMBOARD_SDK_VERSION,\n packages: DREAMBOARD_SDK_PACKAGES,\n};\n"],"mappings":";;;;;AAEO,IAAM,yBAAyB,6BAA6B;AAE5D,IAAM,0BAA0B;AAAA,EACrC,yBAAyB;AAC3B;AAUO,IAAM,6BAAsD;AAAA,EACjE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AACZ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/authoring/manifest-conformance-cases.ts","../src/authoring/adapter.ts"],"sourcesContent":["import type {\n BoardCard,\n BoardSpec,\n ComponentHomeSpec,\n GameTopologyManifest,\n PieceSeedSpec,\n PieceTypeSpec,\n ZoneSpec,\n} from \"@dreamboard-games/sdk-types\";\nimport type { AuthoringManifestConformanceCaseV1 } from \"./types.js\";\n\nfunction baseManifest(\n cardSet: GameTopologyManifest[\"cardSets\"][number],\n overrides: Partial<GameTopologyManifest> = {},\n): GameTopologyManifest {\n return {\n players: {\n minPlayers: 2,\n maxPlayers: 2,\n optimalPlayers: 2,\n },\n cardSets: [cardSet],\n zones: [],\n boardTemplates: [],\n boards: [],\n pieceTypes: [],\n pieceSeeds: [],\n dieTypes: [],\n dieSeeds: [],\n resources: [],\n setupOptions: [],\n setupProfiles: [],\n ...overrides,\n };\n}\n\nfunction manualCardSet(\n id: string,\n defaultHome: ComponentHomeSpec,\n cards: BoardCard[],\n): GameTopologyManifest[\"cardSets\"][number] {\n const cardSet = {\n id,\n name: id,\n type: \"manual\",\n cardSchema: { properties: {} },\n defaultHome,\n cards,\n };\n return cardSet as unknown as GameTopologyManifest[\"cardSets\"][number];\n}\n\nconst sharedZone: ZoneSpec = {\n id: \"shared-zone\",\n name: \"Shared Zone\",\n scope: \"shared\",\n allowedCardSetIds: [\"cards\"],\n};\n\nconst sharedBoard: BoardSpec = {\n id: \"square-board\",\n name: \"Square Board\",\n layout: \"square\",\n scope: \"shared\",\n spaces: [\n { id: \"a1\", row: 0, col: 0 },\n { id: \"a2\", row: 0, col: 1 },\n { id: \"b1\", row: 1, col: 0 },\n { id: \"b2\", row: 1, col: 1 },\n ],\n relations: [],\n containers: [\n {\n id: \"display-row\",\n name: \"Display Row\",\n host: { type: \"board\" },\n },\n ],\n edges: [],\n vertices: [],\n};\n\nconst sharedTopology: Partial<GameTopologyManifest> = {\n boards: [sharedBoard],\n pieceTypes: [\n {\n id: \"holder\",\n name: \"Holder\",\n slots: [{ id: \"pocket\" }],\n },\n ] satisfies PieceTypeSpec[],\n pieceSeeds: [{ id: \"holder-a\", typeId: \"holder\" }] satisfies PieceSeedSpec[],\n};\n\nconst fixtures = [\n {\n id: \"manual-default-detached\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"detached\" }, [\n { type: \"marker\", name: \"Marker\", count: 1, properties: {} },\n ]),\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"ed6f7ce2ff4fbe697e49134f1d59157cf146e202db29a77be50e8326585f535c\",\n },\n },\n {\n id: \"manual-default-shared-zone\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"shared-zone\" }, [\n { type: \"coin\", name: \"Coin\", count: 2, properties: {} },\n ]),\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"75028d28dbc415c81db5e2d780d55b04c4db36378a149bc02b0194d94a8cc2b9\",\n },\n },\n {\n id: \"preset-default-shared-zone\",\n manifest: baseManifest(\n {\n id: \"cards\",\n name: \"Preset Cards\",\n type: \"preset\",\n presetId: \"standard_52_deck\",\n defaultHome: { type: \"zone\", zoneId: \"shared-zone\" },\n },\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"b3471c577ed266667b16799f75aa9b7358100a94108aa46a31ad16a0291f67ca\",\n },\n },\n {\n id: \"manual-per-card-detached-override\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"shared-zone\" }, [\n {\n type: \"removed\",\n name: \"Removed\",\n count: 1,\n home: { type: \"detached\" },\n properties: {},\n },\n ]),\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"fdcb2de78fc391e11aca1f266fd8bbb348a82faa0fbbac1d8eb1defd8697a0e9\",\n },\n },\n {\n id: \"manual-per-card-shared-zone-override\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"detached\" }, [\n {\n type: \"dealt\",\n name: \"Dealt\",\n count: 1,\n home: { type: \"zone\", zoneId: \"shared-zone\" },\n properties: {},\n },\n ]),\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"b6bee1db85f16e8a12a7136c7d524591f925427c8ec04d64b07905c5bc859d7a\",\n },\n },\n {\n id: \"manual-compatible-zones-no-inference\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"detached\" }, [\n { type: \"token\", name: \"Token\", count: 1, properties: {} },\n ]),\n {\n zones: [\n sharedZone,\n {\n ...sharedZone,\n id: \"second-compatible-zone\",\n name: \"Second Compatible Zone\",\n },\n ],\n },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"2727728ba3743d2b1874b2bc573b48c88f962fdcbdcdf20c62bed551d6d955c4\",\n },\n },\n {\n id: \"manual-per-player-zone-rejected\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"hand\" }, [\n { type: \"secret\", name: \"Secret\", count: 1, properties: {} },\n ]),\n {\n zones: [\n {\n id: \"hand\",\n name: \"Hand\",\n scope: \"perPlayer\",\n allowedCardSetIds: [\"cards\"],\n },\n ],\n },\n ),\n expected: {\n valid: false,\n transportValid: true,\n diagnosticCodes: [\"CARD_HOME_PER_PLAYER_ZONE_REJECTED\"],\n },\n },\n {\n id: \"manual-space-home\",\n manifest: baseManifest(\n manualCardSet(\n \"cards\",\n { type: \"space\", boardId: \"square-board\", spaceId: \"a1\" },\n [{ type: \"space-card\", name: \"Space\", count: 1, properties: {} }],\n ),\n sharedTopology,\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"429abfb3276c67cdca59d3dc077fc73022a9716bccef2c43f6805ff5cce0f2c2\",\n },\n },\n {\n id: \"manual-container-home\",\n manifest: baseManifest(\n manualCardSet(\n \"cards\",\n {\n type: \"container\",\n boardId: \"square-board\",\n containerId: \"display-row\",\n },\n [\n {\n type: \"container-card\",\n name: \"Container\",\n count: 1,\n properties: {},\n },\n ],\n ),\n sharedTopology,\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"eff372263227b316d064a519cf282a6cc1d2d8df4ac04673b7f47ac518d7a2a3\",\n },\n },\n {\n id: \"manual-slot-home\",\n manifest: baseManifest(\n manualCardSet(\n \"cards\",\n {\n type: \"slot\",\n host: { kind: \"piece\", id: \"holder-a\" },\n slotId: \"pocket\",\n },\n [{ type: \"slot-card\", name: \"Slot\", count: 1, properties: {} }],\n ),\n sharedTopology,\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"af3111f8d861ae69b77f2f46ba3df9f2f698f3306c412efc91095544e8121ab6\",\n },\n },\n {\n id: \"manual-edge-home\",\n manifest: baseManifest(\n manualCardSet(\n \"cards\",\n {\n type: \"edge\",\n boardId: \"square-board\",\n ref: { spaces: [\"a1\", \"a2\"] },\n },\n [{ type: \"edge-card\", name: \"Edge\", count: 1, properties: {} }],\n ),\n sharedTopology,\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"f8606ea25f52d9bf801aa4fee9f558b60d7f39bcd601d57bdfccdf1ddbf4c500\",\n },\n },\n {\n id: \"manual-vertex-home\",\n manifest: baseManifest(\n manualCardSet(\n \"cards\",\n {\n type: \"vertex\",\n boardId: \"square-board\",\n ref: { spaces: [\"a1\", \"a2\", \"b1\", \"b2\"] },\n },\n [{ type: \"vertex-card\", name: \"Vertex\", count: 1, properties: {} }],\n ),\n sharedTopology,\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"e84a4920ea8b71052acd42accf11101380ab982e493ebe207113dd4d243034de\",\n },\n },\n {\n id: \"manual-invalid-target-id\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"missing-zone\" }, [\n { type: \"lost\", name: \"Lost\", count: 1, properties: {} },\n ]),\n ),\n expected: {\n valid: false,\n transportValid: true,\n diagnosticCodes: [\"AUTHORING_VALIDATION_ERROR\"],\n },\n },\n {\n id: \"manual-count-order\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"shared-zone\" }, [\n { type: \"first\", name: \"First\", count: 3, properties: {} },\n { type: \"second\", name: \"Second\", count: 2, properties: {} },\n ]),\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"2e4ced71909d4c36053317311c9ceaf3bf3adba875bff3fe9596bbea47746423\",\n },\n },\n {\n id: \"manual-generated-scenario-base\",\n manifest: baseManifest(\n manualCardSet(\"cards\", { type: \"zone\", zoneId: \"shared-zone\" }, [\n { type: \"alpha\", name: \"Alpha\", count: 2, properties: {} },\n { type: \"beta\", name: \"Beta\", count: 1, properties: {} },\n ]),\n { zones: [sharedZone] },\n ),\n expected: {\n valid: true,\n transportValid: true,\n materializedSha256:\n \"b1b65d708b503036a49434c64c6f4aab3bedd295681bd103b69c4b98fdd5e2bb\",\n },\n },\n {\n id: \"manual-default-required\",\n manifest: {\n ...baseManifest(\n manualCardSet(\"cards\", { type: \"detached\" }, [\n { type: \"card\", name: \"Card\", count: 1, properties: {} },\n ]),\n ),\n cardSets: [\n {\n id: \"cards\",\n name: \"Cards\",\n type: \"manual\",\n cardSchema: { properties: {} },\n cards: [{ type: \"card\", name: \"Card\", count: 1, properties: {} }],\n },\n ],\n } as unknown as GameTopologyManifest,\n expected: {\n valid: false,\n transportValid: false,\n diagnosticCodes: [\"MANUAL_CARD_SET_DEFAULT_HOME_REQUIRED\"],\n },\n },\n] as const satisfies readonly (Omit<\n AuthoringManifestConformanceCaseV1,\n \"manifest\"\n> & { manifest: GameTopologyManifest })[];\n\nfunction deepFreeze<T>(value: T): T {\n if (value && typeof value === \"object\" && !Object.isFrozen(value)) {\n for (const entry of Object.values(value)) {\n deepFreeze(entry);\n }\n Object.freeze(value);\n }\n return value;\n}\n\nexport function diagnosticCodesForValidationErrors(\n errors: readonly string[],\n): readonly string[] {\n return [...new Set(errors.map(diagnosticCodeForValidationError))].sort();\n}\n\nfunction diagnosticCodeForValidationError(error: string): string {\n if (\n error.includes(\".defaultHome: Manual card sets must declare defaultHome\")\n ) {\n return \"MANUAL_CARD_SET_DEFAULT_HOME_REQUIRED\";\n }\n if (error.includes(\"cannot target per-player zone\")) {\n return \"CARD_HOME_PER_PLAYER_ZONE_REJECTED\";\n }\n if (error.includes(\"cannot target per-player board\")) {\n return \"CARD_HOME_PER_PLAYER_BOARD_REJECTED\";\n }\n return \"AUTHORING_VALIDATION_ERROR\";\n}\n\nexport function createManifestConformanceCases(): readonly AuthoringManifestConformanceCaseV1[] {\n return deepFreeze(\n fixtures,\n ) as unknown as readonly AuthoringManifestConformanceCaseV1[];\n}\n","import { createHash } from \"node:crypto\";\nimport type {\n GameTopologyManifest,\n JsonValue,\n} from \"@dreamboard-games/sdk-types\";\nimport {\n AUTHORITATIVE_GENERATED_FILES,\n SEED_FILES,\n SEED_FILE_PATTERNS,\n generateAuthoritativeFiles,\n generateSeedFiles,\n materializeManifestTable,\n validateManifestAuthoring,\n} from \"@dreamboard-games/workspace-codegen\";\nimport { GENERATED_AUTHORING_METADATA } from \"./generated-metadata.js\";\nimport {\n createManifestConformanceCases,\n diagnosticCodesForValidationErrors,\n} from \"./manifest-conformance-cases.js\";\nimport type {\n AuthoringValidationResultV1,\n GeneratedArtifactV1,\n ProjectAuthoringAdapterV1,\n} from \"./types.js\";\n\nconst PLAYER_IDS = [\"player-1\", \"player-2\"] as const;\n\nfunction stableJson(value: unknown): string {\n if (value === undefined) {\n return \"null\";\n }\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableJson(item)).join(\",\")}]`;\n }\n return `{${Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)\n .join(\",\")}}`;\n}\n\nexport function sha256(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction assertManifest(manifest: unknown): GameTopologyManifest {\n if (!manifest || typeof manifest !== \"object\") {\n throw new Error(\"Expected a manifest object.\");\n }\n return manifest as GameTopologyManifest;\n}\n\nfunction normalizeArtifact(\n path: string,\n content: string,\n ownership: GeneratedArtifactV1[\"ownership\"],\n): GeneratedArtifactV1 {\n if (\n path.length === 0 ||\n path.startsWith(\"/\") ||\n path.includes(\"\\\\\") ||\n path\n .split(\"/\")\n .some((segment) => !segment || segment === \".\" || segment === \"..\")\n ) {\n throw new Error(`Generated artifact path '${path}' is not normalized.`);\n }\n return {\n path,\n ownership,\n content,\n contentSha256: sha256(content),\n };\n}\n\nfunction normalizeArtifacts(\n entries: Record<string, string>,\n ownership: GeneratedArtifactV1[\"ownership\"],\n): GeneratedArtifactV1[] {\n return Object.entries(entries)\n .map(([path, content]) => normalizeArtifact(path, content, ownership))\n .sort((left, right) => left.path.localeCompare(right.path));\n}\n\nfunction validateNoDuplicateArtifactPaths(\n artifacts: readonly GeneratedArtifactV1[],\n): void {\n const seen = new Set<string>();\n for (const artifact of artifacts) {\n if (seen.has(artifact.path)) {\n throw new Error(\n `Generated artifact path '${artifact.path}' was emitted twice.`,\n );\n }\n seen.add(artifact.path);\n if (artifact.contentSha256 !== sha256(artifact.content)) {\n throw new Error(\n `Generated artifact '${artifact.path}' has a stale hash.`,\n );\n }\n }\n}\n\nexport function validateManifest(\n manifest: unknown,\n): AuthoringValidationResultV1 {\n try {\n const gameManifest = assertManifest(manifest);\n const result = validateManifestAuthoring(gameManifest);\n const errors = [...result.errors];\n if (errors.length === 0) {\n try {\n materializeManifest(gameManifest);\n } catch (error) {\n errors.push(error instanceof Error ? error.message : String(error));\n }\n }\n return {\n valid: errors.length === 0,\n errors,\n warnings: result.warnings,\n };\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : String(error)],\n warnings: [],\n };\n }\n}\n\nexport function materializeManifest(manifest: unknown): JsonValue {\n return materializeManifestTable({\n manifest: assertManifest(manifest),\n playerIds: PLAYER_IDS,\n shuffleItems: (values) => [...values],\n }) as JsonValue;\n}\n\nexport function generateWorkspaceArtifacts(\n manifest: unknown,\n): readonly GeneratedArtifactV1[] {\n const gameManifest = assertManifest(manifest);\n const artifacts = [\n ...normalizeArtifacts(\n generateAuthoritativeFiles(gameManifest),\n \"authoritative\",\n ),\n ...normalizeArtifacts(generateSeedFiles(gameManifest), \"seed\"),\n ].sort((left, right) => left.path.localeCompare(right.path));\n validateNoDuplicateArtifactPaths(artifacts);\n return artifacts;\n}\n\nexport const GENERATED_WORKSPACE_PATHS = [\n ...AUTHORITATIVE_GENERATED_FILES,\n ...SEED_FILES,\n] as const;\n\nexport type GeneratedWorkspacePathPattern = {\n readonly prefix: string;\n readonly suffix: string;\n};\n\nexport const GENERATED_WORKSPACE_PATH_PATTERNS: readonly GeneratedWorkspacePathPattern[] =\n SEED_FILE_PATTERNS;\n\nexport const MANIFEST_CONFORMANCE_CASES = createManifestConformanceCases();\n\nexport const projectAuthoringAdapter: ProjectAuthoringAdapterV1 = {\n protocolVersion: 1,\n metadata: GENERATED_AUTHORING_METADATA,\n generatedPaths: GENERATED_WORKSPACE_PATHS,\n generatedPathPatterns: GENERATED_WORKSPACE_PATH_PATTERNS,\n manifestConformanceCases: MANIFEST_CONFORMANCE_CASES,\n validateManifest,\n materializeManifest,\n generateWorkspaceArtifacts,\n};\n\nexport { diagnosticCodesForValidationErrors, stableJson };\n"],"mappings":";;;;;;;;;;;;;;AAWA,SAAS,aACP,SACA,YAA2C,CAAC,GACtB;AACtB,SAAO;AAAA,IACL,SAAS;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO,CAAC;AAAA,IACR,gBAAgB,CAAC;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,YAAY,CAAC;AAAA,IACb,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,IACZ,cAAc,CAAC;AAAA,IACf,eAAe,CAAC;AAAA,IAChB,GAAG;AAAA,EACL;AACF;AAEA,SAAS,cACP,IACA,aACA,OAC0C;AAC1C,QAAM,UAAU;AAAA,IACd;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,EAAE,YAAY,CAAC,EAAE;AAAA,IAC7B;AAAA,IACA;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,aAAuB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,mBAAmB,CAAC,OAAO;AAC7B;AAEA,IAAM,cAAyB;AAAA,EAC7B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,IACN,EAAE,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,IAC3B,EAAE,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,IAC3B,EAAE,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,IAC3B,EAAE,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,EAC7B;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,YAAY;AAAA,IACV;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM,EAAE,MAAM,QAAQ;AAAA,IACxB;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AAAA,EACR,UAAU,CAAC;AACb;AAEA,IAAM,iBAAgD;AAAA,EACpD,QAAQ,CAAC,WAAW;AAAA,EACpB,YAAY;AAAA,IACV;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,YAAY,QAAQ,SAAS,CAAC;AACnD;AAEA,IAAM,WAAW;AAAA,EACf;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,WAAW,GAAG;AAAA,QAC3C,EAAE,MAAM,UAAU,MAAM,UAAU,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,cAAc,GAAG;AAAA,QAC9D,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MACzD,CAAC;AAAA,MACD,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa,EAAE,MAAM,QAAQ,QAAQ,cAAc;AAAA,MACrD;AAAA,MACA,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,cAAc,GAAG;AAAA,QAC9D;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM,EAAE,MAAM,WAAW;AAAA,UACzB,YAAY,CAAC;AAAA,QACf;AAAA,MACF,CAAC;AAAA,MACD,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,WAAW,GAAG;AAAA,QAC3C;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM,EAAE,MAAM,QAAQ,QAAQ,cAAc;AAAA,UAC5C,YAAY,CAAC;AAAA,QACf;AAAA,MACF,CAAC;AAAA,MACD,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,WAAW,GAAG;AAAA,QAC3C,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MAC3D,CAAC;AAAA,MACD;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAAA,QACvD,EAAE,MAAM,UAAU,MAAM,UAAU,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MAC7D,CAAC;AAAA,MACD;AAAA,QACE,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO;AAAA,YACP,mBAAmB,CAAC,OAAO;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,iBAAiB,CAAC,oCAAoC;AAAA,IACxD;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE;AAAA,QACA,EAAE,MAAM,SAAS,SAAS,gBAAgB,SAAS,KAAK;AAAA,QACxD,CAAC,EAAE,MAAM,cAAc,MAAM,SAAS,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,MAClE;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,aAAa;AAAA,QACf;AAAA,QACA;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,YACP,YAAY,CAAC;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM,EAAE,MAAM,SAAS,IAAI,WAAW;AAAA,UACtC,QAAQ;AAAA,QACV;AAAA,QACA,CAAC,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,MAChE;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;AAAA,QAC9B;AAAA,QACA,CAAC,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,MAChE;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR;AAAA,QACE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,KAAK,EAAE,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE;AAAA,QAC1C;AAAA,QACA,CAAC,EAAE,MAAM,eAAe,MAAM,UAAU,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,MACpE;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,eAAe,GAAG;AAAA,QAC/D,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,iBAAiB,CAAC,4BAA4B;AAAA,IAChD;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,cAAc,GAAG;AAAA,QAC9D,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,QACzD,EAAE,MAAM,UAAU,MAAM,UAAU,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MAC7D,CAAC;AAAA,MACD,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,cAAc,SAAS,EAAE,MAAM,QAAQ,QAAQ,cAAc,GAAG;AAAA,QAC9D,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,QACzD,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,MACzD,CAAC;AAAA,MACD,EAAE,OAAO,CAAC,UAAU,EAAE;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,MACR,GAAG;AAAA,QACD,cAAc,SAAS,EAAE,MAAM,WAAW,GAAG;AAAA,UAC3C,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE;AAAA,QACzD,CAAC;AAAA,MACH;AAAA,MACA,UAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY,EAAE,YAAY,CAAC,EAAE;AAAA,UAC7B,OAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,iBAAiB,CAAC,uCAAuC;AAAA,IAC3D;AAAA,EACF;AACF;AAKA,SAAS,WAAc,OAAa;AAClC,MAAI,SAAS,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACjE,eAAW,SAAS,OAAO,OAAO,KAAK,GAAG;AACxC,iBAAW,KAAK;AAAA,IAClB;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,SAAO;AACT;AAEO,SAAS,mCACd,QACmB;AACnB,SAAO,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI,gCAAgC,CAAC,CAAC,EAAE,KAAK;AACzE;AAEA,SAAS,iCAAiC,OAAuB;AAC/D,MACE,MAAM,SAAS,yDAAyD,GACxE;AACA,WAAO;AAAA,EACT;AACA,MAAI,MAAM,SAAS,+BAA+B,GAAG;AACnD,WAAO;AAAA,EACT;AACA,MAAI,MAAM,SAAS,gCAAgC,GAAG;AACpD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,iCAAgF;AAC9F,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;ACjcA,SAAS,kBAAkB;AAyB3B,IAAM,aAAa,CAAC,YAAY,UAAU;AAmBnC,SAAS,OAAO,OAAuB;AAC5C,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxD;AAEA,SAAS,eAAe,UAAyC;AAC/D,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,kBACP,MACA,SACA,WACqB;AACrB,MACE,KAAK,WAAW,KAChB,KAAK,WAAW,GAAG,KACnB,KAAK,SAAS,IAAI,KAClB,KACG,MAAM,GAAG,EACT,KAAK,CAAC,YAAY,CAAC,WAAW,YAAY,OAAO,YAAY,IAAI,GACpE;AACA,UAAM,IAAI,MAAM,4BAA4B,IAAI,sBAAsB;AAAA,EACxE;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,OAAO,OAAO;AAAA,EAC/B;AACF;AAEA,SAAS,mBACP,SACA,WACuB;AACvB,SAAO,OAAO,QAAQ,OAAO,EAC1B,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,kBAAkB,MAAM,SAAS,SAAS,CAAC,EACpE,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAC9D;AAEA,SAAS,iCACP,WACM;AACN,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,YAAY,WAAW;AAChC,QAAI,KAAK,IAAI,SAAS,IAAI,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR,4BAA4B,SAAS,IAAI;AAAA,MAC3C;AAAA,IACF;AACA,SAAK,IAAI,SAAS,IAAI;AACtB,QAAI,SAAS,kBAAkB,OAAO,SAAS,OAAO,GAAG;AACvD,YAAM,IAAI;AAAA,QACR,uBAAuB,SAAS,IAAI;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,iBACd,UAC6B;AAC7B,MAAI;AACF,UAAM,eAAe,eAAe,QAAQ;AAC5C,UAAM,SAAS,0BAA0B,YAAY;AACrD,UAAM,SAAS,CAAC,GAAG,OAAO,MAAM;AAChC,QAAI,OAAO,WAAW,GAAG;AACvB,UAAI;AACF,4BAAoB,YAAY;AAAA,MAClC,SAAS,OAAO;AACd,eAAO,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACpE;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO,OAAO,WAAW;AAAA,MACzB;AAAA,MACA,UAAU,OAAO;AAAA,IACnB;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MAC/D,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,UAA8B;AAChE,SAAO,yBAAyB;AAAA,IAC9B,UAAU,eAAe,QAAQ;AAAA,IACjC,WAAW;AAAA,IACX,cAAc,CAAC,WAAW,CAAC,GAAG,MAAM;AAAA,EACtC,CAAC;AACH;AAEO,SAAS,2BACd,UACgC;AAChC,QAAM,eAAe,eAAe,QAAQ;AAC5C,QAAM,YAAY;AAAA,IAChB,GAAG;AAAA,MACD,2BAA2B,YAAY;AAAA,MACvC;AAAA,IACF;AAAA,IACA,GAAG,mBAAmB,kBAAkB,YAAY,GAAG,MAAM;AAAA,EAC/D,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAC3D,mCAAiC,SAAS;AAC1C,SAAO;AACT;AAEO,IAAM,4BAA4B;AAAA,EACvC,GAAG;AAAA,EACH,GAAG;AACL;AAOO,IAAM,oCACX;AAEK,IAAM,6BAA6B,+BAA+B;AAElE,IAAM,0BAAqD;AAAA,EAChE,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
package/dist/chunk-THWT4V3Z.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// src/authoring/generated-metadata.ts
|
|
2
|
-
var GENERATED_AUTHORING_METADATA = {
|
|
3
|
-
sdkVersion: "0.4.0-alpha.13",
|
|
4
|
-
codegenVersion: "0.3.0-alpha.0",
|
|
5
|
-
manifestSchemaVersion: 2,
|
|
6
|
-
generatedArtifactSchemaVersion: 1
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export {
|
|
10
|
-
GENERATED_AUTHORING_METADATA
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=chunk-THWT4V3Z.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/authoring/generated-metadata.ts"],"sourcesContent":["// Generated by scripts/generate-authoring-metadata.mjs. Do not edit by hand.\nimport type { GeneratedAuthoringMetadataV1 } from \"./types.js\";\n\nexport const GENERATED_AUTHORING_METADATA = {\n sdkVersion: \"0.4.0-alpha.13\",\n codegenVersion: \"0.3.0-alpha.0\",\n manifestSchemaVersion: 2,\n generatedArtifactSchemaVersion: 1,\n} as const satisfies GeneratedAuthoringMetadataV1;\n"],"mappings":";AAGO,IAAM,+BAA+B;AAAA,EAC1C,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,gCAAgC;AAClC;","names":[]}
|
package/dist/chunk-UNVCT5Z7.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
// src/reference-games/canonical.ts
|
|
2
|
-
import { sha256 } from "@noble/hashes/sha2.js";
|
|
3
|
-
import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils.js";
|
|
4
|
-
function computeReferenceGameSourceFingerprint(payload) {
|
|
5
|
-
const canonical = canonicalizeReferenceGameSourcePayload(payload);
|
|
6
|
-
const encoded = JSON.stringify(canonical);
|
|
7
|
-
return `sha256:${bytesToHex(sha256(utf8ToBytes(encoded)))}`;
|
|
8
|
-
}
|
|
9
|
-
function canonicalizeReferenceGameSourcePayload(payload) {
|
|
10
|
-
return canonicalizeJson({
|
|
11
|
-
...payload,
|
|
12
|
-
games: [...payload.games].sort(
|
|
13
|
-
(left, right) => compareReferenceGameCanonicalStrings(left.id, right.id)
|
|
14
|
-
),
|
|
15
|
-
objects: [...payload.objects].sort(
|
|
16
|
-
(left, right) => compareReferenceGameCanonicalStrings(left.path, right.path)
|
|
17
|
-
),
|
|
18
|
-
inventoryPolicy: {
|
|
19
|
-
...payload.inventoryPolicy,
|
|
20
|
-
excludedGameRelativePaths: [
|
|
21
|
-
...payload.inventoryPolicy.excludedGameRelativePaths
|
|
22
|
-
].sort(),
|
|
23
|
-
excludedGameRelativePrefixes: [
|
|
24
|
-
...payload.inventoryPolicy.excludedGameRelativePrefixes
|
|
25
|
-
].sort()
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function compareReferenceGameCanonicalStrings(left, right) {
|
|
30
|
-
return left < right ? -1 : left > right ? 1 : 0;
|
|
31
|
-
}
|
|
32
|
-
function canonicalizeJson(value) {
|
|
33
|
-
if (value === null || typeof value === "boolean") {
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
if (typeof value === "string") {
|
|
37
|
-
return value.normalize("NFC");
|
|
38
|
-
}
|
|
39
|
-
if (typeof value === "number") {
|
|
40
|
-
if (!Number.isFinite(value)) {
|
|
41
|
-
throw new Error(
|
|
42
|
-
"reference game source JSON contains a non-finite number"
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
return value;
|
|
46
|
-
}
|
|
47
|
-
if (Array.isArray(value)) {
|
|
48
|
-
return value.map((item) => canonicalizeJson(item));
|
|
49
|
-
}
|
|
50
|
-
if (typeof value === "object") {
|
|
51
|
-
const entries = Object.entries(value);
|
|
52
|
-
for (const [, item] of entries) {
|
|
53
|
-
if (item === void 0) {
|
|
54
|
-
throw new Error("reference game source JSON contains undefined");
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return Object.fromEntries(
|
|
58
|
-
entries.map(([key, item]) => [key.normalize("NFC"), item]).sort(
|
|
59
|
-
([left], [right]) => compareReferenceGameCanonicalStrings(left, right)
|
|
60
|
-
).map(([key, item]) => [key, canonicalizeJson(item)])
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
throw new Error(
|
|
64
|
-
`reference game source JSON contains unsupported ${typeof value} value`
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export {
|
|
69
|
-
computeReferenceGameSourceFingerprint,
|
|
70
|
-
canonicalizeReferenceGameSourcePayload,
|
|
71
|
-
compareReferenceGameCanonicalStrings
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=chunk-UNVCT5Z7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/reference-games/canonical.ts"],"sourcesContent":["import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\n\nimport type { ReferenceGameSourceManifestPayload } from \"./schema.js\";\n\ntype CanonicalReferenceGameJson =\n | null\n | boolean\n | number\n | string\n | CanonicalReferenceGameJson[]\n | { [key: string]: CanonicalReferenceGameJson };\n\nexport function computeReferenceGameSourceFingerprint(\n payload: ReferenceGameSourceManifestPayload,\n): `sha256:${string}` {\n const canonical = canonicalizeReferenceGameSourcePayload(payload);\n const encoded = JSON.stringify(canonical);\n return `sha256:${bytesToHex(sha256(utf8ToBytes(encoded)))}`;\n}\n\nexport function canonicalizeReferenceGameSourcePayload(\n payload: ReferenceGameSourceManifestPayload,\n): CanonicalReferenceGameJson {\n return canonicalizeJson({\n ...payload,\n games: [...payload.games].sort((left, right) =>\n compareReferenceGameCanonicalStrings(left.id, right.id),\n ),\n objects: [...payload.objects].sort((left, right) =>\n compareReferenceGameCanonicalStrings(left.path, right.path),\n ),\n inventoryPolicy: {\n ...payload.inventoryPolicy,\n excludedGameRelativePaths: [\n ...payload.inventoryPolicy.excludedGameRelativePaths,\n ].sort(),\n excludedGameRelativePrefixes: [\n ...payload.inventoryPolicy.excludedGameRelativePrefixes,\n ].sort(),\n },\n });\n}\n\n/** Locale-independent UTF-16 code-unit order, equivalent to Java String.compareTo. */\nexport function compareReferenceGameCanonicalStrings(\n left: string,\n right: string,\n): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction canonicalizeJson(value: unknown): CanonicalReferenceGameJson {\n if (value === null || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n return value.normalize(\"NFC\");\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new Error(\n \"reference game source JSON contains a non-finite number\",\n );\n }\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => canonicalizeJson(item));\n }\n if (typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>);\n for (const [, item] of entries) {\n if (item === undefined) {\n throw new Error(\"reference game source JSON contains undefined\");\n }\n }\n return Object.fromEntries(\n entries\n .map(([key, item]) => [key.normalize(\"NFC\"), item] as const)\n .sort(([left], [right]) =>\n compareReferenceGameCanonicalStrings(left, right),\n )\n .map(([key, item]) => [key, canonicalizeJson(item)]),\n );\n }\n throw new Error(\n `reference game source JSON contains unsupported ${typeof value} value`,\n );\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,YAAY,mBAAmB;AAYjC,SAAS,sCACd,SACoB;AACpB,QAAM,YAAY,uCAAuC,OAAO;AAChE,QAAM,UAAU,KAAK,UAAU,SAAS;AACxC,SAAO,UAAU,WAAW,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC;AAC3D;AAEO,SAAS,uCACd,SAC4B;AAC5B,SAAO,iBAAiB;AAAA,IACtB,GAAG;AAAA,IACH,OAAO,CAAC,GAAG,QAAQ,KAAK,EAAE;AAAA,MAAK,CAAC,MAAM,UACpC,qCAAqC,KAAK,IAAI,MAAM,EAAE;AAAA,IACxD;AAAA,IACA,SAAS,CAAC,GAAG,QAAQ,OAAO,EAAE;AAAA,MAAK,CAAC,MAAM,UACxC,qCAAqC,KAAK,MAAM,MAAM,IAAI;AAAA,IAC5D;AAAA,IACA,iBAAiB;AAAA,MACf,GAAG,QAAQ;AAAA,MACX,2BAA2B;AAAA,QACzB,GAAG,QAAQ,gBAAgB;AAAA,MAC7B,EAAE,KAAK;AAAA,MACP,8BAA8B;AAAA,QAC5B,GAAG,QAAQ,gBAAgB;AAAA,MAC7B,EAAE,KAAK;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAGO,SAAS,qCACd,MACA,OACQ;AACR,SAAO,OAAO,QAAQ,KAAK,OAAO,QAAQ,IAAI;AAChD;AAEA,SAAS,iBAAiB,OAA4C;AACpE,MAAI,UAAU,QAAQ,OAAO,UAAU,WAAW;AAChD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,UAAU,KAAK;AAAA,EAC9B;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,iBAAiB,IAAI,CAAC;AAAA,EACnD;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,UAAU,OAAO,QAAQ,KAAgC;AAC/D,eAAW,CAAC,EAAE,IAAI,KAAK,SAAS;AAC9B,UAAI,SAAS,QAAW;AACtB,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAAA,IACF;AACA,WAAO,OAAO;AAAA,MACZ,QACG,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,UAAU,KAAK,GAAG,IAAI,CAAU,EAC1D;AAAA,QAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MACnB,qCAAqC,MAAM,KAAK;AAAA,MAClD,EACC,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC;AAAA,IACvD;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR,mDAAmD,OAAO,KAAK;AAAA,EACjE;AACF;","names":[]}
|