Files
klz-cables.com/.pnpm-store/v10/files/f0/26d157b92c8bc3726116342dc71219556a21ceedd24cea26c9193d72d6ad3d73ed1073670a2580af694779db7716c950ebca37ca64cae4058551b6860c5be0
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
60 KiB
Plaintext

{"version":3,"file":"webpack.js","sources":["../../../src/config/webpack.ts"],"sourcesContent":["/* eslint-disable complexity */\n/* eslint-disable max-lines */\n\nimport { debug, escapeStringForRegex, loadModule, parseSemver } from '@sentry/core';\nimport * as fs from 'fs';\nimport { createRequire } from 'module';\nimport * as path from 'path';\nimport type { VercelCronsConfig } from '../common/types';\nimport { getBuildPluginOptions, normalizePathForGlob } from './getBuildPluginOptions';\nimport type { RouteManifest } from './manifest/types';\n// Note: If you need to import a type from Webpack, do it in `types.ts` and export it from there. Otherwise, our\n// circular dependency check thinks this file is importing from itself. See https://github.com/pahen/madge/issues/306.\nimport type {\n BuildContext,\n EntryPropertyObject,\n IgnoreWarningsOption,\n NextConfigObject,\n SentryBuildOptions,\n WebpackConfigFunction,\n WebpackConfigObject,\n WebpackConfigObjectWithModuleRules,\n WebpackEntryProperty,\n} from './types';\nimport { getNextjsVersion, getPackageModules } from './util';\nimport type { VercelCronsConfigResult } from './withSentryConfig/getFinalConfigObjectUtils';\n\n// Next.js runs webpack 3 times, once for the client, the server, and for edge. Because we don't want to print certain\n// warnings 3 times, we keep track of them here.\nlet showedMissingGlobalErrorWarningMsg = false;\n\n/**\n * Construct the function which will be used as the nextjs config's `webpack` value.\n *\n * Sets:\n * - `devtool`, to ensure high-quality sourcemaps are generated\n * - `entry`, to include user's sentry config files (where `Sentry.init` is called) in the build\n * - `plugins`, to add SentryWebpackPlugin\n *\n * @param userNextConfig The user's existing nextjs config, as passed to `withSentryConfig`\n * @param userSentryOptions The user's SentryWebpackPlugin config, as passed to `withSentryConfig`\n * @returns The function to set as the nextjs config's `webpack` value\n */\nexport function constructWebpackConfigFunction({\n userNextConfig = {},\n userSentryOptions = {},\n releaseName,\n routeManifest,\n nextJsVersion,\n useRunAfterProductionCompileHook,\n vercelCronsConfigResult,\n}: {\n userNextConfig: NextConfigObject;\n userSentryOptions: SentryBuildOptions;\n releaseName: string | undefined;\n routeManifest: RouteManifest | undefined;\n nextJsVersion: string | undefined;\n useRunAfterProductionCompileHook: boolean | undefined;\n vercelCronsConfigResult: VercelCronsConfigResult;\n}): WebpackConfigFunction {\n // Will be called by nextjs and passed its default webpack configuration and context data about the build (whether\n // we're building server or client, whether we're in dev, what version of webpack we're using, etc). Note that\n // `incomingConfig` and `buildContext` are referred to as `config` and `options` in the nextjs docs.\n return function newWebpackFunction(\n incomingConfig: WebpackConfigObject,\n buildContext: BuildContext,\n ): WebpackConfigObject {\n const { isServer, dev: isDev, dir: projectDir } = buildContext;\n const runtime = isServer ? (buildContext.nextRuntime === 'edge' ? 'edge' : 'server') : 'client';\n // Default page extensions per https://github.com/vercel/next.js/blob/f1dbc9260d48c7995f6c52f8fbcc65f08e627992/packages/next/server/config-shared.ts#L161\n const pageExtensions = userNextConfig.pageExtensions || ['tsx', 'ts', 'jsx', 'js'];\n const dotPrefixedPageExtensions = pageExtensions.map(ext => `.${ext}`);\n const pageExtensionRegex = pageExtensions.map(escapeStringForRegex).join('|');\n const nextVersion = nextJsVersion || getNextjsVersion();\n const { major } = parseSemver(nextVersion || '');\n\n // We add `.ts` and `.js` back in because `pageExtensions` might not be relevant to the instrumentation file\n // e.g. user's setting `.mdx`. In that case we still want to default look up\n // `instrumentation.ts` and `instrumentation.js`\n const instrumentationFile = getInstrumentationFile(projectDir, dotPrefixedPageExtensions.concat(['.ts', '.js']));\n\n if (runtime !== 'client') {\n warnAboutDeprecatedConfigFiles(projectDir, instrumentationFile, runtime);\n }\n if (runtime === 'server') {\n // was added in v15 (https://github.com/vercel/next.js/pull/67539)\n if (major && major >= 15) {\n warnAboutMissingOnRequestErrorHandler(instrumentationFile);\n }\n }\n\n let rawNewConfig = { ...incomingConfig };\n\n // if user has custom webpack config (which always takes the form of a function), run it so we have actual values to\n // work with\n if ('webpack' in userNextConfig && typeof userNextConfig.webpack === 'function') {\n rawNewConfig = userNextConfig.webpack(rawNewConfig, buildContext);\n }\n\n // This mutates `rawNewConfig` in place, but also returns it in order to switch its type to one in which\n // `newConfig.module.rules` is required, so we don't have to keep asserting its existence\n const newConfig = setUpModuleRules(rawNewConfig);\n\n // Determine which cron config to use based on strategy\n // - 'spans': injected as global for span-based detection (App Router + Pages Router)\n // - 'wrapper': passed to wrapping loader for Pages Router API handler wrapping\n const { strategy: cronsStrategy, config: cronsConfig } = vercelCronsConfigResult;\n const vercelCronsConfigForGlobal = cronsStrategy === 'spans' ? cronsConfig : undefined;\n const vercelCronsConfigForWrapper = cronsStrategy === 'wrapper' ? cronsConfig : undefined;\n\n // Add a loader which will inject code that sets global values\n addValueInjectionLoader({\n newConfig,\n userNextConfig,\n userSentryOptions,\n buildContext,\n releaseName,\n routeManifest,\n nextJsVersion,\n vercelCronsConfig: vercelCronsConfigForGlobal,\n });\n\n addOtelWarningIgnoreRule(newConfig);\n\n // Add edge runtime polyfills when building for edge in dev mode\n if (major && major === 13 && runtime === 'edge' && isDev) {\n addEdgeRuntimePolyfills(newConfig, buildContext);\n }\n\n let pagesDirPath: string | undefined;\n const maybePagesDirPath = path.join(projectDir, 'pages');\n const maybeSrcPagesDirPath = path.join(projectDir, 'src', 'pages');\n if (fs.existsSync(maybePagesDirPath) && fs.lstatSync(maybePagesDirPath).isDirectory()) {\n pagesDirPath = maybePagesDirPath;\n } else if (fs.existsSync(maybeSrcPagesDirPath) && fs.lstatSync(maybeSrcPagesDirPath).isDirectory()) {\n pagesDirPath = maybeSrcPagesDirPath;\n }\n\n let appDirPath: string | undefined;\n const maybeAppDirPath = path.join(projectDir, 'app');\n const maybeSrcAppDirPath = path.join(projectDir, 'src', 'app');\n if (fs.existsSync(maybeAppDirPath) && fs.lstatSync(maybeAppDirPath).isDirectory()) {\n appDirPath = maybeAppDirPath;\n } else if (fs.existsSync(maybeSrcAppDirPath) && fs.lstatSync(maybeSrcAppDirPath).isDirectory()) {\n appDirPath = maybeSrcAppDirPath;\n }\n\n const apiRoutesPath = pagesDirPath ? path.join(pagesDirPath, 'api') : undefined;\n\n const middlewareLocationFolder = pagesDirPath\n ? path.join(pagesDirPath, '..')\n : appDirPath\n ? path.join(appDirPath, '..')\n : projectDir;\n\n const staticWrappingLoaderOptions = {\n appDir: appDirPath,\n pagesDir: pagesDirPath,\n pageExtensionRegex,\n excludeServerRoutes: userSentryOptions.webpack?.excludeServerRoutes,\n nextjsRequestAsyncStorageModulePath: getRequestAsyncStorageModuleLocation(\n projectDir,\n rawNewConfig.resolve?.modules,\n ),\n isDev,\n };\n\n const normalizeLoaderResourcePath = (resourcePath: string): string => {\n // `resourcePath` may be an absolute path or a path relative to the context of the webpack config\n let absoluteResourcePath: string;\n if (path.isAbsolute(resourcePath)) {\n absoluteResourcePath = resourcePath;\n } else {\n absoluteResourcePath = path.join(projectDir, resourcePath);\n }\n\n return path.normalize(absoluteResourcePath);\n };\n\n const isPageResource = (resourcePath: string): boolean => {\n const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);\n return (\n pagesDirPath !== undefined &&\n normalizedAbsoluteResourcePath.startsWith(pagesDirPath + path.sep) &&\n !normalizedAbsoluteResourcePath.startsWith(apiRoutesPath + path.sep) &&\n dotPrefixedPageExtensions.some(ext => normalizedAbsoluteResourcePath.endsWith(ext))\n );\n };\n\n const isApiRouteResource = (resourcePath: string): boolean => {\n const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);\n return (\n normalizedAbsoluteResourcePath.startsWith(apiRoutesPath + path.sep) &&\n dotPrefixedPageExtensions.some(ext => normalizedAbsoluteResourcePath.endsWith(ext))\n );\n };\n\n const possibleMiddlewareLocations = pageExtensions.flatMap(middlewareFileEnding => {\n return [\n path.join(middlewareLocationFolder, `middleware.${middlewareFileEnding}`),\n path.join(middlewareLocationFolder, `proxy.${middlewareFileEnding}`),\n ];\n });\n const isMiddlewareResource = (resourcePath: string): boolean => {\n const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);\n return possibleMiddlewareLocations.includes(normalizedAbsoluteResourcePath);\n };\n\n const isServerComponentResource = (resourcePath: string): boolean => {\n const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);\n\n // \".js, .jsx, or .tsx file extensions can be used for Pages\"\n // https://beta.nextjs.org/docs/routing/pages-and-layouts#pages:~:text=.js%2C%20.jsx%2C%20or%20.tsx%20file%20extensions%20can%20be%20used%20for%20Pages.\n return (\n appDirPath !== undefined &&\n normalizedAbsoluteResourcePath.startsWith(appDirPath + path.sep) &&\n !!normalizedAbsoluteResourcePath.match(\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n new RegExp(`[\\\\\\\\/](page|layout|loading|head|not-found)\\\\.(${pageExtensionRegex})$`),\n )\n );\n };\n\n const isRouteHandlerResource = (resourcePath: string): boolean => {\n const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);\n return (\n appDirPath !== undefined &&\n normalizedAbsoluteResourcePath.startsWith(appDirPath + path.sep) &&\n !!normalizedAbsoluteResourcePath.match(\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n new RegExp(`[\\\\\\\\/]route\\\\.(${pageExtensionRegex})$`),\n )\n );\n };\n\n if (isServer && userSentryOptions.webpack?.autoInstrumentServerFunctions !== false) {\n // It is very important that we insert our loaders at the beginning of the array because we expect any sort of transformations/transpilations (e.g. TS -> JS) to already have happened.\n\n // Wrap pages\n newConfig.module.rules.unshift({\n test: isPageResource,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'),\n options: {\n ...staticWrappingLoaderOptions,\n wrappingTargetKind: 'page',\n },\n },\n ],\n });\n\n // Wrap api routes\n newConfig.module.rules.unshift({\n test: isApiRouteResource,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'),\n options: {\n ...staticWrappingLoaderOptions,\n vercelCronsConfig: vercelCronsConfigForWrapper,\n wrappingTargetKind: 'api-route',\n },\n },\n ],\n });\n\n // Wrap middleware\n const canWrapStandaloneMiddleware = userNextConfig.output !== 'standalone' || !major || major < 16;\n if ((userSentryOptions.webpack?.autoInstrumentMiddleware ?? true) && canWrapStandaloneMiddleware) {\n newConfig.module.rules.unshift({\n test: isMiddlewareResource,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'),\n options: {\n ...staticWrappingLoaderOptions,\n wrappingTargetKind: 'middleware',\n },\n },\n ],\n });\n }\n }\n\n if (isServer && userSentryOptions.webpack?.autoInstrumentAppDirectory !== false) {\n // Wrap server components\n newConfig.module.rules.unshift({\n test: isServerComponentResource,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'),\n options: {\n ...staticWrappingLoaderOptions,\n wrappingTargetKind: 'server-component',\n },\n },\n ],\n });\n\n // Wrap route handlers\n newConfig.module.rules.unshift({\n test: isRouteHandlerResource,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'),\n options: {\n ...staticWrappingLoaderOptions,\n wrappingTargetKind: 'route-handler',\n },\n },\n ],\n });\n }\n\n if (appDirPath) {\n const hasGlobalErrorFile = pageExtensions\n .map(extension => `global-error.${extension}`)\n .some(globalErrorFile => fs.existsSync(path.join(appDirPath, globalErrorFile)));\n\n if (\n !hasGlobalErrorFile &&\n !showedMissingGlobalErrorWarningMsg &&\n !process.env.SENTRY_SUPPRESS_GLOBAL_ERROR_HANDLER_FILE_WARNING\n ) {\n // eslint-disable-next-line no-console\n console.log(\n \"[@sentry/nextjs] It seems like you don't have a global error handler set up. It is recommended that you add a 'global-error.js' file with Sentry instrumentation so that React rendering errors are reported to Sentry. Read more: https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#react-render-errors-in-app-router (you can suppress this warning by setting SENTRY_SUPPRESS_GLOBAL_ERROR_HANDLER_FILE_WARNING=1 as environment variable)\",\n );\n showedMissingGlobalErrorWarningMsg = true;\n }\n }\n\n if (!isServer) {\n // Tell webpack to inject the client config files (containing the client-side `Sentry.init()` call) into the appropriate output\n // bundles. Store a separate reference to the original `entry` value to avoid an infinite loop. (If we don't do\n // this, we'll have a statement of the form `x.y = () => f(x.y)`, where one of the things `f` does is call `x.y`.\n // Since we're setting `x.y` to be a callback (which, by definition, won't run until some time later), by the time\n // the function runs (causing `f` to run, causing `x.y` to run), `x.y` will point to the callback itself, rather\n // than its original value. So calling it will call the callback which will call `f` which will call `x.y` which\n // will call the callback which will call `f` which will call `x.y`... and on and on. Theoretically this could also\n // be fixed by using `bind`, but this is way simpler.)\n const origEntryProperty = newConfig.entry;\n newConfig.entry = async () => addSentryToClientEntryProperty(origEntryProperty, buildContext);\n\n const clientSentryConfigFileName = getClientSentryConfigFile(projectDir);\n if (clientSentryConfigFileName) {\n // eslint-disable-next-line no-console\n console.warn(\n `[@sentry/nextjs] DEPRECATION WARNING: It is recommended renaming your \\`${clientSentryConfigFileName}\\` file, or moving its content to \\`instrumentation-client.ts\\`. When using Turbopack \\`${clientSentryConfigFileName}\\` will no longer work. Read more about the \\`instrumentation-client.ts\\` file: https://nextjs.org/docs/app/api-reference/file-conventions/instrumentation-client`,\n );\n }\n }\n\n const isStaticExport = userNextConfig?.output === 'export';\n\n // We don't want to do any webpack plugin stuff OR any source maps stuff in dev mode or for the server on static-only builds.\n // Symbolication for dev-mode errors is done elsewhere.\n if (!(isDev || (isStaticExport && isServer))) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { sentryWebpackPlugin } = loadModule<{ sentryWebpackPlugin: any }>('@sentry/webpack-plugin', module) ?? {};\n\n if (sentryWebpackPlugin) {\n if (!userSentryOptions.sourcemaps?.disable) {\n // Source maps can be configured in 3 ways:\n // 1. (next config): productionBrowserSourceMaps\n // 2. (next config): experimental.serverSourceMaps\n // 3. custom webpack configuration\n //\n // We only update this if no explicit value is set\n // (Next.js defaults to `false`: https://github.com/vercel/next.js/blob/5f4f96c133bd6b10954812cc2fef6af085b82aa5/packages/next/src/build/webpack/config/blocks/base.ts#L61)\n if (!newConfig.devtool) {\n debug.log(`[@sentry/nextjs] Automatically enabling source map generation for ${runtime} build.`);\n // `hidden-source-map` produces the same sourcemaps as `source-map`, but doesn't include the `sourceMappingURL`\n // comment at the bottom. For folks who aren't publicly hosting their sourcemaps, this is helpful because then\n // the browser won't look for them and throw errors into the console when it can't find them. Because this is a\n // front-end-only problem, and because `sentry-cli` handles sourcemaps more reliably with the comment than\n // without, the option to use `hidden-source-map` only applies to the client-side build.\n if (isServer) {\n newConfig.devtool = 'source-map';\n } else {\n newConfig.devtool = 'hidden-source-map';\n }\n }\n\n // enable source map deletion if not explicitly disabled\n if (!isServer && userSentryOptions.sourcemaps?.deleteSourcemapsAfterUpload === undefined) {\n debug.warn(\n '[@sentry/nextjs] Source maps will be automatically deleted after being uploaded to Sentry. If you want to keep the source maps, set the `sourcemaps.deleteSourcemapsAfterUpload` option to false in `withSentryConfig()`. If you do not want to generate and upload sourcemaps at all, set the `sourcemaps.disable` option to true.',\n );\n userSentryOptions.sourcemaps = {\n ...userSentryOptions.sourcemaps,\n deleteSourcemapsAfterUpload: true,\n };\n }\n }\n\n newConfig.plugins = newConfig.plugins || [];\n const { config: userNextConfig, dir, nextRuntime } = buildContext;\n const buildTool = isServer ? (nextRuntime === 'edge' ? 'webpack-edge' : 'webpack-nodejs') : 'webpack-client';\n const projectDir = normalizePathForGlob(dir);\n const distDir = normalizePathForGlob((userNextConfig as NextConfigObject).distDir ?? '.next');\n const distDirAbsPath = path.posix.join(projectDir, distDir);\n\n const sentryWebpackPluginInstance = sentryWebpackPlugin(\n getBuildPluginOptions({\n sentryBuildOptions: userSentryOptions,\n releaseName,\n distDirAbsPath,\n buildTool,\n useRunAfterProductionCompileHook,\n }),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n sentryWebpackPluginInstance._name = 'sentry-webpack-plugin'; // For tests and debugging. Serves no other purpose.\n newConfig.plugins.push(sentryWebpackPluginInstance);\n }\n }\n\n if (userSentryOptions.webpack?.treeshake) {\n setupTreeshakingFromConfig(userSentryOptions, newConfig, buildContext);\n }\n\n // We inject a map of dependencies that the nextjs app has, as we cannot reliably extract them at runtime, sadly\n newConfig.plugins = newConfig.plugins || [];\n newConfig.plugins.push(\n new buildContext.webpack.DefinePlugin({\n __SENTRY_SERVER_MODULES__: JSON.stringify(getPackageModules(projectDir)),\n }),\n );\n\n return newConfig;\n };\n}\n\n/**\n * Modify the webpack `entry` property so that the code in `sentry.client.config.js` is\n * included in the the necessary bundles.\n *\n * @param currentEntryProperty The value of the property before Sentry code has been injected\n * @param buildContext Object passed by nextjs containing metadata about the build\n * @returns The value which the new `entry` property (which will be a function) will return (TODO: this should return\n * the function, rather than the function's return value)\n */\nasync function addSentryToClientEntryProperty(\n currentEntryProperty: WebpackEntryProperty,\n buildContext: BuildContext,\n): Promise<EntryPropertyObject> {\n // The `entry` entry in a webpack config can be a string, array of strings, object, or function. By default, nextjs\n // sets it to an async function which returns the promise of an object of string arrays. Because we don't know whether\n // someone else has come along before us and changed that, we need to check a few things along the way. The one thing\n // we know is that it won't have gotten *simpler* in form, so we only need to worry about the object and function\n // options. See https://webpack.js.org/configuration/entry-context/#entry.\n\n const { dir: projectDir, dev: isDevMode } = buildContext;\n\n const newEntryProperty =\n typeof currentEntryProperty === 'function' ? await currentEntryProperty() : { ...currentEntryProperty };\n\n const clientSentryConfigFileName = getClientSentryConfigFile(projectDir);\n const instrumentationClientFileName = getInstrumentationClientFile(projectDir);\n\n const filesToInject = [];\n if (clientSentryConfigFileName) {\n // we need to turn the filename into a path so webpack can find it\n filesToInject.push(`./${clientSentryConfigFileName}`);\n }\n if (instrumentationClientFileName) {\n // we need to turn the filename into a path so webpack can find it\n filesToInject.push(`./${instrumentationClientFileName}`);\n }\n\n // inject into all entry points which might contain user's code\n for (const entryPointName in newEntryProperty) {\n if (\n entryPointName === 'pages/_app' ||\n // entrypoint for `/app` pages\n entryPointName === 'main-app'\n ) {\n addFilesToWebpackEntryPoint(newEntryProperty, entryPointName, filesToInject, isDevMode);\n }\n }\n\n return newEntryProperty;\n}\n\n/**\n * Gets the content of the user's instrumentation file\n */\nfunction getInstrumentationFile(projectDir: string, dotPrefixedExtensions: string[]): string | null {\n const paths = dotPrefixedExtensions.flatMap(extension => [\n ['src', `instrumentation${extension}`],\n [`instrumentation${extension}`],\n ]);\n\n for (const pathSegments of paths) {\n try {\n return fs.readFileSync(path.resolve(projectDir, ...pathSegments), { encoding: 'utf-8' });\n } catch {\n // no-op\n }\n }\n\n return null;\n}\n\n/**\n * Make sure the instrumentation file has a `onRequestError` Handler\n */\nfunction warnAboutMissingOnRequestErrorHandler(instrumentationFile: string | null): void {\n if (!instrumentationFile) {\n if (!process.env.SENTRY_SUPPRESS_INSTRUMENTATION_FILE_WARNING) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] Could not find a Next.js instrumentation file. This indicates an incomplete configuration of the Sentry SDK. An instrumentation file is required for the Sentry SDK to be initialized on the server: https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#create-initialization-config-files (you can suppress this warning by setting SENTRY_SUPPRESS_INSTRUMENTATION_FILE_WARNING=1 as environment variable)',\n );\n }\n return;\n }\n\n if (!instrumentationFile.includes('onRequestError')) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@sentry/nextjs] Could not find `onRequestError` hook in instrumentation file. This indicates outdated configuration of the Sentry SDK. Use `Sentry.captureRequestError` to instrument the `onRequestError` hook: https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#errors-from-nested-react-server-components',\n );\n }\n}\n\n/**\n * Searches for old `sentry.(server|edge).config.ts` files and Next.js instrumentation hooks and warns if there are \"old\"\n * config files and no signs of them inside the instrumentation hook.\n *\n * @param projectDir The root directory of the project, where config files would be located\n * @param platform Either \"server\" or \"edge\", so that we know which file to look for\n */\nfunction warnAboutDeprecatedConfigFiles(\n projectDir: string,\n instrumentationFile: string | null,\n platform: 'server' | 'edge',\n): void {\n const hasInstrumentationHookWithIndicationsOfSentry =\n instrumentationFile &&\n (instrumentationFile.includes('@sentry/') ||\n instrumentationFile.match(/sentry\\.(server|edge)\\.config(\\.(ts|js))?/));\n\n if (hasInstrumentationHookWithIndicationsOfSentry) {\n return;\n }\n\n for (const filename of [`sentry.${platform}.config.ts`, `sentry.${platform}.config.js`]) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n // eslint-disable-next-line no-console\n console.warn(\n `[@sentry/nextjs] It appears you've configured a \\`${filename}\\` file. Please ensure to put this file's content into the \\`register()\\` function of a Next.js instrumentation file instead. To ensure correct functionality of the SDK, \\`Sentry.init\\` must be called inside of an instrumentation file. Learn more about setting up an instrumentation file in Next.js: https://nextjs.org/docs/app/building-your-application/optimizing/instrumentation. You can safely delete the \\`${filename}\\` file afterward.`,\n );\n }\n }\n}\n\n/**\n * Searches for a `sentry.client.config.ts|js` file and returns its file name if it finds one. (ts being prioritized)\n *\n * @param projectDir The root directory of the project, where config files would be located\n */\nfunction getClientSentryConfigFile(projectDir: string): string | void {\n const possibilities = ['sentry.client.config.ts', 'sentry.client.config.js'];\n\n for (const filename of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n return filename;\n }\n }\n}\n\n/**\n * Searches for a `instrumentation-client.ts|js` file and returns its file name if it finds one. (ts being prioritized)\n *\n * @param projectDir The root directory of the project, where config files would be located\n */\nfunction getInstrumentationClientFile(projectDir: string): string | void {\n const possibilities = [\n ['src', 'instrumentation-client.js'],\n ['src', 'instrumentation-client.ts'],\n ['instrumentation-client.js'],\n ['instrumentation-client.ts'],\n ];\n\n for (const pathParts of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, ...pathParts))) {\n return path.join(...pathParts);\n }\n }\n}\n\n/**\n * Add files to a specific element of the given `entry` webpack config property.\n *\n * @param entryProperty The existing `entry` config object\n * @param entryPointName The key where the file should be injected\n * @param filesToInsert An array of paths to the injected files\n */\nfunction addFilesToWebpackEntryPoint(\n entryProperty: EntryPropertyObject,\n entryPointName: string,\n filesToInsert: string[],\n isDevMode: boolean,\n): void {\n // BIG FAT NOTE: Order of insertion seems to matter here. If we insert the new files before the `currentEntrypoint`s,\n // the Next.js dev server breaks. Because we generally still want the SDK to be initialized as early as possible we\n // still keep it at the start of the entrypoints if we are not in dev mode.\n\n // can be a string, array of strings, or object whose `import` property is one of those two\n const currentEntryPoint = entryProperty[entryPointName];\n let newEntryPoint = currentEntryPoint;\n\n if (typeof currentEntryPoint === 'string' || Array.isArray(currentEntryPoint)) {\n newEntryPoint = Array.isArray(currentEntryPoint) ? currentEntryPoint : [currentEntryPoint];\n if (newEntryPoint.some(entry => filesToInsert.includes(entry))) {\n return;\n }\n\n if (isDevMode) {\n // Inserting at beginning breaks dev mode so we insert at the end\n newEntryPoint.push(...filesToInsert);\n } else {\n // In other modes we insert at the beginning so that the SDK initializes as early as possible\n newEntryPoint.unshift(...filesToInsert);\n }\n }\n // descriptor object (webpack 5+)\n else if (typeof currentEntryPoint === 'object' && 'import' in currentEntryPoint) {\n const currentImportValue = currentEntryPoint.import;\n const newImportValue = Array.isArray(currentImportValue) ? currentImportValue : [currentImportValue];\n if (newImportValue.some(entry => filesToInsert.includes(entry))) {\n return;\n }\n\n if (isDevMode) {\n // Inserting at beginning breaks dev mode so we insert at the end\n newImportValue.push(...filesToInsert);\n } else {\n // In other modes we insert at the beginning so that the SDK initializes as early as possible\n newImportValue.unshift(...filesToInsert);\n }\n\n newEntryPoint = {\n ...currentEntryPoint,\n import: newImportValue,\n };\n }\n // malformed entry point (use `console.error` rather than `debug.error` because it will always be printed, regardless\n // of SDK settings)\n else {\n // eslint-disable-next-line no-console\n console.error(\n 'Sentry Logger [Error]:',\n `Could not inject SDK initialization code into entry point ${entryPointName}, as its current value is not in a recognized format.\\n`,\n 'Expected: string | Array<string> | { [key:string]: any, import: string | Array<string> }\\n',\n `Got: ${currentEntryPoint}`,\n );\n }\n\n if (newEntryPoint) {\n entryProperty[entryPointName] = newEntryPoint;\n }\n}\n\n/**\n * Ensure that `newConfig.module.rules` exists. Modifies the given config in place but also returns it in order to\n * change its type.\n *\n * @param newConfig A webpack config object which may or may not contain `module` and `module.rules`\n * @returns The same object, with an empty `module.rules` array added if necessary\n */\nfunction setUpModuleRules(newConfig: WebpackConfigObject): WebpackConfigObjectWithModuleRules {\n newConfig.module = {\n ...newConfig.module,\n rules: [...(newConfig.module?.rules || [])],\n };\n // Surprising that we have to assert the type here, since we've demonstrably guaranteed the existence of\n // `newConfig.module.rules` just above, but ¯\\_(ツ)_/¯\n return newConfig as WebpackConfigObjectWithModuleRules;\n}\n\n/**\n * Adds loaders to inject values on the global object based on user configuration.\n */\n// TODO: Remove this loader and replace it with a nextConfig.env (https://web.archive.org/web/20240917153554/https://nextjs.org/docs/app/api-reference/next-config-js/env) or define based (https://github.com/vercel/next.js/discussions/71476) approach.\n// In order to remove this loader though we need to make sure the minimum supported Next.js version includes this PR (https://github.com/vercel/next.js/pull/61194), otherwise the nextConfig.env based approach will not work, as our SDK code is not processed by Next.js.\nfunction addValueInjectionLoader({\n newConfig,\n userNextConfig,\n userSentryOptions,\n buildContext,\n releaseName,\n routeManifest,\n nextJsVersion,\n vercelCronsConfig,\n}: {\n newConfig: WebpackConfigObjectWithModuleRules;\n userNextConfig: NextConfigObject;\n userSentryOptions: SentryBuildOptions;\n buildContext: BuildContext;\n releaseName: string | undefined;\n routeManifest: RouteManifest | undefined;\n nextJsVersion: string | undefined;\n vercelCronsConfig: VercelCronsConfig;\n}): void {\n const assetPrefix = userNextConfig.assetPrefix || userNextConfig.basePath || '';\n\n // Check if release creation is disabled to prevent injection that breaks build determinism\n const shouldCreateRelease = userSentryOptions.release?.create !== false;\n const releaseToInject = releaseName && shouldCreateRelease ? releaseName : undefined;\n\n const isomorphicValues = {\n // `rewritesTunnel` set by the user in Next.js config\n _sentryRewritesTunnelPath:\n userSentryOptions.tunnelRoute !== undefined &&\n userNextConfig.output !== 'export' &&\n typeof userSentryOptions.tunnelRoute === 'string'\n ? `${userNextConfig.basePath ?? ''}${userSentryOptions.tunnelRoute}`\n : undefined,\n\n // The webpack plugin's release injection breaks the `app` directory so we inject the release manually here instead.\n // Having a release defined in dev-mode spams releases in Sentry so we only set one in non-dev mode\n // Only inject if release creation is not explicitly disabled (to maintain build determinism)\n SENTRY_RELEASE: releaseToInject && !buildContext.dev ? { id: releaseToInject } : undefined,\n _sentryBasePath: buildContext.dev ? userNextConfig.basePath : undefined,\n // This is used to determine version-based dev-symbolication behavior\n _sentryNextJsVersion: nextJsVersion,\n };\n\n const serverValues = {\n ...isomorphicValues,\n // Make sure that if we have a windows path, the backslashes are interpreted as such (rather than as escape\n // characters)\n _sentryRewriteFramesDistDir: userNextConfig.distDir?.replace(/\\\\/g, '\\\\\\\\') || '.next',\n // Inject Vercel crons config for server-side cron auto-instrumentation\n _sentryVercelCronsConfig: vercelCronsConfig ? JSON.stringify(vercelCronsConfig) : undefined,\n };\n\n const clientValues = {\n ...isomorphicValues,\n // Get the path part of `assetPrefix`, minus any trailing slash. (We use a placeholder for the origin if\n // `assetPrefix` doesn't include one. Since we only care about the path, it doesn't matter what it is.)\n _sentryRewriteFramesAssetPrefixPath: assetPrefix\n ? new URL(assetPrefix, 'http://dogs.are.great').pathname.replace(/\\/$/, '')\n : '',\n _sentryAssetPrefix: userNextConfig.assetPrefix,\n _sentryExperimentalThirdPartyOriginStackFrames: userSentryOptions._experimental?.thirdPartyOriginStackFrames\n ? 'true'\n : undefined,\n _sentryRouteManifest: JSON.stringify(routeManifest),\n };\n\n if (buildContext.isServer) {\n newConfig.module.rules.push({\n // TODO: Find a more bulletproof way of matching. For now this is fine and doesn't hurt anyone. It merely sets some globals.\n test: /(src[\\\\/])?instrumentation.(js|ts)/,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders/valueInjectionLoader.js'),\n options: {\n values: serverValues,\n },\n },\n ],\n });\n } else {\n newConfig.module.rules.push({\n test: /(?:sentry\\.client\\.config\\.(jsx?|tsx?)|(?:src[\\\\/])?instrumentation-client\\.(js|ts))$/,\n use: [\n {\n loader: path.resolve(__dirname, 'loaders/valueInjectionLoader.js'),\n options: {\n values: clientValues,\n },\n },\n ],\n });\n }\n}\n\nfunction resolveNextPackageDirFromDirectory(basedir: string): string | undefined {\n try {\n return path.dirname(createRequire(`${basedir}/`).resolve('next/package.json'));\n } catch {\n // Should not happen in theory\n return undefined;\n }\n}\n\nconst POTENTIAL_REQUEST_ASYNC_STORAGE_LOCATIONS = [\n // Original location of RequestAsyncStorage\n // https://github.com/vercel/next.js/blob/46151dd68b417e7850146d00354f89930d10b43b/packages/next/src/client/components/request-async-storage.ts\n 'next/dist/client/components/request-async-storage.js',\n // Introduced in Next.js 13.4.20\n // https://github.com/vercel/next.js/blob/e1bc270830f2fc2df3542d4ef4c61b916c802df3/packages/next/src/client/components/request-async-storage.external.ts\n 'next/dist/client/components/request-async-storage.external.js',\n // Introduced in Next.js 15.0.0-canary.180\n // https://github.com/vercel/next.js/blob/541167b9b0fed6af9f36472e632863ffec41f18c/packages/next/src/server/app-render/work-unit-async-storage.external.ts\n 'next/dist/server/app-render/work-unit-async-storage.external.js',\n // Introduced in Next.js 15.0.0-canary.182\n // https://github.com/vercel/next.js/blob/f35159e5e80138ca7373f57b47edcaae3bcf1728/packages/next/src/client/components/work-unit-async-storage.external.ts\n 'next/dist/client/components/work-unit-async-storage.external.js',\n];\n\nfunction getRequestAsyncStorageModuleLocation(\n webpackContextDir: string,\n webpackResolvableModuleLocations: string[] | undefined,\n): string | undefined {\n if (webpackResolvableModuleLocations === undefined) {\n return undefined;\n }\n\n const absoluteWebpackResolvableModuleLocations = webpackResolvableModuleLocations.map(loc =>\n path.resolve(webpackContextDir, loc),\n );\n\n for (const webpackResolvableLocation of absoluteWebpackResolvableModuleLocations) {\n const nextPackageDir = resolveNextPackageDirFromDirectory(webpackResolvableLocation);\n if (nextPackageDir) {\n const asyncLocalStorageLocation = POTENTIAL_REQUEST_ASYNC_STORAGE_LOCATIONS.find(loc =>\n fs.existsSync(path.join(nextPackageDir, '..', loc)),\n );\n if (asyncLocalStorageLocation) {\n return asyncLocalStorageLocation;\n }\n }\n }\n\n return undefined;\n}\n\nfunction addOtelWarningIgnoreRule(newConfig: WebpackConfigObjectWithModuleRules): void {\n const ignoreRules = [\n // Inspired by @matmannion: https://github.com/getsentry/sentry-javascript/issues/12077#issuecomment-2180307072\n (warning, compilation) => {\n // This is wrapped in try-catch because we are vendoring types for this hook and we can't be 100% sure that we are accessing API that is there\n try {\n if (!warning.module) {\n return false;\n }\n\n const isDependencyThatMayRaiseCriticalDependencyMessage =\n /@opentelemetry\\/instrumentation/.test(warning.module.readableIdentifier(compilation.requestShortener)) ||\n /@prisma\\/instrumentation/.test(warning.module.readableIdentifier(compilation.requestShortener));\n const isCriticalDependencyMessage = /Critical dependency/.test(warning.message);\n\n return isDependencyThatMayRaiseCriticalDependencyMessage && isCriticalDependencyMessage;\n } catch {\n return false;\n }\n },\n // We provide these objects in addition to the hook above to provide redundancy in case the hook fails.\n { module: /@opentelemetry\\/instrumentation/, message: /Critical dependency/ },\n { module: /@prisma\\/instrumentation/, message: /Critical dependency/ },\n { module: /require-in-the-middle/, message: /Critical dependency/ },\n ] satisfies IgnoreWarningsOption;\n\n if (newConfig.ignoreWarnings === undefined) {\n newConfig.ignoreWarnings = ignoreRules;\n } else if (Array.isArray(newConfig.ignoreWarnings)) {\n newConfig.ignoreWarnings.push(...ignoreRules);\n }\n}\n\nfunction addEdgeRuntimePolyfills(newConfig: WebpackConfigObjectWithModuleRules, buildContext: BuildContext): void {\n // Use ProvidePlugin to inject performance global only when accessed\n newConfig.plugins = newConfig.plugins || [];\n newConfig.plugins.push(\n new buildContext.webpack.ProvidePlugin({\n performance: [path.resolve(__dirname, 'polyfills', 'perf_hooks.js'), 'performance'],\n }),\n );\n\n // Add module resolution aliases for problematic Node.js modules in edge runtime\n newConfig.resolve = newConfig.resolve || {};\n newConfig.resolve.alias = {\n ...newConfig.resolve.alias,\n // Redirect perf_hooks imports to a polyfilled version\n perf_hooks: path.resolve(__dirname, 'polyfills', 'perf_hooks.js'),\n };\n}\n\n/**\n * Sets up the tree-shaking flags based on the user's configuration.\n * https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/tree-shaking/\n */\nfunction setupTreeshakingFromConfig(\n userSentryOptions: SentryBuildOptions,\n newConfig: WebpackConfigObjectWithModuleRules,\n buildContext: BuildContext,\n): void {\n const defines: Record<string, boolean> = {};\n\n newConfig.plugins = newConfig.plugins || [];\n\n if (userSentryOptions.webpack?.treeshake?.removeDebugLogging) {\n defines.__SENTRY_DEBUG__ = false;\n }\n\n if (userSentryOptions.webpack?.treeshake?.removeTracing) {\n defines.__SENTRY_TRACING__ = false;\n }\n\n if (userSentryOptions.webpack?.treeshake?.excludeReplayIframe) {\n defines.__RRWEB_EXCLUDE_IFRAME__ = true;\n }\n\n if (userSentryOptions.webpack?.treeshake?.excludeReplayShadowDOM) {\n defines.__RRWEB_EXCLUDE_SHADOW_DOM__ = true;\n }\n\n if (userSentryOptions.webpack?.treeshake?.excludeReplayCompressionWorker) {\n defines.__SENTRY_EXCLUDE_REPLAY_WORKER__ = true;\n }\n\n // Only add DefinePlugin if there are actual defines to set\n if (Object.keys(defines).length > 0) {\n newConfig.plugins.push(new buildContext.webpack.DefinePlugin(defines));\n }\n}\n"],"names":[],"mappings":"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"}