UNPKG

@sentry/nextjs

Version:
54 lines (50 loc) • 2.1 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const core = require('@sentry/core'); const MAX_CAUSE_DEPTH = 5; function hasDigest(subject, predicate, depth = 0) { if (!core.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)); } exports.getAuthInterruptStatusCode = getAuthInterruptStatusCode; exports.isNotFoundNavigationError = isNotFoundNavigationError; exports.isPrerenderControlFlowError = isPrerenderControlFlowError; exports.isRedirectNavigationError = isRedirectNavigationError; //# sourceMappingURL=nextNavigationErrorUtils.js.map