cdkdx
Version:
Zero-config CLI for aws cdk development
197 lines • 19.7 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Bundler = exports.Lambdas = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const webpack_1 = __importStar(require("webpack"));
const fork_ts_checker_webpack_plugin_1 = __importDefault(require("fork-ts-checker-webpack-plugin"));
const friendly_errors_webpack_plugin_1 = __importDefault(require("friendly-errors-webpack-plugin"));
const size_plugin_1 = __importDefault(require("size-plugin"));
const terser_webpack_plugin_1 = __importDefault(require("terser-webpack-plugin"));
const webpack_license_plugin_1 = __importDefault(require("webpack-license-plugin"));
const cdkdx_config_1 = require("./cdkdx-config");
const plugins_1 = require("./plugins");
class Lambdas {
constructor(srcPath) {
this.entries = {};
this.warnings = new Array();
if (fs_extra_1.default.existsSync(srcPath)) {
fs_extra_1.default.readdirSync(srcPath).forEach((name) => {
if (name === Lambdas.SHARED_FOLDER)
return;
const lambdaPath = path_1.default.join(srcPath, name);
if (!fs_extra_1.default.statSync(lambdaPath).isDirectory())
return;
let entry = path_1.default.join(lambdaPath, 'index.ts');
if (fs_extra_1.default.existsSync(entry)) {
this.entries[name] = entry;
}
else {
entry = path_1.default.join(lambdaPath, 'index.tsx');
if (fs_extra_1.default.existsSync(entry)) {
this.entries[name] = entry;
}
else {
this.warnings.push(entry);
}
}
});
}
}
hasEntries() {
return Object.keys(this.entries).length > 0;
}
hasWarnings() {
return this.warnings.length > 0;
}
}
exports.Lambdas = Lambdas;
Lambdas.SHARED_FOLDER = 'shared';
class Bundler {
constructor(props) {
var _a;
const compilerOptions = {
importsNotUsedAsValues: 'preserve',
noEmit: false,
declaration: false,
inlineSourceMap: false,
sourceMap: true,
composite: false,
};
const cdkdxConfig = new cdkdx_config_1.CdkdxConfig(props.projectInfo);
const config = cdkdxConfig.webpack({
target: 'node',
mode: 'production',
devtool: 'source-map',
optimization: {
minimize: props.minify,
minimizer: [
new terser_webpack_plugin_1.default({
cache: true,
parallel: true,
extractComments: true,
sourceMap: true,
}),
],
},
entry: {
...props.lambdas.entries,
},
resolve: {
extensions: ['.ts', '.tsx', '.js'],
},
module: {
rules: [
{
test: /\.tsx?$/,
include: props.projectInfo.lambdasSrcPath,
exclude: /node_modules/,
use: {
loader: 'ts-loader',
options: {
configFile: props.tsConfigFile,
transpileOnly: true,
compilerOptions,
},
},
},
{
test: /\.html$/i,
include: props.projectInfo.lambdasSrcPath,
loader: 'html-loader',
options: {
minimize: props.minify,
},
},
],
},
plugins: [
// https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
new webpack_1.IgnorePlugin(/^\.\/locale$/, /moment$/),
new size_plugin_1.default({
writeFile: true,
publish: false,
filename: 'lambda-file-sizes.json',
}),
new fork_ts_checker_webpack_plugin_1.default({
typescript: {
enabled: true,
configFile: props.tsConfigFile,
configOverwrite: {
compilerOptions,
},
},
}),
new plugins_1.NodeModulesPlugin({
nodeModules: props.projectInfo.nodeModules,
}),
//new LambdaFileSizePlugin({}),
new friendly_errors_webpack_plugin_1.default({
clearConsole: false,
}),
],
output: {
path: props.projectInfo.lambdasOutPath,
filename: '[name]/index.js',
libraryTarget: 'commonjs2',
},
externals: [
...props.projectInfo.externals,
...props.projectInfo.nodeModules,
],
});
if (props.projectInfo.isConstructLib) {
(_a = config.plugins) === null || _a === void 0 ? void 0 : _a.push(new webpack_license_plugin_1.default({ outputFilename: 'thirdPartyNotice.json' }));
}
this.compiler = (0, webpack_1.default)(config);
}
async run() {
return new Promise((resolve, reject) => {
this.compiler.run((err, stats) => {
if (err) {
return reject(err);
}
if (stats.hasErrors()) {
return reject('Webpack compilation error, see above');
}
resolve();
});
});
}
watch() {
return this.compiler.watch({
aggregateTimeout: 300,
poll: undefined,
}, (_err, _stats) => {
return;
});
}
}
exports.Bundler = Bundler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixtREFBZ0Q7QUFDaEQsb0dBQXdFO0FBQ3hFLG9HQUF5RTtBQUN6RSw4REFBcUM7QUFDckMsa0ZBQWlEO0FBQ2pELG9GQUFtRDtBQUduRCxpREFBNkM7QUFDN0MsdUNBQThDO0FBRTlDLE1BQWEsT0FBTztJQU1sQixZQUFZLE9BQWU7UUFIWCxZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUc3QyxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLGtCQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN2QyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUUzQyxNQUFNLFVBQVUsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLGtCQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFBRSxPQUFPO2dCQUVuRCxJQUFJLEtBQUssR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzVCO3FCQUFNO29CQUNMLEtBQUssR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFFM0MsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQzVCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUMzQjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQXRDSCwwQkF1Q0M7QUF0Q3dCLHFCQUFhLEdBQUcsUUFBUSxDQUFDO0FBK0NsRCxNQUFhLE9BQU87SUFHbEIsWUFBWSxLQUFtQjs7UUFDN0IsTUFBTSxlQUFlLEdBQUc7WUFDdEIsc0JBQXNCLEVBQUUsVUFBVTtZQUNsQyxNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksMEJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkQsTUFBTSxNQUFNLEdBQTBCLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDeEQsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsWUFBWTtZQUNsQixPQUFPLEVBQUUsWUFBWTtZQUNyQixZQUFZLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUN0QixTQUFTLEVBQUU7b0JBQ1QsSUFBSSwrQkFBWSxDQUFDO3dCQUNmLEtBQUssRUFBRSxJQUFJO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3dCQUNkLGVBQWUsRUFBRSxJQUFJO3dCQUNyQixTQUFTLEVBQUUsSUFBSTtxQkFDaEIsQ0FBQztpQkFDSDthQUNGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPO2FBQ3pCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQ25DO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsU0FBUzt3QkFDZixPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjO3dCQUN6QyxPQUFPLEVBQUUsY0FBYzt3QkFDdkIsR0FBRyxFQUFFOzRCQUNILE1BQU0sRUFBRSxXQUFXOzRCQUNuQixPQUFPLEVBQUU7Z0NBQ1AsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dDQUM5QixhQUFhLEVBQUUsSUFBSTtnQ0FDbkIsZUFBZTs2QkFDaEI7eUJBQ0Y7cUJBQ0Y7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWM7d0JBQ3pDLE1BQU0sRUFBRSxhQUFhO3dCQUNyQixPQUFPLEVBQUU7NEJBQ1AsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNO3lCQUN2QjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGtFQUFrRTtnQkFDbEUsSUFBSSxzQkFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUM7Z0JBQzNDLElBQUkscUJBQVUsQ0FBQztvQkFDYixTQUFTLEVBQUUsSUFBSTtvQkFDZixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNuQyxDQUFDO2dCQUNGLElBQUksd0NBQTBCLENBQUM7b0JBQzdCLFVBQVUsRUFBRTt3QkFDVixPQUFPLEVBQUUsSUFBSTt3QkFDYixVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7d0JBQzlCLGVBQWUsRUFBRTs0QkFDZixlQUFlO3lCQUNoQjtxQkFDRjtpQkFDRixDQUFDO2dCQUNGLElBQUksMkJBQWlCLENBQUM7b0JBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7aUJBQzNDLENBQUM7Z0JBQ0YsK0JBQStCO2dCQUMvQixJQUFJLHdDQUEyQixDQUFDO29CQUM5QixZQUFZLEVBQUUsS0FBSztpQkFDcEIsQ0FBQzthQUNIO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWM7Z0JBQ3RDLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLGFBQWEsRUFBRSxXQUFXO2FBQzNCO1lBQ0QsU0FBUyxFQUFFO2dCQUNULEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTO2dCQUM5QixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVzthQUNqQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDcEMsTUFBQSxNQUFNLENBQUMsT0FBTywwQ0FBRSxJQUFJLENBQ2xCLElBQUksZ0NBQWEsQ0FBQyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQy9ELENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBQSxpQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRztRQUNkLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDckIsT0FBTyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBRUQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUN4QjtZQUNFLGdCQUFnQixFQUFFLEdBQUc7WUFDckIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsRUFDRCxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNmLE9BQU87UUFDVCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJJRCwwQkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgd2VicGFjaywgeyBJZ25vcmVQbHVnaW4gfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCBGb3JrVHNDaGVja2VyV2VicGFja1BsdWdpbiBmcm9tICdmb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IEZyaWVuZGx5RXJyb3JzV2VicGFja1BsdWdpbiBmcm9tICdmcmllbmRseS1lcnJvcnMtd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IFNpemVQbHVnaW4gZnJvbSAnc2l6ZS1wbHVnaW4nO1xuaW1wb3J0IFRlcnNlclBsdWdpbiBmcm9tICd0ZXJzZXItd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IExpY2Vuc2VQbHVnaW4gZnJvbSAnd2VicGFjay1saWNlbnNlLXBsdWdpbic7XG5cbmltcG9ydCB7IFByb2plY3RJbmZvIH0gZnJvbSAnLi9wcm9qZWN0LWluZm8nO1xuaW1wb3J0IHsgQ2RrZHhDb25maWcgfSBmcm9tICcuL2Nka2R4LWNvbmZpZyc7XG5pbXBvcnQgeyBOb2RlTW9kdWxlc1BsdWdpbiB9IGZyb20gJy4vcGx1Z2lucyc7XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFzIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSEFSRURfRk9MREVSID0gJ3NoYXJlZCc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVudHJpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihzcmNQYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzcmNQYXRoKSkge1xuICAgICAgZnMucmVhZGRpclN5bmMoc3JjUGF0aCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAobmFtZSA9PT0gTGFtYmRhcy5TSEFSRURfRk9MREVSKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbGFtYmRhUGF0aCA9IHBhdGguam9pbihzcmNQYXRoLCBuYW1lKTtcblxuICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKGxhbWJkYVBhdGgpLmlzRGlyZWN0b3J5KCkpIHJldHVybjtcblxuICAgICAgICBsZXQgZW50cnkgPSBwYXRoLmpvaW4obGFtYmRhUGF0aCwgJ2luZGV4LnRzJyk7XG5cbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZW50cnkpKSB7XG4gICAgICAgICAgdGhpcy5lbnRyaWVzW25hbWVdID0gZW50cnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cnkgPSBwYXRoLmpvaW4obGFtYmRhUGF0aCwgJ2luZGV4LnRzeCcpO1xuXG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNbbmFtZV0gPSBlbnRyeTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNFbnRyaWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmVudHJpZXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgaGFzV2FybmluZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2FybmluZ3MubGVuZ3RoID4gMDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZXJQcm9wcyB7XG4gIHByb2plY3RJbmZvOiBQcm9qZWN0SW5mbztcbiAgdHNDb25maWdGaWxlOiBzdHJpbmc7XG4gIGxhbWJkYXM6IExhbWJkYXM7XG4gIG1pbmlmeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1bmRsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyOiB3ZWJwYWNrLkNvbXBpbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBCdW5kbGVyUHJvcHMpIHtcbiAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB7XG4gICAgICBpbXBvcnRzTm90VXNlZEFzVmFsdWVzOiAncHJlc2VydmUnLFxuICAgICAgbm9FbWl0OiBmYWxzZSxcbiAgICAgIGRlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICAgIGlubGluZVNvdXJjZU1hcDogZmFsc2UsXG4gICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICBjb21wb3NpdGU6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCBjZGtkeENvbmZpZyA9IG5ldyBDZGtkeENvbmZpZyhwcm9wcy5wcm9qZWN0SW5mbyk7XG5cbiAgICBjb25zdCBjb25maWc6IHdlYnBhY2suQ29uZmlndXJhdGlvbiA9IGNka2R4Q29uZmlnLndlYnBhY2soe1xuICAgICAgdGFyZ2V0OiAnbm9kZScsXG4gICAgICBtb2RlOiAncHJvZHVjdGlvbicsXG4gICAgICBkZXZ0b29sOiAnc291cmNlLW1hcCcsXG4gICAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgICAgbWluaW1pemU6IHByb3BzLm1pbmlmeSxcbiAgICAgICAgbWluaW1pemVyOiBbXG4gICAgICAgICAgbmV3IFRlcnNlclBsdWdpbih7XG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHBhcmFsbGVsOiB0cnVlLFxuICAgICAgICAgICAgZXh0cmFjdENvbW1lbnRzOiB0cnVlLFxuICAgICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiB7XG4gICAgICAgIC4uLnByb3BzLmxhbWJkYXMuZW50cmllcyxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiB7XG4gICAgICAgIGV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLmpzJ10sXG4gICAgICB9LFxuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVzdDogL1xcLnRzeD8kLyxcbiAgICAgICAgICAgIGluY2x1ZGU6IHByb3BzLnByb2plY3RJbmZvLmxhbWJkYXNTcmNQYXRoLFxuICAgICAgICAgICAgZXhjbHVkZTogL25vZGVfbW9kdWxlcy8sXG4gICAgICAgICAgICB1c2U6IHtcbiAgICAgICAgICAgICAgbG9hZGVyOiAndHMtbG9hZGVyJyxcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGU6IHByb3BzLnRzQ29uZmlnRmlsZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGVPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXN0OiAvXFwuaHRtbCQvaSxcbiAgICAgICAgICAgIGluY2x1ZGU6IHByb3BzLnByb2plY3RJbmZvLmxhbWJkYXNTcmNQYXRoLFxuICAgICAgICAgICAgbG9hZGVyOiAnaHRtbC1sb2FkZXInLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBtaW5pbWl6ZTogcHJvcHMubWluaWZ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ptYmxvZy9ob3ctdG8tb3B0aW1pemUtbW9tZW50anMtd2l0aC13ZWJwYWNrXG4gICAgICAgIG5ldyBJZ25vcmVQbHVnaW4oL15cXC5cXC9sb2NhbGUkLywgL21vbWVudCQvKSxcbiAgICAgICAgbmV3IFNpemVQbHVnaW4oe1xuICAgICAgICAgIHdyaXRlRmlsZTogdHJ1ZSxcbiAgICAgICAgICBwdWJsaXNoOiBmYWxzZSxcbiAgICAgICAgICBmaWxlbmFtZTogJ2xhbWJkYS1maWxlLXNpemVzLmpzb24nLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IEZvcmtUc0NoZWNrZXJXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgICB0eXBlc2NyaXB0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnRmlsZTogcHJvcHMudHNDb25maWdGaWxlLFxuICAgICAgICAgICAgY29uZmlnT3ZlcndyaXRlOiB7XG4gICAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBOb2RlTW9kdWxlc1BsdWdpbih7XG4gICAgICAgICAgbm9kZU1vZHVsZXM6IHByb3BzLnByb2plY3RJbmZvLm5vZGVNb2R1bGVzLFxuICAgICAgICB9KSxcbiAgICAgICAgLy9uZXcgTGFtYmRhRmlsZVNpemVQbHVnaW4oe30pLFxuICAgICAgICBuZXcgRnJpZW5kbHlFcnJvcnNXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgICBjbGVhckNvbnNvbGU6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgcGF0aDogcHJvcHMucHJvamVjdEluZm8ubGFtYmRhc091dFBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiAnW25hbWVdL2luZGV4LmpzJyxcbiAgICAgICAgbGlicmFyeVRhcmdldDogJ2NvbW1vbmpzMicsXG4gICAgICB9LFxuICAgICAgZXh0ZXJuYWxzOiBbXG4gICAgICAgIC4uLnByb3BzLnByb2plY3RJbmZvLmV4dGVybmFscyxcbiAgICAgICAgLi4ucHJvcHMucHJvamVjdEluZm8ubm9kZU1vZHVsZXMsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnByb2plY3RJbmZvLmlzQ29uc3RydWN0TGliKSB7XG4gICAgICBjb25maWcucGx1Z2lucz8ucHVzaChcbiAgICAgICAgbmV3IExpY2Vuc2VQbHVnaW4oeyBvdXRwdXRGaWxlbmFtZTogJ3RoaXJkUGFydHlOb3RpY2UuanNvbicgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGlsZXIgPSB3ZWJwYWNrKGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbXBpbGVyLnJ1bigoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRzLmhhc0Vycm9ycygpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdCgnV2VicGFjayBjb21waWxhdGlvbiBlcnJvciwgc2VlIGFib3ZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXRjaCgpOiB3ZWJwYWNrLldhdGNoaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlci53YXRjaChcbiAgICAgIHtcbiAgICAgICAgYWdncmVnYXRlVGltZW91dDogMzAwLFxuICAgICAgICBwb2xsOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgKF9lcnIsIF9zdGF0cykgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==