@anansi/webpack-config
Version:
Production ready webpack for React
202 lines (200 loc) • 21.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.default = getStyleRules;
var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
var _path = _interopRequireDefault(require("path"));
var _postcssPresetEnv = _interopRequireDefault(require("postcss-preset-env"));
var _ramda = require("ramda");
const getCSSLoaders = ({
mode,
target,
cssExtractOptions
}) => {
const miniCssExtractPluginLoader = {
loader: _miniCssExtractPlugin.default.loader,
options: {
emit: !target?.includes?.('node')
}
};
const loaders = [{
loader: require.resolve('css-loader'),
options: mode === 'development' ? {
sourceMap: true,
importLoaders: 1,
modules: {
mode: 'icss'
}
} : {
importLoaders: 1,
modules: {
mode: 'icss'
}
}
}, {
loader: require.resolve('postcss-loader'),
options: {
postcssOptions: {
plugins: [(0, _autoprefixer.default)(), (0, _postcssPresetEnv.default)()]
}
}
}];
return cssExtractOptions === false ? loaders : [miniCssExtractPluginLoader, ...loaders];
};
const getSASSLoaders = ({
sassResources,
sassOptions
}) => {
const loaders = [{
loader: require.resolve('sass-loader'),
options: {
sassOptions
}
}];
if (sassResources) {
loaders.push({
loader: require.resolve('sass-resources-loader'),
options: {
resources: sassResources
}
});
}
return loaders;
};
function getStyleRules({
rootPath,
basePath = 'src',
libraryInclude = (0, _ramda.always)(false),
libraryExclude = (0, _ramda.always)(false),
cssModulesOptions = {},
sassOptions = {
outputStyle: 'expanded'
},
sassResources,
globalStyleDir,
mode,
target,
cssExtractOptions
}) {
const absoluteBasePath = _path.default.join(rootPath, basePath);
const cssLoaders = getCSSLoaders({
mode,
target,
cssExtractOptions
});
const cssModuleLoaders = cssLoaders.map(loader => {
if (/($|\/)css-loader/.test(loader.loader)) {
return {
...loader,
options: {
...loader.options,
modules: {
exportLocalsConvention: 'camelCase',
...(process.env.NODE_ENV === 'testing' ? {
localIdentName: '[name]__[local]'
} : {}),
...cssModulesOptions
}
}
};
}
return loader;
});
// we don't need to find it if they specified the directory
let foundSass = sassOptions?.implementation;
try {
if (!foundSass) foundSass = require.resolve('sass') || require.resolve('sass-embedded');
} catch (e) {
foundSass = sassOptions?.implementation;
if (sassOptions !== false) {
console.warn('`sass` or `sass-embedded` packages not found. SASS cannot be used.');
}
}
const sassLoaders = sassOptions === false || !foundSass ? [] : getSASSLoaders({
sassResources,
sassOptions
});
const excludeCSSProcess = [libraryExclude];
// global styles
if (globalStyleDir !== false) {
const globalStyleRegex = new RegExp(`${globalStyleDir}/`);
excludeCSSProcess.unshift(globalStyleRegex);
}
return {
test: /\.s?css$/i,
oneOf: [
// css modules (local styles)
sassOptions !== false && {
test: /\.scss$/i,
include: [absoluteBasePath, libraryInclude],
exclude: excludeCSSProcess,
use: [...cssModuleLoaders, ...sassLoaders]
},
// css-in-js like linaria do not use css-modules
{
test: /\.wyw-in-js\.css$/i,
include: [absoluteBasePath, libraryInclude],
exclude: excludeCSSProcess,
use: cssLoaders
},
// plain css as css-modules
{
test: /\.css$/i,
include: [absoluteBasePath, /\.storybook/, libraryInclude],
exclude: [...excludeCSSProcess, /\.wyw-in-js\.css$/i],
use: cssModuleLoaders
},
// global styles
globalStyleDir !== false && {
test: sassOptions === false ? /\.css$/i : /\.s?css$/i,
include: [absoluteBasePath],
exclude: [sassOptions === false ? /\.module\.css$/i : /\.module\.s?css$/i, new RegExp(`^((?!(${globalStyleDir}/|node_modules/)).)*$`)],
use: [...cssLoaders, ...sassLoaders],
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true
}, globalStyleDir !== false && {
test: sassOptions === false ? /\.module\.css$/i : /\.module\.s?css$/i,
include: [absoluteBasePath],
exclude: [new RegExp(`^((?!(${globalStyleDir}/|node_modules/)).)*$`)],
use: [...cssModuleLoaders, ...sassLoaders]
},
// css-in-js like linaria do not use css-modules - 3beta.14 and below
{
test: /\.css$/i,
include: [/node_modules\/\.cache/],
exclude: [absoluteBasePath, libraryInclude],
use: cssLoaders
},
// package css
{
test: /\.css$/i,
include: [/node_modules/],
use: cssModuleLoaders.slice(0, -1).map(loader => {
if (/($|\/)css-loader/.test(loader.loader)) {
return {
...loader,
options: {
...loader.options,
modules: {
...loader.options.modules,
auto: true,
...cssModulesOptions
}
}
};
}
return loader;
}),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: !target?.includes?.('node')
}].filter(rule => rule)
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXV0b3ByZWZpeGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbWluaUNzc0V4dHJhY3RQbHVnaW4iLCJfcGF0aCIsIl9wb3N0Y3NzUHJlc2V0RW52IiwiX3JhbWRhIiwiZ2V0Q1NTTG9hZGVycyIsIm1vZGUiLCJ0YXJnZXQiLCJjc3NFeHRyYWN0T3B0aW9ucyIsIm1pbmlDc3NFeHRyYWN0UGx1Z2luTG9hZGVyIiwibG9hZGVyIiwiTWluaUNzc0V4dHJhY3RQbHVnaW4iLCJvcHRpb25zIiwiZW1pdCIsImluY2x1ZGVzIiwibG9hZGVycyIsInJlc29sdmUiLCJzb3VyY2VNYXAiLCJpbXBvcnRMb2FkZXJzIiwibW9kdWxlcyIsInBvc3Rjc3NPcHRpb25zIiwicGx1Z2lucyIsImF1dG9wcmVmaXhlciIsImNzc1ByZXNldEVudiIsImdldFNBU1NMb2FkZXJzIiwic2Fzc1Jlc291cmNlcyIsInNhc3NPcHRpb25zIiwicHVzaCIsInJlc291cmNlcyIsImdldFN0eWxlUnVsZXMiLCJyb290UGF0aCIsImJhc2VQYXRoIiwibGlicmFyeUluY2x1ZGUiLCJhbHdheXMiLCJsaWJyYXJ5RXhjbHVkZSIsImNzc01vZHVsZXNPcHRpb25zIiwib3V0cHV0U3R5bGUiLCJnbG9iYWxTdHlsZURpciIsImFic29sdXRlQmFzZVBhdGgiLCJwYXRoIiwiam9pbiIsImNzc0xvYWRlcnMiLCJjc3NNb2R1bGVMb2FkZXJzIiwibWFwIiwidGVzdCIsImV4cG9ydExvY2Fsc0NvbnZlbnRpb24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJsb2NhbElkZW50TmFtZSIsImZvdW5kU2FzcyIsImltcGxlbWVudGF0aW9uIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwic2Fzc0xvYWRlcnMiLCJleGNsdWRlQ1NTUHJvY2VzcyIsImdsb2JhbFN0eWxlUmVnZXgiLCJSZWdFeHAiLCJ1bnNoaWZ0Iiwib25lT2YiLCJpbmNsdWRlIiwiZXhjbHVkZSIsInVzZSIsInNpZGVFZmZlY3RzIiwic2xpY2UiLCJhdXRvIiwiZmlsdGVyIiwicnVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2Nzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXV0b3ByZWZpeGVyIGZyb20gJ2F1dG9wcmVmaXhlcic7XG5pbXBvcnQgTWluaUNzc0V4dHJhY3RQbHVnaW4gZnJvbSAnbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY3NzUHJlc2V0RW52IGZyb20gJ3Bvc3Rjc3MtcHJlc2V0LWVudic7XG5pbXBvcnQgeyBhbHdheXMgfSBmcm9tICdyYW1kYSc7XG5cbmNvbnN0IGdldENTU0xvYWRlcnMgPSAoeyBtb2RlLCB0YXJnZXQsIGNzc0V4dHJhY3RPcHRpb25zIH0pID0+IHtcbiAgY29uc3QgbWluaUNzc0V4dHJhY3RQbHVnaW5Mb2FkZXIgPSB7XG4gICAgbG9hZGVyOiBNaW5pQ3NzRXh0cmFjdFBsdWdpbi5sb2FkZXIsXG4gICAgb3B0aW9uczogeyBlbWl0OiAhdGFyZ2V0Py5pbmNsdWRlcz8uKCdub2RlJykgfSxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJzID0gW1xuICAgIHtcbiAgICAgIGxvYWRlcjogcmVxdWlyZS5yZXNvbHZlKCdjc3MtbG9hZGVyJyksXG4gICAgICBvcHRpb25zOlxuICAgICAgICBtb2RlID09PSAnZGV2ZWxvcG1lbnQnID9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgICBpbXBvcnRMb2FkZXJzOiAxLFxuICAgICAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgICBtb2RlOiAnaWNzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBpbXBvcnRMb2FkZXJzOiAxLFxuICAgICAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgICBtb2RlOiAnaWNzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgncG9zdGNzcy1sb2FkZXInKSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcG9zdGNzc09wdGlvbnM6IHtcbiAgICAgICAgICBwbHVnaW5zOiBbYXV0b3ByZWZpeGVyKCksIGNzc1ByZXNldEVudigpXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4gY3NzRXh0cmFjdE9wdGlvbnMgPT09IGZhbHNlID8gbG9hZGVycyA6IChcbiAgICAgIFttaW5pQ3NzRXh0cmFjdFBsdWdpbkxvYWRlciwgLi4ubG9hZGVyc11cbiAgICApO1xufTtcblxuY29uc3QgZ2V0U0FTU0xvYWRlcnMgPSAoeyBzYXNzUmVzb3VyY2VzLCBzYXNzT3B0aW9ucyB9KSA9PiB7XG4gIGNvbnN0IGxvYWRlcnMgPSBbXG4gICAge1xuICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ3Nhc3MtbG9hZGVyJyksXG4gICAgICBvcHRpb25zOiB7IHNhc3NPcHRpb25zIH0sXG4gICAgfSxcbiAgXTtcbiAgaWYgKHNhc3NSZXNvdXJjZXMpIHtcbiAgICBsb2FkZXJzLnB1c2goe1xuICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ3Nhc3MtcmVzb3VyY2VzLWxvYWRlcicpLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNvdXJjZXM6IHNhc3NSZXNvdXJjZXMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBsb2FkZXJzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U3R5bGVSdWxlcyh7XG4gIHJvb3RQYXRoLFxuICBiYXNlUGF0aCA9ICdzcmMnLFxuICBsaWJyYXJ5SW5jbHVkZSA9IGFsd2F5cyhmYWxzZSksXG4gIGxpYnJhcnlFeGNsdWRlID0gYWx3YXlzKGZhbHNlKSxcbiAgY3NzTW9kdWxlc09wdGlvbnMgPSB7fSxcbiAgc2Fzc09wdGlvbnMgPSB7IG91dHB1dFN0eWxlOiAnZXhwYW5kZWQnIH0sXG4gIHNhc3NSZXNvdXJjZXMsXG4gIGdsb2JhbFN0eWxlRGlyLFxuICBtb2RlLFxuICB0YXJnZXQsXG4gIGNzc0V4dHJhY3RPcHRpb25zLFxufSkge1xuICBjb25zdCBhYnNvbHV0ZUJhc2VQYXRoID0gcGF0aC5qb2luKHJvb3RQYXRoLCBiYXNlUGF0aCk7XG4gIGNvbnN0IGNzc0xvYWRlcnMgPSBnZXRDU1NMb2FkZXJzKHsgbW9kZSwgdGFyZ2V0LCBjc3NFeHRyYWN0T3B0aW9ucyB9KTtcbiAgY29uc3QgY3NzTW9kdWxlTG9hZGVycyA9IGNzc0xvYWRlcnMubWFwKGxvYWRlciA9PiB7XG4gICAgaWYgKC8oJHxcXC8pY3NzLWxvYWRlci8udGVzdChsb2FkZXIubG9hZGVyKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubG9hZGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLi4ubG9hZGVyLm9wdGlvbnMsXG4gICAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgZXhwb3J0TG9jYWxzQ29udmVudGlvbjogJ2NhbWVsQ2FzZScsXG4gICAgICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0aW5nJyA/XG4gICAgICAgICAgICAgIHsgbG9jYWxJZGVudE5hbWU6ICdbbmFtZV1fX1tsb2NhbF0nIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgLi4uY3NzTW9kdWxlc09wdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBsb2FkZXI7XG4gIH0pO1xuICAvLyB3ZSBkb24ndCBuZWVkIHRvIGZpbmQgaXQgaWYgdGhleSBzcGVjaWZpZWQgdGhlIGRpcmVjdG9yeVxuICBsZXQgZm91bmRTYXNzID0gc2Fzc09wdGlvbnM/LmltcGxlbWVudGF0aW9uO1xuICB0cnkge1xuICAgIGlmICghZm91bmRTYXNzKVxuICAgICAgZm91bmRTYXNzID0gcmVxdWlyZS5yZXNvbHZlKCdzYXNzJykgfHwgcmVxdWlyZS5yZXNvbHZlKCdzYXNzLWVtYmVkZGVkJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBmb3VuZFNhc3MgPSBzYXNzT3B0aW9ucz8uaW1wbGVtZW50YXRpb247XG4gICAgaWYgKHNhc3NPcHRpb25zICE9PSBmYWxzZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnYHNhc3NgIG9yIGBzYXNzLWVtYmVkZGVkYCBwYWNrYWdlcyBub3QgZm91bmQuIFNBU1MgY2Fubm90IGJlIHVzZWQuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNhc3NMb2FkZXJzID1cbiAgICBzYXNzT3B0aW9ucyA9PT0gZmFsc2UgfHwgIWZvdW5kU2FzcyA/XG4gICAgICBbXVxuICAgIDogZ2V0U0FTU0xvYWRlcnMoeyBzYXNzUmVzb3VyY2VzLCBzYXNzT3B0aW9ucyB9KTtcbiAgY29uc3QgZXhjbHVkZUNTU1Byb2Nlc3MgPSBbbGlicmFyeUV4Y2x1ZGVdO1xuXG4gIC8vIGdsb2JhbCBzdHlsZXNcbiAgaWYgKGdsb2JhbFN0eWxlRGlyICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGdsb2JhbFN0eWxlUmVnZXggPSBuZXcgUmVnRXhwKGAke2dsb2JhbFN0eWxlRGlyfS9gKTtcbiAgICBleGNsdWRlQ1NTUHJvY2Vzcy51bnNoaWZ0KGdsb2JhbFN0eWxlUmVnZXgpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdGVzdDogL1xcLnM/Y3NzJC9pLFxuICAgIG9uZU9mOiBbXG4gICAgICAvLyBjc3MgbW9kdWxlcyAobG9jYWwgc3R5bGVzKVxuICAgICAgc2Fzc09wdGlvbnMgIT09IGZhbHNlICYmIHtcbiAgICAgICAgdGVzdDogL1xcLnNjc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFthYnNvbHV0ZUJhc2VQYXRoLCBsaWJyYXJ5SW5jbHVkZV0sXG4gICAgICAgIGV4Y2x1ZGU6IGV4Y2x1ZGVDU1NQcm9jZXNzLFxuICAgICAgICB1c2U6IFsuLi5jc3NNb2R1bGVMb2FkZXJzLCAuLi5zYXNzTG9hZGVyc10sXG4gICAgICB9LFxuICAgICAgLy8gY3NzLWluLWpzIGxpa2UgbGluYXJpYSBkbyBub3QgdXNlIGNzcy1tb2R1bGVzXG4gICAgICB7XG4gICAgICAgIHRlc3Q6IC9cXC53eXctaW4tanNcXC5jc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFthYnNvbHV0ZUJhc2VQYXRoLCBsaWJyYXJ5SW5jbHVkZV0sXG4gICAgICAgIGV4Y2x1ZGU6IGV4Y2x1ZGVDU1NQcm9jZXNzLFxuICAgICAgICB1c2U6IGNzc0xvYWRlcnMsXG4gICAgICB9LFxuICAgICAgLy8gcGxhaW4gY3NzIGFzIGNzcy1tb2R1bGVzXG4gICAgICB7XG4gICAgICAgIHRlc3Q6IC9cXC5jc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFthYnNvbHV0ZUJhc2VQYXRoLCAvXFwuc3Rvcnlib29rLywgbGlicmFyeUluY2x1ZGVdLFxuICAgICAgICBleGNsdWRlOiBbLi4uZXhjbHVkZUNTU1Byb2Nlc3MsIC9cXC53eXctaW4tanNcXC5jc3MkL2ldLFxuICAgICAgICB1c2U6IGNzc01vZHVsZUxvYWRlcnMsXG4gICAgICB9LFxuICAgICAgLy8gZ2xvYmFsIHN0eWxlc1xuICAgICAgZ2xvYmFsU3R5bGVEaXIgIT09IGZhbHNlICYmIHtcbiAgICAgICAgdGVzdDogc2Fzc09wdGlvbnMgPT09IGZhbHNlID8gL1xcLmNzcyQvaSA6IC9cXC5zP2NzcyQvaSxcbiAgICAgICAgaW5jbHVkZTogW2Fic29sdXRlQmFzZVBhdGhdLFxuICAgICAgICBleGNsdWRlOiBbXG4gICAgICAgICAgc2Fzc09wdGlvbnMgPT09IGZhbHNlID8gL1xcLm1vZHVsZVxcLmNzcyQvaSA6IC9cXC5tb2R1bGVcXC5zP2NzcyQvaSxcbiAgICAgICAgICBuZXcgUmVnRXhwKGBeKCg/ISgke2dsb2JhbFN0eWxlRGlyfS98bm9kZV9tb2R1bGVzLykpLikqJGApLFxuICAgICAgICBdLFxuICAgICAgICB1c2U6IFsuLi5jc3NMb2FkZXJzLCAuLi5zYXNzTG9hZGVyc10sXG4gICAgICAgIC8vIERvbid0IGNvbnNpZGVyIENTUyBpbXBvcnRzIGRlYWQgY29kZSBldmVuIGlmIHRoZVxuICAgICAgICAvLyBjb250YWluaW5nIHBhY2thZ2UgY2xhaW1zIHRvIGhhdmUgbm8gc2lkZSBlZmZlY3RzLlxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3aGVuIHdlYnBhY2sgYWRkcyBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgZm9yIHRoaXMuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2lzc3Vlcy82NTcxXG4gICAgICAgIHNpZGVFZmZlY3RzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGdsb2JhbFN0eWxlRGlyICE9PSBmYWxzZSAmJiB7XG4gICAgICAgIHRlc3Q6IHNhc3NPcHRpb25zID09PSBmYWxzZSA/IC9cXC5tb2R1bGVcXC5jc3MkL2kgOiAvXFwubW9kdWxlXFwucz9jc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFthYnNvbHV0ZUJhc2VQYXRoXSxcbiAgICAgICAgZXhjbHVkZTogW25ldyBSZWdFeHAoYF4oKD8hKCR7Z2xvYmFsU3R5bGVEaXJ9L3xub2RlX21vZHVsZXMvKSkuKSokYCldLFxuICAgICAgICB1c2U6IFsuLi5jc3NNb2R1bGVMb2FkZXJzLCAuLi5zYXNzTG9hZGVyc10sXG4gICAgICB9LFxuICAgICAgLy8gY3NzLWluLWpzIGxpa2UgbGluYXJpYSBkbyBub3QgdXNlIGNzcy1tb2R1bGVzIC0gM2JldGEuMTQgYW5kIGJlbG93XG4gICAgICB7XG4gICAgICAgIHRlc3Q6IC9cXC5jc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFsvbm9kZV9tb2R1bGVzXFwvXFwuY2FjaGUvXSxcbiAgICAgICAgZXhjbHVkZTogW2Fic29sdXRlQmFzZVBhdGgsIGxpYnJhcnlJbmNsdWRlXSxcbiAgICAgICAgdXNlOiBjc3NMb2FkZXJzLFxuICAgICAgfSxcbiAgICAgIC8vIHBhY2thZ2UgY3NzXG4gICAgICB7XG4gICAgICAgIHRlc3Q6IC9cXC5jc3MkL2ksXG4gICAgICAgIGluY2x1ZGU6IFsvbm9kZV9tb2R1bGVzL10sXG4gICAgICAgIHVzZTogY3NzTW9kdWxlTG9hZGVycy5zbGljZSgwLCAtMSkubWFwKGxvYWRlciA9PiB7XG4gICAgICAgICAgaWYgKC8oJHxcXC8pY3NzLWxvYWRlci8udGVzdChsb2FkZXIubG9hZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ubG9hZGVyLFxuICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgLi4ubG9hZGVyLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgICAgICAgLi4ubG9hZGVyLm9wdGlvbnMubW9kdWxlcyxcbiAgICAgICAgICAgICAgICAgIGF1dG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAuLi5jc3NNb2R1bGVzT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIERvbid0IGNvbnNpZGVyIENTUyBpbXBvcnRzIGRlYWQgY29kZSBldmVuIGlmIHRoZVxuICAgICAgICAvLyBjb250YWluaW5nIHBhY2thZ2UgY2xhaW1zIHRvIGhhdmUgbm8gc2lkZSBlZmZlY3RzLlxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3aGVuIHdlYnBhY2sgYWRkcyBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgZm9yIHRoaXMuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2lzc3Vlcy82NTcxXG4gICAgICAgIHNpZGVFZmZlY3RzOiAhdGFyZ2V0Py5pbmNsdWRlcz8uKCdub2RlJyksXG4gICAgICB9LFxuICAgIF0uZmlsdGVyKHJ1bGUgPT4gcnVs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Q0QwQixHQUFHLEVBQUUsQ0FBQyxHQUFHdEIsVUFBVSxFQUFFLEdBQUdjLFdBQVcsQ0FBQztNQUNwQztNQUNBO01BQ0E7TUFDQTtNQUNBUyxXQUFXLEVBQUU7SUFDZixDQUFDLEVBQ0QzQixjQUFjLEtBQUssS0FBSyxJQUFJO01BQzFCTyxJQUFJLEVBQUVsQixXQUFXLEtBQUssS0FBSyxHQUFHLGlCQUFpQixHQUFHLG1CQUFtQjtNQUNyRW1DLE9BQU8sRUFBRSxDQUFDdkIsZ0JBQWdCLENBQUM7TUFDM0J3QixPQUFPLEVBQUUsQ0FBQyxJQUFJSixNQUFNLENBQUMsU0FBU3JCLGNBQWMsdUJBQXVCLENBQUMsQ0FBQztNQUNyRTBCLEdBQUcsRUFBRSxDQUFDLEdBQUdyQixnQkFBZ0IsRUFBRSxHQUFHYSxXQUFXO0lBQzNDLENBQUM7SUFDRDtJQUNBO01BQ0VYLElBQUksRUFBRSxTQUFTO01BQ2ZpQixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztNQUNsQ0MsT0FBTyxFQUFFLENBQUN4QixnQkFBZ0IsRUFBRU4sY0FBYyxDQUFDO01BQzNDK0IsR0FBRyxFQUFFdEI7SUFDUCxDQUFDO0lBQ0Q7SUFDQTtNQUNFRyxJQUFJLEVBQUUsU0FBUztNQUNmaUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO01BQ3pCRSxHQUFHLEVBQUVyQixnQkFBZ0IsQ0FBQ3VCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RCLEdBQUcsQ0FBQ2pDLE1BQU0sSUFBSTtRQUMvQyxJQUFJLGtCQUFrQixDQUFDa0MsSUFBSSxDQUFDbEMsTUFBTSxDQUFDQSxNQUFNLENBQUMsRUFBRTtVQUMxQyxPQUFPO1lBQ0wsR0FBR0EsTUFBTTtZQUNURSxPQUFPLEVBQUU7Y0FDUCxHQUFHRixNQUFNLENBQUNFLE9BQU87Y0FDakJPLE9BQU8sRUFBRTtnQkFDUCxHQUFHVCxNQUFNLENBQUNFLE9BQU8sQ0FBQ08sT0FBTztnQkFDekIrQyxJQUFJLEVBQUUsSUFBSTtnQkFDVixHQUFHL0I7Y0FDTDtZQUNGO1VBQ0YsQ0FBQztRQUNIO1FBQ0EsT0FBT3pCLE1BQU07TUFDZixDQUFDLENBQUM7TUFDRjtNQUNBO01BQ0E7TUFDQTtNQUNBc0QsV0FBVyxFQUFFLENBQUN6RCxNQUFNLEVBQUVPLFFBQVEsR0FBRyxNQUFNO0lBQ3pDLENBQUMsQ0FDRixDQUFDcUQsTUFBTSxDQUFDQyxJQUFJLElBQUlBLElBQUk7RUFDdkIsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119