UNPKG

@anansi/webpack-config

Version:
228 lines (227 loc) 29.5 kB
"use strict"; 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 }, // Environment variables that affect webpack output version: JSON.stringify({ version: _package.version, target: argv?.target, mode, envVars: [process.env.NODE_ENV, process.env.BROWSERSLIST_ENV, process.env.BABEL_ENV, WEBPACK_PUBLIC_HOST, WEBPACK_PUBLIC_PATH, process.env.WEBPACK_ANALYZE, process.env.DEBUG, process.env.NODE_DEBUG // avoid collisions while being minimal and performant ].join('\0') }) }, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWluaUNzc0V4dHJhY3RQbHVnaW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX3RzY29uZmlnUGF0aHNXZWJwYWNrUGx1Z2luIiwiX3dlYnBhY2tTdGF0c1BsdWdpbiIsIl9jb25zdGFudHMiLCJleHBvcnRzIiwiUk9PVF9QQVRIIiwiX2dlbmVyYXRlQmFiZWxMb2FkZXIiLCJfbm9kZVBvbHlmaWxsIiwiX3BhY2thZ2UiLCJfY3NzIiwiZ2V0U3R5bGVSdWxlcyIsImRlZmF1bHQiLCJtYWtlQmFzZUNvbmZpZyIsInJvb3RQYXRoIiwiYmFzZVBhdGgiLCJsaWJyYXJ5SW5jbHVkZSIsImxpYnJhcnlFeGNsdWRlIiwiYmFiZWxSb290IiwiYnVpbGREaXIiLCJtb2RlIiwibWFuaWZlc3RGaWxlbmFtZSIsImJhYmVsTG9hZGVyIiwiYmFiZWxMb2FkZXJPcHRpb25zIiwiZXh0cmFKc0xvYWRlcnMiLCJpbkpTT3B0aW9ucyIsInRzY29uZmlnUGF0aHNPcHRpb25zIiwic3Znb09wdGlvbnMiLCJzdmdyT3B0aW9ucyIsImdsb2JhbFN0eWxlRGlyIiwibm9oYXNoIiwiYXJndiIsImVudiIsImNzc0V4dHJhY3RPcHRpb25zIiwibGlicmFyeSIsIldFQlBBQ0tfUFVCTElDX0hPU1QiLCJwcm9jZXNzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIm1vZHVsZXMiLCJwYXRoIiwiam9pbiIsInNwbGljZSIsInJlc29sdmUiLCJleHRlbnNpb25zIiwiZXh0ZW5zaW9uQWxpYXMiLCJmYWxsYmFjayIsIk5PREVfQUxJQVMiLCJwbHVnaW5zIiwiVHNjb25maWdQYXRoc1BsdWdpbiIsIm1haW5CYWJlbExvYWRlciIsImdlbmVyYXRlQmFiZWxMb2FkZXIiLCJ0YXJnZXQiLCJpbkpTQmFiZWxPcHRpb25zIiwib3B0aW9ucyIsImNhY2hlRGlyZWN0b3J5IiwiY2FjaGVJZGVudGlmaWVyIiwiY2FjaGVDb21wcmVzc2lvbiIsInVuZGVmaW5lZCIsInNvdXJjZU1hcCIsImxvYWRlciIsImJhYmVsT3B0aW9ucyIsIlN0YXRzV3JpdGVyUGx1Z2luIiwiZmlsZW5hbWUiLCJzdGF0cyIsImNodW5rTW9kdWxlcyIsInNvdXJjZSIsImNodW5rcyIsImFzc2V0cyIsInB1c2giLCJNaW5pQ3NzRXh0cmFjdFBsdWdpbiIsImNodW5rRmlsZW5hbWUiLCJhc3NldE1vZHVsZUZpbGVuYW1lIiwiY29uZmlnIiwiY29udGV4dCIsImVudHJ5IiwibmFtZSIsImVudHJ5cGF0aCIsIm91dHB1dCIsInB1YmxpY1BhdGgiLCJnbG9iYWxPYmplY3QiLCJoYXNoRnVuY3Rpb24iLCJjYWNoZSIsInR5cGUiLCJidWlsZERlcGVuZGVuY2llcyIsIl9fZmlsZW5hbWUiLCJ2ZXJzaW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImVudlZhcnMiLCJOT0RFX0VOViIsIkJST1dTRVJTTElTVF9FTlYiLCJCQUJFTF9FTlYiLCJXRUJQQUNLX0FOQUxZWkUiLCJERUJVRyIsIk5PREVfREVCVUciLCJtb2R1bGUiLCJydWxlcyIsInRlc3QiLCJpbmNsdWRlIiwiZXhjbHVkZSIsIm9uZU9mIiwiUmVnRXhwIiwidXNlIiwiaW5saW5lIiwibm9Ib3RSZWxvYWQiLCJmaWx0ZXIiLCJsIiwiaXNzdWVyIiwic3Znb0NvbmZpZyIsImdlbmVyYXRvciIsImVtaXQiLCJpbmNsdWRlcyIsImRldnRvb2wiLCJjaGlsZHJlbiIsImV4Y2x1ZGVBc3NldHMiLCJXRUJQQUNLX05PX0NBQ0hFIiwiV0VCUEFDS19DQUNIRSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNaW5pQ3NzRXh0cmFjdFBsdWdpbiBmcm9tICdtaW5pLWNzcy1leHRyYWN0LXBsdWdpbic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBUc2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3RzY29uZmlnLXBhdGhzLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7IFN0YXRzV3JpdGVyUGx1Z2luIH0gZnJvbSAnd2VicGFjay1zdGF0cy1wbHVnaW4nO1xuXG5pbXBvcnQgeyBST09UX1BBVEggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUJhYmVsTG9hZGVyIH0gZnJvbSAnLi9nZW5lcmF0ZUJhYmVsTG9hZGVyJztcbmltcG9ydCB7IE5PREVfQUxJQVMgfSBmcm9tICcuL25vZGUtcG9seWZpbGwnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2V0U3R5bGVSdWxlcyB9IGZyb20gJy4vY3NzJztcbmV4cG9ydCB7IFJPT1RfUEFUSCB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQmFzZUNvbmZpZyh7XG4gIHJvb3RQYXRoLFxuICBiYXNlUGF0aCxcbiAgbGlicmFyeUluY2x1ZGUsXG4gIGxpYnJhcnlFeGNsdWRlLFxuICBiYWJlbFJvb3QsXG4gIGJ1aWxkRGlyLFxuICBtb2RlLFxuICBtYW5pZmVzdEZpbGVuYW1lLFxuICBiYWJlbExvYWRlcjogYmFiZWxMb2FkZXJPcHRpb25zLFxuICBleHRyYUpzTG9hZGVycyxcbiAgaW5KU09wdGlvbnMsXG4gIHRzY29uZmlnUGF0aHNPcHRpb25zLFxuICBzdmdvT3B0aW9ucyxcbiAgc3Znck9wdGlvbnMsXG4gIGdsb2JhbFN0eWxlRGlyLFxuICBub2hhc2gsXG4gIGFyZ3YsXG4gIGVudixcbiAgY3NzRXh0cmFjdE9wdGlvbnMsXG4gIGxpYnJhcnksXG59KSB7XG4gIGNvbnN0IFdFQlBBQ0tfUFVCTElDX0hPU1QgPSBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19IT1NUIHx8ICcnO1xuICBjb25zdCBXRUJQQUNLX1BVQkxJQ19QQVRIID0gcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCB8fCAnLyc7XG5cbiAgY29uc3QgbW9kdWxlcyA9IFtwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoKSwgJ25vZGVfbW9kdWxlcyddO1xuICBpZiAoZ2xvYmFsU3R5bGVEaXIpIHtcbiAgICBtb2R1bGVzLnNwbGljZSgxLCAwLCBwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoLCBnbG9iYWxTdHlsZURpcikpO1xuICB9XG4gIGNvbnN0IHJlc29sdmUgPSB7XG4gICAgbW9kdWxlcyxcbiAgICBleHRlbnNpb25zOiBbJy50cycsICcudHN4JywgJy5tdHMnLCAnLmN0cycsICcuLi4nXSxcbiAgICBleHRlbnNpb25BbGlhczoge1xuICAgICAgJy5qcyc6IFsnLmpzJywgJy50cycsICcudHN4JywgJy5qc3gnXSxcbiAgICAgICcubWpzJzogWycubWpzJywgJy5tdHMnXSxcbiAgICAgICcuY2pzJzogWycuY2pzJywgJy5jdHMnXSxcbiAgICB9LFxuICAgIGZhbGxiYWNrOiBOT0RFX0FMSUFTLFxuICAgIHBsdWdpbnM6XG4gICAgICB0c2NvbmZpZ1BhdGhzT3B0aW9ucyAhPT0gZmFsc2UgP1xuICAgICAgICBbbmV3IFRzY29uZmlnUGF0aHNQbHVnaW4odHNjb25maWdQYXRoc09wdGlvbnMpXVxuICAgICAgOiBbXSxcbiAgfTtcblxuICBjb25zdCBtYWluQmFiZWxMb2FkZXIgPSBnZW5lcmF0ZUJhYmVsTG9hZGVyKHtcbiAgICByb290UGF0aCxcbiAgICBiYWJlbFJvb3QsXG4gICAgdGFyZ2V0OiBhcmd2Py50YXJnZXQsXG4gICAgbW9kZSxcbiAgICBiYWJlbExvYWRlck9wdGlvbnMsXG4gICAgbGlicmFyeSxcbiAgfSk7XG4gIGNvbnN0IGluSlNCYWJlbE9wdGlvbnMgPSB7XG4gICAgLi4ubWFpbkJhYmVsTG9hZGVyLm9wdGlvbnMsXG4gIH07XG4gIGRlbGV0ZSBpbkpTQmFiZWxPcHRpb25zLmNhY2hlRGlyZWN0b3J5O1xuICBkZWxldGUgaW5KU0JhYmVsT3B0aW9ucy5jYWNoZUlkZW50aWZpZXI7XG4gIGRlbGV0ZSBpbkpTQmFiZWxPcHRpb25zLmNhY2hlQ29tcHJlc3Npb247XG5cbiAgaWYgKGluSlNPcHRpb25zICE9PSBmYWxzZSkge1xuICAgIGlmIChpbkpTT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbkpTT3B0aW9ucyA9IHtcbiAgICAgICAgc291cmNlTWFwOiBtb2RlICE9PSAncHJvZHVjdGlvbicsXG4gICAgICB9O1xuICAgIH1cbiAgICBleHRyYUpzTG9hZGVycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ0B3eXctaW4tanMvd2VicGFjay1sb2FkZXInKSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIC8vIGByZXNvbHZlT3B0aW9uc2Agd2FzIGRyb3BwZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL2NhbGxzdGFjay9saW5hcmlhL3B1bGwvMTAwMSBhcyBpdCB1c2VzIHdlYnBhY2sgZGlyZWN0bHlcbiAgICAgICAgICAvL3Jlc29sdmVPcHRpb25zOiB7IC4uLnJlc29sdmUgfSxcbiAgICAgICAgICBiYWJlbE9wdGlvbnM6IGluSlNCYWJlbE9wdGlvbnMsXG4gICAgICAgICAgLi4uaW5KU09wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uZXh0cmFKc0xvYWRlcnMsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnMgPSBbXG4gICAgbmV3IFN0YXRzV3JpdGVyUGx1Z2luKHtcbiAgICAgIGZpbGVuYW1lOiBtYW5pZmVzdEZpbGVuYW1lLFxuICAgICAgc3RhdHM6IHtcbiAgICAgICAgY2h1bmtNb2R1bGVzOiBmYWxzZSxcbiAgICAgICAgc291cmNlOiBmYWxzZSxcbiAgICAgICAgY2h1bmtzOiBmYWxzZSxcbiAgICAgICAgbW9kdWxlczogZmFsc2UsXG4gICAgICAgIGFzc2V0czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKGNzc0V4dHJhY3RPcHRpb25zICE9PSBmYWxzZSkge1xuICAgIHBsdWdpbnMucHVzaChcbiAgICAgIG5ldyBNaW5pQ3NzRXh0cmFjdFBsdWdpbih7XG4gICAgICAgIGZpbGVuYW1lOlxuICAgICAgICAgIChtb2RlICE9PSAncHJvZHVjdGlvbicpIHwgbm9oYXNoID9cbiAgICAgICAgICAgICdbbmFtZV0uY3NzJ1xuICAgICAgICAgIDogJ1tuYW1lXS5bY29udGVudGhhc2hdLmNzcycsXG4gICAgICAgIGNodW5rRmlsZW5hbWU6XG4gICAgICAgICAgKG1vZGUgIT09ICdwcm9kdWN0aW9uJykgfCBub2hhc2ggP1xuICAgICAgICAgICAgJ1tuYW1lXS5jc3MnXG4gICAgICAgICAgOiAnW25hbWVdLltjb250ZW50aGFzaF0uY3NzJyxcbiAgICAgICAgLi4uY3NzRXh0cmFjdE9wdGlvbnMsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXNzZXRNb2R1bGVGaWxlbmFtZSA9XG4gICAgbm9oYXNoIHx8IG1vZGUgIT09ICdwcm9kdWN0aW9uJyA/XG4gICAgICAnW25hbWVdLltleHRdW3F1ZXJ5XSdcbiAgICA6ICdbY29udGVudGhhc2hdLltleHRdW3F1ZXJ5XSc7XG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBjb250ZXh0OiByb290UGF0aCxcbiAgICBlbnRyeToge1xuICAgICAgW2Vudj8ubmFtZSB8fCAnQXBwJ106IFtlbnY/LmVudHJ5cGF0aCB8fCBgLi8ke2Jhc2VQYXRofWBdLFxuICAgIH0sXG4gICAgb3V0cHV0OiB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4ocm9vdFBhdGgsIGJ1aWxkRGlyKSxcbiAgICAgIHB1YmxpY1BhdGg6IFdFQlBBQ0tfUFVCTElDX0hPU1QgKyBXRUJQQUNLX1BVQkxJQ19QQVRILFxuICAgICAgZmlsZW5hbWU6XG4gICAgICAgIG5vaGFzaCB8fCBtb2RlICE9PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdbbmFtZV0uanMnXG4gICAgICAgIDogJ1tuYW1lXS1bY29udGVudGhhc2hdLmpzJyxcbiAgICAgIGNodW5rRmlsZW5hbWU6XG4gICAgICAgIG5vaGFzaCB8fCBtb2RlICE9PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdbbmFtZV0uY2h1bmsuanMnXG4gICAgICAgIDogJ1tuYW1lXS1bY29udGVudGhhc2hdLmNodW5rLmpzJyxcbiAgICAgIGFzc2V0TW9kdWxlRmlsZW5hbWUsXG4gICAgICBnbG9iYWxPYmplY3Q6IFwiKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzKVwiLFxuICAgICAgLy8gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgbWFrZXMgdGhpcyBjb21wYXRpYmxlIGFjcm9zcyBub2RlIDE2IGFuZCAxOCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgaGFzaEZ1bmN0aW9uOiAneHhoYXNoNjQnLFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIHR5cGU6ICdmaWxlc3lzdGVtJyxcbiAgICAgIGJ1aWxkRGVwZW5kZW5jaWVzOiB7XG4gICAgICAgIGNvbmZpZzogW19fZmlsZW5hbWVdLCAvLyB5b3UgbWF5IG9taXQgdGhpcyB3aGVuIHlvdXIgQ0xJIGF1dG9tYXRpY2FsbHkgYWRkcyBpdFxuICAgICAgfSxcbiAgICAgIC8vIEVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB3ZWJwYWNrIG91dHB1dFxuICAgICAgdmVyc2lvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICB0YXJnZXQ6IGFyZ3Y/LnRhcmdldCxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgZW52VmFyczogW1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgICAgIHByb2Nlc3MuZW52LkJST1dTRVJTTElTVF9FTlYsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuQkFCRUxfRU5WLFxuICAgICAgICAgIFdFQlBBQ0tfUFVCTElDX0hPU1QsXG4gICAgICAgICAgV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICBwcm9jZXNzLmVudi5XRUJQQUNLX0FOQUxZWkUsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyxcbiAgICAgICAgICAvLyBhdm9pZCBjb2xsaXNpb25zIHdoaWxlIGJlaW5nIG1pbmltYWwgYW5kIHBlcmZvcm1hbnRcbiAgICAgICAgXS5qb2luKCdcXDAnKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICBtb2R1bGU6IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICBpbmNsdWRlOiBbXG4gICAgICAgICAgICBwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoKSxcbiAgICAgICAgICAgIHBhdGguam9pbihyb290UGF0aCwgJ3N0b3JpZXMnKSxcbiAgICAgICAgICAgIC9cXC5zdG9yeWJvb2svLFxuICAgICAgICAgICAgbGlicmFyeUluY2x1ZGUsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBleGNsdWRlOiBsaWJyYXJ5RXhjbHVkZSxcbiAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgLyogVE9ETyhkZXByZWNhdGVkKTogRHJvcCB0aGlzIG9uY2UgcGVvcGxlIGhhdmUgYSBjaGFuY2UgdG8gbWlncmF0ZSAqL1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwud29ya2VyXFwuKHR8ailzJC8sXG4gICAgICAgICAgICAgIGluY2x1ZGU6IFtuZXcgUmVnRXhwKGJhc2VQYXRoKSwgbGlicmFyeUluY2x1ZGVdLFxuICAgICAgICAgICAgICB1c2U6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnd29ya2VyLWxvYWRlcicpLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6ICdmYWxsYmFjaycsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIG5vaGFzaCA/ICdbbmFtZV0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiBtb2RlID09PSAncHJvZHVjdGlvbicgPyAnW25hbWVdLVtjb250ZW50aGFzaF0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnW25hbWVdLmpzJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUJhYmVsTG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgIHJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgYmFiZWxSb290LFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBhcmd2Py50YXJnZXQsXG4gICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgYmFiZWxMb2FkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgbm9Ib3RSZWxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICAgICAgdXNlOiBbbWFpbkJhYmVsTG9hZGVyLCAuLi5leHRyYUpzTG9hZGVyc10uZmlsdGVyKGwgPT4gbCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuaHRtbCQvLFxuICAgICAgICAgIHVzZTogW3sgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ2h0bWwtbG9hZGVyJykgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKG1kfHR4dCkkLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQvc291cmNlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IC9cXC5zdmcoXFw/dj1cXGQrXFwuXFxkK1xcLlxcZCspPyQvLFxuICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlzc3VlcjogL1xcLihqfHQpc3g/JC8sXG4gICAgICAgICAgICAgIHVzZTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxvYWRlcjogcmVxdWlyZS5yZXNvbHZlKCdAc3Znci93ZWJwYWNrJyksXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z29Db25maWc6IHN2Z29PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAuLi5zdmdyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnZmlsZS1sb2FkZXInKSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICBub2hhc2ggfHwgbW9kZSAhPT0gJ3Byb2R1Y3Rpb24nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZV0uW2V4dF1bcXVlcnldJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ1ttZDU6Y29udGVudGhhc2g6YmFzZTY0OjhdLltleHRdW3F1ZXJ5XScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICdqYXZhc2NyaXB0L2F1dG8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGZvciBub24tanMgZmlsZXMgYWx3YXlzIHVzZSBmaWxlLWxvYWRlclxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBlbWl0OiAhYXJndj8udGFyZ2V0Py5pbmNsdWRlcz8uKCdub2RlJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKGFwbmd8cG5nfGpwZ3xnaWZ8aWNvfHdlYnB8YXZpZnxjdXJ8YW5pfG90Znxlb3R8d29mZjJ8d29mZnx0dGYpKFxcP3Y9XFxkK1xcLlxcZCtcXC5cXGQrKT8kLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIGdlbmVyYXRvcjoge1xuICAgICAgICAgICAgZW1pdDogIWFyZ3Y/LnRhcmdldD8uaW5jbHVkZXM/Lignbm9kZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHBkZnxtcDR8d2VibXx3YXZ8bXAzfG00YXxhYWN8b2dhKShcXD92PVxcZCtcXC5cXGQrXFwuXFxkKyk/JC8sXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0L3Jlc291cmNlJyxcbiAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgIGVtaXQ6ICFhcmd2Py50YXJnZXQ/LmluY2x1ZGVzPy4oJ25vZGUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHJlc29sdmUsXG4gICAgZGV2dG9vbDogJ3NvdXJjZS1tYXAnLFxuICAgIHN0YXRzOiB7XG4gICAgICBjaGlsZHJlbjogZmFsc2UsXG4gICAgICBjaHVua3M6IGZhbHNlLFxuICAgICAgZXhjbHVkZUFzc2V0czogWy9cXC5tYXAvXSxcbiAgICB9LFxuICB9O1xuICBpZiAoZW52Py5uYW1lKSBjb25maWcubmFtZSA9IGVudi5uYW1lO1xuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5XRUJQQUNLX05PX0NBQ0hFID09PSB0cnVlIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19OT19DQUNIRSA9PT0gJ3RydWUnIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ25vbmUnXG4gICkge1xuICAgIGRlbGV0ZSBjb25maWcuY2FjaGU7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ21lbW9yeScpIHtcbiAgICBjb25maWcuY2FjaGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LldFQlBBQ0tfQ0FDSEUgPT09ICdmaWxlc3lzdGVtJykge1xuICAgIGNvbmZpZy5jYWNoZS50eXBlID0gJ2ZpbGVzeXN0ZW0nO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSwyQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUF3Q0ssT0FBQSxDQUFBQyxTQUFBLEdBQUFGLFVBQUEsQ0FBQUUsU0FBQTtBQUN4QyxJQUFBQyxvQkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVCxPQUFBO0FBRUEsSUFBQVUsSUFBQSxHQUFBWCxzQkFBQSxDQUFBQyxPQUFBO0FBQWlESyxPQUFBLENBQUFNLGFBQUEsR0FBQUQsSUFBQSxDQUFBRSxPQUFBO0FBR2xDLFNBQVNDLGNBQWNBLENBQUM7RUFDckNDLFFBQVE7RUFDUkMsUUFBUTtFQUNSQyxjQUFjO0VBQ2RDLGNBQWM7RUFDZEMsU0FBUztFQUNUQyxRQUFRO0VBQ1JDLElBQUk7RUFDSkMsZ0JBQWdCO0VBQ2hCQyxXQUFXLEVBQUVDLGtCQUFrQjtFQUMvQkMsY0FBYztFQUNkQyxXQUFXO0VBQ1hDLG9CQUFvQjtFQUNwQkMsV0FBVztFQUNYQyxXQUFX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