@reactway/webpack-builder-plugin-styles
Version:
A plugin made for webpack-builder.
169 lines • 27.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var upath = tslib_1.__importStar(require("upath"));
var fs = tslib_1.__importStar(require("fs-extra"));
var query_string_1 = tslib_1.__importDefault(require("query-string"));
var mini_css_extract_plugin_1 = tslib_1.__importDefault(require("mini-css-extract-plugin"));
var optimize_css_assets_webpack_plugin_1 = tslib_1.__importDefault(require("optimize-css-assets-webpack-plugin"));
// Extensions.
var CSS_EXTENSION = ".css";
var SCSS_EXTENSION = ".scss";
// Postcss.config.js
var POSTCSS_CONFIG_NAME = "postcss.config.js";
// Fonts location.
var FONTS_OUTPUT_LOCATION = "./assets/fonts";
// Public path
var PUBLIC_PATH = "./";
exports.StylesPlugin = function (config, projectDirectory) {
checkPostCssConfig(projectDirectory);
return function (webpack) {
var _a, _b, _c, _d, _e, _f, _g;
if (webpack.mode === "production") {
if (webpack.plugins == null) {
webpack.plugins = [];
}
var miniCssExtractPluginOptions = {
filename: "[name].[chunkhash].css",
chunkFilename: "[name].[contenthash].css"
};
if (config != null && config.miniCssExtractPluginOptions != null) {
miniCssExtractPluginOptions = config.miniCssExtractPluginOptions;
}
webpack.plugins.push(new mini_css_extract_plugin_1.default(miniCssExtractPluginOptions));
}
if (webpack.module == null) {
webpack.module = {
rules: []
};
}
var fontsOutputLocation = (_b = (_a = config) === null || _a === void 0 ? void 0 : _a.fontsOutputLocation, (_b !== null && _b !== void 0 ? _b : FONTS_OUTPUT_LOCATION));
var fontsPublicPath = (_d = (_c = config) === null || _c === void 0 ? void 0 : _c.fontsPublicPath, (_d !== null && _d !== void 0 ? _d : PUBLIC_PATH));
var baseUrlLoaderOptions = {
name: fontsOutputLocation + "/[name].[ext]",
publicPath: fontsPublicPath,
limit: 10000
};
var urlLoaderOptions = {
options: tslib_1.__assign({}, baseUrlLoaderOptions)
};
if (((_e = config) === null || _e === void 0 ? void 0 : _e.urlLoaderOptions) != null) {
var urlOptions = config.urlLoaderOptions.options;
if (typeof urlOptions === "object") {
urlLoaderOptions.options = tslib_1.__assign(tslib_1.__assign({}, baseUrlLoaderOptions), urlOptions);
}
if (typeof urlOptions === "string") {
urlLoaderOptions.options = urlOptions;
}
urlLoaderOptions.ident = config.urlLoaderOptions.ident;
urlLoaderOptions.query = config.urlLoaderOptions.query;
}
var styleLoaderOptions = {};
if (config != null && config.styleLoaderOptions != null) {
styleLoaderOptions = config.styleLoaderOptions;
}
var cssLoaderOptions = {};
if (config != null && config.cssLoaderOptions != null) {
cssLoaderOptions = config.cssLoaderOptions;
}
var postcssLoaderOptions = {};
if (config != null && config.postcssLoaderOptions != null) {
postcssLoaderOptions = config.postcssLoaderOptions;
}
// Extract post-css options out loader options
var postCssOptions = {};
if (postcssLoaderOptions.options != null) {
var options = postcssLoaderOptions.options;
if (typeof options === "object") {
postCssOptions = options;
}
if (typeof options === "string") {
postCssOptions = query_string_1.default.parse(options);
}
}
var postCssPlugins = postCssOptions.plugins;
// Default autoprefixer.
var autoprefixerRequire = require("autoprefixer")();
if (postCssPlugins == null) {
postCssPlugins = [autoprefixerRequire];
}
else {
var definedPostCssPlugins = postCssPlugins;
if (Array.isArray(postCssPlugins)) {
postCssPlugins = tslib_1.__spreadArrays(postCssPlugins, [autoprefixerRequire]);
}
else {
var pluginsFn_1 = definedPostCssPlugins;
postCssPlugins = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return tslib_1.__spreadArrays(pluginsFn_1(args), [autoprefixerRequire]);
};
}
}
postcssLoaderOptions.options = tslib_1.__assign(tslib_1.__assign({}, postCssOptions), { plugins: postCssPlugins });
var sassLoaderOptions = (_g = (_f = config) === null || _f === void 0 ? void 0 : _f.sassLoaderOptions, (_g !== null && _g !== void 0 ? _g : {}));
if (sassLoaderOptions.options != null) {
// SASS: Use Dart Sass implementation with fiber.
var options = sassLoaderOptions.options;
options.implementation = require("sass");
var sassOptions = typeof options.sassOptions === "function" ? options.sassOptions(webpack) : options.sassOptions;
options.sassOptions = tslib_1.__assign({}, sassOptions);
}
var webpackRulesSet = [
tslib_1.__assign({
// Creates style nodes from JS strings.
loader: "style-loader" }, styleLoaderOptions),
tslib_1.__assign({
// "css-loader",
loader: "css-loader" }, cssLoaderOptions),
tslib_1.__assign({ loader: "postcss-loader" }, postcssLoaderOptions),
tslib_1.__assign({ loader: "sass-loader" }, sassLoaderOptions)
];
// If it is a `production` mode webpack then we need `MiniCssExtractPlugin` add after `styles` loader (it crashes if we put before).
if (webpack.mode === "production") {
webpackRulesSet.splice(1, 0, mini_css_extract_plugin_1.default.loader);
}
webpack.module.rules.push({
test: /\.(sa|sc|c)ss$/,
use: tslib_1.__spreadArrays(webpackRulesSet)
}, {
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
tslib_1.__assign({ loader: "url-loader" }, urlLoaderOptions)
]
});
if (webpack.resolve == null) {
webpack.resolve = {};
}
if (webpack.resolve.extensions == null) {
webpack.resolve.extensions = [];
}
if (webpack.resolve.extensions.indexOf(CSS_EXTENSION) === -1) {
webpack.resolve.extensions.push(CSS_EXTENSION);
}
if (webpack.resolve.extensions.indexOf(SCSS_EXTENSION) === -1) {
webpack.resolve.extensions.push(SCSS_EXTENSION);
}
if (webpack.mode === "production") {
if (webpack.optimization == null) {
webpack.optimization = {};
}
if (webpack.optimization.minimizer == null) {
webpack.optimization.minimizer = [];
}
webpack.optimization.minimizer.push(new optimize_css_assets_webpack_plugin_1.default(config == null ? undefined : config.optimizeCssAssetsPlugin));
}
return webpack;
};
};
function checkPostCssConfig(projectDirectory) {
var configLocation = upath.resolve(projectDirectory, POSTCSS_CONFIG_NAME);
if (!fs.pathExistsSync(configLocation)) {
console.warn(POSTCSS_CONFIG_NAME + " was not found at project directory.");
}
}
exports.checkPostCssConfig = checkPostCssConfig;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBK0I7QUFDL0IsbURBQStCO0FBQy9CLHNFQUF1QztBQUV2Qyw0RkFBNkc7QUFDN0csa0hBQTRHO0FBRTVHLGNBQWM7QUFDZCxJQUFNLGFBQWEsR0FBVyxNQUFNLENBQUM7QUFDckMsSUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDO0FBRXZDLG9CQUFvQjtBQUNwQixJQUFNLG1CQUFtQixHQUFXLG1CQUFtQixDQUFDO0FBRXhELGtCQUFrQjtBQUNsQixJQUFNLHFCQUFxQixHQUFXLGdCQUFnQixDQUFDO0FBQ3ZELGNBQWM7QUFDZCxJQUFNLFdBQVcsR0FBVyxJQUFJLENBQUM7QUFxQnBCLFFBQUEsWUFBWSxHQUFnQyxVQUFDLE1BQXVDLEVBQUUsZ0JBQXdCO0lBQ3ZILGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFckMsT0FBTyxVQUFDLE9BQXNCOztRQUMxQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQy9CLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2FBQ3hCO1lBRUQsSUFBSSwyQkFBMkIsR0FBZ0M7Z0JBQzNELFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLGFBQWEsRUFBRSwwQkFBMEI7YUFDNUMsQ0FBQztZQUVGLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsMkJBQTJCLElBQUksSUFBSSxFQUFFO2dCQUM5RCwyQkFBMkIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUM7YUFDcEU7WUFFRCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGlDQUFvQixDQUFDLDJCQUEyQixDQUFXLENBQUMsQ0FBQztTQUN6RjtRQUVELElBQUksT0FBTyxDQUFDLE1B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QzthQUM3QjtZQUVELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO2dCQUN4QyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7YUFDdkM7WUFFRCxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSw0Q0FBdUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7U0FDakk7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixTQUFnQixrQkFBa0IsQ0FBQyxnQkFBd0I7SUFDdkQsSUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRTVFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUksbUJBQW1CLHlDQUFzQyxDQUFDLENBQUM7S0FDOUU7QUFDTCxDQUFDO0FBTkQsZ0RBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2VicGFjayBmcm9tIFwid2VicGFja1wiO1xyXG5pbXBvcnQgKiBhcyB1cGF0aCBmcm9tIFwidXBhdGhcIjtcclxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XHJcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tIFwicXVlcnktc3RyaW5nXCI7XHJcbmltcG9ydCB7IFBsdWdpbiwgQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAcmVhY3R3YXkvd2VicGFjay1idWlsZGVyXCI7XHJcbmltcG9ydCBNaW5pQ3NzRXh0cmFjdFBsdWdpbiwgeyBQbHVnaW5PcHRpb25zIGFzIE1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJtaW5pLWNzcy1leHRyYWN0LXBsdWdpblwiO1xyXG5pbXBvcnQgT3B0aW1pemVDU1NBc3NldHNQbHVnaW4sIHsgT3B0aW9ucyBhcyBPcHRpbWl6ZUNTU09wdGlvbnMgfSBmcm9tIFwib3B0aW1pemUtY3NzLWFzc2V0cy13ZWJwYWNrLXBsdWdpblwiO1xyXG5cclxuLy8gRXh0ZW5zaW9ucy5cclxuY29uc3QgQ1NTX0VYVEVOU0lPTjogc3RyaW5nID0gXCIuY3NzXCI7XHJcbmNvbnN0IFNDU1NfRVhURU5TSU9OOiBzdHJpbmcgPSBcIi5zY3NzXCI7XHJcblxyXG4vLyBQb3N0Y3NzLmNvbmZpZy5qc1xyXG5jb25zdCBQT1NUQ1NTX0NPTkZJR19OQU1FOiBzdHJpbmcgPSBcInBvc3Rjc3MuY29uZmlnLmpzXCI7XHJcblxyXG4vLyBGb250cyBsb2NhdGlvbi5cclxuY29uc3QgRk9OVFNfT1VUUFVUX0xPQ0FUSU9OOiBzdHJpbmcgPSBcIi4vYXNzZXRzL2ZvbnRzXCI7XHJcbi8vIFB1YmxpYyBwYXRoXHJcbmNvbnN0IFBVQkxJQ19QQVRIOiBzdHJpbmcgPSBcIi4vXCI7XHJcblxyXG5leHBvcnQgdHlwZSBPbWl0PFRUeXBlLCBUS2V5IGV4dGVuZHMga2V5b2YgVFR5cGU+ID0gUGljazxUVHlwZSwgRXhjbHVkZTxrZXlvZiBUVHlwZSwgVEtleT4+O1xyXG5leHBvcnQgdHlwZSBMb2FkZXJPcHRpb25zID0gT21pdDxXZWJwYWNrLlJ1bGVTZXRMb2FkZXIsIFwibG9hZGVyXCI+O1xyXG5cclxuLy8gV2VicGFjay5SdWxlU2V0UXVlcnkgfCB1bmRlZmluZWRcclxuZXhwb3J0IHR5cGUgUG9zdENzc09wdGlvbnMgPSB7IFtrOiBzdHJpbmddOiBhbnkgfTtcclxuZXhwb3J0IHR5cGUgUG9zdENzc1BsdWdpbnNGbiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd25bXTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3R5bGVzUGx1Z2luT3B0aW9ucyB7XHJcbiAgICBmb250c091dHB1dExvY2F0aW9uPzogc3RyaW5nO1xyXG4gICAgZm9udHNQdWJsaWNQYXRoPzogc3RyaW5nO1xyXG4gICAgdXJsTG9hZGVyT3B0aW9ucz86IExvYWRlck9wdGlvbnM7XHJcbiAgICBzdHlsZUxvYWRlck9wdGlvbnM/OiBMb2FkZXJPcHRpb25zO1xyXG4gICAgY3NzTG9hZGVyT3B0aW9ucz86IExvYWRlck9wdGlvbnM7XHJcbiAgICBwb3N0Y3NzTG9hZGVyT3B0aW9ucz86IExvYWRlck9wdGlvbnM7XHJcbiAgICBzYXNzTG9hZGVyT3B0aW9ucz86IExvYWRlck9wdGlvbnM7XHJcbiAgICBvcHRpbWl6ZUNzc0Fzc2V0c1BsdWdpbj86IE9wdGltaXplQ1NTT3B0aW9ucztcclxuICAgIG1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9ucz86IE1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFN0eWxlc1BsdWdpbjogUGx1Z2luPFN0eWxlc1BsdWdpbk9wdGlvbnM+ID0gKGNvbmZpZzogU3R5bGVzUGx1Z2luT3B0aW9ucyB8IHVuZGVmaW5lZCwgcHJvamVjdERpcmVjdG9yeTogc3RyaW5nKSA9PiB7XHJcbiAgICBjaGVja1Bvc3RDc3NDb25maWcocHJvamVjdERpcmVjdG9yeSk7XHJcblxyXG4gICAgcmV0dXJuICh3ZWJwYWNrOiBDb25maWd1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKHdlYnBhY2subW9kZSA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgaWYgKHdlYnBhY2sucGx1Z2lucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB3ZWJwYWNrLnBsdWdpbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IG1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9uczogTWluaUNzc0V4dHJhY3RQbHVnaW5PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZW5hbWU6IFwiW25hbWVdLltjaHVua2hhc2hdLmNzc1wiLFxyXG4gICAgICAgICAgICAgICAgY2h1bmtGaWxlbmFtZTogXCJbbmFtZV0uW2NvbnRlbnRoYXNoXS5jc3NcIlxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5taW5pQ3NzRXh0cmFjdFBsdWdpbk9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbWluaUNzc0V4dHJhY3RQbHVnaW5PcHRpb25zID0gY29uZmlnLm1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9ucztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2VicGFjay5wbHVnaW5zLnB1c2gobmV3IE1pbmlDc3NFeHRyYWN0UGx1Z2luKG1pbmlDc3NFeHRyYWN0UGx1Z2luT3B0aW9ucykgYXMgUGx1Z2luKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ZWJwYWNrLm1vZHVsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHdlYnBhY2subW9kdWxlID0ge1xyXG4gICAgICAgICAgICAgICAgcnVsZXM6IFtdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb250c091dHB1dExvY2F0aW9uOiBzdHJpbmcgPSBjb25maWc/LmZvbnRzT3V0cHV0TG9jYXRpb24gPz8gRk9OVFNfT1VUUFVUX0xPQ0FUSU9OO1xyXG4gICAgICAgIGNvbnN0IGZvbnRzUHVibGljUGF0aDogc3RyaW5nID0gY29uZmlnPy5mb250c1B1YmxpY1BhdGggPz8gUFVCTElDX1BBVEg7XHJcblxyXG4gICAgICAgIGNvbnN0IGJhc2VVcmxMb2FkZXJPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBgJHtmb250c091dHB1dExvY2F0aW9ufS9bbmFtZV0uW2V4dF1gLFxyXG4gICAgICAgICAgICBwdWJsaWNQYXRoOiBmb250c1B1YmxpY1BhdGgsXHJcbiAgICAgICAgICAgIGxpbWl0OiAxMDAwMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHVybExvYWRlck9wdGlvbnM6IExvYWRlck9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIC4uLmJhc2VVcmxMb2FkZXJPcHRpb25zXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnPy51cmxMb2FkZXJPcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IGNvbmZpZy51cmxMb2FkZXJPcHRpb25zLm9wdGlvbnM7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgdXJsTG9hZGVyT3B0aW9ucy5vcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmJhc2VVcmxMb2FkZXJPcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLnVybE9wdGlvbnNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgdXJsTG9hZGVyT3B0aW9ucy5vcHRpb25zID0gdXJsT3B0aW9ucztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXJsTG9hZGVyT3B0aW9ucy5pZGVudCA9IGNvbmZpZy51cmxMb2FkZXJPcHRpb25zLmlkZW50O1xyXG4gICAgICAgICAgICB1cmxMb2FkZXJPcHRpb25zLnF1ZXJ5ID0gY29uZmlnLnVybExvYWRlck9wdGlvbnMucXVlcnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3R5bGVMb2FkZXJPcHRpb25zOiBMb2FkZXJPcHRpb25zID0ge307XHJcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5zdHlsZUxvYWRlck9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHlsZUxvYWRlck9wdGlvbnMgPSBjb25maWcuc3R5bGVMb2FkZXJPcHRpb25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNzc0xvYWRlck9wdGlvbnM6IExvYWRlck9wdGlvbnMgPSB7fTtcclxuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLmNzc0xvYWRlck9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjc3NMb2FkZXJPcHRpb25zID0gY29uZmlnLmNzc0xvYWRlck9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcG9zdGNzc0xvYWRlck9wdGlvbnM6IExvYWRlck9wdGlvbnMgPSB7fTtcclxuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnBvc3Rjc3NMb2FkZXJPcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcG9zdGNzc0xvYWRlck9wdGlvbnMgPSBjb25maWcucG9zdGNzc0xvYWRlck9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEV4dHJhY3QgcG9zdC1jc3Mgb3B0aW9ucyBvdXQgbG9hZGVyIG9wdGlvbnNcclxuICAgICAgICBsZXQgcG9zdENzc09wdGlvbnM6IFBvc3RDc3NPcHRpb25zID0ge307XHJcbiAgICAgICAgaWYgKHBvc3Rjc3NMb2FkZXJPcHRpb25zLm9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdGNzc0xvYWRlck9wdGlvbnMub3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBwb3N0Q3NzT3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgcG9zdENzc09wdGlvbnMgPSBxdWVyeVN0cmluZy5wYXJzZShvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHBvc3RDc3NQbHVnaW5zOiBQb3N0Q3NzUGx1Z2luc0ZuIHwgdW5rbm93bltdIHwgdW5kZWZpbmVkID0gcG9zdENzc09wdGlvbnMucGx1Z2lucztcclxuICAgICAgICAvLyBEZWZhdWx0IGF1dG9wcmVmaXhlci5cclxuICAgICAgICBjb25zdCBhdXRvcHJlZml4ZXJSZXF1aXJlID0gcmVxdWlyZShcImF1dG9wcmVmaXhlclwiKSgpO1xyXG4gICAgICAgIGlmIChwb3N0Q3NzUGx1Z2lucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBvc3RDc3NQbHVnaW5zID0gW2F1dG9wcmVmaXhlclJlcXVpcmVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZWRQb3N0Q3NzUGx1Z2lucyA9IHBvc3RDc3NQbHVnaW5zO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwb3N0Q3NzUGx1Z2lucykpIHtcclxuICAgICAgICAgICAgICAgIHBvc3RDc3NQbHVnaW5zID0gWy4uLnBvc3RDc3NQbHVnaW5zLCBhdXRvcHJlZml4ZXJSZXF1aXJlXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnNGbiA9IGRlZmluZWRQb3N0Q3NzUGx1Z2lucyBhcyBQb3N0Q3NzUGx1Z2luc0ZuO1xyXG4gICAgICAgICAgICAgICAgcG9zdENzc1BsdWdpbnMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wbHVnaW5zRm4oYXJncyksIGF1dG9wcmVmaXhlclJlcXVpcmVdO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zdGNzc0xvYWRlck9wdGlvbnMub3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgLi4ucG9zdENzc09wdGlvbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHBvc3RDc3NQbHVnaW5zXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Fzc0xvYWRlck9wdGlvbnM6IExvYWRlck9wdGlvbnMgPSBjb25maWc/LnNhc3NMb2FkZXJPcHRpb25zID8/IHt9O1xyXG5cclxuICAgICAgICBpZiAoc2Fzc0xvYWRlck9wdGlvbnMub3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFNBU1M6IFVzZSBEYXJ0IFNhc3MgaW1wbGVtZW50YXRpb24gd2l0aCBmaWJlci5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNhc3NMb2FkZXJPcHRpb25zLm9wdGlvbnMgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcclxuICAgICAgICAgICAgb3B0aW9ucy5pbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoXCJzYXNzXCIpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2Fzc09wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucy5zYXNzT3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5zYXNzT3B0aW9ucyh3ZWJwYWNrKSA6IG9wdGlvbnMuc2Fzc09wdGlvbnM7XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnNhc3NPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUU6IGlzc3VlIHdoaWxlIGJ1aWxkaW5nLCBmaXggd2hlbiBgZmliZXJzYCBzdGFydHMgd29ya2luZyBwcm9wZXJseS5cclxuICAgICAgICAgICAgICAgIC8vIGZpYmVyOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAuLi5zYXNzT3B0aW9uc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgd2VicGFja1J1bGVzU2V0OiBXZWJwYWNrLlJ1bGVTZXRVc2UgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgc3R5bGUgbm9kZXMgZnJvbSBKUyBzdHJpbmdzLlxyXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBcInN0eWxlLWxvYWRlclwiLFxyXG4gICAgICAgICAgICAgICAgLi4uc3R5bGVMb2FkZXJPcHRpb25zXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIFwiY3NzLWxvYWRlclwiLFxyXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBcImNzcy1sb2FkZXJcIixcclxuICAgICAgICAgICAgICAgIC4uLmNzc0xvYWRlck9wdGlvbnNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gLy8gVHJhbnNsYXRlcyBDU1MgaW50byBDb21tb25KUy5cclxuICAgICAgICAgICAgLy8gQXV0b3ByZWZpeGVyXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvYWRlcjogXCJwb3N0Y3NzLWxvYWRlclwiLFxyXG4gICAgICAgICAgICAgICAgLi4ucG9zdGNzc0xvYWRlck9wdGlvbnNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gQ29tcGlsZXMgU2FzcyB0byBDU1MuXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvYWRlcjogXCJzYXNzLWxvYWRlclwiLFxyXG4gICAgICAgICAgICAgICAgLi4uc2Fzc0xvYWRlck9wdGlvbnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8vIElmIGl0IGlzIGEgYHByb2R1Y3Rpb25gIG1vZGUgd2VicGFjayB0aGVuIHdlIG5lZWQgYE1pbmlDc3NFeHRyYWN0UGx1Z2luYCBhZGQgYWZ0ZXIgYHN0eWxlc2AgbG9hZGVyIChpdCBjcmFzaGVzIGlmIHdlIHB1dCBiZWZvcmUpLlxyXG4gICAgICAgIGlmICh3ZWJwYWNrLm1vZGUgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHdlYnBhY2tSdWxlc1NldC5zcGxpY2UoMSwgMCwgTWluaUNzc0V4dHJhY3RQbHVnaW4ubG9hZGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdlYnBhY2subW9kdWxlLnJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRlc3Q6IC9cXC4oc2F8c2N8YylzcyQvLFxyXG4gICAgICAgICAgICAgICAgdXNlOiBbLi4ud2VicGFja1J1bGVzU2V0XVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXN0OiAvXFwuKHdvZmZ8d29mZjJ8ZW90fHR0ZnxvdGYpJC8sXHJcbiAgICAgICAgICAgICAgICB1c2U6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcjogXCJ1cmwtbG9hZGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnVybExvYWRlck9wdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAod2VicGFjay5yZXNvbHZlID09IG51bGwpIHtcclxuICAgICAgICAgICAgd2VicGFjay5yZXNvbHZlID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2VicGFjay5yZXNvbHZlLmV4dGVuc2lvbnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB3ZWJwYWNrLnJlc29sdmUuZXh0ZW5zaW9ucyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdlYnBhY2sucmVzb2x2ZS5leHRlbnNpb25zLmluZGV4T2YoQ1NTX0VYVEVOU0lPTikgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHdlYnBhY2sucmVzb2x2ZS5leHRlbnNpb25zLnB1c2goQ1NTX0VYVEVOU0lPTik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2VicGFjay5yZXNvbHZlLmV4dGVuc2lvbnMuaW5kZXhPZihTQ1NTX0VYVEVOU0lPTikgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHdlYnBhY2sucmVzb2x2ZS5leHRlbnNpb25zLnB1c2goU0NTU19FWFRFTlNJT04pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdlYnBhY2subW9kZSA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgaWYgKHdlYnBhY2sub3B0aW1pemF0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHdlYnBhY2sub3B0aW1pemF0aW9uID0ge307XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh3ZWJwYWNrLm9wdGltaXphdGlvbi5taW5pbWl6ZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgd2VicGFjay5vcHRpbWl6YXRpb24ubWluaW1pemVyID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdlYnBhY2sub3B0aW1pemF0aW9uLm1pbmltaXplci5wdXNoKG5ldyBPcHRpbWl6ZUNTU0Fzc2V0c1BsdWdpbihjb25maWcgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGNvbmZpZy5vcHRpbWl6ZUNzc0Fzc2V0c1BsdWdpbikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHdlYnBhY2s7XHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUG9zdENzc0NvbmZpZyhwcm9qZWN0RGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbmZpZ0xvY2F0aW9uID0gdXBhdGgucmVzb2x2ZShwcm9qZWN0RGlyZWN0b3J5LCBQT1NUQ1NTX0NPTkZJR19OQU1FKTtcclxuXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGNvbmZpZ0xvY2F0aW9uKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJHtQT1NUQ1NTX0NPTkZJR19OQU1FfSB3YXMgbm90IGZvdW5kIGF0IHByb2plY3QgZGlyZWN0b3J5LmApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==