UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

117 lines (115 loc) 14.3 kB
"use strict"; /** * This module defines the tasks to create webpack bundles. * * @module task-generators/build-webpack */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); /** (Placeholder comment, see christopherthielen/typedoc-plugin-external-module-name#6) */ const fancy_log_1 = __importDefault(require("fancy-log")); const minimatch_1 = require("minimatch"); const path_1 = require("path"); const plugin_error_1 = __importDefault(require("plugin-error")); const webpack_1 = __importDefault(require("webpack")); const webpack_merge_1 = __importDefault(require("webpack-merge")); const webpack_stream_1 = __importDefault(require("webpack-stream")); const matcher = __importStar(require("../utils/matcher")); /** * Return the canonical name of the build-webpack task according to the target name. * * @param targetName Current target name * @returns {string} The canonical of the build-webpack task for the provided target */ function getTaskName(targetName) { return `${targetName}:build:webpack`; } exports.getTaskName = getTaskName; function generateTask(gulp, options) { const entryFile = options.entry + ".js"; let curWebpack = webpack_1.default; let userConfiguration = {}; if (options.webpackOptions !== undefined) { if (options.webpackOptions.webpack !== undefined) { curWebpack = options.webpackOptions.webpack; } if (options.webpackOptions.configuration !== undefined) { userConfiguration = options.webpackOptions.configuration; } } const angularWebpackConfig = { context: path_1.resolve(options.projectRoot), target: "web", resolve: { extensions: [".js", ".json"], }, module: { rules: [ { test: /\.component\.js$/, loaders: ["angular2-template-loader"], include: [path_1.resolve(options.srcDir)], }, { test: /\.json$/, loaders: ["json-loader"], }, { test: /\.(html|css)$/, loaders: ["raw-loader"], }, ], }, plugins: [ new curWebpack.ContextReplacementPlugin( // The (\\|\/) piece accounts for path separators in posix and Windows /angular(\\|\/)core(\\|\/)src(\\|\/)linker/, path_1.resolve(options.srcDir), {}), ], node: { global: true, __dirname: true, __filename: true, process: true, Buffer: true, }, devtool: "inline-source-map", output: { filename: "[name].js", }, }; const task = function () { return gulp .src([path_1.posix.join(options.srcDir, entryFile)], { base: options.srcDir }) .pipe(webpack_stream_1.default( // TODO: Remove `as any` once webpackMerge's typing support the latest version of Webpack (with `EntryFunc`) webpack_merge_1.default(angularWebpackConfig, userConfiguration), // TODO: Remove `as any` once gulpWebpack's typing support the latest version of Webpack (with `EntryFunc`) curWebpack, (err, stats) => { // TODO: Check if err is `null` or `undefined` (success) and type properly if (err) { throw new plugin_error_1.default("_build:webpack", err); } fancy_log_1.default("[_build:webpack]", stats.toString({ colors: true })); })) .pipe(gulp.dest(options.buildDir)); }; task.displayName = "_build:webpack"; return task; } exports.generateTask = generateTask; function watch(gulp, options) { const buildTask = generateTask(gulp, options); const sources = matcher.asString(matcher.join(options.srcDir, new minimatch_1.Minimatch("**/*"))); return gulp.watch(sources, { cwd: options.srcDir }, buildTask); } exports.watch = watch; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvdGFzay1nZW5lcmF0b3JzL2J1aWxkLXdlYnBhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7OztBQUVILDBGQUEwRjtBQUUxRiwwREFBaUM7QUFHakMseUNBQXNDO0FBQ3RDLCtCQUFnRTtBQUNoRSxnRUFBdUM7QUFDdkMsc0RBQThCO0FBQzlCLGtFQUF5QztBQUN6QyxvRUFBMkM7QUFFM0MsMERBQTRDO0FBb0M1Qzs7Ozs7R0FLRztBQUNILHFCQUE0QixVQUFrQjtJQUM1QyxPQUFPLEdBQUcsVUFBVSxnQkFBZ0IsQ0FBQztBQUN2QyxDQUFDO0FBRkQsa0NBRUM7QUFFRCxzQkFBNkIsSUFBVSxFQUFFLE9BQWdCO0lBQ3ZELE1BQU0sU0FBUyxHQUFXLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2hELElBQUksVUFBVSxHQUFtQixpQkFBTyxDQUFDO0lBQ3pDLElBQUksaUJBQWlCLEdBQTBCLEVBQUUsQ0FBQztJQUNsRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1FBQ3hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ2hELFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztTQUM3QztRQUNELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3RELGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQzFEO0tBQ0Y7SUFFRCxNQUFNLG9CQUFvQixHQUEwQjtRQUNsRCxPQUFPLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUMsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUU7WUFDUCxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1NBQzdCO1FBQ0QsTUFBTSxFQUFFO1lBQ04sS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCO2dCQUNEO29CQUNFLElBQUksRUFBRSxlQUFlO29CQUNyQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksVUFBVSxDQUFDLHdCQUF3QjtZQUNyQyxzRUFBc0U7WUFDdEUsMkNBQTJDLEVBQzNDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQzlCLEVBQUUsQ0FDSDtTQVFGO1FBQ0QsSUFBSSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLElBQUk7U0FDYjtRQUNELE9BQU8sRUFBRSxtQkFBbUI7UUFDNUIsTUFBTSxFQUFFO1lBQ04sUUFBUSxFQUFFLFdBQVc7U0FDdEI7S0FDRixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQWlCO1FBQ3pCLE9BQU8sSUFBSTthQUNSLEdBQUcsQ0FBQyxDQUFDLFlBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUMsQ0FBQzthQUNuRSxJQUFJLENBQUMsd0JBQWE7UUFDakIsNEdBQTRHO1FBQzVHLHVCQUFZLENBQUMsb0JBQTJCLEVBQUUsaUJBQXdCLENBQUM7UUFDbkUsMkdBQTJHO1FBQzNHLFVBQWlCLEVBQ2pCLENBQUMsR0FBVSxFQUFFLEtBQW9CLEVBQVEsRUFBRTtZQUN6QywwRUFBMEU7WUFDMUUsSUFBVSxHQUFHLEVBQUU7Z0JBQ2IsTUFBTSxJQUFJLHNCQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDOUM7WUFDRCxtQkFBUSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUNIO2FBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUNwQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFwRkQsb0NBb0ZDO0FBRUQsZUFBc0IsSUFBVSxFQUFFLE9BQWdCO0lBQ2hELE1BQU0sU0FBUyxHQUFpQixZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELE1BQU0sT0FBTyxHQUFXLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUkscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFDLEVBQUUsU0FBUyxDQUFjLENBQUM7QUFDNUUsQ0FBQztBQUpELHNCQUlDIiwiZmlsZSI6InRhc2stZ2VuZXJhdG9ycy9idWlsZC13ZWJwYWNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSB0YXNrcyB0byBjcmVhdGUgd2VicGFjayBidW5kbGVzLlxuICpcbiAqIEBtb2R1bGUgdGFzay1nZW5lcmF0b3JzL2J1aWxkLXdlYnBhY2tcbiAqL1xuXG4vKiogKFBsYWNlaG9sZGVyIGNvbW1lbnQsIHNlZSBjaHJpc3RvcGhlcnRoaWVsZW4vdHlwZWRvYy1wbHVnaW4tZXh0ZXJuYWwtbW9kdWxlLW5hbWUjNikgKi9cblxuaW1wb3J0IGZhbmN5TG9nIGZyb20gXCJmYW5jeS1sb2dcIjtcbmltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgR3VscCB9IGZyb20gXCJndWxwXCI7XG5pbXBvcnQgeyBNaW5pbWF0Y2ggfSBmcm9tIFwibWluaW1hdGNoXCI7XG5pbXBvcnQgeyBwb3NpeCBhcyBwYXRoLCByZXNvbHZlIGFzIHN5c1Jlc29sdmVQYXRoIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCBQbHVnaW5FcnJvciBmcm9tIFwicGx1Z2luLWVycm9yXCI7XG5pbXBvcnQgd2VicGFjayBmcm9tIFwid2VicGFja1wiO1xuaW1wb3J0IHdlYnBhY2tNZXJnZSBmcm9tIFwid2VicGFjay1tZXJnZVwiO1xuaW1wb3J0IHdlYnBhY2tTdHJlYW0gZnJvbSBcIndlYnBhY2stc3RyZWFtXCI7XG5pbXBvcnQgeyBUYXNrRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZ3VscC10YXNrLWZ1bmN0aW9uXCI7XG5pbXBvcnQgKiBhcyBtYXRjaGVyIGZyb20gXCIuLi91dGlscy9tYXRjaGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSb290IG9mIHRoZSBtYWluIHByb2plY3QgKHdpdGggcGFja2FnZS5qc29uKVxuICAgKi9cbiAgcHJvamVjdFJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEpTIHNvdXJjZXMuXG4gICAqL1xuICBzcmNEaXI6IHN0cmluZztcblxuICAvKipcbiAgICogRGlyZWN0b3J5IHdlcmUgdGhlIHJlc3VsdCB3aWxsIGJlIHBpcGVkXG4gICAqL1xuICBidWlsZERpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnRyeSBtb2R1bGUsIHJlbGF0aXZlIHRvIGBqc1NyY0RpcmBcbiAgICovXG4gIGVudHJ5OiBzdHJpbmc7XG5cbiAgd2VicGFja09wdGlvbnM/OiB7XG4gICAgLyoqXG4gICAgICogV2VicGFjayBvYmplY3QgdG8gdXNlXG4gICAgICovXG4gICAgd2VicGFjaz86IHR5cGVvZiB3ZWJwYWNrO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9taXplIHRoZSBkZWZhdWx0IHdlYnBhY2sgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGNvbmZpZ3VyYXRpb24/OiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb247XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgYnVpbGQtd2VicGFjayB0YXNrIGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IG5hbWUuXG4gKlxuICogQHBhcmFtIHRhcmdldE5hbWUgQ3VycmVudCB0YXJnZXQgbmFtZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNhbm9uaWNhbCBvZiB0aGUgYnVpbGQtd2VicGFjayB0YXNrIGZvciB0aGUgcHJvdmlkZWQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXNrTmFtZSh0YXJnZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dGFyZ2V0TmFtZX06YnVpbGQ6d2VicGFja2A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRhc2soZ3VscDogR3VscCwgb3B0aW9uczogT3B0aW9ucyk6IFRhc2tGdW5jdGlvbiB7XG4gIGNvbnN0IGVudHJ5RmlsZTogc3RyaW5nID0gb3B0aW9ucy5lbnRyeSArIFwiLmpzXCI7XG4gIGxldCBjdXJXZWJwYWNrOiB0eXBlb2Ygd2VicGFjayA9IHdlYnBhY2s7XG4gIGxldCB1c2VyQ29uZmlndXJhdGlvbjogd2VicGFjay5Db25maWd1cmF0aW9uID0ge307XG4gIGlmIChvcHRpb25zLndlYnBhY2tPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucy53ZWJwYWNrT3B0aW9ucy53ZWJwYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN1cldlYnBhY2sgPSBvcHRpb25zLndlYnBhY2tPcHRpb25zLndlYnBhY2s7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLndlYnBhY2tPcHRpb25zLmNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlckNvbmZpZ3VyYXRpb24gPSBvcHRpb25zLndlYnBhY2tPcHRpb25zLmNvbmZpZ3VyYXRpb247XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5ndWxhcldlYnBhY2tDb25maWc6IHdlYnBhY2suQ29uZmlndXJhdGlvbiA9IHtcbiAgICBjb250ZXh0OiBzeXNSZXNvbHZlUGF0aChvcHRpb25zLnByb2plY3RSb290KSxcbiAgICB0YXJnZXQ6IFwid2ViXCIsXG4gICAgcmVzb2x2ZToge1xuICAgICAgZXh0ZW5zaW9uczogW1wiLmpzXCIsIFwiLmpzb25cIl0sXG4gICAgfSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuY29tcG9uZW50XFwuanMkLyxcbiAgICAgICAgICBsb2FkZXJzOiBbXCJhbmd1bGFyMi10ZW1wbGF0ZS1sb2FkZXJcIl0sXG4gICAgICAgICAgaW5jbHVkZTogW3N5c1Jlc29sdmVQYXRoKG9wdGlvbnMuc3JjRGlyKV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiAvXFwuanNvbiQvLFxuICAgICAgICAgIGxvYWRlcnM6IFtcImpzb24tbG9hZGVyXCJdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVzdDogL1xcLihodG1sfGNzcykkLyxcbiAgICAgICAgICBsb2FkZXJzOiBbXCJyYXctbG9hZGVyXCJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIG5ldyBjdXJXZWJwYWNrLkNvbnRleHRSZXBsYWNlbWVudFBsdWdpbihcbiAgICAgICAgLy8gVGhlIChcXFxcfFxcLykgcGllY2UgYWNjb3VudHMgZm9yIHBhdGggc2VwYXJhdG9ycyBpbiBwb3NpeCBhbmQgV2luZG93c1xuICAgICAgICAvYW5ndWxhcihcXFxcfFxcLyljb3JlKFxcXFx8XFwvKXNyYyhcXFxcfFxcLylsaW5rZXIvLFxuICAgICAgICBzeXNSZXNvbHZlUGF0aChvcHRpb25zLnNyY0RpciksXG4gICAgICAgIHt9LFxuICAgICAgKSxcbiAgICAgIC8vIG5ldyB3ZWJwYWNrLkRlZmluZVBsdWdpbih7XG4gICAgICAvLyAgIFwicHJvY2Vzcy5lbnZcIjoge1xuICAgICAgLy8gICAgIFwiTk9ERV9FTlZcIjogSlNPTi5zdHJpbmdpZnkoXCJwcm9kdWN0aW9uXCIpXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pLFxuICAgICAgLy8gbmV3IHdlYnBhY2sub3B0aW1pemUuRGVkdXBlUGx1Z2luKCksXG4gICAgICAvLyBuZXcgd2VicGFjay5vcHRpbWl6ZS5VZ2xpZnlKc1BsdWdpbigpXG4gICAgXSxcbiAgICBub2RlOiB7XG4gICAgICBnbG9iYWw6IHRydWUsXG4gICAgICBfX2Rpcm5hbWU6IHRydWUsXG4gICAgICBfX2ZpbGVuYW1lOiB0cnVlLFxuICAgICAgcHJvY2VzczogdHJ1ZSxcbiAgICAgIEJ1ZmZlcjogdHJ1ZSxcbiAgICB9LFxuICAgIGRldnRvb2w6IFwiaW5saW5lLXNvdXJjZS1tYXBcIixcbiAgICBvdXRwdXQ6IHtcbiAgICAgIGZpbGVuYW1lOiBcIltuYW1lXS5qc1wiLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdGFzazogVGFza0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBndWxwXG4gICAgICAuc3JjKFtwYXRoLmpvaW4ob3B0aW9ucy5zcmNEaXIsIGVudHJ5RmlsZSldLCB7YmFzZTogb3B0aW9ucy5zcmNEaXJ9KVxuICAgICAgLnBpcGUod2VicGFja1N0cmVhbShcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGBhcyBhbnlgIG9uY2Ugd2VicGFja01lcmdlJ3MgdHlwaW5nIHN1cHBvcnQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFdlYnBhY2sgKHdpdGggYEVudHJ5RnVuY2ApXG4gICAgICAgIHdlYnBhY2tNZXJnZShhbmd1bGFyV2VicGFja0NvbmZpZyBhcyBhbnksIHVzZXJDb25maWd1cmF0aW9uIGFzIGFueSksXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBgYXMgYW55YCBvbmNlIGd1bHBXZWJwYWNrJ3MgdHlwaW5nIHN1cHBvcnQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFdlYnBhY2sgKHdpdGggYEVudHJ5RnVuY2ApXG4gICAgICAgIGN1cldlYnBhY2sgYXMgYW55LFxuICAgICAgICAoZXJyOiBFcnJvciwgc3RhdHM6IHdlYnBhY2suU3RhdHMpOiB2b2lkID0+IHtcbiAgICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiBlcnIgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgIChzdWNjZXNzKSBhbmQgdHlwZSBwcm9wZXJseVxuICAgICAgICAgIGlmICg8YW55PiBlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQbHVnaW5FcnJvcihcIl9idWlsZDp3ZWJwYWNrXCIsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZhbmN5TG9nKFwiW19idWlsZDp3ZWJwYWNrXVwiLCBzdGF0cy50b1N0cmluZyh7Y29sb3JzOiB0cnVlfSkpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5waXBlKGd1bHAuZGVzdChvcHRpb25zLmJ1aWxkRGlyKSk7XG4gIH07XG4gIHRhc2suZGlzcGxheU5hbWUgPSBcIl9idWlsZDp3ZWJwYWNrXCI7XG4gIHJldHVybiB0YXNrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2goZ3VscDogR3VscCwgb3B0aW9uczogT3B0aW9ucyk6IEZTV2F0Y2hlciB7XG4gIGNvbnN0IGJ1aWxkVGFzazogVGFza0Z1bmN0aW9uID0gZ2VuZXJhdGVUYXNrKGd1bHAsIG9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VzOiBzdHJpbmcgPSBtYXRjaGVyLmFzU3RyaW5nKG1hdGNoZXIuam9pbihvcHRpb25zLnNyY0RpciwgbmV3IE1pbmltYXRjaChcIioqLypcIikpKTtcbiAgcmV0dXJuIGd1bHAud2F0Y2goc291cmNlcywge2N3ZDogb3B0aW9ucy5zcmNEaXJ9LCBidWlsZFRhc2spIGFzIEZTV2F0Y2hlcjtcbn1cbiJdLCJzb3VyY2VSb290IjoiLi4ifQ==