@dreamboard-games/sdk 0.4.0-alpha.8 → 0.4.0-alpha.9
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/REFERENCE.md +1067 -164
- package/dist/authoring/index.d.ts +4 -9
- package/dist/authoring/index.js +11 -547
- package/dist/authoring/index.js.map +1 -1
- package/dist/authoring-compiler.d.ts +27 -0
- package/dist/authoring-compiler.js +12 -0
- package/dist/authoring-compiler.js.map +1 -0
- package/dist/authoring-materialize-cli.d.ts +1 -0
- package/dist/authoring-materialize-cli.js +46 -0
- package/dist/authoring-materialize-cli.js.map +1 -0
- package/dist/browser-interaction.d.ts +1 -1
- package/dist/{chunk-3BLN5POZ.js → chunk-3PFDHTR7.js} +16 -6
- package/dist/chunk-3PFDHTR7.js.map +1 -0
- package/dist/chunk-45P5CEGH.js +176 -0
- package/dist/chunk-45P5CEGH.js.map +1 -0
- package/dist/chunk-5XTAQ4EQ.js +32 -0
- package/dist/chunk-5XTAQ4EQ.js.map +1 -0
- package/dist/chunk-7ADPYKFT.js +532 -0
- package/dist/chunk-7ADPYKFT.js.map +1 -0
- package/dist/{chunk-44N3T2A5.js → chunk-BUOODBVO.js} +2 -2
- package/dist/{chunk-ZYONCTZ2.js → chunk-GMOBG7Y7.js} +4 -4
- package/dist/{chunk-VTK4TIXC.js → chunk-JRGP6W4V.js} +3 -3
- package/dist/chunk-L3W2FPRQ.js +1793 -0
- package/dist/chunk-L3W2FPRQ.js.map +1 -0
- package/dist/{chunk-XV27IQHA.js → chunk-NGYFBNBP.js} +3 -3
- package/dist/chunk-P6IJ5YVY.js +154 -0
- package/dist/chunk-P6IJ5YVY.js.map +1 -0
- package/dist/{chunk-IYX5OO2K.js → chunk-QQNL4WTX.js} +15 -2
- package/dist/chunk-QQNL4WTX.js.map +1 -0
- package/dist/{chunk-2TAKLJJD.js → chunk-SACZWUA6.js} +139 -46
- package/dist/chunk-SACZWUA6.js.map +1 -0
- package/dist/{chunk-VTNEWMWJ.js → chunk-SFOAY5H4.js} +2 -2
- package/dist/{chunk-VTNEWMWJ.js.map → chunk-SFOAY5H4.js.map} +1 -1
- package/dist/chunk-UNVCT5Z7.js +73 -0
- package/dist/chunk-UNVCT5Z7.js.map +1 -0
- package/dist/{chunk-YGQTL63W.js → chunk-WDR7SKBM.js} +2 -2
- package/dist/chunk-XDGRC6OR.js +7039 -0
- package/dist/chunk-XDGRC6OR.js.map +1 -0
- package/dist/chunk-XLHLFTLI.js +399 -0
- package/dist/chunk-XLHLFTLI.js.map +1 -0
- package/dist/{chunk-B2YBS3SG.js → chunk-YNW3KBDE.js} +41 -13
- package/dist/chunk-YNW3KBDE.js.map +1 -0
- package/dist/codegen.js +1 -1
- package/dist/{components-BTwSIjXj.d.ts → components-BPzsSRs8.d.ts} +1 -1
- package/dist/definitions-0kjPV9wh.d.ts +294 -0
- package/dist/{diagnostics-1BWjRo6-.d.ts → diagnostics-DIi3ina7.d.ts} +2 -1
- package/dist/{index-CFTjJIXd.d.ts → index-CWzWpQzM.d.ts} +1 -1
- package/dist/{index.d-C0PKOVbh.d.ts → index.d-C7Ztirg6.d.ts} +211 -3
- package/dist/index.js +2 -2
- package/dist/package-set.d.ts +2 -2
- package/dist/package-set.js +2 -2
- package/dist/{protocol-nS2ojsGr.d.ts → protocol-B2LWcqB4.d.ts} +9 -0
- package/dist/reducer/advanced.d.ts +4 -4
- package/dist/reducer/advanced.js +7 -26
- package/dist/reducer/advanced.js.map +1 -1
- package/dist/reducer-contract.d.ts +1 -1
- package/dist/reducer-contract.js +2 -2
- package/dist/reducer.d.ts +17 -11
- package/dist/reducer.js +28 -6050
- package/dist/reducer.js.map +1 -1
- package/dist/reference-game-compiler.d.ts +45 -0
- package/dist/reference-game-compiler.js +25 -0
- package/dist/reference-game-compiler.js.map +1 -0
- package/dist/reference-game-source-manifest-cli.d.ts +1 -0
- package/dist/reference-game-source-manifest-cli.js +84 -0
- package/dist/reference-game-source-manifest-cli.js.map +1 -0
- package/dist/reference-games/index.d.ts +7 -217
- package/dist/reference-games/index.js +28 -208
- package/dist/reference-games/index.js.map +1 -1
- package/dist/runtime/primitives.d.ts +3 -3
- package/dist/runtime/primitives.js +3 -3
- package/dist/runtime/runtime-api.d.ts +1 -1
- package/dist/runtime/workspace-contract.d.ts +4 -4
- package/dist/runtime/workspace-contract.js +4 -4
- package/dist/{runtime-Dkfm1x2r.d.ts → runtime-B_w9AO2n.d.ts} +60 -5
- package/dist/{runtime-api-C6aWo9c0.d.ts → runtime-api-xCWLMQRT.d.ts} +2 -0
- package/dist/runtime.d.ts +7 -7
- package/dist/runtime.js +12 -12
- package/dist/schema-9jZzlEWZ.d.ts +220 -0
- package/dist/{stale-contract-artifact-error-C5AaZPJ8.d.ts → stale-contract-artifact-error-XLaweZtF.d.ts} +1 -1
- package/dist/testing-compiler.d.ts +36 -0
- package/dist/testing-compiler.js +236 -0
- package/dist/testing-compiler.js.map +1 -0
- package/dist/testing-runtime.d.ts +97 -21
- package/dist/testing-runtime.js +154 -95
- package/dist/testing-runtime.js.map +1 -1
- package/dist/testing.d.ts +178 -60
- package/dist/testing.js +641 -26
- package/dist/testing.js.map +1 -1
- package/dist/types-Bvptkukh.d.ts +122 -0
- package/dist/{types-CTeN_QAk.d.ts → types-_zfC_7CD.d.ts} +1 -1
- package/dist/ui/components.d.ts +2 -2
- package/dist/ui/plugin-styles.css +1 -1
- package/dist/{ui-contract-Ue6SywvO.d.ts → ui-contract-CUC7Lyoc.d.ts} +1 -1
- package/dist/ui.d.ts +3 -3
- package/dist/{views-Qx-EHBP8.d.ts → views-DE2eZxPz.d.ts} +15 -3
- package/package.json +22 -2
- package/dist/chunk-2TAKLJJD.js.map +0 -1
- package/dist/chunk-3BLN5POZ.js.map +0 -1
- package/dist/chunk-3OZMHZK3.js +0 -40
- package/dist/chunk-3OZMHZK3.js.map +0 -1
- package/dist/chunk-5CQIJHGF.js +0 -663
- package/dist/chunk-5CQIJHGF.js.map +0 -1
- package/dist/chunk-B2YBS3SG.js.map +0 -1
- package/dist/chunk-IYX5OO2K.js.map +0 -1
- package/dist/types-B_3pObUV.d.ts +0 -192
- /package/dist/{chunk-44N3T2A5.js.map → chunk-BUOODBVO.js.map} +0 -0
- /package/dist/{chunk-ZYONCTZ2.js.map → chunk-GMOBG7Y7.js.map} +0 -0
- /package/dist/{chunk-VTK4TIXC.js.map → chunk-JRGP6W4V.js.map} +0 -0
- /package/dist/{chunk-XV27IQHA.js.map → chunk-NGYFBNBP.js.map} +0 -0
- /package/dist/{chunk-YGQTL63W.js.map → chunk-WDR7SKBM.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JsonValue
|
|
1
|
+
import { JsonValue } from '../types.js';
|
|
2
2
|
|
|
3
3
|
type GeneratedAuthoringMetadataV1 = {
|
|
4
4
|
sdkVersion: string;
|
|
@@ -13,7 +13,7 @@ type AuthoringValidationResultV1 = {
|
|
|
13
13
|
};
|
|
14
14
|
type GeneratedArtifactV1 = {
|
|
15
15
|
path: string;
|
|
16
|
-
ownership: "authoritative" | "seed"
|
|
16
|
+
ownership: "authoritative" | "seed";
|
|
17
17
|
content: string;
|
|
18
18
|
contentSha256: string;
|
|
19
19
|
};
|
|
@@ -21,9 +21,6 @@ type GeneratedPathPatternV1 = {
|
|
|
21
21
|
prefix: string;
|
|
22
22
|
suffix: string;
|
|
23
23
|
};
|
|
24
|
-
type GenerateTestArtifactsInputV1 = {
|
|
25
|
-
manifest: GameTopologyManifest;
|
|
26
|
-
};
|
|
27
24
|
type AuthoringManifestConformanceCaseV1 = {
|
|
28
25
|
id: string;
|
|
29
26
|
manifest: JsonValue;
|
|
@@ -46,7 +43,6 @@ type ProjectAuthoringAdapterV1 = {
|
|
|
46
43
|
validateManifest(manifest: unknown): AuthoringValidationResultV1;
|
|
47
44
|
materializeManifest(manifest: unknown): JsonValue;
|
|
48
45
|
generateWorkspaceArtifacts(manifest: unknown): readonly GeneratedArtifactV1[];
|
|
49
|
-
generateTestArtifacts(input: GenerateTestArtifactsInputV1): readonly GeneratedArtifactV1[];
|
|
50
46
|
};
|
|
51
47
|
|
|
52
48
|
declare function diagnosticCodesForValidationErrors(errors: readonly string[]): readonly string[];
|
|
@@ -54,8 +50,7 @@ declare function diagnosticCodesForValidationErrors(errors: readonly string[]):
|
|
|
54
50
|
declare function validateManifest(manifest: unknown): AuthoringValidationResultV1;
|
|
55
51
|
declare function materializeManifest(manifest: unknown): JsonValue;
|
|
56
52
|
declare function generateWorkspaceArtifacts(manifest: unknown): readonly GeneratedArtifactV1[];
|
|
57
|
-
declare
|
|
58
|
-
declare const GENERATED_WORKSPACE_PATHS: readonly [...string[], "test/generated/base-state.json"];
|
|
53
|
+
declare const GENERATED_WORKSPACE_PATHS: readonly string[];
|
|
59
54
|
type GeneratedWorkspacePathPattern = {
|
|
60
55
|
readonly prefix: string;
|
|
61
56
|
readonly suffix: string;
|
|
@@ -64,4 +59,4 @@ declare const GENERATED_WORKSPACE_PATH_PATTERNS: readonly GeneratedWorkspacePath
|
|
|
64
59
|
declare const MANIFEST_CONFORMANCE_CASES: readonly AuthoringManifestConformanceCaseV1[];
|
|
65
60
|
declare const projectAuthoringAdapter: ProjectAuthoringAdapterV1;
|
|
66
61
|
|
|
67
|
-
export { type AuthoringManifestConformanceCaseV1, type AuthoringValidationResultV1, GENERATED_WORKSPACE_PATHS, GENERATED_WORKSPACE_PATH_PATTERNS, type
|
|
62
|
+
export { type AuthoringManifestConformanceCaseV1, type AuthoringValidationResultV1, GENERATED_WORKSPACE_PATHS, GENERATED_WORKSPACE_PATH_PATTERNS, type GeneratedArtifactV1, type GeneratedAuthoringMetadataV1, type GeneratedPathPatternV1, MANIFEST_CONFORMANCE_CASES, type ProjectAuthoringAdapterV1, diagnosticCodesForValidationErrors, generateWorkspaceArtifacts, materializeManifest, projectAuthoringAdapter, validateManifest };
|
package/dist/authoring/index.js
CHANGED
|
@@ -1,557 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
generateSeedFiles,
|
|
7
|
-
materializeManifestTable,
|
|
8
|
-
validateManifestAuthoring
|
|
9
|
-
} from "../chunk-2TAKLJJD.js";
|
|
10
|
-
import {
|
|
11
|
-
GENERATED_AUTHORING_METADATA
|
|
12
|
-
} from "../chunk-VTNEWMWJ.js";
|
|
13
|
-
import "../chunk-PZ5AY32C.js";
|
|
14
|
-
|
|
15
|
-
// src/authoring/adapter.ts
|
|
16
|
-
import { createHash } from "crypto";
|
|
17
|
-
|
|
18
|
-
// src/authoring/manifest-conformance-cases.ts
|
|
19
|
-
function baseManifest(cardSet, overrides = {}) {
|
|
20
|
-
return {
|
|
21
|
-
players: {
|
|
22
|
-
minPlayers: 2,
|
|
23
|
-
maxPlayers: 2,
|
|
24
|
-
optimalPlayers: 2
|
|
25
|
-
},
|
|
26
|
-
cardSets: [cardSet],
|
|
27
|
-
zones: [],
|
|
28
|
-
boardTemplates: [],
|
|
29
|
-
boards: [],
|
|
30
|
-
pieceTypes: [],
|
|
31
|
-
pieceSeeds: [],
|
|
32
|
-
dieTypes: [],
|
|
33
|
-
dieSeeds: [],
|
|
34
|
-
resources: [],
|
|
35
|
-
setupOptions: [],
|
|
36
|
-
setupProfiles: [],
|
|
37
|
-
...overrides
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function manualCardSet(id, defaultHome, cards) {
|
|
41
|
-
const cardSet = {
|
|
42
|
-
id,
|
|
43
|
-
name: id,
|
|
44
|
-
type: "manual",
|
|
45
|
-
cardSchema: { properties: {} },
|
|
46
|
-
defaultHome,
|
|
47
|
-
cards
|
|
48
|
-
};
|
|
49
|
-
return cardSet;
|
|
50
|
-
}
|
|
51
|
-
var sharedZone = {
|
|
52
|
-
id: "shared-zone",
|
|
53
|
-
name: "Shared Zone",
|
|
54
|
-
scope: "shared",
|
|
55
|
-
allowedCardSetIds: ["cards"]
|
|
56
|
-
};
|
|
57
|
-
var sharedBoard = {
|
|
58
|
-
id: "square-board",
|
|
59
|
-
name: "Square Board",
|
|
60
|
-
layout: "square",
|
|
61
|
-
scope: "shared",
|
|
62
|
-
spaces: [
|
|
63
|
-
{ id: "a1", row: 0, col: 0 },
|
|
64
|
-
{ id: "a2", row: 0, col: 1 },
|
|
65
|
-
{ id: "b1", row: 1, col: 0 },
|
|
66
|
-
{ id: "b2", row: 1, col: 1 }
|
|
67
|
-
],
|
|
68
|
-
relations: [],
|
|
69
|
-
containers: [
|
|
70
|
-
{
|
|
71
|
-
id: "display-row",
|
|
72
|
-
name: "Display Row",
|
|
73
|
-
host: { type: "board" }
|
|
74
|
-
}
|
|
75
|
-
],
|
|
76
|
-
edges: [],
|
|
77
|
-
vertices: []
|
|
78
|
-
};
|
|
79
|
-
var sharedTopology = {
|
|
80
|
-
boards: [sharedBoard],
|
|
81
|
-
pieceTypes: [
|
|
82
|
-
{
|
|
83
|
-
id: "holder",
|
|
84
|
-
name: "Holder",
|
|
85
|
-
slots: [{ id: "pocket" }]
|
|
86
|
-
}
|
|
87
|
-
],
|
|
88
|
-
pieceSeeds: [{ id: "holder-a", typeId: "holder" }]
|
|
89
|
-
};
|
|
90
|
-
var fixtures = [
|
|
91
|
-
{
|
|
92
|
-
id: "manual-default-detached",
|
|
93
|
-
manifest: baseManifest(
|
|
94
|
-
manualCardSet("cards", { type: "detached" }, [
|
|
95
|
-
{ type: "marker", name: "Marker", count: 1, properties: {} }
|
|
96
|
-
])
|
|
97
|
-
),
|
|
98
|
-
expected: {
|
|
99
|
-
valid: true,
|
|
100
|
-
transportValid: true,
|
|
101
|
-
materializedSha256: "ed6f7ce2ff4fbe697e49134f1d59157cf146e202db29a77be50e8326585f535c"
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
id: "manual-default-shared-zone",
|
|
106
|
-
manifest: baseManifest(
|
|
107
|
-
manualCardSet("cards", { type: "zone", zoneId: "shared-zone" }, [
|
|
108
|
-
{ type: "coin", name: "Coin", count: 2, properties: {} }
|
|
109
|
-
]),
|
|
110
|
-
{ zones: [sharedZone] }
|
|
111
|
-
),
|
|
112
|
-
expected: {
|
|
113
|
-
valid: true,
|
|
114
|
-
transportValid: true,
|
|
115
|
-
materializedSha256: "75028d28dbc415c81db5e2d780d55b04c4db36378a149bc02b0194d94a8cc2b9"
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: "preset-default-shared-zone",
|
|
120
|
-
manifest: baseManifest(
|
|
121
|
-
{
|
|
122
|
-
id: "cards",
|
|
123
|
-
name: "Preset Cards",
|
|
124
|
-
type: "preset",
|
|
125
|
-
presetId: "standard_52_deck",
|
|
126
|
-
defaultHome: { type: "zone", zoneId: "shared-zone" }
|
|
127
|
-
},
|
|
128
|
-
{ zones: [sharedZone] }
|
|
129
|
-
),
|
|
130
|
-
expected: {
|
|
131
|
-
valid: true,
|
|
132
|
-
transportValid: true,
|
|
133
|
-
materializedSha256: "b3471c577ed266667b16799f75aa9b7358100a94108aa46a31ad16a0291f67ca"
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: "manual-per-card-detached-override",
|
|
138
|
-
manifest: baseManifest(
|
|
139
|
-
manualCardSet("cards", { type: "zone", zoneId: "shared-zone" }, [
|
|
140
|
-
{
|
|
141
|
-
type: "removed",
|
|
142
|
-
name: "Removed",
|
|
143
|
-
count: 1,
|
|
144
|
-
home: { type: "detached" },
|
|
145
|
-
properties: {}
|
|
146
|
-
}
|
|
147
|
-
]),
|
|
148
|
-
{ zones: [sharedZone] }
|
|
149
|
-
),
|
|
150
|
-
expected: {
|
|
151
|
-
valid: true,
|
|
152
|
-
transportValid: true,
|
|
153
|
-
materializedSha256: "fdcb2de78fc391e11aca1f266fd8bbb348a82faa0fbbac1d8eb1defd8697a0e9"
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
id: "manual-per-card-shared-zone-override",
|
|
158
|
-
manifest: baseManifest(
|
|
159
|
-
manualCardSet("cards", { type: "detached" }, [
|
|
160
|
-
{
|
|
161
|
-
type: "dealt",
|
|
162
|
-
name: "Dealt",
|
|
163
|
-
count: 1,
|
|
164
|
-
home: { type: "zone", zoneId: "shared-zone" },
|
|
165
|
-
properties: {}
|
|
166
|
-
}
|
|
167
|
-
]),
|
|
168
|
-
{ zones: [sharedZone] }
|
|
169
|
-
),
|
|
170
|
-
expected: {
|
|
171
|
-
valid: true,
|
|
172
|
-
transportValid: true,
|
|
173
|
-
materializedSha256: "b6bee1db85f16e8a12a7136c7d524591f925427c8ec04d64b07905c5bc859d7a"
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
id: "manual-compatible-zones-no-inference",
|
|
178
|
-
manifest: baseManifest(
|
|
179
|
-
manualCardSet("cards", { type: "detached" }, [
|
|
180
|
-
{ type: "token", name: "Token", count: 1, properties: {} }
|
|
181
|
-
]),
|
|
182
|
-
{
|
|
183
|
-
zones: [
|
|
184
|
-
sharedZone,
|
|
185
|
-
{
|
|
186
|
-
...sharedZone,
|
|
187
|
-
id: "second-compatible-zone",
|
|
188
|
-
name: "Second Compatible Zone"
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
}
|
|
192
|
-
),
|
|
193
|
-
expected: {
|
|
194
|
-
valid: true,
|
|
195
|
-
transportValid: true,
|
|
196
|
-
materializedSha256: "2727728ba3743d2b1874b2bc573b48c88f962fdcbdcdf20c62bed551d6d955c4"
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
id: "manual-per-player-zone-rejected",
|
|
201
|
-
manifest: baseManifest(
|
|
202
|
-
manualCardSet("cards", { type: "zone", zoneId: "hand" }, [
|
|
203
|
-
{ type: "secret", name: "Secret", count: 1, properties: {} }
|
|
204
|
-
]),
|
|
205
|
-
{
|
|
206
|
-
zones: [
|
|
207
|
-
{
|
|
208
|
-
id: "hand",
|
|
209
|
-
name: "Hand",
|
|
210
|
-
scope: "perPlayer",
|
|
211
|
-
allowedCardSetIds: ["cards"]
|
|
212
|
-
}
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
),
|
|
216
|
-
expected: {
|
|
217
|
-
valid: false,
|
|
218
|
-
transportValid: true,
|
|
219
|
-
diagnosticCodes: ["CARD_HOME_PER_PLAYER_ZONE_REJECTED"]
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
id: "manual-space-home",
|
|
224
|
-
manifest: baseManifest(
|
|
225
|
-
manualCardSet(
|
|
226
|
-
"cards",
|
|
227
|
-
{ type: "space", boardId: "square-board", spaceId: "a1" },
|
|
228
|
-
[{ type: "space-card", name: "Space", count: 1, properties: {} }]
|
|
229
|
-
),
|
|
230
|
-
sharedTopology
|
|
231
|
-
),
|
|
232
|
-
expected: {
|
|
233
|
-
valid: true,
|
|
234
|
-
transportValid: true,
|
|
235
|
-
materializedSha256: "429abfb3276c67cdca59d3dc077fc73022a9716bccef2c43f6805ff5cce0f2c2"
|
|
236
|
-
}
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
id: "manual-container-home",
|
|
240
|
-
manifest: baseManifest(
|
|
241
|
-
manualCardSet(
|
|
242
|
-
"cards",
|
|
243
|
-
{
|
|
244
|
-
type: "container",
|
|
245
|
-
boardId: "square-board",
|
|
246
|
-
containerId: "display-row"
|
|
247
|
-
},
|
|
248
|
-
[
|
|
249
|
-
{
|
|
250
|
-
type: "container-card",
|
|
251
|
-
name: "Container",
|
|
252
|
-
count: 1,
|
|
253
|
-
properties: {}
|
|
254
|
-
}
|
|
255
|
-
]
|
|
256
|
-
),
|
|
257
|
-
sharedTopology
|
|
258
|
-
),
|
|
259
|
-
expected: {
|
|
260
|
-
valid: true,
|
|
261
|
-
transportValid: true,
|
|
262
|
-
materializedSha256: "eff372263227b316d064a519cf282a6cc1d2d8df4ac04673b7f47ac518d7a2a3"
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
id: "manual-slot-home",
|
|
267
|
-
manifest: baseManifest(
|
|
268
|
-
manualCardSet(
|
|
269
|
-
"cards",
|
|
270
|
-
{
|
|
271
|
-
type: "slot",
|
|
272
|
-
host: { kind: "piece", id: "holder-a" },
|
|
273
|
-
slotId: "pocket"
|
|
274
|
-
},
|
|
275
|
-
[{ type: "slot-card", name: "Slot", count: 1, properties: {} }]
|
|
276
|
-
),
|
|
277
|
-
sharedTopology
|
|
278
|
-
),
|
|
279
|
-
expected: {
|
|
280
|
-
valid: true,
|
|
281
|
-
transportValid: true,
|
|
282
|
-
materializedSha256: "af3111f8d861ae69b77f2f46ba3df9f2f698f3306c412efc91095544e8121ab6"
|
|
283
|
-
}
|
|
284
|
-
},
|
|
285
|
-
{
|
|
286
|
-
id: "manual-edge-home",
|
|
287
|
-
manifest: baseManifest(
|
|
288
|
-
manualCardSet(
|
|
289
|
-
"cards",
|
|
290
|
-
{
|
|
291
|
-
type: "edge",
|
|
292
|
-
boardId: "square-board",
|
|
293
|
-
ref: { spaces: ["a1", "a2"] }
|
|
294
|
-
},
|
|
295
|
-
[{ type: "edge-card", name: "Edge", count: 1, properties: {} }]
|
|
296
|
-
),
|
|
297
|
-
sharedTopology
|
|
298
|
-
),
|
|
299
|
-
expected: {
|
|
300
|
-
valid: true,
|
|
301
|
-
transportValid: true,
|
|
302
|
-
materializedSha256: "f8606ea25f52d9bf801aa4fee9f558b60d7f39bcd601d57bdfccdf1ddbf4c500"
|
|
303
|
-
}
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
id: "manual-vertex-home",
|
|
307
|
-
manifest: baseManifest(
|
|
308
|
-
manualCardSet(
|
|
309
|
-
"cards",
|
|
310
|
-
{
|
|
311
|
-
type: "vertex",
|
|
312
|
-
boardId: "square-board",
|
|
313
|
-
ref: { spaces: ["a1", "a2", "b1", "b2"] }
|
|
314
|
-
},
|
|
315
|
-
[{ type: "vertex-card", name: "Vertex", count: 1, properties: {} }]
|
|
316
|
-
),
|
|
317
|
-
sharedTopology
|
|
318
|
-
),
|
|
319
|
-
expected: {
|
|
320
|
-
valid: true,
|
|
321
|
-
transportValid: true,
|
|
322
|
-
materializedSha256: "e84a4920ea8b71052acd42accf11101380ab982e493ebe207113dd4d243034de"
|
|
323
|
-
}
|
|
324
|
-
},
|
|
325
|
-
{
|
|
326
|
-
id: "manual-invalid-target-id",
|
|
327
|
-
manifest: baseManifest(
|
|
328
|
-
manualCardSet("cards", { type: "zone", zoneId: "missing-zone" }, [
|
|
329
|
-
{ type: "lost", name: "Lost", count: 1, properties: {} }
|
|
330
|
-
])
|
|
331
|
-
),
|
|
332
|
-
expected: {
|
|
333
|
-
valid: false,
|
|
334
|
-
transportValid: true,
|
|
335
|
-
diagnosticCodes: ["AUTHORING_VALIDATION_ERROR"]
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
id: "manual-count-order",
|
|
340
|
-
manifest: baseManifest(
|
|
341
|
-
manualCardSet("cards", { type: "zone", zoneId: "shared-zone" }, [
|
|
342
|
-
{ type: "first", name: "First", count: 3, properties: {} },
|
|
343
|
-
{ type: "second", name: "Second", count: 2, properties: {} }
|
|
344
|
-
]),
|
|
345
|
-
{ zones: [sharedZone] }
|
|
346
|
-
),
|
|
347
|
-
expected: {
|
|
348
|
-
valid: true,
|
|
349
|
-
transportValid: true,
|
|
350
|
-
materializedSha256: "2e4ced71909d4c36053317311c9ceaf3bf3adba875bff3fe9596bbea47746423"
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
id: "manual-generated-scenario-base",
|
|
355
|
-
manifest: baseManifest(
|
|
356
|
-
manualCardSet("cards", { type: "zone", zoneId: "shared-zone" }, [
|
|
357
|
-
{ type: "alpha", name: "Alpha", count: 2, properties: {} },
|
|
358
|
-
{ type: "beta", name: "Beta", count: 1, properties: {} }
|
|
359
|
-
]),
|
|
360
|
-
{ zones: [sharedZone] }
|
|
361
|
-
),
|
|
362
|
-
expected: {
|
|
363
|
-
valid: true,
|
|
364
|
-
transportValid: true,
|
|
365
|
-
materializedSha256: "b1b65d708b503036a49434c64c6f4aab3bedd295681bd103b69c4b98fdd5e2bb"
|
|
366
|
-
}
|
|
367
|
-
},
|
|
368
|
-
{
|
|
369
|
-
id: "manual-default-required",
|
|
370
|
-
manifest: {
|
|
371
|
-
...baseManifest(
|
|
372
|
-
manualCardSet("cards", { type: "detached" }, [
|
|
373
|
-
{ type: "card", name: "Card", count: 1, properties: {} }
|
|
374
|
-
])
|
|
375
|
-
),
|
|
376
|
-
cardSets: [
|
|
377
|
-
{
|
|
378
|
-
id: "cards",
|
|
379
|
-
name: "Cards",
|
|
380
|
-
type: "manual",
|
|
381
|
-
cardSchema: { properties: {} },
|
|
382
|
-
cards: [{ type: "card", name: "Card", count: 1, properties: {} }]
|
|
383
|
-
}
|
|
384
|
-
]
|
|
385
|
-
},
|
|
386
|
-
expected: {
|
|
387
|
-
valid: false,
|
|
388
|
-
transportValid: false,
|
|
389
|
-
diagnosticCodes: ["MANUAL_CARD_SET_DEFAULT_HOME_REQUIRED"]
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
];
|
|
393
|
-
function deepFreeze(value) {
|
|
394
|
-
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
395
|
-
for (const entry of Object.values(value)) {
|
|
396
|
-
deepFreeze(entry);
|
|
397
|
-
}
|
|
398
|
-
Object.freeze(value);
|
|
399
|
-
}
|
|
400
|
-
return value;
|
|
401
|
-
}
|
|
402
|
-
function diagnosticCodesForValidationErrors(errors) {
|
|
403
|
-
return [...new Set(errors.map(diagnosticCodeForValidationError))].sort();
|
|
404
|
-
}
|
|
405
|
-
function diagnosticCodeForValidationError(error) {
|
|
406
|
-
if (error.includes(".defaultHome: Manual card sets must declare defaultHome")) {
|
|
407
|
-
return "MANUAL_CARD_SET_DEFAULT_HOME_REQUIRED";
|
|
408
|
-
}
|
|
409
|
-
if (error.includes("cannot target per-player zone")) {
|
|
410
|
-
return "CARD_HOME_PER_PLAYER_ZONE_REJECTED";
|
|
411
|
-
}
|
|
412
|
-
if (error.includes("cannot target per-player board")) {
|
|
413
|
-
return "CARD_HOME_PER_PLAYER_BOARD_REJECTED";
|
|
414
|
-
}
|
|
415
|
-
return "AUTHORING_VALIDATION_ERROR";
|
|
416
|
-
}
|
|
417
|
-
function createManifestConformanceCases() {
|
|
418
|
-
return deepFreeze(
|
|
419
|
-
fixtures
|
|
420
|
-
);
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
// src/authoring/adapter.ts
|
|
424
|
-
var PLAYER_IDS = ["player-1", "player-2"];
|
|
425
|
-
function stableJson(value) {
|
|
426
|
-
if (value === void 0) {
|
|
427
|
-
return "null";
|
|
428
|
-
}
|
|
429
|
-
if (value === null || typeof value !== "object") {
|
|
430
|
-
return JSON.stringify(value);
|
|
431
|
-
}
|
|
432
|
-
if (Array.isArray(value)) {
|
|
433
|
-
return `[${value.map((item) => stableJson(item)).join(",")}]`;
|
|
434
|
-
}
|
|
435
|
-
return `{${Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`).join(",")}}`;
|
|
436
|
-
}
|
|
437
|
-
function sha256(value) {
|
|
438
|
-
return createHash("sha256").update(value).digest("hex");
|
|
439
|
-
}
|
|
440
|
-
function assertManifest(manifest) {
|
|
441
|
-
if (!manifest || typeof manifest !== "object") {
|
|
442
|
-
throw new Error("Expected a manifest object.");
|
|
443
|
-
}
|
|
444
|
-
return manifest;
|
|
445
|
-
}
|
|
446
|
-
function normalizeArtifact(path, content, ownership) {
|
|
447
|
-
if (path.length === 0 || path.startsWith("/") || path.includes("\\") || path.split("/").some((segment) => !segment || segment === "." || segment === "..")) {
|
|
448
|
-
throw new Error(`Generated artifact path '${path}' is not normalized.`);
|
|
449
|
-
}
|
|
450
|
-
return {
|
|
451
|
-
path,
|
|
452
|
-
ownership,
|
|
453
|
-
content,
|
|
454
|
-
contentSha256: sha256(content)
|
|
455
|
-
};
|
|
456
|
-
}
|
|
457
|
-
function normalizeArtifacts(entries, ownership) {
|
|
458
|
-
return Object.entries(entries).map(([path, content]) => normalizeArtifact(path, content, ownership)).sort((left, right) => left.path.localeCompare(right.path));
|
|
459
|
-
}
|
|
460
|
-
function validateNoDuplicateArtifactPaths(artifacts) {
|
|
461
|
-
const seen = /* @__PURE__ */ new Set();
|
|
462
|
-
for (const artifact of artifacts) {
|
|
463
|
-
if (seen.has(artifact.path)) {
|
|
464
|
-
throw new Error(
|
|
465
|
-
`Generated artifact path '${artifact.path}' was emitted twice.`
|
|
466
|
-
);
|
|
467
|
-
}
|
|
468
|
-
seen.add(artifact.path);
|
|
469
|
-
if (artifact.contentSha256 !== sha256(artifact.content)) {
|
|
470
|
-
throw new Error(
|
|
471
|
-
`Generated artifact '${artifact.path}' has a stale hash.`
|
|
472
|
-
);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
function validateManifest(manifest) {
|
|
477
|
-
try {
|
|
478
|
-
const gameManifest = assertManifest(manifest);
|
|
479
|
-
const result = validateManifestAuthoring(gameManifest);
|
|
480
|
-
const errors = [...result.errors];
|
|
481
|
-
if (errors.length === 0) {
|
|
482
|
-
try {
|
|
483
|
-
materializeManifest(gameManifest);
|
|
484
|
-
} catch (error) {
|
|
485
|
-
errors.push(error instanceof Error ? error.message : String(error));
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return {
|
|
489
|
-
valid: errors.length === 0,
|
|
490
|
-
errors,
|
|
491
|
-
warnings: result.warnings
|
|
492
|
-
};
|
|
493
|
-
} catch (error) {
|
|
494
|
-
return {
|
|
495
|
-
valid: false,
|
|
496
|
-
errors: [error instanceof Error ? error.message : String(error)],
|
|
497
|
-
warnings: []
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
function materializeManifest(manifest) {
|
|
502
|
-
return materializeManifestTable({
|
|
503
|
-
manifest: assertManifest(manifest),
|
|
504
|
-
playerIds: PLAYER_IDS,
|
|
505
|
-
shuffleItems: (values) => [...values]
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
function generateWorkspaceArtifacts(manifest) {
|
|
509
|
-
const gameManifest = assertManifest(manifest);
|
|
510
|
-
const artifacts = [
|
|
511
|
-
...normalizeArtifacts(
|
|
512
|
-
generateAuthoritativeFiles(gameManifest),
|
|
513
|
-
"authoritative"
|
|
514
|
-
),
|
|
515
|
-
...normalizeArtifacts(generateSeedFiles(gameManifest), "seed")
|
|
516
|
-
].sort((left, right) => left.path.localeCompare(right.path));
|
|
517
|
-
validateNoDuplicateArtifactPaths(artifacts);
|
|
518
|
-
return artifacts;
|
|
519
|
-
}
|
|
520
|
-
function generateTestArtifacts(input) {
|
|
521
|
-
const materialized = materializeManifest(input.manifest);
|
|
522
|
-
return [
|
|
523
|
-
normalizeArtifact(
|
|
524
|
-
"test/generated/base-state.json",
|
|
525
|
-
`${stableJson(materialized)}
|
|
526
|
-
`,
|
|
527
|
-
"derived-test"
|
|
528
|
-
)
|
|
529
|
-
];
|
|
530
|
-
}
|
|
531
|
-
var GENERATED_WORKSPACE_PATHS = [
|
|
532
|
-
...AUTHORITATIVE_GENERATED_FILES,
|
|
533
|
-
...SEED_FILES,
|
|
534
|
-
"test/generated/base-state.json"
|
|
535
|
-
];
|
|
536
|
-
var GENERATED_WORKSPACE_PATH_PATTERNS = SEED_FILE_PATTERNS;
|
|
537
|
-
var MANIFEST_CONFORMANCE_CASES = createManifestConformanceCases();
|
|
538
|
-
var projectAuthoringAdapter = {
|
|
539
|
-
protocolVersion: 1,
|
|
540
|
-
metadata: GENERATED_AUTHORING_METADATA,
|
|
541
|
-
generatedPaths: GENERATED_WORKSPACE_PATHS,
|
|
542
|
-
generatedPathPatterns: GENERATED_WORKSPACE_PATH_PATTERNS,
|
|
543
|
-
manifestConformanceCases: MANIFEST_CONFORMANCE_CASES,
|
|
544
|
-
validateManifest,
|
|
545
|
-
materializeManifest,
|
|
2
|
+
GENERATED_WORKSPACE_PATHS,
|
|
3
|
+
GENERATED_WORKSPACE_PATH_PATTERNS,
|
|
4
|
+
MANIFEST_CONFORMANCE_CASES,
|
|
5
|
+
diagnosticCodesForValidationErrors,
|
|
546
6
|
generateWorkspaceArtifacts,
|
|
547
|
-
|
|
548
|
-
|
|
7
|
+
materializeManifest,
|
|
8
|
+
projectAuthoringAdapter,
|
|
9
|
+
validateManifest
|
|
10
|
+
} from "../chunk-7ADPYKFT.js";
|
|
11
|
+
import "../chunk-SFOAY5H4.js";
|
|
12
|
+
import "../chunk-SACZWUA6.js";
|
|
13
|
+
import "../chunk-PZ5AY32C.js";
|
|
549
14
|
export {
|
|
550
15
|
GENERATED_WORKSPACE_PATHS,
|
|
551
16
|
GENERATED_WORKSPACE_PATH_PATTERNS,
|
|
552
17
|
MANIFEST_CONFORMANCE_CASES,
|
|
553
18
|
diagnosticCodesForValidationErrors,
|
|
554
|
-
generateTestArtifacts,
|
|
555
19
|
generateWorkspaceArtifacts,
|
|
556
20
|
materializeManifest,
|
|
557
21
|
projectAuthoringAdapter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/authoring/adapter.ts","../../src/authoring/manifest-conformance-cases.ts"],"sourcesContent":["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 GenerateTestArtifactsInputV1,\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 function generateTestArtifacts(\n input: GenerateTestArtifactsInputV1,\n): readonly GeneratedArtifactV1[] {\n const materialized = materializeManifest(input.manifest);\n return [\n normalizeArtifact(\n \"test/generated/base-state.json\",\n `${stableJson(materialized)}\\n`,\n \"derived-test\",\n ),\n ];\n}\n\nexport const GENERATED_WORKSPACE_PATHS = [\n ...AUTHORITATIVE_GENERATED_FILES,\n ...SEED_FILES,\n \"test/generated/base-state.json\",\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 generateTestArtifacts,\n};\n\nexport { diagnosticCodesForValidationErrors, stableJson };\n","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"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|