50 lines · 1.4 KB · TypeScript
RawDownload
import * as Cause from "effect/Cause"; const MAX_ERROR_TRACE_NODES = 128; export function findErrorTraceId(error: unknown): string | null {  const seen = new Set<object>();  const pending: Array<unknown> = [error];  let inspectedNodeCount = 0;   while (pending.length > 0 && inspectedNodeCount < MAX_ERROR_TRACE_NODES) {    const current = pending.pop();    inspectedNodeCount += 1;    if (typeof current !== "object" || current === null || seen.has(current)) {      continue;    }    seen.add(current);    const record = current as {      readonly cause?: unknown;      readonly errors?: unknown;      readonly traceId?: unknown;    };    if (typeof record.traceId === "string" && record.traceId.trim().length > 0) {      return record.traceId;    }     if (Array.isArray(record.errors)) {      for (let index = record.errors.length - 1; index >= 0; index -= 1) {        pending.push(record.errors[index]);      }    }    if (Cause.isCause(current)) {      for (let index = current.reasons.length - 1; index >= 0; index -= 1) {        const reason = current.reasons[index];        switch (reason?._tag) {          case "Fail":            pending.push(reason.error);            break;          case "Die":            pending.push(reason.defect);            break;        }      }    }    if ("cause" in record) {      pending.push(record.cause);    }  }   return null;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t