@dreamboard-games/cli 0.1.30-alpha.2 → 0.1.30-alpha.4
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/dist/agent-verifier/agent-workspace-verifier.mjs +227 -0
- package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -0
- package/dist/agent-verifier/chunk-27EEIZCI.mjs +185 -0
- package/dist/agent-verifier/chunk-27EEIZCI.mjs.map +1 -0
- package/dist/agent-verifier/chunk-5NYBTZB4.mjs +226 -0
- package/dist/agent-verifier/chunk-5NYBTZB4.mjs.map +1 -0
- package/dist/agent-verifier/chunk-776W3UGV.mjs +167 -0
- package/dist/agent-verifier/chunk-776W3UGV.mjs.map +1 -0
- package/dist/agent-verifier/chunk-C3VW3DTA.mjs +2909 -0
- package/dist/agent-verifier/chunk-C3VW3DTA.mjs.map +1 -0
- package/dist/agent-verifier/chunk-F2DIOJJZ.mjs +302 -0
- package/dist/agent-verifier/chunk-F2DIOJJZ.mjs.map +1 -0
- package/dist/agent-verifier/chunk-G42BGGG2.mjs +70 -0
- package/dist/agent-verifier/chunk-G42BGGG2.mjs.map +1 -0
- package/dist/agent-verifier/chunk-H6XDQJ3N.mjs +11 -0
- package/dist/agent-verifier/chunk-H76MT5UR.mjs +57 -0
- package/dist/agent-verifier/chunk-H76MT5UR.mjs.map +1 -0
- package/dist/agent-verifier/chunk-IAYRNVUC.mjs +49 -0
- package/dist/agent-verifier/chunk-IAYRNVUC.mjs.map +1 -0
- package/dist/agent-verifier/chunk-IDVQXGAO.mjs +222 -0
- package/dist/agent-verifier/chunk-IDVQXGAO.mjs.map +1 -0
- package/dist/agent-verifier/chunk-JO5AMVZU.mjs +1744 -0
- package/dist/agent-verifier/chunk-JO5AMVZU.mjs.map +1 -0
- package/dist/agent-verifier/chunk-JZTH3EMV.mjs +14523 -0
- package/dist/agent-verifier/chunk-JZTH3EMV.mjs.map +1 -0
- package/dist/agent-verifier/chunk-KDBSVLCF.mjs +624 -0
- package/dist/agent-verifier/chunk-KDBSVLCF.mjs.map +1 -0
- package/dist/agent-verifier/chunk-MW2QIWWA.mjs +729 -0
- package/dist/agent-verifier/chunk-MW2QIWWA.mjs.map +1 -0
- package/dist/agent-verifier/chunk-NAK77WXW.mjs +767 -0
- package/dist/agent-verifier/chunk-NAK77WXW.mjs.map +1 -0
- package/dist/agent-verifier/chunk-ON62IGWK.mjs +3137 -0
- package/dist/agent-verifier/chunk-ON62IGWK.mjs.map +1 -0
- package/dist/agent-verifier/chunk-QBAF7EYR.mjs +214 -0
- package/dist/agent-verifier/chunk-QBAF7EYR.mjs.map +1 -0
- package/dist/agent-verifier/chunk-QZH6IEZS.mjs +39 -0
- package/dist/agent-verifier/chunk-QZH6IEZS.mjs.map +1 -0
- package/dist/agent-verifier/chunk-TAEQKBJB.mjs +107 -0
- package/dist/agent-verifier/chunk-TAEQKBJB.mjs.map +1 -0
- package/dist/agent-verifier/chunk-UIOLGH4A.mjs +150 -0
- package/dist/agent-verifier/chunk-UIOLGH4A.mjs.map +1 -0
- package/dist/agent-verifier/chunk-XKCJBIRY.mjs +75 -0
- package/dist/agent-verifier/chunk-XKCJBIRY.mjs.map +1 -0
- package/dist/agent-verifier/chunk-XQXDOBYB.mjs +382 -0
- package/dist/agent-verifier/chunk-XQXDOBYB.mjs.map +1 -0
- package/dist/agent-verifier/chunk-YDIOW2BO.mjs +45 -0
- package/dist/agent-verifier/chunk-YDIOW2BO.mjs.map +1 -0
- package/dist/agent-verifier/chunk-YE7UAO3T.mjs +129 -0
- package/dist/agent-verifier/chunk-YE7UAO3T.mjs.map +1 -0
- package/dist/agent-verifier/chunk-Z6OZWUIZ.mjs +261 -0
- package/dist/agent-verifier/chunk-Z6OZWUIZ.mjs.map +1 -0
- package/dist/agent-verifier/chunk-ZEELHSY3.mjs +20 -0
- package/dist/agent-verifier/chunk-ZEELHSY3.mjs.map +1 -0
- package/dist/agent-verifier/compile-576O7TYP.mjs +312 -0
- package/dist/agent-verifier/compile-576O7TYP.mjs.map +1 -0
- package/dist/agent-verifier/global-config-NYCSCAUI.mjs +18 -0
- package/dist/agent-verifier/keychain-backend-A3MRWLPF.mjs +135 -0
- package/dist/agent-verifier/keychain-backend-A3MRWLPF.mjs.map +1 -0
- package/dist/agent-verifier/local-files-QVJ2H3MH.mjs +45 -0
- package/dist/agent-verifier/local-files-QVJ2H3MH.mjs.map +1 -0
- package/dist/agent-verifier/local-typecheck-2JWG5IGL.mjs +10 -0
- package/dist/agent-verifier/local-typecheck-2JWG5IGL.mjs.map +1 -0
- package/dist/agent-verifier/materialize-workspace-OZKOQCSQ.mjs +89 -0
- package/dist/agent-verifier/materialize-workspace-OZKOQCSQ.mjs.map +1 -0
- package/dist/agent-verifier/project-state-XKUSCFSV.mjs +33 -0
- package/dist/agent-verifier/project-state-XKUSCFSV.mjs.map +1 -0
- package/dist/agent-verifier/prompt-VKHMCQT6.mjs +756 -0
- package/dist/agent-verifier/prompt-VKHMCQT6.mjs.map +1 -0
- package/dist/agent-verifier/reducer-bundle-preflight-7NYZF5ZT.mjs +20 -0
- package/dist/agent-verifier/reducer-bundle-preflight-7NYZF5ZT.mjs.map +1 -0
- package/dist/agent-verifier/reducer-contract-preflight-COD2CO22.mjs +11 -0
- package/dist/agent-verifier/reducer-contract-preflight-COD2CO22.mjs.map +1 -0
- package/dist/agent-verifier/reducer-native-test-harness-QC7HZUK4.mjs +50 -0
- package/dist/agent-verifier/reducer-native-test-harness-QC7HZUK4.mjs.map +1 -0
- package/dist/agent-verifier/static-scaffold-JBUE3ROP.mjs +27 -0
- package/dist/agent-verifier/static-scaffold-JBUE3ROP.mjs.map +1 -0
- package/dist/agent-verifier/sync-C6S3OGCD.mjs +588 -0
- package/dist/agent-verifier/sync-C6S3OGCD.mjs.map +1 -0
- package/dist/agent-verifier/test-Y5UGQV7J.mjs +353 -0
- package/dist/agent-verifier/test-Y5UGQV7J.mjs.map +1 -0
- package/dist/agent-verifier/workspace-codegen-WPZHMATU.mjs +10 -0
- package/dist/agent-verifier/workspace-codegen-WPZHMATU.mjs.map +1 -0
- package/dist/agent-verifier/workspace-dependencies-B6A2ZX55.mjs +15 -0
- package/dist/agent-verifier/workspace-dependencies-B6A2ZX55.mjs.map +1 -0
- package/dist/chunk-2H7UOFLK.js +11 -0
- package/dist/chunk-2H7UOFLK.js.map +1 -0
- package/dist/{chunk-N7XPNNUI.js → chunk-3NRROR4P.js} +3 -3
- package/dist/{chunk-TAQKH67O.js → chunk-M4SCKH5M.js} +8 -2224
- package/dist/chunk-M4SCKH5M.js.map +1 -0
- package/dist/{global-config-S4ZIPECE.js → global-config-YBFEGJQG.js} +3 -3
- package/dist/global-config-YBFEGJQG.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/internal.js +3 -3
- package/dist/{keychain-backend-HDF4TZDL.js → keychain-backend-JHTXAKWC.js} +2 -2
- package/dist/{prompt-NDV3AE5L.js → prompt-GMZABCJC.js} +2 -2
- package/package.json +3 -2
- package/dist/chunk-SEGVTWSK.js +0 -44
- package/dist/chunk-TAQKH67O.js.map +0 -1
- /package/dist/{chunk-SEGVTWSK.js.map → agent-verifier/chunk-H6XDQJ3N.mjs.map} +0 -0
- /package/dist/{global-config-S4ZIPECE.js.map → agent-verifier/global-config-NYCSCAUI.mjs.map} +0 -0
- /package/dist/{chunk-N7XPNNUI.js.map → chunk-3NRROR4P.js.map} +0 -0
- /package/dist/{keychain-backend-HDF4TZDL.js.map → keychain-backend-JHTXAKWC.js.map} +0 -0
- /package/dist/{prompt-NDV3AE5L.js.map → prompt-GMZABCJC.js.map} +0 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CONFIG_FLAG_ARGS,
|
|
4
|
+
defineCommand,
|
|
5
|
+
findProjectCompiledResultsForRevision,
|
|
6
|
+
getProjectCompiledResultSdk,
|
|
7
|
+
parseConfigFlags,
|
|
8
|
+
uploadInitialProjectionSdk
|
|
9
|
+
} from "./chunk-KDBSVLCF.mjs";
|
|
10
|
+
import {
|
|
11
|
+
getProjectAuthoringState,
|
|
12
|
+
getProjectCompileState,
|
|
13
|
+
getProjectPendingAuthoringSync
|
|
14
|
+
} from "./chunk-YE7UAO3T.mjs";
|
|
15
|
+
import {
|
|
16
|
+
generateReducerNativeArtifacts,
|
|
17
|
+
isReducerNativeTestingWorkspace,
|
|
18
|
+
runReducerNativeScenarios
|
|
19
|
+
} from "./chunk-ON62IGWK.mjs";
|
|
20
|
+
import "./chunk-XKCJBIRY.mjs";
|
|
21
|
+
import {
|
|
22
|
+
STALE_CONTRACT_ARTIFACT_CODE,
|
|
23
|
+
STALE_CONTRACT_ARTIFACT_EXIT_CODE,
|
|
24
|
+
isDreamboardApiError,
|
|
25
|
+
isStaleContractArtifactMessage
|
|
26
|
+
} from "./chunk-IDVQXGAO.mjs";
|
|
27
|
+
import {
|
|
28
|
+
assertReleaseEnvironmentPortableDependencies,
|
|
29
|
+
configureClient,
|
|
30
|
+
consola,
|
|
31
|
+
resolveProjectContext
|
|
32
|
+
} from "./chunk-JO5AMVZU.mjs";
|
|
33
|
+
import "./chunk-5NYBTZB4.mjs";
|
|
34
|
+
import "./chunk-27EEIZCI.mjs";
|
|
35
|
+
import "./chunk-F2DIOJJZ.mjs";
|
|
36
|
+
import {
|
|
37
|
+
IS_PUBLISHED_BUILD
|
|
38
|
+
} from "./chunk-776W3UGV.mjs";
|
|
39
|
+
import "./chunk-C3VW3DTA.mjs";
|
|
40
|
+
import "./chunk-JZTH3EMV.mjs";
|
|
41
|
+
import "./chunk-QBAF7EYR.mjs";
|
|
42
|
+
import "./chunk-NAK77WXW.mjs";
|
|
43
|
+
import "./chunk-TAEQKBJB.mjs";
|
|
44
|
+
import "./chunk-IAYRNVUC.mjs";
|
|
45
|
+
import "./chunk-H76MT5UR.mjs";
|
|
46
|
+
import "./chunk-H6XDQJ3N.mjs";
|
|
47
|
+
|
|
48
|
+
// src/commands/test.ts
|
|
49
|
+
import { readFile } from "fs/promises";
|
|
50
|
+
import path from "path";
|
|
51
|
+
|
|
52
|
+
// src/services/testing/runtime-mode.ts
|
|
53
|
+
function isRemoteTestEnvironment(environment) {
|
|
54
|
+
return environment === "staging" || environment === "prod";
|
|
55
|
+
}
|
|
56
|
+
function shouldUseRemoteTestRuntime(environment) {
|
|
57
|
+
return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/services/workflows/resolve-latest-compiled-result.ts
|
|
61
|
+
async function resolveLatestCompiledResult(projectRoot, projectConfig) {
|
|
62
|
+
void projectRoot;
|
|
63
|
+
const authoring = getProjectAuthoringState(projectConfig);
|
|
64
|
+
if (getProjectPendingAuthoringSync(projectConfig)) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
"Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first."
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
if (authoring.revisionDigest) {
|
|
70
|
+
const compile = getProjectCompileState(projectConfig);
|
|
71
|
+
const latestSuccess = (await findProjectCompiledResultsForRevision({
|
|
72
|
+
projectId: projectConfig.projectId,
|
|
73
|
+
revisionDigest: authoring.revisionDigest
|
|
74
|
+
})).find((result) => result.success);
|
|
75
|
+
const matchingLocalSuccess = compile.latestSuccessful?.revisionDigest === authoring.revisionDigest ? compile.latestSuccessful : void 0;
|
|
76
|
+
const resolvedSuccess = latestSuccess ?? (matchingLocalSuccess?.resultId ? await getProjectCompiledResultSdk(
|
|
77
|
+
projectConfig.projectId,
|
|
78
|
+
matchingLocalSuccess.resultId
|
|
79
|
+
) : void 0);
|
|
80
|
+
if (!resolvedSuccess?.success) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
"No successful compile exists for the current authored revision. Run 'dreamboard compile' first."
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
const resultRevisionDigest = resolvedSuccess.revisionDigest;
|
|
86
|
+
if (resultRevisionDigest && resultRevisionDigest !== authoring.revisionDigest) {
|
|
87
|
+
consola.warn(
|
|
88
|
+
`Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
consola.info(
|
|
92
|
+
`Project summary:
|
|
93
|
+
compiledResultId: ${resolvedSuccess.id}
|
|
94
|
+
revisionDigest: ${authoring.revisionDigest}`
|
|
95
|
+
);
|
|
96
|
+
return resolvedSuccess;
|
|
97
|
+
}
|
|
98
|
+
throw new Error(
|
|
99
|
+
"This workspace does not know its project revision yet. Run 'dreamboard sync' first."
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// src/commands/test.ts
|
|
104
|
+
var REDUCER_NATIVE_TEST_WORKSPACE_ERROR = "dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.";
|
|
105
|
+
var NO_REDUCER_NATIVE_BASES_FOUND_ERROR = "No bases found under test/bases/*.base.ts";
|
|
106
|
+
var NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR = "No scenarios found under test/scenarios/*.scenario.ts";
|
|
107
|
+
function isPreviewProjectionEndpointUnavailable(error) {
|
|
108
|
+
if (!isDreamboardApiError(error) || error.status !== 404) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const endpoint = error.problem.instance ?? error.problem.context?.endpoint;
|
|
112
|
+
const message = error.problem.detail ?? error.problem.title;
|
|
113
|
+
return endpoint?.includes("/preview/initial-projection") === true && message?.toLowerCase() === "not found";
|
|
114
|
+
}
|
|
115
|
+
async function uploadGeneratedPreviewProjection(options) {
|
|
116
|
+
const previewBase = options.bases.find((base) => base.definition.id === "initial-turn") ?? options.bases[0];
|
|
117
|
+
if (!previewBase) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const projectionPath = path.join(
|
|
121
|
+
options.projectRoot,
|
|
122
|
+
"test",
|
|
123
|
+
"generated",
|
|
124
|
+
"bases",
|
|
125
|
+
previewBase.definition.id,
|
|
126
|
+
"player-1.projection.json"
|
|
127
|
+
);
|
|
128
|
+
const projectionJson = await readFile(projectionPath, "utf8");
|
|
129
|
+
try {
|
|
130
|
+
await uploadInitialProjectionSdk(options.gameId, projectionJson);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
if (isPreviewProjectionEndpointUnavailable(error)) {
|
|
133
|
+
consola.warn(
|
|
134
|
+
"Skipping preview projection upload because the selected backend does not expose the preview projection endpoint."
|
|
135
|
+
);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function resolveRequestedRunner(value) {
|
|
142
|
+
if (value == null || value === "") {
|
|
143
|
+
return void 0;
|
|
144
|
+
}
|
|
145
|
+
if (value === "reducer" || value === "remote" || value === "browser") {
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
throw new Error(
|
|
149
|
+
`Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
function isStaleContractArtifactResult(result) {
|
|
153
|
+
return result.errorCode === STALE_CONTRACT_ARTIFACT_CODE || (result.error ? isStaleContractArtifactMessage(result.error) : false);
|
|
154
|
+
}
|
|
155
|
+
function resolveTestRunExitCode(summary) {
|
|
156
|
+
if (summary.failed === 0) {
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
return summary.results.some(
|
|
160
|
+
(result) => !result.success && isStaleContractArtifactResult(result)
|
|
161
|
+
) ? STALE_CONTRACT_ARTIFACT_EXIT_CODE : 1;
|
|
162
|
+
}
|
|
163
|
+
async function assertReducerNativeTestingWorkspace(projectRoot) {
|
|
164
|
+
if (await isReducerNativeTestingWorkspace(projectRoot)) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);
|
|
168
|
+
}
|
|
169
|
+
async function resolveReducerNativeRuntimeIdentity(options) {
|
|
170
|
+
if (options.useRemoteRuntime || options.runner === "remote" || options.runner === "browser") {
|
|
171
|
+
const latestCompiledResult = await resolveLatestCompiledResult(
|
|
172
|
+
options.projectRoot,
|
|
173
|
+
options.projectConfig
|
|
174
|
+
);
|
|
175
|
+
return {
|
|
176
|
+
gameId: options.projectConfig.gameId,
|
|
177
|
+
compiledResultId: latestCompiledResult.id
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
gameId: options.projectConfig.gameId,
|
|
182
|
+
compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
var generateCommand = defineCommand({
|
|
186
|
+
meta: {
|
|
187
|
+
name: "generate",
|
|
188
|
+
description: "Generate reducer-native base artifacts for typed scenarios"
|
|
189
|
+
},
|
|
190
|
+
args: {
|
|
191
|
+
scenario: {
|
|
192
|
+
type: "string",
|
|
193
|
+
description: "Optional scenario file path under test/scenarios"
|
|
194
|
+
},
|
|
195
|
+
debug: {
|
|
196
|
+
type: "boolean",
|
|
197
|
+
description: "Print full reducer-native validation details",
|
|
198
|
+
default: false
|
|
199
|
+
},
|
|
200
|
+
"update-snapshots": {
|
|
201
|
+
type: "boolean",
|
|
202
|
+
description: "Refresh generated projection and scenario snapshots",
|
|
203
|
+
default: false
|
|
204
|
+
},
|
|
205
|
+
...CONFIG_FLAG_ARGS
|
|
206
|
+
},
|
|
207
|
+
async run({ args }) {
|
|
208
|
+
const parsedFlags = parseConfigFlags(args);
|
|
209
|
+
const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
|
|
210
|
+
const { projectRoot, projectConfig, config } = await resolveProjectContext(
|
|
211
|
+
parsedFlags,
|
|
212
|
+
{ requireAuth: useRemoteRuntime }
|
|
213
|
+
);
|
|
214
|
+
await assertReleaseEnvironmentPortableDependencies({
|
|
215
|
+
projectRoot,
|
|
216
|
+
projectConfig,
|
|
217
|
+
environment: config.environment
|
|
218
|
+
});
|
|
219
|
+
await assertReducerNativeTestingWorkspace(projectRoot);
|
|
220
|
+
const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
|
|
221
|
+
projectRoot,
|
|
222
|
+
projectConfig,
|
|
223
|
+
useRemoteRuntime
|
|
224
|
+
});
|
|
225
|
+
const { bases, scenarios } = await generateReducerNativeArtifacts({
|
|
226
|
+
projectRoot,
|
|
227
|
+
scenarioPath: args.scenario,
|
|
228
|
+
compiledResultId: runtimeIdentity.compiledResultId,
|
|
229
|
+
gameId: runtimeIdentity.gameId,
|
|
230
|
+
debug: Boolean(args.debug)
|
|
231
|
+
});
|
|
232
|
+
if (bases.length === 0) {
|
|
233
|
+
throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);
|
|
234
|
+
}
|
|
235
|
+
if (scenarios.length === 0) {
|
|
236
|
+
throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);
|
|
237
|
+
}
|
|
238
|
+
if (useRemoteRuntime && config.authToken) {
|
|
239
|
+
await configureClient(config);
|
|
240
|
+
await uploadGeneratedPreviewProjection({
|
|
241
|
+
projectRoot,
|
|
242
|
+
gameId: runtimeIdentity.gameId,
|
|
243
|
+
bases
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
246
|
+
consola.info(
|
|
247
|
+
"Skipping preview projection upload because this test generation is local-only."
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
consola.success(
|
|
251
|
+
`Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
var runCommand = defineCommand({
|
|
256
|
+
meta: {
|
|
257
|
+
name: "run",
|
|
258
|
+
description: "Run reducer-native scenarios from test/scenarios"
|
|
259
|
+
},
|
|
260
|
+
args: {
|
|
261
|
+
scenario: {
|
|
262
|
+
type: "string",
|
|
263
|
+
description: "Optional scenario file path under test/scenarios"
|
|
264
|
+
},
|
|
265
|
+
debug: {
|
|
266
|
+
type: "boolean",
|
|
267
|
+
description: "Print full reducer-native validation details",
|
|
268
|
+
default: false
|
|
269
|
+
},
|
|
270
|
+
"update-snapshots": {
|
|
271
|
+
type: "boolean",
|
|
272
|
+
description: "Refresh generated projection and scenario snapshots",
|
|
273
|
+
default: false
|
|
274
|
+
},
|
|
275
|
+
runner: {
|
|
276
|
+
type: "string",
|
|
277
|
+
valueHint: "reducer|remote|browser",
|
|
278
|
+
description: "Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack)."
|
|
279
|
+
},
|
|
280
|
+
...CONFIG_FLAG_ARGS
|
|
281
|
+
},
|
|
282
|
+
async run({ args }) {
|
|
283
|
+
const parsedFlags = parseConfigFlags(args);
|
|
284
|
+
const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
|
|
285
|
+
const runner = resolveRequestedRunner(args.runner) ?? "reducer";
|
|
286
|
+
const { projectRoot, projectConfig, config } = await resolveProjectContext(
|
|
287
|
+
parsedFlags,
|
|
288
|
+
{
|
|
289
|
+
requireAuth: useRemoteRuntime || runner === "remote" || runner === "browser"
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
await assertReleaseEnvironmentPortableDependencies({
|
|
293
|
+
projectRoot,
|
|
294
|
+
projectConfig,
|
|
295
|
+
environment: config.environment
|
|
296
|
+
});
|
|
297
|
+
await assertReducerNativeTestingWorkspace(projectRoot);
|
|
298
|
+
const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
|
|
299
|
+
projectRoot,
|
|
300
|
+
projectConfig,
|
|
301
|
+
useRemoteRuntime,
|
|
302
|
+
runner
|
|
303
|
+
});
|
|
304
|
+
const summary = await runReducerNativeScenarios({
|
|
305
|
+
projectRoot,
|
|
306
|
+
projectConfig,
|
|
307
|
+
resolvedConfig: config,
|
|
308
|
+
runner,
|
|
309
|
+
scenarioPath: args.scenario,
|
|
310
|
+
compiledResultId: runtimeIdentity.compiledResultId,
|
|
311
|
+
gameId: runtimeIdentity.gameId,
|
|
312
|
+
debug: Boolean(args.debug),
|
|
313
|
+
updateSnapshots: Boolean(args["update-snapshots"])
|
|
314
|
+
});
|
|
315
|
+
for (const result of summary.results) {
|
|
316
|
+
if (result.success) {
|
|
317
|
+
consola.success(`PASS ${result.id}`);
|
|
318
|
+
} else if (result.errorCode === STALE_CONTRACT_ARTIFACT_CODE && result.error) {
|
|
319
|
+
consola.error(result.error);
|
|
320
|
+
} else {
|
|
321
|
+
consola.error(
|
|
322
|
+
`FAIL ${result.id}: ${result.error ?? "Scenario failed"}`
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
consola.info(
|
|
327
|
+
`Test summary: ${summary.passed} passed, ${summary.failed} failed.`
|
|
328
|
+
);
|
|
329
|
+
if (summary.failed > 0) {
|
|
330
|
+
process.exitCode = resolveTestRunExitCode(summary);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
var test_default = defineCommand({
|
|
335
|
+
meta: {
|
|
336
|
+
name: "test",
|
|
337
|
+
description: "Reducer-native test runner with typed bases and scenarios"
|
|
338
|
+
},
|
|
339
|
+
subCommands: {
|
|
340
|
+
generate: generateCommand,
|
|
341
|
+
run: runCommand
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
export {
|
|
345
|
+
NO_REDUCER_NATIVE_BASES_FOUND_ERROR,
|
|
346
|
+
NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR,
|
|
347
|
+
REDUCER_NATIVE_TEST_WORKSPACE_ERROR,
|
|
348
|
+
test_default as default,
|
|
349
|
+
isPreviewProjectionEndpointUnavailable,
|
|
350
|
+
resolveRequestedRunner,
|
|
351
|
+
resolveTestRunExitCode
|
|
352
|
+
};
|
|
353
|
+
//# sourceMappingURL=test-Y5UGQV7J.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/test.ts","../../src/services/testing/runtime-mode.ts","../../src/services/workflows/resolve-latest-compiled-result.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { configureClient, resolveProjectContext } from \"../config/resolve.js\";\nimport { parseConfigFlags } from \"../flags.js\";\nimport { uploadInitialProjectionSdk } from \"../services/api/index.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n type ReducerNativeScenarioSummary,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport { shouldUseRemoteTestRuntime } from \"../services/testing/runtime-mode.js\";\nimport { resolveLatestCompiledResult } from \"../services/workflows/resolve-latest-compiled-result.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport {\n isDreamboardApiError,\n isStaleContractArtifactMessage,\n STALE_CONTRACT_ARTIFACT_CODE,\n STALE_CONTRACT_ARTIFACT_EXIT_CODE,\n} from \"../utils/errors.js\";\n\ntype RequestedTestRunner = \"reducer\" | \"remote\" | \"browser\";\n\nexport const REDUCER_NATIVE_TEST_WORKSPACE_ERROR =\n \"dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.\";\n\nexport const NO_REDUCER_NATIVE_BASES_FOUND_ERROR =\n \"No bases found under test/bases/*.base.ts\";\n\nexport const NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR =\n \"No scenarios found under test/scenarios/*.scenario.ts\";\n\nexport function isPreviewProjectionEndpointUnavailable(\n error: unknown,\n): boolean {\n if (!isDreamboardApiError(error) || error.status !== 404) {\n return false;\n }\n\n const endpoint = error.problem.instance ?? error.problem.context?.endpoint;\n const message = error.problem.detail ?? error.problem.title;\n return (\n endpoint?.includes(\"/preview/initial-projection\") === true &&\n message?.toLowerCase() === \"not found\"\n );\n}\n\nasync function uploadGeneratedPreviewProjection(options: {\n projectRoot: string;\n gameId: string;\n bases: Array<{ definition: { id: string } }>;\n}): Promise<void> {\n const previewBase =\n options.bases.find((base) => base.definition.id === \"initial-turn\") ??\n options.bases[0];\n if (!previewBase) {\n return;\n }\n const projectionPath = path.join(\n options.projectRoot,\n \"test\",\n \"generated\",\n \"bases\",\n previewBase.definition.id,\n \"player-1.projection.json\",\n );\n const projectionJson = await readFile(projectionPath, \"utf8\");\n try {\n await uploadInitialProjectionSdk(options.gameId, projectionJson);\n } catch (error) {\n if (isPreviewProjectionEndpointUnavailable(error)) {\n consola.warn(\n \"Skipping preview projection upload because the selected backend does not expose the preview projection endpoint.\",\n );\n return;\n }\n throw error;\n }\n}\n\nexport function resolveRequestedRunner(\n value: unknown,\n): RequestedTestRunner | undefined {\n if (value == null || value === \"\") {\n return undefined;\n }\n if (value === \"reducer\" || value === \"remote\" || value === \"browser\") {\n return value;\n }\n throw new Error(\n `Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`,\n );\n}\n\nfunction isStaleContractArtifactResult(\n result: ReducerNativeScenarioSummary[\"results\"][number],\n): boolean {\n return (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE ||\n (result.error ? isStaleContractArtifactMessage(result.error) : false)\n );\n}\n\nexport function resolveTestRunExitCode(\n summary: ReducerNativeScenarioSummary,\n): number {\n if (summary.failed === 0) {\n return 0;\n }\n return summary.results.some(\n (result) => !result.success && isStaleContractArtifactResult(result),\n )\n ? STALE_CONTRACT_ARTIFACT_EXIT_CODE\n : 1;\n}\n\nasync function assertReducerNativeTestingWorkspace(\n projectRoot: string,\n): Promise<void> {\n if (await isReducerNativeTestingWorkspace(projectRoot)) {\n return;\n }\n\n throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);\n}\n\nasync function resolveReducerNativeRuntimeIdentity(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n useRemoteRuntime: boolean;\n runner?: RequestedTestRunner;\n}): Promise<{\n gameId: string;\n compiledResultId?: string;\n}> {\n if (\n options.useRemoteRuntime ||\n options.runner === \"remote\" ||\n options.runner === \"browser\"\n ) {\n const latestCompiledResult = await resolveLatestCompiledResult(\n options.projectRoot,\n options.projectConfig,\n );\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: latestCompiledResult.id,\n };\n }\n\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId,\n };\n}\n\nconst generateCommand = defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate reducer-native base artifacts for typed scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n { requireAuth: useRemoteRuntime },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n });\n const { bases, scenarios } = await generateReducerNativeArtifacts({\n projectRoot,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n });\n\n if (bases.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);\n }\n if (scenarios.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);\n }\n\n if (useRemoteRuntime && config.authToken) {\n await configureClient(config);\n await uploadGeneratedPreviewProjection({\n projectRoot,\n gameId: runtimeIdentity.gameId,\n bases,\n });\n } else {\n consola.info(\n \"Skipping preview projection upload because this test generation is local-only.\",\n );\n }\n\n consola.success(\n `Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`,\n );\n },\n});\n\nconst runCommand = defineCommand({\n meta: {\n name: \"run\",\n description: \"Run reducer-native scenarios from test/scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n runner: {\n type: \"string\",\n valueHint: \"reducer|remote|browser\",\n description:\n \"Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack).\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const runner = resolveRequestedRunner(args.runner) ?? \"reducer\";\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n {\n requireAuth:\n useRemoteRuntime || runner === \"remote\" || runner === \"browser\",\n },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n runner,\n });\n const summary = await runReducerNativeScenarios({\n projectRoot,\n projectConfig,\n resolvedConfig: config,\n runner,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n updateSnapshots: Boolean(args[\"update-snapshots\"]),\n });\n\n for (const result of summary.results) {\n if (result.success) {\n consola.success(`PASS ${result.id}`);\n } else if (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE &&\n result.error\n ) {\n consola.error(result.error);\n } else {\n consola.error(\n `FAIL ${result.id}: ${result.error ?? \"Scenario failed\"}`,\n );\n }\n }\n\n consola.info(\n `Test summary: ${summary.passed} passed, ${summary.failed} failed.`,\n );\n if (summary.failed > 0) {\n process.exitCode = resolveTestRunExitCode(summary);\n }\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"test\",\n description: \"Reducer-native test runner with typed bases and scenarios\",\n },\n subCommands: {\n generate: generateCommand,\n run: runCommand,\n },\n});\n","import { IS_PUBLISHED_BUILD } from \"../../build-target.js\";\n\nexport function isRemoteTestEnvironment(\n environment: string | undefined,\n): environment is \"staging\" | \"prod\" {\n return environment === \"staging\" || environment === \"prod\";\n}\n\nexport function shouldUseRemoteTestRuntime(\n environment: string | undefined,\n): boolean {\n return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);\n}\n","import consola from \"consola\";\nimport type { CompiledResult } from \"@dreamboard-games/api-client\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport {\n findProjectCompiledResultsForRevision,\n getProjectCompiledResultSdk,\n} from \"../api/compiled-results-api.js\";\nimport {\n getProjectCompileState,\n getProjectAuthoringState,\n getProjectPendingAuthoringSync,\n} from \"../project/project-state.js\";\n\nexport async function resolveLatestCompiledResult(\n projectRoot: string,\n projectConfig: ProjectConfig,\n): Promise<CompiledResult> {\n void projectRoot;\n const authoring = getProjectAuthoringState(projectConfig);\n if (getProjectPendingAuthoringSync(projectConfig)) {\n throw new Error(\n \"Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first.\",\n );\n }\n if (authoring.revisionDigest) {\n const compile = getProjectCompileState(projectConfig);\n const latestSuccess = (\n await findProjectCompiledResultsForRevision({\n projectId: projectConfig.projectId,\n revisionDigest: authoring.revisionDigest,\n })\n ).find((result) => result.success);\n const matchingLocalSuccess =\n compile.latestSuccessful?.revisionDigest === authoring.revisionDigest\n ? compile.latestSuccessful\n : undefined;\n const resolvedSuccess =\n latestSuccess ??\n (matchingLocalSuccess?.resultId\n ? await getProjectCompiledResultSdk(\n projectConfig.projectId,\n matchingLocalSuccess.resultId,\n )\n : undefined);\n\n if (!resolvedSuccess?.success) {\n throw new Error(\n \"No successful compile exists for the current authored revision. Run 'dreamboard compile' first.\",\n );\n }\n\n const resultRevisionDigest = (resolvedSuccess as { revisionDigest?: string })\n .revisionDigest;\n if (\n resultRevisionDigest &&\n resultRevisionDigest !== authoring.revisionDigest\n ) {\n consola.warn(\n `Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`,\n );\n }\n\n consola.info(\n `Project summary:\\n compiledResultId: ${resolvedSuccess.id}\\n revisionDigest: ${authoring.revisionDigest}`,\n );\n\n return resolvedSuccess;\n }\n\n throw new Error(\n \"This workspace does not know its project revision yet. Run 'dreamboard sync' first.\",\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
generatePnpmLockfile,
|
|
4
|
+
installWorkspaceDependencies,
|
|
5
|
+
reconcileWorkspaceDependencies
|
|
6
|
+
} from "./chunk-XQXDOBYB.mjs";
|
|
7
|
+
import "./chunk-ZEELHSY3.mjs";
|
|
8
|
+
import "./chunk-H76MT5UR.mjs";
|
|
9
|
+
import "./chunk-H6XDQJ3N.mjs";
|
|
10
|
+
export {
|
|
11
|
+
generatePnpmLockfile,
|
|
12
|
+
installWorkspaceDependencies,
|
|
13
|
+
reconcileWorkspaceDependencies
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=workspace-dependencies-B6A2ZX55.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__export
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-2H7UOFLK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -284,7 +284,7 @@ async function defaultBackendResolver() {
|
|
|
284
284
|
if (!useKeychain) {
|
|
285
285
|
return fileCredentialBackend;
|
|
286
286
|
}
|
|
287
|
-
const { tryKeychainBackend } = await import("./keychain-backend-
|
|
287
|
+
const { tryKeychainBackend } = await import("./keychain-backend-JHTXAKWC.js");
|
|
288
288
|
const keychain = await tryKeychainBackend();
|
|
289
289
|
if (keychain.available) {
|
|
290
290
|
return keychain.backend;
|
|
@@ -293,7 +293,7 @@ async function defaultBackendResolver() {
|
|
|
293
293
|
}
|
|
294
294
|
async function readCredentialBackendPreference() {
|
|
295
295
|
try {
|
|
296
|
-
const { loadGlobalConfig: loadGlobalConfig2 } = await import("./global-config-
|
|
296
|
+
const { loadGlobalConfig: loadGlobalConfig2 } = await import("./global-config-YBFEGJQG.js");
|
|
297
297
|
const config = await loadGlobalConfig2();
|
|
298
298
|
return config.credentialBackend === "keychain";
|
|
299
299
|
} catch {
|
|
@@ -429,4 +429,4 @@ export {
|
|
|
429
429
|
loadGlobalConfig,
|
|
430
430
|
saveGlobalConfig
|
|
431
431
|
};
|
|
432
|
-
//# sourceMappingURL=chunk-
|
|
432
|
+
//# sourceMappingURL=chunk-3NRROR4P.js.map
|