返回 DeepSeek-Reasonix
stats_filters.ts
根目录 / workers / crash-report / src / stats_filters.ts
1 export type StatsFilters = {
2 surface: "desktop" | "cli";
3 status: string;
4 source: string;
5 version: string;
6 os: string;
7 platform: string;
8 osBuild: string;
9 osRevision: string;
10 distroId: string;
11 distroVersion: string;
12 kernelVersion: string;
13 sessionType: string;
14 arch: string;
15 channel: string;
16 runtimeVersion: string;
17 runtimeEngine: string;
18 failureKind: string;
19 failureReason: string;
20 exitCode: string;
21 recovery: string;
22 gpu: string;
23 newLatest: boolean;
24 regressed: boolean;
25 windowDays: 7 | 30;
26 };
27
28 const limited = (url: URL, name: string, max: number) => (url.searchParams.get(name) ?? "").slice(0, max);
29 const oneOf = (value: string, choices: readonly string[]) => choices.includes(value) ? value : "";
30
31 export function statsFilters(url: URL): StatsFilters {
32 const windowParam = limited(url, "window", 3);
33 const exitCodeParam = limited(url, "exitCode", 16);
34 return {
35 surface: limited(url, "surface", 7) === "cli" ? "cli" : "desktop",
36 status: oneOf(limited(url, "status", 8), ["open", "resolved", "ignored"]),
37 source: limited(url, "source", 32),
38 version: limited(url, "version", 64),
39 os: limited(url, "os", 32),
40 platform: limited(url, "platform", 80),
41 osBuild: limited(url, "osBuild", 7).replace(/[^0-9]/g, ""),
42 osRevision: limited(url, "osRevision", 7).replace(/[^0-9]/g, ""),
43 distroId: limited(url, "distro", 64).replace(/[^a-zA-Z0-9_.-]/g, ""),
44 distroVersion: limited(url, "distroVersion", 64).replace(/[^a-zA-Z0-9_.-]/g, ""),
45 kernelVersion: limited(url, "kernel", 128).replace(/[^a-zA-Z0-9_.+-]/g, ""),
46 sessionType: oneOf(limited(url, "session", 8), ["wayland", "x11", "remote", "unknown"]),
47 arch: limited(url, "arch", 32),
48 channel: limited(url, "channel", 32),
49 runtimeVersion: limited(url, "runtime", 128),
50 runtimeEngine: oneOf(limited(url, "engine", 16), ["webview2", "webkitgtk"]),
51 failureKind: limited(url, "failureKind", 64),
52 failureReason: limited(url, "reason", 64),
53 exitCode: exitCodeParam === "unknown" || /^-?\d+$/.test(exitCodeParam) ? exitCodeParam : "",
54 recovery: limited(url, "recovery", 32),
55 gpu: oneOf(limited(url, "gpu", 16), ["enabled", "disabled", "always", "on_demand", "unknown"]),
56 newLatest: limited(url, "new", 6) === "latest",
57 regressed: limited(url, "regressed", 1) === "1",
58 windowDays: windowParam === "7d" ? 7 : 30,
59 };
60 }
61
61 lines TYPESCRIPT