{"version":3,"file":"webpack4and5.js","sources":["../../../src/webpack/webpack4and5.ts"],"sourcesContent":["import type { Options } from '../core/index';\nimport {\n createSentryBuildPluginManager,\n generateReleaseInjectorCode,\n generateModuleMetadataInjectorCode,\n stringToUUID,\n createComponentNameAnnotateHooks,\n CodeInjection,\n getDebugIdSnippet,\n createDebugIdUploadFunction,\n isJsFile,\n stampDebugId,\n} from '../core/index';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { randomUUID } from 'node:crypto';\n\nconst _req = createRequire(import.meta.url);\n\n// Resolve the loader path via the package's own exports.\n// webpack4and5.ts may end up in a shared chunk (_chunks/) whose import.meta.url\n// does not point to the webpack/ directory where the transform file lives, so\n// a path-relative lookup would fail. Using require.resolve on the package export\n// always finds the correct installed file regardless of chunk placement.\nlet COMPONENT_ANNOTATION_LOADER: string;\ntry {\n COMPONENT_ANNOTATION_LOADER = _req.resolve('@sentry/bundler-plugins/webpack-loader');\n} catch {\n // Fallback for non-packaged environments (e.g., monorepo source runs without dist)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Rollup transpiles import.meta for us for CJS\n const dirname = path.dirname(fileURLToPath(import.meta.url));\n // The Rollup build emits `.js` for both CJS and ESM, so the extension is the same in both.\n COMPONENT_ANNOTATION_LOADER = path.resolve(dirname, 'component-annotation-transform.js');\n}\n\n// since webpack 5.1 compiler contains webpack module so plugins always use correct webpack version\n// https://github.com/webpack/webpack/commit/65eca2e529ce1d79b79200d4bdb1ce1b81141459\n\ninterface BannerPluginCallbackArg {\n chunk?: {\n hash?: string;\n contentHash?: {\n javascript?: string;\n };\n };\n}\n\ntype UnsafeBannerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (options: any): unknown;\n};\n\ntype UnsafeDefinePlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (options: any): unknown;\n};\n\ntype WebpackSource = {\n source: () => string | Buffer;\n};\n\ntype WebpackRawSource = {\n new (source: string): WebpackSource;\n};\n\ntype WebpackAsset = {\n name: string;\n source: WebpackSource;\n info: {\n related?: {\n sourceMap?: string | string[];\n };\n };\n};\n\ntype WebpackCompiler = {\n options: {\n plugins?: unknown[];\n mode?: string;\n module?: {\n rules?: unknown[];\n };\n };\n hooks: {\n thisCompilation: {\n tap: (name: string, callback: (compilation: WebpackCompilation) => void) => void;\n };\n afterEmit: {\n tapAsync: (name: string, callback: (compilation: WebpackCompilation, cb: () => void) => void) => void;\n };\n done: {\n tap: (name: string, callback: () => void) => void;\n };\n };\n webpack?: {\n BannerPlugin?: UnsafeBannerPlugin;\n DefinePlugin?: UnsafeDefinePlugin;\n Compilation?: {\n PROCESS_ASSETS_STAGE_DEV_TOOLING?: number;\n };\n sources?: {\n RawSource?: WebpackRawSource;\n };\n };\n};\n\ntype WebpackCompilation = {\n outputOptions: {\n path?: string;\n };\n assets: Record;\n getAssets: () => WebpackAsset[];\n getAsset: (name: string) => WebpackAsset | undefined;\n updateAsset: (name: string, source: WebpackSource) => void;\n hooks: {\n processAssets: {\n tap: (options: { name: string; stage: number }, callback: () => void) => void;\n };\n };\n};\n\n// Detect webpack major version for telemetry (helps differentiate webpack 4 vs 5 usage)\nfunction getWebpackMajorVersion(): string | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Rollup already transpiles this for us\n const req = createRequire(import.meta.url);\n const webpack = req('webpack') as { version?: string; default?: { version?: string } };\n const version = webpack?.version ?? webpack?.default?.version;\n const webpackMajorVersion = version?.split('.')[0]; // \"4\" or \"5\"\n return webpackMajorVersion;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Stamps each JS asset's debug ID into the asset itself and its source map asset.\n *\n * Runs after source maps have been generated, so the JS asset no longer needs to carry\n * source map information and can be replaced with a plain `RawSource`.\n */\nfunction addDebugIdsToAssets(compilation: WebpackCompilation, RawSource: WebpackRawSource): void {\n for (const asset of compilation.getAssets()) {\n if (!isJsFile(asset.name)) {\n continue;\n }\n\n const bundleSource = asset.source.source().toString();\n const relatedSourceMap = asset.info.related?.sourceMap;\n const sourceMapName = typeof relatedSourceMap === 'string' ? relatedSourceMap : `${asset.name}.map`;\n const sourceMapAsset = compilation.getAsset(sourceMapName);\n\n const stamped = stampDebugId(bundleSource, sourceMapAsset?.source.source().toString());\n if (!stamped) {\n continue;\n }\n\n compilation.updateAsset(asset.name, new RawSource(stamped.bundleSource));\n if (stamped.sourceMapSource !== undefined) {\n compilation.updateAsset(sourceMapName, new RawSource(stamped.sourceMapSource));\n }\n }\n}\n\n/**\n * The factory function accepts BannerPlugin and DefinePlugin classes in\n * order to avoid direct dependencies on webpack.\n *\n * This allow us to export version of the plugin for webpack 5.1+ and compatible environments.\n *\n * Since webpack 5.1 compiler contains webpack module so plugins always use correct webpack version.\n */\nexport function sentryWebpackPluginFactory({\n BannerPlugin: UnsafeBannerPlugin,\n DefinePlugin: UnsafeDefinePlugin,\n}: {\n BannerPlugin?: UnsafeBannerPlugin;\n DefinePlugin?: UnsafeDefinePlugin;\n} = {}) {\n return function sentryWebpackPlugin(userOptions: SentryWebpackPluginOptions = {}) {\n const sentryBuildPluginManager = createSentryBuildPluginManager(userOptions, {\n loggerPrefix: userOptions._metaOptions?.loggerPrefixOverride ?? '[sentry-webpack-plugin]',\n buildTool: 'webpack',\n buildToolMajorVersion: getWebpackMajorVersion(),\n });\n\n const {\n logger,\n normalizedOptions: options,\n bundleSizeOptimizationReplacementValues: replacementValues,\n bundleMetadata,\n createDependencyOnBuildArtifacts,\n } = sentryBuildPluginManager;\n\n if (options.disable) {\n return {\n apply() {\n // noop plugin\n },\n };\n }\n\n if (process.cwd().match(/\\\\node_modules\\\\|\\/node_modules\\//)) {\n logger.warn('Running Sentry plugin from within a `node_modules` folder. Some features may not work.');\n }\n\n const sourcemapsEnabled = options.sourcemaps?.disable !== true;\n const staticInjectionCode = new CodeInjection();\n\n if (!options.release.inject) {\n logger.debug('Release injection disabled via `release.inject` option. Will not inject release.');\n } else if (!options.release.name) {\n logger.debug(\n 'No release name provided. Will not inject release. Please set the `release.name` option to identify your release.',\n );\n } else {\n staticInjectionCode.append(\n generateReleaseInjectorCode({\n release: options.release.name,\n injectBuildInformation: options._experiments.injectBuildInformation || false,\n }),\n );\n }\n\n if (Object.keys(bundleMetadata).length > 0) {\n staticInjectionCode.append(generateModuleMetadataInjectorCode(bundleMetadata));\n }\n\n const transformAnnotations = options.reactComponentAnnotation?.enabled\n ? createComponentNameAnnotateHooks(\n options.reactComponentAnnotation?.ignoredComponents || [],\n !!options.reactComponentAnnotation?._experimentalInjectIntoHtml,\n )\n : undefined;\n\n const transformReplace = Object.keys(replacementValues).length > 0;\n\n return {\n apply(compiler: WebpackCompiler) {\n void sentryBuildPluginManager.telemetry.emitBundlerPluginExecutionSignal().catch(() => {\n // Telemetry failures are acceptable\n });\n\n // Get the correct plugin classes (webpack 5.1+ vs older versions)\n const BannerPlugin = compiler?.webpack?.BannerPlugin || UnsafeBannerPlugin;\n const DefinePlugin = compiler?.webpack?.DefinePlugin || UnsafeDefinePlugin;\n\n // Add BannerPlugin for code injection (release, metadata, debug IDs)\n if (!staticInjectionCode.isEmpty() || sourcemapsEnabled) {\n if (!BannerPlugin) {\n logger.warn(\n 'BannerPlugin is not available. Skipping code injection. This usually means webpack is not properly configured.',\n );\n } else {\n compiler.options.plugins = compiler.options.plugins || [];\n compiler.options.plugins.push(\n new BannerPlugin({\n raw: true,\n include: /\\.(js|ts|jsx|tsx|mjs|cjs)(\\?[^?]*)?(#[^#]*)?$/,\n banner: (arg?: BannerPluginCallbackArg) => {\n const codeToInject = staticInjectionCode.clone();\n if (sourcemapsEnabled) {\n const hash = arg?.chunk?.contentHash?.javascript ?? arg?.chunk?.hash;\n const debugId = hash ? stringToUUID(hash) : randomUUID();\n codeToInject.append(getDebugIdSnippet(debugId));\n }\n return codeToInject.code();\n },\n }),\n );\n }\n }\n\n // The upload routine (which stamps debug IDs into temp copies of the artifacts) is skipped\n // with `disable-upload`, so the emitted artifacts get stamped in the asset pipeline instead.\n if (sourcemapsEnabled && options.sourcemaps?.disable === 'disable-upload') {\n const RawSource = compiler.webpack?.sources?.RawSource;\n // Right after source map generation (and thus after minification, which would strip the comment),\n // so later stages (real content hashing, subresource integrity) see the final assets.\n const stage = (compiler.webpack?.Compilation?.PROCESS_ASSETS_STAGE_DEV_TOOLING ?? 500) + 1;\n\n if (!RawSource) {\n logger.warn(\n 'Webpack sources are not available. Skipping debug ID injection into emitted source maps. This usually means webpack is not properly configured.',\n );\n } else {\n compiler.hooks.thisCompilation.tap('sentry-webpack-plugin', compilation => {\n compilation.hooks.processAssets.tap({ name: 'sentry-webpack-plugin', stage }, () => {\n addDebugIdsToAssets(compilation, RawSource);\n });\n });\n }\n }\n\n // Add DefinePlugin for bundle size optimizations\n if (transformReplace && DefinePlugin) {\n compiler.options.plugins = compiler.options.plugins || [];\n compiler.options.plugins.push(new DefinePlugin(replacementValues));\n }\n\n // Add component name annotation transform\n if (transformAnnotations?.transform) {\n compiler.options.module = compiler.options.module || {};\n compiler.options.module.rules = compiler.options.module.rules || [];\n compiler.options.module.rules.unshift({\n test: /\\.[jt]sx$/,\n exclude: /node_modules/,\n enforce: 'pre',\n use: [\n {\n loader: COMPONENT_ANNOTATION_LOADER,\n options: {\n transform: transformAnnotations.transform,\n },\n },\n ],\n });\n }\n\n compiler.hooks.afterEmit.tapAsync(\n 'sentry-webpack-plugin',\n (compilation: WebpackCompilation, callback: (err?: Error) => void) => {\n const freeGlobalDependencyOnBuildArtifacts = createDependencyOnBuildArtifacts();\n const upload = createDebugIdUploadFunction({ sentryBuildPluginManager });\n\n const run = async (): Promise => {\n try {\n await sentryBuildPluginManager.createRelease();\n if (sourcemapsEnabled && options.sourcemaps?.disable !== 'disable-upload') {\n const outputPath = compilation.outputOptions.path ?? path.resolve();\n const buildArtifacts = Object.keys(compilation.assets).map(asset => path.join(outputPath, asset));\n await upload(buildArtifacts);\n }\n } finally {\n freeGlobalDependencyOnBuildArtifacts();\n await sentryBuildPluginManager.deleteArtifacts();\n }\n };\n\n run().then(\n () => callback(),\n (err: Error) => callback(err),\n );\n },\n );\n\n if (userOptions._experiments?.forceExitOnBuildCompletion && compiler.options.mode === 'production') {\n compiler.hooks.done.tap('sentry-webpack-plugin', () => {\n setTimeout(() => {\n logger.debug('Exiting process after debug file upload');\n process.exit(0);\n });\n });\n }\n },\n };\n };\n}\n\nexport type SentryWebpackPluginOptions = Options & {\n _experiments?: Options['_experiments'] & {\n /**\n * If enabled, the webpack plugin will exit the build process after the build completes.\n * Use this with caution, as it will terminate the process.\n *\n * More information: https://github.com/getsentry/sentry-javascript-bundler-plugins/issues/345\n *\n * @default false\n */\n forceExitOnBuildCompletion?: boolean;\n };\n};\n"],"names":["createRequire","path","fileURLToPath","isJsFile","stampDebugId","createSentryBuildPluginManager","CodeInjection","generateReleaseInjectorCode","generateModuleMetadataInjectorCode","createComponentNameAnnotateHooks","stringToUUID","randomUUID","getDebugIdSnippet","createDebugIdUploadFunction"],"mappings":"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"}