UNPKG

@anansi/webpack-config

Version:
202 lines (200 loc) 21.9 kB
"use strict"; 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