
























@@ -11,17 +11,59 @@ export type CiaoProcessErrorClassification =
1111| { kind: "interface-assertion"; formatted: string }
1212| { kind: "netmask-assertion"; formatted: string };
131314-export function classifyCiaoProcessError(reason: unknown): CiaoProcessErrorClassification | null {
15-const formatted = formatBonjourError(reason);
16-const message = formatted.toUpperCase();
17-if (CIAO_CANCELLATION_MESSAGE_RE.test(message)) {
18-return { kind: "cancellation", formatted };
19-}
20-if (CIAO_INTERFACE_ASSERTION_MESSAGE_RE.test(message)) {
21-return { kind: "interface-assertion", formatted };
14+function collectCiaoProcessErrorCandidates(reason: unknown): unknown[] {
15+const queue: unknown[] = [reason];
16+const seen = new Set<unknown>();
17+const candidates: unknown[] = [];
18+19+while (queue.length > 0) {
20+const current = queue.shift();
21+if (current == null || seen.has(current)) {
22+continue;
23+}
24+seen.add(current);
25+candidates.push(current);
26+27+if (!current || typeof current !== "object") {
28+continue;
29+}
30+const record = current as Record<string, unknown>;
31+for (const nested of [
32+record.cause,
33+record.reason,
34+record.original,
35+record.error,
36+record.data,
37+]) {
38+if (nested != null && !seen.has(nested)) {
39+queue.push(nested);
40+}
41+}
42+if (Array.isArray(record.errors)) {
43+for (const nested of record.errors) {
44+if (nested != null && !seen.has(nested)) {
45+queue.push(nested);
46+}
47+}
48+}
2249}
23-if (CIAO_NETMASK_ASSERTION_MESSAGE_RE.test(message)) {
24-return { kind: "netmask-assertion", formatted };
50+51+return candidates;
52+}
53+54+export function classifyCiaoProcessError(reason: unknown): CiaoProcessErrorClassification | null {
55+for (const candidate of collectCiaoProcessErrorCandidates(reason)) {
56+const formatted = formatBonjourError(candidate);
57+const message = formatted.toUpperCase();
58+if (CIAO_CANCELLATION_MESSAGE_RE.test(message)) {
59+return { kind: "cancellation", formatted };
60+}
61+if (CIAO_INTERFACE_ASSERTION_MESSAGE_RE.test(message)) {
62+return { kind: "interface-assertion", formatted };
63+}
64+if (CIAO_NETMASK_ASSERTION_MESSAGE_RE.test(message)) {
65+return { kind: "netmask-assertion", formatted };
66+}
2567}
2668return null;
2769}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。