UNPKG

@storybook/addon-coverage

Version:

Tools to support code coverage in Storybook

122 lines (116 loc) 3.79 kB
import { __require } from "./chunk-Y6FXYEAI.mjs"; // src/constants.ts var commonExtensions = [".js", ".cjs", ".mjs", ".ts", ".cts", ".mts"]; var defaultExtensions = [ ...commonExtensions, ".tsx", ".jsx", ".vue", ".svelte" ]; var testFileExtensions = defaultExtensions.map((extension) => extension.slice(1)).join(","); var configFileExtensions = commonExtensions.map((extension) => extension.slice(1)).join(","); var defaultExclude = [ "**/node_modules/**", ".storybook/**", "coverage/**", "packages/*/test{,s}/**", "**/*.d.ts", "**/*.mock.*", "test{,s}/**", `test{,-*}.{${testFileExtensions}}`, `**/*{.,-}{spec,story,stories,types}.{${testFileExtensions}}`, "**/__tests__/**", "**/*-entry.js", /* Exclude common development tool configuration files */ `**/{ava,babel,nyc}.config.{${configFileExtensions}}`, `**/{jest,vitest}.config.{${configFileExtensions}}`, `**/{karma,rollup,webpack,vite}.config.{${configFileExtensions}}`, `**/.{eslint,mocha}rc.{${configFileExtensions}}` ]; // src/webpack5-exclude.ts import TestExclude from "test-exclude"; // src/nyc-config.ts import { loadNycConfig } from "@istanbuljs/load-nyc-config"; async function getNycConfig(opts = {}) { const cwd = opts.cwd ?? process.cwd(); return loadNycConfig({ cwd, nycrcPath: opts.nycrcPath }); } // src/webpack5-exclude.ts async function createTestExclude(opts = {}) { const { nycrcPath, include, exclude, extension } = opts; const cwd = opts.cwd ?? process.cwd(); const nycConfig = await getNycConfig({ cwd, nycrcPath }); return new TestExclude({ cwd, include: include ?? nycConfig.include, exclude: exclude ?? nycConfig.exclude ?? defaultExclude, extension: extension ?? nycConfig.extension ?? defaultExtensions, excludeNodeModules: true }); } // src/preset.ts import { createInstrumenter } from "istanbul-lib-instrument"; var viteFinal = async (viteConfig, options) => { const viteIstanbulPlugin = (await import("vite-plugin-istanbul")).default; const istanbul = viteIstanbulPlugin ?? viteIstanbulPlugin.default; console.log("[addon-coverage] Adding istanbul plugin to Vite config"); viteConfig.build = viteConfig.build || {}; viteConfig.build.sourcemap = true; viteConfig.plugins ||= []; viteConfig.plugins.push( istanbul({ forceBuildInstrument: options.configType === "PRODUCTION", ...options.istanbul, include: Array.from(options.istanbul?.include || []), exclude: [ options.configDir + "/**", ...defaultExclude, ...Array.from(options.istanbul?.exclude || []) ], extension: options.istanbul?.extension || defaultExtensions }) ); return viteConfig; }; var defaultOptions = { preserveComments: true, produceSourceMap: true, autoWrap: true, esModules: true, compact: false }; var webpackFinal = async (webpackConfig, options) => { webpackConfig.module.rules ||= []; const nycConfig = await getNycConfig(options.istanbul); const extensions = options.istanbul?.extension ?? nycConfig.extension ?? defaultExtensions; console.log("[addon-coverage] Adding istanbul loader to Webpack config"); const testExclude = await createTestExclude(options.istanbul); let instrumenterOptions = Object.assign(defaultOptions, options.istanbul); let instrumenter = createInstrumenter(instrumenterOptions); webpackConfig.module.rules.unshift({ test: new RegExp(extensions?.join("|").replace(/\./g, "\\.")), loader: __require.resolve("./loader/webpack5-istanbul-loader"), enforce: "post", options: { ...options.istanbul ?? {}, instrumenter }, include: (modulePath) => testExclude.shouldInstrument(modulePath) }); return webpackConfig; }; export { viteFinal, webpackFinal };