@glubean/runner 0.8.1 → 0.8.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/dry-run-spawn.d.ts +35 -0
- package/dist/dry-run-spawn.d.ts.map +1 -0
- package/dist/dry-run-spawn.js +218 -0
- package/dist/dry-run-spawn.js.map +1 -0
- package/dist/dry-run-worker.d.ts +23 -0
- package/dist/dry-run-worker.d.ts.map +1 -0
- package/dist/dry-run-worker.js +137 -0
- package/dist/dry-run-worker.js.map +1 -0
- package/dist/dry-run.d.ts +80 -0
- package/dist/dry-run.d.ts.map +1 -0
- package/dist/dry-run.js +528 -0
- package/dist/dry-run.js.map +1 -0
- package/dist/engine-bridge.d.ts.map +1 -1
- package/dist/engine-bridge.js +3 -0
- package/dist/engine-bridge.js.map +1 -1
- package/dist/executor.d.ts +4 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +6 -1
- package/dist/executor.js.map +1 -1
- package/dist/harness.js +90 -1
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/resolve.d.ts +2 -0
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +1 -0
- package/dist/resolve.js.map +1 -1
- package/dist/selector.d.ts +53 -0
- package/dist/selector.d.ts.map +1 -0
- package/dist/selector.js +55 -0
- package/dist/selector.js.map +1 -0
- package/package.json +4 -4
package/dist/dry-run.js
ADDED
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dry-run projection (C2 / P2) — execute a simple test's function body with a
|
|
3
|
+
* SYNTHETIC context that records its SHAPE (assertions made, endpoints hit)
|
|
4
|
+
* without performing any real I/O. Powers `glubean dry-run`, whose output feeds
|
|
5
|
+
* the cloud "test definition" team-review view.
|
|
6
|
+
*
|
|
7
|
+
* This is a SEPARATE execution path from the runner harness and from the
|
|
8
|
+
* scanner: the scanner never executes user code (pure AST), while dry-run DOES
|
|
9
|
+
* import + invoke the test body. The synthetic ctx makes that safe — every
|
|
10
|
+
* effect is intercepted — and a request budget breaks data-dependent loops.
|
|
11
|
+
*
|
|
12
|
+
* Branch completeness: native `if`/`switch` only reveals the one arm the
|
|
13
|
+
* synthetic response happens to take, so authors should use `ctx.when()` /
|
|
14
|
+
* `ctx.switch()`, which the projector runs EXHAUSTIVELY (every arm, branch-
|
|
15
|
+
* tagged). The scanner's `bareBranchCount` is folded in to mark a projection
|
|
16
|
+
* partial when bare branches remain.
|
|
17
|
+
*/
|
|
18
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
19
|
+
import { runWithRuntime } from "@glubean/sdk/internal";
|
|
20
|
+
/** Breaker for data-dependent loops (synthetic guards are perpetually truthy). */
|
|
21
|
+
const REQUEST_BUDGET = 50;
|
|
22
|
+
class DryRunBudgetExceeded extends Error {
|
|
23
|
+
}
|
|
24
|
+
class DryRunSkip extends Error {
|
|
25
|
+
}
|
|
26
|
+
/** Branch-local abort thrown by ctx.skip/ctx.fail inside an arm: stops the
|
|
27
|
+
* current arm's remaining code (which the real runner would never reach) but is
|
|
28
|
+
* caught by the when/switch/while arm wrapper so sibling arms still project. */
|
|
29
|
+
class AbortArm extends Error {
|
|
30
|
+
}
|
|
31
|
+
/** Array helpers whose callback should run once (with a representative item)
|
|
32
|
+
* so in-callback assertions/requests are captured, like the for-of path. */
|
|
33
|
+
const ARRAY_CALLBACK_HELPERS = new Set([
|
|
34
|
+
"forEach",
|
|
35
|
+
"map",
|
|
36
|
+
"filter",
|
|
37
|
+
"some",
|
|
38
|
+
"every",
|
|
39
|
+
"find",
|
|
40
|
+
"findIndex",
|
|
41
|
+
"flatMap",
|
|
42
|
+
"reduce",
|
|
43
|
+
"reduceRight",
|
|
44
|
+
]);
|
|
45
|
+
/**
|
|
46
|
+
* A value that survives arbitrary property access, calls, await, and iteration
|
|
47
|
+
* so a test body can run to completion against it without throwing. Numeric/
|
|
48
|
+
* string coercion yields 0/""; iteration yields one representative item; `then`
|
|
49
|
+
* is absent so awaiting it returns the proxy itself (not a hang).
|
|
50
|
+
*/
|
|
51
|
+
function makeSyntheticResponse() {
|
|
52
|
+
const target = function () { };
|
|
53
|
+
const handler = {
|
|
54
|
+
get(_t, prop) {
|
|
55
|
+
if (prop === "then")
|
|
56
|
+
return undefined; // not thenable → await yields the proxy
|
|
57
|
+
if (prop === Symbol.toPrimitive)
|
|
58
|
+
return () => 0;
|
|
59
|
+
// Yield ONE representative item so `for (const x of body.items) { ... }`
|
|
60
|
+
// runs its body once and the in-loop assertions/endpoints are captured
|
|
61
|
+
// (not silently dropped). Single item keeps it finite.
|
|
62
|
+
if (prop === Symbol.iterator)
|
|
63
|
+
return function* () {
|
|
64
|
+
yield makeSyntheticResponse();
|
|
65
|
+
};
|
|
66
|
+
if (prop === Symbol.asyncIterator)
|
|
67
|
+
return async function* () {
|
|
68
|
+
yield makeSyntheticResponse();
|
|
69
|
+
};
|
|
70
|
+
if (prop === "status")
|
|
71
|
+
return 200;
|
|
72
|
+
if (prop === "ok")
|
|
73
|
+
return true;
|
|
74
|
+
if (prop === "statusText")
|
|
75
|
+
return "OK";
|
|
76
|
+
if (prop === "length")
|
|
77
|
+
return 0;
|
|
78
|
+
if (prop === "json" || prop === "text" || prop === "arrayBuffer" || prop === "blob") {
|
|
79
|
+
return () => Promise.resolve(makeSyntheticResponse());
|
|
80
|
+
}
|
|
81
|
+
// Array iteration helpers: invoke the callback ONCE with a representative
|
|
82
|
+
// item so assertions/requests inside `body.items.forEach(...)` / `.map(...)`
|
|
83
|
+
// are captured (mirrors the for-of path). Returns synthetic for chaining.
|
|
84
|
+
if (ARRAY_CALLBACK_HELPERS.has(prop)) {
|
|
85
|
+
return (cb, ..._rest) => {
|
|
86
|
+
if (typeof cb === "function") {
|
|
87
|
+
if (prop === "reduce" || prop === "reduceRight") {
|
|
88
|
+
cb(makeSyntheticResponse(), makeSyntheticResponse(), 0, makeSyntheticResponse());
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
cb(makeSyntheticResponse(), 0, makeSyntheticResponse());
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return makeSyntheticResponse();
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return makeSyntheticResponse();
|
|
98
|
+
},
|
|
99
|
+
apply() {
|
|
100
|
+
return makeSyntheticResponse();
|
|
101
|
+
},
|
|
102
|
+
has() {
|
|
103
|
+
return true;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
return new Proxy(target, handler);
|
|
107
|
+
}
|
|
108
|
+
/** A ky-like ResponsePromise: awaitable AND chainable with `.json()`/`.text()`. */
|
|
109
|
+
function responsePromise(ep) {
|
|
110
|
+
const p = Promise.resolve(makeSyntheticResponse());
|
|
111
|
+
p.json = () => Promise.resolve(makeSyntheticResponse());
|
|
112
|
+
p.text = () => Promise.resolve(makeSyntheticResponse());
|
|
113
|
+
p.arrayBuffer = () => Promise.resolve(makeSyntheticResponse());
|
|
114
|
+
p.blob = () => Promise.resolve(makeSyntheticResponse());
|
|
115
|
+
// `.track(pattern)` — author declares the canonical endpoint this request maps
|
|
116
|
+
// to; record it on the captured endpoint so projection coverage links exactly.
|
|
117
|
+
p.track = (pattern) => {
|
|
118
|
+
if (ep && typeof pattern === "string")
|
|
119
|
+
ep.pattern = pattern;
|
|
120
|
+
return p;
|
|
121
|
+
};
|
|
122
|
+
return p;
|
|
123
|
+
}
|
|
124
|
+
// Per-projection sink for raw global `fetch()` calls (outside ctx.http), carried
|
|
125
|
+
// through AsyncLocalStorage so CONCURRENT dryRunTest() calls each record into
|
|
126
|
+
// their own shape instead of a shared module slot.
|
|
127
|
+
const rawRecordALS = new AsyncLocalStorage();
|
|
128
|
+
// Ref-count the global patch so concurrent/nested installs share one stub and
|
|
129
|
+
// the real fetch is restored only when the last holder releases.
|
|
130
|
+
let patchRefCount = 0;
|
|
131
|
+
let savedFetch;
|
|
132
|
+
/**
|
|
133
|
+
* Patch I/O globals so a dry-run never performs real network I/O even when a
|
|
134
|
+
* test body bypasses `ctx.http` (e.g. raw `fetch`). Raw fetches route into the
|
|
135
|
+
* ALS-carried recorder of the active projection. Returns a release function;
|
|
136
|
+
* the stub is removed when the last holder releases (ref-counted). The worker
|
|
137
|
+
* installs once before imports and never releases (process-wide). (fs/db clients
|
|
138
|
+
* a test imports directly can't be generically stubbed — authoring guidance is
|
|
139
|
+
* to route I/O through `ctx`.)
|
|
140
|
+
*/
|
|
141
|
+
export function installDryRunGlobals() {
|
|
142
|
+
const g = globalThis;
|
|
143
|
+
if (patchRefCount === 0) {
|
|
144
|
+
savedFetch = g.fetch;
|
|
145
|
+
g.fetch = ((input, init) => {
|
|
146
|
+
const url = typeof input === "string"
|
|
147
|
+
? input
|
|
148
|
+
: input instanceof URL
|
|
149
|
+
? input.href
|
|
150
|
+
: input && typeof input === "object" && typeof input.url === "string"
|
|
151
|
+
? input.url
|
|
152
|
+
: input && typeof input === "object" && typeof input.href === "string"
|
|
153
|
+
? input.href
|
|
154
|
+
: "<dynamic>";
|
|
155
|
+
const rawMethod = init?.method ??
|
|
156
|
+
(input && typeof input === "object" ? input.method : undefined);
|
|
157
|
+
const method = (typeof rawMethod === "string" ? rawMethod : "GET").toUpperCase();
|
|
158
|
+
return (async () => {
|
|
159
|
+
// May throw DryRunBudgetExceeded → rejects, breaking a raw-fetch loop.
|
|
160
|
+
rawRecordALS.getStore()?.(method, url);
|
|
161
|
+
// Return the SAME deep synthetic as ctx.http so `await fetch(url).json()`
|
|
162
|
+
// and downstream `body.items.forEach(...)` / `body.user.id` project too.
|
|
163
|
+
return makeSyntheticResponse();
|
|
164
|
+
})();
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
patchRefCount++;
|
|
168
|
+
let released = false;
|
|
169
|
+
return () => {
|
|
170
|
+
if (released)
|
|
171
|
+
return;
|
|
172
|
+
released = true;
|
|
173
|
+
patchRefCount--;
|
|
174
|
+
if (patchRefCount === 0 && savedFetch) {
|
|
175
|
+
g.fetch = savedFetch;
|
|
176
|
+
savedFetch = undefined;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/** Builds a recording TestContext plus a collector for what it recorded. */
|
|
181
|
+
function makeDryRunCtx() {
|
|
182
|
+
const assertions = [];
|
|
183
|
+
const endpoints = [];
|
|
184
|
+
let reqCount = 0;
|
|
185
|
+
let whenCounter = 0;
|
|
186
|
+
let switchCounter = 0;
|
|
187
|
+
let whileCounter = 0;
|
|
188
|
+
const branchStack = [];
|
|
189
|
+
const curBranch = () => branchStack.length ? branchStack.join(">") : undefined;
|
|
190
|
+
const record = (method, url) => {
|
|
191
|
+
if (++reqCount > REQUEST_BUDGET)
|
|
192
|
+
throw new DryRunBudgetExceeded();
|
|
193
|
+
const ep = { method, url, branch: curBranch() };
|
|
194
|
+
endpoints.push(ep);
|
|
195
|
+
// Pass the just-recorded endpoint so a chained `.track(pattern)` can tag it
|
|
196
|
+
// with the author-declared canonical endpoint (collapsing concrete URLs like
|
|
197
|
+
// /users/123 onto /users/:id, exact for endpoint-coverage linking).
|
|
198
|
+
return responsePromise(ep);
|
|
199
|
+
};
|
|
200
|
+
const pushAssertion = (kind, message) => {
|
|
201
|
+
assertions.push({ kind, message, branch: curBranch() });
|
|
202
|
+
};
|
|
203
|
+
// Extract the URL/method from a ky input (string | URL | Request-like).
|
|
204
|
+
const urlOf = (input) => {
|
|
205
|
+
if (typeof input === "string")
|
|
206
|
+
return input;
|
|
207
|
+
if (input instanceof URL)
|
|
208
|
+
return input.href;
|
|
209
|
+
if (input && typeof input === "object") {
|
|
210
|
+
const o = input;
|
|
211
|
+
if (typeof o.url === "string")
|
|
212
|
+
return o.url; // Request
|
|
213
|
+
if (typeof o.href === "string")
|
|
214
|
+
return o.href; // URL-like
|
|
215
|
+
}
|
|
216
|
+
return "<dynamic>";
|
|
217
|
+
};
|
|
218
|
+
const methodOf = (input, opts, fallback) => {
|
|
219
|
+
const fromOpts = opts?.method;
|
|
220
|
+
const fromReq = input && typeof input === "object" ? input.method : undefined;
|
|
221
|
+
const m = typeof fromOpts === "string" ? fromOpts : typeof fromReq === "string" ? fromReq : undefined;
|
|
222
|
+
return m ? m.toUpperCase() : fallback;
|
|
223
|
+
};
|
|
224
|
+
// Join a configured/extended prefixUrl with a request path the way ky does:
|
|
225
|
+
// prepend the prefix unless the path is already absolute. Keeps projected
|
|
226
|
+
// endpoints accurate for `configure({ http: { prefixUrl } })` / `.extend(...)`.
|
|
227
|
+
const joinUrl = (prefix, url) => {
|
|
228
|
+
if (!prefix || /^[a-z][a-z0-9+.-]*:\/\//i.test(url))
|
|
229
|
+
return url;
|
|
230
|
+
return `${prefix.replace(/\/+$/, "")}/${url.replace(/^\/+/, "")}`;
|
|
231
|
+
};
|
|
232
|
+
// Append ky `searchParams` (object | array | string | URLSearchParams) so the
|
|
233
|
+
// projected endpoint reflects the real query, like the runner's trace.
|
|
234
|
+
const applySearchParams = (url, sp) => {
|
|
235
|
+
if (sp == null)
|
|
236
|
+
return url;
|
|
237
|
+
let qs = "";
|
|
238
|
+
if (typeof sp === "string")
|
|
239
|
+
qs = sp.replace(/^\?/, "");
|
|
240
|
+
else if (sp instanceof URLSearchParams)
|
|
241
|
+
qs = sp.toString();
|
|
242
|
+
else if (typeof sp === "object") {
|
|
243
|
+
const pairs = Array.isArray(sp)
|
|
244
|
+
? sp.map(([k, v]) => [String(k), String(v)])
|
|
245
|
+
: Object.entries(sp).map(([k, v]) => [k, String(v)]);
|
|
246
|
+
qs = new URLSearchParams(pairs).toString();
|
|
247
|
+
}
|
|
248
|
+
if (!qs)
|
|
249
|
+
return url;
|
|
250
|
+
return url + (url.includes("?") ? "&" : "?") + qs;
|
|
251
|
+
};
|
|
252
|
+
// ── http: callable (ky shorthand) + method shortcuts + prefix/searchParams-aware extend ──
|
|
253
|
+
const makeHttp = (prefix, defaultSp) => {
|
|
254
|
+
// method0 === null → derive from opts.method / Request.method (callable form);
|
|
255
|
+
// a fixed string → method shortcut (get/post/...).
|
|
256
|
+
const call = (method0, input, opts) => {
|
|
257
|
+
const o = opts;
|
|
258
|
+
// A per-request prefixUrl overrides the client's prefix (ky semantics).
|
|
259
|
+
const effPrefix = typeof o?.prefixUrl === "string" ? o.prefixUrl : prefix;
|
|
260
|
+
let url = joinUrl(effPrefix, urlOf(input));
|
|
261
|
+
url = applySearchParams(url, defaultSp); // client-level defaults (configure/extend)
|
|
262
|
+
url = applySearchParams(url, o?.searchParams); // per-request
|
|
263
|
+
return record(method0 ?? methodOf(input, opts, "GET"), url);
|
|
264
|
+
};
|
|
265
|
+
const h = (input, opts) => call(null, input, opts);
|
|
266
|
+
h.get = (input, opts) => call("GET", input, opts);
|
|
267
|
+
h.post = (input, opts) => call("POST", input, opts);
|
|
268
|
+
h.put = (input, opts) => call("PUT", input, opts);
|
|
269
|
+
h.patch = (input, opts) => call("PATCH", input, opts);
|
|
270
|
+
h.delete = (input, opts) => call("DELETE", input, opts);
|
|
271
|
+
h.head = (input, opts) => call("HEAD", input, opts);
|
|
272
|
+
h.extend = (opts) => makeHttp(typeof opts?.prefixUrl === "string" ? opts.prefixUrl : prefix, opts?.searchParams ?? defaultSp);
|
|
273
|
+
return h;
|
|
274
|
+
};
|
|
275
|
+
const http = makeHttp("");
|
|
276
|
+
// ── expect: fluent recorder mirroring the real Expectation surface. ──
|
|
277
|
+
// `.not` is a getter modifier (tracked → kind `expect.not.<matcher>`);
|
|
278
|
+
// `.orFail()` is a callable modifier. Async matchers
|
|
279
|
+
// (`await ctx.expect(res).toHaveJsonBody(...)`) work because `then` is absent.
|
|
280
|
+
const makeExpect = () => {
|
|
281
|
+
let negated = false;
|
|
282
|
+
const chain = new Proxy(function () { }, {
|
|
283
|
+
get(_t, prop) {
|
|
284
|
+
if (prop === "then")
|
|
285
|
+
return undefined; // not thenable → await yields chain
|
|
286
|
+
if (typeof prop === "symbol")
|
|
287
|
+
return undefined;
|
|
288
|
+
if (prop === "not") {
|
|
289
|
+
negated = true;
|
|
290
|
+
return chain;
|
|
291
|
+
}
|
|
292
|
+
if (prop === "orFail")
|
|
293
|
+
return () => chain; // callable modifier: `.orFail()`
|
|
294
|
+
return (...args) => {
|
|
295
|
+
// A trailing label is the LAST arg only when there's MORE than the
|
|
296
|
+
// matcher's value(s) — i.e. ≥2 args (`toBe(500, "no server error")`).
|
|
297
|
+
// A single string arg is the expected value (`toContain("ell")`).
|
|
298
|
+
const last = args[args.length - 1];
|
|
299
|
+
const message = args.length >= 2 && typeof last === "string" ? last : undefined;
|
|
300
|
+
pushAssertion(`expect.${negated ? "not." : ""}${String(prop)}`, message);
|
|
301
|
+
negated = false; // negation applies to one matcher
|
|
302
|
+
return chain;
|
|
303
|
+
};
|
|
304
|
+
},
|
|
305
|
+
apply() {
|
|
306
|
+
return chain;
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
return chain;
|
|
310
|
+
};
|
|
311
|
+
// vars/secrets/session are strings at runtime. Return a NAMED string
|
|
312
|
+
// placeholder so `${ctx.vars.require("BASE_URL")}/health` projects as
|
|
313
|
+
// `<BASE_URL>/health` (showing which env is used) instead of the numeric
|
|
314
|
+
// coercion of a synthetic proxy (`0/health`).
|
|
315
|
+
const accessor = {
|
|
316
|
+
get: (key) => `<${key}>`,
|
|
317
|
+
require: (key) => `<${key}>`,
|
|
318
|
+
// Return the placeholder proxy so `const { BASE_URL } = ctx.vars.all()`
|
|
319
|
+
// resolves to `<BASE_URL>`, consistent with get()/require().
|
|
320
|
+
all: () => placeholderRecord(),
|
|
321
|
+
set: () => { },
|
|
322
|
+
entries: () => [],
|
|
323
|
+
};
|
|
324
|
+
// Run one branch arm under its label: an AbortArm (from ctx.skip/ctx.fail)
|
|
325
|
+
// stops THIS arm but is swallowed here so sibling arms still project; budget/
|
|
326
|
+
// skip/real errors propagate.
|
|
327
|
+
const runArm = async (label, fn) => {
|
|
328
|
+
branchStack.push(label);
|
|
329
|
+
try {
|
|
330
|
+
await fn();
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
if (!(e instanceof AbortArm))
|
|
334
|
+
throw e;
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
branchStack.pop();
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
const ctxBase = {
|
|
341
|
+
vars: accessor,
|
|
342
|
+
secrets: accessor,
|
|
343
|
+
session: accessor,
|
|
344
|
+
http,
|
|
345
|
+
log: () => { },
|
|
346
|
+
warn: () => { },
|
|
347
|
+
assert: (_cond, message) => pushAssertion("assert", message),
|
|
348
|
+
expect: () => makeExpect(),
|
|
349
|
+
validate: (data, _schema, label) => {
|
|
350
|
+
// Schema validation IS a verification — record it so schema-only tests
|
|
351
|
+
// don't project as having zero assertions.
|
|
352
|
+
pushAssertion("validate", typeof label === "string" ? label : undefined);
|
|
353
|
+
return data;
|
|
354
|
+
},
|
|
355
|
+
trace: () => { },
|
|
356
|
+
action: () => { },
|
|
357
|
+
event: () => { },
|
|
358
|
+
metric: () => { },
|
|
359
|
+
skip: (reason) => {
|
|
360
|
+
// Inside a when/switch/while arm: record + abort THIS arm (so code after
|
|
361
|
+
// skip, which the real runner never reaches, isn't projected) while
|
|
362
|
+
// sibling arms still project. Top-level: skip the whole test.
|
|
363
|
+
if (branchStack.length > 0) {
|
|
364
|
+
pushAssertion("skip", reason);
|
|
365
|
+
throw new AbortArm();
|
|
366
|
+
}
|
|
367
|
+
throw new DryRunSkip();
|
|
368
|
+
},
|
|
369
|
+
fail: (message) => {
|
|
370
|
+
// Record + abort the current path: the real runner throws here, so
|
|
371
|
+
// subsequent code in this arm/body never runs. The arm wrapper catches
|
|
372
|
+
// AbortArm so sibling arms still project; at top level it ends the body.
|
|
373
|
+
pushAssertion("fail", message);
|
|
374
|
+
throw new AbortArm();
|
|
375
|
+
},
|
|
376
|
+
pollUntil: async (_options, fn) => {
|
|
377
|
+
// Run the predicate once to capture endpoints; ignore its result.
|
|
378
|
+
await fn();
|
|
379
|
+
},
|
|
380
|
+
setTimeout: () => { },
|
|
381
|
+
retryCount: 0,
|
|
382
|
+
getMemoryUsage: () => null,
|
|
383
|
+
// ── projection core: run ALL arms, branch-tagged ──
|
|
384
|
+
when: async (_condition, thenFn, elseFn, describe) => {
|
|
385
|
+
// describe (optional) annotates the opaque condition for reviewers.
|
|
386
|
+
const base = describe ? `when#${whenCounter++} (${describe})` : `when#${whenCounter++}`;
|
|
387
|
+
await runArm(`${base}:then`, thenFn);
|
|
388
|
+
if (elseFn)
|
|
389
|
+
await runArm(`${base}:else`, elseFn);
|
|
390
|
+
},
|
|
391
|
+
switch: async (cases, defaultFn) => {
|
|
392
|
+
const idx = switchCounter++;
|
|
393
|
+
for (let i = 0; i < cases.length; i++) {
|
|
394
|
+
const d = cases[i].describe;
|
|
395
|
+
await runArm(`switch#${idx}:case[${i}]${d ? ` (${d})` : ""}`, () => cases[i].then());
|
|
396
|
+
}
|
|
397
|
+
if (defaultFn)
|
|
398
|
+
await runArm(`switch#${idx}:default`, defaultFn);
|
|
399
|
+
},
|
|
400
|
+
while: async (_condition, body, describe) => {
|
|
401
|
+
// Run the body ONCE — a representative iteration — instead of looping
|
|
402
|
+
// against the synthetic guard (which would spin to the request budget).
|
|
403
|
+
const idx = whileCounter++;
|
|
404
|
+
await runArm(describe ? `while#${idx} (${describe})` : `while#${idx}`, body);
|
|
405
|
+
},
|
|
406
|
+
};
|
|
407
|
+
// Wrap so UNKNOWN properties resolve to a synthetic value instead of throwing.
|
|
408
|
+
// This covers `test.extend()` fixtures (e.g. `ctx.auth`) without replicating
|
|
409
|
+
// the harness's fixture resolution: the body runs and its shape is captured;
|
|
410
|
+
// fixture values are synthetic (projection doesn't need their real values).
|
|
411
|
+
const ctxProxy = new Proxy(ctxBase, {
|
|
412
|
+
get(target, prop) {
|
|
413
|
+
if (prop in target)
|
|
414
|
+
return target[prop];
|
|
415
|
+
if (prop === "then")
|
|
416
|
+
return undefined;
|
|
417
|
+
if (typeof prop === "symbol")
|
|
418
|
+
return undefined;
|
|
419
|
+
return makeSyntheticResponse();
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
return { ctx: ctxProxy, assertions, endpoints, http, record };
|
|
423
|
+
}
|
|
424
|
+
/** Named-placeholder record so `configure()` var/secret reads resolve to
|
|
425
|
+
* `<KEY>` (a non-empty string) instead of throwing "missing" or coercing to 0. */
|
|
426
|
+
function placeholderRecord() {
|
|
427
|
+
return new Proxy({}, {
|
|
428
|
+
get: (_t, key) => (typeof key === "string" ? `<${key}>` : undefined),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Project one test's shape by executing its body against a synthetic ctx.
|
|
433
|
+
*
|
|
434
|
+
* @param test The Test object (from importing the test module).
|
|
435
|
+
* @param opts.exportName JS export name (for the shape label).
|
|
436
|
+
* @param opts.bareBranchCount Scanner-reported count of native `if`/`switch` in
|
|
437
|
+
* the body — when > 0 the projection is marked partial.
|
|
438
|
+
*/
|
|
439
|
+
export async function dryRunTest(test, opts) {
|
|
440
|
+
const testId = test.meta.id;
|
|
441
|
+
const metaTags = test.meta.tags;
|
|
442
|
+
const base = {
|
|
443
|
+
testId,
|
|
444
|
+
exportName: opts.exportName,
|
|
445
|
+
...(metaTags && metaTags.length ? { tags: metaTags } : {}),
|
|
446
|
+
assertions: [],
|
|
447
|
+
endpoints: [],
|
|
448
|
+
assertionCount: 0,
|
|
449
|
+
};
|
|
450
|
+
// Only simple tests have a directly-invokable fn body. Builder/workflow tests
|
|
451
|
+
// express shape through steps (already captured statically by the scanner).
|
|
452
|
+
if (test.type !== "simple" || typeof test.fn !== "function") {
|
|
453
|
+
return {
|
|
454
|
+
...base,
|
|
455
|
+
projectionComplete: false,
|
|
456
|
+
incompleteReason: "not a simple test — dry-run shape projection covers simple tests only",
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
const { ctx, assertions, endpoints, http, record } = makeDryRunCtx();
|
|
460
|
+
let complete = true;
|
|
461
|
+
let reason;
|
|
462
|
+
let skipped = false;
|
|
463
|
+
// Install a synthetic runtime carrier so `configure({ http })`, configured
|
|
464
|
+
// vars/secrets, and session reads work during projection instead of throwing
|
|
465
|
+
// "can only be accessed during test execution". The configured http is the
|
|
466
|
+
// SAME recording client as ctx.http, so configured requests are captured too.
|
|
467
|
+
const runtime = {
|
|
468
|
+
vars: placeholderRecord(),
|
|
469
|
+
secrets: placeholderRecord(),
|
|
470
|
+
session: placeholderRecord(),
|
|
471
|
+
http,
|
|
472
|
+
trace: () => { },
|
|
473
|
+
action: () => { },
|
|
474
|
+
event: () => { },
|
|
475
|
+
log: () => { },
|
|
476
|
+
};
|
|
477
|
+
// Install the raw-fetch stub for the direct dryRunTest() API too (the worker
|
|
478
|
+
// installs it permanently before imports). Ref-counted: released in finally,
|
|
479
|
+
// restoring the real global fetch when no projection is still using it.
|
|
480
|
+
const releaseGlobals = installDryRunGlobals();
|
|
481
|
+
// Route raw global fetch() (if a body bypasses ctx.http) into THIS test's
|
|
482
|
+
// recorder via ALS — captured, budget-bounded, never real network, and
|
|
483
|
+
// isolated from any concurrent projection.
|
|
484
|
+
try {
|
|
485
|
+
await rawRecordALS.run((method, url) => {
|
|
486
|
+
record(method, url);
|
|
487
|
+
}, async () => {
|
|
488
|
+
await runWithRuntime(runtime, async () => {
|
|
489
|
+
await test.fn(ctx);
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
if (err instanceof DryRunSkip) {
|
|
495
|
+
skipped = true;
|
|
496
|
+
}
|
|
497
|
+
else if (err instanceof AbortArm) {
|
|
498
|
+
// A top-level ctx.fail() aborted the body — the real runner stops here too,
|
|
499
|
+
// so the captured shape (up to the fail) is complete, not a failure.
|
|
500
|
+
}
|
|
501
|
+
else if (err instanceof DryRunBudgetExceeded) {
|
|
502
|
+
complete = false;
|
|
503
|
+
reason = `request budget (${REQUEST_BUDGET}) exceeded — likely a data-dependent loop`;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
complete = false;
|
|
507
|
+
reason = `threw during projection: ${err?.message ?? String(err)}`;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
finally {
|
|
511
|
+
releaseGlobals();
|
|
512
|
+
}
|
|
513
|
+
// Fold in the static signal: bare branches mean only one arm was followed.
|
|
514
|
+
if (complete && opts.bareBranchCount && opts.bareBranchCount > 0) {
|
|
515
|
+
complete = false;
|
|
516
|
+
reason = `${opts.bareBranchCount} bare branch/loop(s) — use ctx.when()/ctx.switch()/ctx.while() for full projection`;
|
|
517
|
+
}
|
|
518
|
+
return {
|
|
519
|
+
...base,
|
|
520
|
+
assertions,
|
|
521
|
+
endpoints,
|
|
522
|
+
assertionCount: assertions.length,
|
|
523
|
+
projectionComplete: complete,
|
|
524
|
+
...(reason ? { incompleteReason: reason } : {}),
|
|
525
|
+
...(skipped ? { skipped: true } : {}),
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=dry-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../src/dry-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-bridge.d.ts","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,UAAU,EAEV,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,eAAO,MAAM,UAAU,SAAyC,CAAC;AAajE,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"engine-bridge.d.ts","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,UAAU,EAEV,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,eAAO,MAAM,UAAU,SAAyC,CAAC;AAajE,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmJ5E;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;gFAC4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;qFACiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;yFAEqF;IACrF,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC7C,IAAI,EAAE,iBAAiB,GACtB,UAAU,CAsBZ;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAE1G"}
|
package/dist/engine-bridge.js
CHANGED
|
@@ -49,6 +49,9 @@ export function engineEventToWire(e) {
|
|
|
49
49
|
tags: e.tags,
|
|
50
50
|
testId: e.id,
|
|
51
51
|
...(e.retryCount !== undefined ? { retryCount: e.retryCount } : {}),
|
|
52
|
+
// rowIndex (B2 M3): forward the engine def's `.each` row index so the
|
|
53
|
+
// engine path's start wire event carries it just like the legacy path.
|
|
54
|
+
...(e.rowIndex !== undefined ? { rowIndex: e.rowIndex } : {}),
|
|
52
55
|
};
|
|
53
56
|
case "log":
|
|
54
57
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-bridge.js","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,UAAU,EACV,SAAS,GAKV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,kFAAkF;AAClF,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AAEjE,qFAAqF;AACrF,mFAAmF;AACnF,kFAAkF;AAClF,uFAAuF;AACvF,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC3F,CAAC;AACF,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvE,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,UAAU,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAiB;IACjD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,EAAE;gBACZ,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-bridge.js","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,UAAU,EACV,SAAS,GAKV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,kFAAkF;AAClF,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AAEjE,qFAAqF;AACrF,mFAAmF;AACnF,kFAAkF;AAClF,uFAAuF;AACvF,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC3F,CAAC;AACF,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvE,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,UAAU,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAiB;IACjD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,EAAE;gBACZ,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,sEAAsE;gBACtE,uEAAuE;gBACvE,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,KAAK,KAAK;YACR,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,OAAO;YACV,2EAA2E;YAC3E,+EAA+E;YAC/E,4EAA4E;YAC5E,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,YAAY;YACf,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;gBACpC,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ,KAAK,gBAAgB;YACnB,2EAA2E;YAC3E,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACtE,KAAK,aAAa;YAChB,wEAAwE;YACxE,oEAAoE;YACpE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3F,KAAK,OAAO;YACV,gFAAgF;YAChF,oEAAoE;YACpE,yEAAyE;YACzE,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC;QACJ;YACE,gEAAgE;YAChE,OAAO,EAAE,GAAI,CAA6B,EAAE,MAAM,EAAG,CAAoB,CAAC,EAAE,EAAE,CAAC;IACnF,CAAC;AACH,CAAC;AAmBD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAA6C,EAC7C,IAAuB;IAEvB,MAAM,QAAQ,GAAmB;QAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAoB,EAAE,IAAI,CAAC;QACpE,GAAG,EAAE;YACH,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO;YAC3B,kFAAkF;YAClF,+EAA+E;YAC/E,gEAAgE;YAChE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI;SACzC;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;QACnD,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE;QAC3C,OAAO,EAAE,gBAAgB,EAAE;QAC3B,IAAI,EAAE;YACJ,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B;KACF,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,IAAmB,EAAE,KAAiB;IACnF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export type ExecutionEvent = {
|
|
|
15
15
|
suiteId?: string;
|
|
16
16
|
suiteName?: string;
|
|
17
17
|
retryCount?: number;
|
|
18
|
+
/** 0-based `.each` row index (post-filter); undefined for non-each tests. */
|
|
19
|
+
rowIndex?: number;
|
|
18
20
|
} | {
|
|
19
21
|
type: "log";
|
|
20
22
|
message: string;
|
|
@@ -378,6 +380,8 @@ export interface ExecutionResult {
|
|
|
378
380
|
success: boolean;
|
|
379
381
|
testId: string;
|
|
380
382
|
testName?: string;
|
|
383
|
+
/** 0-based `.each` row index (post-filter); undefined for non-each tests. */
|
|
384
|
+
rowIndex?: number;
|
|
381
385
|
suiteId?: string;
|
|
382
386
|
suiteName?: string;
|
|
383
387
|
events: TimelineEvent[];
|