@codecov/nextjs-webpack-plugin
Version:
Official Codecov NextJS (Webpack) plugin
1 lines • 11.4 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/nextjs-webpack-bundle-analysis/nextJSWebpackBundleAnalysisPlugin.ts","../src/index.ts"],"sourcesContent":["import { red, type ExtendedBAUploadPlugin } from \"@codecov/bundler-plugin-core\";\nimport type * as TWebpack from \"webpack\";\n\nimport {\n _internal_processAssets as processAssets,\n _internal_processChunks as processChunks,\n _internal_processModules as processModules,\n} from \"@codecov/webpack-plugin\";\n\nexport const nextJSWebpackBundleAnalysisPlugin: ExtendedBAUploadPlugin<{\n webpack: typeof TWebpack | null;\n}> = ({ output, pluginName, pluginVersion, options }) => ({\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 compiler.hooks.thisCompilation.tap(pluginName, (compilation) => {\n if (!options.webpack) {\n red(\n \"Unable to run bundle analysis, Webpack wasn't passed successfully.\",\n );\n return;\n }\n\n compilation.hooks.processAssets.tapPromise(\n {\n name: pluginName,\n stage: options.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT,\n },\n async () => {\n if (!options.webpack) {\n red(\n \"Unable to run bundle analysis, Webpack wasn't passed successfully.\",\n );\n return;\n }\n\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: options.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 } = options.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 type * as webpack from \"webpack\";\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 { nextJSWebpackBundleAnalysisPlugin } from \"./nextjs-webpack-bundle-analysis/nextJSWebpackBundleAnalysisPlugin.ts\";\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\ninterface NextPluginOptions extends Options {\n webpack: typeof webpack | null;\n}\n\nconst codecovNextJSWebpackPluginFactory = createWebpackPlugin<\n NextPluginOptions,\n 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 metaFramework: \"nextjs\",\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 nextJSWebpackBundleAnalysisPlugin({\n output,\n options: { webpack: userOptions.webpack },\n pluginName: PLUGIN_NAME,\n pluginVersion: PLUGIN_VERSION,\n }),\n );\n }\n\n return plugins;\n});\n\n/**\n * Details for the Codecov NextJS (Webpack) plugin.\n *\n * @example\n * ```typescript\n * // next.config.mjs\n * import { codecovNextJSWebpackPlugin } from \"@codecov/nextjs-webpack-plugin\";\n *\n * export default {\n * webpack: (config, options) => {\n * config.plugins.push(\n * codecovNextJSWebpackPlugin({\n * enableBundleAnalysis: true,\n * bundleName: \"example-nextjs-webpack-bundle\",\n * uploadToken: process.env.CODECOV_TOKEN,\n * webpack: options.webpack,\n * }),\n * );\n *\n * return config;\n * },\n * };\n * ```\n *\n * @param options.webpack - pass in the webpack instance from the NextJS configuration.\n *\n * @see {@link @codecov/bundler-plugin-core!Options | Options} for list of options.\n */\nexport const codecovNextJSWebpackPlugin: (\n options: NextPluginOptions,\n) => WebpackPluginInstance = codecovNextJSWebpackPluginFactory;\n"],"names":["processAssets","processChunks","processModules"],"mappings":"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"}