generator-angular-page
Version:
Yeoman.io generator fo Angular.io page with routing.
150 lines • 21.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const Generator = require("yeoman-generator");
const upper = require("uppercamelcase");
const mkdirp = require("mkdirp");
const ComponentTpl = require("./templates/page-component");
const ComponentInlineTpl = require("./templates/page-component-inline");
const ModuleTpl = require("./templates/page-module");
const ModuleRoutingTpl = require("./templates/page-module-routing");
const SpecTpl = require("./templates/page-spec");
const HtmlTpl = require("./templates/page-html");
class GeneratorAngularPage extends Generator {
constructor(args, opts) {
super(args, opts);
this.defaultPagePrefix = 'page-';
this.SetupGenerator();
}
SetupGenerator() {
this.option('prefix', {
type: String,
default: this.defaultPagePrefix
});
this.option('routing', {
type: Boolean,
default: true
});
this.option('sass', {
type: Boolean,
default: true
});
this.option('spec', {
type: Boolean,
default: true
});
this.option('inline', {
type: Boolean,
default: false
});
}
Prompt() {
let askID = {
name: 'id',
message: `Page id: (will be prefixed with "${this.options['prefix']}")`
};
let askAllFine = {
type: 'confirm',
name: 'ok',
message: 'This is all correct?'
};
this.prompt([askID]).then(answers => {
if (!answers.id || /^\s*$/.test(answers.id)) {
this.log('Page id is required.');
this.Create();
return;
}
try {
let angularConfig = fs.readFileSync(this.destinationRoot() + '/.angular-cli.json', 'utf8');
let angular = JSON.parse(angularConfig);
this.buildConfig = {
appPrefix: angular.apps[0].prefix + '-',
appSource: angular.apps[0].root + '/' + angular.apps[0].prefix + '/',
id: this.options['prefix'] + answers.id,
routing: this.options['routing'] ? 'yes' : 'no',
scss: this.options['sass'] ? 'yes' : 'no',
spec: this.options['spec'] ? 'yes' : 'no',
inline: this.options['inline'] ? 'yes' : 'no'
};
if (angular.defaults) {
if ('styleExt' in angular.defaults) {
this.buildConfig.scss = angular.defaults.styleExt == 'scss' ? 'yes' : 'no';
}
if ('component' in angular.defaults) {
if ('spec' in angular.defaults.component) {
this.buildConfig.spec = angular.defaults.component.spec ? 'yes' : 'no';
}
this.buildConfig.inline = angular.defaults.component.inlineStyle || angular.defaults.component.inlineTemplate ? 'yes' : 'no';
}
}
}
catch (ex) {
this.buildConfig = {
appPrefix: 'app-',
appSource: '',
id: this.options['prefix'] + answers.id,
routing: this.options['routing'] ? 'yes' : 'no',
scss: this.options['sass'] ? 'yes' : 'no',
spec: this.options['spec'] ? 'yes' : 'no',
inline: this.options['inline'] ? 'yes' : 'no'
};
}
this.log('Page info:', JSON.stringify(this.buildConfig, ['id', 'routing', 'scss', 'spec', 'inline'], 2));
this.prompt([askAllFine]).then(answers => {
if (answers.ok) {
this.Create();
}
else {
this.Prompt();
}
});
});
}
Create() {
let pageSelector = this.buildConfig.appPrefix + this.buildConfig.id;
let pageName = upper(this.buildConfig.id);
let fileName = this.buildConfig.id;
let destDir = this.destinationPath(this.buildConfig.appSource + this.buildConfig.id);
let hasRoute = this.buildConfig.routing == 'yes';
let hasSass = this.buildConfig.scss == 'yes';
let hasSpec = this.buildConfig.spec == 'yes';
let isInline = this.buildConfig.inline == 'yes';
let moduleContent;
let componentContent;
mkdirp(destDir, () => {
if (hasRoute) {
moduleContent = ModuleRoutingTpl.default(pageName, fileName);
}
else {
moduleContent = ModuleTpl.default(pageName, fileName);
}
if (isInline) {
componentContent = ComponentInlineTpl.default(pageName, pageSelector);
}
else {
let htmlContent = HtmlTpl.default(pageName, pageSelector);
let cssContent = '';
componentContent = ComponentTpl.default(pageName, pageSelector, hasSass, fileName);
this.fs.write(destDir + '/' + fileName + '.component.html', htmlContent);
if (hasSass) {
this.fs.write(destDir + '/' + fileName + '.component.scss', cssContent);
}
else {
this.fs.write(destDir + '/' + fileName + '.component.css', cssContent);
}
}
if (hasSpec) {
let specContent = SpecTpl.default(pageName, fileName);
this.fs.write(destDir + '/' + fileName + '.spec.ts', specContent);
}
this.fs.write(destDir + '/' + fileName + '.module.ts', moduleContent);
this.fs.write(destDir + '/' + fileName + '.component.ts', componentContent);
});
}
}
module.exports = class extends GeneratorAngularPage {
prompting() {
this.Prompt();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLDhDQUE4QztBQUM5Qyx3Q0FBd0M7QUFDeEMsaUNBQWlDO0FBRWpDLDJEQUEyRDtBQUMzRCx3RUFBd0U7QUFDeEUscURBQXFEO0FBQ3JELG9FQUFvRTtBQUNwRSxpREFBaUQ7QUFDakQsaURBQWlEO0FBRWpELDBCQUEyQixTQUFRLFNBQVM7SUFhMUMsWUFBWSxJQUF1QixFQUFFLElBQVE7UUFDM0MsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQWJaLHNCQUFpQixHQUFXLE9BQU8sQ0FBQztRQWUxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVTLGNBQWM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNoQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNyQixJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNwQixJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLE1BQU07UUFD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RyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBTSxTQUFRLG9CQUFvQjtJQUMxQyxTQUFTO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgR2VuZXJhdG9yIGZyb20gJ3llb21hbi1nZW5lcmF0b3InO1xuaW1wb3J0ICogYXMgdXBwZXIgZnJvbSAndXBwZXJjYW1lbGNhc2UnO1xuaW1wb3J0ICogYXMgbWtkaXJwIGZyb20gJ21rZGlycCc7XG5cbmltcG9ydCAqIGFzIENvbXBvbmVudFRwbCBmcm9tICcuL3RlbXBsYXRlcy9wYWdlLWNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBDb21wb25lbnRJbmxpbmVUcGwgZnJvbSAnLi90ZW1wbGF0ZXMvcGFnZS1jb21wb25lbnQtaW5saW5lJztcbmltcG9ydCAqIGFzIE1vZHVsZVRwbCBmcm9tICcuL3RlbXBsYXRlcy9wYWdlLW1vZHVsZSc7XG5pbXBvcnQgKiBhcyBNb2R1bGVSb3V0aW5nVHBsIGZyb20gJy4vdGVtcGxhdGVzL3BhZ2UtbW9kdWxlLXJvdXRpbmcnO1xuaW1wb3J0ICogYXMgU3BlY1RwbCBmcm9tICcuL3RlbXBsYXRlcy9wYWdlLXNwZWMnO1xuaW1wb3J0ICogYXMgSHRtbFRwbCBmcm9tICcuL3RlbXBsYXRlcy9wYWdlLWh0bWwnO1xuXG5jbGFzcyBHZW5lcmF0b3JBbmd1bGFyUGFnZSBleHRlbmRzIEdlbmVyYXRvciB7XG4gIHByaXZhdGUgZGVmYXVsdFBhZ2VQcmVmaXg6IHN0cmluZyA9ICdwYWdlLSc7XG5cbiAgcHJpdmF0ZSBidWlsZENvbmZpZzoge1xuICAgIGFwcFByZWZpeDogc3RyaW5nO1xuICAgIGFwcFNvdXJjZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcm91dGluZzogc3RyaW5nO1xuICAgIHNjc3M6IHN0cmluZztcbiAgICBzcGVjOiBzdHJpbmc7XG4gICAgaW5saW5lOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoYXJnczogc3RyaW5nIHwgc3RyaW5nW10sIG9wdHM6IHt9KSB7XG4gICAgc3VwZXIoYXJncywgb3B0cyk7XG5cbiAgICB0aGlzLlNldHVwR2VuZXJhdG9yKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgU2V0dXBHZW5lcmF0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb24oJ3ByZWZpeCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IHRoaXMuZGVmYXVsdFBhZ2VQcmVmaXhcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbigncm91dGluZycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb24oJ3Nhc3MnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMub3B0aW9uKCdzcGVjJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbignaW5saW5lJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgUHJvbXB0KCk6IHZvaWQge1xuICAgIGxldCBhc2tJRDogR2VuZXJhdG9yLlF1ZXN0aW9uID0ge1xuICAgICAgbmFtZTogJ2lkJyxcbiAgICAgIG1lc3NhZ2U6IGBQYWdlIGlkOiAod2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiJHt0aGlzLm9wdGlvbnNbJ3ByZWZpeCddfVwiKWBcbiAgICB9O1xuICAgIGxldCBhc2tBbGxGaW5lOiBHZW5lcmF0b3IuUXVlc3Rpb24gPSB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnb2snLFxuICAgICAgbWVzc2FnZTogJ1RoaXMgaXMgYWxsIGNvcnJlY3Q/J1xuICAgIH07XG5cbiAgICB0aGlzLnByb21wdChbYXNrSURdKS50aGVuKGFuc3dlcnMgPT4ge1xuICAgICAgaWYgKCFhbnN3ZXJzLmlkIHx8IC9eXFxzKiQvLnRlc3QoYW5zd2Vycy5pZCkpIHtcbiAgICAgICAgdGhpcy5sb2coJ1BhZ2UgaWQgaXMgcmVxdWlyZWQuJyk7XG5cbiAgICAgICAgdGhpcy5DcmVhdGUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBhbmd1bGFyQ29uZmlnID0gZnMucmVhZEZpbGVTeW5jKHRoaXMuZGVzdGluYXRpb25Sb290KCkgKyAnLy5hbmd1bGFyLWNsaS5qc29uJywgJ3V0ZjgnKTtcbiAgICAgICAgbGV0IGFuZ3VsYXIgPSBKU09OLnBhcnNlKGFuZ3VsYXJDb25maWcpO1xuXG4gICAgICAgIHRoaXMuYnVpbGRDb25maWcgPSB7XG4gICAgICAgICAgYXBwUHJlZml4OiBhbmd1bGFyLmFwcHNbMF0ucHJlZml4ICsgJy0nLFxuICAgICAgICAgIGFwcFNvdXJjZTogYW5ndWxhci5hcHBzWzBdLnJvb3QgKyAnLycgKyBhbmd1bGFyLmFwcHNbMF0ucHJlZml4ICsgJy8nLFxuICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnNbJ3ByZWZpeCddICsgYW5zd2Vycy5pZCxcbiAgICAgICAgICByb3V0aW5nOiB0aGlzLm9wdGlvbnNbJ3JvdXRpbmcnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBzY3NzOiB0aGlzLm9wdGlvbnNbJ3Nhc3MnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBzcGVjOiB0aGlzLm9wdGlvbnNbJ3NwZWMnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBpbmxpbmU6IHRoaXMub3B0aW9uc1snaW5saW5lJ10gPyAneWVzJyA6ICdubydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYW5ndWxhci5kZWZhdWx0cykge1xuICAgICAgICAgIGlmICgnc3R5bGVFeHQnIGluIGFuZ3VsYXIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb25maWcuc2NzcyA9IGFuZ3VsYXIuZGVmYXVsdHMuc3R5bGVFeHQgPT0gJ3Njc3MnID8gJ3llcycgOiAnbm8nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29tcG9uZW50JyBpbiBhbmd1bGFyLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAoJ3NwZWMnIGluIGFuZ3VsYXIuZGVmYXVsdHMuY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRDb25maWcuc3BlYyA9IGFuZ3VsYXIuZGVmYXVsdHMuY29tcG9uZW50LnNwZWMgPyAneWVzJyA6ICdubyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb25maWcuaW5saW5lID0gYW5ndWxhci5kZWZhdWx0cy5jb21wb25lbnQuaW5saW5lU3R5bGUgfHwgYW5ndWxhci5kZWZhdWx0cy5jb21wb25lbnQuaW5saW5lVGVtcGxhdGUgPyAneWVzJyA6ICdubyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAvLyBBbmd1bGFyLmlvIGNvbmZpZyBub3QgZm91bmQ/XG5cbiAgICAgICAgdGhpcy5idWlsZENvbmZpZyA9IHtcbiAgICAgICAgICBhcHBQcmVmaXg6ICdhcHAtJyxcbiAgICAgICAgICBhcHBTb3VyY2U6ICcnLFxuICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnNbJ3ByZWZpeCddICsgYW5zd2Vycy5pZCxcbiAgICAgICAgICByb3V0aW5nOiB0aGlzLm9wdGlvbnNbJ3JvdXRpbmcnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBzY3NzOiB0aGlzLm9wdGlvbnNbJ3Nhc3MnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBzcGVjOiB0aGlzLm9wdGlvbnNbJ3NwZWMnXSA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgICBpbmxpbmU6IHRoaXMub3B0aW9uc1snaW5saW5lJ10gPyAneWVzJyA6ICdubydcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2coJ1BhZ2UgaW5mbzonLCBKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkQ29uZmlnLCBbJ2lkJywgJ3JvdXRpbmcnLCAnc2NzcycsICdzcGVjJywgJ2lubGluZSddLCAyKSk7XG5cbiAgICAgIHRoaXMucHJvbXB0KFthc2tBbGxGaW5lXSkudGhlbihhbnN3ZXJzID0+IHtcbiAgICAgICAgaWYgKGFuc3dlcnMub2spIHtcbiAgICAgICAgICB0aGlzLkNyZWF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuUHJvbXB0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIENyZWF0ZSgpOiB2b2lkIHtcbiAgICBsZXQgcGFnZVNlbGVjdG9yOiBzdHJpbmcgPSB0aGlzLmJ1aWxkQ29uZmlnLmFwcFByZWZpeCArIHRoaXMuYnVpbGRDb25maWcuaWQ7XG4gICAgbGV0IHBhZ2VOYW1lOiBzdHJpbmcgPSB1cHBlcih0aGlzLmJ1aWxkQ29uZmlnLmlkKTtcbiAgICBsZXQgZmlsZU5hbWU6IHN0cmluZyA9IHRoaXMuYnVpbGRDb25maWcuaWQ7XG4gICAgbGV0IGRlc3REaXI6IHN0cmluZyA9IHRoaXMuZGVzdGluYXRpb25QYXRoKHRoaXMuYnVpbGRDb25maWcuYXBwU291cmNlICsgdGhpcy5idWlsZENvbmZpZy5pZCk7XG5cbiAgICBsZXQgaGFzUm91dGU6IGJvb2xlYW4gPSB0aGlzLmJ1aWxkQ29uZmlnLnJvdXRpbmcgPT0gJ3llcyc7XG4gICAgbGV0IGhhc1Nhc3M6IGJvb2xlYW4gPSB0aGlzLmJ1aWxkQ29uZmlnLnNjc3MgPT0gJ3llcyc7XG4gICAgbGV0IGhhc1NwZWM6IGJvb2xlYW4gPSB0aGlzLmJ1aWxkQ29uZmlnLnNwZWMgPT0gJ3llcyc7XG4gICAgbGV0IGlzSW5saW5lOiBib29sZWFuID0gdGhpcy5idWlsZENvbmZpZy5pbmxpbmUgPT0gJ3llcyc7XG5cbiAgICBsZXQgbW9kdWxlQ29udGVudDogc3RyaW5nO1xuICAgIGxldCBjb21wb25lbnRDb250ZW50OiBzdHJpbmc7XG5cbiAgICBta2RpcnAoZGVzdERpciwgKCkgPT4ge1xuICAgICAgaWYgKGhhc1JvdXRlKSB7XG4gICAgICAgIG1vZHVsZUNvbnRlbnQgPSBNb2R1bGVSb3V0aW5nVHBsLmRlZmF1bHQocGFnZU5hbWUsIGZpbGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZHVsZUNvbnRlbnQgPSBNb2R1bGVUcGwuZGVmYXVsdChwYWdlTmFtZSwgZmlsZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgY29tcG9uZW50Q29udGVudCA9IENvbXBvbmVudElubGluZVRwbC5kZWZhdWx0KHBhZ2VOYW1lLCBwYWdlU2VsZWN0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGh0bWxDb250ZW50OiBzdHJpbmcgPSBIdG1sVHBsLmRlZmF1bHQocGFnZU5hbWUsIHBhZ2VTZWxlY3Rvcik7XG4gICAgICAgIGxldCBjc3NDb250ZW50OiBzdHJpbmcgPSAnJztcblxuICAgICAgICBjb21wb25lbnRDb250ZW50ID0gQ29tcG9uZW50VHBsLmRlZmF1bHQocGFnZU5hbWUsIHBhZ2VTZWxlY3RvciwgaGFzU2FzcywgZmlsZU5hbWUpO1xuXG4gICAgICAgIHRoaXMuZnMud3JpdGUoZGVzdERpciArICcvJyArIGZpbGVOYW1lICsgJy5jb21wb25lbnQuaHRtbCcsIGh0bWxDb250ZW50KTtcblxuICAgICAgICBpZiAoaGFzU2Fzcykge1xuICAgICAgICAgIHRoaXMuZnMud3JpdGUoZGVzdERpciArICcvJyArIGZpbGVOYW1lICsgJy5jb21wb25lbnQuc2NzcycsIGNzc0NvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZnMud3JpdGUoZGVzdERpciArICcvJyArIGZpbGVOYW1lICsgJy5jb21wb25lbnQuY3NzJywgY3NzQ29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1NwZWMpIHtcbiAgICAgICAgbGV0IHNwZWNDb250ZW50OiBzdHJpbmcgPSBTcGVjVHBsLmRlZmF1bHQocGFnZU5hbWUsIGZpbGVOYW1lKTtcblxuICAgICAgICB0aGlzLmZzLndyaXRlKGRlc3REaXIgKyAnLycgKyBmaWxlTmFtZSArICcuc3BlYy50cycsIHNwZWNDb250ZW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mcy53cml0ZShkZXN0RGlyICsgJy8nICsgZmlsZU5hbWUgKyAnLm1vZHVsZS50cycsIG1vZHVsZUNvbnRlbnQpO1xuICAgICAgdGhpcy5mcy53cml0ZShkZXN0RGlyICsgJy8nICsgZmlsZU5hbWUgKyAnLmNvbXBvbmVudC50cycsIGNvbXBvbmVudENvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgZXh0ZW5kcyBHZW5lcmF0b3JBbmd1bGFyUGFnZSB7XG4gIHB1YmxpYyBwcm9tcHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5Qcm9tcHQoKTtcbiAgfVxufTtcbiJdfQ==