@anansi/webpack-config
Version:
Production ready webpack for React
156 lines (155 loc) • 19.8 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.default = makeDevConfig;
var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
var _path = _interopRequireDefault(require("path"));
var _webpack = _interopRequireDefault(require("webpack"));
var _runtime = _interopRequireDefault(require("webpack/lib/logging/runtime"));
var _base = require("./base");
var _getHttpsConfig = _interopRequireDefault(require("./getHttpsConfig"));
var _ErrorOverlayPlugin = _interopRequireDefault(require("./plugins/ErrorOverlayPlugin"));
const chalk = require('react-dev-utils/chalk');
function makeDevConfig(baseConfig, {
rootPath,
basePath,
libraryInclude,
libraryExclude,
htmlOptions = {
title: 'Anansi app',
scriptLoading: 'defer'
},
argv = {},
// eslint-disable-next-line no-unused-vars
env = {},
sassOptions,
sassResources,
cssModulesOptions,
globalStyleDir,
isStackblitz,
cssExtractOptions
}) {
const config = {
...baseConfig
};
config.mode = 'development';
// https://webpack.js.org/guides/build-performance/#output-without-path-info
config.output.pathinfo = false;
config.output.devtoolModuleFilenameTemplate = info => _path.default.resolve(info.absoluteResourcePath).replace(/\\/g, '/');
config.optimization = {
// https://webpack.js.org/guides/build-performance/#avoid-extra-optimization-steps
removeAvailableModules: false,
removeEmptyChunks: false,
splitChunks: false,
// save perf when errors occur
emitOnErrors: false,
// https://webpack.js.org/guides/build-performance/#minimal-entry-chunk
runtimeChunk: true
};
const watchIgnorePaths = [/(hot-update\.[^.]|\.map|s?css\.d\.ts)$/, _path.default.join(rootPath, '.cache'), /node_modules\/\.cache(?!\/(\.wyw-in-js-(cache|development|production)\/))/];
config.plugins = [new _webpack.default.WatchIgnorePlugin({
paths: watchIgnorePaths
}), ...config.plugins];
// not for server builds
if (!argv?.target?.includes?.('node')) {
config.plugins.unshift(new _htmlWebpackPlugin.default(htmlOptions));
}
let server = 'http';
try {
server = (0, _getHttpsConfig.default)(rootPath);
} catch (e) {
console.warn(chalk.yellow('Falling back to http'));
}
config.devServer = {
hot: true,
compress: true,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': '*'
},
allowedHosts: ['localhost', '127.0.0.1', '.csb.app'],
server,
devMiddleware: {
publicPath: config.output.publicPath,
stats: {
preset: 'minimal',
children: 'errors-only',
excludeAssets: [/\.map/]
}
},
client: {
logging: 'warn',
overlay: false,
// we have our own overlay, so ignore this
webSocketURL: {
hostname: 'localhost',
pathname: '/ws',
port: argv.port
}
},
historyApiFallback: true
// TODO: add proxy options
};
config.devtool = 'cheap-module-source-map';
// if we know the port, force it in case this is encapsulated in another host
if (argv.port) {
config.output.publicPath = `http://localhost:${argv.port}${config.output.publicPath}`;
}
if (!config.resolve.alias) {
config.resolve.alias = {};
}
if (process.env.NO_HOT_RELOAD !== 'true' && process.env.NO_HOT_RELOAD !== true && !argv?.target?.includes?.('node')) {
try {
require('react-refresh/babel');
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
config.plugins.push(
// these are needed by the react-dev-utils overlay
new _webpack.default.EnvironmentPlugin({
WDS_SOCKET_HOST: '',
WDS_SOCKET_PATH: '',
WDS_SOCKET_PORT: '',
FAST_REFRESH: true
}), new ReactRefreshWebpackPlugin({
overlay: {
// provides editor opening when combined with ErrorOverlayPlugin
entry: require.resolve('./plugins/ErrorOverlayEntry'),
// registers error handlers
module: require.resolve('./plugins/refreshOverlayModule'),
sockHost: config.devServer.client.webSocketURL.hostname,
sockPath: config.devServer.client.webSocketURL.pathname,
sockPort: config.devServer.client.webSocketURL.port
}
}), new _ErrorOverlayPlugin.default());
config.devServer.hot = 'only';
_runtime.default.getLogger('anansi').info('React fast refresh detected and enabled');
// eslint-disable-next-line no-empty
} catch (e) {}
}
if (!config.experiments) {
config.experiments = {};
}
// this doesn't work well with webcontainers
if (!isStackblitz) {
// TODO: enable once we can figure out how to make it work with manifest and await for SSR
//config.experiments.lazyCompilation = { entries: false };
}
const styleRules = (0, _base.getStyleRules)({
rootPath,
basePath,
libraryInclude,
libraryExclude,
cssModulesOptions: {
localIdentName: '[folder]_[name]__[local]___[xxhash64:hash:base64:5]',
...cssModulesOptions
},
sassOptions,
sassResources,
globalStyleDir,
target: argv?.target,
cssExtractOptions
});
config.module.rules = [...config.module.rules, styleRules];
return config;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaHRtbFdlYnBhY2tQbHVnaW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX3dlYnBhY2siLCJfcnVudGltZSIsIl9iYXNlIiwiX2dldEh0dHBzQ29uZmlnIiwiX0Vycm9yT3ZlcmxheVBsdWdpbiIsImNoYWxrIiwibWFrZURldkNvbmZpZyIsImJhc2VDb25maWciLCJyb290UGF0aCIsImJhc2VQYXRoIiwibGlicmFyeUluY2x1ZGUiLCJsaWJyYXJ5RXhjbHVkZSIsImh0bWxPcHRpb25zIiwidGl0bGUiLCJzY3JpcHRMb2FkaW5nIiwiYXJndiIsImVudiIsInNhc3NPcHRpb25zIiwic2Fzc1Jlc291cmNlcyIsImNzc01vZHVsZXNPcHRpb25zIiwiZ2xvYmFsU3R5bGVEaXIiLCJpc1N0YWNrYmxpdHoiLCJjc3NFeHRyYWN0T3B0aW9ucyIsImNvbmZpZyIsIm1vZGUiLCJvdXRwdXQiLCJwYXRoaW5mbyIsImRldnRvb2xNb2R1bGVGaWxlbmFtZVRlbXBsYXRlIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiYWJzb2x1dGVSZXNvdXJjZVBhdGgiLCJyZXBsYWNlIiwib3B0aW1pemF0aW9uIiwicmVtb3ZlQXZhaWxhYmxlTW9kdWxlcyIsInJlbW92ZUVtcHR5Q2h1bmtzIiwic3BsaXRDaHVua3MiLCJlbWl0T25FcnJvcnMiLCJydW50aW1lQ2h1bmsiLCJ3YXRjaElnbm9yZVBhdGhzIiwiam9pbiIsInBsdWdpbnMiLCJ3ZWJwYWNrIiwiV2F0Y2hJZ25vcmVQbHVnaW4iLCJwYXRocyIsInRhcmdldCIsImluY2x1ZGVzIiwidW5zaGlmdCIsIkh0bWxXZWJwYWNrUGx1Z2luIiwic2VydmVyIiwiZ2V0SHR0cHNDb25maWciLCJlIiwiY29uc29sZSIsIndhcm4iLCJ5ZWxsb3ciLCJkZXZTZXJ2ZXIiLCJob3QiLCJjb21wcmVzcyIsImhlYWRlcnMiLCJhbGxvd2VkSG9zdHMiLCJkZXZNaWRkbGV3YXJlIiwicHVibGljUGF0aCIsInN0YXRzIiwicHJlc2V0IiwiY2hpbGRyZW4iLCJleGNsdWRlQXNzZXRzIiwiY2xpZW50IiwibG9nZ2luZyIsIm92ZXJsYXkiLCJ3ZWJTb2NrZXRVUkwiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwicG9ydCIsImhpc3RvcnlBcGlGYWxsYmFjayIsImRldnRvb2wiLCJhbGlhcyIsInByb2Nlc3MiLCJOT19IT1RfUkVMT0FEIiwiUmVhY3RSZWZyZXNoV2VicGFja1BsdWdpbiIsInB1c2giLCJFbnZpcm9ubWVudFBsdWdpbiIsIldEU19TT0NLRVRfSE9TVCIsIldEU19TT0NLRVRfUEFUSCIsIldEU19TT0NLRVRfUE9SVCIsIkZBU1RfUkVGUkVTSCIsImVudHJ5IiwibW9kdWxlIiwic29ja0hvc3QiLCJzb2NrUGF0aCIsInNvY2tQb3J0IiwiRXJyb3JPdmVybGF5UGx1Z2luIiwiZ2V0TG9nZ2VyIiwiZXhwZXJpbWVudHMiLCJzdHlsZVJ1bGVzIiwiZ2V0U3R5bGVSdWxlcyIsImxvY2FsSWRlbnROYW1lIiwicnVsZXMiXSwic291cmNlcyI6WyIuLi9zcmMvZGV2LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBIdG1sV2VicGFja1BsdWdpbiBmcm9tICdodG1sLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHdlYnBhY2sgZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgbG9nZ2luZyBmcm9tICd3ZWJwYWNrL2xpYi9sb2dnaW5nL3J1bnRpbWUnO1xuXG5pbXBvcnQgeyBnZXRTdHlsZVJ1bGVzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCBnZXRIdHRwc0NvbmZpZyBmcm9tICcuL2dldEh0dHBzQ29uZmlnJztcbmltcG9ydCBFcnJvck92ZXJsYXlQbHVnaW4gZnJvbSAnLi9wbHVnaW5zL0Vycm9yT3ZlcmxheVBsdWdpbic7XG5cbmNvbnN0IGNoYWxrID0gcmVxdWlyZSgncmVhY3QtZGV2LXV0aWxzL2NoYWxrJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VEZXZDb25maWcoXG4gIGJhc2VDb25maWcsXG4gIHtcbiAgICByb290UGF0aCxcbiAgICBiYXNlUGF0aCxcbiAgICBsaWJyYXJ5SW5jbHVkZSxcbiAgICBsaWJyYXJ5RXhjbHVkZSxcbiAgICBodG1sT3B0aW9ucyA9IHsgdGl0bGU6ICdBbmFuc2kgYXBwJywgc2NyaXB0TG9hZGluZzogJ2RlZmVyJyB9LFxuICAgIGFyZ3YgPSB7fSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBlbnYgPSB7fSxcbiAgICBzYXNzT3B0aW9ucyxcbiAgICBzYXNzUmVzb3VyY2VzLFxuICAgIGNzc01vZHVsZXNPcHRpb25zLFxuICAgIGdsb2JhbFN0eWxlRGlyLFxuICAgIGlzU3RhY2tibGl0eixcbiAgICBjc3NFeHRyYWN0T3B0aW9ucyxcbiAgfSxcbikge1xuICBjb25zdCBjb25maWcgPSB7IC4uLmJhc2VDb25maWcgfTtcblxuICBjb25maWcubW9kZSA9ICdkZXZlbG9wbWVudCc7XG4gIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvZ3VpZGVzL2J1aWxkLXBlcmZvcm1hbmNlLyNvdXRwdXQtd2l0aG91dC1wYXRoLWluZm9cbiAgY29uZmlnLm91dHB1dC5wYXRoaW5mbyA9IGZhbHNlO1xuICBjb25maWcub3V0cHV0LmRldnRvb2xNb2R1bGVGaWxlbmFtZVRlbXBsYXRlID0gaW5mbyA9PlxuICAgIHBhdGgucmVzb2x2ZShpbmZvLmFic29sdXRlUmVzb3VyY2VQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbmZpZy5vcHRpbWl6YXRpb24gPSB7XG4gICAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9ndWlkZXMvYnVpbGQtcGVyZm9ybWFuY2UvI2F2b2lkLWV4dHJhLW9wdGltaXphdGlvbi1zdGVwc1xuICAgIHJlbW92ZUF2YWlsYWJsZU1vZHVsZXM6IGZhbHNlLFxuICAgIHJlbW92ZUVtcHR5Q2h1bmtzOiBmYWxzZSxcbiAgICBzcGxpdENodW5rczogZmFsc2UsXG4gICAgLy8gc2F2ZSBwZXJmIHdoZW4gZXJyb3JzIG9jY3VyXG4gICAgZW1pdE9uRXJyb3JzOiBmYWxzZSxcbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2d1aWRlcy9idWlsZC1wZXJmb3JtYW5jZS8jbWluaW1hbC1lbnRyeS1jaHVua1xuICAgIHJ1bnRpbWVDaHVuazogdHJ1ZSxcbiAgfTtcblxuICBjb25zdCB3YXRjaElnbm9yZVBhdGhzID0gW1xuICAgIC8oaG90LXVwZGF0ZVxcLlteLl18XFwubWFwfHM/Y3NzXFwuZFxcLnRzKSQvLFxuICAgIHBhdGguam9pbihyb290UGF0aCwgJy5jYWNoZScpLFxuICAgIC9ub2RlX21vZHVsZXNcXC9cXC5jYWNoZSg/IVxcLyhcXC53eXctaW4tanMtKGNhY2hlfGRldmVsb3BtZW50fHByb2R1Y3Rpb24pXFwvKSkvLFxuICBdO1xuICBjb25maWcucGx1Z2lucyA9IFtcbiAgICBuZXcgd2VicGFjay5XYXRjaElnbm9yZVBsdWdpbih7IHBhdGhzOiB3YXRjaElnbm9yZVBhdGhzIH0pLFxuICAgIC4uLmNvbmZpZy5wbHVnaW5zLFxuICBdO1xuICAvLyBub3QgZm9yIHNlcnZlciBidWlsZHNcbiAgaWYgKCFhcmd2Py50YXJnZXQ/LmluY2x1ZGVzPy4oJ25vZGUnKSkge1xuICAgIGNvbmZpZy5wbHVnaW5zLnVuc2hpZnQobmV3IEh0bWxXZWJwYWNrUGx1Z2luKGh0bWxPcHRpb25zKSk7XG4gIH1cbiAgbGV0IHNlcnZlciA9ICdodHRwJztcbiAgdHJ5IHtcbiAgICBzZXJ2ZXIgPSBnZXRIdHRwc0NvbmZpZyhyb290UGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KCdGYWxsaW5nIGJhY2sgdG8gaHR0cCcpKTtcbiAgfVxuICBjb25maWcuZGV2U2VydmVyID0ge1xuICAgIGhvdDogdHJ1ZSxcbiAgICBjb21wcmVzczogdHJ1ZSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiAnKicsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6ICcqJyxcbiAgICB9LFxuICAgIGFsbG93ZWRIb3N0czogWydsb2NhbGhvc3QnLCAnMTI3LjAuMC4xJywgJy5jc2IuYXBwJ10sXG4gICAgc2VydmVyLFxuICAgIGRldk1pZGRsZXdhcmU6IHtcbiAgICAgIHB1YmxpY1BhdGg6IGNvbmZpZy5vdXRwdXQucHVibGljUGF0aCxcbiAgICAgIHN0YXRzOiB7XG4gICAgICAgIHByZXNldDogJ21pbmltYWwnLFxuICAgICAgICBjaGlsZHJlbjogJ2Vycm9ycy1vbmx5JyxcbiAgICAgICAgZXhjbHVkZUFzc2V0czogWy9cXC5tYXAvXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjbGllbnQ6IHtcbiAgICAgIGxvZ2dpbmc6ICd3YXJuJyxcbiAgICAgIG92ZXJsYXk6IGZhbHNlLCAvLyB3ZSBoYXZlIG91ciBvd24gb3ZlcmxheSwgc28gaWdub3JlIHRoaXNcbiAgICAgIHdlYlNvY2tldFVSTDoge1xuICAgICAgICBob3N0bmFtZTogJ2xvY2FsaG9zdCcsXG4gICAgICAgIHBhdGhuYW1lOiAnL3dzJyxcbiAgICAgICAgcG9ydDogYXJndi5wb3J0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGhpc3RvcnlBcGlGYWxsYmFjazogdHJ1ZSxcbiAgICAvLyBUT0RPOiBhZGQgcHJveHkgb3B0aW9uc1xuICB9O1xuICBjb25maWcuZGV2dG9vbCA9ICdjaGVhcC1tb2R1bGUtc291cmNlLW1hcCc7XG4gIC8vIGlmIHdlIGtub3cgdGhlIHBvcnQsIGZvcmNlIGl0IGluIGNhc2UgdGhpcyBpcyBlbmNhcHN1bGF0ZWQgaW4gYW5vdGhlciBob3N0XG4gIGlmIChhcmd2LnBvcnQpIHtcbiAgICBjb25maWcub3V0cHV0LnB1YmxpY1BhdGggPSBgaHR0cDovL2xvY2FsaG9zdDoke2FyZ3YucG9ydH0ke2NvbmZpZy5vdXRwdXQucHVibGljUGF0aH1gO1xuICB9XG4gIGlmICghY29uZmlnLnJlc29sdmUuYWxpYXMpIHtcbiAgICBjb25maWcucmVzb2x2ZS5hbGlhcyA9IHt9O1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT19IT1RfUkVMT0FEICE9PSAndHJ1ZScgJiZcbiAgICBwcm9jZXNzLmVudi5OT19IT1RfUkVMT0FEICE9PSB0cnVlICYmXG4gICAgIWFyZ3Y/LnRhcmdldD8uaW5jbHVkZXM/Lignbm9kZScpXG4gICkge1xuICAgIHRyeSB7XG4gICAgICByZXF1aXJlKCdyZWFjdC1yZWZyZXNoL2JhYmVsJyk7XG4gICAgICBjb25zdCBSZWFjdFJlZnJlc2hXZWJwYWNrUGx1Z2luID0gcmVxdWlyZSgnQHBtbW13aC9yZWFjdC1yZWZyZXNoLXdlYnBhY2stcGx1Z2luJyk7XG4gICAgICBjb25maWcucGx1Z2lucy5wdXNoKFxuICAgICAgICAvLyB0aGVzZSBhcmUgbmVlZGVkIGJ5IHRoZSByZWFjdC1kZXYtdXRpbHMgb3ZlcmxheVxuICAgICAgICBuZXcgd2VicGFjay5FbnZpcm9ubWVudFBsdWdpbih7XG4gICAgICAgICAgV0RTX1NPQ0tFVF9IT1NUOiAnJyxcbiAgICAgICAgICBXRFNfU09DS0VUX1BBVEg6ICcnLFxuICAgICAgICAgIFdEU19TT0NLRVRfUE9SVDogJycsXG4gICAgICAgICAgRkFTVF9SRUZSRVNIOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFJlYWN0UmVmcmVzaFdlYnBhY2tQbHVnaW4oe1xuICAgICAgICAgIG92ZXJsYXk6IHtcbiAgICAgICAgICAgIC8vIHByb3ZpZGVzIGVkaXRvciBvcGVuaW5nIHdoZW4gY29tYmluZWQgd2l0aCBFcnJvck92ZXJsYXlQbHVnaW5cbiAgICAgICAgICAgIGVudHJ5OiByZXF1aXJlLnJlc29sdmUoJy4vcGx1Z2lucy9FcnJvck92ZXJsYXlFbnRyeScpLFxuICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIGVycm9yIGhhbmRsZXJzXG4gICAgICAgICAgICBtb2R1bGU6IHJlcXVpcmUucmVzb2x2ZSgnLi9wbHVnaW5zL3JlZnJlc2hPdmVybGF5TW9kdWxlJyksXG4gICAgICAgICAgICBzb2NrSG9zdDogY29uZmlnLmRldlNlcnZlci5jbGllbnQud2ViU29ja2V0VVJMLmhvc3RuYW1lLFxuICAgICAgICAgICAgc29ja1BhdGg6IGNvbmZpZy5kZXZTZXJ2ZXIuY2xpZW50LndlYlNvY2tldFVSTC5wYXRobmFtZSxcbiAgICAgICAgICAgIHNvY2tQb3J0OiBjb25maWcuZGV2U2VydmVyLmNsaWVudC53ZWJTb2NrZXRVUkwucG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IEVycm9yT3ZlcmxheVBsdWdpbigpLFxuICAgICAgKTtcbiAgICAgIGNvbmZpZy5kZXZTZXJ2ZXIuaG90ID0gJ29ubHknO1xuICAgICAgbG9nZ2luZ1xuICAgICAgICAuZ2V0TG9nZ2VyKCdhbmFuc2knKVxuICAgICAgICAuaW5mbygnUmVhY3QgZmFzdCByZWZyZXNoIGRldGVjdGVkIGFuZCBlbmFibGVkJyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgaWYgKCFjb25maWcuZXhwZXJpbWVudHMpIHtcbiAgICBjb25maWcuZXhwZXJpbWVudHMgPSB7fTtcbiAgfVxuICAvLyB0aGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggd2ViY29udGFpbmVyc1xuICBpZiAoIWlzU3RhY2tibGl0eikge1xuICAgIC8vIFRPRE86IGVuYWJsZSBvbmNlIHdlIGNhbiBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IHdvcmsgd2l0aCBtYW5pZmVzdCBhbmQgYXdhaXQgZm9yIFNTUlxuICAgIC8vY29uZmlnLmV4cGVyaW1lbnRzLmxhenlDb21waWxhdGlvbiA9IHsgZW50cmllczogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlUnVsZXMgPSBnZXRTdHlsZVJ1bGVzKHtcbiAgICByb290UGF0aCxcbiAgICBiYXNlUGF0aCxcbiAgICBsaWJyYXJ5SW5jbHVkZSxcbiAgICBsaWJyYXJ5RXhjbHVkZSxcbiAgICBjc3NNb2R1bGVzT3B0aW9uczoge1xuICAgICAgbG9jYWxJZGVudE5hbWU6ICdbZm9sZGVyXV9bbmFtZV1fX1tsb2NhbF1fX19beHhoYXNoNjQ6aGFzaDpiYXNlNjQ6NV0nLFxuICAgICAgLi4uY3NzTW9kdWxlc09wdGlvbnMsXG4gICAgfSxcbiAgICBzYXNzT3B0aW9ucyxcbiAgICBzYXNzUmVzb3VyY2VzLFxuICAgIGdsb2JhbFN0eWxlRGlyLFxuICAgIHRhcmdldDogYXJndj8udGFyZ2V0LFxuICAgIGNzc0V4dHJhY3RPcHRpb25zLFxuICB9KTtcbiAgY29uZmlnLm1vZHVsZS5ydWxlcyA9IFsuLi5jb25maWcubW9kdWxlLnJ1bGVzLCBzdHlsZVJ1bGVzXTtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sbUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLE1BQU1PLEtBQUssR0FBR1AsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBRS9CLFNBQVNRLGFBQWFBLENBQ25DQyxVQUFVLEVBQ1Y7RUFDRUMsUUFBUTtFQUNSQyxRQUFRO0VBQ1JDLGNBQWM7RUFDZEMsY0FBYztFQUNkQyxXQUFXLEdBQUc7SUFBRUMsS0FBSyxFQUFFLFlBQVk7SUFBRUMsYUFBYSxFQUFFO0VBQVEsQ0FBQztFQUM3REMsSUFBSSxH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