@kradle/challenges-sdk 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -1
- package/LLM_README.md +285 -192
- package/MIGRATION-0.13.md +109 -0
- package/README.md +97 -88
- package/dist/engine.d.ts +8 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +17 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -16
- package/dist/index.js.map +1 -1
- package/dist/runtime/builder.d.ts +33 -0
- package/dist/runtime/builder.d.ts.map +1 -0
- package/dist/runtime/builder.js +357 -0
- package/dist/runtime/builder.js.map +1 -0
- package/dist/runtime/errors.d.ts +61 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +71 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/reducer.d.ts +205 -0
- package/dist/runtime/reducer.d.ts.map +1 -0
- package/dist/runtime/reducer.js +2025 -0
- package/dist/runtime/reducer.js.map +1 -0
- package/dist/runtime/rules.d.ts +29 -0
- package/dist/runtime/rules.d.ts.map +1 -0
- package/dist/runtime/rules.js +23 -0
- package/dist/runtime/rules.js.map +1 -0
- package/dist/runtime/sandbox.d.ts +2 -1
- package/dist/runtime/sandbox.d.ts.map +1 -1
- package/dist/runtime/sandbox.js +7 -4
- package/dist/runtime/sandbox.js.map +1 -1
- package/dist/runtime/time.d.ts +33 -0
- package/dist/runtime/time.d.ts.map +1 -0
- package/dist/runtime/time.js +53 -0
- package/dist/runtime/time.js.map +1 -0
- package/dist/runtime/types.d.ts +963 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +25 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/wire.d.ts +858 -0
- package/dist/runtime/wire.d.ts.map +1 -0
- package/dist/runtime/wire.js +28 -0
- package/dist/runtime/wire.js.map +1 -0
- package/dist/runtime/world.d.ts +58 -3
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +12 -0
- package/dist/runtime/world.js.map +1 -1
- package/dist/structures.d.ts +119 -0
- package/dist/structures.d.ts.map +1 -0
- package/dist/structures.js +279 -0
- package/dist/structures.js.map +1 -0
- package/dist/test/harness.d.ts +133 -29
- package/dist/test/harness.d.ts.map +1 -1
- package/dist/test/harness.js +191 -66
- package/dist/test/harness.js.map +1 -1
- package/dist/test/helpers.d.ts +3 -2
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +2 -2
- package/dist/test/helpers.js.map +1 -1
- package/package.json +28 -6
- package/dist/runtime/examples/capture-the-flag.d.ts +0 -33
- package/dist/runtime/examples/capture-the-flag.d.ts.map +0 -1
- package/dist/runtime/examples/capture-the-flag.js +0 -79
- package/dist/runtime/examples/capture-the-flag.js.map +0 -1
- package/dist/runtime/examples/climb.d.ts +0 -34
- package/dist/runtime/examples/climb.d.ts.map +0 -1
- package/dist/runtime/examples/climb.js +0 -54
- package/dist/runtime/examples/climb.js.map +0 -1
- package/dist/runtime/examples/four-bridges.d.ts +0 -107
- package/dist/runtime/examples/four-bridges.d.ts.map +0 -1
- package/dist/runtime/examples/four-bridges.js +0 -294
- package/dist/runtime/examples/four-bridges.js.map +0 -1
- package/dist/runtime/examples/herding.d.ts +0 -59
- package/dist/runtime/examples/herding.d.ts.map +0 -1
- package/dist/runtime/examples/herding.js +0 -181
- package/dist/runtime/examples/herding.js.map +0 -1
- package/dist/runtime/examples/skywars.d.ts +0 -116
- package/dist/runtime/examples/skywars.d.ts.map +0 -1
- package/dist/runtime/examples/skywars.js +0 -253
- package/dist/runtime/examples/skywars.js.map +0 -1
- package/dist/runtime/sdk.d.ts +0 -1038
- package/dist/runtime/sdk.d.ts.map +0 -1
- package/dist/runtime/sdk.js +0 -1271
- package/dist/runtime/sdk.js.map +0 -1
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `defineChallenge(config, decl)`: the challenge object an author builds with
|
|
3
|
+
// steps (`.setup`, `.start`, `.phase`, `.on`, `.outcome`, ...). The root
|
|
4
|
+
// declaration fixes every literal type; the steps register behavior and return
|
|
5
|
+
// the same object, so a definition reads as one chain or as separate
|
|
6
|
+
// statements, and `export default challenge` can come before the steps.
|
|
7
|
+
//
|
|
8
|
+
// The definition locks on first use: the first `init()`, or the first read of
|
|
9
|
+
// `manifest` (the loaders read it before they init). Registration copies what
|
|
10
|
+
// the author passed, so a captured array cannot change the definition later,
|
|
11
|
+
// and a step after the lock throws.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.defineChallenge = defineChallenge;
|
|
14
|
+
const errors_js_1 = require("./errors.js");
|
|
15
|
+
const reducer_js_1 = require("./reducer.js");
|
|
16
|
+
const time_js_1 = require("./time.js");
|
|
17
|
+
const types_js_1 = require("./types.js");
|
|
18
|
+
const TAG_SAFE = /^[a-z0-9_.-]+$/;
|
|
19
|
+
/** Deep copy of plain data (objects, arrays, primitives); functions stay by reference. */
|
|
20
|
+
function copyData(value) {
|
|
21
|
+
if (Array.isArray(value))
|
|
22
|
+
return value.map(copyData);
|
|
23
|
+
if (value !== null && typeof value === "object") {
|
|
24
|
+
const out = {};
|
|
25
|
+
for (const [k, v] of Object.entries(value))
|
|
26
|
+
out[k] = copyData(v);
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
/** Freezes every object and array under `value`; functions pass through. */
|
|
32
|
+
function deepFreeze(value, seen = new WeakSet()) {
|
|
33
|
+
if (value === null || typeof value !== "object" || seen.has(value))
|
|
34
|
+
return;
|
|
35
|
+
seen.add(value);
|
|
36
|
+
Object.freeze(value);
|
|
37
|
+
for (const x of Object.values(value))
|
|
38
|
+
deepFreeze(x, seen);
|
|
39
|
+
}
|
|
40
|
+
/** A declared duration must parse; the error names the declaration. */
|
|
41
|
+
function checkDuration(d, path) {
|
|
42
|
+
try {
|
|
43
|
+
(0, time_js_1.toTicks)(d);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
throw (0, errors_js_1.definitionError)("bad_duration", `${path}: ${err.message}`, { path, value: d });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** The initializer map, copied: the functions by reference, the per-role map as a new object. */
|
|
50
|
+
function copyState(state) {
|
|
51
|
+
const out = {};
|
|
52
|
+
if (state?.game)
|
|
53
|
+
out.game = state.game;
|
|
54
|
+
if (state?.player)
|
|
55
|
+
out.player = state.player;
|
|
56
|
+
if (state?.players)
|
|
57
|
+
out.players = { ...state.players };
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
function validateDecl(config, decl) {
|
|
61
|
+
if (!config || typeof config !== "object" || typeof config.name !== "string" || !config.name) {
|
|
62
|
+
throw (0, errors_js_1.definitionError)("bad_config", "defineChallenge: the config needs a name", { path: "config.name" });
|
|
63
|
+
}
|
|
64
|
+
if (!config.roles || Object.keys(config.roles).length === 0) {
|
|
65
|
+
throw (0, errors_js_1.definitionError)("bad_config", "defineChallenge: the config declares no roles", { path: "config.roles" });
|
|
66
|
+
}
|
|
67
|
+
if (decl.life !== "single" && decl.life !== "respawn") {
|
|
68
|
+
throw (0, errors_js_1.definitionError)("bad_life", `life must be "single" or "respawn" (got ${JSON.stringify(decl.life)})`, {
|
|
69
|
+
path: "life",
|
|
70
|
+
value: decl.life,
|
|
71
|
+
allowed: ["single", "respawn"],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (decl.duration !== undefined)
|
|
75
|
+
checkDuration(decl.duration, "duration");
|
|
76
|
+
const phases = [...(decl.phases ?? [])];
|
|
77
|
+
for (const name of phases) {
|
|
78
|
+
if (typeof name !== "string" || !name)
|
|
79
|
+
throw (0, errors_js_1.definitionError)("bad_phase", "phases: a phase name must be a non-empty string", { path: "phases" });
|
|
80
|
+
if (name === "END")
|
|
81
|
+
throw (0, errors_js_1.definitionError)("bad_phase", `phases: "END" is reserved for next`, { path: "phases", value: name });
|
|
82
|
+
}
|
|
83
|
+
if (new Set(phases).size !== phases.length)
|
|
84
|
+
throw (0, errors_js_1.definitionError)("bad_phase", "phases: a name repeats", { path: "phases" });
|
|
85
|
+
if (decl.initialPhase !== undefined && !phases.includes(decl.initialPhase)) {
|
|
86
|
+
throw (0, errors_js_1.definitionError)("bad_phase", `initialPhase "${decl.initialPhase}" is not in phases`, {
|
|
87
|
+
path: "initialPhase",
|
|
88
|
+
value: decl.initialPhase,
|
|
89
|
+
allowed: phases,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
for (const [id, rule] of Object.entries(decl.votes ?? {})) {
|
|
93
|
+
const path = `votes.${id}`;
|
|
94
|
+
if (!TAG_SAFE.test(id))
|
|
95
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: a vote id uses [a-z0-9_.-]`, { path, value: id });
|
|
96
|
+
const options = rule.options;
|
|
97
|
+
if (id === types_js_1.PLAYER_VOTE) {
|
|
98
|
+
if (options !== undefined)
|
|
99
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: the player vote declares no options (its options are the other participants)`, { path });
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (!options || options.length < 2) {
|
|
103
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: a vote needs at least two options`, { path, value: options });
|
|
104
|
+
}
|
|
105
|
+
for (const o of options) {
|
|
106
|
+
if (typeof o !== "string" || !TAG_SAFE.test(o))
|
|
107
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: the option ${JSON.stringify(o)} uses [a-z0-9_.-]`, { path, value: o });
|
|
108
|
+
}
|
|
109
|
+
if (new Set(options).size !== options.length)
|
|
110
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: an option repeats`, { path });
|
|
111
|
+
if (rule.allowSelf !== undefined)
|
|
112
|
+
throw (0, errors_js_1.definitionError)("bad_vote", `${path}: allowSelf applies to the player vote only`, { path });
|
|
113
|
+
}
|
|
114
|
+
for (const [name, box] of Object.entries(decl.zones ?? {})) {
|
|
115
|
+
const b = box;
|
|
116
|
+
if (!b?.from || !b?.to)
|
|
117
|
+
throw (0, errors_js_1.definitionError)("bad_zone", `zones.${name}: a zone is a box { from, to }`, { path: `zones.${name}` });
|
|
118
|
+
}
|
|
119
|
+
if (decl.markers && (!Array.isArray(decl.markers.tags) || decl.markers.tags.length === 0)) {
|
|
120
|
+
throw (0, errors_js_1.definitionError)("bad_markers", "markers.tags: at least one tag", { path: "markers.tags" });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function validatePhaseSpec(name, spec, phases) {
|
|
124
|
+
const path = `phases.${name}`;
|
|
125
|
+
if (spec.next === undefined)
|
|
126
|
+
throw (0, errors_js_1.definitionError)("phase_no_next", `${path}: next is required`, { path: `${path}.next` });
|
|
127
|
+
if (typeof spec.next === "string" && spec.next !== "END" && !phases.includes(spec.next)) {
|
|
128
|
+
throw (0, errors_js_1.definitionError)("bad_phase", `${path}.next: "${spec.next}" is not a phase`, {
|
|
129
|
+
path: `${path}.next`,
|
|
130
|
+
value: spec.next,
|
|
131
|
+
allowed: [...phases, "END"],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (spec.duration !== undefined && typeof spec.duration !== "function")
|
|
135
|
+
checkDuration(spec.duration, `phases.${name}.duration`);
|
|
136
|
+
(spec.at ?? []).forEach((st, i) => {
|
|
137
|
+
const hasRemaining = "remaining" in st && st.remaining !== undefined;
|
|
138
|
+
const hasElapsed = "elapsed" in st && st.elapsed !== undefined;
|
|
139
|
+
if (hasRemaining === hasElapsed) {
|
|
140
|
+
throw (0, errors_js_1.definitionError)("bad_step", `${path}.at: each step needs exactly one of 'elapsed' or 'remaining'`, { path: `${path}.at` });
|
|
141
|
+
}
|
|
142
|
+
if (hasRemaining && spec.duration === undefined) {
|
|
143
|
+
throw (0, errors_js_1.definitionError)("bad_step", `${path}.at: 'remaining' needs a 'duration'`, { path: `${path}.at` });
|
|
144
|
+
}
|
|
145
|
+
checkDuration(hasRemaining ? st.remaining : st.elapsed, `phases.${name}.at.${i}`);
|
|
146
|
+
});
|
|
147
|
+
(spec.every ?? []).forEach((ev, i) => checkDuration(ev.interval, `phases.${name}.every.${i}.interval`));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Defines a challenge. The root declaration carries the data and the state initializers; the
|
|
151
|
+
* steps carry the behavior. `init()` or the first `manifest` read locks the definition.
|
|
152
|
+
*/
|
|
153
|
+
function defineChallenge(config, decl) {
|
|
154
|
+
const anyDecl = decl;
|
|
155
|
+
validateDecl(config, anyDecl);
|
|
156
|
+
// The challenge owns copies of the declaration data: a later change to the author's objects changes nothing.
|
|
157
|
+
const ownConfig = copyData(config);
|
|
158
|
+
deepFreeze(ownConfig);
|
|
159
|
+
const ownState = copyState(anyDecl.state);
|
|
160
|
+
const ownMarkers = anyDecl.markers ? copyData(anyDecl.markers) : undefined;
|
|
161
|
+
const life = anyDecl.life;
|
|
162
|
+
const duration = anyDecl.duration === undefined ? undefined : (0, time_js_1.toTicks)(anyDecl.duration);
|
|
163
|
+
const initialPhase = anyDecl.initialPhase;
|
|
164
|
+
// What the steps register; copied at registration.
|
|
165
|
+
let setup;
|
|
166
|
+
let start;
|
|
167
|
+
const phaseSpecs = {};
|
|
168
|
+
const at = [];
|
|
169
|
+
const every = [];
|
|
170
|
+
const on = [];
|
|
171
|
+
let outcome;
|
|
172
|
+
let onOver;
|
|
173
|
+
let judgeContext;
|
|
174
|
+
const duplicates = [];
|
|
175
|
+
const phases = [...(anyDecl.phases ?? [])];
|
|
176
|
+
const zones = copyData((anyDecl.zones ?? {}));
|
|
177
|
+
deepFreeze(zones);
|
|
178
|
+
const timers = anyDecl.timers ? [...anyDecl.timers] : undefined;
|
|
179
|
+
const votes = {};
|
|
180
|
+
for (const [id, rule] of Object.entries(anyDecl.votes ?? {})) {
|
|
181
|
+
const r = rule;
|
|
182
|
+
votes[id] = {
|
|
183
|
+
options: r.options ? [...r.options] : undefined,
|
|
184
|
+
final: r.final,
|
|
185
|
+
allowEliminated: r.allowEliminated,
|
|
186
|
+
allowSelf: r.allowSelf,
|
|
187
|
+
accept: r.accept,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const world = anyDecl.world === false ? null : { ...types_js_1.WORLD_DEFAULTS, ...copyData((anyDecl.world ?? {})) };
|
|
191
|
+
let locked = null;
|
|
192
|
+
let reducer = null;
|
|
193
|
+
const assertOpen = (step) => {
|
|
194
|
+
if (locked)
|
|
195
|
+
throw (0, errors_js_1.definitionError)("locked", `${step}: the challenge is locked; register every step before init()`, { path: step });
|
|
196
|
+
};
|
|
197
|
+
function lock() {
|
|
198
|
+
if (locked)
|
|
199
|
+
return locked;
|
|
200
|
+
if (duplicates.length > 0) {
|
|
201
|
+
throw (0, errors_js_1.definitionError)("duplicate_step", `these steps were registered twice: ${duplicates.join(", ")}`, {
|
|
202
|
+
path: duplicates[0],
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
if (!outcome)
|
|
206
|
+
throw (0, errors_js_1.definitionError)("missing_outcome", "outcome(...) is required: how does the game end, who wins?", { path: "outcome" });
|
|
207
|
+
for (const name of Object.keys(phaseSpecs))
|
|
208
|
+
validatePhaseSpec(name, phaseSpecs[name], phases);
|
|
209
|
+
at.forEach((st, i) => checkDuration(st.at, `at.${i}`));
|
|
210
|
+
every.forEach((ev, i) => checkDuration(ev.interval, `every.${i}.interval`));
|
|
211
|
+
const declaredLocations = Object.keys(ownConfig.challengeConfig?.locations ?? {});
|
|
212
|
+
const manifest = {
|
|
213
|
+
runtime: 2,
|
|
214
|
+
name: ownConfig.name,
|
|
215
|
+
life,
|
|
216
|
+
roles: Object.keys(ownConfig.roles),
|
|
217
|
+
votes: Object.fromEntries(Object.entries(votes).map(([id, v]) => [
|
|
218
|
+
id,
|
|
219
|
+
{
|
|
220
|
+
options: v.options ? [...v.options] : undefined,
|
|
221
|
+
final: v.final,
|
|
222
|
+
allowEliminated: v.allowEliminated,
|
|
223
|
+
allowSelf: v.allowSelf,
|
|
224
|
+
},
|
|
225
|
+
])),
|
|
226
|
+
params: Object.fromEntries(Object.entries(ownConfig.params ?? {}).map(([k, p]) => [k, { type: p.type, default: p.default }])),
|
|
227
|
+
};
|
|
228
|
+
for (const v of Object.values(manifest.votes)) {
|
|
229
|
+
for (const k of Object.keys(v))
|
|
230
|
+
if (v[k] === undefined)
|
|
231
|
+
delete v[k];
|
|
232
|
+
}
|
|
233
|
+
if (declaredLocations.length > 0)
|
|
234
|
+
manifest.locations = declaredLocations;
|
|
235
|
+
if (ownMarkers)
|
|
236
|
+
manifest.markers = copyData(ownMarkers);
|
|
237
|
+
locked = {
|
|
238
|
+
config: ownConfig,
|
|
239
|
+
state: ownState,
|
|
240
|
+
life,
|
|
241
|
+
duration,
|
|
242
|
+
world,
|
|
243
|
+
zones,
|
|
244
|
+
timers,
|
|
245
|
+
markers: ownMarkers,
|
|
246
|
+
votes,
|
|
247
|
+
phases,
|
|
248
|
+
initialPhase,
|
|
249
|
+
setup,
|
|
250
|
+
start,
|
|
251
|
+
phaseSpecs,
|
|
252
|
+
at,
|
|
253
|
+
every,
|
|
254
|
+
on,
|
|
255
|
+
outcome,
|
|
256
|
+
onOver,
|
|
257
|
+
judgeContext,
|
|
258
|
+
manifest,
|
|
259
|
+
};
|
|
260
|
+
// The compiled definition and its public views (the manifest, the zones) never change after the lock.
|
|
261
|
+
deepFreeze(locked);
|
|
262
|
+
reducer = (0, reducer_js_1.createReducer)(locked);
|
|
263
|
+
return locked;
|
|
264
|
+
}
|
|
265
|
+
const challenge = {
|
|
266
|
+
config: ownConfig,
|
|
267
|
+
get zones() {
|
|
268
|
+
return zones;
|
|
269
|
+
},
|
|
270
|
+
get locked() {
|
|
271
|
+
return locked !== null;
|
|
272
|
+
},
|
|
273
|
+
get manifest() {
|
|
274
|
+
return lock().manifest;
|
|
275
|
+
},
|
|
276
|
+
setup(fn) {
|
|
277
|
+
assertOpen("setup");
|
|
278
|
+
if (setup)
|
|
279
|
+
duplicates.push("setup");
|
|
280
|
+
setup = fn;
|
|
281
|
+
return challenge;
|
|
282
|
+
},
|
|
283
|
+
start(fn) {
|
|
284
|
+
assertOpen("start");
|
|
285
|
+
if (start)
|
|
286
|
+
duplicates.push("start");
|
|
287
|
+
start = fn;
|
|
288
|
+
return challenge;
|
|
289
|
+
},
|
|
290
|
+
phase(name, spec) {
|
|
291
|
+
assertOpen("phase");
|
|
292
|
+
if (!phases.includes(name))
|
|
293
|
+
throw (0, errors_js_1.notDeclared)("phases", name, phases);
|
|
294
|
+
if (phaseSpecs[name])
|
|
295
|
+
duplicates.push(`phase(${name})`);
|
|
296
|
+
phaseSpecs[name] = {
|
|
297
|
+
duration: spec.duration,
|
|
298
|
+
next: spec.next,
|
|
299
|
+
until: spec.until,
|
|
300
|
+
enter: spec.enter,
|
|
301
|
+
exit: spec.exit,
|
|
302
|
+
at: spec.at ? spec.at.map((st) => ({ ...st })) : undefined,
|
|
303
|
+
every: spec.every ? spec.every.map((ev) => ({ ...ev })) : undefined,
|
|
304
|
+
on: spec.on ? { ...spec.on } : undefined,
|
|
305
|
+
};
|
|
306
|
+
return challenge;
|
|
307
|
+
},
|
|
308
|
+
at(steps) {
|
|
309
|
+
assertOpen("at");
|
|
310
|
+
for (const st of steps)
|
|
311
|
+
at.push({ at: st.at, run: st.run });
|
|
312
|
+
return challenge;
|
|
313
|
+
},
|
|
314
|
+
every(steps) {
|
|
315
|
+
assertOpen("every");
|
|
316
|
+
for (const ev of steps)
|
|
317
|
+
every.push({ interval: ev.interval, run: ev.run });
|
|
318
|
+
return challenge;
|
|
319
|
+
},
|
|
320
|
+
on(handlers) {
|
|
321
|
+
assertOpen("on");
|
|
322
|
+
on.push({ ...handlers });
|
|
323
|
+
return challenge;
|
|
324
|
+
},
|
|
325
|
+
outcome(o) {
|
|
326
|
+
assertOpen("outcome");
|
|
327
|
+
if (outcome)
|
|
328
|
+
duplicates.push("outcome");
|
|
329
|
+
outcome = { ...o };
|
|
330
|
+
return challenge;
|
|
331
|
+
},
|
|
332
|
+
onOver(fn) {
|
|
333
|
+
assertOpen("onOver");
|
|
334
|
+
if (onOver)
|
|
335
|
+
duplicates.push("onOver");
|
|
336
|
+
onOver = fn;
|
|
337
|
+
return challenge;
|
|
338
|
+
},
|
|
339
|
+
judgeContext(fn) {
|
|
340
|
+
assertOpen("judgeContext");
|
|
341
|
+
if (judgeContext)
|
|
342
|
+
duplicates.push("judgeContext");
|
|
343
|
+
judgeContext = fn;
|
|
344
|
+
return challenge;
|
|
345
|
+
},
|
|
346
|
+
init() {
|
|
347
|
+
lock();
|
|
348
|
+
return reducer.init();
|
|
349
|
+
},
|
|
350
|
+
reduce(state, event) {
|
|
351
|
+
lock();
|
|
352
|
+
return reducer.reduce(state, event);
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
return challenge;
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/runtime/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** What kind of failure a `ChallengeError` reports. */
|
|
2
|
+
export type ErrorCategory =
|
|
3
|
+
/** The definition is invalid: a bad declaration, a missing step, a duplicate step. */
|
|
4
|
+
"definition"
|
|
5
|
+
/** An API call is invalid here: wrong stage, wrong argument, a refused request. */
|
|
6
|
+
| "api"
|
|
7
|
+
/** The observation is not available: an unloaded chunk, a container the mirror does not hold. */
|
|
8
|
+
| "unavailable";
|
|
9
|
+
/** The details of a `ChallengeError`, for a message a host can act on. */
|
|
10
|
+
export interface ErrorDetails {
|
|
11
|
+
category?: ErrorCategory;
|
|
12
|
+
/** Where in the definition or the call the problem is: `phases.COMMIT.next`, `startPhase`. */
|
|
13
|
+
path?: string;
|
|
14
|
+
/** The value that was refused. */
|
|
15
|
+
value?: unknown;
|
|
16
|
+
/** The values that would have been accepted. */
|
|
17
|
+
allowed?: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
/** A `ChallengeError` as plain JSON: what a log line or a build report carries. */
|
|
20
|
+
export interface ErrorJson {
|
|
21
|
+
/** The stable code, e.g. `phase_unknown`. */
|
|
22
|
+
code: string;
|
|
23
|
+
/** `definition`, `api` or `unavailable`. */
|
|
24
|
+
category: ErrorCategory;
|
|
25
|
+
/** The message, readable on its own. */
|
|
26
|
+
message: string;
|
|
27
|
+
/** Where in the declaration or the call, when known. */
|
|
28
|
+
path?: string;
|
|
29
|
+
/** The values that would have been accepted, when known. */
|
|
30
|
+
allowed?: readonly string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* An error the SDK raises on purpose, with a stable `code` and a `category`.
|
|
34
|
+
* The message stays readable on its own; the fields are for tools.
|
|
35
|
+
*/
|
|
36
|
+
export declare class ChallengeError extends Error {
|
|
37
|
+
/** The stable code, e.g. `phase_unknown`; a tool matches on it. */
|
|
38
|
+
readonly code: string;
|
|
39
|
+
/** `definition` (the declaration), `api` (a call at run time), `unavailable` (a fact the engine lacks). */
|
|
40
|
+
readonly category: ErrorCategory;
|
|
41
|
+
/** Where in the declaration, e.g. `phases.A.next`. */
|
|
42
|
+
readonly path: string | undefined;
|
|
43
|
+
/** The value that was refused. */
|
|
44
|
+
readonly value: unknown;
|
|
45
|
+
/** The values that would have been accepted. */
|
|
46
|
+
readonly allowed: readonly string[] | undefined;
|
|
47
|
+
constructor(code: string, message: string, details?: ErrorDetails);
|
|
48
|
+
/** The error as plain JSON, for a log line or a build report. */
|
|
49
|
+
toJSON(): ErrorJson;
|
|
50
|
+
}
|
|
51
|
+
/** A definition error: raised by `defineChallenge` or `init()`. */
|
|
52
|
+
export declare const definitionError: (code: string, message: string, details?: Omit<ErrorDetails, "category">) => ChallengeError;
|
|
53
|
+
/** An API error: an invalid call from a rule. */
|
|
54
|
+
export declare const apiError: (code: string, message: string, details?: Omit<ErrorDetails, "category">) => ChallengeError;
|
|
55
|
+
/** An unavailable observation: the mirror does not hold what the read needs. */
|
|
56
|
+
export declare const unavailableError: (code: string, message: string, details?: Omit<ErrorDetails, "category">) => ChallengeError;
|
|
57
|
+
/** `"${name}" is not declared in ${kind}`, with the declared names. */
|
|
58
|
+
export declare function notDeclared(kind: string, name: string, declared: readonly string[]): ChallengeError;
|
|
59
|
+
/** The category of any thrown value: an SDK error carries its own, anything else is an author error. */
|
|
60
|
+
export declare function categoryOf(err: unknown): ErrorCategory | "author";
|
|
61
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAMA,uDAAuD;AACvD,MAAM,MAAM,aAAa;AACxB,sFAAsF;AACpF,YAAY;AACd,mFAAmF;GACjF,KAAK;AACP,iGAAiG;GAC/F,aAAa,CAAC;AAEjB,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,aAAa,CAAC;IACxB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;gBAEpC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IAUrE,iEAAiE;IACjE,MAAM,IAAI,SAAS;CAUnB;AAED,mEAAmE;AACnE,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,UAAS,IAAI,CAAC,YAAY,EAAE,UAAU,CAAM,mBACjC,CAAC;AAE3E,iDAAiD;AACjD,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,UAAS,IAAI,CAAC,YAAY,EAAE,UAAU,CAAM,mBACjC,CAAC;AAEpE,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,UAAS,IAAI,CAAC,YAAY,EAAE,UAAU,CAAM,mBACjC,CAAC;AAE5E,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAMnG;AAED,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,QAAQ,CAEjE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The SDK's own errors. A challenge author sees them at definition time (an
|
|
3
|
+
// invalid declaration), at run time (an invalid call, a call at the wrong
|
|
4
|
+
// stage), or as an "unavailable" diagnostic when the world does not hold what
|
|
5
|
+
// a read needs. The category is what a host reads: the CLI's build fails a
|
|
6
|
+
// bundle on a definition or API error and warns on an unavailable observation.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.unavailableError = exports.apiError = exports.definitionError = exports.ChallengeError = void 0;
|
|
9
|
+
exports.notDeclared = notDeclared;
|
|
10
|
+
exports.categoryOf = categoryOf;
|
|
11
|
+
/**
|
|
12
|
+
* An error the SDK raises on purpose, with a stable `code` and a `category`.
|
|
13
|
+
* The message stays readable on its own; the fields are for tools.
|
|
14
|
+
*/
|
|
15
|
+
class ChallengeError extends Error {
|
|
16
|
+
/** The stable code, e.g. `phase_unknown`; a tool matches on it. */
|
|
17
|
+
code;
|
|
18
|
+
/** `definition` (the declaration), `api` (a call at run time), `unavailable` (a fact the engine lacks). */
|
|
19
|
+
category;
|
|
20
|
+
/** Where in the declaration, e.g. `phases.A.next`. */
|
|
21
|
+
path;
|
|
22
|
+
/** The value that was refused. */
|
|
23
|
+
value;
|
|
24
|
+
/** The values that would have been accepted. */
|
|
25
|
+
allowed;
|
|
26
|
+
constructor(code, message, details = {}) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = "ChallengeError";
|
|
29
|
+
this.code = code;
|
|
30
|
+
this.category = details.category ?? "api";
|
|
31
|
+
this.path = details.path;
|
|
32
|
+
this.value = details.value;
|
|
33
|
+
this.allowed = details.allowed;
|
|
34
|
+
}
|
|
35
|
+
/** The error as plain JSON, for a log line or a build report. */
|
|
36
|
+
toJSON() {
|
|
37
|
+
const out = {
|
|
38
|
+
code: this.code,
|
|
39
|
+
category: this.category,
|
|
40
|
+
message: this.message,
|
|
41
|
+
};
|
|
42
|
+
if (this.path !== undefined)
|
|
43
|
+
out.path = this.path;
|
|
44
|
+
if (this.allowed !== undefined)
|
|
45
|
+
out.allowed = this.allowed;
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.ChallengeError = ChallengeError;
|
|
50
|
+
/** A definition error: raised by `defineChallenge` or `init()`. */
|
|
51
|
+
const definitionError = (code, message, details = {}) => new ChallengeError(code, message, { ...details, category: "definition" });
|
|
52
|
+
exports.definitionError = definitionError;
|
|
53
|
+
/** An API error: an invalid call from a rule. */
|
|
54
|
+
const apiError = (code, message, details = {}) => new ChallengeError(code, message, { ...details, category: "api" });
|
|
55
|
+
exports.apiError = apiError;
|
|
56
|
+
/** An unavailable observation: the mirror does not hold what the read needs. */
|
|
57
|
+
const unavailableError = (code, message, details = {}) => new ChallengeError(code, message, { ...details, category: "unavailable" });
|
|
58
|
+
exports.unavailableError = unavailableError;
|
|
59
|
+
/** `"${name}" is not declared in ${kind}`, with the declared names. */
|
|
60
|
+
function notDeclared(kind, name, declared) {
|
|
61
|
+
return (0, exports.apiError)("not_declared", `"${name}" is not declared in ${kind} (declared: ${declared.join(", ") || "none"})`, {
|
|
62
|
+
path: kind,
|
|
63
|
+
value: name,
|
|
64
|
+
allowed: declared,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** The category of any thrown value: an SDK error carries its own, anything else is an author error. */
|
|
68
|
+
function categoryOf(err) {
|
|
69
|
+
return err instanceof ChallengeError ? err.category : "author";
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;;;AAwF/E,kCAMC;AAGD,gCAEC;AA/DD;;;GAGG;AACH,MAAa,cAAe,SAAQ,KAAK;IACxC,mEAAmE;IAC1D,IAAI,CAAS;IACtB,2GAA2G;IAClG,QAAQ,CAAgB;IACjC,sDAAsD;IAC7C,IAAI,CAAqB;IAClC,kCAAkC;IACzB,KAAK,CAAU;IACxB,gDAAgD;IACvC,OAAO,CAAgC;IAEhD,YAAY,IAAY,EAAE,OAAe,EAAE,UAAwB,EAAE;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,iEAAiE;IACjE,MAAM;QACL,MAAM,GAAG,GAAc;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAClD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3D,OAAO,GAAG,CAAC;IACZ,CAAC;CACD;AAjCD,wCAiCC;AAED,mEAAmE;AAC5D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,UAA0C,EAAE,EAAE,EAAE,CAC9G,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAD9D,QAAA,eAAe,mBAC+C;AAE3E,iDAAiD;AAC1C,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,UAA0C,EAAE,EAAE,EAAE,CACvG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AADvD,QAAA,QAAQ,YAC+C;AAEpE,gFAAgF;AACzE,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,UAA0C,EAAE,EAAE,EAAE,CAC/G,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;AAD/D,QAAA,gBAAgB,oBAC+C;AAE5E,uEAAuE;AACvE,SAAgB,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,QAA2B;IAClF,OAAO,IAAA,gBAAQ,EAAC,cAAc,EAAE,IAAI,IAAI,wBAAwB,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE;QACpH,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,QAAQ;KACjB,CAAC,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,SAAgB,UAAU,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC"}
|