Files

53 lines
2.1 KiB
TypeScript

/**
* 重新录制身份匹配差分(ID-2):我们侧的 TMDB 请求走本地缓存代理(scratchpad tmdb_proxy.py,上行计数封顶),
* 录下的响应裁剪后写入 tmdb-fixtures.json,逐条结果写入 ours.json 并打印汇总。
*
* TMDB_PROXY=http://127.0.0.1:18731 bun apps/server/test/sources-identity/identity-differential.run.ts
*/
import { writeFileSync } from "node:fs";
import { join } from "node:path";
import {
DATA_DIR,
fixtureKey,
runDifferential,
runPoisoned,
summarize,
tmdbFor,
trimTmdb,
} from "./identity-differential.lib.ts";
const proxy = process.env.TMDB_PROXY ?? "http://127.0.0.1:18731";
const fixtures: Record<string, unknown> = {};
const recording: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> = async (input, init) => {
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
const res = await fetch(url, init);
const body = await res.clone().json();
// 录制时代理离线未命中的详情按 404 记下(回放同样走"取不到详情"分支)
fixtures[fixtureKey(url)] = res.ok ? trimTmdb(body) : { __status: res.status };
return res;
};
const tmdb = tmdbFor(recording, `${proxy}/3`);
const rows = await runDifferential(tmdb);
const poisoned = await runPoisoned(tmdb);
for (const p of poisoned) if (!p.ok) console.log("POISONED FAIL", p.c.title.slice(0, 60), p.status, p.best);
console.log("poisoned", poisoned.filter((p) => p.ok).length, "/", poisoned.length);
const sorted = Object.fromEntries(Object.entries(fixtures).sort(([a], [b]) => a.localeCompare(b)));
writeFileSync(join(DATA_DIR, "tmdb-fixtures.json"), `${JSON.stringify(sorted)}\n`);
writeFileSync(join(DATA_DIR, "ours.json"), `${JSON.stringify({ summary: summarize(rows), rows }, null, 1)}\n`);
for (const r of rows)
if (r.verdict !== "consistent")
console.log(
r.id,
r.verdict,
r.deviation?.kind ?? "",
"| mp",
r.mp,
"| ours",
r.status,
r.best,
r.bestEvidence.join(","),
"|",
r.title.slice(0, 50),
);
console.log(summarize(rows));