@fairfox/polly 0.88.0 → 0.89.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/dist/cli/polly.js +4 -4
- package/dist/cli/polly.js.map +2 -2
- package/dist/gallery/gallery.css +51 -59
- package/dist/gallery/gallery.js +1155 -1047
- package/dist/src/actions/index.js +5 -78
- package/dist/src/actions/index.js.map +2 -2
- package/dist/src/background/index.js +126 -152
- package/dist/src/background/index.js.map +4 -4
- package/dist/src/background/message-router.js +126 -152
- package/dist/src/background/message-router.js.map +4 -4
- package/dist/src/client/index.js +186 -259
- package/dist/src/client/index.js.map +5 -5
- package/dist/src/elysia/index.js +21 -35
- package/dist/src/elysia/index.js.map +2 -2
- package/dist/src/index.js +218 -246
- package/dist/src/index.js.map +10 -10
- package/dist/src/mesh.js +49 -61
- package/dist/src/mesh.js.map +4 -4
- package/dist/src/peer.js +23 -52
- package/dist/src/peer.js.map +2 -2
- package/dist/src/polly-ui/Button.d.ts +7 -0
- package/dist/src/polly-ui/Collapsible.d.ts +3 -1
- package/dist/src/polly-ui/Layout.d.ts +16 -1
- package/dist/src/polly-ui/index.css +47 -59
- package/dist/src/polly-ui/index.js +112 -124
- package/dist/src/polly-ui/index.js.map +13 -13
- package/dist/src/polly-ui/markdown.js +72 -145
- package/dist/src/polly-ui/markdown.js.map +2 -2
- package/dist/src/polly-ui/styles.css +47 -59
- package/dist/src/polly-ui/theme.css +10 -0
- package/dist/src/shared/adapters/index.js +31 -44
- package/dist/src/shared/adapters/index.js.map +2 -2
- package/dist/src/shared/lib/context-helpers.js +126 -152
- package/dist/src/shared/lib/context-helpers.js.map +4 -4
- package/dist/src/shared/lib/errors.js +1 -74
- package/dist/src/shared/lib/errors.js.map +2 -2
- package/dist/src/shared/lib/guards.js +1 -74
- package/dist/src/shared/lib/guards.js.map +2 -2
- package/dist/src/shared/lib/message-bus.js +126 -152
- package/dist/src/shared/lib/message-bus.js.map +4 -4
- package/dist/src/shared/lib/resource.js +16 -27
- package/dist/src/shared/lib/resource.js.map +5 -5
- package/dist/src/shared/lib/state.js +13 -26
- package/dist/src/shared/lib/state.js.map +2 -2
- package/dist/src/shared/lib/test-helpers.js +1 -74
- package/dist/src/shared/lib/test-helpers.js.map +2 -2
- package/dist/src/shared/state/app-state.js +35 -46
- package/dist/src/shared/state/app-state.js.map +5 -5
- package/dist/src/shared/types/messages.js +1 -74
- package/dist/src/shared/types/messages.js.map +2 -2
- package/dist/tools/bdd/src/cli.js +11 -15
- package/dist/tools/bdd/src/cli.js.map +2 -2
- package/dist/tools/bdd/src/index.js +11 -19
- package/dist/tools/bdd/src/index.js.map +2 -2
- package/dist/tools/gallery/src/cli.js +1 -18
- package/dist/tools/gallery/src/cli.js.map +2 -2
- package/dist/tools/init/src/cli.js +1 -18
- package/dist/tools/init/src/cli.js.map +2 -2
- package/dist/tools/mutate/src/cli.js +8 -25
- package/dist/tools/mutate/src/cli.js.map +2 -2
- package/dist/tools/mutate/src/index.js +8 -26
- package/dist/tools/mutate/src/index.js.map +2 -2
- package/dist/tools/quality/src/cli.js +39 -46
- package/dist/tools/quality/src/cli.js.map +3 -3
- package/dist/tools/quality/src/css/check-layout.d.ts +5 -3
- package/dist/tools/quality/src/index.js +39 -47
- package/dist/tools/quality/src/index.js.map +3 -3
- package/dist/tools/test/src/adapters/index.js +4 -77
- package/dist/tools/test/src/adapters/index.js.map +2 -2
- package/dist/tools/test/src/browser/index.js +1 -74
- package/dist/tools/test/src/browser/index.js.map +2 -2
- package/dist/tools/test/src/browser/run.js +5 -22
- package/dist/tools/test/src/browser/run.js.map +2 -2
- package/dist/tools/test/src/contrast/index.js +1 -74
- package/dist/tools/test/src/contrast/index.js.map +2 -2
- package/dist/tools/test/src/coverage-policy/cli.js +13 -25
- package/dist/tools/test/src/coverage-policy/cli.js.map +2 -2
- package/dist/tools/test/src/coverage-policy/index.js +11 -23
- package/dist/tools/test/src/coverage-policy/index.js.map +2 -2
- package/dist/tools/test/src/e2e-mesh/index.js +18 -43
- package/dist/tools/test/src/e2e-mesh/index.js.map +2 -2
- package/dist/tools/test/src/e2e-relay/index.js +615 -623
- package/dist/tools/test/src/e2e-relay/index.js.map +2 -2
- package/dist/tools/test/src/index.js +30 -103
- package/dist/tools/test/src/index.js.map +5 -5
- package/dist/tools/test/src/test-utils.js +1 -74
- package/dist/tools/test/src/test-utils.js.map +2 -2
- package/dist/tools/test/src/tiers/cli.js +1 -18
- package/dist/tools/test/src/tiers/cli.js.map +2 -2
- package/dist/tools/test/src/tiers/worker.js +11 -15
- package/dist/tools/test/src/tiers/worker.js.map +2 -2
- package/dist/tools/test/src/visual/index.js +1112 -1134
- package/dist/tools/test/src/visual/index.js.map +3 -3
- package/dist/tools/verify/src/cli.js +103 -169
- package/dist/tools/verify/src/cli.js.map +2 -2
- package/dist/tools/verify/src/config.js +1 -74
- package/dist/tools/verify/src/config.js.map +2 -2
- package/dist/tools/verify/src/stryker/index.js +1 -19
- package/dist/tools/verify/src/stryker/index.js.map +2 -2
- package/dist/tools/visualize/src/cli.js +69 -85
- package/dist/tools/visualize/src/cli.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __returnValue = (v) => v;
|
|
4
|
-
function __exportSetter(name, newValue) {
|
|
5
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
-
}
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, {
|
|
10
|
-
get: all[name],
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
18
|
-
|
|
19
1
|
// tools/mutate/src/decisions.ts
|
|
20
2
|
import { createHash } from "node:crypto";
|
|
21
3
|
|
|
@@ -398,8 +380,8 @@ THEATRE (Survived — code is covered but no test detects the mutation: ${theat
|
|
|
398
380
|
if (false) {}
|
|
399
381
|
// tools/mutate/src/verify-matrix.ts
|
|
400
382
|
var DEFAULT_REPORT = "reports/mutation/mutation.json";
|
|
401
|
-
function isMatrixComplete(
|
|
402
|
-
const mutants = Object.values(
|
|
383
|
+
function isMatrixComplete(report) {
|
|
384
|
+
const mutants = Object.values(report.files).flatMap((f) => f.mutants);
|
|
403
385
|
if (mutants.length === 0)
|
|
404
386
|
return false;
|
|
405
387
|
const killed = mutants.filter((m) => m.status === "Killed");
|
|
@@ -436,15 +418,15 @@ async function verifyMatrix(opts = {}) {
|
|
|
436
418
|
]
|
|
437
419
|
};
|
|
438
420
|
}
|
|
439
|
-
const
|
|
421
|
+
const report = await loadMutationReport(reportPath);
|
|
440
422
|
const checks = [];
|
|
441
423
|
const add = (name, ok, detail) => checks.push({ name, ok, detail });
|
|
442
|
-
add("schema version present", !!
|
|
443
|
-
const tfKeys = Object.keys(
|
|
424
|
+
add("schema version present", !!report.schemaVersion, `schemaVersion=${report.schemaVersion}`);
|
|
425
|
+
const tfKeys = Object.keys(report.testFiles ?? {});
|
|
444
426
|
const realPaths = tfKeys.filter((k) => k && k !== "(unknown)");
|
|
445
427
|
add("testFiles keyed by real paths", realPaths.length > 0 && !tfKeys.includes(""), `${realPaths.length} file(s): ${realPaths.slice(0, 2).join(", ")}${realPaths.length > 2 ? "…" : ""}`);
|
|
446
|
-
const testIds = new Set(Object.values(
|
|
447
|
-
const mutants = Object.values(
|
|
428
|
+
const testIds = new Set(Object.values(report.testFiles ?? {}).flatMap((tf) => tf.tests.map((t) => t.id)));
|
|
429
|
+
const mutants = Object.values(report.files).flatMap((f) => f.mutants);
|
|
448
430
|
const killed = mutants.filter((m) => m.status === "Killed");
|
|
449
431
|
const danglingKb = killed.filter((m) => (m.killedBy ?? []).some((id) => !testIds.has(id)));
|
|
450
432
|
add("every killedBy id resolves to a test", danglingKb.length === 0, `${danglingKb.length} dangling`);
|
|
@@ -468,4 +450,4 @@ export {
|
|
|
468
450
|
verifyMatrix
|
|
469
451
|
};
|
|
470
452
|
|
|
471
|
-
//# debugId=
|
|
453
|
+
//# debugId=291E526C901D8E7564756E2164756E21
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"/**\n * Test-debt report: derive the three signals from the kill matrix.\n *\n * gaps survived mutants — code no test pins (the Stryker direction)\n * redundancy tests/files whose every kill is also caught elsewhere\n * theatre covered-but-survived — code a test runs but no test detects\n * (the Survived status under coverageAnalysis \"all\")\n *\n * Redundancy is reported at BOTH file and case level. Decisions are keyed at\n * file level (stable identity); case level is the drill-down.\n */\nimport type { Database } from \"bun:sqlite\";\nimport { buildDb, loadMutationReport, queryAll, queryGet } from \"./ingest.ts\";\n\ntype SubsumedCase = { file: string; name: string; total: number };\ntype LineCount = { line: number; mutator: string; n: number };\n\n/** Greedy set cover: smallest set of `units` whose kill-sets cover all killed mutants. */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: a textbook greedy set-cover loop — clearer whole than split.\nfunction greedyCover(units: Map<string, Set<string>>, universe: Set<string>): string[] {\n const remaining = new Set(universe);\n const chosen: string[] = [];\n const pool = new Map([...units].map(([k, v]) => [k, new Set(v)]));\n while (remaining.size > 0) {\n let best: string | null = null;\n let bestGain = 0;\n for (const [unit, set] of pool) {\n let gain = 0;\n for (const m of set) if (remaining.has(m)) gain++;\n if (gain > bestGain) {\n bestGain = gain;\n best = unit;\n }\n }\n if (best === null || bestGain === 0) break; // remaining mutants killed by nobody (shouldn't happen for killed set)\n chosen.push(best);\n for (const m of pool.get(best) ?? []) remaining.delete(m);\n pool.delete(best);\n }\n return chosen;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: one report builder emitting all sections in order — splitting would scatter the shared db/out.\nexport function report(db: Database, opts: { matrixComplete?: boolean } = {}): string {\n // Defaults to true so `report(db)` is byte-identical to before (the parity\n // guard depends on this). When false — the kill matrix is partial (an\n // unpatched/bail runner) — the redundancy/subsumption sections would lie, so\n // they are suppressed and a warning shown; score/gaps/theatre still hold.\n const matrixComplete = opts.matrixComplete ?? true;\n const out: string[] = [];\n const p = (s = \"\") => out.push(s);\n\n // --- summary ---\n const tot = queryGet<{\n n: number;\n killed: number;\n survived: number;\n timeout: number;\n nocov: number;\n }>(\n db,\n \"SELECT count(*) n, sum(status='Killed') killed, sum(status='Survived') survived, sum(status='Timeout') timeout, sum(status='NoCoverage') nocov FROM mutants\"\n ) ?? { n: 0, killed: 0, survived: 0, timeout: 0, nocov: 0 };\n const nTests = queryGet<{ n: number }>(db, \"SELECT count(*) n FROM tests\")?.n ?? 0;\n const detected = tot.killed + tot.timeout;\n const score = ((detected / (tot.n - tot.nocov || 1)) * 100).toFixed(1);\n p(\n `MUTATION score ${score}% ${tot.killed} killed · ${tot.timeout} timeout · ${tot.survived} survived · ${tot.nocov} no-coverage (${tot.n} mutants, ${nTests} tests)`\n );\n\n if (matrixComplete) {\n // --- kill-multiplicity: how much slack is in the matrix ---\n const mult = queryAll<{ bucket: string; n: number }>(\n db,\n `\n\t\t\tSELECT CASE WHEN c=1 THEN '1' WHEN c=2 THEN '2' WHEN c BETWEEN 3 AND 5 THEN '3-5' ELSE '6+' END bucket, count(*) n\n\t\t\tFROM (SELECT mutant_id, count(*) c FROM kills GROUP BY mutant_id)\n\t\t\tGROUP BY bucket ORDER BY min(c)`\n );\n p(`\\nKILL MULTIPLICITY (killers per killed mutant — higher = more redundancy slack)`);\n for (const r of mult) p(` killed by ${String(r.bucket).padStart(3)} test(s): ${r.n}`);\n\n // --- redundancy ratio via greedy cover (case + file) ---\n const universe = new Set(\n queryAll<{ mutant_id: string }>(db, \"SELECT DISTINCT mutant_id FROM kills\").map(\n (r) => r.mutant_id\n )\n );\n const byTest = new Map<string, Set<string>>();\n for (const r of queryAll<{ test_id: string; mutant_id: string }>(\n db,\n \"SELECT test_id, mutant_id FROM kills\"\n )) {\n const set = byTest.get(r.test_id) ?? new Set<string>();\n byTest.set(r.test_id, set);\n set.add(r.mutant_id);\n }\n const byFile = new Map<string, Set<string>>();\n for (const r of queryAll<{ file: string; mid: string }>(\n db,\n \"SELECT t.file file, k.mutant_id mid FROM kills k JOIN tests t ON t.id=k.test_id\"\n )) {\n const set = byFile.get(r.file) ?? new Set<string>();\n byFile.set(r.file, set);\n set.add(r.mid);\n }\n const caseCover = greedyCover(byTest, universe);\n const fileCover = greedyCover(byFile, universe);\n p(`\\nREDUNDANCY RATIO (tests that kill something ÷ minimal covering set)`);\n p(\n ` case level: ${byTest.size} killing tests → ${caseCover.length} needed (${(byTest.size / Math.max(1, caseCover.length)).toFixed(2)}×, ~${byTest.size - caseCover.length} prunable)`\n );\n p(\n ` file level: ${byFile.size} killing files → ${fileCover.length} needed (${(byFile.size / Math.max(1, fileCover.length)).toFixed(2)}×, ~${byFile.size - fileCover.length} prunable)`\n );\n\n // --- fully subsumed FILES (every mutant they kill is killed elsewhere too) ---\n const subsumedFiles = queryAll<{ file: string; kills: number }>(\n db,\n `\n\t\t\tWITH file_kill AS (SELECT DISTINCT t.file file, k.mutant_id mid FROM kills k JOIN tests t ON t.id=k.test_id),\n\t\t\t owner AS (SELECT mid, count(DISTINCT file) nf, min(file) only_file FROM file_kill GROUP BY mid)\n\t\t\tSELECT fk.file, count(DISTINCT fk.mid) kills,\n\t\t\t sum(CASE WHEN o.nf=1 THEN 1 ELSE 0 END) unique_kills\n\t\t\tFROM file_kill fk JOIN owner o ON o.mid=fk.mid\n\t\t\tGROUP BY fk.file HAVING unique_kills=0 ORDER BY kills DESC`\n );\n p(`\\nSUBSUMED FILES (file-level identity — safe-to-review deletion candidates)`);\n if (subsumedFiles.length === 0)\n p(` none — every test file kills at least one mutant no other file catches`);\n for (const r of subsumedFiles) p(` ${r.file} (${r.kills} kills, 0 unique)`);\n\n // --- fully subsumed CASES (drill-down) ---\n const subsumedCases = queryAll<SubsumedCase>(\n db,\n `\n\t\t\tWITH mk AS (SELECT mutant_id, count(*) c FROM kills GROUP BY mutant_id),\n\t\t\t tk AS (SELECT test_id, count(*) total, sum(CASE WHEN mk.c=1 THEN 1 ELSE 0 END) uniq\n\t\t\t FROM kills JOIN mk USING(mutant_id) GROUP BY test_id)\n\t\t\tSELECT t.file, t.name, tk.total FROM tk JOIN tests t ON t.id=tk.test_id\n\t\t\tWHERE tk.total>0 AND tk.uniq=0 ORDER BY t.file, tk.total DESC`\n );\n const byFileCases = new Map<string, SubsumedCase[]>();\n for (const r of subsumedCases) {\n const rows = byFileCases.get(r.file) ?? [];\n byFileCases.set(r.file, rows);\n rows.push(r);\n }\n p(\n `\\nSUBSUMED CASES (${subsumedCases.length} individual tests whose every kill is caught elsewhere)`\n );\n for (const [file, rows] of byFileCases) {\n p(` ${file}`);\n for (const r of rows) p(` “${r.name}” (${r.total} kills, 0 unique)`);\n }\n } else {\n p(`\\n⚠ KILL MATRIX INCOMPLETE — redundancy/subsumption analysis suppressed.`);\n p(` Every mutant has at most one recorded killer, so \"which tests are redundant\"`);\n p(` cannot be derived. This needs the no-bail patched Bun runner (not shipped with`);\n p(\n ` @fairfox/polly). Run 'polly mutate verify' to diagnose. Score/gaps/theatre below still hold.`\n );\n }\n\n // Under coverageAnalysis \"all\", Stryker classifies a non-killed mutant as\n // NoCoverage (no test runs it — a true gap) or Survived (a test runs it but\n // nothing detects the mutation — theatre). That status split IS the\n // gap/theatre distinction; it requires coverage to be on (see README).\n const srcFile = queryGet<{ file: string }>(db, \"SELECT file FROM mutants LIMIT 1\")?.file;\n\n // --- gaps: code no test even executes ---\n const gaps = queryAll<LineCount>(\n db,\n \"SELECT line, mutator, count(*) n FROM mutants WHERE status='NoCoverage' GROUP BY line, mutator ORDER BY line\"\n );\n const gapTotal = gaps.reduce((a, r) => a + r.n, 0);\n p(`\\nGAPS (NoCoverage — no test executes this code: ${gapTotal})`);\n if (gapTotal === 0) p(` none — every mutable location is reached by some test`);\n for (const r of gaps) p(` ${srcFile}:${r.line} ${r.mutator}${r.n > 1 ? ` ×${r.n}` : \"\"}`);\n\n // --- theatre: covered but survived ---\n const theatre = queryAll<LineCount>(\n db,\n \"SELECT line, mutator, count(*) n FROM mutants WHERE status='Survived' GROUP BY line, mutator ORDER BY line\"\n );\n const theatreTotal = theatre.reduce((a, r) => a + r.n, 0);\n p(`\\nTHEATRE (Survived — code is covered but no test detects the mutation: ${theatreTotal})`);\n if (theatreTotal === 0) p(` none`);\n for (const r of theatre) p(` ${srcFile}:${r.line} ${r.mutator}${r.n > 1 ? ` ×${r.n}` : \"\"}`);\n\n return out.join(\"\\n\");\n}\n\nif (import.meta.main) {\n const reportPath = process.argv[2] ?? \"reports/mutation/mutation.json\";\n const db = buildDb(await loadMutationReport(reportPath), \"reports/test-debt.sqlite\");\n console.log(report(db));\n db.close();\n}\n",
|
|
9
9
|
"/**\n * Verification artefact for the kill-matrix contract.\n *\n * The whole useless-test analysis rests on one fact: the patched bun runner\n * emits a COMPLETE kill matrix — every test that detects a mutant appears in\n * killedBy, not just the first. That depends on a pinned pair: (Bun version,\n * plugin version + our patch). A Bun upgrade that changes JUnit output, or a\n * patch that stops applying, would silently collapse killedBy to one id each —\n * a green board with the redundancy signal quietly dead (the classic trap).\n *\n * `verifyMatrix` runs the full contract and returns the result; `isMatrixComplete`\n * is the side-effect-free gate the report path consults to decide whether the\n * redundancy/subsumption sections are trustworthy. Run the CLI form after any\n * bump of Bun or the plugin:\n *\n * polly mutate verify # uses the existing report\n * polly mutate verify --run # runs stryker first\n */\nimport { loadMutationReport, type MutationReport } from \"./ingest.ts\";\n\nconst DEFAULT_REPORT = \"reports/mutation/mutation.json\";\n\nexport interface MatrixCheck {\n ok: boolean;\n checks: { name: string; ok: boolean; detail: string }[];\n}\n\n/**\n * Side-effect-free gate: is the kill matrix trustworthy for redundancy /\n * subsumption analysis? True only when\n * (a) some killed mutant has >1 killer — proof the no-bail patched runner\n * recorded EVERY killer, not just the first (verifyMatrix check #4), and\n * (b) coverage was collected — not every mutant is NoCoverage, which would\n * mean the coverage dump broke (verifyMatrix check #5).\n * Without both, REDUNDANCY/SUBSUMED would be computed off a partial matrix and\n * lie, so the report path falls back to score + gaps + theatre only.\n */\nexport function isMatrixComplete(report: MutationReport): boolean {\n const mutants = Object.values(report.files).flatMap((f) => f.mutants);\n if (mutants.length === 0) return false;\n const killed = mutants.filter((m) => m.status === \"Killed\");\n const multiKiller = killed.some((m) => (m.killedBy ?? []).length > 1);\n const noCov = mutants.filter((m) => m.status === \"NoCoverage\").length;\n const coverageCollected = noCov < mutants.length;\n return multiKiller && coverageCollected;\n}\n\n/**\n * Run the full kill-matrix contract (all five checks), optionally running a\n * fresh Stryker pass first. Returns the result rather than exiting, so callers\n * decide what to do with it; the `import.meta.main` wrapper prints and sets the\n * exit code.\n */\nexport async function verifyMatrix(\n opts: { reportPath?: string; run?: boolean; strykerConfig?: string } = {}\n): Promise<MatrixCheck> {\n const reportPath = opts.reportPath ?? DEFAULT_REPORT;\n\n if (opts.run) {\n console.log(\"Running mutation pass (this can take many minutes for a large mutate set)...\");\n const cmd = [\n \"bunx\",\n \"stryker\",\n \"run\",\n ...(opts.strykerConfig ? [\"--configFile\", opts.strykerConfig] : []),\n ];\n const proc = Bun.spawn(cmd, { stdout: \"inherit\", stderr: \"inherit\" });\n const code = await proc.exited;\n if (code !== 0) {\n return { ok: false, checks: [{ name: \"stryker run\", ok: false, detail: `exited ${code}` }] };\n }\n }\n\n if (!(await Bun.file(reportPath).exists())) {\n return {\n ok: false,\n checks: [\n {\n name: \"report exists\",\n ok: false,\n detail: `no report at ${reportPath}. Run with --run, or 'bun run mutation' first.`,\n },\n ],\n };\n }\n\n const report = await loadMutationReport(reportPath);\n const checks: { name: string; ok: boolean; detail: string }[] = [];\n const add = (name: string, ok: boolean, detail: string) => checks.push({ name, ok, detail });\n\n // 1. schema present\n add(\"schema version present\", !!report.schemaVersion, `schemaVersion=${report.schemaVersion}`);\n\n // 2. testFiles keyed by real paths, not the \"\" bucket (file-level identity intact)\n const tfKeys = Object.keys(report.testFiles ?? {});\n const realPaths = tfKeys.filter((k) => k && k !== \"(unknown)\");\n add(\n \"testFiles keyed by real paths\",\n realPaths.length > 0 && !tfKeys.includes(\"\"),\n `${realPaths.length} file(s): ${realPaths.slice(0, 2).join(\", \")}${realPaths.length > 2 ? \"…\" : \"\"}`\n );\n\n // 3. test ids resolve\n const testIds = new Set(\n Object.values(report.testFiles ?? {}).flatMap((tf) => tf.tests.map((t) => t.id))\n );\n const mutants = Object.values(report.files).flatMap((f) => f.mutants);\n const killed = mutants.filter((m) => m.status === \"Killed\");\n const danglingKb = killed.filter((m) => (m.killedBy ?? []).some((id) => !testIds.has(id)));\n add(\n \"every killedBy id resolves to a test\",\n danglingKb.length === 0,\n `${danglingKb.length} dangling`\n );\n\n // 4. THE contract: a complete matrix means some killed mutant has >1 killer.\n // If bail silently re-engaged, every killedBy would have length 1.\n const withKb = killed.filter((m) => (m.killedBy ?? []).length > 0);\n const multi = killed.filter((m) => (m.killedBy ?? []).length > 1);\n add(\n \"killed mutants carry killedBy\",\n killed.length > 0 && withKb.length === killed.length,\n `${withKb.length}/${killed.length}`\n );\n add(\n \"matrix is complete (no-bail): >1 killer exists\",\n multi.length > 0,\n `${multi.length} mutant(s) killed by >1 test — collapses to 0 if bail re-engages`\n );\n\n // 5. coverage extraction works: if the afterAll dump fails, the coverage map is\n // empty and Stryker marks EVERY mutant NoCoverage (theatre/gap split dies).\n const noCov = mutants.filter((m) => m.status === \"NoCoverage\").length;\n add(\n \"coverage collected (not all NoCoverage)\",\n noCov < mutants.length,\n `${noCov}/${mutants.length} NoCoverage — all-NoCoverage means the coverage dump broke`\n );\n\n return { ok: checks.every((c) => c.ok), checks };\n}\n\nif (import.meta.main) {\n const result = await verifyMatrix({ run: process.argv.includes(\"--run\") });\n console.log(\"\\nKill-matrix contract:\");\n for (const c of result.checks) {\n console.log(` ${c.ok ? \"✓\" : \"✗\"} ${c.name} (${c.detail})`);\n }\n if (!result.ok) {\n console.log(\n \"\\n✗ Contract broken. The pinned pair has drifted — re-check Bun version and that the patch applies (bun install).\"\n );\n process.exit(1);\n }\n console.log(\"\\n✓ Kill-matrix contract holds.\");\n}\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "291E526C901D8E7564756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
|
@@ -1,21 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __returnValue = (v) => v;
|
|
5
|
-
function __exportSetter(name, newValue) {
|
|
6
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
7
|
-
}
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, {
|
|
11
|
-
get: all[name],
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
set: __exportSetter.bind(all, name)
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
18
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
2
|
|
|
20
3
|
// tools/quality/src/check-shared-components.ts
|
|
21
4
|
import { readdir } from "node:fs/promises";
|
|
@@ -250,10 +233,15 @@ function isInsideKeyframes(lineNum, allLines) {
|
|
|
250
233
|
|
|
251
234
|
// tools/quality/src/css/check-layout.ts
|
|
252
235
|
var CSS_PATTERNS = [
|
|
236
|
+
{ pattern: /display\s*:\s*inline-flex/, kind: "display: inline-flex in CSS" },
|
|
253
237
|
{ pattern: /display\s*:\s*flex/, kind: "display: flex in CSS" },
|
|
254
238
|
{ pattern: /display\s*:\s*grid/, kind: "display: grid in CSS" }
|
|
255
239
|
];
|
|
256
240
|
var TSX_PATTERNS = [
|
|
241
|
+
{
|
|
242
|
+
pattern: /display\s*:\s*['"]inline-flex['"]/,
|
|
243
|
+
kind: "display: inline-flex in inline style"
|
|
244
|
+
},
|
|
257
245
|
{
|
|
258
246
|
pattern: /display\s*:\s*['"]flex['"]/,
|
|
259
247
|
kind: "display: flex in inline style"
|
|
@@ -266,7 +254,12 @@ var TSX_PATTERNS = [
|
|
|
266
254
|
var SUPPRESS = "layout-ignore";
|
|
267
255
|
async function checkCssLayout(options) {
|
|
268
256
|
const rootDir = options.rootDir;
|
|
269
|
-
const exempt = options.layoutExemptPaths ?? [
|
|
257
|
+
const exempt = options.layoutExemptPaths ?? [
|
|
258
|
+
"Layout.module.css",
|
|
259
|
+
"Layout.tsx",
|
|
260
|
+
"Cluster.module.css",
|
|
261
|
+
"Cluster.tsx"
|
|
262
|
+
];
|
|
270
263
|
const violations = [];
|
|
271
264
|
await walkDirectory(rootDir, async (full) => {
|
|
272
265
|
const isCss = full.endsWith(".module.css");
|
|
@@ -775,16 +768,16 @@ function suggestFix(line) {
|
|
|
775
768
|
}
|
|
776
769
|
return;
|
|
777
770
|
}
|
|
778
|
-
function isFileExcluded(
|
|
779
|
-
const segments =
|
|
771
|
+
function isFileExcluded(relative, excludeDirs, excludePackages, excludeFiles) {
|
|
772
|
+
const segments = relative.split("/");
|
|
780
773
|
if (segments.some((s) => excludeDirs.has(s)))
|
|
781
774
|
return true;
|
|
782
775
|
if (excludePackages.size > 0 && segments.some((s) => excludePackages.has(s)))
|
|
783
776
|
return true;
|
|
784
777
|
const basename = segments[segments.length - 1] ?? "";
|
|
785
|
-
return excludeFiles.has(basename) || excludeFiles.has(
|
|
778
|
+
return excludeFiles.has(basename) || excludeFiles.has(relative);
|
|
786
779
|
}
|
|
787
|
-
function findViolations(
|
|
780
|
+
function findViolations(relative, content) {
|
|
788
781
|
const results = [];
|
|
789
782
|
const lines = content.split(`
|
|
790
783
|
`);
|
|
@@ -799,7 +792,7 @@ function findViolations(relative3, content) {
|
|
|
799
792
|
continue;
|
|
800
793
|
if (!isLineClean(line)) {
|
|
801
794
|
results.push({
|
|
802
|
-
file:
|
|
795
|
+
file: relative,
|
|
803
796
|
line: i + 1,
|
|
804
797
|
content: line.trim(),
|
|
805
798
|
advice: suggestFix(line.trim())
|
|
@@ -834,11 +827,11 @@ async function checkNoAsCasting(options) {
|
|
|
834
827
|
const glob = new Glob(pattern);
|
|
835
828
|
const violations = [];
|
|
836
829
|
for await (const file of glob.scan({ cwd: rootDir, absolute: true })) {
|
|
837
|
-
const
|
|
838
|
-
if (isFileExcluded(
|
|
830
|
+
const relative = file.replace(`${rootDir}/`, "");
|
|
831
|
+
if (isFileExcluded(relative, excludeDirs, excludePackages, excludeFiles))
|
|
839
832
|
continue;
|
|
840
833
|
const content = readFileSync(file, "utf-8");
|
|
841
|
-
violations.push(...findViolations(
|
|
834
|
+
violations.push(...findViolations(relative, content));
|
|
842
835
|
}
|
|
843
836
|
return { violations, print: () => printViolations(violations) };
|
|
844
837
|
}
|
|
@@ -908,10 +901,10 @@ function scanText(content, filePath = "<text>") {
|
|
|
908
901
|
}
|
|
909
902
|
return violations;
|
|
910
903
|
}
|
|
911
|
-
function isExcluded(
|
|
912
|
-
if (
|
|
904
|
+
function isExcluded(relative, excludeDirs, excludeFiles) {
|
|
905
|
+
if (relative.split("/").some((s) => excludeDirs.has(s)))
|
|
913
906
|
return true;
|
|
914
|
-
const normalized =
|
|
907
|
+
const normalized = relative.replace(/\\/g, "/");
|
|
915
908
|
return excludeFiles.some((suffix) => normalized.endsWith(suffix));
|
|
916
909
|
}
|
|
917
910
|
function printViolations2(violations) {
|
|
@@ -935,10 +928,10 @@ async function checkNoFixedWaits(options) {
|
|
|
935
928
|
const glob = new Glob2(options.filePatterns ?? "**/*.{ts,tsx}");
|
|
936
929
|
const violations = [];
|
|
937
930
|
for await (const file of glob.scan({ cwd: rootDir, absolute: true })) {
|
|
938
|
-
const
|
|
939
|
-
if (isExcluded(
|
|
931
|
+
const relative = file.replace(`${rootDir}/`, "");
|
|
932
|
+
if (isExcluded(relative, excludeDirs, excludeFiles))
|
|
940
933
|
continue;
|
|
941
|
-
violations.push(...scanText(readFileSync2(file, "utf-8"),
|
|
934
|
+
violations.push(...scanText(readFileSync2(file, "utf-8"), relative));
|
|
942
935
|
}
|
|
943
936
|
return { violations, print: () => printViolations2(violations) };
|
|
944
937
|
}
|
|
@@ -973,7 +966,7 @@ function isLineRequireClean(line) {
|
|
|
973
966
|
}
|
|
974
967
|
return false;
|
|
975
968
|
}
|
|
976
|
-
function findRequireViolations(
|
|
969
|
+
function findRequireViolations(relative, content) {
|
|
977
970
|
const results = [];
|
|
978
971
|
const lines = content.split(`
|
|
979
972
|
`);
|
|
@@ -989,7 +982,7 @@ function findRequireViolations(relative3, content) {
|
|
|
989
982
|
continue;
|
|
990
983
|
}
|
|
991
984
|
if (!isLineRequireClean(line)) {
|
|
992
|
-
results.push({ file:
|
|
985
|
+
results.push({ file: relative, line: i + 1, content: line.trim() });
|
|
993
986
|
}
|
|
994
987
|
}
|
|
995
988
|
return results;
|
|
@@ -1015,13 +1008,13 @@ async function checkNoRequire(options) {
|
|
|
1015
1008
|
const glob = new Glob3(pattern);
|
|
1016
1009
|
const violations = [];
|
|
1017
1010
|
for await (const file of glob.scan({ cwd: rootDir, absolute: true })) {
|
|
1018
|
-
const
|
|
1019
|
-
const segments =
|
|
1011
|
+
const relative = file.replace(`${rootDir}/`, "");
|
|
1012
|
+
const segments = relative.split("/");
|
|
1020
1013
|
if (segments.some((s) => excludeDirs.has(s))) {
|
|
1021
1014
|
continue;
|
|
1022
1015
|
}
|
|
1023
1016
|
const content = readFileSync3(file, "utf-8");
|
|
1024
|
-
violations.push(...findRequireViolations(
|
|
1017
|
+
violations.push(...findRequireViolations(relative, content));
|
|
1025
1018
|
}
|
|
1026
1019
|
return {
|
|
1027
1020
|
violations,
|
|
@@ -1104,19 +1097,19 @@ function splitTopLevelArgs(args) {
|
|
|
1104
1097
|
parts.push(args.slice(start));
|
|
1105
1098
|
return parts.map((p) => p.trim());
|
|
1106
1099
|
}
|
|
1107
|
-
function isFileExcluded2(
|
|
1108
|
-
const segments =
|
|
1100
|
+
function isFileExcluded2(relative, excludeDirs, excludeFiles) {
|
|
1101
|
+
const segments = relative.split("/");
|
|
1109
1102
|
if (segments.some((s) => excludeDirs.has(s)))
|
|
1110
1103
|
return true;
|
|
1111
1104
|
const basename = segments[segments.length - 1] ?? "";
|
|
1112
|
-
return excludeFiles.has(basename) || excludeFiles.has(
|
|
1105
|
+
return excludeFiles.has(basename) || excludeFiles.has(relative);
|
|
1113
1106
|
}
|
|
1114
1107
|
function isNonCall(line, lineBefore) {
|
|
1115
1108
|
const isImport = /\b(import|export)\b/.test(line) && line.includes("{") && !line.includes(";");
|
|
1116
1109
|
const isFrom = /\b(import|export)\b.*\bfrom\b/.test(line);
|
|
1117
1110
|
return isImport || isFrom || lineBefore.includes("//");
|
|
1118
1111
|
}
|
|
1119
|
-
function findViolations2(
|
|
1112
|
+
function findViolations2(relative, content, callPattern) {
|
|
1120
1113
|
const results = [];
|
|
1121
1114
|
callPattern.lastIndex = 0;
|
|
1122
1115
|
let match = callPattern.exec(content);
|
|
@@ -1139,7 +1132,7 @@ function findViolations2(relative3, content, callPattern) {
|
|
|
1139
1132
|
if (reason === undefined)
|
|
1140
1133
|
continue;
|
|
1141
1134
|
results.push({
|
|
1142
|
-
file:
|
|
1135
|
+
file: relative,
|
|
1143
1136
|
line: content.slice(0, current.index).split(`
|
|
1144
1137
|
`).length,
|
|
1145
1138
|
content: line.trim(),
|
|
@@ -1173,10 +1166,10 @@ async function checkNoTautologyEnsures(options) {
|
|
|
1173
1166
|
const glob = new Glob4(options.filePatterns ?? "**/*.{ts,tsx}");
|
|
1174
1167
|
const violations = [];
|
|
1175
1168
|
for await (const file of glob.scan({ cwd: rootDir, absolute: true })) {
|
|
1176
|
-
const
|
|
1177
|
-
if (isFileExcluded2(
|
|
1169
|
+
const relative = file.replace(`${rootDir}/`, "");
|
|
1170
|
+
if (isFileExcluded2(relative, excludeDirs, excludeFiles))
|
|
1178
1171
|
continue;
|
|
1179
|
-
violations.push(...findViolations2(
|
|
1172
|
+
violations.push(...findViolations2(relative, readFileSync4(file, "utf-8"), callPattern));
|
|
1180
1173
|
}
|
|
1181
1174
|
return { violations, print: () => printViolations3(violations) };
|
|
1182
1175
|
}
|
|
@@ -3340,4 +3333,4 @@ switch (subcommand) {
|
|
|
3340
3333
|
}
|
|
3341
3334
|
process.exit(exitCode);
|
|
3342
3335
|
|
|
3343
|
-
//# debugId=
|
|
3336
|
+
//# debugId=2457D8123B12C85564756E2164756E21
|