@codecov/webpack-plugin
Version:
Official Codecov Webpack plugin
1 lines • 22.2 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/webpack-bundle-analysis/utils/findFileFormat.ts","../src/webpack-bundle-analysis/utils/processAssets.ts","../src/webpack-bundle-analysis/utils/processChunks.ts","../src/webpack-bundle-analysis/utils/processModules.ts","../src/webpack-bundle-analysis/webpackBundleAnalysisPlugin.ts","../src/index.ts"],"sourcesContent":["const STRIP_CHARS_REGEX = /(\\w|\\[|]|\\/)/g;\n\nexport interface FindFilenameFormatArgs {\n assetName: string;\n filename: string;\n assetModuleFilename: string;\n chunkFilename: string;\n cssFilename: string;\n cssChunkFilename: string;\n}\n\nexport const findFilenameFormat = ({\n assetName,\n filename,\n assetModuleFilename,\n chunkFilename,\n cssFilename,\n cssChunkFilename,\n}: FindFilenameFormatArgs) => {\n const currAssetFormat = assetName.replaceAll(STRIP_CHARS_REGEX, \"\");\n\n if (\n filename !== \"\" &&\n currAssetFormat.includes(filename.replaceAll(STRIP_CHARS_REGEX, \"\"))\n ) {\n return filename;\n }\n\n if (\n chunkFilename !== \"\" &&\n currAssetFormat.includes(chunkFilename.replaceAll(STRIP_CHARS_REGEX, \"\"))\n ) {\n return chunkFilename;\n }\n\n if (\n cssFilename !== \"\" &&\n currAssetFormat.includes(cssFilename.replaceAll(STRIP_CHARS_REGEX, \"\"))\n ) {\n return cssFilename;\n }\n\n if (\n cssChunkFilename !== \"\" &&\n currAssetFormat.includes(cssChunkFilename.replaceAll(STRIP_CHARS_REGEX, \"\"))\n ) {\n return cssChunkFilename;\n }\n\n if (\n assetModuleFilename !== \"\" &&\n currAssetFormat.includes(\n assetModuleFilename.replaceAll(STRIP_CHARS_REGEX, \"\"),\n )\n ) {\n return assetModuleFilename;\n }\n\n return \"\";\n};\n","import path from \"node:path\";\nimport {\n normalizePath,\n type Asset,\n getCompressedSize,\n type MetaFramework,\n} from \"@codecov/bundler-plugin-core\";\nimport { type StatsAsset, type Compilation } from \"webpack\";\nimport { findFilenameFormat } from \"./findFileFormat.ts\";\n\nexport interface ProcessAssetsArgs {\n assets: StatsAsset[];\n compilation: Compilation;\n metaFramework: MetaFramework;\n}\n\nexport const processAssets = async ({\n assets,\n compilation,\n metaFramework,\n}: ProcessAssetsArgs) => {\n const outputOptions = compilation.outputOptions;\n const collectedAssets: Asset[] = [];\n\n const filename =\n typeof outputOptions.filename === \"string\" ? outputOptions.filename : \"\";\n const assetModuleFilename =\n typeof outputOptions.assetModuleFilename === \"string\"\n ? outputOptions.assetModuleFilename\n : \"\";\n const chunkFilename =\n typeof outputOptions.chunkFilename === \"string\"\n ? outputOptions.chunkFilename\n : \"\";\n const cssFilename =\n typeof outputOptions.cssFilename === \"string\"\n ? outputOptions.cssFilename\n : \"\";\n const cssChunkFilename =\n typeof outputOptions.chunkFilename === \"string\"\n ? outputOptions.chunkFilename\n : \"\";\n\n await Promise.all(\n assets.map(async (asset) => {\n const format = findFilenameFormat({\n assetName: asset.name,\n filename,\n assetModuleFilename,\n chunkFilename,\n cssFilename,\n cssChunkFilename,\n });\n\n if (path.extname(asset.name) === \".map\") {\n return;\n }\n\n const currentAsset = compilation.getAsset(asset.name);\n\n let compressedSize = null;\n if (currentAsset) {\n compressedSize = await getCompressedSize({\n fileName: asset.name,\n code: currentAsset.source.source(),\n });\n }\n\n collectedAssets.push({\n name: asset.name,\n size: asset.size,\n gzipSize: compressedSize,\n normalized: normalizePath(asset.name, format, metaFramework),\n });\n }),\n );\n\n return collectedAssets;\n};\n","import { red } from \"@codecov/bundler-plugin-core\";\nimport { type StatsChunk } from \"webpack\";\n\nexport interface ProcessChunksArgs {\n chunks: StatsChunk[];\n chunkIdMap: Map<number | string, string>;\n}\n\nexport const processChunks = ({ chunks, chunkIdMap }: ProcessChunksArgs) => {\n // need a reference of all chunks by their id so we can use it to collect\n // the dynamic imports from the children chunks without having to search\n // through the entire list of chunks every time\n const referenceChunkMapById = new Map<PropertyKey, StatsChunk>();\n chunks.forEach((chunk) => {\n if (chunk.id) {\n referenceChunkMapById.set(chunk.id.toString(), chunk);\n }\n });\n\n return chunks.map((chunk, index) => {\n const chunkId = chunk.id ?? \"\";\n const uniqueId = `${index}-${chunkId}`;\n chunkIdMap.set(chunkId, uniqueId);\n\n const dynamicImports: string[] = [];\n chunk.children?.forEach((child) => {\n const childIdString = child.toString();\n const childChunk = referenceChunkMapById.get(childIdString);\n\n if (!childChunk || !childChunk.files) {\n red(`Child chunk ${childIdString} not found in chunkMap`);\n } else {\n dynamicImports.push(...childChunk.files);\n }\n });\n\n return {\n id: chunk.id?.toString() ?? \"\",\n uniqueId: uniqueId,\n entry: chunk.entry,\n initial: chunk.initial,\n files: chunk.files ?? [],\n names: chunk.names ?? [],\n dynamicImports: dynamicImports,\n };\n });\n};\n","import { type StatsModule } from \"webpack\";\n\nexport interface ProcessChunksArgs {\n modules: StatsModule[];\n chunkIdMap: Map<number | string, string>;\n}\n\nexport const processModules = ({ modules, chunkIdMap }: ProcessChunksArgs) => {\n return modules.map((module) => {\n const chunks = module.chunks ?? [];\n const chunkUniqueIds: string[] = [];\n\n chunks.forEach((chunk) => {\n const chunkUniqueId = chunkIdMap.get(chunk);\n\n if (chunkUniqueId) {\n chunkUniqueIds.push(chunkUniqueId);\n }\n });\n\n return {\n name: module.name ?? \"\",\n size: module.size ?? 0,\n chunkUniqueIds: chunkUniqueIds,\n };\n });\n};\n","import { type BundleAnalysisUploadPlugin } from \"@codecov/bundler-plugin-core\";\nimport { createRequire } from \"node:module\";\nimport type * as TWebpack from \"webpack\";\n\nimport { processAssets, processChunks, processModules } from \"./utils\";\n\nexport const webpackBundleAnalysisPlugin: BundleAnalysisUploadPlugin = ({\n output,\n pluginName,\n pluginVersion,\n}) => ({\n version: output.version,\n name: pluginName,\n pluginVersion,\n buildStart: () => {\n output.start();\n output.setPlugin(pluginName, pluginVersion);\n },\n buildEnd: () => {\n output.end();\n },\n writeBundle: async () => {\n await output.write();\n },\n webpack(compiler) {\n const generatedRequire = createRequire(import.meta.url);\n const webpack = generatedRequire(\"webpack\") as typeof TWebpack;\n\n compiler.hooks.thisCompilation.tap(pluginName, (compilation) => {\n compilation.hooks.processAssets.tapPromise(\n {\n name: pluginName,\n stage: webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT,\n },\n async () => {\n output.setBundleName(output.originalBundleName);\n // Webpack base chunk format options: https://webpack.js.org/configuration/output/#outputchunkformat\n if (typeof compilation.outputOptions.chunkFormat === \"string\") {\n if (compilation.name && compilation.name !== \"\") {\n output.setBundleName(`${output.bundleName}-${compilation.name}`);\n }\n\n let chunkFormat = compilation.outputOptions.chunkFormat;\n if (chunkFormat === \"commonjs\") {\n chunkFormat = \"cjs\";\n } else if (chunkFormat === \"module\") {\n chunkFormat = \"esm\";\n }\n\n output.setBundleName(`${output.bundleName}-${chunkFormat}`);\n }\n\n const compilationStats = compilation.getStats().toJson({\n assets: true,\n chunks: true,\n modules: true,\n builtAt: true,\n hash: true,\n });\n\n output.bundler = {\n name: \"webpack\",\n version: webpack.version,\n };\n\n const outputOptions = compilation.outputOptions;\n const { assets, chunks, modules } = compilationStats;\n\n if (assets) {\n const collectedAssets = await processAssets({\n assets,\n compilation,\n metaFramework: output.metaFramework,\n });\n\n output.assets = collectedAssets;\n }\n\n // need to collect all possible chunk ids beforehand\n // this collection is done in the processChunks function\n const chunkIdMap = new Map<number | string, string>();\n if (chunks) {\n output.chunks = processChunks({ chunks, chunkIdMap });\n }\n\n if (modules) {\n output.modules = processModules({ modules, chunkIdMap });\n }\n\n output.duration = Date.now() - (output.builtAt ?? 0);\n output.outputPath = outputOptions.path ?? \"\";\n\n // only output file if running dry run\n if (output.dryRun) {\n const { RawSource } = webpack.sources;\n compilation.emitAsset(\n `${output.bundleName}-stats.json`,\n new RawSource(output.bundleStatsToJson()),\n );\n }\n },\n );\n });\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n type UnpluginOptions,\n createWebpackPlugin,\n type WebpackPluginInstance,\n} from \"unplugin\";\nimport {\n normalizeOptions,\n type Options,\n checkNodeVersion,\n Output,\n handleErrors,\n createSentryInstance,\n telemetryPlugin,\n} from \"@codecov/bundler-plugin-core\";\n\nimport { webpackBundleAnalysisPlugin } from \"./webpack-bundle-analysis/webpackBundleAnalysisPlugin\";\n\nimport {\n findFilenameFormat,\n processAssets,\n processChunks,\n processModules,\n} from \"./webpack-bundle-analysis/utils\";\n\n// @ts-expect-error this value is being replaced by rollup\nconst PLUGIN_NAME = __PACKAGE_NAME__ as string;\n// @ts-expect-error this value is being replaced by rollup\nconst PLUGIN_VERSION = __PACKAGE_VERSION__ as string;\n\nconst codecovWebpackPluginFactory = createWebpackPlugin<Options, true>(\n (userOptions, unpluginMetaContext) => {\n if (checkNodeVersion(unpluginMetaContext)) {\n return [];\n }\n\n const normalizedOptions = normalizeOptions(userOptions);\n if (!normalizedOptions.success) {\n const { shouldExit } = handleErrors(normalizedOptions);\n\n if (shouldExit) {\n process.exit(1);\n }\n return [];\n }\n\n const plugins: UnpluginOptions[] = [];\n const options = normalizedOptions.options;\n const sentryConfig = createSentryInstance({\n telemetry: options.telemetry,\n isDryRun: options.dryRun,\n pluginName: PLUGIN_NAME,\n pluginVersion: PLUGIN_VERSION,\n options,\n bundler: unpluginMetaContext.framework,\n });\n\n const output = new Output(\n options,\n { metaFramework: unpluginMetaContext.framework },\n sentryConfig,\n );\n\n if (options.enableBundleAnalysis) {\n plugins.push(\n telemetryPlugin({\n sentryClient: sentryConfig.sentryClient,\n sentryScope: sentryConfig.sentryScope,\n telemetry: options.telemetry,\n }),\n webpackBundleAnalysisPlugin({\n output,\n pluginName: PLUGIN_NAME,\n pluginVersion: PLUGIN_VERSION,\n }),\n );\n }\n\n return plugins;\n },\n);\n\n/**\n * Details for the Codecov Webpack plugin.\n *\n * @example\n * ```typescript\n * // webpack.config.js\n * const path = require(\"path\");\n * const { codecovWebpackPlugin } = require(\"@codecov/webpack-plugin\");\n *\n * module.exports = {\n * entry: \"./src/index.js\",\n * mode: \"production\",\n * output: {\n * filename: \"main.js\",\n * path: path.resolve(__dirname, \"dist\"),\n * },\n * plugins: [\n * // Put the Codecov vite plugin after all other plugins\n * codecovWebpackPlugin({\n * enableBundleAnalysis: true,\n * bundleName: \"example-webpack-bundle\",\n * gitService: \"github\",\n * }),\n * ],\n * };\n * ```\n *\n * @see {@link @codecov/bundler-plugin-core!Options | Options} for list of options.\n */\nexport const codecovWebpackPlugin: (options: Options) => WebpackPluginInstance =\n codecovWebpackPluginFactory;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to expose the webpack bundle analysis unplugin plugin that can be combined with other\n * plugins to create a single plugin for a given meta-framework.\n *\n * @internal\n */\nexport const _internal_webpackBundleAnalysisPlugin =\n webpackBundleAnalysisPlugin;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to find the filename format for a given compilation.\n *\n * @internal\n */\nexport const _internal_findFilenameFormat = findFilenameFormat;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to process webpack assets in other plugins.\n *\n * @internal\n */\nexport const _internal_processAssets = processAssets;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to process webpack chunks in other plugins.\n *\n * @internal\n */\nexport const _internal_processChunks = processChunks;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to process webpack modules in other plugins.\n *\n * @internal\n */\nexport const _internal_processModules = processModules;\n"],"names":[],"mappings":"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"}