UNPKG

@codecov/rollup-plugin

Version:

Official Codecov Rollup plugin

1 lines 14.9 kB
{"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":";;;;AAUO,MAAM,6BAAyD,CAAC;AAAA,EACrE,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AACF,CAAO,MAAA;AAAA,EACL,SAAS,MAAO,CAAA,OAAA;AAAA,EAChB,IAAM,EAAA,UAAA;AAAA,EACN,aAAA;AAAA,EACA,YAAY,MAAM;AAChB,IAAA,MAAA,CAAO,KAAM,EAAA,CAAA;AACb,IAAO,MAAA,CAAA,SAAA,CAAU,YAAY,aAAa,CAAA,CAAA;AAAA,GAC5C;AAAA,EACA,UAAU,MAAM;AACd,IAAA,MAAA,CAAO,GAAI,EAAA,CAAA;AAAA,GACb;AAAA,EACA,aAAa,YAAY;AACvB,IAAA,MAAM,OAAO,KAAM,EAAA,CAAA;AAAA,GACrB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,MAAM,cAAqB,CAAA,OAAA,EAAS,MAAQ,EAAA;AAG1C,MAAA,IAAI,CAAC,MAAA,CAAO,UAAc,IAAA,MAAA,CAAO,eAAe,EAAI,EAAA;AAClD,QAAA,GAAA,CAAI,uDAAuD,CAAA,CAAA;AAC3D,QAAA,OAAA;AAAA,OACF;AAEA,MAAO,MAAA,CAAA,aAAA,CAAc,OAAO,kBAAkB,CAAA,CAAA;AAC9C,MAAA,IAAI,OAAQ,CAAA,IAAA,IAAQ,OAAQ,CAAA,IAAA,KAAS,EAAI,EAAA;AACvC,QAAA,MAAA,CAAO,cAAc,CAAG,EAAA,MAAA,CAAO,UAAU,CAAI,CAAA,EAAA,OAAA,CAAQ,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,OAC7D;AAEA,MAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,MAAW,KAAA,IAAA,GAAO,QAAQ,OAAQ,CAAA,MAAA,CAAA;AAEzD,MAAA,MAAA,CAAO,cAAc,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,MAAM,CAAE,CAAA,CAAA,CAAA;AAErD,MAAM,MAAA,GAAA,GAAM,QAAQ,GAAI,EAAA,CAAA;AACxB,MAAA,MAAM,SAAkB,EAAC,CAAA;AACzB,MAAA,MAAM,SAAkB,EAAC,CAAA;AACzB,MAAM,MAAA,gBAAA,uBAAuB,GAAoB,EAAA,CAAA;AACjD,MAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAClC,MAAA,MAAM,aAAgB,GAAA;AAAA,QACpB,kBAAoB,EAAA,KAAA;AAAA,QACpB,GAAG,OAAA;AAAA,OACL,CAAA;AAEA,MAAA,IAAI,iBAAoB,GAAA,EAAA,CAAA;AACxB,MAAI,IAAA,OAAO,aAAc,CAAA,cAAA,KAAmB,QAAU,EAAA;AACpD,QAAA,iBAAA,GAAoB,aAAc,CAAA,cAAA,CAAA;AAAA,OACpC;AAEA,MAAA,IAAI,iBAAoB,GAAA,EAAA,CAAA;AACxB,MAAI,IAAA,OAAO,aAAc,CAAA,cAAA,KAAmB,QAAU,EAAA;AACpD,QAAA,iBAAA,GAAoB,aAAc,CAAA,cAAA,CAAA;AAAA,OACpC;AAEA,MAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AACd,MAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,QACZ,KAAA,CAAM,GAAI,CAAA,OAAO,IAAS,KAAA;AACxB,UAAI,IAAA,IAAA,EAAM,SAAS,OAAS,EAAA;AAC1B,YAAM,MAAA,QAAA,GAAW,MAAM,QAAY,IAAA,EAAA,CAAA;AACnC,YAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,KAAM,MAAQ,EAAA;AACrC,cAAA,OAAA;AAAA,aACF;AAEA,YAAM,MAAA,KAAA,GAAQ,MAAM,iBAAkB,CAAA;AAAA,cACpC,QAAA;AAAA,cACA,QAAQ,IAAK,CAAA,MAAA;AAAA,cACb,YAAc,EAAA,iBAAA;AAAA,cACd,eAAe,MAAO,CAAA,aAAA;AAAA,aACvB,CAAA,CAAA;AACD,YAAA,MAAA,CAAO,KAAK,KAAK,CAAA,CAAA;AAAA,WACnB,MAAA,IAAW,IAAM,EAAA,IAAA,KAAS,OAAS,EAAA;AACjC,YAAM,MAAA,QAAA,GAAW,MAAM,QAAY,IAAA,EAAA,CAAA;AACnC,YAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,KAAM,MAAQ,EAAA;AACrC,cAAA,OAAA;AAAA,aACF;AAEA,YAAM,MAAA,KAAA,GAAQ,MAAM,iBAAkB,CAAA;AAAA,cACpC,QAAA;AAAA,cACA,QAAQ,IAAK,CAAA,IAAA;AAAA,cACb,YAAc,EAAA,iBAAA;AAAA,cACd,eAAe,MAAO,CAAA,aAAA;AAAA,aACvB,CAAA,CAAA;AACD,YAAA,MAAA,CAAO,KAAK,KAAK,CAAA,CAAA;AAEjB,YAAM,MAAA,OAAA,GAAU,MAAM,IAAQ,IAAA,EAAA,CAAA;AAC9B,YAAA,MAAM,QAAW,GAAA,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAA;AAEtC,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACV,EAAI,EAAA,OAAA;AAAA,cACJ,QAAA;AAAA,cACA,OAAO,IAAM,EAAA,OAAA;AAAA,cACb,SAAS,IAAM,EAAA,cAAA;AAAA,cACf,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,cAChB,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,cAClB,cAAA,EAAgB,IAAM,EAAA,cAAA,IAAkB,EAAC;AAAA,aAC1C,CAAA,CAAA;AAED,YAAA,MAAM,gBAAgB,MAAO,CAAA,OAAA,CAAQ,IAAM,EAAA,OAAA,IAAW,EAAE,CAAA,CAAA;AACxD,YAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,CAAA,IAAK,aAAe,EAAA;AACpD,cAAA,MAAM,oBAAuB,GAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,EAAU,EAAE,CAAA,CAAA;AAC5D,cAAA,MAAM,qBAAqB,IAAK,CAAA,QAAA;AAAA,gBAC9B,GAAA;AAAA,gBACA,oBAAA;AAAA,eACF,CAAA;AACA,cAAA,MAAM,+BAA+B,kBAAmB,CAAA,KAAA;AAAA,gBACtD,OAAA;AAAA,kBAEE,kBACA,GAAA,CAAA,CAAA,EAAI,IAAK,CAAA,GAAG,GAAG,kBAAkB,CAAA,CAAA,CAAA;AAGrC,cAAA,MAAM,cAAc,gBAAiB,CAAA,GAAA;AAAA,gBACnC,4BAAA;AAAA,eACF,CAAA;AAIA,cAAA,IAAI,WAAa,EAAA;AACf,gBAAY,WAAA,CAAA,cAAA,CAAe,KAAK,QAAQ,CAAA,CAAA;AAAA,eACnC,MAAA;AACL,gBAAA,MAAM,IAAO,GAAA,aAAA,CAAc,kBACvB,GAAA,UAAA,CAAW,iBACX,UAAW,CAAA,cAAA,CAAA;AAEf,gBAAA,MAAM,MAAiB,GAAA;AAAA,kBACrB,IAAM,EAAA,4BAAA;AAAA,kBACN,IAAA;AAAA,kBACA,cAAA,EAAgB,CAAC,QAAQ,CAAA;AAAA,iBAC3B,CAAA;AAEA,gBAAiB,gBAAA,CAAA,GAAA,CAAI,8BAA8B,MAAM,CAAA,CAAA;AAAA,eAC3D;AAAA,aACF;AACA,YAAW,OAAA,IAAA,CAAA,CAAA;AAAA,WACb;AAEA,UAAA,OAAA;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAGA,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,gBAAA,CAAiB,QAAQ,CAAA,CAAA;AAEpD,MAAA,MAAA,CAAO,OAAU,GAAA;AAAA,QACf,IAAM,EAAA,QAAA;AAAA,QACN,OAAA,EAAS,KAAK,IAAK,CAAA,aAAA;AAAA,OACrB,CAAA;AACA,MAAA,MAAA,CAAO,MAAS,GAAA,MAAA,CAAA;AAChB,MAAA,MAAA,CAAO,MAAS,GAAA,MAAA,CAAA;AAChB,MAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,MAAO,MAAA,CAAA,UAAA,GAAa,QAAQ,GAAO,IAAA,EAAA,CAAA;AAGnC,MAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,QAAA,IAAA,CAAK,QAAS,CAAA;AAAA,UACZ,IAAM,EAAA,OAAA;AAAA,UACN,QAAA,EAAU,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,WAAA,CAAA;AAAA,UAC9B,MAAA,EAAQ,OAAO,iBAAkB,EAAA;AAAA,SAClC,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;;AC3JA,MAAM,WAAc,GAAA,wBAAA,CAAA;AAEpB,MAAM,cAAiB,GAAA,OAAA,CAAA;AAEvB,MAAM,0BAA6B,GAAA,kBAAA;AAAA,EACjC,CAAC,aAAa,mBAAwB,KAAA;AACpC,IAAI,IAAA,gBAAA,CAAiB,mBAAmB,CAAG,EAAA;AACzC,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAM,MAAA,iBAAA,GAAoB,iBAAiB,WAAW,CAAA,CAAA;AACtD,IAAI,IAAA,CAAC,kBAAkB,OAAS,EAAA;AAC9B,MAAA,MAAM,EAAE,UAAA,EAAe,GAAA,YAAA,CAAa,iBAAiB,CAAA,CAAA;AAErD,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,OAChB;AACA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAA,MAAM,UAA6B,EAAC,CAAA;AACpC,IAAA,MAAM,UAAU,iBAAkB,CAAA,OAAA,CAAA;AAClC,IAAA,MAAM,eAAe,oBAAqB,CAAA;AAAA,MACxC,WAAW,OAAQ,CAAA,SAAA;AAAA,MACnB,UAAU,OAAQ,CAAA,MAAA;AAAA,MAClB,UAAY,EAAA,WAAA;AAAA,MACZ,aAAe,EAAA,cAAA;AAAA,MACf,OAAA;AAAA,MACA,SAAS,mBAAoB,CAAA,SAAA;AAAA,KAC9B,CAAA,CAAA;AAED,IAAA,MAAM,SAAS,IAAI,MAAA;AAAA,MACjB,OAAA;AAAA,MACA,EAAE,aAAe,EAAA,mBAAA,CAAoB,SAAU,EAAA;AAAA,MAC/C,YAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,QAAQ,oBAAsB,EAAA;AAChC,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,eAAgB,CAAA;AAAA,UACd,cAAc,YAAa,CAAA,YAAA;AAAA,UAC3B,aAAa,YAAa,CAAA,WAAA;AAAA,UAC1B,WAAW,OAAQ,CAAA,SAAA;AAAA,SACpB,CAAA;AAAA,QACD,0BAA2B,CAAA;AAAA,UACzB,MAAA;AAAA,UACA,UAAY,EAAA,WAAA;AAAA,UACZ,aAAe,EAAA,cAAA;AAAA,SAChB,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AA2BO,MAAM,mBACX,GAAA,2BAAA;AAUK,MAAM,oCAAuC,GAAA;;;;"}