UNPKG

@anansi/webpack-config

Version:
229 lines (228 loc) 29.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default; exports.__esModule = true; exports.default = makeBaseConfig; exports.getStyleRules = void 0; var _stringify = _interopRequireDefault(require("core-js-pure/stable/json/stringify.js")); 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: (0, _stringify.default)({ 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWluaUNzc0V4dHJhY3RQbHVnaW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX3RzY29uZmlnUGF0aHNXZWJwYWNrUGx1Z2luIiwiX3dlYnBhY2tTdGF0c1BsdWdpbiIsIl9jb25zdGFudHMiLCJleHBvcnRzIiwiUk9PVF9QQVRIIiwiX2dlbmVyYXRlQmFiZWxMb2FkZXIiLCJfbm9kZVBvbHlmaWxsIiwiX3BhY2thZ2UiLCJfY3NzIiwiZ2V0U3R5bGVSdWxlcyIsImRlZmF1bHQiLCJtYWtlQmFzZUNvbmZpZyIsInJvb3RQYXRoIiwiYmFzZVBhdGgiLCJsaWJyYXJ5SW5jbHVkZSIsImxpYnJhcnlFeGNsdWRlIiwiYmFiZWxSb290IiwiYnVpbGREaXIiLCJtb2RlIiwibWFuaWZlc3RGaWxlbmFtZSIsImJhYmVsTG9hZGVyIiwiYmFiZWxMb2FkZXJPcHRpb25zIiwiZXh0cmFKc0xvYWRlcnMiLCJpbkpTT3B0aW9ucyIsInRzY29uZmlnUGF0aHNPcHRpb25zIiwic3Znb09wdGlvbnMiLCJzdmdyT3B0aW9ucyIsImdsb2JhbFN0eWxlRGlyIiwibm9oYXNoIiwiYXJndiIsImVudiIsImNzc0V4dHJhY3RPcHRpb25zIiwibGlicmFyeSIsIldFQlBBQ0tfUFVCTElDX0hPU1QiLCJwcm9jZXNzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIm1vZHVsZXMiLCJwYXRoIiwiam9pbiIsInNwbGljZSIsInJlc29sdmUiLCJleHRlbnNpb25zIiwiZXh0ZW5zaW9uQWxpYXMiLCJmYWxsYmFjayIsIk5PREVfQUxJQVMiLCJwbHVnaW5zIiwiVHNjb25maWdQYXRoc1BsdWdpbiIsIm1haW5CYWJlbExvYWRlciIsImdlbmVyYXRlQmFiZWxMb2FkZXIiLCJ0YXJnZXQiLCJpbkpTQmFiZWxPcHRpb25zIiwib3B0aW9ucyIsImNhY2hlRGlyZWN0b3J5IiwiY2FjaGVJZGVudGlmaWVyIiwiY2FjaGVDb21wcmVzc2lvbiIsInVuZGVmaW5lZCIsInNvdXJjZU1hcCIsImxvYWRlciIsImJhYmVsT3B0aW9ucyIsIlN0YXRzV3JpdGVyUGx1Z2luIiwiZmlsZW5hbWUiLCJzdGF0cyIsImNodW5rTW9kdWxlcyIsInNvdXJjZSIsImNodW5rcyIsImFzc2V0cyIsInB1c2giLCJNaW5pQ3NzRXh0cmFjdFBsdWdpbiIsImNodW5rRmlsZW5hbWUiLCJhc3NldE1vZHVsZUZpbGVuYW1lIiwiY29uZmlnIiwiY29udGV4dCIsImVudHJ5IiwibmFtZSIsImVudHJ5cGF0aCIsIm91dHB1dCIsInB1YmxpY1BhdGgiLCJnbG9iYWxPYmplY3QiLCJoYXNoRnVuY3Rpb24iLCJjYWNoZSIsInR5cGUiLCJidWlsZERlcGVuZGVuY2llcyIsIl9fZmlsZW5hbWUiLCJ2ZXJzaW9uIiwiX3N0cmluZ2lmeSIsImVudlZhcnMiLCJOT0RFX0VOViIsIkJST1dTRVJTTElTVF9FTlYiLCJCQUJFTF9FTlYiLCJXRUJQQUNLX0FOQUxZWkUiLCJERUJVRyIsIk5PREVfREVCVUciLCJtb2R1bGUiLCJydWxlcyIsInRlc3QiLCJpbmNsdWRlIiwiZXhjbHVkZSIsIm9uZU9mIiwiUmVnRXhwIiwidXNlIiwiaW5saW5lIiwibm9Ib3RSZWxvYWQiLCJmaWx0ZXIiLCJsIiwiaXNzdWVyIiwic3Znb0NvbmZpZyIsImdlbmVyYXRvciIsImVtaXQiLCJpbmNsdWRlcyIsImRldnRvb2wiLCJjaGlsZHJlbiIsImV4Y2x1ZGVBc3NldHMiLCJXRUJQQUNLX05PX0NBQ0hFIiwiV0VCUEFDS19DQUNIRSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNaW5pQ3NzRXh0cmFjdFBsdWdpbiBmcm9tICdtaW5pLWNzcy1leHRyYWN0LXBsdWdpbic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBUc2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3RzY29uZmlnLXBhdGhzLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7IFN0YXRzV3JpdGVyUGx1Z2luIH0gZnJvbSAnd2VicGFjay1zdGF0cy1wbHVnaW4nO1xuXG5pbXBvcnQgeyBST09UX1BBVEggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUJhYmVsTG9hZGVyIH0gZnJvbSAnLi9nZW5lcmF0ZUJhYmVsTG9hZGVyJztcbmltcG9ydCB7IE5PREVfQUxJQVMgfSBmcm9tICcuL25vZGUtcG9seWZpbGwnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2V0U3R5bGVSdWxlcyB9IGZyb20gJy4vY3NzJztcbmV4cG9ydCB7IFJPT1RfUEFUSCB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQmFzZUNvbmZpZyh7XG4gIHJvb3RQYXRoLFxuICBiYXNlUGF0aCxcbiAgbGlicmFyeUluY2x1ZGUsXG4gIGxpYnJhcnlFeGNsdWRlLFxuICBiYWJlbFJvb3QsXG4gIGJ1aWxkRGlyLFxuICBtb2RlLFxuICBtYW5pZmVzdEZpbGVuYW1lLFxuICBiYWJlbExvYWRlcjogYmFiZWxMb2FkZXJPcHRpb25zLFxuICBleHRyYUpzTG9hZGVycyxcbiAgaW5KU09wdGlvbnMsXG4gIHRzY29uZmlnUGF0aHNPcHRpb25zLFxuICBzdmdvT3B0aW9ucyxcbiAgc3Znck9wdGlvbnMsXG4gIGdsb2JhbFN0eWxlRGlyLFxuICBub2hhc2gsXG4gIGFyZ3YsXG4gIGVudixcbiAgY3NzRXh0cmFjdE9wdGlvbnMsXG4gIGxpYnJhcnksXG59KSB7XG4gIGNvbnN0IFdFQlBBQ0tfUFVCTElDX0hPU1QgPSBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19IT1NUIHx8ICcnO1xuICBjb25zdCBXRUJQQUNLX1BVQkxJQ19QQVRIID0gcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCB8fCAnLyc7XG5cbiAgY29uc3QgbW9kdWxlcyA9IFtwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoKSwgJ25vZGVfbW9kdWxlcyddO1xuICBpZiAoZ2xvYmFsU3R5bGVEaXIpIHtcbiAgICBtb2R1bGVzLnNwbGljZSgxLCAwLCBwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoLCBnbG9iYWxTdHlsZURpcikpO1xuICB9XG4gIGNvbnN0IHJlc29sdmUgPSB7XG4gICAgbW9kdWxlcyxcbiAgICBleHRlbnNpb25zOiBbJy50cycsICcudHN4JywgJy5tdHMnLCAnLmN0cycsICcuLi4nXSxcbiAgICBleHRlbnNpb25BbGlhczoge1xuICAgICAgJy5qcyc6IFsnLmpzJywgJy50cycsICcudHN4JywgJy5qc3gnXSxcbiAgICAgICcubWpzJzogWycubWpzJywgJy5tdHMnXSxcbiAgICAgICcuY2pzJzogWycuY2pzJywgJy5jdHMnXSxcbiAgICB9LFxuICAgIGZhbGxiYWNrOiBOT0RFX0FMSUFTLFxuICAgIHBsdWdpbnM6XG4gICAgICB0c2NvbmZpZ1BhdGhzT3B0aW9ucyAhPT0gZmFsc2UgP1xuICAgICAgICBbbmV3IFRzY29uZmlnUGF0aHNQbHVnaW4odHNjb25maWdQYXRoc09wdGlvbnMpXVxuICAgICAgOiBbXSxcbiAgfTtcblxuICBjb25zdCBtYWluQmFiZWxMb2FkZXIgPSBnZW5lcmF0ZUJhYmVsTG9hZGVyKHtcbiAgICByb290UGF0aCxcbiAgICBiYWJlbFJvb3QsXG4gICAgdGFyZ2V0OiBhcmd2Py50YXJnZXQsXG4gICAgbW9kZSxcbiAgICBiYWJlbExvYWRlck9wdGlvbnMsXG4gICAgbGlicmFyeSxcbiAgfSk7XG4gIGNvbnN0IGluSlNCYWJlbE9wdGlvbnMgPSB7XG4gICAgLi4ubWFpbkJhYmVsTG9hZGVyLm9wdGlvbnMsXG4gIH07XG4gIGRlbGV0ZSBpbkpTQmFiZWxPcHRpb25zLmNhY2hlRGlyZWN0b3J5O1xuICBkZWxldGUgaW5KU0JhYmVsT3B0aW9ucy5jYWNoZUlkZW50aWZpZXI7XG4gIGRlbGV0ZSBpbkpTQmFiZWxPcHRpb25zLmNhY2hlQ29tcHJlc3Npb247XG5cbiAgaWYgKGluSlNPcHRpb25zICE9PSBmYWxzZSkge1xuICAgIGlmIChpbkpTT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbkpTT3B0aW9ucyA9IHtcbiAgICAgICAgc291cmNlTWFwOiBtb2RlICE9PSAncHJvZHVjdGlvbicsXG4gICAgICB9O1xuICAgIH1cbiAgICBleHRyYUpzTG9hZGVycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ0B3eXctaW4tanMvd2VicGFjay1sb2FkZXInKSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIC8vIGByZXNvbHZlT3B0aW9uc2Agd2FzIGRyb3BwZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL2NhbGxzdGFjay9saW5hcmlhL3B1bGwvMTAwMSBhcyBpdCB1c2VzIHdlYnBhY2sgZGlyZWN0bHlcbiAgICAgICAgICAvL3Jlc29sdmVPcHRpb25zOiB7IC4uLnJlc29sdmUgfSxcbiAgICAgICAgICBiYWJlbE9wdGlvbnM6IGluSlNCYWJlbE9wdGlvbnMsXG4gICAgICAgICAgLi4uaW5KU09wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uZXh0cmFKc0xvYWRlcnMsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnMgPSBbXG4gICAgbmV3IFN0YXRzV3JpdGVyUGx1Z2luKHtcbiAgICAgIGZpbGVuYW1lOiBtYW5pZmVzdEZpbGVuYW1lLFxuICAgICAgc3RhdHM6IHtcbiAgICAgICAgY2h1bmtNb2R1bGVzOiBmYWxzZSxcbiAgICAgICAgc291cmNlOiBmYWxzZSxcbiAgICAgICAgY2h1bmtzOiBmYWxzZSxcbiAgICAgICAgbW9kdWxlczogZmFsc2UsXG4gICAgICAgIGFzc2V0czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKGNzc0V4dHJhY3RPcHRpb25zICE9PSBmYWxzZSkge1xuICAgIHBsdWdpbnMucHVzaChcbiAgICAgIG5ldyBNaW5pQ3NzRXh0cmFjdFBsdWdpbih7XG4gICAgICAgIGZpbGVuYW1lOlxuICAgICAgICAgIChtb2RlICE9PSAncHJvZHVjdGlvbicpIHwgbm9oYXNoID9cbiAgICAgICAgICAgICdbbmFtZV0uY3NzJ1xuICAgICAgICAgIDogJ1tuYW1lXS5bY29udGVudGhhc2hdLmNzcycsXG4gICAgICAgIGNodW5rRmlsZW5hbWU6XG4gICAgICAgICAgKG1vZGUgIT09ICdwcm9kdWN0aW9uJykgfCBub2hhc2ggP1xuICAgICAgICAgICAgJ1tuYW1lXS5jc3MnXG4gICAgICAgICAgOiAnW25hbWVdLltjb250ZW50aGFzaF0uY3NzJyxcbiAgICAgICAgLi4uY3NzRXh0cmFjdE9wdGlvbnMsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXNzZXRNb2R1bGVGaWxlbmFtZSA9XG4gICAgbm9oYXNoIHx8IG1vZGUgIT09ICdwcm9kdWN0aW9uJyA/XG4gICAgICAnW25hbWVdLltleHRdW3F1ZXJ5XSdcbiAgICA6ICdbY29udGVudGhhc2hdLltleHRdW3F1ZXJ5XSc7XG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBjb250ZXh0OiByb290UGF0aCxcbiAgICBlbnRyeToge1xuICAgICAgW2Vudj8ubmFtZSB8fCAnQXBwJ106IFtlbnY/LmVudHJ5cGF0aCB8fCBgLi8ke2Jhc2VQYXRofWBdLFxuICAgIH0sXG4gICAgb3V0cHV0OiB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4ocm9vdFBhdGgsIGJ1aWxkRGlyKSxcbiAgICAgIHB1YmxpY1BhdGg6IFdFQlBBQ0tfUFVCTElDX0hPU1QgKyBXRUJQQUNLX1BVQkxJQ19QQVRILFxuICAgICAgZmlsZW5hbWU6XG4gICAgICAgIG5vaGFzaCB8fCBtb2RlICE9PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdbbmFtZV0uanMnXG4gICAgICAgIDogJ1tuYW1lXS1bY29udGVudGhhc2hdLmpzJyxcbiAgICAgIGNodW5rRmlsZW5hbWU6XG4gICAgICAgIG5vaGFzaCB8fCBtb2RlICE9PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdbbmFtZV0uY2h1bmsuanMnXG4gICAgICAgIDogJ1tuYW1lXS1bY29udGVudGhhc2hdLmNodW5rLmpzJyxcbiAgICAgIGFzc2V0TW9kdWxlRmlsZW5hbWUsXG4gICAgICBnbG9iYWxPYmplY3Q6IFwiKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzKVwiLFxuICAgICAgLy8gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgbWFrZXMgdGhpcyBjb21wYXRpYmxlIGFjcm9zcyBub2RlIDE2IGFuZCAxOCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgaGFzaEZ1bmN0aW9uOiAneHhoYXNoNjQnLFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIHR5cGU6ICdmaWxlc3lzdGVtJyxcbiAgICAgIGJ1aWxkRGVwZW5kZW5jaWVzOiB7XG4gICAgICAgIGNvbmZpZzogW19fZmlsZW5hbWVdLCAvLyB5b3UgbWF5IG9taXQgdGhpcyB3aGVuIHlvdXIgQ0xJIGF1dG9tYXRpY2FsbHkgYWRkcyBpdFxuICAgICAgfSxcbiAgICAgIC8vIEVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB3ZWJwYWNrIG91dHB1dFxuICAgICAgdmVyc2lvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICB0YXJnZXQ6IGFyZ3Y/LnRhcmdldCxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgZW52VmFyczogW1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgICAgIHByb2Nlc3MuZW52LkJST1dTRVJTTElTVF9FTlYsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuQkFCRUxfRU5WLFxuICAgICAgICAgIFdFQlBBQ0tfUFVCTElDX0hPU1QsXG4gICAgICAgICAgV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICBwcm9jZXNzLmVudi5XRUJQQUNLX0FOQUxZWkUsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyxcbiAgICAgICAgICAvLyBhdm9pZCBjb2xsaXNpb25zIHdoaWxlIGJlaW5nIG1pbmltYWwgYW5kIHBlcmZvcm1hbnRcbiAgICAgICAgXS5qb2luKCdcXDAnKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICBtb2R1bGU6IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICBpbmNsdWRlOiBbXG4gICAgICAgICAgICBwYXRoLmpvaW4ocm9vdFBhdGgsIGJhc2VQYXRoKSxcbiAgICAgICAgICAgIHBhdGguam9pbihyb290UGF0aCwgJ3N0b3JpZXMnKSxcbiAgICAgICAgICAgIC9cXC5zdG9yeWJvb2svLFxuICAgICAgICAgICAgbGlicmFyeUluY2x1ZGUsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBleGNsdWRlOiBsaWJyYXJ5RXhjbHVkZSxcbiAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgLyogVE9ETyhkZXByZWNhdGVkKTogRHJvcCB0aGlzIG9uY2UgcGVvcGxlIGhhdmUgYSBjaGFuY2UgdG8gbWlncmF0ZSAqL1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwud29ya2VyXFwuKHR8ailzJC8sXG4gICAgICAgICAgICAgIGluY2x1ZGU6IFtuZXcgUmVnRXhwKGJhc2VQYXRoKSwgbGlicmFyeUluY2x1ZGVdLFxuICAgICAgICAgICAgICB1c2U6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnd29ya2VyLWxvYWRlcicpLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6ICdmYWxsYmFjaycsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIG5vaGFzaCA/ICdbbmFtZV0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiBtb2RlID09PSAncHJvZHVjdGlvbicgPyAnW25hbWVdLVtjb250ZW50aGFzaF0uanMnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnW25hbWVdLmpzJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUJhYmVsTG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgIHJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgYmFiZWxSb290LFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBhcmd2Py50YXJnZXQsXG4gICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgYmFiZWxMb2FkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgbm9Ib3RSZWxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwuKHR8ailzeD8kLyxcbiAgICAgICAgICAgICAgdXNlOiBbbWFpbkJhYmVsTG9hZGVyLCAuLi5leHRyYUpzTG9hZGVyc10uZmlsdGVyKGwgPT4gbCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuaHRtbCQvLFxuICAgICAgICAgIHVzZTogW3sgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJ2h0bWwtbG9hZGVyJykgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKG1kfHR4dCkkLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQvc291cmNlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IC9cXC5zdmcoXFw/dj1cXGQrXFwuXFxkK1xcLlxcZCspPyQvLFxuICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlzc3VlcjogL1xcLihqfHQpc3g/JC8sXG4gICAgICAgICAgICAgIHVzZTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxvYWRlcjogcmVxdWlyZS5yZXNvbHZlKCdAc3Znci93ZWJwYWNrJyksXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z29Db25maWc6IHN2Z29PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAuLi5zdmdyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsb2FkZXI6IHJlcXVpcmUucmVzb2x2ZSgnZmlsZS1sb2FkZXInKSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICBub2hhc2ggfHwgbW9kZSAhPT0gJ3Byb2R1Y3Rpb24nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZV0uW2V4dF1bcXVlcnldJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ1ttZDU6Y29udGVudGhhc2g6YmFzZTY0OjhdLltleHRdW3F1ZXJ5XScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICdqYXZhc2NyaXB0L2F1dG8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGZvciBub24tanMgZmlsZXMgYWx3YXlzIHVzZSBmaWxlLWxvYWRlclxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBlbWl0OiAhYXJndj8udGFyZ2V0Py5pbmNsdWRlcz8uKCdub2RlJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKGFwbmd8cG5nfGpwZ3xnaWZ8aWNvfHdlYnB8YXZpZnxjdXJ8YW5pfG90Znxlb3R8d29mZjJ8d29mZnx0dGYpKFxcP3Y9XFxkK1xcLlxcZCtcXC5cXGQrKT8kLyxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIGdlbmVyYXRvcjoge1xuICAgICAgICAgICAgZW1pdDogIWFyZ3Y/LnRhcmdldD8uaW5jbHVkZXM/Lignbm9kZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuKHBkZnxtcDR8d2VibXx3YXZ8bXAzfG00YXxhYWN8b2dhKShcXD92PVxcZCtcXC5cXGQrXFwuXFxkKyk/JC8sXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0L3Jlc291cmNlJyxcbiAgICAgICAgICBnZW5lcmF0b3I6IHtcbiAgICAgICAgICAgIGVtaXQ6ICFhcmd2Py50YXJnZXQ/LmluY2x1ZGVzPy4oJ25vZGUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHJlc29sdmUsXG4gICAgZGV2dG9vbDogJ3NvdXJjZS1tYXAnLFxuICAgIHN0YXRzOiB7XG4gICAgICBjaGlsZHJlbjogZmFsc2UsXG4gICAgICBjaHVua3M6IGZhbHNlLFxuICAgICAgZXhjbHVkZUFzc2V0czogWy9cXC5tYXAvXSxcbiAgICB9LFxuICB9O1xuICBpZiAoZW52Py5uYW1lKSBjb25maWcubmFtZSA9IGVudi5uYW1lO1xuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5XRUJQQUNLX05PX0NBQ0hFID09PSB0cnVlIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19OT19DQUNIRSA9PT0gJ3RydWUnIHx8XG4gICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ25vbmUnXG4gICkge1xuICAgIGRlbGV0ZSBjb25maWcuY2FjaGU7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuV0VCUEFDS19DQUNIRSA9PT0gJ21lbW9yeScpIHtcbiAgICBjb25maWcuY2FjaGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LldFQlBBQ0tfQ0FDSEUgPT09ICdmaWxlc3lzdGVtJykge1xuICAgIGNvbmZpZy5jYWNoZS50eXBlID0gJ2ZpbGVzeXN0ZW0nO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxxQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsMkJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLG1CQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFBd0NLLE9BQUEsQ0FBQUMsU0FBQSxHQUFBRixVQUFBLENBQUFFLFNBQUE7QUFDeEMsSUFBQUMsb0JBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQUVBLElBQUFVLElBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUFpREssT0FBQSxDQUFBTSxhQUFBLEdBQUFELElBQUEsQ0FBQUUsT0FBQTtBQUdsQyxTQUFTQyxjQUFjQSxDQUFDO0VBQ3JDQyxRQUFRO0VBQ1JDLFFBQVE7RUFDUkMsY0FBYztFQUNkQyxjQUFjO0VBQ2RDLFNBQVM7RUFDVEMsUUFBUTtFQUNSQyxJQUFJO0VBQ0pDLGdCQUFnQjtFQUNoQkMsV0FBVyxFQUFFQyxrQkFBa0I7RUFDL0JDLGNBQWM7RUFDZEMsV0FBVztFQUNYQyxvQkFBb0I7RUFDcEJDLFdBQVc7RUFDWEMsV0FBVztFQUNY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