lizi-wxapp-cli
Version:
微信小程序快速创建cli脚手架
174 lines • 20.8 kB
JavaScript
;
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 path_1 = __importDefault(require("path"));
const package_json_1 = require("../package.json");
const log_1 = require("../ulits/log");
const ulits_1 = require("../ulits/ulits");
const base_1 = __importDefault(require("./base"));
class Cli extends base_1.default {
constructor() {
super();
this.version = '1.0.0';
this.cliRoot = package_json_1.config.cliRoot;
}
openTool() {
this._cli('-o');
}
openThis(root = this.projectRoot) {
if (this.checkFileIsExists(path_1.default.join(root, 'project.config.json'))) {
this._cli(`-o ${root}`);
}
else {
log_1.log.error('当前目录不是小程序项目,默认打开开发工具', false);
this.openTool();
}
}
upload(root) {
const projectRoot = this.__checkRoot(root);
if (this.checkFileIsExists(path_1.default.join(projectRoot, 'project.config.json'))) {
this.readFile(projectRoot, 'project.config.json').then(file => {
let projectInfo = JSON.parse(file);
let { version } = projectInfo;
this.version = version;
inquirer_1.default.prompt([
this._selectType(),
this._remark(),
this._version()
]).then((answers) => {
let { remark, version } = answers;
this._cli(`-u ${version}@${projectRoot} --upload-desc ${remark}`).then(() => __awaiter(this, void 0, void 0, function* () {
projectInfo.version = version;
this.version = version;
yield this.writeFile(projectRoot, 'project.config.json', json_format_1.default(projectInfo));
}));
}).catch((error) => {
console.log(error);
});
});
}
else {
log_1.log.error('当前目录不是小程序项目,请重新选择目录路径');
}
}
login() {
this._cli('-l');
}
preview(root) {
this._cli(`-p ${this.__checkRoot(root)}`);
}
auto(root) {
this._cli(`--auto-preview ${this.__checkRoot(root)}`);
}
_selectType() {
const types = ['版本升级', '特性更新', '修订补丁'];
return {
type: 'list',
name: 'selectType',
message: `当前版本号【${chalk_1.default.blue(this.version)}】请选择要更新的类型`,
choices: types,
default: types[0],
filter(input) {
return types.findIndex(v => v === input);
}
};
}
_remark() {
return {
type: 'input',
name: 'remark',
message: '请输入项目备注:',
default: `提交时间:${new Date().toLocaleString()}`
};
}
_version() {
return {
type: 'input',
name: 'version',
message: answers => `推荐版本号【${chalk_1.default.blue(this.__setVersion(answers.selectType))}】`,
default: answers => this.__setVersion(answers.selectType),
validate: (input) => {
return new Promise(resolve => {
const state = ulits_1.regVersion.test(input) ?
true :
chalk_1.default.red('请输入正确的版本号,如:1.0.0');
resolve(state);
});
}
};
}
__setVersion(index) {
let v = this.version.split('.');
v[index]++;
return v.join('.');
}
close(root) {
this._cli(`--close ${this.__checkRoot(root)}`);
}
quit() {
this._cli('--quit');
}
config(cmd, params) {
switch (cmd) {
case 'tool':
this._modifyConfig(params);
break;
default:
log_1.log.table([
['tool <path>', '设置微信开发工具路径']
], true);
break;
}
}
_modifyConfig(root) {
if (this.checkFileIsExists(root)) {
this.readFile(this.root, 'package.json').then(file => {
let json = JSON.parse(file);
json.config.cliRoot = root;
this.writeFile(this.root, 'package.json', json_format_1.default(json)).then(() => {
log_1.log.success('修改cliRoot成功', false);
});
});
}
else {
log_1.log.error('请输入正确的路径', false);
}
}
_cli(cmd) {
return new Promise((resolve, reject) => {
const cli = child_process_1.default.spawn('bash', {
shell: process.platform === 'win32'
});
cli.stdout.on('data', (res) => {
console.log(res.toString());
resolve();
});
cli.stdout.on('error', (err) => {
console.log(err);
reject(err);
});
cli.stdin.write(`${this.cliRoot} ${cmd}`);
cli.stdin.end();
});
}
__checkRoot(root) {
return typeof root === 'object' ? this.projectRoot : root;
}
}
exports.default = Cli;
exports.CliFs = new Cli();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBeUI7QUFDekIsa0VBQW9DO0FBQ3BDLHdEQUF5RTtBQUN6RSw4REFBb0M7QUFDcEMsZ0RBQXVCO0FBQ3ZCLGtEQUF3QztBQUN4QyxzQ0FBa0M7QUFDbEMsMENBQTJDO0FBQzNDLGtEQUF5QjtBQXdCekIsTUFBcUIsR0FBSSxTQUFRLGNBQUk7SUFJbkM7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUhELFlBQU8sR0FBVyxPQUFPLENBQUE7UUFJL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBTSxDQUFDLE9BQU8sQ0FBQTtJQUMvQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVc7UUFDckMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3hCO2FBQU07WUFDTCxTQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtTQUNoQjtJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsSUFBcUI7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEVBQUU7WUFFekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUs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R0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO2dCQUMzQixPQUFPLEVBQUUsQ0FBQTtZQUNYLENBQUMsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNiLENBQUMsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDekMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBcUI7UUFDdkMsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUMzRCxDQUFDO0NBRUY7QUF4S0Qsc0JBd0tDO0FBRVksUUFBQSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCBfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IGlucXVpcmVyLCB7IEFuc3dlcnMsIElucHV0UXVlc3Rpb24sIExpc3RRdWVzdGlvbiB9IGZyb20gJ2lucXVpcmVyJ1xuaW1wb3J0IGpzb25Gb3JtYXQgZnJvbSAnanNvbi1mb3JtYXQnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJ1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi4vdWxpdHMvbG9nJ1xuaW1wb3J0IHsgcmVnVmVyc2lvbiB9IGZyb20gJy4uL3VsaXRzL3VsaXRzJ1xuaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlJ1xuXG5cbmludGVyZmFjZSBDbGlJbnRlcmZhY2Uge1xuICBvcGVuVG9vbCgpOiB2b2lkXG5cbiAgb3BlblRoaXMocm9vdDogc3RyaW5nKTogdm9pZFxuXG4gIHVwbG9hZChyb290OiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkXG5cbiAgbG9naW4oKTogdm9pZFxuXG4gIHByZXZpZXcocm9vdDogc3RyaW5nIHwgb2JqZWN0KTogdm9pZFxuXG4gIGF1dG8ocm9vdDogc3RyaW5nIHwgb2JqZWN0KTogdm9pZFxuXG4gIGNsb3NlKHJvb3Q6IHN0cmluZyB8IG9iamVjdCk6IHZvaWRcblxuICBxdWl0KCk6IHZvaWRcblxuICBjb25maWcoY21kOiBzdHJpbmcsIHBhcmFtczogc3RyaW5nKTogdm9pZFxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBDbGlJbnRlcmZhY2Uge1xuICBwcm90ZWN0ZWQgY2xpUm9vdDogc3RyaW5nXG4gIHByaXZhdGUgdmVyc2lvbjogc3RyaW5nID0gJzEuMC4wJ1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNsaVJvb3QgPSBjb25maWcuY2xpUm9vdFxuICB9XG5cbiAgcHVibGljIG9wZW5Ub29sKCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaSgnLW8nKVxuICB9XG5cbiAgcHVibGljIG9wZW5UaGlzKHJvb3QgPSB0aGlzLnByb2plY3RSb290KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tGaWxlSXNFeGlzdHMocGF0aC5qb2luKHJvb3QsICdwcm9qZWN0LmNvbmZpZy5qc29uJykpKSB7XG4gICAgICB0aGlzLl9jbGkoYC1vICR7cm9vdH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ+W9k+WJjeebruW9leS4jeaYr+Wwj+eoi+W6j+mhueebru+8jOm7mOiupOaJk+W8gOW8gOWPkeW3peWFtycsIGZhbHNlKVxuICAgICAgdGhpcy5vcGVuVG9vbCgpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwbG9hZChyb290OiBvYmplY3QgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHRoaXMuX19jaGVja1Jvb3Qocm9vdClcbiAgICBpZiAodGhpcy5jaGVja0ZpbGVJc0V4aXN0cyhwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdwcm9qZWN0LmNvbmZpZy5qc29uJykpKSB7XG4gICAgICAvLyDojrflj5bpu5jorqTnmoTniYjmnKzlj7dcbiAgICAgIHRoaXMucmVhZEZpbGUocHJvamVjdFJvb3QsICdwcm9qZWN0LmNvbmZpZy5qc29uJykudGhlbihmaWxlID0+IHtcbiAgICAgICAgbGV0IHByb2plY3RJbmZvOiBhbnkgPSBKU09OLnBhcnNlKGZpbGUpXG4gICAgICAgIGxldCB7dmVyc2lvbn0gPSBwcm9qZWN0SW5mb1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uXG4gICAgICAgIGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAgdGhpcy5fc2VsZWN0VHlwZSgpLFxuICAgICAgICAgIHRoaXMuX3JlbWFyaygpLFxuICAgICAgICAgIHRoaXMuX3ZlcnNpb24oKVxuICAgICAgICBdKS50aGVuKChhbnN3ZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQge3JlbWFyaywgdmVyc2lvbn0gPSBhbnN3ZXJzXG4gICAgICAgICAgdGhpcy5fY2xpKGAtdSAke3ZlcnNpb259QCR7cHJvamVjdFJvb3R9IC0tdXBsb2FkLWRlc2MgJHtyZW1hcmt9YCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBwcm9qZWN0SW5mby52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUocHJvamVjdFJvb3QsICdwcm9qZWN0LmNvbmZpZy5qc29uJywganNvbkZvcm1hdChwcm9qZWN0SW5mbykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ+W9k+WJjeebruW9leS4jeaYr+Wwj+eoi+W6j+mhueebru+8jOivt+mHjeaWsOmAieaLqeebruW9lei3r+W+hCcpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaSgnLWwnKVxuICB9XG5cbiAgcHVibGljIHByZXZpZXcocm9vdDogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5fY2xpKGAtcCAke3RoaXMuX19jaGVja1Jvb3Qocm9vdCl9YClcbiAgfVxuXG4gIHB1YmxpYyBhdXRvKHJvb3Q6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaShgLS1hdXRvLXByZXZpZXcgJHt0aGlzLl9fY2hlY2tSb290KHJvb3QpfWApXG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RUeXBlKCk6IExpc3RRdWVzdGlvbjxBbnN3ZXJzPiB7XG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gWyfniYjmnKzljYfnuqcnLCAn54m55oCn5pu05pawJywgJ+S/ruiuouihpeS4gSddXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIG5hbWU6ICdzZWxlY3RUeXBlJyxcbiAgICAgIG1lc3NhZ2U6IGDlvZPliY3niYjmnKzlj7fjgJAke2NoYWxrLmJsdWUodGhpcy52ZXJzaW9uKX3jgJHor7fpgInmi6nopoHmm7TmlrDnmoTnsbvlnotgLFxuICAgICAgY2hvaWNlczogdHlwZXMsXG4gICAgICBkZWZhdWx0OiB0eXBlc1swXSxcbiAgICAgIGZpbHRlcihpbnB1dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzLmZpbmRJbmRleCh2ID0+IHYgPT09IGlucHV0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlbWFyaygpOiBJbnB1dFF1ZXN0aW9uPEFuc3dlcnM+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIG5hbWU6ICdyZW1hcmsnLFxuICAgICAgbWVzc2FnZTogJ+ivt+i+k+WFpemhueebruWkh+azqO+8micsXG4gICAgICBkZWZhdWx0OiBg5o+Q5Lqk5pe26Ze077yaJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9YFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ZlcnNpb24oKTogSW5wdXRRdWVzdGlvbjxBbnN3ZXJzPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAndmVyc2lvbicsXG4gICAgICBtZXNzYWdlOiBhbnN3ZXJzID0+IGDmjqjojZDniYjmnKzlj7fjgJAke2NoYWxrLmJsdWUodGhpcy5fX3NldFZlcnNpb24oYW5zd2Vycy5zZWxlY3RUeXBlKSl944CRYCxcbiAgICAgIGRlZmF1bHQ6IGFuc3dlcnMgPT4gdGhpcy5fX3NldFZlcnNpb24oYW5zd2Vycy5zZWxlY3RUeXBlKSxcbiAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IGFueSk6IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4gPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGU6IHN0cmluZyB8IGJvb2xlYW4gPSByZWdWZXJzaW9uLnRlc3QoaW5wdXQpID9cbiAgICAgICAgICAgIHRydWUgOlxuICAgICAgICAgICAgY2hhbGsucmVkKCfor7fovpPlhaXmraPnoa7nmoTniYjmnKzlj7fvvIzlpoLvvJoxLjAuMCcpXG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9fc2V0VmVyc2lvbihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgdjogYW55ID0gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJylcbiAgICB2W2luZGV4XSsrXG4gICAgcmV0dXJuIHYuam9pbignLicpXG4gIH1cblxuXG5cbiAgcHVibGljIGNsb3NlKHJvb3Q6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaShgLS1jbG9zZSAke3RoaXMuX19jaGVja1Jvb3Qocm9vdCl9YClcbiAgfVxuXG5cbiAgcHVibGljIHF1aXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xpKCctLXF1aXQnKVxuICB9XG5cbiAgcHVibGljIGNvbmZpZyhjbWQ6IHN0cmluZywgcGFyYW1zOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAndG9vbCc6XG4gICAgICAgIHRoaXMuX21vZGlmeUNvbmZpZyhwYXJhbXMpXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2cudGFibGUoW1xuICAgICAgICAgIFsndG9vbCA8cGF0aD4nLCAn6K6+572u5b6u5L+h5byA5Y+R5bel5YW36Lev5b6EJ11cbiAgICAgICAgXSwgdHJ1ZSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tb2RpZnlDb25maWcocm9vdDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tGaWxlSXNFeGlzdHMocm9vdCkpIHtcbiAgICAgIHRoaXMucmVhZEZpbGUodGhpcy5yb290LCAncGFja2FnZS5qc29uJykudGhlbihmaWxlID0+IHtcbiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGZpbGUpXG4gICAgICAgIGpzb24uY29uZmlnLmNsaVJvb3QgPSByb290XG4gICAgICAgIHRoaXMud3JpdGVGaWxlKHRoaXMucm9vdCwgJ3BhY2thZ2UuanNvbicsIGpzb25Gb3JtYXQoanNvbikpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGxvZy5zdWNjZXNzKCfkv67mlLljbGlSb2905oiQ5YqfJywgZmFsc2UpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ+ivt+i+k+WFpeato+ehrueahOi3r+W+hCcsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsaShjbWQ6IHN0cmluZ1tdIHwgc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2xpID0gX3Byb2Nlc3Muc3Bhd24oJ2Jhc2gnLCB7XG4gICAgICAgIHNoZWxsOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG4gICAgICB9KVxuICAgICAgY2xpLnN0ZG91dC5vbignZGF0YScsIChyZXMpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzLnRvU3RyaW5nKCkpIC8vIC5yZXBsYWNlKC9bXFxyXFxuXS9nLCAnJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgICAgY2xpLnN0ZG91dC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICAgICAgcmVqZWN0KGVycilcbiAgICAgIH0pXG4gICAgICBjbGkuc3RkaW4ud3JpdGUoYCR7dGhpcy5jbGlSb290fSAke2NtZH1gKVxuICAgICAgY2xpLnN0ZGluLmVuZCgpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX19jaGVja1Jvb3Qocm9vdDogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHJvb3QgPT09ICdvYmplY3QnID8gdGhpcy5wcm9qZWN0Um9vdCA6IHJvb3RcbiAgfVxuXG59XG5cbmV4cG9ydCBjb25zdCBDbGlGcyA9IG5ldyBDbGkoKVxuIl19