UNPKG

lizi-wxapp-cli

Version:

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

187 lines 23.8 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 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==