@anansi/webpack-config
Version:
Production ready webpack for React
225 lines (224 loc) • 28.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.default = makeBaseConfig;
exports.getStyleRules = void 0;
var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
var _path = _interopRequireDefault(require("path"));
var _tsconfigPathsWebpackPlugin = _interopRequireDefault(require("tsconfig-paths-webpack-plugin"));
var _webpackStatsPlugin = require("webpack-stats-plugin");
var _constants = require("./constants");
exports.ROOT_PATH = _constants.ROOT_PATH;
var _generateBabelLoader = require("./generateBabelLoader");
var _nodePolyfill = require("./node-polyfill");
var _package = require("../../package.json");
var _css = _interopRequireDefault(require("./css"));
exports.getStyleRules = _css.default;
function makeBaseConfig({
rootPath,
basePath,
libraryInclude,
libraryExclude,
babelRoot,
buildDir,
mode,
manifestFilename,
babelLoader: babelLoaderOptions,
extraJsLoaders,
inJSOptions,
tsconfigPathsOptions,
svgoOptions,
svgrOptions,
globalStyleDir,
nohash,
argv,
env,
cssExtractOptions,
library
}) {
const WEBPACK_PUBLIC_HOST = process.env.WEBPACK_PUBLIC_HOST || '';
const WEBPACK_PUBLIC_PATH = process.env.WEBPACK_PUBLIC_PATH || '/';
const modules = [_path.default.join(rootPath, basePath), 'node_modules'];
if (globalStyleDir) {
modules.splice(1, 0, _path.default.join(rootPath, basePath, globalStyleDir));
}
const resolve = {
modules,
extensions: ['.ts', '.tsx', '.mts', '.cts', '...'],
extensionAlias: {
'.js': ['.js', '.ts', '.tsx', '.jsx'],
'.mjs': ['.mjs', '.mts'],
'.cjs': ['.cjs', '.cts']
},
fallback: _nodePolyfill.NODE_ALIAS,
plugins: tsconfigPathsOptions !== false ? [new _tsconfigPathsWebpackPlugin.default(tsconfigPathsOptions)] : []
};
const mainBabelLoader = (0, _generateBabelLoader.generateBabelLoader)({
rootPath,
babelRoot,
target: argv?.target,
mode,
babelLoaderOptions,
library
});
const inJSBabelOptions = {
...mainBabelLoader.options
};
delete inJSBabelOptions.cacheDirectory;
delete inJSBabelOptions.cacheIdentifier;
delete inJSBabelOptions.cacheCompression;
if (inJSOptions !== false) {
if (inJSOptions === undefined) {
inJSOptions = {
sourceMap: mode !== 'production'
};
}
extraJsLoaders = [{
loader: require.resolve('@wyw-in-js/webpack-loader'),
options: {
// `resolveOptions` was dropped in https://github.com/callstack/linaria/pull/1001 as it uses webpack directly
//resolveOptions: { ...resolve },
babelOptions: inJSBabelOptions,
...inJSOptions
}
}, ...extraJsLoaders];
}
const plugins = [new _webpackStatsPlugin.StatsWriterPlugin({
filename: manifestFilename,
stats: {
chunkModules: false,
source: false,
chunks: false,
modules: false,
assets: true
}
})];
if (cssExtractOptions !== false) {
plugins.push(new _miniCssExtractPlugin.default({
filename: mode !== 'production' | nohash ? '[name].css' : '[name].[contenthash].css',
chunkFilename: mode !== 'production' | nohash ? '[name].css' : '[name].[contenthash].css',
...cssExtractOptions
}));
}
const assetModuleFilename = nohash || mode !== 'production' ? '[name].[ext][query]' : '[contenthash].[ext][query]';
const config = {
context: rootPath,
entry: {
[env?.name || 'App']: [env?.entrypath || `./${basePath}`]
},
output: {
path: _path.default.join(rootPath, buildDir),
publicPath: WEBPACK_PUBLIC_HOST + WEBPACK_PUBLIC_PATH,
filename: nohash || mode !== 'production' ? '[name].js' : '[name]-[contenthash].js',
chunkFilename: nohash || mode !== 'production' ? '[name].chunk.js' : '[name]-[contenthash].chunk.js',
assetModuleFilename,
globalObject: "(typeof self !== 'undefined' ? self : this)",
// this improves performance and makes this compatible across node 16 and 18 at the same time.
hashFunction: 'xxhash64'
},
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename] // you may omit this when your CLI automatically adds it
},
version: JSON.stringify({
version: _package.version,
target: argv?.target,
mode,
env: [process.env.NODE_ENV, process.env.BROWSERSLIST_ENV].join(',')
})
},
plugins: plugins,
module: {
rules: [{
test: /\.(t|j)sx?$/,
include: [_path.default.join(rootPath, basePath), _path.default.join(rootPath, 'stories'), /\.storybook/, libraryInclude],
exclude: libraryExclude,
oneOf: [/* TODO(deprecated): Drop this once people have a chance to migrate */
{
test: /\.worker\.(t|j)s$/,
include: [new RegExp(basePath), libraryInclude],
use: [{
loader: require.resolve('worker-loader'),
options: {
inline: 'fallback',
filename: nohash ? '[name].js' : mode === 'production' ? '[name]-[contenthash].js' : '[name].js'
}
}, (0, _generateBabelLoader.generateBabelLoader)({
rootPath,
babelRoot,
target: argv?.target,
mode,
babelLoaderOptions,
noHotReload: true
})]
}, {
test: /\.(t|j)sx?$/,
use: [mainBabelLoader, ...extraJsLoaders].filter(l => l)
}]
}, {
test: /\.html$/,
use: [{
loader: require.resolve('html-loader')
}]
}, {
test: /\.(md|txt)$/,
type: 'asset/source'
}, {
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
oneOf: [{
issuer: /\.(j|t)sx?$/,
use: [{
loader: require.resolve('@svgr/webpack'),
options: {
svgoConfig: svgoOptions,
...svgrOptions
}
}, {
loader: require.resolve('file-loader'),
options: {
name: nohash || mode !== 'production' ? '[name].[ext][query]' : '[md5:contenthash:base64:8].[ext][query]'
}
}],
type: 'javascript/auto'
},
// for non-js files always use file-loader
{
type: 'asset',
generator: {
emit: !argv?.target?.includes?.('node')
}
}]
}, {
test: /\.(apng|png|jpg|gif|ico|webp|avif|cur|ani|otf|eot|woff2|woff|ttf)(\?v=\d+\.\d+\.\d+)?$/,
type: 'asset',
generator: {
emit: !argv?.target?.includes?.('node')
}
}, {
test: /\.(pdf|mp4|webm|wav|mp3|m4a|aac|oga)(\?v=\d+\.\d+\.\d+)?$/,
type: 'asset/resource',
generator: {
emit: !argv?.target?.includes?.('node')
}
}]
},
resolve,
devtool: 'source-map',
stats: {
children: false,
chunks: false,
excludeAssets: [/\.map/]
}
};
if (env?.name) config.name = env.name;
if (process.env.WEBPACK_NO_CACHE === true || process.env.WEBPACK_NO_CACHE === 'true' || process.env.WEBPACK_CACHE === 'none') {
delete config.cache;
} else if (process.env.WEBPACK_CACHE === 'memory') {
config.cache = true;
} else if (process.env.WEBPACK_CACHE === 'filesystem') {
config.cache.type = 'filesystem';
}
return config;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWluaUNzc0V4dHJhY3RQbHVnaW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX3RzY29uZmlnUGF0aHNXZWJwYWNrUGx1Z2luIiwiX3dlYnBhY2tTdGF0c1BsdWdpbiIsIl9jb25zdGFudHMiLCJleHBvcnRzIiwiUk9PVF9QQVRIIiwiX2dlbmVyYXRlQmFiZWxMb2FkZXIiLCJfbm9kZVBvbHlmaWxsIiwiX3BhY2thZ2UiLCJfY3NzIiwiZ2V0U3R5bGVSdWxlcyIsImRlZmF1bHQiLCJtYWtlQmFzZUNvbmZpZyIsInJvb3RQYXRoIiwiYmFzZVBhdGgiLCJsaWJyYXJ5SW5jbHVkZSIsImxpYnJhcnlFeGNsdWRlIiwiYmFiZWxSb290IiwiYnVpbGREaXIiLCJtb2RlIiwibWFuaWZlc3RGaWxlbmFtZSIsImJhYmVsTG9hZGVyIiwiYmFiZWxMb2FkZXJPcHRpb25zIiwiZXh0cmFKc0xvYWRlcnMiLCJpbkpTT3B0aW9ucyIsInRzY29uZmlnUGF0aHNPcHRpb25zIiwic3Znb09wdGlvbnMiLCJzdmdyT3B0aW9ucyIsImdsb2JhbFN0eWxlRGlyIiwibm9oYXNoIiwiYXJndiIsImVudiIsImNzc0V4dHJhY3RPcHRpb25zIiwibGlicmFyeSIsIldFQlBBQ0tfUFVCTElDX0hPU1QiLCJwcm9jZXNzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIm1vZHVsZXMiLCJwYXRoIiwiam9pbiIsInNwbGljZSIsInJlc29sdmUiLCJleHRlbnNpb25zIiwiZXh0ZW5zaW9uQWxpYXMiLCJmYWxsYmFjayIsIk5PREVfQUxJQVMiLCJwbHVnaW5zIiwiVHNjb25maWdQYXRoc1BsdWdpbiIsIm1haW5CYWJlbExvYWRlciIsImdlbmVyYXRlQmFiZWxMb2FkZXIiLCJ0YXJnZXQiLCJpbkpTQmFiZWxPcHRpb25zIiwib3B0aW9ucyIsImNhY2hlRGlyZWN0b3J5IiwiY2FjaGVJZGVudGlmaWVyIiwiY2FjaGVDb21wcmVzc2lvbiIsInVuZGVmaW5lZCIsInNvdXJjZU1hcCIsImxvYWRlciIsImJhYmVsT3B0aW9ucyIsIlN0YXRzV3JpdGVyUGx1Z2luIiwiZmlsZW5hbWUiLCJzdGF0cyIsImNodW5rTW9kdWxlcyIsInNvdXJjZSIsImNodW5rcyIsImFzc2V0cyIsInB1c2giLCJNaW5pQ3NzRXh0cmFjdFBsdWdpbiIsImNodW5rRmlsZW5hbWUiLCJhc3NldE1vZHVsZUZpbGVuYW1lIiwiY29uZmlnIiwiY29udGV4dCIsImVudHJ5IiwibmFtZSIsImVudHJ5cGF0aCIsIm91dHB1dCIsInB1YmxpY1BhdGgiLCJnbG9iYWxPYmplY3QiLCJoYXNoRnVuY3Rpb24iLCJjYWNoZSIsInR5cGUiLCJidWlsZERlcGVuZGVuY2llcyIsIl9fZmlsZW5hbWUiLCJ2ZXJzaW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsIk5PREVfRU5WIiwiQlJPV1NFUlNMSVNUX0VOViIsIm1vZHVsZSIsInJ1bGVzIiwidGVzdCIsImluY2x1ZGUiLCJleGNsdWRlIiwib25lT2YiLCJSZWdFeHAiLCJ1c2UiLCJpbmxpbmUiLCJub0hvdFJlbG9hZCIsImZpbHRlciIsImwiLCJpc3N1ZXIiLCJzdmdvQ29uZmlnIiwiZ2VuZXJhdG9yIiwiZW1pdCIsImluY2x1ZGVzIiwiZGV2dG9vbCIsImNoaWxkcmVuIiwiZXhjbHVkZUFzc2V0cyIsIldFQlBBQ0tfTk9fQ0FDSEUiLCJXRUJQQUNLX0NBQ0hFIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1pbmlDc3NFeHRyYWN0UGx1Z2luIGZyb20gJ21pbmktY3NzLWV4dHJhY3QtcGx1Z2luJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFRzY29uZmlnUGF0aHNQbHVnaW4gZnJvbSAndHNjb25maWctcGF0aHMtd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IHsgU3RhdHNXcml0ZXJQbHVnaW4gfSBmcm9tICd3ZWJwYWNrLXN0YXRzLXBsdWdpbic7XG5cbmltcG9ydCB7IFJPT1RfUEFUSCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlQmFiZWxMb2FkZXIgfSBmcm9tICcuL2dlbmVyYXRlQmFiZWxMb2FkZXInO1xuaW1wb3J0IHsgTk9ERV9BTElBUyB9IGZyb20gJy4vbm9kZS1wb2x5ZmlsbCc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZXRTdHlsZVJ1bGVzIH0gZnJvbSAnLi9jc3MnO1xuZXhwb3J0IHsgUk9PVF9QQVRIIH07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VCYXNlQ29uZmlnKHtcbiAgcm9vdFBhdGgsXG4gIGJhc2VQYXRoLFxuICBsaWJyYXJ5SW5jbHVkZSxcbiAgbGlicmFyeUV4Y2x1ZGUsXG4gIGJhYmVsUm9vdCxcbiAgYnVpbGREaXIsXG4gIG1vZGUsXG4gIG1hbmlmZXN0RmlsZW5hbWUsXG4gIGJhYmVsTG9hZGVyOiBiYWJlbExvYWRlck9wdGlvbnMsXG4gIGV4dHJhSnNMb2FkZXJzLFxuICBpbkpTT3B0aW9ucyxcbiAgdHNjb25maWdQYXRoc09wdGlvbnMsXG4gIHN2Z29PcHRpb25zLFxuICBzdmdyT3B0aW9ucyxcbiAgZ2xvYmFsU3R5bGVEaXIsXG4gIG5vaGFzaCxcbiAgYXJndixcbiAgZW52LFxuICBjc3NFeHRyYWN0T3B0aW9ucyxcbiAgbGlicmFyeSxcbn0pIHtcbiAgY29uc3QgV0VCUEFDS19QVUJMSUNfSE9TVCA9IHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX0hPU1QgfHwgJyc7XG4gIGNvbnN0IFdFQlBBQ0tfUFVCTElDX1BBVEggPSBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIIHx8ICcvJztcblxuICBjb25zdCBtb2R1bGVzID0gW3BhdGguam9pbihyb290UGF0aCwgYmFzZVBhdGgpLCAnbm9kZV9tb2R1bGVzJ107XG4gIGlmIChnbG9iYWxTdHlsZURpcikge1xuICAgIG1vZHVsZXMuc3BsaWNlKDEsIDAsIHBhdGguam9pbihyb290UGF0aCwgYmFzZVBhdGgsIGdsb2JhbFN0eWxlRGlyKSk7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZSA9IHtcbiAgICBtb2R1bGVzLFxuICAgIGV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLm10cycsICcuY3RzJywgJy4uLiddLFxuICAgIGV4dGVuc2lvbkFsaWFzOiB7XG4gICAgICAnLmpzJzogWycuanMnLCAnLnRzJywgJy50c3gnLCAnLmpzeCddLFxuICAgICAgJy5tanMnOiBbJy5tanMnLCAnLm10cyddLFxuICAgICAgJy5janMnOiBbJy5janMnLCAnLmN0cyddLFxuICAgIH0sXG4gICAgZmFsbGJhY2s6IE5PREVfQUxJQVMsXG4gICAgcGx1Z2luczpcbiAgICAgIHRzY29uZmlnUGF0aHNPcHRpb25zICE9PSBmYWxzZSA/XG4gICAgICAgIFtuZXcgVHNjb25maWdQYXRoc1BsdWdpbih0c2NvbmZpZ1BhdGhzT3B0aW9ucyldXG4gICAgICA6IFtdLFxuICB9O1xuXG4gIGNvbnN0IG1haW5CYWJlbExvYWRlciA9IGdlbmVyYXRlQmFiZWxMb2FkZXIoe1xuICAgIHJvb3RQYXRoLFxuICAgIGJhYmVsUm9vdCxcbiAgICB0YXJnZXQ6IGFyZ3Y/LnRhcmdldCxcbiAgICBtb2RlLFxuICAgIGJhYmVsTG9hZGVyT3B0aW9ucyxcbiAgICBsaWJyYXJ5LFxuICB9KTtcbiAgY29uc3QgaW5KU0JhYmVsT3B0aW9ucyA9IHtcbiAgICAuLi5tYWluQmFiZWxMb2FkZXIub3B0aW9ucyxcbiAgfTtcbiAgZGVsZXRlIGluSlNCYWJlbE9wdGlvbnMuY2FjaGVEaXJlY3Rvcnk7XG4gIGRlbGV0ZSBpbkpTQmFiZWxPcHRpb25zLmNhY2hlSWRlbnRpZmllcjtcbiAgZGVsZXRlIGluSlNCYWJlbE9wdGlvbnMuY2FjaGVDb21wcmVzc2lvbjtcblxuICBpZiAoaW5KU09wdGlvbnMgIT09IGZhbHNlKSB7XG4gICAgaWYgKGluSlNPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluSlNPcHRpb25zID0ge1xuICAgICAgICBzb3VyY2VNYXA6IG1vZGUgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAgIH07XG4gICAgfVxuICAgIGV4dHJhSnNMb2FkZXJzID0gW1xuICAgICAge1xuICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnQHd5dy1pbi1qcy93ZWJwYWNrLWxvYWRlcicpLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLy8gYHJlc29sdmVPcHRpb25zYCB3YXMgZHJvcHBlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vY2FsbHN0YWNrL2xpbmFyaWEvcHVsbC8xMDAxIGFzIGl0IHVzZXMgd2VicGFjayBkaXJlY3RseVxuICAgICAgICAgIC8vcmVzb2x2ZU9wdGlvbnM6IHsgLi4ucmVzb2x2ZSB9LFxuICAgICAgICAgIGJhYmVsT3B0aW9uczogaW5KU0JhYmVsT3B0aW9ucyxcbiAgICAgICAgICAuLi5pbkpTT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi5leHRyYUpzTG9hZGVycyxcbiAgICBdO1xuICB9XG5cbiAgY29uc3QgcGx1Z2lucyA9IFtcbiAgICBuZXcgU3RhdHNXcml0ZXJQbHVnaW4oe1xuICAgICAgZmlsZW5hbWU6IG1hbmlmZXN0RmlsZW5hbWUsXG4gICAgICBzdGF0czoge1xuICAgICAgICBjaHVua01vZHVsZXM6IGZhbHNlLFxuICAgICAgICBzb3VyY2U6IGZhbHNlLFxuICAgICAgICBjaHVua3M6IGZhbHNlLFxuICAgICAgICBtb2R1bGVzOiBmYWxzZSxcbiAgICAgICAgYXNzZXRzOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KSxcbiAgXTtcblxuICBpZiAoY3NzRXh0cmFjdE9wdGlvbnMgIT09IGZhbHNlKSB7XG4gICAgcGx1Z2lucy5wdXNoKFxuICAgICAgbmV3IE1pbmlDc3NFeHRyYWN0UGx1Z2luKHtcbiAgICAgICAgZmlsZW5hbWU6XG4gICAgICAgICAgKG1vZGUgIT09ICdwcm9kdWN0aW9uJykgfCBub2hhc2ggP1xuICAgICAgICAgICAgJ1tuYW1lXS5jc3MnXG4gICAgICAgICAgOiAnW25hbWVdLltjb250ZW50aGFzaF0uY3NzJyxcbiAgICAgICAgY2h1bmtGaWxlbmFtZTpcbiAgICAgICAgICAobW9kZSAhPT0gJ3Byb2R1Y3Rpb24nKSB8IG5vaGFzaCA/XG4gICAgICAgICAgICAnW25hbWVdLmNzcydcbiAgICAgICAgICA6ICdbbmFtZV0uW2NvbnRlbnRoYXNoXS5jc3MnLFxuICAgICAgICAuLi5jc3NFeHRyYWN0T3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBhc3NldE1vZHVsZUZpbGVuYW1lID1cbiAgICBub2hhc2ggfHwgbW9kZSAhPT0gJ3Byb2R1Y3Rpb24nID9cbiAgICAgICdbbmFtZV0uW2V4dF1bcXVlcnldJ1xuICAgIDogJ1tjb250ZW50aGFzaF0uW2V4dF1bcXVlcnldJztcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGNvbnRleHQ6IHJvb3RQYXRoLFxuICAgIGVudHJ5OiB7XG4gICAgICBbZW52Py5uYW1lIHx8ICdBcHAnXTogW2Vudj8uZW50cnlwYXRoIHx8IGAuLyR7YmFzZVBhdGh9YF0sXG4gICAgfSxcbiAgICBvdXRwdXQ6IHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihyb290UGF0aCwgYnVpbGREaXIpLFxuICAgICAgcHVibGljUGF0aDogV0VCUEFDS19QVUJMSUNfSE9TVCArIFdFQlBBQ0tfUFVCTElDX1BBVEgsXG4gICAgICBmaWxlbmFtZTpcbiAgICAgICAgbm9oYXNoIHx8IG1vZGUgIT09ICdwcm9kdWN0aW9uJyA/XG4gICAgICAgICAgJ1tuYW1lXS5qcydcbiAgICAgICAgOiAnW25hbWVdLVtjb250ZW50aGFzaF0uanMnLFxuICAgICAgY2h1bmtGaWxlbmFtZTpcbiAgICAgICAgbm9oYXNoIHx8IG1vZGUgIT09ICdwcm9kdWN0aW9uJyA/XG4gICAgICAgICAgJ1tuYW1lXS5jaHVuay5qcydcbiAgICAgICAgOiAnW25hbWVdLVtjb250ZW50aGFzaF0uY2h1bmsuanMnLFxuICAgICAgYXNzZXRNb2R1bGVGaWxlbmFtZSxcbiAgICAgIGdsb2JhbE9iamVjdDogXCIodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpXCIsXG4gICAgICAvLyB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGFuZCBtYWtlcyB0aGlzIGNvbXBhdGlibGUgYWNyb3NzIG5vZGUgMTYgYW5kIDE4IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICBoYXNoRnVuY3Rpb246ICd4eGhhc2g2NCcsXG4gICAgfSxcbiAgICBjYWNoZToge1xuICAgICAgdHlwZTogJ2ZpbGVzeXN0ZW0nLFxuICAgICAgYnVpbGREZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgY29uZmlnOiBbX19maWxlbmFtZV0sIC8vIHlvdSBtYXkgb21pdCB0aGlzIHdoZW4geW91ciBDTEkgYXV0b21hdGljYWxseSBhZGRzIGl0XG4gICAgICB9LFxuICAgICAgdmVyc2lvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICB0YXJnZXQ6IGFyZ3Y/LnRhcmdldCxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgZW52OiBbcHJvY2Vzcy5lbnYuTk9ERV9FTlYsIHByb2Nlc3MuZW52LkJST1dTRVJTTElTVF9FTlZdLmpvaW4oJywnKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICBtb2R1bGU6IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICBpbmNsdWRlOiBbXG4gICAgICAgICAgICBwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoKSxcbiAgICAgICAgICAgIHBhdGguam9pbihyb290UGF0aCwgJ3N0b3JpZXMnKSxcbiAgICAgICAgICAgIC9cXC5zdG9yeWJvb2svLFxuICAgICAgICAgICAgbGlicmFyeUluY2x1ZGUsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBleGNsdWRlOiBsaWJyYXJ5RXhjbHVkZSxcbiAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgLyogVE9ETyhkZXByZWNhdGVkKTogRHJvcCB0aGlzIG9uY2UgcGVvcGxlIGhhdmUgYSBjaGFuY2UgdG8gbWlncmF0ZSAqL1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwud29ya2VyXFwuKHR8ailzJC8sXG4gICAgICAgICAgICAgIGluY2x1ZGU6IFtuZXcgUmVnRXhwKGJhc2VQYXRoKSwgbGlicmFyeUluY2x1ZGVdLFxuICAgICAgICAgICAgICB1c2U6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnd29ya2VyLWxvYWRlcicpLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6ICdmYWxsYmFjaycsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIG5vaGFzaCA/ICdbbmFtZV0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiBtb2RlID09PSAncHJvZHVjdGlvbicgPyAnW25hbWVdLVtjb250ZW50aGFzaF0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnW25hbWVdLmpzJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUJhYmVsTG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgIHJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgYmFiZWxSb290LFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBhcmd2Py50YXJnZXQsXG4gICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgYmFiZWxMb2FkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgbm9Ib3RSZWxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICAgICAgdXNlOiBbbWFpbkJhYmVsTG9hZGVyLCAuLi5leHRyYUpzTG9hZGVyc10uZmlsdGVyKGwgPT4gbCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuaHRtbCQvLFxuICAgICAgICAgIHVzZTogW3sgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ2h0bWwtbG9hZGVyJykgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKG1kfHR4dCkkLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQvc291cmNlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IC9cXC5zdmcoXFw/dj1cXGQrXFwuXFxkK1xcLlxcZCspPyQvLFxuICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlzc3VlcjogL1xcLihqfHQpc3g/JC8sXG4gICAgICAgICAgICAgIHVzZTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxvYWRlcjogcmVxdWlyZS5yZXNvbHZlKCdAc3Znci93ZWJwYWNrJyksXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z29Db25maWc6IHN2Z29PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAuLi5zdmdyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnZmlsZS1sb2FkZXInKSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICBub2hhc2ggfHwgbW9kZSAhPT0gJ3Byb2R1Y3Rpb24nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZV0uW2V4dF1bcXVlcnldJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ1ttZDU6Y29udGVudGhhc2g6YmFzZTY0OjhdLltleHRdW3F1ZXJ5XScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICdqYXZhc2NyaXB0L2F1dG8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGZvciBub24tanMgZmlsZXMgYWx3YXlzIHVzZSBmaWxlLWxvYWRlclxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBlbWl0OiAhYXJndj8udGFyZ2V0Py5pbmNsdWRlcz8uKCdub2RlJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKGFwbmd8cG5nfGpwZ3xnaWZ8aWNvfHdlYnB8YXZpZnxjdXJ8YW5pfG90Znxlb3R8d29mZjJ8d29mZnx0dGYpKFxcP3Y9XFxkK1xcLlxcZCtcXC5cXGQrKT8kLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIGdlbmVyYXRvcjoge1xuICAgICAgICAgICAgZW1pdDogIWFyZ3Y/LnRhcmdldD8uaW5jbHVkZXM/Lignbm9kZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHBkZnxtcDR8d2VibXx3YXZ8bXAzfG00YXxhYWN8b2dhKShcXD92PVxcZCtcXC5cXGQrXFwuXFxkKyk/JC8sXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0L3Jlc291cmNlJyxcbiAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgIGVtaXQ6ICFhcmd2Py50YXJnZXQ/LmluY2x1ZGVzPy4oJ25vZGUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHJlc29sdmUsXG4gICAgZGV2dG9vbDogJ3NvdXJjZS1tYXAnLFxuICAgIHN0YXRzOiB7XG4gICAgICBjaGlsZHJlbjogZmFsc2UsXG4gICAgICBjaHVua3M6IGZhbHNlLFxuICAgICAgZXhjbHVkZUFzc2V0czogWy9cXC5tYXAvXSxcbiAgICB9LFxuICB9O1xuICBpZiAoZW52Py5uYW1lKSBjb25maWcubmFtZSA9IGVudi5uYW1lO1xuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5XRUJQQUNLX05PX0NBQ0hFID09PSB0cnVlIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19OT19DQUNIRSA9PT0gJ3RydWUnIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ25vbmUnXG4gICkge1xuICAgIGRlbGV0ZSBjb25maWcuY2FjaGU7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ21lbW9yeScpIHtcbiAgICBjb25maWcuY2FjaGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LldFQlBBQ0tfQ0FDSEUgPT09ICdmaWxlc3lzdGVtJykge1xuICAgIGNvbmZpZy5jYWNoZS50eXBlID0gJ2ZpbGVzeXN0ZW0nO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSwyQkFBQSxHQUFBSCxzQkFBQSxDQUFB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