@anansi/webpack-config
Version:
Production ready webpack for React
111 lines (106 loc) • 15.4 kB
JavaScript
;
exports.__esModule = true;
exports.default = makeStorybookConfigGenerator;
function makeStorybookConfigGenerator(baseConfig) {
return ({
config: storybookConfig,
mode
}) => {
const env = mode.toLowerCase();
const argv = {
mode: env
};
const envConfig = typeof baseConfig === 'function' ? baseConfig(env, argv) : baseConfig;
// we need some of their plugins (https://github.com/storybooks/storybook/pull/1775/files)
const storybookPlugins = storybookConfig.plugins.filter(plugin =>
// exclude ones we configure
!['DefinePlugin', 'EnvironmentPlugin', 'ReactRefreshPlugin',
//'HotModuleReplacementPlugin', since storybook 6.4 we need this again
'CaseSensitivePathsPlugin',
// this makes process redundant
'ProvidePlugin'].includes(plugin.constructor.name));
const basePlugins = envConfig.plugins.filter(plugin =>
// defer to storybook's version in this case
// TODO: try to simply copy configuration and reuse our HtmlWebpackPlugin
![
// storybook runs this build after building the storybook chrome ui, so we don't want to clear that out
// they also clean the directory in that stage anyway
'CleanWebpackPlugin', 'HtmlWebpackPlugin', 'ErrorOverlayPlugin', 'StatsPlugin',
// storybook puts .cache in node_modules so this prevents infinite loop
'WatchMissingNodeModulesPlugin'].includes(plugin.constructor.name));
// included rules:
// - .mdx
// - acorn-jsx node_modules rule
// - any storybook specific loaders
const isStorybookSpecific = loader => /@storybook\/[^/-]+-loader\//.test(loader);
const storybookRules = storybookConfig.module.rules.filter(rule => {
if (rule.test?.test?.('test.mdx') || rule.test?.test?.('test.story.mdx')) return true;
if (rule.include instanceof RegExp && rule.include.test('node_modules/acorn-jsx/')) return true;
if (rule.loader) {
return isStorybookSpecific(rule.loader);
} else if (rule.use) {
return rule.use.find(loadConfig => {
const loader = typeof loadConfig === 'string' ? loadConfig : loadConfig.loader;
return isStorybookSpecific(loader);
});
} else {
return false;
}
});
// this transforms storybook node_modules files...not sure why this isn't done at publish time
const libraryRule = storybookConfig.module.rules[1];
// don't run this on our project source
libraryRule.exclude = [envConfig?.resolve?.modules?.[0]];
// storybook doesn't like us setting this very much.
delete envConfig.devServer;
const config = {
watchOptions: storybookConfig.watchOptions,
...envConfig,
resolveLoader: {
...envConfig.resolveLoader,
plugins: [...(envConfig.resolveLoader?.plugins ?? []), ...(storybookConfig.resolveLoader?.plugins ?? [])]
},
resolve: {
...storybookConfig.resolve,
modules: envConfig.resolve.modules,
extensions: envConfig.resolve.extensions,
alias: {
...envConfig.resolve.alias,
...storybookConfig.resolve.alias
},
plugins: [...(envConfig.resolve?.plugins ?? []), ...(storybookConfig.resolve?.plugins ?? [])]
},
entry: storybookConfig.entry,
output: storybookConfig.output,
plugins: [...storybookPlugins, ...basePlugins],
module: {
...envConfig.module,
rules: [
// js rules (worker and normal)
{
test: envConfig.module.rules[0].test,
exclude: /storybook-stories.js/,
rules: [envConfig.module.rules[0]]
},
// storybook node_module compiles
libraryRule,
// the rest of our rules
...envConfig.module.rules.slice(1),
// typically these are various plugins
...storybookRules]
}
};
if (envConfig.cache) {
if (typeof envConfig.cache === 'object' && envConfig.cache.type === 'filesystem') {
config.cache = {
...envConfig.cache,
version: envConfig.cache.version + 'storybook'
};
} else {
config.cache = envConfig.cache;
}
}
return config;
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWtlU3Rvcnlib29rQ29uZmlnR2VuZXJhdG9yIiwiYmFzZUNvbmZpZyIsImNvbmZpZyIsInN0b3J5Ym9va0NvbmZpZyIsIm1vZGUiLCJlbnYiLCJ0b0xvd2VyQ2FzZSIsImFyZ3YiLCJlbnZDb25maWciLCJzdG9yeWJvb2tQbHVnaW5zIiwicGx1Z2lucyIsImZpbHRlciIsInBsdWdpbiIsImluY2x1ZGVzIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiYmFzZVBsdWdpbnMiLCJpc1N0b3J5Ym9va1NwZWNpZmljIiwibG9hZGVyIiwidGVzdCIsInN0b3J5Ym9va1J1bGVzIiwibW9kdWxlIiwicnVsZXMiLCJydWxlIiwiaW5jbHVkZSIsIlJlZ0V4cCIsInVzZSIsImZpbmQiLCJsb2FkQ29uZmlnIiwibGlicmFyeVJ1bGUiLCJleGNsdWRlIiwicmVzb2x2ZSIsIm1vZHVsZXMiLCJkZXZTZXJ2ZXIiLCJ3YXRjaE9wdGlvbnMiLCJyZXNvbHZlTG9hZGVyIiwiZXh0ZW5zaW9ucyIsImFsaWFzIiwiZW50cnkiLCJvdXRwdXQiLCJzbGljZSIsImNhY2hlIiwidHlwZSIsInZlcnNpb24iXSwic291cmNlcyI6WyIuLi9zcmMvc3Rvcnlib29rLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VTdG9yeWJvb2tDb25maWdHZW5lcmF0b3IoYmFzZUNvbmZpZykge1xuICByZXR1cm4gKHsgY29uZmlnOiBzdG9yeWJvb2tDb25maWcsIG1vZGUgfSkgPT4ge1xuICAgIGNvbnN0IGVudiA9IG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhcmd2ID0geyBtb2RlOiBlbnYgfTtcbiAgICBjb25zdCBlbnZDb25maWcgPVxuICAgICAgdHlwZW9mIGJhc2VDb25maWcgPT09ICdmdW5jdGlvbicgPyBiYXNlQ29uZmlnKGVudiwgYXJndikgOiBiYXNlQ29uZmlnO1xuXG4gICAgLy8gd2UgbmVlZCBzb21lIG9mIHRoZWlyIHBsdWdpbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9yeWJvb2tzL3N0b3J5Ym9vay9wdWxsLzE3NzUvZmlsZXMpXG4gICAgY29uc3Qgc3Rvcnlib29rUGx1Z2lucyA9IHN0b3J5Ym9va0NvbmZpZy5wbHVnaW5zLmZpbHRlcihcbiAgICAgIHBsdWdpbiA9PlxuICAgICAgICAvLyBleGNsdWRlIG9uZXMgd2UgY29uZmlndXJlXG4gICAgICAgICFbXG4gICAgICAgICAgJ0RlZmluZVBsdWdpbicsXG4gICAgICAgICAgJ0Vudmlyb25tZW50UGx1Z2luJyxcbiAgICAgICAgICAnUmVhY3RSZWZyZXNoUGx1Z2luJyxcbiAgICAgICAgICAvLydIb3RNb2R1bGVSZXBsYWNlbWVudFBsdWdpbicsIHNpbmNlIHN0b3J5Ym9vayA2LjQgd2UgbmVlZCB0aGlzIGFnYWluXG4gICAgICAgICAgJ0Nhc2VTZW5zaXRpdmVQYXRoc1BsdWdpbicsXG4gICAgICAgICAgLy8gdGhpcyBtYWtlcyBwcm9jZXNzIHJlZHVuZGFudFxuICAgICAgICAgICdQcm92aWRlUGx1Z2luJyxcbiAgICAgICAgXS5pbmNsdWRlcyhwbHVnaW4uY29uc3RydWN0b3IubmFtZSksXG4gICAgKTtcbiAgICBjb25zdCBiYXNlUGx1Z2lucyA9IGVudkNvbmZpZy5wbHVnaW5zLmZpbHRlcihcbiAgICAgIHBsdWdpbiA9PlxuICAgICAgICAvLyBkZWZlciB0byBzdG9yeWJvb2sncyB2ZXJzaW9uIGluIHRoaXMgY2FzZVxuICAgICAgICAvLyBUT0RPOiB0cnkgdG8gc2ltcGx5IGNvcHkgY29uZmlndXJhdGlvbiBhbmQgcmV1c2Ugb3VyIEh0bWxXZWJwYWNrUGx1Z2luXG4gICAgICAgICFbXG4gICAgICAgICAgLy8gc3Rvcnlib29rIHJ1bnMgdGhpcyBidWlsZCBhZnRlciBidWlsZGluZyB0aGUgc3Rvcnlib29rIGNocm9tZSB1aSwgc28gd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGF0IG91dFxuICAgICAgICAgIC8vIHRoZXkgYWxzbyBjbGVhbiB0aGUgZGlyZWN0b3J5IGluIHRoYXQgc3RhZ2UgYW55d2F5XG4gICAgICAgICAgJ0NsZWFuV2VicGFja1BsdWdpbicsXG4gICAgICAgICAgJ0h0bWxXZWJwYWNrUGx1Z2luJyxcbiAgICAgICAgICAnRXJyb3JPdmVybGF5UGx1Z2luJyxcbiAgICAgICAgICAnU3RhdHNQbHVnaW4nLFxuICAgICAgICAgIC8vIHN0b3J5Ym9vayBwdXRzIC5jYWNoZSBpbiBub2RlX21vZHVsZXMgc28gdGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wXG4gICAgICAgICAgJ1dhdGNoTWlzc2luZ05vZGVNb2R1bGVzUGx1Z2luJyxcbiAgICAgICAgXS5pbmNsdWRlcyhwbHVnaW4uY29uc3RydWN0b3IubmFtZSksXG4gICAgKTtcblxuICAgIC8vIGluY2x1ZGVkIHJ1bGVzOlxuICAgIC8vIC0gLm1keFxuICAgIC8vIC0gYWNvcm4tanN4IG5vZGVfbW9kdWxlcyBydWxlXG4gICAgLy8gLSBhbnkgc3Rvcnlib29rIHNwZWNpZmljIGxvYWRlcnNcbiAgICBjb25zdCBpc1N0b3J5Ym9va1NwZWNpZmljID0gbG9hZGVyID0+XG4gICAgICAvQHN0b3J5Ym9va1xcL1teLy1dKy1sb2FkZXJcXC8vLnRlc3QobG9hZGVyKTtcbiAgICBjb25zdCBzdG9yeWJvb2tSdWxlcyA9IHN0b3J5Ym9va0NvbmZpZy5tb2R1bGUucnVsZXMuZmlsdGVyKHJ1bGUgPT4ge1xuICAgICAgaWYgKHJ1bGUudGVzdD8udGVzdD8uKCd0ZXN0Lm1keCcpIHx8IHJ1bGUudGVzdD8udGVzdD8uKCd0ZXN0LnN0b3J5Lm1keCcpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgcnVsZS5pbmNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICAgIHJ1bGUuaW5jbHVkZS50ZXN0KCdub2RlX21vZHVsZXMvYWNvcm4tanN4LycpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHJ1bGUubG9hZGVyKSB7XG4gICAgICAgIHJldHVybiBpc1N0b3J5Ym9va1NwZWNpZmljKHJ1bGUubG9hZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS51c2UpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUudXNlLmZpbmQobG9hZENvbmZpZyA9PiB7XG4gICAgICAgICAgY29uc3QgbG9hZGVyID1cbiAgICAgICAgICAgIHR5cGVvZiBsb2FkQ29uZmlnID09PSAnc3RyaW5nJyA/IGxvYWRDb25maWcgOiBsb2FkQ29uZmlnLmxvYWRlcjtcbiAgICAgICAgICByZXR1cm4gaXNTdG9yeWJvb2tTcGVjaWZpYyhsb2FkZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHRoaXMgdHJhbnNmb3JtcyBzdG9yeWJvb2sgbm9kZV9tb2R1bGVzIGZpbGVzLi4ubm90IHN1cmUgd2h5IHRoaXMgaXNuJ3QgZG9uZSBhdCBwdWJsaXNoIHRpbWVcbiAgICBjb25zdCBsaWJyYXJ5UnVsZSA9IHN0b3J5Ym9va0NvbmZpZy5tb2R1bGUucnVsZXNbMV07XG4gICAgLy8gZG9uJ3QgcnVuIHRoaXMgb24gb3VyIHByb2plY3Qgc291cmNlXG4gICAgbGlicmFyeVJ1bGUuZXhjbHVkZSA9IFtlbnZDb25maWc/LnJlc29sdmU/Lm1vZHVsZXM/LlswXV07XG5cbiAgICAvLyBzdG9yeWJvb2sgZG9lc24ndCBsaWtlIHVzIHNldHRpbmcgdGhpcyB2ZXJ5IG11Y2guXG4gICAgZGVsZXRlIGVudkNvbmZpZy5kZXZTZXJ2ZXI7XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICB3YXRjaE9wdGlvbnM6IHN0b3J5Ym9va0NvbmZpZy53YXRjaE9wdGlvbnMsXG4gICAgICAuLi5lbnZDb25maWcsXG4gICAgICByZXNvbHZlTG9hZGVyOiB7XG4gICAgICAgIC4uLmVudkNvbmZpZy5yZXNvbHZlTG9hZGVyLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgLi4uKGVudkNvbmZpZy5yZXNvbHZlTG9hZGVyPy5wbHVnaW5zID8/IFtdKSxcbiAgICAgICAgICAuLi4oc3Rvcnlib29rQ29uZmlnLnJlc29sdmVMb2FkZXI/LnBsdWdpbnMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgLi4uc3Rvcnlib29rQ29uZmlnLnJlc29sdmUsXG4gICAgICAgIG1vZHVsZXM6IGVudkNvbmZpZy5yZXNvbHZlLm1vZHVsZXMsXG4gICAgICAgIGV4dGVuc2lvbnM6IGVudkNvbmZpZy5yZXNvbHZlLmV4dGVuc2lvbnMsXG4gICAgICAgIGFsaWFzOiB7IC4uLmVudkNvbmZpZy5yZXNvbHZlLmFsaWFzLCAuLi5zdG9yeWJvb2tDb25maWcucmVzb2x2ZS5hbGlhcyB9LFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgLi4uKGVudkNvbmZpZy5yZXNvbHZlPy5wbHVnaW5zID8/IFtdKSxcbiAgICAgICAgICAuLi4oc3Rvcnlib29rQ29uZmlnLnJlc29sdmU/LnBsdWdpbnMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSxcblxuICAgICAgZW50cnk6IHN0b3J5Ym9va0NvbmZpZy5lbnRyeSxcbiAgICAgIG91dHB1dDogc3Rvcnlib29rQ29uZmlnLm91dHB1dCxcbiAgICAgIHBsdWdpbnM6IFsuLi5zdG9yeWJvb2tQbHVnaW5zLCAuLi5iYXNlUGx1Z2luc10sXG4gICAgICBtb2R1bGU6IHtcbiAgICAgICAgLi4uZW52Q29uZmlnLm1vZHVsZSxcbiAgICAgICAgcnVsZXM6IFtcbiAgICAgICAgICAvLyBqcyBydWxlcyAod29ya2VyIGFuZCBub3JtYWwpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVzdDogZW52Q29uZmlnLm1vZHVsZS5ydWxlc1swXS50ZXN0LFxuICAgICAgICAgICAgZXhjbHVkZTogL3N0b3J5Ym9vay1zdG9yaWVzLmpzLyxcbiAgICAgICAgICAgIHJ1bGVzOiBbZW52Q29uZmlnLm1vZHVsZS5ydWxlc1swXV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBzdG9yeWJvb2sgbm9kZV9tb2R1bGUgY29tcGlsZXNcbiAgICAgICAgICBsaWJyYXJ5UnVsZSxcbiAgICAgICAgICAvLyB0aGUgcmVzdCBvZiBvdXIgcnVsZXNcbiAgICAgICAgICAuLi5lbnZDb25maWcubW9kdWxlLnJ1bGVzLnNsaWNlKDEpLFxuICAgICAgICAgIC8vIHR5cGljYWxseSB0aGVzZSBhcmUgdmFyaW91cyBwbHVnaW5zXG4gICAgICAgICAgLi4uc3Rvcnlib29rUnVsZXMsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKGVudkNvbmZpZy5jYWNoZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZW52Q29uZmlnLmNhY2hlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBlbnZDb25maWcuY2FjaGUudHlwZSA9PT0gJ2ZpbGVzeXN0ZW0nXG4gICAgICApIHtcbiAgICAgICAgY29uZmlnLmNhY2hlID0ge1xuICAgICAgICAgIC4uLmVudkNvbmZpZy5jYWNoZSxcbiAgICAgICAgICB2ZXJzaW9uOiBlbnZDb25maWcuY2FjaGUudmVyc2lvbiArICdzdG9yeWJvb2snLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmlnLmNhY2hlID0gZW52Q29uZmlnLmNhY2hlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsNEJBQTRCQSxDQUFDQyxVQUFVLEVBQUU7RUFDL0QsT0FBTyxDQUFDO0lBQUVDLE1BQU0sRUFBRUMsZUFBZTtJQUFFQztFQUFLLENBQUMsS0FBSztJQUM1QyxNQUFNQyxHQUFHLEdBQUdELElBQUksQ0FBQ0UsV0FBVyxDQUFDLENBQUM7SUFDOUIsTUFBTUMsSUFBSSxHQUFHO01BQUVILElBQUksRUFBRUM7SUFBSSxDQUFDO0lBQzFCLE1BQU1HLFNBQVMsR0FDYixPQUFPUCxVQUFVLEtBQUssVUFBVSxHQUFH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Q0FBQ3VCLE9BQU8sQ0FBQ0ssVUFBVTtRQUN4Q0MsS0FBSyxFQUFFO1VBQUUsR0FBRzdCLFNBQVMsQ0FBQ3VCLE9BQU8sQ0FBQ00sS0FBSztVQUFFLEdBQUdsQyxlQUFlLENBQUM0QixPQUFPLENBQUNNO1FBQU0sQ0FBQztRQUN2RTNCLE9BQU8sRUFBRSxDQUNQLElBQUlGLFNBQVMsQ0FBQ3VCLE9BQU8sRUFBRXJCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFDckMsSUFBSVAsZUFBZSxDQUFDNEIsT0FBTyxFQUFFckIsT0FBTyxJQUFJLEVBQUUsQ0FBQztNQUUvQyxDQUFDO01BRUQ0QixLQUFLLEVBQUVuQyxlQUFlLENBQUNtQyxLQUFLO01BQzVCQyxNQUFNLEVBQUVwQyxlQUFlLENBQUNvQyxNQUFNO01BQzlCN0IsT0FBTyxFQUFFLENBQUMsR0FBR0QsZ0JBQWdCLEVBQUUsR0FBR08sV0FBVyxDQUFDO01BQzlDSyxNQUFNLEVBQUU7UUFDTixHQUFHYixTQUFTLENBQUNhLE1BQU07UUFDbkJDLEtBQUssRUFBRTtRQUNMO1FBQ0E7VUFDRUgsSUFBSSxFQUFFWCxTQUFTLENBQUNhLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxJQUFJO1VBQ3BDVyxPQUFPLEVBQUUsc0JBQXNCO1VBQy9CUixLQUFLLEVBQUUsQ0FBQ2QsU0FBUyxDQUFDYSxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNEO1FBQ0FPLFdBQVc7UUFDWDtRQUNBLEdBQUdyQixTQUFTLENBQUNhLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDa0IsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQztRQUNBLEdBQUdwQixjQUFjO01BRXJCO0lBQ0YsQ0FBQztJQUNELElBQUlaLFNBQVMsQ0FBQ2lDLEtBQUssRUFBRTtNQUNuQixJQUNFLE9BQU9qQyxTQUFTLENBQUNpQyxLQUFLLEtBQUssUUFBUSxJQUNuQ2pDLFNBQVMsQ0FBQ2lDLEtBQUssQ0FBQ0MsSUFBSSxLQUFLLFlBQVksRUFDckM7UUFDQXhDLE1BQU0sQ0FBQ3VDLEtBQUssR0FBRztVQUNiLEdBQUdqQyxTQUFTLENBQUNpQyxLQUFLO1VBQ2xCRSxPQUFPLEVBQUVuQyxTQUFTLENBQUNpQyxLQUFLLENBQUNFLE9BQU8sR0FBRztRQUNyQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ0x6QyxNQUFNLENBQUN1QyxLQUFLLEdBQUdqQyxTQUFTLENBQUNpQyxLQUFLO01BQ2hDO0lBQ0Y7SUFDQSxPQUFPdkMsTUFBTTtFQUNmLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==