@molecule/api-ai-tools 1.9.19 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -7
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -1
- package/dist/suite-overlap.d.ts +26 -1
- package/dist/suite-overlap.d.ts.map +1 -1
- package/dist/suite-overlap.js +66 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +237 -19
- package/dist/trace-artifacts.d.ts +38 -0
- package/dist/trace-artifacts.d.ts.map +1 -1
- package/dist/trace-artifacts.js +212 -2
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utilities.d.ts +9 -4
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +6 -4
- package/package.json +1 -1
package/dist/trace-artifacts.js
CHANGED
|
@@ -284,6 +284,40 @@ function gotText(buf, entries, r) {
|
|
|
284
284
|
return (websocketText(raw) || raw).slice(0, MAX_WS)
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
// The boolean-valued fields a response body carries, however deeply its entity is wrapped
|
|
288
|
+
// ({"profile":{…,"following":true}}) — what a read of the same field can contradict.
|
|
289
|
+
// A body that does not parse (the trace read bounds what it keeps) names no field.
|
|
290
|
+
function booleanFieldsOf(text) {
|
|
291
|
+
let parsed
|
|
292
|
+
try { parsed = JSON.parse(text) } catch (e) { return null }
|
|
293
|
+
const out = {}
|
|
294
|
+
function walk(value, depth) {
|
|
295
|
+
if (depth > 4 || value === null || typeof value !== 'object') return
|
|
296
|
+
if (Array.isArray(value)) {
|
|
297
|
+
for (let i = 0; i < value.length; i++) walk(value[i], depth + 1)
|
|
298
|
+
return
|
|
299
|
+
}
|
|
300
|
+
for (const key of Object.keys(value)) {
|
|
301
|
+
const item = value[key]
|
|
302
|
+
if (typeof item === 'boolean') {
|
|
303
|
+
if (!Object.prototype.hasOwnProperty.call(out, key)) out[key] = item
|
|
304
|
+
} else walk(item, depth + 1)
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
walk(parsed, 0)
|
|
308
|
+
return Object.keys(out).length > 0 ? out : null
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// The resource a write acts on: its last path segment is the action (follow, favorite), so
|
|
312
|
+
// /api/profiles/alice/follow is the resource a GET /api/profiles/alice reads.
|
|
313
|
+
function resourceBaseOf(path) {
|
|
314
|
+
const clean = String(path).split(/[?#]/)[0]
|
|
315
|
+
const parts = clean.split('/').filter(function (segment) { return segment !== '' })
|
|
316
|
+
if (parts.length === 0) return clean
|
|
317
|
+
parts.pop()
|
|
318
|
+
return '/' + parts.join('/')
|
|
319
|
+
}
|
|
320
|
+
|
|
287
321
|
let origin = ''
|
|
288
322
|
function pathOf(url) {
|
|
289
323
|
try {
|
|
@@ -829,6 +863,66 @@ for (const one of found.slice(0, MAX_TRACES)) {
|
|
|
829
863
|
if (got) lead.got = got
|
|
830
864
|
}
|
|
831
865
|
}
|
|
866
|
+
// A write that answered a boolean field and a LATER GET of the same resource that answered the
|
|
867
|
+
// opposite — the read route never saw the viewer (m181's follow: the write answered
|
|
868
|
+
// {"following":true}, the next profile GET answered false). Both bodies are the trace's own
|
|
869
|
+
// facts; the note leads with them and sends the run to the route's middleware, not the page.
|
|
870
|
+
function readContradictionOf() {
|
|
871
|
+
const writes = []
|
|
872
|
+
for (let i = 0; i < requests.length; i++) {
|
|
873
|
+
const r = requests[i]
|
|
874
|
+
if (!/^(?:POST|PUT|PATCH|DELETE)$/.test(r.method)) continue
|
|
875
|
+
if (r.status < 200 || r.status >= 300) continue
|
|
876
|
+
if (r.type !== 'fetch' && r.type !== 'xhr') continue
|
|
877
|
+
writes.push({ index: i, request: r })
|
|
878
|
+
}
|
|
879
|
+
for (let w = 0; w < writes.length; w++) {
|
|
880
|
+
const write = writes[w].request
|
|
881
|
+
const writeGot = gotText(buf, entries, write)
|
|
882
|
+
const writeFields = writeGot ? booleanFieldsOf(writeGot) : null
|
|
883
|
+
if (!writeFields) continue
|
|
884
|
+
const base = resourceBaseOf(write.path)
|
|
885
|
+
let read = null
|
|
886
|
+
let readFields = null
|
|
887
|
+
for (let j = writes[w].index + 1; j < requests.length; j++) {
|
|
888
|
+
const candidate = requests[j]
|
|
889
|
+
if (candidate.method !== 'GET') continue
|
|
890
|
+
if (candidate.status < 200 || candidate.status >= 300) continue
|
|
891
|
+
if (candidate.type !== 'fetch' && candidate.type !== 'xhr') continue
|
|
892
|
+
// The same page only: another context's read is not this page's answer.
|
|
893
|
+
if (candidate.pageId !== undefined && write.pageId !== undefined &&
|
|
894
|
+
candidate.pageId !== write.pageId) continue
|
|
895
|
+
if (candidate.context !== undefined && write.context !== undefined &&
|
|
896
|
+
candidate.context !== write.context) continue
|
|
897
|
+
// LATER, on the trace's own clock when it recorded one.
|
|
898
|
+
if (typeof candidate.startedAt === 'number' && typeof write.startedAt === 'number' &&
|
|
899
|
+
candidate.startedAt <= write.startedAt) continue
|
|
900
|
+
if (String(candidate.path).split(/[?#]/)[0] !== base) continue
|
|
901
|
+
const got = gotText(buf, entries, candidate)
|
|
902
|
+
const fields = got ? booleanFieldsOf(got) : null
|
|
903
|
+
if (!fields) continue
|
|
904
|
+
read = candidate
|
|
905
|
+
readFields = fields
|
|
906
|
+
break
|
|
907
|
+
}
|
|
908
|
+
if (read === null || readFields === null) continue
|
|
909
|
+
for (const key of Object.keys(writeFields)) {
|
|
910
|
+
if (!Object.prototype.hasOwnProperty.call(readFields, key)) continue
|
|
911
|
+
if (readFields[key] === writeFields[key]) continue
|
|
912
|
+
write.got = writeGot
|
|
913
|
+
read.got = gotText(buf, entries, read)
|
|
914
|
+
return {
|
|
915
|
+
field: key,
|
|
916
|
+
writeValue: writeFields[key],
|
|
917
|
+
readValue: readFields[key],
|
|
918
|
+
write: wire(write),
|
|
919
|
+
read: wire(read),
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
return null
|
|
924
|
+
}
|
|
925
|
+
const readContradiction = readContradictionOf()
|
|
832
926
|
const failing = []
|
|
833
927
|
const api = []
|
|
834
928
|
const pending = []
|
|
@@ -934,6 +1028,7 @@ for (const one of found.slice(0, MAX_TRACES)) {
|
|
|
934
1028
|
// plus the answered ones (xr-molecule-flash-m112's note listed only -1s and 200s).
|
|
935
1029
|
requests: chosen.slice(0, MAX_REQUESTS),
|
|
936
1030
|
...(missingText === null ? {} : { missingText: missingText }),
|
|
1031
|
+
...(readContradiction === null ? {} : { readContradiction: readContradiction }),
|
|
937
1032
|
console: keptConsole.slice(0, MAX_CONSOLE).map(function (text) { return text.slice(0, 300) }),
|
|
938
1033
|
actions: actions.slice(-MAX_ACTIONS),
|
|
939
1034
|
...(unattributed ? { unattributed: true } : {}),
|
|
@@ -988,6 +1083,29 @@ function parseMissingText(value) {
|
|
|
988
1083
|
return null;
|
|
989
1084
|
return { text: raw.text, method: raw.method, path: raw.path };
|
|
990
1085
|
}
|
|
1086
|
+
/**
|
|
1087
|
+
* One `readContradiction` out of a `TRACE` line's json, or null when the value is not one.
|
|
1088
|
+
*
|
|
1089
|
+
* Both requests must parse and the two values must be booleans: a partial fact never becomes a
|
|
1090
|
+
* claim about the route.
|
|
1091
|
+
*
|
|
1092
|
+
* @param value - The line's `readContradiction`.
|
|
1093
|
+
* @returns The write, the later read and the field they disagree on, or null.
|
|
1094
|
+
*/
|
|
1095
|
+
function parseReadContradiction(value) {
|
|
1096
|
+
if (typeof value !== 'object' || value === null)
|
|
1097
|
+
return null;
|
|
1098
|
+
const raw = value;
|
|
1099
|
+
if (typeof raw.field !== 'string' || raw.field === '')
|
|
1100
|
+
return null;
|
|
1101
|
+
if (typeof raw.writeValue !== 'boolean' || typeof raw.readValue !== 'boolean')
|
|
1102
|
+
return null;
|
|
1103
|
+
const write = parseTraceRequest(raw.write);
|
|
1104
|
+
const read = parseTraceRequest(raw.read);
|
|
1105
|
+
if (write === null || read === null)
|
|
1106
|
+
return null;
|
|
1107
|
+
return { field: raw.field, writeValue: raw.writeValue, readValue: raw.readValue, write, read };
|
|
1108
|
+
}
|
|
991
1109
|
/**
|
|
992
1110
|
* One `lastAction` out of a `TRACE` line's json, or null when the value is not one.
|
|
993
1111
|
*
|
|
@@ -1034,6 +1152,7 @@ export function parseTraceArtifacts(stdout) {
|
|
|
1034
1152
|
const lead = parseTraceRequest(raw.lead);
|
|
1035
1153
|
const lastAction = parseLastAction(raw.lastAction);
|
|
1036
1154
|
const missingText = parseMissingText(raw.missingText);
|
|
1155
|
+
const readContradiction = parseReadContradiction(raw.readContradiction);
|
|
1037
1156
|
const otherContexts = Array.isArray(raw.otherContexts)
|
|
1038
1157
|
? raw.otherContexts
|
|
1039
1158
|
.filter((c) => typeof c === 'object' && c !== null)
|
|
@@ -1070,6 +1189,7 @@ export function parseTraceArtifacts(stdout) {
|
|
|
1070
1189
|
...(otherContexts.length === 0 ? {} : { otherContexts }),
|
|
1071
1190
|
...(raw.unattributed === true ? { unattributed: true } : {}),
|
|
1072
1191
|
...(missingText === null ? {} : { missingText }),
|
|
1192
|
+
...(readContradiction === null ? {} : { readContradiction }),
|
|
1073
1193
|
});
|
|
1074
1194
|
}
|
|
1075
1195
|
catch (_error) {
|
|
@@ -2159,6 +2279,71 @@ function formResetSentence(reset) {
|
|
|
2159
2279
|
`typing (an effect re-seeding the form from data that changed identity ran again after the ` +
|
|
2160
2280
|
`test typed). Seed the form once, not every time that data changes.`);
|
|
2161
2281
|
}
|
|
2282
|
+
/**
|
|
2283
|
+
* The sentence for a write whose answer a later GET of the same resource contradicted.
|
|
2284
|
+
*
|
|
2285
|
+
* It states the two recorded facts and the one inference they support — the read route never saw
|
|
2286
|
+
* the viewer — then the place to look: the route's middleware, not the page. It names both
|
|
2287
|
+
* possibilities the trace cannot separate (a missing auth/optional-auth middleware on that route,
|
|
2288
|
+
* or a different user), so the run checks the route instead of rewriting the component.
|
|
2289
|
+
*
|
|
2290
|
+
* @param contradiction - The write's answer and the later read's opposite one.
|
|
2291
|
+
* @returns The sentence the note leads with.
|
|
2292
|
+
*/
|
|
2293
|
+
function readContradictionSentence(contradiction) {
|
|
2294
|
+
return (`The server answered \`${contradiction.field}\`: ${contradiction.writeValue} to ` +
|
|
2295
|
+
`${requestLabel(contradiction.write)} and \`${contradiction.field}\`: ` +
|
|
2296
|
+
`${contradiction.readValue} to ${requestLabel(contradiction.read)} — the read route does not ` +
|
|
2297
|
+
`see the viewer (a missing auth/optional-auth middleware on that route, or a different user); ` +
|
|
2298
|
+
`check the route's middleware, not the page.`);
|
|
2299
|
+
}
|
|
2300
|
+
/**
|
|
2301
|
+
* Chromium's webfont decode failure: the URL it fetched, and OTS's reason.
|
|
2302
|
+
*
|
|
2303
|
+
* A page that serves its SPA fallback for a missing `.woff` produces exactly this line — the
|
|
2304
|
+
* browser downloads `index.html` and OTS rejects the first four bytes.
|
|
2305
|
+
*/
|
|
2306
|
+
const FONT_DECODE_FAILURE = /Failed to decode downloaded font:\s*(\S+)\s*\|\s*OTS parsing error:\s*(.+?)\s*$/i;
|
|
2307
|
+
/**
|
|
2308
|
+
* Whether an OTS `invalid sfntVersion: <n>` number is four ASCII bytes that start an HTML
|
|
2309
|
+
* document (`<!do` — `0x3C21646F` is the doctype's first four bytes).
|
|
2310
|
+
*
|
|
2311
|
+
* @param reason - The OTS reason text after `OTS parsing error:`.
|
|
2312
|
+
* @returns True when the codec read an HTML signature instead of a font signature.
|
|
2313
|
+
*/
|
|
2314
|
+
function sfntVersionIsHtml(reason) {
|
|
2315
|
+
const raw = /invalid sfntVersion:\s*(\d+)/i.exec(reason)?.[1];
|
|
2316
|
+
if (raw === undefined)
|
|
2317
|
+
return false;
|
|
2318
|
+
const value = Number(raw);
|
|
2319
|
+
if (!Number.isInteger(value) || value < 0 || value > 0xffffffff)
|
|
2320
|
+
return false;
|
|
2321
|
+
const magic = String.fromCharCode((value >>> 24) & 0xff, (value >>> 16) & 0xff, (value >>> 8) & 0xff, value & 0xff);
|
|
2322
|
+
return magic.startsWith('<');
|
|
2323
|
+
}
|
|
2324
|
+
/**
|
|
2325
|
+
* One line of a failure row's `console:` list, with the webfont-decode signature explained.
|
|
2326
|
+
*
|
|
2327
|
+
* `Failed to decode downloaded font: <url> | OTS parsing error: invalid sfntVersion: 1008821359`
|
|
2328
|
+
* is not a font to debug: the URL answered HTML (the app's `index.html`, the SPA fallback), so
|
|
2329
|
+
* the file the `@font-face` names is not there. xr-molecule-flash-m186's page fetched
|
|
2330
|
+
* `/fonts/ionicons.woff`, got the index document, and the note printed the raw decode error
|
|
2331
|
+
* while the model went looking elsewhere.
|
|
2332
|
+
*
|
|
2333
|
+
* @param text - The console line, as the trace recorded it.
|
|
2334
|
+
* @returns The line to print, naming the URL that served HTML when it is that failure.
|
|
2335
|
+
*/
|
|
2336
|
+
function consoleLine(text) {
|
|
2337
|
+
const normalized = text.replace(/\s+/g, ' ').trim();
|
|
2338
|
+
const failure = FONT_DECODE_FAILURE.exec(normalized);
|
|
2339
|
+
if (!failure)
|
|
2340
|
+
return normalized;
|
|
2341
|
+
const [, url, reason] = failure;
|
|
2342
|
+
if (!sfntVersionIsHtml(reason))
|
|
2343
|
+
return normalized;
|
|
2344
|
+
return (`${url} answered the app's index.html, not a font — the file is missing from ` +
|
|
2345
|
+
`\`app/public/\` (or the asset import); copy/import it`);
|
|
2346
|
+
}
|
|
2162
2347
|
/**
|
|
2163
2348
|
* The note a failed suite run's result carries: what each failing test's page actually sent, and
|
|
2164
2349
|
* what came back.
|
|
@@ -2206,6 +2391,12 @@ function formResetSentence(reset) {
|
|
|
2206
2391
|
* this on the deployed URL only, where the background session verification lands later than it
|
|
2207
2392
|
* does locally.
|
|
2208
2393
|
*
|
|
2394
|
+
* A write whose response said a boolean field is true and a LATER GET of the same resource that
|
|
2395
|
+
* said it is false leads the note first ({@link readContradictionSentence}): the read route never
|
|
2396
|
+
* saw the viewer, so the fix is on that route's middleware, not in the page. xr-molecule-flash-m181
|
|
2397
|
+
* spent ~8 minutes rewriting the profile component over exactly that pair — the write answered
|
|
2398
|
+
* `{"following":true}` and the next profile GET answered `false`.
|
|
2399
|
+
*
|
|
2209
2400
|
* WHICH rows it spends is evidence, not artifact order (xr-molecule-flash-m112 +53:46): a row
|
|
2210
2401
|
* needs a recorded response, a real failure or a console line ({@link traceRowEvidence}), rows are
|
|
2211
2402
|
* deduplicated by the test's location, and they are ordered real failure → repeated from an
|
|
@@ -2468,7 +2659,7 @@ export function failureTraceNote(items, target, earlierFailures = [], apiPrefixe
|
|
|
2468
2659
|
if (item.console.length > 0)
|
|
2469
2660
|
parts.push(`console: ${item.console
|
|
2470
2661
|
.slice(0, 2)
|
|
2471
|
-
.map((text) => text
|
|
2662
|
+
.map((text) => consoleLine(text).slice(0, 160))
|
|
2472
2663
|
.join(' | ')}`);
|
|
2473
2664
|
// A request from another browser context the test opened is not the failing action's effect:
|
|
2474
2665
|
// it is set-up work on a different page, and it is named as such rather than merged into the
|
|
@@ -2566,6 +2757,24 @@ export function failureTraceNote(items, target, earlierFailures = [], apiPrefixe
|
|
|
2566
2757
|
const missingTextLead = missingTexts.length === 0
|
|
2567
2758
|
? ''
|
|
2568
2759
|
: `${missingTexts.slice(0, 2).map(missingTextSentence).join(' ')}\n\n`;
|
|
2760
|
+
// A write whose answer a later GET of the same resource contradicted: the read route does not
|
|
2761
|
+
// see the viewer (m181's `following` — the write answered true, the next profile GET answered
|
|
2762
|
+
// false). It reads as a frontend race and is not one, so it leads the note before any row and
|
|
2763
|
+
// before the form-reset reading.
|
|
2764
|
+
const readContradictions = [
|
|
2765
|
+
...new Map(traced
|
|
2766
|
+
.filter((item) => item.readContradiction !== undefined)
|
|
2767
|
+
.map((item) => {
|
|
2768
|
+
const contradiction = item.readContradiction;
|
|
2769
|
+
return [
|
|
2770
|
+
`${contradiction.field}\u0000${contradiction.write.method} ${contradiction.write.path}`,
|
|
2771
|
+
contradiction,
|
|
2772
|
+
];
|
|
2773
|
+
})).values(),
|
|
2774
|
+
];
|
|
2775
|
+
const readContradictionLead = readContradictions.length === 0
|
|
2776
|
+
? ''
|
|
2777
|
+
: `${readContradictions.slice(0, 2).map(readContradictionSentence).join(' ')}\n\n`;
|
|
2569
2778
|
// A field the test typed and the page submitted empty: the form re-seeded itself after the
|
|
2570
2779
|
// typing (m173's Settings race — the deployed URL lands the background session verification
|
|
2571
2780
|
// later than a local run, and its new user object re-ran the form's seeding effect between the
|
|
@@ -2577,7 +2786,8 @@ export function failureTraceNote(items, target, earlierFailures = [], apiPrefixe
|
|
|
2577
2786
|
.map((reset) => [`${reset.request.method} ${reset.request.path}\u0000${reset.field}`, reset])).values(),
|
|
2578
2787
|
];
|
|
2579
2788
|
const formResetLead = formResets.length === 0 ? '' : `${formResets.slice(0, 2).map(formResetSentence).join(' ')}\n\n`;
|
|
2580
|
-
return (
|
|
2789
|
+
return (readContradictionLead +
|
|
2790
|
+
formResetLead +
|
|
2581
2791
|
missingTextLead +
|
|
2582
2792
|
transportLead +
|
|
2583
2793
|
setupOriginLead +
|
package/dist/types.d.ts
CHANGED
|
@@ -164,6 +164,25 @@ export interface ToolBuildConfig {
|
|
|
164
164
|
* @returns The quoted titles the request carves out.
|
|
165
165
|
*/
|
|
166
166
|
excludedTestTitles?: () => readonly string[];
|
|
167
|
+
/**
|
|
168
|
+
* The `NAME=value` settings the person's request REQUIRES of a suite run (molecule-dev's
|
|
169
|
+
* `requiredRunSettings` — its mode, say), asked when the cause note composes a narrowed re-run
|
|
170
|
+
* of a finished run's failures. A re-run composed from the executor's own command inherits what
|
|
171
|
+
* that command set — and nothing it left out, so a run that measured the suite in `spa` handed
|
|
172
|
+
* back a re-run that would measure `spa` again (xr-molecule-flash-m182 +12:06: the request names
|
|
173
|
+
* `TEST_MODE=fullstack`, the run and its re-run both omitted it).
|
|
174
|
+
*
|
|
175
|
+
* A getter, not an array: the request is read per turn while the tool set is built once, and
|
|
176
|
+
* what the suite's own files read is the consumer's reading. Unset answers "nothing required".
|
|
177
|
+
*
|
|
178
|
+
* @param command - The command the finished run was started with.
|
|
179
|
+
* @param cwd - The resolved working directory it ran in.
|
|
180
|
+
* @returns The settings to put on a re-run of that command.
|
|
181
|
+
*/
|
|
182
|
+
requiredSuiteEnv?: (command: string, cwd: string) => Promise<readonly {
|
|
183
|
+
name: string;
|
|
184
|
+
value: string;
|
|
185
|
+
}[] | null | undefined>;
|
|
167
186
|
/**
|
|
168
187
|
* The supplied suite's own budget, when the Playwright config a command would load sets
|
|
169
188
|
* different settings, asked BEFORE the run executes. The consumer knows where the suite and its
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utilities.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
7
|
import { type RunFailureKind } from './failure-kind.js';
|
|
8
|
-
import { type DiagnosisRunContext } from './suite-overlap.js';
|
|
8
|
+
import { type DiagnosisRunContext, type RunEnvSetting } from './suite-overlap.js';
|
|
9
9
|
/**
|
|
10
10
|
* Shell-safe quoting using single quotes. Unlike JSON.stringify (double quotes),
|
|
11
11
|
* single-quoted strings prevent command substitution ($(), backticks) and variable expansion.
|
|
@@ -1169,8 +1169,8 @@ export declare function failuresByCause(log: string, excluded?: readonly string[
|
|
|
1169
1169
|
* @param log - The finished run's output.
|
|
1170
1170
|
* @param excluded - The test titles the request carves out, if the caller knows them.
|
|
1171
1171
|
* @param run - How the run was started, when the caller knows it: the narrowed re-run is built
|
|
1172
|
-
* from `command`/`cwd`/`config`, and `log` (the path the output was written to) is what
|
|
1173
|
-
* "left out" sentence greps when more causes exist than the result has room for.
|
|
1172
|
+
* from `command`/`cwd`/`config`/`env`, and `log` (the path the output was written to) is what
|
|
1173
|
+
* the "left out" sentence greps when more causes exist than the result has room for.
|
|
1174
1174
|
* @returns The note, or null.
|
|
1175
1175
|
*/
|
|
1176
1176
|
export declare function failureCausesNote(log: string, excluded?: readonly string[], run?: {
|
|
@@ -1178,6 +1178,7 @@ export declare function failureCausesNote(log: string, excluded?: readonly strin
|
|
|
1178
1178
|
cwd?: string;
|
|
1179
1179
|
log?: string;
|
|
1180
1180
|
config?: string | null;
|
|
1181
|
+
env?: readonly RunEnvSetting[];
|
|
1181
1182
|
}, pageErrors?: readonly CausePageErrors[]): string | null;
|
|
1182
1183
|
/**
|
|
1183
1184
|
* The command that re-runs the tests at `locations` the way the run IN FLIGHT ran them: the same
|
|
@@ -1192,7 +1193,9 @@ export declare function failureCausesNote(log: string, excluded?: readonly strin
|
|
|
1192
1193
|
* refused while the run walks ({@link suiteRunInTheWay}).
|
|
1193
1194
|
*
|
|
1194
1195
|
* @param run - The run in flight: the command it was started with, as it was run, the directory
|
|
1195
|
-
* that command ran in,
|
|
1196
|
+
* that command ran in, the config it loaded when the caller knows it, and the settings the
|
|
1197
|
+
* request required and the run left out (`env`) — the re-run carries them, so it never
|
|
1198
|
+
* reproduces the configuration the run was measured under by mistake (m182).
|
|
1196
1199
|
* @param locations - The failing `file:line`s to re-run, as the run's log printed them.
|
|
1197
1200
|
* @param excluded - The test titles the request carves out: the re-run inverts them out
|
|
1198
1201
|
* (`--grep-invert`) so it cannot report them again.
|
|
@@ -1202,6 +1205,7 @@ export declare function rerunOfRunningSuite(run: {
|
|
|
1202
1205
|
command: string;
|
|
1203
1206
|
cwd?: string;
|
|
1204
1207
|
config?: string | null;
|
|
1208
|
+
env?: readonly RunEnvSetting[];
|
|
1205
1209
|
}, locations: readonly string[], excluded?: readonly string[]): string | null;
|
|
1206
1210
|
/**
|
|
1207
1211
|
* The sentence that names a cause repeating among a running suite's failures, mid-run.
|
|
@@ -1248,6 +1252,7 @@ export declare function repeatingFailureNote(found: RepeatingFailure, o: {
|
|
|
1248
1252
|
run?: {
|
|
1249
1253
|
command: string;
|
|
1250
1254
|
cwd?: string;
|
|
1255
|
+
env?: readonly RunEnvSetting[];
|
|
1251
1256
|
};
|
|
1252
1257
|
editsInvalidateRun?: boolean;
|
|
1253
1258
|
}): string;
|
package/dist/utilities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,EACL,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
|
package/dist/utilities.js
CHANGED
|
@@ -2980,8 +2980,8 @@ function noBaseUrlConfigNote(causes, run, excluded) {
|
|
|
2980
2980
|
* @param log - The finished run's output.
|
|
2981
2981
|
* @param excluded - The test titles the request carves out, if the caller knows them.
|
|
2982
2982
|
* @param run - How the run was started, when the caller knows it: the narrowed re-run is built
|
|
2983
|
-
* from `command`/`cwd`/`config`, and `log` (the path the output was written to) is what
|
|
2984
|
-
* "left out" sentence greps when more causes exist than the result has room for.
|
|
2983
|
+
* from `command`/`cwd`/`config`/`env`, and `log` (the path the output was written to) is what
|
|
2984
|
+
* the "left out" sentence greps when more causes exist than the result has room for.
|
|
2985
2985
|
* @returns The note, or null.
|
|
2986
2986
|
*/
|
|
2987
2987
|
export function failureCausesNote(log, excluded = [], run, pageErrors = []) {
|
|
@@ -3181,7 +3181,9 @@ function omittedCausesRecap(omitted, run, excluded) {
|
|
|
3181
3181
|
* refused while the run walks ({@link suiteRunInTheWay}).
|
|
3182
3182
|
*
|
|
3183
3183
|
* @param run - The run in flight: the command it was started with, as it was run, the directory
|
|
3184
|
-
* that command ran in,
|
|
3184
|
+
* that command ran in, the config it loaded when the caller knows it, and the settings the
|
|
3185
|
+
* request required and the run left out (`env`) — the re-run carries them, so it never
|
|
3186
|
+
* reproduces the configuration the run was measured under by mistake (m182).
|
|
3185
3187
|
* @param locations - The failing `file:line`s to re-run, as the run's log printed them.
|
|
3186
3188
|
* @param excluded - The test titles the request carves out: the re-run inverts them out
|
|
3187
3189
|
* (`--grep-invert`) so it cannot report them again.
|
|
@@ -3193,7 +3195,7 @@ export function rerunOfRunningSuite(run, locations, excluded = []) {
|
|
|
3193
3195
|
// The run's own directory is the base a relative failure location resolves against: the
|
|
3194
3196
|
// reporter prints it from where the runner started, and Playwright matches file arguments
|
|
3195
3197
|
// against absolute paths (xr-molecule-flash-m118 +16:34, m124 +18:38).
|
|
3196
|
-
const scoped = scopedRerunCommand(run.command, locations, excluded, run.config, run.cwd);
|
|
3198
|
+
const scoped = scopedRerunCommand(run.command, locations, excluded, run.config, run.cwd, run.env ?? []);
|
|
3197
3199
|
if (scoped === run.command)
|
|
3198
3200
|
return null;
|
|
3199
3201
|
if (!run.cwd || commandSegments(withoutHeredocs(run.command)).some((s) => s.program === 'cd'))
|