UNPKG

@farris/build-angular

Version:

Angular Webpack Build Facade

156 lines 19.9 kB
"use strict"; /** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ // tslint:disable // TODO: cleanup this file, it's copied as is from Angular CLI. Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const HtmlWebpackPlugin = require('html-webpack-plugin'); const SubresourceIntegrityPlugin = require('webpack-subresource-integrity'); const { LazyRequirePlugin, LibReferencePlugin } = require('@farris/lazy-require'); const license_webpack_plugin_1 = require("license-webpack-plugin"); const package_chunk_sort_1 = require("../../utilities/package-chunk-sort"); const base_href_webpack_1 = require("../../lib/base-href-webpack"); const index_html_webpack_plugin_1 = require("../../plugins/index-html-webpack-plugin"); const utils_1 = require("./utils"); /** + * license-webpack-plugin has a peer dependency on webpack-sources, list it in a comment to + * let the dependency validator know it is used. + * + * require('webpack-sources') + */ function getBrowserConfig(wco) { const { root, projectRoot, buildOptions } = wco; let extraPlugins = []; // Figure out which are the lazy loaded bundle names. const lazyChunkBundleNames = utils_1.normalizeExtraEntryPoints( // We don't really need a default name because we pre-filtered by lazy only entries. [...buildOptions.styles, ...buildOptions.scripts], 'not-lazy') .filter(entry => entry.lazy) .map(entry => entry.bundleName); const generateIndexHtml = false; if (generateIndexHtml) { extraPlugins.push(new HtmlWebpackPlugin({ template: path.resolve(root, buildOptions.index), filename: path.resolve(buildOptions.outputPath, buildOptions.index), chunksSortMode: package_chunk_sort_1.packageChunkSort(buildOptions), excludeChunks: lazyChunkBundleNames, xhtml: true, minify: buildOptions.optimization ? { caseSensitive: true, collapseWhitespace: true, keepClosingSlash: true } : false })); extraPlugins.push(new base_href_webpack_1.BaseHrefWebpackPlugin({ baseHref: buildOptions.baseHref })); } let sourcemaps = false; if (buildOptions.sourceMap) { // See https://webpack.js.org/configuration/devtool/ for sourcemap types. if (buildOptions.evalSourceMap && !buildOptions.optimization) { // Produce eval sourcemaps for development with serve, which are faster. sourcemaps = 'eval'; } else { // Produce full separate sourcemaps for production. sourcemaps = 'source-map'; } } if (buildOptions.subresourceIntegrity) { extraPlugins.push(new SubresourceIntegrityPlugin({ hashFuncNames: ['sha384'] })); } if (buildOptions.extractLicenses) { extraPlugins.push(new license_webpack_plugin_1.LicenseWebpackPlugin({ pattern: /.*/, suppressErrors: true, perChunkOutput: false, outputFilename: `3rdpartylicenses.txt` })); } const globalStylesBundleNames = utils_1.normalizeExtraEntryPoints(buildOptions.styles, 'styles') .map(style => style.bundleName); return { devtool: sourcemaps, resolve: { mainFields: [ ...(wco.supportES2015 ? ['es2015'] : []), 'browser', 'module', 'main' ] }, output: { crossOriginLoading: buildOptions.subresourceIntegrity ? 'anonymous' : false }, optimization: { runtimeChunk: 'single', splitChunks: { maxAsyncRequests: Infinity, cacheGroups: { default: buildOptions.commonChunk && { chunks: 'async', minChunks: 2, priority: 10, }, common: buildOptions.commonChunk && { name: 'common', chunks: 'async', minChunks: 2, enforce: true, priority: 5, }, vendors: false, vendor: buildOptions.vendorChunk && { name: 'vendor', chunks: 'initial', enforce: true, test: (module, chunks) => { const moduleName = module.nameForCondition ? module.nameForCondition() : ''; return /[\\/]node_modules[\\/]/.test(moduleName) && !chunks.some(({ name }) => name === 'polyfills' || globalStylesBundleNames.includes(name)); }, }, } } }, plugins: extraPlugins.concat([ new index_html_webpack_plugin_1.IndexHtmlWebpackPlugin({ input: path.resolve(root, buildOptions.index), output: path.basename(buildOptions.index), baseHref: buildOptions.baseHref, entrypoints: package_chunk_sort_1.generateEntryPoints(buildOptions), deployUrl: buildOptions.deployUrl, sri: buildOptions.subresourceIntegrity, }), new LazyRequirePlugin({ // entryModules: [ // "app/lazy-module/lazy.module.ts" // ], entryModules: buildOptions.entryModules, tsConfigPath: wco.tsConfigPath }), new LibReferencePlugin({ buildTarget: 'App', reference: buildOptions.reference, // reference: [ // ["rxjs", "dist-reference/rxjs_manifest.json"], // ["angular", "dist-reference/angular_manifest.json"], // ["progress", "dist-reference/progress_manifest.json"] // ], includeContextModule: true, basePath: wco.root }) ]), node: false, }; } exports.getBrowserConfig = getBrowserConfig; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvZmFycmlzX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9hbmd1bGFyLWNsaS1maWxlcy9tb2RlbHMvd2VicGFjay1jb25maWdzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRztBQUNILGlCQUFpQjtBQUNqQiwrREFBK0Q7O0FBRS9ELDZCQUE2QjtBQUM3QixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDNUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDbEYsbUVBQThEO0FBQzlELDJFQUEyRjtBQUMzRixtRUFBb0U7QUFDcEUsdUZBQWlGO0FBSWpGLG1DQUFvRDtBQUVwRDs7Ozs7SUFLSTtBQUVKLDBCQUFpQyxHQUF5QjtJQUN4RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFHaEQsSUFBSSxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBRTdCLHFEQUFxRDtJQUNyRCxNQUFNLG9CQUFvQixHQUFHLGlDQUF5QjtJQUNwRCxvRkFBb0Y7SUFDcEYsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDO1NBQzdELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRWpDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLEVBQUUsQ0FBQyxDQUFD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QUFtQixDQUFDLFlBQVksQ0FBQztnQkFDOUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO2dCQUNqQyxHQUFHLEVBQUUsWUFBWSxDQUFDLG9CQUFvQjthQUN2QyxDQUFDO1lBQ0YsSUFBSSxpQkFBaUIsQ0FBQztnQkFDcEIsa0JBQWtCO2dCQUNsQix1Q0FBdUM7Z0JBQ3ZDLEtBQUs7Z0JBQ0wsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO2dCQUN2QyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7YUFDL0IsQ0FBQztZQUNGLElBQUksa0JBQWtCLENBQUM7Z0JBQ3JCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7Z0JBQ2pDLGVBQWU7Z0JBQ2YsbURBQW1EO2dCQUNuRCx5REFBeUQ7Z0JBQ3pELDBEQUEwRDtnQkFDMUQsS0FBSztnQkFDTCxvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDbkIsQ0FBQztTQUNILENBQUM7UUFDRixJQUFJLEVBQUUsS0FBSztLQUNaLENBQUM7QUFDSixDQUFDO0FBdklELDRDQXVJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlXG4vLyBUT0RPOiBjbGVhbnVwIHRoaXMgZmlsZSwgaXQncyBjb3BpZWQgYXMgaXMgZnJvbSBBbmd1bGFyIENMSS5cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmNvbnN0IEh0bWxXZWJwYWNrUGx1Z2luID0gcmVxdWlyZSgnaHRtbC13ZWJwYWNrLXBsdWdpbicpO1xuY29uc3QgU3VicmVzb3VyY2VJbnRlZ3JpdHlQbHVnaW4gPSByZXF1aXJlKCd3ZWJwYWNrLXN1YnJlc291cmNlLWludGVncml0eScpO1xuY29uc3QgeyBMYXp5UmVxdWlyZVBsdWdpbiwgTGliUmVmZXJlbmNlUGx1Z2luIH0gPSByZXF1aXJlKCdAZmFycmlzL2xhenktcmVxdWlyZScpO1xuaW1wb3J0IHsgTGljZW5zZVdlYnBhY2tQbHVnaW4gfSBmcm9tICdsaWNlbnNlLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7IGdlbmVyYXRlRW50cnlQb2ludHMsIHBhY2thZ2VDaHVua1NvcnQgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvcGFja2FnZS1jaHVuay1zb3J0JztcbmltcG9ydCB7IEJhc2VIcmVmV2VicGFja1BsdWdpbiB9IGZyb20gJy4uLy4uL2xpYi9iYXNlLWhyZWYtd2VicGFjayc7XG5pbXBvcnQgeyBJbmRleEh0bWxXZWJwYWNrUGx1Z2luIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy9pbmRleC1odG1sLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7IEV4dHJhRW50cnlQb2ludCB9IGZyb20gJy4uLy4uLy4uL2Jyb3dzZXIvc2NoZW1hJztcbmltcG9ydCB7IEJyb3dzZXJCdWlsZGVyU2NoZW1hIH0gZnJvbSAnLi4vLi4vLi4vYnJvd3Nlci9zY2hlbWEnO1xuaW1wb3J0IHsgV2VicGFja0NvbmZpZ09wdGlvbnMgfSBmcm9tICcuLi9idWlsZC1vcHRpb25zJztcbmltcG9ydCB7IG5vcm1hbGl6ZUV4dHJhRW50cnlQb2ludHMgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4rICogbGljZW5zZS13ZWJwYWNrLXBsdWdpbiBoYXMgYSBwZWVyIGRlcGVuZGVuY3kgb24gd2VicGFjay1zb3VyY2VzLCBsaXN0IGl0IGluIGEgY29tbWVudCB0b1xuKyAqIGxldCB0aGUgZGVwZW5kZW5jeSB2YWxpZGF0b3Iga25vdyBpdCBpcyB1c2VkLlxuKyAqXG4rICogcmVxdWlyZSgnd2VicGFjay1zb3VyY2VzJylcbisgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJDb25maWcod2NvOiBXZWJwYWNrQ29uZmlnT3B0aW9ucykge1xuICBjb25zdCB7IHJvb3QsIHByb2plY3RSb290LCBidWlsZE9wdGlvbnMgfSA9IHdjbztcblxuXG4gIGxldCBleHRyYVBsdWdpbnM6IGFueVtdID0gW107XG5cbiAgLy8gRmlndXJlIG91dCB3aGljaCBhcmUgdGhlIGxhenkgbG9hZGVkIGJ1bmRsZSBuYW1lcy5cbiAgY29uc3QgbGF6eUNodW5rQnVuZGxlTmFtZXMgPSBub3JtYWxpemVFeHRyYUVudHJ5UG9pbnRzKFxuICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgZGVmYXVsdCBuYW1lIGJlY2F1c2Ugd2UgcHJlLWZpbHRlcmVkIGJ5IGxhenkgb25seSBlbnRyaWVzLlxuICAgIFsuLi5idWlsZE9wdGlvbnMuc3R5bGVzLCAuLi5idWlsZE9wdGlvbnMuc2NyaXB0c10sICdub3QtbGF6eScpXG4gICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5sYXp5KVxuICAgIC5tYXAoZW50cnkgPT4gZW50cnkuYnVuZGxlTmFtZSlcblxuICBjb25zdCBnZW5lcmF0ZUluZGV4SHRtbCA9IGZhbHNlO1xuICBpZiAoZ2VuZXJhdGVJbmRleEh0bWwpIHtcbiAgICBleHRyYVBsdWdpbnMucHVzaChuZXcgSHRtbFdlYnBhY2tQbHVnaW4oe1xuICAgICAgdGVtcGxhdGU6IHBhdGgucmVzb2x2ZShyb290LCBidWlsZE9wdGlvbnMuaW5kZXgpLFxuICAgICAgZmlsZW5hbWU6IHBhdGgucmVzb2x2ZShidWlsZE9wdGlvbnMub3V0cHV0UGF0aCwgYnVpbGRPcHRpb25zLmluZGV4KSxcbiAgICAgIGNodW5rc1NvcnRNb2RlOiBwYWNrYWdlQ2h1bmtTb3J0KGJ1aWxkT3B0aW9ucyksXG4gICAgICBleGNsdWRlQ2h1bmtzOiBsYXp5Q2h1bmtCdW5kbGVOYW1lcyxcbiAgICAgIHhodG1sOiB0cnVlLFxuICAgICAgbWluaWZ5OiBidWlsZE9wdGlvbnMub3B0aW1pemF0aW9uID8ge1xuICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuICAgICAgICBjb2xsYXBzZVdoaXRlc3BhY2U6IHRydWUsXG4gICAgICAgIGtlZXBDbG9zaW5nU2xhc2g6IHRydWVcbiAgICAgIH0gOiBmYWxzZVxuICAgIH0pKTtcbiAgICBleHRyYVBsdWdpbnMucHVzaChuZXcgQmFzZUhyZWZXZWJwYWNrUGx1Z2luKHtcbiAgICAgIGJhc2VIcmVmOiBidWlsZE9wdGlvbnMuYmFzZUhyZWYgYXMgc3RyaW5nXG4gICAgfSkpO1xuICB9XG5cbiAgbGV0IHNvdXJjZW1hcHM6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gIGlmIChidWlsZE9wdGlvbnMuc291cmNlTWFwKSB7XG4gICAgLy8gU2VlIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvY29uZmlndXJhdGlvbi9kZXZ0b29sLyBmb3Igc291cmNlbWFwIHR5cGVzLlxuICAgIGlmIChidWlsZE9wdGlvbnMuZXZhbFNvdXJjZU1hcCAmJiAhYnVpbGRPcHRpb25zLm9wdGltaXphdGlvbikge1xuICAgICAgLy8gUHJvZHVjZSBldmFsIHNvdXJjZW1hcHMgZm9yIGRldmVsb3BtZW50IHdpdGggc2VydmUsIHdoaWNoIGFyZSBmYXN0ZXIuXG4gICAgICBzb3VyY2VtYXBzID0gJ2V2YWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcm9kdWNlIGZ1bGwgc2VwYXJhdGUgc291cmNlbWFwcyBmb3IgcHJvZHVjdGlvbi5cbiAgICAgIHNvdXJjZW1hcHMgPSAnc291cmNlLW1hcCc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1aWxkT3B0aW9ucy5zdWJyZXNvdXJjZUludGVncml0eSkge1xuICAgIGV4dHJhUGx1Z2lucy5wdXNoKG5ldyBTdWJyZXNvdXJjZUludGVncml0eVBsdWdpbih7XG4gICAgICBoYXNoRnVuY05hbWVzOiBbJ3NoYTM4NCddXG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGJ1aWxkT3B0aW9ucy5leHRyYWN0TGljZW5zZXMpIHtcbiAgICBleHRyYVBsdWdpbnMucHVzaChuZXcgTGljZW5zZVdlYnBhY2tQbHVnaW4oe1xuICAgICAgcGF0dGVybjogLy4qLyxcbiAgICAgIHN1cHByZXNzRXJyb3JzOiB0cnVlLFxuICAgICAgcGVyQ2h1bmtPdXRwdXQ6IGZhbHNlLFxuICAgICAgb3V0cHV0RmlsZW5hbWU6IGAzcmRwYXJ0eWxpY2Vuc2VzLnR4dGBcbiAgICB9KSk7XG4gIH1cblxuICBjb25zdCBnbG9iYWxTdHlsZXNCdW5kbGVOYW1lcyA9IG5vcm1hbGl6ZUV4dHJhRW50cnlQb2ludHMoYnVpbGRPcHRpb25zLnN0eWxlcywgJ3N0eWxlcycpXG4gICAgLm1hcChzdHlsZSA9PiBzdHlsZS5idW5kbGVOYW1lKTtcblxuICByZXR1cm4ge1xuICAgIGRldnRvb2w6IHNvdXJjZW1hcHMsXG4gICAgcmVzb2x2ZToge1xuICAgICAgbWFpbkZpZWxkczogW1xuICAgICAgICAuLi4od2NvLnN1cHBvcnRFUzIwMTUgPyBbJ2VzMjAxNSddIDogW10pLFxuICAgICAgICAnYnJvd3NlcicsICdtb2R1bGUnLCAnbWFpbidcbiAgICAgIF1cbiAgICB9LFxuICAgIG91dHB1dDoge1xuICAgICAgY3Jvc3NPcmlnaW5Mb2FkaW5nOiBidWlsZE9wdGlvbnMuc3VicmVzb3VyY2VJbnRlZ3JpdHkgPyAnYW5vbnltb3VzJyA6IGZhbHNlXG4gICAgfSxcbiAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgIHJ1bnRpbWVDaHVuazogJ3NpbmdsZScsXG4gICAgICBzcGxpdENodW5rczoge1xuICAgICAgICBtYXhBc3luY1JlcXVlc3RzOiBJbmZpbml0eSxcbiAgICAgICAgY2FjaGVHcm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiBidWlsZE9wdGlvbnMuY29tbW9uQ2h1bmsgJiYge1xuICAgICAgICAgICAgY2h1bmtzOiAnYXN5bmMnLFxuICAgICAgICAgICAgbWluQ2h1bmtzOiAyLFxuICAgICAgICAgICAgcHJpb3JpdHk6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbW9uOiBidWlsZE9wdGlvbnMuY29tbW9uQ2h1bmsgJiYge1xuICAgICAgICAgICAgbmFtZTogJ2NvbW1vbicsXG4gICAgICAgICAgICBjaHVua3M6ICdhc3luYycsXG4gICAgICAgICAgICBtaW5DaHVua3M6IDIsXG4gICAgICAgICAgICBlbmZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgcHJpb3JpdHk6IDUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZW5kb3JzOiBmYWxzZSxcbiAgICAgICAgICB2ZW5kb3I6IGJ1aWxkT3B0aW9ucy52ZW5kb3JDaHVuayAmJiB7XG4gICAgICAgICAgICBuYW1lOiAndmVuZG9yJyxcbiAgICAgICAgICAgIGNodW5rczogJ2luaXRpYWwnLFxuICAgICAgICAgICAgZW5mb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgIHRlc3Q6IChtb2R1bGU6IGFueSwgY2h1bmtzOiBBcnJheTx7IG5hbWU6IHN0cmluZyB9PikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlLm5hbWVGb3JDb25kaXRpb24gPyBtb2R1bGUubmFtZUZvckNvbmRpdGlvbigpIDogJyc7XG4gICAgICAgICAgICAgIHJldHVybiAvW1xcXFwvXW5vZGVfbW9kdWxlc1tcXFxcL10vLnRlc3QobW9kdWxlTmFtZSlcbiAgICAgICAgICAgICAgICAmJiAhY2h1bmtzLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSAncG9seWZpbGxzJ1xuICAgICAgICAgICAgICAgICAgfHwgZ2xvYmFsU3R5bGVzQnVuZGxlTmFtZXMuaW5jbHVkZXMobmFtZSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwbHVnaW5zOiBleHRyYVBsdWdpbnMuY29uY2F0KFtcbiAgICAgIG5ldyBJbmRleEh0bWxXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgaW5wdXQ6IHBhdGgucmVzb2x2ZShyb290LCBidWlsZE9wdGlvbnMuaW5kZXgpLFxuICAgICAgICBvdXRwdXQ6IHBhdGguYmFzZW5hbWUoYnVpbGRPcHRpb25zLmluZGV4KSxcbiAgICAgICAgYmFzZUhyZWY6IGJ1aWxkT3B0aW9ucy5iYXNlSHJlZixcbiAgICAgICAgZW50cnlwb2ludHM6IGdlbmVyYXRlRW50cnlQb2ludHMoYnVpbGRPcHRpb25zKSxcbiAgICAgICAgZGVwbG95VXJsOiBidWlsZE9wdGlvbnMuZGVwbG95VXJsLFxuICAgICAgICBzcmk6IGJ1aWxkT3B0aW9ucy5zdWJyZXNvdXJjZUludGVncml0eSxcbiAgICAgIH0pLFxuICAgICAgbmV3IExhenlSZXF1aXJlUGx1Z2luKHtcbiAgICAgICAgLy8gZW50cnlNb2R1bGVzOiBbXG4gICAgICAgIC8vICAgICBcImFwcC9sYXp5LW1vZHVsZS9sYXp5Lm1vZHVsZS50c1wiXG4gICAgICAgIC8vIF0sXG4gICAgICAgIGVudHJ5TW9kdWxlczogYnVpbGRPcHRpb25zLmVudHJ5TW9kdWxlcyxcbiAgICAgICAgdHNDb25maWdQYXRoOiB3Y28udHNDb25maWdQYXRoXG4gICAgICB9KSxcbiAgICAgIG5ldyBMaWJSZWZlcmVuY2VQbHVnaW4oe1xuICAgICAgICBidWlsZFRhcmdldDogJ0FwcCcsXG4gICAgICAgIHJlZmVyZW5jZTogYnVpbGRPcHRpb25zLnJlZmVyZW5jZSxcbiAgICAgICAgLy8gcmVmZXJlbmNlOiBbXG4gICAgICAgIC8vICAgW1wicnhqc1wiLCBcImRpc3QtcmVmZXJlbmNlL3J4anNfbWFuaWZlc3QuanNvblwiXSxcbiAgICAgICAgLy8gICBbXCJhbmd1bGFyXCIsIFwiZGlzdC1yZWZlcmVuY2UvYW5ndWxhcl9tYW5pZmVzdC5qc29uXCJdLFxuICAgICAgICAvLyAgIFtcInByb2dyZXNzXCIsIFwiZGlzdC1yZWZlcmVuY2UvcHJvZ3Jlc3NfbWFuaWZlc3QuanNvblwiXVxuICAgICAgICAvLyBdLFxuICAgICAgICBpbmNsdWRlQ29udGV4dE1vZHVsZTogdHJ1ZSxcbiAgICAgICAgYmFzZVBhdGg6IHdjby5yb290XG4gICAgICB9KVxuICAgIF0pLFxuICAgIG5vZGU6IGZhbHNlLFxuICB9O1xufVxuIl19