Files
klz-cables.com/.pnpm-store/v10/files/bc/6e5f2f312f763b357aa56e7a55132054be53a81f34b251cba736cbdaa5e2c0723944c1b9cd525d493ba7aa9fdd7c8b05c482b9d9757822e3ac24792571cd23
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

1 line
21 KiB
Plaintext

{"version":3,"file":"getFinalConfigObjectUtils.js","sources":["../../../../src/config/withSentryConfig/getFinalConfigObjectUtils.ts"],"sourcesContent":["import { debug, isMatchingPattern, parseSemver } from '@sentry/core';\nimport { getSentryRelease } from '@sentry/node';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { VercelCronsConfig } from '../../common/types';\nimport { createRouteManifest } from '../manifest/createRouteManifest';\nimport type { RouteManifest } from '../manifest/types';\nimport type { NextConfigObject, SentryBuildOptions } from '../types';\nimport { requiresInstrumentationHook } from '../util';\nimport { getGitRevision, getInstrumentationClientFileContents } from './buildTime';\nimport { resolveTunnelRoute, setUpTunnelRewriteRules } from './tunnel';\n\nlet showedExportModeTunnelWarning = false;\nlet showedExperimentalBuildModeWarning = false;\n\n/**\n * Resolves the Sentry release name to use for build-time behavior.\n *\n * Note: if `release.create === false`, we avoid falling back to git to preserve build determinism.\n */\nexport function resolveReleaseName(userSentryOptions: SentryBuildOptions): string | undefined {\n const shouldCreateRelease = userSentryOptions.release?.create !== false;\n return shouldCreateRelease\n ? (userSentryOptions.release?.name ?? getSentryRelease() ?? getGitRevision())\n : userSentryOptions.release?.name;\n}\n\n/**\n * Applies tunnel-route rewrites, if configured.\n *\n * Note: this mutates `userSentryOptions` (to store the resolved tunnel route) and `incomingUserNextConfigObject`.\n */\nexport function maybeSetUpTunnelRouteRewriteRules(\n incomingUserNextConfigObject: NextConfigObject,\n userSentryOptions: SentryBuildOptions,\n): void {\n if (!userSentryOptions.tunnelRoute) {\n return;\n }\n\n if (incomingUserNextConfigObject.output === 'export') {\n if (!showedExportModeTunnelWarning) {\n showedExportModeTunnelWarning = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] The Sentry Next.js SDK `tunnelRoute` option will not work in combination with Next.js static exports. The `tunnelRoute` option uses server-side features that cannot be accessed in export mode. If you still want to tunnel Sentry events, set up your own tunnel: https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option',\n );\n }\n return;\n }\n\n // Update the global options object to use the resolved value everywhere\n const resolvedTunnelRoute = resolveTunnelRoute(userSentryOptions.tunnelRoute);\n userSentryOptions.tunnelRoute = resolvedTunnelRoute || undefined;\n\n setUpTunnelRewriteRules(incomingUserNextConfigObject, resolvedTunnelRoute);\n}\n\n/**\n * Handles Next's experimental build-mode warning/early return behavior.\n *\n * @returns `true` if Sentry config processing should be skipped for the current process invocation\n */\nexport function shouldReturnEarlyInExperimentalBuildMode(): boolean {\n if (!process.argv.includes('--experimental-build-mode')) {\n return false;\n }\n\n if (!showedExperimentalBuildModeWarning) {\n showedExperimentalBuildModeWarning = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] The Sentry Next.js SDK does not currently fully support next build --experimental-build-mode',\n );\n }\n\n // Next.js v15.3.0-canary.1 splits the experimental build into two phases:\n // 1. compile: Code compilation\n // 2. generate: Environment variable inlining and prerendering (We don't instrument this phase, we inline in the compile phase)\n //\n // We assume a single \"full\" build and reruns Webpack instrumentation in both phases.\n // During the generate step it collides with Next.js's inliner\n // producing malformed JS and build failures.\n // We skip Sentry processing during generate to avoid this issue.\n return process.argv.includes('generate');\n}\n\n/**\n * Creates the route manifest used for client-side route name normalization, unless disabled.\n */\nexport function maybeCreateRouteManifest(\n incomingUserNextConfigObject: NextConfigObject,\n userSentryOptions: SentryBuildOptions,\n): RouteManifest | undefined {\n // Handle deprecated option with warning\n // eslint-disable-next-line deprecation/deprecation\n if (userSentryOptions.disableManifestInjection) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] The `disableManifestInjection` option is deprecated. Use `routeManifestInjection: false` instead.',\n );\n }\n\n // If explicitly disabled, skip\n if (userSentryOptions.routeManifestInjection === false) {\n return undefined;\n }\n\n // Still check the deprecated option if the new option is not set\n // eslint-disable-next-line deprecation/deprecation\n if (userSentryOptions.routeManifestInjection === undefined && userSentryOptions.disableManifestInjection) {\n return undefined;\n }\n\n const manifest = createRouteManifest({\n basePath: incomingUserNextConfigObject.basePath,\n });\n\n // Apply route exclusion filter if configured\n const excludeFilter = userSentryOptions.routeManifestInjection?.exclude;\n return filterRouteManifest(manifest, excludeFilter);\n}\n\ntype ExcludeFilter = ((route: string) => boolean) | (string | RegExp)[] | undefined;\n\n/**\n * Filters routes from the manifest based on the exclude filter.\n * (Exported only for testing)\n */\nexport function filterRouteManifest(manifest: RouteManifest, excludeFilter: ExcludeFilter): RouteManifest {\n if (!excludeFilter) {\n return manifest;\n }\n\n const shouldExclude = (route: string): boolean => {\n if (typeof excludeFilter === 'function') {\n return excludeFilter(route);\n }\n\n return excludeFilter.some(pattern => isMatchingPattern(route, pattern));\n };\n\n return {\n staticRoutes: manifest.staticRoutes.filter(r => !shouldExclude(r.path)),\n dynamicRoutes: manifest.dynamicRoutes.filter(r => !shouldExclude(r.path)),\n isrRoutes: manifest.isrRoutes.filter(r => !shouldExclude(r)),\n };\n}\n\n/**\n * Adds `experimental.clientTraceMetadata` for supported Next.js versions.\n */\nexport function maybeSetClientTraceMetadataOption(\n incomingUserNextConfigObject: NextConfigObject,\n nextJsVersion: string | undefined,\n): void {\n // Add the `clientTraceMetadata` experimental option based on Next.js version. The option got introduced in Next.js version 15.0.0 (actually 14.3.0-canary.64).\n // Adding the option on lower versions will cause Next.js to print nasty warnings we wouldn't confront our users with.\n if (nextJsVersion) {\n const { major, minor } = parseSemver(nextJsVersion);\n if (major !== undefined && minor !== undefined && (major >= 15 || (major === 14 && minor >= 3))) {\n incomingUserNextConfigObject.experimental = incomingUserNextConfigObject.experimental || {};\n incomingUserNextConfigObject.experimental.clientTraceMetadata = [\n 'baggage',\n 'sentry-trace',\n ...(incomingUserNextConfigObject.experimental?.clientTraceMetadata || []),\n ];\n }\n } else {\n // eslint-disable-next-line no-console\n console.log(\n \"[@sentry/nextjs] The Sentry SDK was not able to determine your Next.js version. If you are using Next.js version 15 or greater, please add `experimental.clientTraceMetadata: ['sentry-trace', 'baggage']` to your Next.js config to enable pageload tracing for App Router.\",\n );\n }\n}\n\n/**\n * Ensures Next.js' `experimental.instrumentationHook` is set for versions which require it.\n */\nexport function maybeSetInstrumentationHookOption(\n incomingUserNextConfigObject: NextConfigObject,\n nextJsVersion: string | undefined,\n): void {\n // From Next.js version (15.0.0-canary.124) onwards, Next.js does no longer require the `experimental.instrumentationHook` option and will\n // print a warning when it is set, so we need to conditionally provide it for lower versions.\n if (nextJsVersion && requiresInstrumentationHook(nextJsVersion)) {\n if (incomingUserNextConfigObject.experimental?.instrumentationHook === false) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] You turned off the `experimental.instrumentationHook` option. Note that Sentry will not be initialized if you did not set it up inside `instrumentation.(js|ts)`.',\n );\n }\n incomingUserNextConfigObject.experimental = {\n instrumentationHook: true,\n ...incomingUserNextConfigObject.experimental,\n };\n return;\n }\n\n if (nextJsVersion) {\n return;\n }\n\n // If we cannot detect a Next.js version for whatever reason, the sensible default is to set the `experimental.instrumentationHook`, even though it may create a warning.\n if (incomingUserNextConfigObject.experimental && 'instrumentationHook' in incomingUserNextConfigObject.experimental) {\n if (incomingUserNextConfigObject.experimental.instrumentationHook === false) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] You set `experimental.instrumentationHook` to `false`. If you are using Next.js version 15 or greater, you can remove that option. If you are using Next.js version 14 or lower, you need to set `experimental.instrumentationHook` in your `next.config.(js|mjs)` to `true` for the SDK to be properly initialized in combination with `instrumentation.(js|ts)`.',\n );\n }\n } else {\n // eslint-disable-next-line no-console\n console.log(\n \"[@sentry/nextjs] The Sentry SDK was not able to determine your Next.js version. If you are using Next.js version 15 or greater, Next.js will probably show you a warning about the `experimental.instrumentationHook` being set. To silence Next.js' warning, explicitly set the `experimental.instrumentationHook` option in your `next.config.(js|mjs|ts)` to `undefined`. If you are on Next.js version 14 or lower, you can silence this particular warning by explicitly setting the `experimental.instrumentationHook` option in your `next.config.(js|mjs)` to `true`.\",\n );\n incomingUserNextConfigObject.experimental = {\n instrumentationHook: true,\n ...incomingUserNextConfigObject.experimental,\n };\n }\n}\n\n/**\n * Warns if the project has an `instrumentation-client` file but doesn't export `onRouterTransitionStart`.\n */\nexport function warnIfMissingOnRouterTransitionStartHook(userSentryOptions: SentryBuildOptions): void {\n // We wanna check whether the user added a `onRouterTransitionStart` handler to their client instrumentation file.\n const instrumentationClientFileContents = getInstrumentationClientFileContents();\n if (\n instrumentationClientFileContents !== undefined &&\n !instrumentationClientFileContents.includes('onRouterTransitionStart') &&\n !userSentryOptions.suppressOnRouterTransitionStartWarning\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] ACTION REQUIRED: To instrument navigations, the Sentry SDK requires you to export an `onRouterTransitionStart` hook from your `instrumentation-client.(js|ts)` file. You can do so by adding `export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;` to the file.',\n );\n }\n}\n\n/**\n * Parses the major Next.js version number from a semver string.\n */\nexport function getNextMajor(nextJsVersion: string | undefined): number | undefined {\n if (!nextJsVersion) {\n return undefined;\n }\n\n const { major } = parseSemver(nextJsVersion);\n return major;\n}\n\n/**\n * Reads the Vercel crons configuration from vercel.json.\n * Returns undefined if vercel.json doesn't exist or doesn't contain crons.\n */\nfunction readVercelCronsConfig(): VercelCronsConfig {\n try {\n const vercelJsonPath = path.join(process.cwd(), 'vercel.json');\n const vercelJsonContents = fs.readFileSync(vercelJsonPath, 'utf8');\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const cronsConfig = JSON.parse(vercelJsonContents).crons as VercelCronsConfig;\n\n if (cronsConfig && Array.isArray(cronsConfig) && cronsConfig.length > 0) {\n return cronsConfig;\n }\n return undefined;\n } catch (e) {\n if ((e as { code: string }).code === 'ENOENT') {\n return undefined;\n }\n debug.error('[@sentry/nextjs] Failed to read vercel.json for automatic cron job monitoring instrumentation', e);\n return undefined;\n }\n}\n\n/** Strategy for Vercel cron monitoring instrumentation */\nexport type VercelCronsStrategy = 'spans' | 'wrapper';\n\nexport type VercelCronsConfigResult = {\n /** The crons configuration from vercel.json, if available */\n config: VercelCronsConfig;\n /**\n * The instrumentation strategy to use:\n * - `spans`: New span-based approach (works for both App Router and Pages Router)\n * - `wrapper`: Old wrapper-based approach (Pages Router only)\n * - `undefined`: No cron monitoring enabled\n */\n strategy: VercelCronsStrategy | undefined;\n};\n\n/**\n * Reads and returns the Vercel crons configuration from vercel.json along with\n * information about which instrumentation approach to use.\n *\n * - `_experimental.vercelCronsMonitoring`: New span-based approach (works for both App Router and Pages Router)\n * - `automaticVercelMonitors`: Old wrapper-based approach (Pages Router only)\n *\n * If both are enabled, the new approach is preferred and a warning is logged.\n */\nexport function maybeGetVercelCronsConfig(userSentryOptions: SentryBuildOptions): VercelCronsConfigResult {\n const result: VercelCronsConfigResult = { config: undefined, strategy: undefined };\n\n if (!process.env.VERCEL) {\n return result;\n }\n\n const experimentalEnabled = userSentryOptions._experimental?.vercelCronsMonitoring === true;\n const legacyEnabled = userSentryOptions.webpack?.automaticVercelMonitors === true;\n\n if (!experimentalEnabled && !legacyEnabled) {\n return result;\n }\n\n const config = readVercelCronsConfig();\n if (!config) {\n return result;\n }\n\n result.config = config;\n\n if (experimentalEnabled && legacyEnabled) {\n debug.warn(\n \"[@sentry/nextjs] Both '_experimental.vercelCronsMonitoring' and 'webpack.automaticVercelMonitors' are enabled. \" +\n \"Using the new span-based approach from '_experimental.vercelCronsMonitoring'. \" +\n \"You can remove 'webpack.automaticVercelMonitors' from your config.\",\n );\n result.strategy = 'spans';\n } else if (experimentalEnabled) {\n debug.log(\n '[@sentry/nextjs] Creating Sentry cron monitors for your Vercel Cron Jobs using span-based instrumentation.',\n );\n result.strategy = 'spans';\n } else {\n debug.log(\n \"[@sentry/nextjs] Creating Sentry cron monitors for your Vercel Cron Jobs. You can disable this feature by setting the 'automaticVercelMonitors' option to false in your Next.js config.\",\n );\n result.strategy = 'wrapper';\n }\n\n return result;\n}\n"],"names":[],"mappings":"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"}