UNPKG

@anansi/webpack-config

Version:
156 lines (155 loc) 19.8 kB
"use strict"; 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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