@storybook/addon-coverage
Version:
Tools to support code coverage in Storybook
50 lines (47 loc) • 2.47 kB
JavaScript
import { defaultExclude, defaultExtensions } from "./constants";
import { createTestExclude } from "./webpack5-exclude";
import { getNycConfig } from "./nyc-config";
import { createInstrumenter } from "istanbul-lib-instrument";
export const viteFinal = async (viteConfig, options) => {
var _options$istanbul, _options$istanbul2, _options$istanbul3;
const istanbul = require("vite-plugin-istanbul");
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 = options.istanbul) === null || _options$istanbul === void 0 ? void 0 : _options$istanbul.include) || []),
exclude: [options.configDir + "/**", ...defaultExclude, ...Array.from(((_options$istanbul2 = options.istanbul) === null || _options$istanbul2 === void 0 ? void 0 : _options$istanbul2.exclude) || [])],
extension: ((_options$istanbul3 = options.istanbul) === null || _options$istanbul3 === void 0 ? void 0 : _options$istanbul3.extension) || defaultExtensions
}));
return viteConfig;
};
const defaultOptions = {
preserveComments: true,
produceSourceMap: true,
autoWrap: true,
esModules: true,
compact: false
};
export const webpackFinal = async (webpackConfig, options) => {
var _options$istanbul4;
webpackConfig.module.rules ||= [];
const nycConfig = await getNycConfig(options.istanbul);
const extensions = ((_options$istanbul4 = options.istanbul) === null || _options$istanbul4 === void 0 ? void 0 : _options$istanbul4.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 === null || extensions === void 0 ? void 0 : extensions.join("|").replace(/\./g, "\\.")),
loader: require.resolve("./loader/webpack5-istanbul-loader"),
enforce: "post",
options: { ...(options.istanbul ?? {}),
instrumenter
},
include: modulePath => testExclude.shouldInstrument(modulePath)
});
return webpackConfig;
};