{"version":3,"file":"index.mjs","sources":["../src/rollup-bundle-analysis/rollupBundleAnalysisPlugin.ts","../src/index.ts"],"sourcesContent":["import path from \"node:path\";\nimport {\n  type Asset,\n  type Chunk,\n  type Module,\n  type BundleAnalysisUploadPlugin,\n  red,\n  createRollupAsset,\n} from \"@codecov/bundler-plugin-core\";\n\nexport const rollupBundleAnalysisPlugin: 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  rollup: {\n    async generateBundle(this, options, bundle) {\n      // TODO - remove this once we hard fail on not having a bundle name\n      // don't need to do anything if the bundle name is not present or empty\n      if (!output.bundleName || output.bundleName === \"\") {\n        red(\"Bundle name is not present or empty. Skipping upload.\");\n        return;\n      }\n\n      output.setBundleName(output.originalBundleName);\n      if (options.name && options.name !== \"\") {\n        output.setBundleName(`${output.bundleName}-${options.name}`);\n      }\n\n      const format = options.format === \"es\" ? \"esm\" : options.format;\n      // append bundle output format to bundle name\n      output.setBundleName(`${output.bundleName}-${format}`);\n\n      const cwd = process.cwd();\n      const assets: Asset[] = [];\n      const chunks: Chunk[] = [];\n      const moduleByFileName = new Map<string, Module>();\n      const items = Object.values(bundle);\n      const customOptions = {\n        moduleOriginalSize: false,\n        ...options,\n      };\n\n      let assetFormatString = \"\";\n      if (typeof customOptions.assetFileNames === \"string\") {\n        assetFormatString = customOptions.assetFileNames;\n      }\n\n      let chunkFormatString = \"\";\n      if (typeof customOptions.chunkFileNames === \"string\") {\n        chunkFormatString = customOptions.chunkFileNames;\n      }\n\n      let counter = 0;\n      await Promise.all(\n        items.map(async (item) => {\n          if (item?.type === \"asset\") {\n            const fileName = item?.fileName ?? \"\";\n            if (path.extname(fileName) === \".map\") {\n              return;\n            }\n\n            const asset = await createRollupAsset({\n              fileName: fileName,\n              source: item.source,\n              formatString: assetFormatString,\n              metaFramework: output.metaFramework,\n            });\n            assets.push(asset);\n          } else if (item?.type === \"chunk\") {\n            const fileName = item?.fileName ?? \"\";\n            if (path.extname(fileName) === \".map\") {\n              return;\n            }\n\n            const asset = await createRollupAsset({\n              fileName,\n              source: item.code,\n              formatString: chunkFormatString,\n              metaFramework: output.metaFramework,\n            });\n            assets.push(asset);\n\n            const chunkId = item?.name ?? \"\";\n            const uniqueId = `${counter}-${chunkId}`;\n\n            chunks.push({\n              id: chunkId,\n              uniqueId: uniqueId,\n              entry: item?.isEntry,\n              initial: item?.isDynamicEntry,\n              files: [fileName],\n              names: [item?.name],\n              dynamicImports: item?.dynamicImports ?? [],\n            });\n\n            const moduleEntries = Object.entries(item?.modules ?? {});\n            for (const [modulePath, moduleInfo] of moduleEntries) {\n              const normalizedModulePath = modulePath.replace(\"\\u0000\", \"\");\n              const relativeModulePath = path.relative(\n                cwd,\n                normalizedModulePath,\n              );\n              const relativeModulePathWithPrefix = relativeModulePath.match(\n                /^\\.\\./,\n              )\n                ? relativeModulePath\n                : `.${path.sep}${relativeModulePath}`;\n\n              // try to grab module already set in map\n              const moduleEntry = moduleByFileName.get(\n                relativeModulePathWithPrefix,\n              );\n\n              // if the modules exists append chunk ids to the grabbed module\n              // else create a new module and create a new entry in the map\n              if (moduleEntry) {\n                moduleEntry.chunkUniqueIds.push(uniqueId);\n              } else {\n                const size = customOptions.moduleOriginalSize\n                  ? moduleInfo.originalLength\n                  : moduleInfo.renderedLength;\n\n                const module: Module = {\n                  name: relativeModulePathWithPrefix,\n                  size: size,\n                  chunkUniqueIds: [uniqueId],\n                };\n\n                moduleByFileName.set(relativeModulePathWithPrefix, module);\n              }\n            }\n            counter += 1;\n          }\n\n          return;\n        }),\n      );\n\n      // grab the modules from the map and convert it to an array\n      const modules = Array.from(moduleByFileName.values());\n\n      output.bundler = {\n        name: \"rollup\",\n        version: this.meta.rollupVersion,\n      };\n      output.assets = assets;\n      output.chunks = chunks;\n      output.modules = modules;\n      output.outputPath = options.dir ?? \"\";\n\n      // only output file if running dry run\n      if (output.dryRun) {\n        this.emitFile({\n          type: \"asset\",\n          fileName: `${output.bundleName}-stats.json`,\n          source: output.bundleStatsToJson(),\n        });\n      }\n    },\n  },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n  type UnpluginOptions,\n  createRollupPlugin,\n  type RollupPlugin,\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 { rollupBundleAnalysisPlugin } from \"./rollup-bundle-analysis/rollupBundleAnalysisPlugin\";\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 codecovRollupPluginFactory = createRollupPlugin<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        rollupBundleAnalysisPlugin({\n          output,\n          pluginName: PLUGIN_NAME,\n          pluginVersion: PLUGIN_VERSION,\n        }),\n      );\n    }\n\n    return plugins;\n  },\n);\n\n// eslint-disable-next-line isaacscript/complete-sentences-jsdoc\n/**\n * Details for the Codecov Rollup plugin.\n *\n * @param {Options} options - See {@link @codecov/bundler-plugin-core!Options | Options} for more\n *        details.\n *\n * @example\n * ```typescript\n * // rollup.config.js\n * import { defineConfig } from \"rollup\";\n * import { codecovRollupPlugin } from \"@codecov/rollup-plugin\";\n *\n * export default defineConfig({\n *   plugins: [\n *     // Put the Codecov rollup plugin after all other plugins\n *     codecovRollupPlugin({\n *       enableBundleAnalysis: true,\n *       bundleName: \"example-rollup-bundle\",\n *       gitService: \"github\",\n *     }),\n *   ],\n * });\n * ```\n */\nexport const codecovRollupPlugin: (options: Options) => RollupPlugin<any>[] =\n  codecovRollupPluginFactory;\n\n/**\n * Do not use this plugin directly. For internal use only.\n *\n * Used to expose the rollup bundle analysis unplugin plugin that can be combined with other plugins\n * to create a single plugin for a given meta-framework.\n *\n * @internal\n */\nexport const _internal_rollupBundleAnalysisPlugin = rollupBundleAnalysisPlugin;\n"],"names":[],"mappings":"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"}