lizi-wxapp-cli
Version:
微信小程序快速创建cli脚手架
187 lines • 23.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 fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const trash_1 = __importDefault(require("trash"));
const config_1 = __importDefault(require("../config"));
const log_1 = require("../ulits/log");
class Base {
constructor() {
this.typeName = '页面';
this.typeRoot = '';
this.mainRoots = [];
this.subRoots = [];
this.subChild = {};
this.subList = [];
this.projectMode = 'javascript';
this.projectCss = 'wxss';
this.root = config_1.default.root;
this.projectRoot = config_1.default.projectRoot;
this.templateRoot = config_1.default.templateRoot;
this.miniprogramRoot = config_1.default.miniprogramRoot;
this.pageRoot = config_1.default.pageRoot;
this.componentRoot = config_1.default.componentRoot;
this.subpackageRoot = config_1.default.subpackageRoot;
}
getProjectConfig() {
return new Promise(resolve => {
this.readFile(this.projectRoot, 'project.config.json').then(file => {
let projectConfigJson = JSON.parse(file);
let { projectmode, projectcss } = projectConfigJson;
this.projectMode = projectmode;
this.projectCss = projectcss;
this.projectConfigJson = projectConfigJson;
resolve(true);
}).catch(_error => {
log_1.log.error('打开project.config.json失败,请确认当前目录是否正确!', false);
});
});
}
getAppJson() {
return new Promise(resolve => {
this.readFile(this.projectRoot, 'app.json').then(file => {
const { components, subpackages, pages } = JSON.parse(file);
const type = this.typeRoot === 'pages' ? pages : components;
this.AppJson = JSON.parse(file);
this.mainRoots = type.map(v => {
this.subList.push({ path: v, subpackage: false });
return v.split('/')[1];
});
subpackages.map(({ root, components, pages }, k) => {
const type = this.typeRoot === 'pages' ? pages : components;
let children = type.map(s => {
this.subList.push({ path: path_1.default.join(root, s), subpackage: true, index: k });
return s.split('/')[1];
});
this.subRoots.push(root);
this.subChild[root] = children;
});
resolve(true);
}).catch(_error => {
log_1.log.error('打开app.json失败,请确认当前目录是否正确!', false);
});
});
}
fileIsRepeat(msg) {
log_1.log.warning(`文件【${msg}】已存在,默认覆盖`, false);
}
checkFileIsExists(root) {
return fs_1.default.existsSync(root);
}
readDirs(root) {
return new Promise((resolve, reject) => {
try {
let files = fs_1.default.readdirSync(root);
let fileList = files.filter((v) => {
return fs_1.default.statSync(path_1.default.resolve(root, v)).isFile() && v !== '.DS_Store';
});
resolve(fileList);
}
catch (e) {
reject(e);
}
});
}
readFile(root, file) {
return new Promise((resolve, reject) => {
try {
let content = fs_1.default.readFileSync(path_1.default.join(root, file));
resolve(content.toString());
}
catch (e) {
reject(e);
}
});
}
writeFile(root, file, content) {
return new Promise((resolve, reject) => {
try {
fs_1.default.writeFileSync(path_1.default.join(root, file), content);
resolve();
}
catch (e) {
reject(e);
}
});
}
makeDir(src) {
return new Promise((resolve, reject) => {
try {
fs_1.default.mkdirSync(src, { recursive: true });
resolve();
}
catch (e) {
reject(e);
}
});
}
copyFile(originpath, curpath, file) {
return new Promise((resolve, reject) => {
try {
fs_1.default.copyFileSync(path_1.default.join(originpath, file), path_1.default.join(curpath, file), fs_1.default.constants.COPYFILE_EXCL);
resolve(file);
}
catch (e) {
reject(e);
}
});
}
copyFilesArr(originpath, curpath, files) {
return new Promise((resolve, reject) => {
files.map(v => {
this.copyFile(originpath, curpath, v)
.then(v => {
resolve(v);
})
.catch(error => reject({ error, result: v }));
});
});
}
rmFile(root, file) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const rmRoot = path_1.default.join(root, file);
if (this.checkFileIsExists(rmRoot)) {
try {
yield fs_1.default.unlinkSync(rmRoot);
resolve();
}
catch (e) {
reject(e);
}
}
reject();
}));
}
rmDir(root) {
return __awaiter(this, void 0, void 0, function* () {
yield fs_1.default.readdirSync(root).map(v => {
let curPath = path_1.default.join(root, v);
if (fs_1.default.statSync(curPath).isDirectory()) {
this.rmDir(curPath);
}
else {
this.rmFile(root, v);
}
});
fs_1.default.rmdirSync(root);
});
}
trash(root) {
return __awaiter(this, void 0, void 0, function* () {
yield trash_1.default(root);
});
}
}
exports.default = Base;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUFtQjtBQUNuQixnREFBdUI7QUFDdkIsa0RBQXlCO0FBQ3pCLHVEQUE4QjtBQUM5QixzQ0FBa0M7QUFzQ2xDLE1BQThCLElBQUk7SUFvQmhDO1FBWFUsYUFBUSxHQUFXLElBQUksQ0FBQTtRQUN2QixhQUFRLEdBQVcsRUFBRSxDQUFBO1FBQ3JCLGNBQVMsR0FBYSxFQUFFLENBQUE7UUFDeEIsYUFBUSxHQUFhLEVBQUUsQ0FBQTtRQUN2QixhQUFRLEdBQVcsRUFBRSxDQUFBO1FBQ3JCLFlBQU8sR0FBdUIsRUFBRSxDQUFBO1FBQ2hDLGdCQUFXLEdBQWdDLFlBQVksQ0FBQTtRQUN2RCxlQUFVLEdBQW9CLE1BQU0sQ0FBQTtRQUs1QyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFNLENBQUMsSUFBSSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUE7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBTSxDQUFDLFlBQVksQ0FBQTtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLGdCQUFNLENBQUMsZUFBZSxDQUFBO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUE7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBTSxDQUFDLGFBQWEsQ0FBQTtRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFNLENBQUMsY0FBYyxDQUFBO0lBQzdDLENBQUM7SUFHTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksaUJB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Q0FBQyxDQUFBLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFWSxLQUFLLENBQUMsSUFBWTs7WUFDN0IsTUFBTSxZQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakMsSUFBSSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ2hDLElBQUksWUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtpQkFDcEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDRixZQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BCLENBQUM7S0FBQTtJQUVZLEtBQUssQ0FBQyxJQUFJOztZQUNyQixNQUFNLGVBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQixDQUFDO0tBQUE7Q0FHRjtBQXZMRCx1QkF1TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHRyYXNoIGZyb20gJ3RyYXNoJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuLi91bGl0cy9sb2cnXG5cbmludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHtcblxuICBnZXRQcm9qZWN0Q29uZmlnKCk6IFByb21pc2U8Ym9vbGVhbj5cblxuICBmaWxlSXNSZXBlYXQobXNnOiBzdHJpbmcpOiB2b2lkXG5cbiAgZ2V0QXBwSnNvbigpOiBQcm9taXNlPGJvb2xlYW4+XG5cbiAgY2hlY2tGaWxlSXNFeGlzdHMocm9vdDogc3RyaW5nKTogYm9vbGVhblxuXG4gIHJlYWREaXJzKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+XG5cbiAgcmVhZEZpbGUocm9vdDogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz5cblxuICB3cml0ZUZpbGU8VD4ocm9vdDogc3RyaW5nLCBmaWxlOiBzdHJpbmcsIGNvbnRlbnQ6IGFueSk6IFByb21pc2U8VD5cblxuICBtYWtlRGlyPFQ+KHNyYzogc3RyaW5nKTogUHJvbWlzZTxUPlxuXG4gIGNvcHlGaWxlKG9yaWdpbnBhdGg6IHN0cmluZywgY3VycGF0aDogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz5cblxuICBjb3B5RmlsZXNBcnIob3JpZ2lucGF0aDogc3RyaW5nLCBjdXJwYXRoOiBzdHJpbmcsIGZpbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PlxuXG4gIHJtRmlsZShyb290OiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cblxuICBybURpcihyb290OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgdHJhc2gocm9vdDogc3RyaW5nW10gfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbn1cblxuaW50ZXJmYWNlIFN1Ykxpc3RUeXBlIHtcbiAgcGF0aDogc3RyaW5nXG4gIHN1YnBhY2thZ2U6IGJvb2xlYW5cbiAgaW5kZXg/OiBudW1iZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgQmFzZSBpbXBsZW1lbnRzIEJhc2VJbnRlcmZhY2Uge1xuICBwcm90ZWN0ZWQgcm9vdDogc3RyaW5nXG4gIHByb3RlY3RlZCBwcm9qZWN0Um9vdDogc3RyaW5nXG4gIHByb3RlY3RlZCB0ZW1wbGF0ZVJvb3Q6IHN0cmluZ1xuICBwcm90ZWN0ZWQgbWluaXByb2dyYW1Sb290OiBzdHJpbmdcbiAgcHJvdGVjdGVkIHBhZ2VSb290OiBzdHJpbmdcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFJvb3Q6IHN0cmluZ1xuICBwcm90ZWN0ZWQgc3VicGFja2FnZVJvb3Q6IHN0cmluZ1xuXG4gIHByb3RlY3RlZCB0eXBlTmFtZTogc3RyaW5nID0gJ+mhtemdoidcbiAgcHJvdGVjdGVkIHR5cGVSb290OiBzdHJpbmcgPSAnJ1xuICBwcm90ZWN0ZWQgbWFpblJvb3RzOiBzdHJpbmdbXSA9IFtdXG4gIHByb3RlY3RlZCBzdWJSb290czogc3RyaW5nW10gPSBbXVxuICBwcm90ZWN0ZWQgc3ViQ2hpbGQ6IG9iamVjdCA9IHt9XG4gIHByb3RlY3RlZCBzdWJMaXN0OiBBcnJheTxTdWJMaXN0VHlwZT4gPSBbXVxuICBwcm90ZWN0ZWQgcHJvamVjdE1vZGU6ICdqYXZhc2NyaXB0JyB8ICd0eXBlc2NyaXB0JyA9ICdqYXZhc2NyaXB0J1xuICBwcm90ZWN0ZWQgcHJvamVjdENzczogJ3d4c3MnIHwgJ2xlc3MnID0gJ3d4c3MnXG4gIHByb3RlY3RlZCBwcm9qZWN0Q29uZmlnSnNvbjogYW55XG4gIHByb3RlY3RlZCBBcHBKc29uOiBhbnlcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yb290ID0gY29uZmlnLnJvb3RcbiAgICB0aGlzLnByb2plY3RSb290ID0gY29uZmlnLnByb2plY3RSb290XG4gICAgdGhpcy50ZW1wbGF0ZVJvb3QgPSBjb25maWcudGVtcGxhdGVSb290XG4gICAgdGhpcy5taW5pcHJvZ3JhbVJvb3QgPSBjb25maWcubWluaXByb2dyYW1Sb290XG4gICAgdGhpcy5wYWdlUm9vdCA9IGNvbmZpZy5wYWdlUm9vdFxuICAgIHRoaXMuY29tcG9uZW50Um9vdCA9IGNvbmZpZy5jb21wb25lbnRSb290XG4gICAgdGhpcy5zdWJwYWNrYWdlUm9vdCA9IGNvbmZpZy5zdWJwYWNrYWdlUm9vdFxuICB9XG5cbiAgLy8g6I635Y+W6aG555uu6YWN572u5paH5Lu2XG4gIHB1YmxpYyBnZXRQcm9qZWN0Q29uZmlnKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMucmVhZEZpbGUodGhpcy5wcm9qZWN0Um9vdCwgJ3Byb2plY3QuY29uZmlnLmpzb24nKS50aGVuKGZpbGUgPT4ge1xuICAgICAgICBsZXQgcHJvamVjdENvbmZpZ0pzb246IGFueSA9IEpTT04ucGFyc2UoZmlsZSlcbiAgICAgICAgbGV0IHtwcm9qZWN0bW9kZSwgcHJvamVjdGNzc30gPSBwcm9qZWN0Q29uZmlnSnNvblxuICAgICAgICB0aGlzLnByb2plY3RNb2RlID0gcHJvamVjdG1vZGVcbiAgICAgICAgdGhpcy5wcm9qZWN0Q3NzID0gcHJvamVjdGNzc1xuICAgICAgICB0aGlzLnByb2plY3RDb25maWdKc29uID0gcHJvamVjdENvbmZpZ0pzb25cbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfSkuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgbG9nLmVycm9yKCfmiZPlvIBwcm9qZWN0LmNvbmZpZy5qc29u5aSx6LSl77yM6K+356Gu6K6k5b2T5YmN55uu5b2V5piv5ZCm5q2j56Gu77yBJywgZmFsc2UpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvLyDojrflj5ZBcHAuanNvblxuICBwdWJsaWMgZ2V0QXBwSnNvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLnJlYWRGaWxlKHRoaXMucHJvamVjdFJvb3QsICdhcHAuanNvbicpLnRoZW4oZmlsZSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb21wb25lbnRzLCBzdWJwYWNrYWdlcywgcGFnZXN9ID0gSlNPTi5wYXJzZShmaWxlKVxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlUm9vdCA9PT0gJ3BhZ2VzJyA/IHBhZ2VzIDogY29tcG9uZW50c1xuICAgICAgICB0aGlzLkFwcEpzb24gPSBKU09OLnBhcnNlKGZpbGUpXG4gICAgICAgIHRoaXMubWFpblJvb3RzID0gdHlwZS5tYXAodiA9PiB7XG4gICAgICAgICAgdGhpcy5zdWJMaXN0LnB1c2goe3BhdGg6IHYsIHN1YnBhY2thZ2U6IGZhbHNlfSlcbiAgICAgICAgICByZXR1cm4gdi5zcGxpdCgnLycpWzFdXG4gICAgICAgIH0pXG4gICAgICAgIHN1YnBhY2thZ2VzLm1hcCgoe3Jvb3QsIGNvbXBvbmVudHMsIHBhZ2VzfSwgaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGVSb290ID09PSAncGFnZXMnID8gcGFnZXMgOiBjb21wb25lbnRzXG4gICAgICAgICAgbGV0IGNoaWxkcmVuID0gdHlwZS5tYXAocyA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ykxpc3QucHVzaCh7cGF0aDogcGF0aC5qb2luKHJvb3QsIHMpLCBzdWJwYWNrYWdlOiB0cnVlLCBpbmRleDoga30pXG4gICAgICAgICAgICByZXR1cm4gcy5zcGxpdCgnLycpWzFdXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnN1YlJvb3RzLnB1c2gocm9vdClcbiAgICAgICAgICB0aGlzLnN1YkNoaWxkW3Jvb3RdID0gY2hpbGRyZW5cbiAgICAgICAgfSlcbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfSkuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgbG9nLmVycm9yKCfmiZPlvIBhcHAuanNvbuWksei0pe+8jOivt+ehruiupOW9k+WJjeebruW9leaYr+WQpuato+ehru+8gScsIGZhbHNlKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGZpbGVJc1JlcGVhdChtc2c6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZy53YXJuaW5nKGDmlofku7bjgJAke21zZ33jgJHlt7LlrZjlnKjvvIzpu5jorqTopobnm5ZgLCBmYWxzZSlcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0ZpbGVJc0V4aXN0cyhyb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhyb290KVxuICB9XG5cbiAgcHVibGljIHJlYWREaXJzKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGZpbGVzID0gZnMucmVhZGRpclN5bmMocm9vdClcbiAgICAgICAgbGV0IGZpbGVMaXN0ID0gZmlsZXMuZmlsdGVyKCh2KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShyb290LCB2KSkuaXNGaWxlKCkgJiYgdiAhPT0gJy5EU19TdG9yZSdcbiAgICAgICAgfSlcbiAgICAgICAgcmVzb2x2ZShmaWxlTGlzdClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkRmlsZShyb290OiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHJvb3QsIGZpbGUpKVxuICAgICAgICByZXNvbHZlKGNvbnRlbnQudG9TdHJpbmcoKSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHdyaXRlRmlsZTxUPihyb290OiBzdHJpbmcsIGZpbGU6IHN0cmluZywgY29udGVudDogYW55KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHJvb3QsIGZpbGUpLCBjb250ZW50KVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBtYWtlRGlyPFQ+KHNyYzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhzcmMsIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBjb3B5RmlsZShvcmlnaW5wYXRoOiBzdHJpbmcsIGN1cnBhdGg6IHN0cmluZywgZmlsZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuY29weUZpbGVTeW5jKHBhdGguam9pbihvcmlnaW5wYXRoLCBmaWxlKSwgcGF0aC5qb2luKGN1cnBhdGgsIGZpbGUpLCBmcy5jb25zdGFudHMuQ09QWUZJTEVfRVhDTClcbiAgICAgICAgcmVzb2x2ZShmaWxlKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGNvcHlGaWxlc0FycihvcmlnaW5wYXRoOiBzdHJpbmcsIGN1cnBhdGg6IHN0cmluZywgZmlsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmaWxlcy5tYXAodiA9PiB7XG4gICAgICAgIHRoaXMuY29weUZpbGUob3JpZ2lucGF0aCwgY3VycGF0aCwgdilcbiAgICAgICAgICAudGhlbih2ID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodilcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiByZWplY3Qoe2Vycm9yLCByZXN1bHQ6IHZ9KSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBybUZpbGUocm9vdDogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgcm1Sb290OiBzdHJpbmcgPSBwYXRoLmpvaW4ocm9vdCwgZmlsZSlcbiAgICAgIGlmICh0aGlzLmNoZWNrRmlsZUlzRXhpc3RzKHJtUm9vdCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy51bmxpbmtTeW5jKHJtUm9vdClcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWplY3QoKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcm1EaXIocm9vdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZnMucmVhZGRpclN5bmMocm9vdCkubWFwKHYgPT4ge1xuICAgICAgbGV0IGN1clBhdGggPSBwYXRoLmpvaW4ocm9vdCwgdilcbiAgICAgIGlmIChmcy5zdGF0U3luYyhjdXJQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRoaXMucm1EaXIoY3VyUGF0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm1GaWxlKHJvb3QsIHYpXG4gICAgICB9XG4gICAgfSlcbiAgICBmcy5ybWRpclN5bmMocm9vdClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0cmFzaChyb290KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdHJhc2gocm9vdClcbiAgfVxuXG5cbn1cbiJdfQ==