import { describe, expect, it } from "vitest"; import {
isAbortError,
isTransientNetworkError,
isTransientSqliteError,
isTransientUnhandledRejectionError,
} from "./unhandled-rejections.js";
describe("isAbortError", () => {
it("returns true for error with name AbortError", () => { const error = new Error("aborted");
error.name = "AbortError";
expect(isAbortError(error)).toBe(true);
});
it('returns true for error with "This operation was aborted" message', () => { const error = new Error("This operation was aborted");
expect(isAbortError(error)).toBe(true);
});
it("returns true for undici-style AbortError", () => { // Node's undici throws errors with this exact message const error = Object.assign(new Error("This operation was aborted"), { name: "AbortError" });
expect(isAbortError(error)).toBe(true);
});
it("returns true for object with AbortError name", () => {
expect(isAbortError({ name: "AbortError", message: "test" })).toBe(true);
});
it("returns false for errors with similar but different messages", () => {
expect(isAbortError(new Error("Operation aborted"))).toBe(false);
expect(isAbortError(new Error("aborted"))).toBe(false);
expect(isAbortError(new Error("Request was aborted"))).toBe(false);
});
it("returns true for wrapped fetch-failed messages from integration clients", () => { const error = new Error("Failed to get gateway information from Discord: fetch failed");
expect(isTransientNetworkError(error)).toBe(true);
});
it("returns true for wrapped Discord upstream-connect parse failures", () => { const error = new Error(
`Failed to get gateway information from Discord: Unexpected token 'u', "upstream connect error or disconnect/reset before headers. reset reason: overflow" is not valid JSON`,
);
expect(isTransientNetworkError(error)).toBe(true);
});
it("returns false for non-network fetch-failed wrappers from tools", () => { const error = new Error("Web fetch failed (404): Not Found");
expect(isTransientNetworkError(error)).toBe(false);
});
it("returns true for TLS/SSL transient message snippets", () => {
expect(isTransientNetworkError(new Error("write EPROTO 00A8B0C9:error"))).toBe(true);
expect(
isTransientNetworkError( new Error("SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER while connecting"),
),
).toBe(true);
expect(isTransientNetworkError(new Error("tlsv1 alert protocol version"))).toBe(true);
});
it("returns false for regular errors without network codes", () => {
expect(isTransientNetworkError(new Error("Something went wrong"))).toBe(false);
expect(isTransientNetworkError(new TypeError("Cannot read property"))).toBe(false);
expect(isTransientNetworkError(new RangeError("Invalid array length"))).toBe(false);
});
it("returns false for non-transient undici codes that only appear in message text", () => { const error = new Error("Request failed with UND_ERR_INVALID_ARG");
expect(isTransientNetworkError(error)).toBe(false);
});
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.