UNPKG

@sentry/nextjs

Version:
49 lines (46 loc) • 1.89 kB
import { isError } from '@sentry/core'; const MAX_CAUSE_DEPTH = 5; function hasDigest(subject, predicate, depth = 0) { if (!isError(subject)) { return false; } const digest = subject.digest; if (typeof digest === "string" && predicate(digest)) { return true; } if (depth < MAX_CAUSE_DEPTH && "cause" in subject) { return hasDigest(subject.cause, predicate, depth + 1); } return false; } function isNotFoundNavigationError(subject) { return hasDigest(subject, (digest) => ["NEXT_NOT_FOUND", "NEXT_HTTP_ERROR_FALLBACK;404"].includes(digest)); } function getAuthInterruptStatusCode(subject) { if (hasDigest(subject, (digest) => digest === "NEXT_HTTP_ERROR_FALLBACK;403")) { return 403; } if (hasDigest(subject, (digest) => digest === "NEXT_HTTP_ERROR_FALLBACK;401")) { return 401; } return void 0; } function isRedirectNavigationError(subject) { return hasDigest(subject, (digest) => digest.startsWith("NEXT_REDIRECT;")); } const PRERENDER_CONTROL_FLOW_DIGESTS = [ // Next.js hands out promises that never settle (e.g. from `fetch()` under Cache Components) and rejects // them once the prerender is aborted. React discards them - anything else observing them must ignore them. "HANGING_PROMISE_REJECTION", // Thrown to abort a prerender the moment dynamic data is accessed. "NEXT_PRERENDER_INTERRUPTED", // Thrown to bail out of static generation into dynamic rendering. "DYNAMIC_SERVER_USAGE", // Thrown by `next/dynamic` to bail out of SSR into client-side rendering. "BAILOUT_TO_CLIENT_SIDE_RENDERING" ]; function isPrerenderControlFlowError(subject) { return hasDigest(subject, (digest) => PRERENDER_CONTROL_FLOW_DIGESTS.includes(digest)); } export { getAuthInterruptStatusCode, isNotFoundNavigationError, isPrerenderControlFlowError, isRedirectNavigationError }; //# sourceMappingURL=nextNavigationErrorUtils.js.map