react-static
Version:
A progressive static site generator for React
201 lines (176 loc) • 25.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = _default;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _webpack = _interopRequireDefault(require("webpack"));
var _path = _interopRequireDefault(require("path"));
var _caseSensitivePathsWebpackPlugin = _interopRequireDefault(require("case-sensitive-paths-webpack-plugin"));
var _webpackBundleAnalyzer = require("webpack-bundle-analyzer");
var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
var _webpackNodeExternals = _interopRequireDefault(require("webpack-node-externals"));
var _extractCssChunksWebpackPlugin = _interopRequireDefault(require("extract-css-chunks-webpack-plugin"));
var _optimizeCssAssetsWebpackPlugin = _interopRequireDefault(require("optimize-css-assets-webpack-plugin"));
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
var _rules = _interopRequireDefault(require("./rules"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function common(state) {
var analyze = state.analyze,
config = state.config,
debug = state.debug;
var _config$paths = config.paths,
ROOT = _config$paths.ROOT,
DIST = _config$paths.DIST,
NODE_MODULES = _config$paths.NODE_MODULES,
SRC = _config$paths.SRC,
ASSETS = _config$paths.ASSETS;
process.env.REACT_STATIC_ENTRY_PATH = config.entry;
process.env.REACT_STATIC_SITE_ROOT = config.siteRoot;
process.env.REACT_STATIC_BASE_PATH = config.basePath;
process.env.REACT_STATIC_PUBLIC_PATH = config.publicPath;
process.env.REACT_STATIC_ASSETS_PATH = config.assetsPath;
if (!DIST.startsWith(ROOT)) {
// we build outside of project dir, so reset some paths
process.env.REACT_STATIC_ASSETS_PATH = config.assetsPath.replace(DIST, '');
}
var splitChunks = {
chunks: 'all',
minSize: 10000,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 5,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10,
chunks: 'all'
},
"default": {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
};
var extrackCSSChunks = new _extractCssChunksWebpackPlugin["default"]({
filename: '[name].[contentHash:8].css',
chunkFilename: '[id].[contentHash:8].css'
});
if (!config.extractCssChunks) {
splitChunks.cacheGroups = {
styles: {
name: 'styles',
test: /\.css$/,
chunks: 'all',
enforce: true
}
};
extrackCSSChunks = new _extractCssChunksWebpackPlugin["default"]({
filename: '[name].[contentHash:8].css'
});
}
return {
mode: 'production',
context: _path["default"].resolve(__dirname, '../../../node_modules'),
entry: config.disableRuntime ? config.entry : [require.resolve('../../bootstrapPlugins'), require.resolve('../../bootstrapTemplates'), require.resolve('../../bootstrapApp')],
output: {
filename: '[name].[contentHash:8].js',
chunkFilename: 'templates/[name].[contentHash:8].js',
path: ASSETS,
publicPath: process.env.REACT_STATIC_ASSETS_PATH || '/'
},
optimization: {
sideEffects: true,
minimize: true,
minimizer: [new _terserWebpackPlugin["default"](_objectSpread(_objectSpread({
cache: true,
parallel: true,
exclude: /\.min\.js/
}, config.terser), {}, {
sourceMap: config.productionSourceMaps || config.terser.sourceMap || debug,
terserOptions: _objectSpread(_objectSpread({
ie8: false
}, config.terser.terserOptions), {}, {
mangle: _objectSpread({
safari10: true
}, config.terser.terserOptions.mangle),
parse: _objectSpread({
ecma: 8
}, config.terser.terserOptions.parse),
compress: _objectSpread({
ecma: 5
}, config.terser.terserOptions.compress),
output: _objectSpread({
ecma: 5
}, config.terser.terserOptions.output)
})
})), new _optimizeCssAssetsWebpackPlugin["default"]({})],
splitChunks: splitChunks
},
performance: {
maxEntrypointSize: 300000
},
module: {
rules: (0, _rules["default"])({
config: config,
stage: 'prod',
isNode: false
}),
strictExportPresence: true
},
resolve: {
modules: [NODE_MODULES, SRC, DIST].concat((0, _toConsumableArray2["default"])([NODE_MODULES, SRC, DIST].map(function (d) {
return DIST.startsWith(ROOT) ? _path["default"].resolve(__dirname, d) : _path["default"].resolve(d);
})), ['node_modules']),
extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx'],
alias: {
react$: (0, _resolveFrom["default"])(config.paths.NODE_MODULES, 'react'),
'react-dom$': (0, _resolveFrom["default"])(config.paths.NODE_MODULES, 'react-dom'),
'react-universal-component': (0, _resolveFrom["default"])(__dirname, 'react-universal-component'),
__react_static_root__: config.paths.ROOT
}
},
externals: [],
target: undefined,
plugins: [new _webpack["default"].EnvironmentPlugin(process.env), extrackCSSChunks, new _caseSensitivePathsWebpackPlugin["default"](), analyze && new _webpackBundleAnalyzer.BundleAnalyzerPlugin()].filter(function (d) {
return d;
}),
devtool: debug || config.productionSourceMaps ? 'source-map' : false
};
}
function _default(state) {
var stage = state.stage,
paths = state.config.paths;
var result = common(state);
if (stage !== 'node') return result; // Node only!!!
result.output.filename = 'static-app.js';
result.output.path = paths.ARTIFACTS;
result.output.libraryTarget = 'umd';
result.optimization.minimize = false;
result.optimization.minimizer = [];
result.target = 'node';
result.devtool = false;
result.externals = [new RegExp("".concat(paths.PLUGINS)), function (context, request, callback) {
var resolved = _path["default"].resolve(context, request);
if ([/react-static(\\|\/)lib(\\|\/)browser/, /webpack-flush-chunks/].some(function (d) {
return d.test(resolved);
})) {
return callback(null, "commonjs ".concat(resolved));
}
callback();
}, (0, _webpackNodeExternals["default"])({
whitelist: ['react-universal-component']
})];
result.module.rules = (0, _rules["default"])(state);
result.plugins = [new _webpack["default"].EnvironmentPlugin(process.env), new _caseSensitivePathsWebpackPlugin["default"](), new _webpack["default"].optimize.LimitChunkCountPlugin({
maxChunks: 1
})];
return result;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0aWMvd2VicGFjay93ZWJwYWNrLmNvbmZpZy5wcm9kLmpzIl0sIm5hbWVzIjpbImNvbW1vbiIsInN0YXRlIiwiYW5hbHl6ZSIsImNvbmZpZyIsImRlYnVnIiwicGF0aHMiLCJST09UIiwiRElTVCIsIk5PREVfTU9EVUxFUyIsIlNSQyIsIkFTU0VUUyIsInByb2Nlc3MiLCJlbnYiLCJSRUFDVF9TVEFUSUNfRU5UUllfUEFUSCIsImVudHJ5IiwiUkVBQ1RfU1RBVElDX1NJVEVfUk9PVCIsInNpdGVSb290IiwiUkVBQ1RfU1RBVElDX0JBU0VfUEFUSCIsImJhc2VQYXRoIiwiUkVBQ1RfU1RBVElDX1BVQkxJQ19QQVRIIiwicHVibGljUGF0aCIsIlJFQUNUX1NUQVRJQ19BU1NFVFNfUEFUSCIsImFzc2V0c1BhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsInNwbGl0Q2h1bmtzIiwiY2h1bmtzIiwibWluU2l6ZSIsIm1pbkNodW5rcyIsIm1heEFzeW5jUmVxdWVzdHMiLCJtYXhJbml0aWFsUmVxdWVzdHMiLCJhdXRvbWF0aWNOYW1lRGVsaW1pdGVyIiwibmFtZSIsImNhY2hlR3JvdXBzIiwidmVuZG9ycyIsInRlc3QiLCJwcmlvcml0eSIsInJldXNlRXhpc3RpbmdDaHVuayIsImV4dHJhY2tDU1NDaHVua3MiLCJFeHRyYWN0Q3NzQ2h1bmtzIiwiZmlsZW5hbWUiLCJjaHVua0ZpbGVuYW1lIiwiZXh0cmFjdENzc0NodW5rcyIsInN0eWxlcyIsImVuZm9yY2UiLCJtb2RlIiwiY29udGV4dCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiZGlzYWJsZVJ1bnRpbWUiLCJyZXF1aXJlIiwib3V0cHV0Iiwib3B0aW1pemF0aW9uIiwic2lkZUVmZmVjdHMiLCJtaW5pbWl6ZSIsIm1pbmltaXplciIsIlRlcnNlclBsdWdpbiIsImNhY2hlIiwicGFyYWxsZWwiLCJleGNsdWRlIiwidGVyc2VyIiwic291cmNlTWFwIiwicHJvZHVjdGlvblNvdXJjZU1hcHMiLCJ0ZXJzZXJPcHRpb25zIiwiaWU4IiwibWFuZ2xlIiwic2FmYXJpMTAiLCJwYXJzZSIsImVjbWEiLCJjb21wcmVzcyIsIk9wdGltaXplQ1NTQXNzZXRzUGx1Z2luIiwicGVyZm9ybWFuY2UiLCJtYXhFbnRyeXBvaW50U2l6ZSIsIm1vZHVsZSIsInJ1bGVzIiwic3RhZ2UiLCJpc05vZGUiLCJzdHJpY3RFeHBvcnRQcmVzZW5jZSIsIm1vZHVsZXMiLCJtYXAiLCJkIiwiZXh0ZW5zaW9ucyIsImFsaWFzIiwicmVhY3QkIiwiX19yZWFjdF9zdGF0aWNfcm9vdF9fIiwiZXh0ZXJuYWxzIiwidGFyZ2V0IiwidW5kZWZpbmVkIiwicGx1Z2lucyIsIndlYnBhY2siLCJFbnZpcm9ubWVudFBsdWdpbiIsIkNhc2VTZW5zaXRpdmVQYXRoc1BsdWdpbiIsIkJ1bmRsZUFuYWx5emVyUGx1Z2luIiwiZmlsdGVyIiwiZGV2dG9vbCIsInJlc3VsdCIsIkFSVElGQUNUUyIsImxpYnJhcnlUYXJnZXQiLCJSZWdFeHAiLCJQTFVHSU5TIiwicmVxdWVzdCIsImNhbGxiYWNrIiwicmVzb2x2ZWQiLCJzb21lIiwid2hpdGVsaXN0Iiwib3B0aW1pemUiLCJMaW1pdENodW5rQ291bnRQbHVnaW4iLCJtYXhDaHVua3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7O0FBRUEsU0FBU0EsTUFBVCxDQUFnQkMsS0FBaEIsRUFBdUI7QUFBQSxNQUNiQyxPQURhLEdBQ2NELEtBRGQsQ0FDYkMsT0FEYTtBQUFBLE1BQ0pDLE1BREksR0FDY0YsS0FEZCxDQUNKRSxNQURJO0FBQUEsTUFDSUMsS0FESixHQUNjSCxLQURkLENBQ0lHLEtBREo7QUFBQSxzQkFFNkJELE1BQU0sQ0FBQ0UsS0FGcEM7QUFBQSxNQUViQyxJQUZhLGlCQUViQSxJQUZhO0FBQUEsTUFFUEMsSUFGTyxpQkFFUEEsSUFGTztBQUFBLE1B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Q0MsSUFBQUEsU0FBUyxFQUFFO0FBRDhCLEdBQTNDLENBSGUsQ0FBakI7QUFPQSxTQUFPWixNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd2VicGFjayBmcm9tICd3ZWJwYWNrJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBDYXNlU2Vuc2l0aXZlUGF0aHNQbHVnaW4gZnJvbSAnY2FzZS1zZW5zaXRpdmUtcGF0aHMtd2VicGFjay1wbHVnaW4nXG5pbXBvcnQgeyBCdW5kbGVBbmFseXplclBsdWdpbiB9IGZyb20gJ3dlYnBhY2stYnVuZGxlLWFuYWx5emVyJ1xuaW1wb3J0IFRlcnNlclBsdWdpbiBmcm9tICd0ZXJzZXItd2VicGFjay1wbHVnaW4nXG5pbXBvcnQgbm9kZUV4dGVybmFscyBmcm9tICd3ZWJwYWNrLW5vZGUtZXh0ZXJuYWxzJ1xuaW1wb3J0IEV4dHJhY3RDc3NDaHVua3MgZnJvbSAnZXh0cmFjdC1jc3MtY2h1bmtzLXdlYnBhY2stcGx1Z2luJ1xuaW1wb3J0IE9wdGltaXplQ1NTQXNzZXRzUGx1Z2luIGZyb20gJ29wdGltaXplLWNzcy1hc3NldHMtd2VicGFjay1wbHVnaW4nXG5pbXBvcnQgcmVzb2x2ZUZyb20gZnJvbSAncmVzb2x2ZS1mcm9tJ1xuLy9cbmltcG9ydCBydWxlcyBmcm9tICcuL3J1bGVzJ1xuXG5mdW5jdGlvbiBjb21tb24oc3RhdGUpIHtcbiAgY29uc3QgeyBhbmFseXplLCBjb25maWcsIGRlYnVnIH0gPSBzdGF0ZVxuICBjb25zdCB7IFJPT1QsIERJU1QsIE5PREVfTU9EVUxFUywgU1JDLCBBU1NFVFMgfSA9IGNvbmZpZy5wYXRoc1xuXG4gIHByb2Nlc3MuZW52LlJFQUNUX1NUQVRJQ19FTlRSWV9QQVRIID0gY29uZmlnLmVudHJ5XG4gIHByb2Nlc3MuZW52LlJFQUNUX1NUQVRJQ19TSVRFX1JPT1QgPSBjb25maWcuc2l0ZVJvb3RcbiAgcHJvY2Vzcy5lbnYuUkVBQ1RfU1RBVElDX0JBU0VfUEFUSCA9IGNvbmZpZy5iYXNlUGF0aFxuICBwcm9jZXNzLmVudi5SRUFDVF9TVEFUSUNfUFVCTElDX1BBVEggPSBjb25maWcucHVibGljUGF0aFxuICBwcm9jZXNzLmVudi5SRUFDVF9TVEFUSUNfQVNTRVRTX1BBVEggPSBjb25maWcuYXNzZXRzUGF0aFxuXG4gIGlmICghRElTVC5zdGFydHNXaXRoKFJPT1QpKSB7XG4gICAgLy8gd2UgYnVpbGQgb3V0c2lkZSBvZiBwcm9qZWN0IGRpciwgc28gcmVzZXQgc29tZSBwYXRoc1xuICAgIHByb2Nlc3MuZW52LlJFQUNUX1NUQVRJQ19BU1NFVFNfUEFUSCA9IGNvbmZpZy5hc3NldHNQYXRoLnJlcGxhY2UoRElTVCwgJycpXG4gIH1cblxuICBjb25zdCBzcGxpdENodW5rcyA9IHtcbiAgICBjaHVua3M6ICdhbGwnLFxuICAgIG1pblNpemU6IDEwMDAwLFxuICAgIG1pbkNodW5rczogMSxcbiAgICBtYXhBc3luY1JlcXVlc3RzOiA1LFxuICAgIG1heEluaXRpYWxSZXF1ZXN0czogNSxcbiAgICBhdXRvbWF0aWNOYW1lRGVsaW1pdGVyOiAnficsXG4gICAgbmFtZTogdHJ1ZSxcbiAgICBjYWNoZUdyb3Vwczoge1xuICAgICAgdmVuZG9yczoge1xuICAgICAgICB0ZXN0OiAvW1xcXFwvXW5vZGVfbW9kdWxlc1tcXFxcL10vLFxuICAgICAgICBwcmlvcml0eTogLTEwLFxuICAgICAgICBjaHVua3M6ICdhbGwnLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgbWluQ2h1bmtzOiAyLFxuICAgICAgICBwcmlvcml0eTogLTIwLFxuICAgICAgICByZXVzZUV4aXN0aW5nQ2h1bms6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gIH1cblxuICBsZXQgZXh0cmFja0NTU0NodW5rcyA9IG5ldyBFeHRyYWN0Q3NzQ2h1bmtzKHtcbiAgICBmaWxlbmFtZTogJ1tuYW1lXS5bY29udGVudEhhc2g6OF0uY3NzJyxcbiAgICBjaHVua0ZpbGVuYW1lOiAnW2lkXS5bY29udGVudEhhc2g6OF0uY3NzJyxcbiAgfSlcblxuICBpZiAoIWNvbmZpZy5leHRyYWN0Q3NzQ2h1bmtzKSB7XG4gICAgc3BsaXRDaHVua3MuY2FjaGVHcm91cHMgPSB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgbmFtZTogJ3N0eWxlcycsXG4gICAgICAgIHRlc3Q6IC9cXC5jc3MkLyxcbiAgICAgICAgY2h1bmtzOiAnYWxsJyxcbiAgICAgICAgZW5mb3JjZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGV4dHJhY2tDU1NDaHVua3MgPSBuZXcgRXh0cmFjdENzc0NodW5rcyh7XG4gICAgICBmaWxlbmFtZTogJ1tuYW1lXS5bY29udGVudEhhc2g6OF0uY3NzJyxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlOiAncHJvZHVjdGlvbicsXG4gICAgY29udGV4dDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uLy4uL25vZGVfbW9kdWxlcycpLFxuICAgIGVudHJ5OiBjb25maWcuZGlzYWJsZVJ1bnRpbWVcbiAgICAgID8gY29uZmlnLmVudHJ5XG4gICAgICA6IFtcbiAgICAgICAgICByZXF1aXJlLnJlc29sdmUoJy4uLy4uL2Jvb3RzdHJhcFBsdWdpbnMnKSxcbiAgICAgICAgICByZXF1aXJlLnJlc29sdmUoJy4uLy4uL2Jvb3RzdHJhcFRlbXBsYXRlcycpLFxuICAgICAgICAgIHJlcXVpcmUucmVzb2x2ZSgnLi4vLi4vYm9vdHN0cmFwQXBwJyksXG4gICAgICAgIF0sXG4gICAgb3V0cHV0OiB7XG4gICAgICBmaWxlbmFtZTogJ1tuYW1lXS5bY29udGVudEhhc2g6OF0uanMnLFxuICAgICAgY2h1bmtGaWxlbmFtZTogJ3RlbXBsYXRlcy9bbmFtZV0uW2NvbnRlbnRIYXNoOjhdLmpzJyxcbiAgICAgIHBhdGg6IEFTU0VUUyxcbiAgICAgIHB1YmxpY1BhdGg6IHByb2Nlc3MuZW52LlJFQUNUX1NUQVRJQ19BU1NFVFNfUEFUSCB8fCAnLycsXG4gICAgfSxcbiAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgIHNpZGVFZmZlY3RzOiB0cnVlLFxuICAgICAgbWluaW1pemU6IHRydWUsXG4gICAgICBtaW5pbWl6ZXI6IFtcbiAgICAgICAgbmV3IFRlcnNlclBsdWdpbih7XG4gICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgcGFyYWxsZWw6IHRydWUsXG4gICAgICAgICAgZXhjbHVkZTogL1xcLm1pblxcLmpzLyxcbiAgICAgICAgICAuLi5jb25maWcudGVyc2VyLFxuICAgICAgICAgIHNvdXJjZU1hcDpcbiAgICAgICAgICAgIGNvbmZpZy5wcm9kdWN0aW9uU291cmNlTWFwcyB8fCBjb25maWcudGVyc2VyLnNvdXJjZU1hcCB8fCBkZWJ1ZyxcbiAgICAgICAgICB0ZXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBpZTg6IGZhbHNlLFxuICAgICAgICAgICAgLi4uY29uZmlnLnRlcnNlci50ZXJzZXJPcHRpb25zLFxuICAgICAgICAgICAgbWFuZ2xlOiB7IHNhZmFyaTEwOiB0cnVlLCAuLi5jb25maWcudGVyc2VyLnRlcnNlck9wdGlvbnMubWFuZ2xlIH0sXG4gICAgICAgICAgICBwYXJzZTogeyBlY21hOiA4LCAuLi5jb25maWcudGVyc2VyLnRlcnNlck9wdGlvbnMucGFyc2UgfSxcbiAgICAgICAgICAgIGNvbXByZXNzOiB7IGVjbWE6IDUsIC4uLmNvbmZpZy50ZXJzZXIudGVyc2VyT3B0aW9ucy5jb21wcmVzcyB9LFxuICAgICAgICAgICAgb3V0cHV0OiB7IGVjbWE6IDUsIC4uLmNvbmZpZy50ZXJzZXIudGVyc2VyT3B0aW9ucy5vdXRwdXQgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IE9wdGltaXplQ1NTQXNzZXRzUGx1Z2luKHt9KSxcbiAgICAgIF0sXG4gICAgICBzcGxpdENodW5rcyxcbiAgICB9LFxuICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICBtYXhFbnRyeXBvaW50U2l6ZTogMzAwMDAwLFxuICAgIH0sXG4gICAgbW9kdWxlOiB7XG4gICAgICBydWxlczogcnVsZXMoeyBjb25maWcsIHN0YWdlOiAncHJvZCcsIGlzTm9kZTogZmFsc2UgfSksXG4gICAgICBzdHJpY3RFeHBvcnRQcmVzZW5jZTogdHJ1ZSxcbiAgICB9LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIG1vZHVsZXM6IFtcbiAgICAgICAgTk9ERV9NT0RVTEVTLFxuICAgICAgICBTUkMsXG4gICAgICAgIERJU1QsXG4gICAgICAgIC4uLltOT0RFX01PRFVMRVMsIFNSQywgRElTVF0ubWFwKGQgPT5cbiAgICAgICAgICBESVNULnN0YXJ0c1dpdGgoUk9PVCkgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBkKSA6IHBhdGgucmVzb2x2ZShkKVxuICAgICAgICApLFxuICAgICAgICAnbm9kZV9tb2R1bGVzJyxcbiAgICAgIF0sXG4gICAgICBleHRlbnNpb25zOiBbJy53YXNtJywgJy5tanMnLCAnLmpzJywgJy5qc29uJywgJy5qc3gnXSxcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgIHJlYWN0JDogcmVzb2x2ZUZyb20oY29uZmlnLnBhdGhzLk5PREVfTU9EVUxFUywgJ3JlYWN0JyksXG4gICAgICAgICdyZWFjdC1kb20kJzogcmVzb2x2ZUZyb20oY29uZmlnLnBhdGhzLk5PREVfTU9EVUxFUywgJ3JlYWN0LWRvbScpLFxuICAgICAgICAncmVhY3QtdW5pdmVyc2FsLWNvbXBvbmVudCc6IHJlc29sdmVGcm9tKFxuICAgICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgICAncmVhY3QtdW5pdmVyc2FsLWNvbXBvbmVudCdcbiAgICAgICAgKSxcbiAgICAgICAgX19yZWFjdF9zdGF0aWNfcm9vdF9fOiBjb25maWcucGF0aHMuUk9PVCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBleHRlcm5hbHM6IFtdLFxuICAgIHRhcmdldDogdW5kZWZpbmVkLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIG5ldyB3ZWJwYWNrLkVudmlyb25tZW50UGx1Z2luKHByb2Nlc3MuZW52KSxcbiAgICAgIGV4dHJhY2tDU1NDaHVua3MsXG4gICAgICBuZXcgQ2FzZVNlbnNpdGl2ZVBhdGhzUGx1Z2luKCksXG4gICAgICBhbmFseXplICYmIG5ldyBCdW5kbGVBbmFseXplclBsdWdpbigpLFxuICAgIF0uZmlsdGVyKGQgPT4gZCksXG4gICAgZGV2dG9vbDogZGVidWcgfHwgY29uZmlnLnByb2R1Y3Rpb25Tb3VyY2VNYXBzID8gJ3NvdXJjZS1tYXAnIDogZmFsc2UsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhdGUpIHtcbiAgY29uc3Qge1xuICAgIHN0YWdlLFxuICAgIGNvbmZpZzogeyBwYXRocyB9LFxuICB9ID0gc3RhdGVcblxuICBjb25zdCByZXN1bHQgPSBjb21tb24oc3RhdGUpXG4gIGlmIChzdGFnZSAhPT0gJ25vZGUnKSByZXR1cm4gcmVzdWx0XG5cbiAgLy8gTm9kZSBvbmx5ISEhXG4gIHJlc3VsdC5vdXRwdXQuZmlsZW5hbWUgPSAnc3RhdGljLWFwcC5qcydcbiAgcmVzdWx0Lm91dHB1dC5wYXRoID0gcGF0aHMuQVJUSUZBQ1RTXG4gIHJlc3VsdC5vdXRwdXQubGlicmFyeVRhcmdldCA9ICd1bWQnXG4gIHJlc3VsdC5vcHRpbWl6YXRpb24ubWluaW1pemUgPSBmYWxzZVxuICByZXN1bHQub3B0aW1pemF0aW9uLm1pbmltaXplciA9IFtdXG4gIHJlc3VsdC50YXJnZXQgPSAnbm9kZSdcbiAgcmVzdWx0LmRldnRvb2wgPSBmYWxzZVxuICByZXN1bHQuZXh0ZXJuYWxzID0gW1xuICAgIG5ldyBSZWdFeHAoYCR7cGF0aHMuUExVR0lOU31gKSxcbiAgICAoY29udGV4dCwgcmVxdWVzdCwgY2FsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGNvbnRleHQsIHJlcXVlc3QpXG4gICAgICBpZiAoXG4gICAgICAgIFsvcmVhY3Qtc3RhdGljKFxcXFx8XFwvKWxpYihcXFxcfFxcLylicm93c2VyLywgL3dlYnBhY2stZmx1c2gtY2h1bmtzL10uc29tZShcbiAgICAgICAgICBkID0+IGQudGVzdChyZXNvbHZlZClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBgY29tbW9uanMgJHtyZXNvbHZlZH1gKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2soKVxuICAgIH0sXG4gICAgbm9kZUV4dGVybmFscyh7XG4gICAgICB3aGl0ZWxpc3Q6IFsncmVhY3QtdW5pdmVyc2FsLWNvbXBvbmVudCddLFxuICAgIH0pLFxuICBdXG4gIHJlc3VsdC5tb2R1bGUucnVsZXMgPSBydWxlcyhzdGF0ZSlcbiAgcmVzdWx0LnBsdWdpbnMgPSBbXG4gICAgbmV3IHdlYnBhY2suRW52aXJvbm1lbnRQbHVnaW4ocHJvY2Vzcy5lbnYpLFxuICAgIG5ldyBDYXNlU2Vuc2l0aXZlUGF0aHNQbHVnaW4oKSxcbiAgICBuZXcgd2VicGFjay5vcHRpbWl6ZS5MaW1pdENodW5rQ291bnRQbHVnaW4oe1xuICAgICAgbWF4Q2h1bmtzOiAxLFxuICAgIH0pLFxuICBdXG4gIHJldHVybiByZXN1bHRcbn1cbiJdfQ==