UNPKG

lizi-wxapp-cli

Version:

微信小程序快速创建cli脚手架

206 lines 25.9 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chalk_1 = __importDefault(require("chalk")); const child_process_1 = __importDefault(require("child_process")); const inquirer_1 = __importDefault(require("inquirer")); const json_format_1 = __importDefault(require("json-format")); const ora_1 = __importDefault(require("ora")); const path_1 = __importDefault(require("path")); const log_1 = require("../ulits/log"); const ulits_1 = require("../ulits/ulits"); const base_1 = __importDefault(require("./base")); const create_page_fs_1 = require("./create-page-fs"); class CreateProject extends base_1.default { constructor() { super(); this.name = ''; this.depict = ''; this.appid = ''; this.mode = 'javascript'; this.css = 'wxss'; } init() { inquirer_1.default.prompt([ this.__projectName(), this.__projectDescription(), this.__projectAppId(), this.__projectMode(), this.__projectCss() ]).then(({ name, depict, appid, mode, css }) => __awaiter(this, void 0, void 0, function* () { this.name = name; this.depict = depict; this.appid = appid; this.mode = mode; this.css = css; yield this.create(); })).catch((err) => { console.log(err); }); } __projectName() { const that = this; return { type: 'input', name: 'name', message: '请输入项目名称:', validate(input) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { if (ulits_1.regEn.test(input) || ulits_1.regCn.test(input)) { resolve(chalk_1.default.red('项目名不符合规则,请重新输入项目名!')); } else if (yield that.checkFileIsExists(path_1.default.join(that.projectRoot, input))) { resolve(chalk_1.default.red('该项目已创建,请重新输入项目名!')); } resolve(true); })); }); }, default: 'app' }; } __projectDescription() { return { type: 'input', name: 'depict', message: '请输入项目描述:' }; } __projectAppId() { return { type: 'input', name: 'appid', message: (answers) => `请输入[${answers.name}]的AppId:`, validate(input) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve) => { if (!ulits_1.regAppId.test(input)) resolve(chalk_1.default.red('请输入正确的AppId!')); resolve(true); }); }); } }; } __projectMode() { return { type: 'list', name: 'mode', message: '选择项目脚本语言:', choices: [ 'javascript', 'typescript' ] }; } __projectCss() { return { type: 'list', name: 'css', message: '选择项目样式语言:', choices: [ 'wxss', 'less' ] }; } _copyTypeFiles(copyRoot, projectRoot, type) { return __awaiter(this, void 0, void 0, function* () { const root = path_1.default.join(copyRoot, type); const files = yield this.readDirs(root); yield this.copyFilesArr(root, projectRoot, files) .catch(({ result }) => this.fileIsRepeat(result)); }); } create() { return __awaiter(this, void 0, void 0, function* () { const loading = ora_1.default('creating project...').start(); let projectRoot = path_1.default.join(this.projectRoot, this.name); yield this.makeDir(projectRoot); let tempRoot = path_1.default.join(this.templateRoot, 'project'); let files = yield this.readDirs(tempRoot); yield this.copyFilesArr(tempRoot, projectRoot, files); this._copyTypeFiles(tempRoot, projectRoot, this.mode); this._copyTypeFiles(tempRoot, projectRoot, this.css); const bash = child_process_1.default.spawn('bash'); bash.on('error', () => loading.fail(chalk_1.default.red('初始化失败'))); bash.on('close', () => __awaiter(this, void 0, void 0, function* () { loading.text = '初始化成功'; yield this._modifyPackageJson(projectRoot, 'package.json', loading); yield this._modifyProjectConfigJson(projectRoot, 'project.config.json', loading); let pageRoot = path_1.default.join(projectRoot, this.pageRoot); yield this.makeDir(pageRoot); create_page_fs_1.CreatePageFs.create({ root: projectRoot, name: 'index' }).then(() => { loading.succeed(chalk_1.default.green(`项目【${this.name}】创建成功`)); log_1.log.table([ ['项目名称', this.name], ['APPID', this.appid], ['项目描述', this.depict], ['项目路径', this.projectRoot], ['脚本语言', this.mode], ['样式语言', this.css], ['操作提示', `Please switch to the project directory! Run ${chalk_1.default.bgWhite('cd ' + this.name)} to directory! Run ${chalk_1.default.bgWhite('npm install')} to start!`] ], false); }); })); bash.stdin.write(`cd ${this.name}\n`); bash.stdin.write('npm init -y \n'); bash.stdin.end(); }); } _modifyProjectConfigJson(path, file, loading) { return __awaiter(this, void 0, void 0, function* () { let json = JSON.parse(yield this.readFile(path, file)); let modify = { miniprogramRoot: this.miniprogramRoot, projectname: this.name, projectmode: this.mode, projectcss: this.css, appid: this.appid }; yield this.writeFile(path, file, json_format_1.default(Object.assign({}, json, modify))); loading.text = `修改${file}成功`; }); } _modifyPackageJson(path, file, loading) { return __awaiter(this, void 0, void 0, function* () { let json = JSON.parse(yield this.readFile(path, file)); let modify = { scripts: { compile: './node_modules/typescript/bin/tsc', tsc: 'node ./node_modules/typescript/lib/tsc.js' }, description: this.depict ? this.depict : 'project depict...', devDependencies: { typescript: '^3.5.3' }, dependencies: { 'miniprogram-api-typings': '^2.7.7', 'tslint-config-alloy': '^0.2.1', 'tslint-eslint-rules': '^5.4.0' } }; yield this.writeFile(path, file, json_format_1.default(Object.assign({}, json, modify))); loading.text = `修改${file}成功`; }); } } exports.default = CreateProject; exports.CreateProjectFs = new CreateProject(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2plY3QtZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtcHJvamVjdC1mcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQXlCO0FBQ3pCLGtFQUF1RTtBQUN2RSx3REFBeUU7QUFDekUsOERBQW9DO0FBQ3BDLDhDQUE4QjtBQUM5QixnREFBdUI7QUFDdkIsc0NBQWtDO0FBQ2xDLDBDQUF1RDtBQUN2RCxrREFBeUI7QUFDekIscURBQStDO0FBUy9DLE1BQXFCLGFBQWMsU0FBUSxjQUFJO0lBTzdDO1FBQ0UsS0FBSyxFQUFFLENBQUE7UUFQQyxTQUFJLEdBQVcsRUFBRSxDQUFBO1FBQ2pCLFdBQU0sR0FBVyxFQUFFLENBQUE7UUFDbkIsVUFBSyxHQUFXLEVBQUUsQ0FBQTtRQUNsQixTQUFJLEdBQWdDLFlBQVksQ0FBQTtRQUNoRCxRQUFHLEdBQW9CLE1BQU0sQ0FBQTtJQUl2QyxDQUFDO0lBRU0sSUFBSTtRQUNULGtCQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBVSxFQUFpQixFQUFFO1lBQ3pFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO1lB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QUFFLDJDQUEyQztpQkFDakQ7Z0JBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtnQkFDNUQsZUFBZSxFQUFFO29CQUNmLFVBQVUsRUFBRSxRQUFRO2lCQUNyQjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1oseUJBQXlCLEVBQUUsUUFBUTtvQkFDbkMscUJBQXFCLEVBQUUsUUFBUTtvQkFDL0IscUJBQXFCLEVBQUUsUUFBUTtpQkFDaEM7YUFDRixDQUFBO1lBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUscUJBQVUsbUJBQUssSUFBSSxFQUFLLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDbEUsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFBO1FBQzlCLENBQUM7S0FBQTtDQUNGO0FBOUxELGdDQThMQztBQUVZLFFBQUEsZUFBZSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgcHJvY2VzcywgeyBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IGlucXVpcmVyLCB7IEFuc3dlcnMsIElucHV0UXVlc3Rpb24sIExpc3RRdWVzdGlvbiB9IGZyb20gJ2lucXVpcmVyJ1xuaW1wb3J0IGpzb25Gb3JtYXQgZnJvbSAnanNvbi1mb3JtYXQnXG5pbXBvcnQgb3JhLCB7IE9yYSB9IGZyb20gJ29yYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuLi91bGl0cy9sb2cnXG5pbXBvcnQgeyByZWdBcHBJZCwgcmVnQ24sIHJlZ0VuIH0gZnJvbSAnLi4vdWxpdHMvdWxpdHMnXG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgeyBDcmVhdGVQYWdlRnMgfSBmcm9tICcuL2NyZWF0ZS1wYWdlLWZzJ1xuXG5pbnRlcmZhY2UgQ3JlYXRlUHJvamVjdEludGVyZmFjZSB7XG4gIGluaXQoKTogdm9pZFxuXG4gIGNyZWF0ZSgpOiBQcm9taXNlPHZvaWQ+XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlUHJvamVjdCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBDcmVhdGVQcm9qZWN0SW50ZXJmYWNlIHtcbiAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyA9ICcnXG4gIHByb3RlY3RlZCBkZXBpY3Q6IHN0cmluZyA9ICcnXG4gIHByb3RlY3RlZCBhcHBpZDogc3RyaW5nID0gJydcbiAgcHJvdGVjdGVkIG1vZGU6ICdqYXZhc2NyaXB0JyB8ICd0eXBlc2NyaXB0JyA9ICdqYXZhc2NyaXB0J1xuICBwcm90ZWN0ZWQgY3NzOiAnd3hzcycgfCAnbGVzcycgPSAnd3hzcydcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgdGhpcy5fX3Byb2plY3ROYW1lKCksXG4gICAgICB0aGlzLl9fcHJvamVjdERlc2NyaXB0aW9uKCksXG4gICAgICB0aGlzLl9fcHJvamVjdEFwcElkKCksXG4gICAgICB0aGlzLl9fcHJvamVjdE1vZGUoKSxcbiAgICAgIHRoaXMuX19wcm9qZWN0Q3NzKClcbiAgICBdKS50aGVuKGFzeW5jICh7bmFtZSwgZGVwaWN0LCBhcHBpZCwgbW9kZSwgY3NzfTogQW5zd2Vycyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgdGhpcy5uYW1lID0gbmFtZVxuICAgICAgdGhpcy5kZXBpY3QgPSBkZXBpY3RcbiAgICAgIHRoaXMuYXBwaWQgPSBhcHBpZFxuICAgICAgdGhpcy5tb2RlID0gbW9kZVxuICAgICAgdGhpcy5jc3MgPSBjc3NcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlKClcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBfX3Byb2plY3ROYW1lKCk6IElucHV0UXVlc3Rpb248QW5zd2Vycz4ge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBtZXNzYWdlOiAn6K+36L6T5YWl6aG555uu5ZCN56ew77yaJyxcbiAgICAgIGFzeW5jIHZhbGlkYXRlKGlucHV0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHtcbiAgICAgICAgLy8g5qCh6aqM5paH5Lu25ZCN5piv5ZCm56ym5ZCI6KeE6IyDXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPihhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGlmIChyZWdFbi50ZXN0KGlucHV0KSB8fCByZWdDbi50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgLy8g6aqM6K+B6aG555uu5ZCN5piv5ZCm56ym5ZCI6KeE5YiZXG4gICAgICAgICAgICByZXNvbHZlKGNoYWxrLnJlZCgn6aG555uu5ZCN5LiN56ym5ZCI6KeE5YiZ77yM6K+36YeN5paw6L6T5YWl6aG555uu5ZCN77yBJykpXG4gICAgICAgICAgfSBlbHNlIGlmIChhd2FpdCB0aGF0LmNoZWNrRmlsZUlzRXhpc3RzKHBhdGguam9pbih0aGF0LnByb2plY3RSb290LCBpbnB1dCkpKSB7XG4gICAgICAgICAgICAvLyDojrflj5blvZPliY3miZPlvIDnmoTnm67lvZXvvIzpqozor4HlvZPliY3opoHliJvlu7rnmoTpobnnm67mmK/lkKbot5/lvZPliY3nm67lvZXph4znmoTmlofku7blpLnlkb3lkI3lhrLnqoFcbiAgICAgICAgICAgIHJlc29sdmUoY2hhbGsucmVkKCfor6Xpobnnm67lt7LliJvlu7rvvIzor7fph43mlrDovpPlhaXpobnnm67lkI3vvIEnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6ICdhcHAnXG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9fcHJvamVjdERlc2NyaXB0aW9uKCk6IElucHV0UXVlc3Rpb248QW5zd2Vycz4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ2RlcGljdCcsXG4gICAgICBtZXNzYWdlOiAn6K+36L6T5YWl6aG555uu5o+P6L+w77yaJ1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBfX3Byb2plY3RBcHBJZCgpOiBJbnB1dFF1ZXN0aW9uPEFuc3dlcnM+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIG5hbWU6ICdhcHBpZCcsXG4gICAgICBtZXNzYWdlOiAoYW5zd2VycykgPT4gYOivt+i+k+WFpVske2Fuc3dlcnMubmFtZX1d55qEQXBwSWTvvJpgLFxuICAgICAgYXN5bmMgdmFsaWRhdGUoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBpZiAoIXJlZ0FwcElkLnRlc3QoaW5wdXQpKSByZXNvbHZlKGNoYWxrLnJlZCgn6K+36L6T5YWl5q2j56Gu55qEQXBwSWTvvIEnKSlcbiAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9fcHJvamVjdE1vZGUoKTogTGlzdFF1ZXN0aW9uPEFuc3dlcnM+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgbmFtZTogJ21vZGUnLFxuICAgICAgbWVzc2FnZTogJ+mAieaLqemhueebruiEmuacrOivreiogO+8micsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdqYXZhc2NyaXB0JyxcbiAgICAgICAgJ3R5cGVzY3JpcHQnXG4gICAgICBdXG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9fcHJvamVjdENzcygpOiBMaXN0UXVlc3Rpb248QW5zd2Vycz4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnY3NzJyxcbiAgICAgIG1lc3NhZ2U6ICfpgInmi6npobnnm67moLflvI/or63oqIDvvJonLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAnd3hzcycsXG4gICAgICAgICdsZXNzJ1xuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NvcHlUeXBlRmlsZXMoY29weVJvb3QsIHByb2plY3RSb290LCB0eXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm9vdDogc3RyaW5nID0gcGF0aC5qb2luKGNvcHlSb290LCB0eXBlKVxuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IHRoaXMucmVhZERpcnMocm9vdClcbiAgICBhd2FpdCB0aGlzLmNvcHlGaWxlc0Fycihyb290LCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gICAgICAuY2F0Y2goKHtyZXN1bHR9KSA9PiB0aGlzLmZpbGVJc1JlcGVhdChyZXN1bHQpKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkaW5nOiBPcmEgPSBvcmEoJ2NyZWF0aW5nIHByb2plY3QuLi4nKS5zdGFydCgpXG4gICAgLy8g5Yib5bu66aG555uu5paH5Lu25aS5XG4gICAgbGV0IHByb2plY3RSb290OiBzdHJpbmcgPSBwYXRoLmpvaW4odGhpcy5wcm9qZWN0Um9vdCwgdGhpcy5uYW1lKVxuICAgIGF3YWl0IHRoaXMubWFrZURpcihwcm9qZWN0Um9vdClcbiAgICAvLyDojrflj5bmqKHmnb/mlofku7ZcbiAgICBsZXQgdGVtcFJvb3Q6IHN0cmluZyA9IHBhdGguam9pbih0aGlzLnRlbXBsYXRlUm9vdCwgJ3Byb2plY3QnKVxuICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBhd2FpdCB0aGlzLnJlYWREaXJzKHRlbXBSb290KVxuICAgIC8vIOWIm+W7uuWwj+eoi+W6j+m7mOiupOaWh+S7tlxuICAgIGF3YWl0IHRoaXMuY29weUZpbGVzQXJyKHRlbXBSb290LCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gICAgLy8g5Yib5bu66ISa5pys5paH5Lu2XG4gICAgdGhpcy5fY29weVR5cGVGaWxlcyh0ZW1wUm9vdCwgcHJvamVjdFJvb3QsIHRoaXMubW9kZSlcbiAgICAvLyDliJvlu7rmoLflvI/mlofku7ZcbiAgICB0aGlzLl9jb3B5VHlwZUZpbGVzKHRlbXBSb290LCBwcm9qZWN0Um9vdCwgdGhpcy5jc3MpXG4gICAgLy8g5Yid5aeL5YyWbnBt6aG555uuXG4gICAgY29uc3QgYmFzaDogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zID0gcHJvY2Vzcy5zcGF3bignYmFzaCcpXG4gICAgYmFzaC5vbignZXJyb3InLCAoKSA9PiBsb2FkaW5nLmZhaWwoY2hhbGsucmVkKCfliJ3lp4vljJblpLHotKUnKSkpXG4gICAgYmFzaC5vbignY2xvc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsb2FkaW5nLnRleHQgPSAn5Yid5aeL5YyW5oiQ5YqfJ1xuICAgICAgLy8g5L+u5pS5bnBt6YWN572u5paH5Lu2XG4gICAgICBhd2FpdCB0aGlzLl9tb2RpZnlQYWNrYWdlSnNvbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicsIGxvYWRpbmcpXG4gICAgICAvLyDkv67mlLnlsI/nqIvluo/phY3nva7mlofku7ZcbiAgICAgIGF3YWl0IHRoaXMuX21vZGlmeVByb2plY3RDb25maWdKc29uKHByb2plY3RSb290LCAncHJvamVjdC5jb25maWcuanNvbicsIGxvYWRpbmcpXG4gICAgICAvLyDliJvlu7rpu5jorqTpobXpnaJcbiAgICAgIGxldCBwYWdlUm9vdDogc3RyaW5nID0gcGF0aC5qb2luKHByb2plY3RSb290LCB0aGlzLnBhZ2VSb290KVxuICAgICAgYXdhaXQgdGhpcy5tYWtlRGlyKHBhZ2VSb290KVxuICAgICAgQ3JlYXRlUGFnZUZzLmNyZWF0ZSh7XG4gICAgICAgIHJvb3Q6IHByb2plY3RSb290LFxuICAgICAgICBuYW1lOiAnaW5kZXgnXG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgbG9hZGluZy5zdWNjZWVkKGNoYWxrLmdyZWVuKGDpobnnm67jgJAke3RoaXMubmFtZX3jgJHliJvlu7rmiJDlip9gKSlcbiAgICAgICAgbG9nLnRhYmxlKFtcbiAgICAgICAgICBbJ+mhueebruWQjeensCcsIHRoaXMubmFtZV0sXG4gICAgICAgICAgWydBUFBJRCcsIHRoaXMuYXBwaWRdLFxuICAgICAgICAgIFsn6aG555uu5o+P6L+wJywgdGhpcy5kZXBpY3RdLFxuICAgICAgICAgIFsn6aG555uu6Lev5b6EJywgdGhpcy5wcm9qZWN0Um9vdF0sXG4gICAgICAgICAgWyfohJrmnKzor63oqIAnLCB0aGlzLm1vZGVdLFxuICAgICAgICAgIFsn5qC35byP6K+t6KiAJywgdGhpcy5jc3NdLFxuICAgICAgICAgIFsn5pON5L2c5o+Q56S6JywgYFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHByb2plY3QgZGlyZWN0b3J5IVxuUnVuICR7Y2hhbGsuYmdXaGl0ZSgnY2QgJyArIHRoaXMubmFtZSl9IHRvIGRpcmVjdG9yeSFcblJ1biAke2NoYWxrLmJnV2hpdGUoJ25wbSBpbnN0YWxsJyl9IHRvIHN0YXJ0IWBdXG4gICAgICAgIF0sIGZhbHNlKVxuICAgICAgfSlcbiAgICB9KVxuICAgIGJhc2guc3RkaW4ud3JpdGUoYGNkICR7dGhpcy5uYW1lfVxcbmApXG4gICAgYmFzaC5zdGRpbi53cml0ZSgnbnBtIGluaXQgLXkgXFxuJylcbiAgICBiYXNoLnN0ZGluLmVuZCgpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9tb2RpZnlQcm9qZWN0Q29uZmlnSnNvbihwYXRoOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgbG9hZGluZzogT3JhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g6K+75Y+W6YWN572u5paH5Lu2XG4gICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHRoaXMucmVhZEZpbGUocGF0aCwgZmlsZSkpXG4gICAgbGV0IG1vZGlmeSA9IHtcbiAgICAgIG1pbmlwcm9ncmFtUm9vdDogdGhpcy5taW5pcHJvZ3JhbVJvb3QsXG4gICAgICBwcm9qZWN0bmFtZTogdGhpcy5uYW1lLFxuICAgICAgcHJvamVjdG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHByb2plY3Rjc3M6IHRoaXMuY3NzLFxuICAgICAgYXBwaWQ6IHRoaXMuYXBwaWRcbiAgICB9XG4gICAgYXdhaXQgdGhpcy53cml0ZUZpbGUocGF0aCwgZmlsZSwganNvbkZvcm1hdCh7Li4uanNvbiwgLi4ubW9kaWZ5fSkpXG4gICAgbG9hZGluZy50ZXh0ID0gYOS/ruaUuSR7ZmlsZX3miJDlip9gXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9tb2RpZnlQYWNrYWdlSnNvbihwYXRoOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgbG9hZGluZzogT3JhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g6K+75Y+W5paH5Lu2XG4gICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHRoaXMucmVhZEZpbGUocGF0aCwgZmlsZSkpXG4gICAgbGV0IG1vZGlmeSA9IHtcbiAgICAgIHNjcmlwdHM6IHtcbiAgICAgICAgY29tcGlsZTogJy4vbm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQvYmluL3RzYycsXG4gICAgICAgIHRzYzogJ25vZGUgLi9ub2RlX21vZHVsZXMvdHlwZXNjcmlwdC9saWIvdHNjLmpzJ1xuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlcGljdCA/IHRoaXMuZGVwaWN0IDogJ3Byb2plY3QgZGVwaWN0Li4uJyxcbiAgICAgIGRldkRlcGVuZGVuY2llczoge1xuICAgICAgICB0eXBlc2NyaXB0OiAnXjMuNS4zJ1xuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAnbWluaXByb2dyYW0tYXBpLXR5cGluZ3MnOiAnXjIuNy43JyxcbiAgICAgICAgJ3RzbGludC1jb25maWctYWxsb3knOiAnXjAuMi4xJyxcbiAgICAgICAgJ3RzbGludC1lc2xpbnQtcnVsZXMnOiAnXjUuNC4wJ1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLndyaXRlRmlsZShwYXRoLCBmaWxlLCBqc29uRm9ybWF0KHsuLi5qc29uLCAuLi5tb2RpZnl9KSlcbiAgICBsb2FkaW5nLnRleHQgPSBg5L+u5pS5JHtmaWxlfeaIkOWKn2BcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUHJvamVjdEZzID0gbmV3IENyZWF0ZVByb2plY3QoKVxuIl19