{"version":3,"file":"index.cjs","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":["red","processAssets","processChunks","processModules","createWebpackPlugin","checkNodeVersion","normalizeOptions","handleErrors","createSentryInstance","Output","telemetryPlugin"],"mappings":"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"}