cdkdx
Version:
Zero-config CLI for aws cdk development
169 lines • 24.8 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Project = void 0;
const path = __importStar(require("path"));
const fs = __importStar(require("fs-extra"));
const camelcase_1 = __importDefault(require("camelcase"));
const constructs_1 = require("constructs");
const semver_1 = require("../semver");
const template_file_1 = require("./template-file");
const directory_1 = require("./directory");
const json_file_1 = require("./json-file");
const git_ignore_1 = require("./git-ignore");
const DEFAULT_JSII_MIN_NODE = '12.22.0';
class Project extends constructs_1.Construct {
constructor(options) {
var _a, _b, _c;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
super(undefined, 'cdkdx');
this.scripts = {};
this.peerDependencies = {};
this.devDependencies = {};
this.dependencies = {};
this.targetPath = options.targetPath;
this.template = options.template;
this.minNodeVersion = (_a = options.minNodeVersion) !== null && _a !== void 0 ? _a : DEFAULT_JSII_MIN_NODE;
this.srcDir = (_b = options.srcDir) !== null && _b !== void 0 ? _b : 'src';
this.outDir = (_c = options.outDir) !== null && _c !== void 0 ? _c : 'lib';
const description = 'TODO: Add your description here';
this.manifest = {
name: options.name,
version: '0.1.0',
description,
license: 'MIT',
author: {
name: options.author,
url: `https://github.com/${options.author}`,
},
repository: {
type: 'git',
url: `https://github.com/${options.author}/${options.name}.git`,
},
homepage: `https://github.com/${options.author}/${options.name}`,
keywords: ['cdk'],
engines: { node: `>= ${this.minNodeVersion}` },
main: undefined,
types: undefined,
files: undefined,
jsii: undefined,
scripts: this.scripts,
peerDependencies: this.peerDependencies,
dependencies: this.dependencies,
devDependencies: this.devDependencies,
eslintConfig: {
extends: ['cdk'],
},
};
new json_file_1.JsonFile(this, 'package.json', {
obj: this.manifest,
});
this.gitignore = new git_ignore_1.GitIgnore(this);
this.addDefaultGitIgnoreExcludes();
this.addScripts({
build: 'cdkdx build',
watch: 'cdkdx build -w',
test: 'cdkdx test',
lint: 'cdkdx lint',
['upgrade:cdk']: 'cdkdx upgrade-cdk',
docgen: 'cdkdx docgen',
});
this.templateContext = {
name: options.name,
description,
author: options.author,
year: new Date().getFullYear(),
camelCase: (str) => (0, camelcase_1.default)(str),
pascalCase: (str) => (0, camelcase_1.default)(str, { pascalCase: true }),
};
}
addFields(fields) {
for (const [name, value] of Object.entries(fields)) {
this.manifest[name] = value;
}
}
addScripts(scripts) {
for (const [name, command] of Object.entries(scripts)) {
this.scripts[name] = command;
}
}
addPeerDependencies(deps, options = {}) {
var _a;
const pinnedDevDependency = (_a = options.pinnedDevDependency) !== null && _a !== void 0 ? _a : true;
for (const [k, v] of Object.entries(deps)) {
this.peerDependencies[k] = v.spec;
if (pinnedDevDependency) {
this.addDevDependencies({ [k]: semver_1.Semver.pinned(v.version) });
}
}
}
addDependencies(deps) {
for (const [k, v] of Object.entries(deps)) {
this.dependencies[k] = v.spec;
}
}
addDevDependencies(deps) {
for (const [k, v] of Object.entries(deps !== null && deps !== void 0 ? deps : {})) {
this.devDependencies[k] = v.spec;
}
}
addFiles(files, fromPath) {
const templatePath = fromPath !== null && fromPath !== void 0 ? fromPath : this.template;
files.forEach((file) => {
const sourceFile = path.join(templatePath, file);
const stats = fs.statSync(sourceFile);
if (stats.isDirectory()) {
new directory_1.Directory(this, file);
}
else {
const template = fs.readFileSync(sourceFile, {
encoding: 'utf-8',
});
new template_file_1.TemplateFile(this, file, {
template,
context: this.templateContext,
});
}
});
}
getDependencyNames() {
const dependencyNames = new Set([
...Object.keys(this.dependencies),
...Object.keys(this.devDependencies),
]);
return [...dependencyNames];
}
synth() {
constructs_1.Node.of(this).synthesize({ outdir: this.targetPath });
}
addDefaultGitIgnoreExcludes() {
this.gitignore.exclude('# Logs', 'logs', '*.log', 'npm-debug.log*', 'yarn-debug.log*', 'yarn-error.log*', 'lerna-debug.log*', '', '# Diagnostic reports (https://nodejs.org/api/report.html)', 'report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json', '', '# Runtime data', 'pids', '*.pid', '*.seed', '*.pid.lock', '', '# Directory for instrumented libs generated by jscoverage/JSCover', 'lib-cov', '', '# Coverage directory used by tools like istanbul', 'coverage', '*.lcov', '', '# nyc test coverage', '.nyc_output', '', '# Grunt intermediate storage(https://gruntjs.com/creating-plugins#storing-task-files)', '.grunt', '', '# Bower dependency directory(https://bower.io/)', 'bower_components', '', '# node-waf configuration', '.lock-wscript', '', '# Compiled binary addons (https://nodejs.org/api/addons.html)', 'build/Release', '', '# Dependency directories', 'node_modules/', 'jspm_packages/', '', '# TypeScript v1 declaration files', 'typings/', '', '# Optional npm cache directory', '.npm', '', '# Optional eslint cache', '.eslintcache', '', '# Optional REPL history', '.node_repl_history', '', '# Output of `npm pack`', '*.tgz', '', '# Yarn Integrity file', '.yarn-integrity', '', '# dotenv environment variables file', '.env', '', '# next.js build output', '.next', '', '# cdkdx', '.DS_Store', 'lib', '*.tsbuildinfo', 'tsconfig.json', 'tsconfig.eslint.json');
}
}
exports.Project = Project;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZXMvcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FBK0I7QUFDL0IsMERBQWtDO0FBQ2xDLDJDQUE2QztBQUU3QyxzQ0FBbUM7QUFDbkMsbURBQStDO0FBQy9DLDJDQUF3QztBQUN4QywyQ0FBdUM7QUFDdkMsNkNBQXlDO0FBRXpDLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDO0FBdUJ4QyxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQWVwQyxZQUFZLE9BQXVCOztRQUNqQyw4REFBOEQ7UUFDOUQsS0FBSyxDQUFDLFNBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFUbEIsWUFBTyxHQUEyQixFQUFFLENBQUM7UUFDckMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QyxvQkFBZSxHQUEyQixFQUFFLENBQUM7UUFDN0MsaUJBQVksR0FBMkIsRUFBRSxDQUFDO1FBUXpELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFBLE9BQU8sQ0FBQyxjQUFjLG1DQUFJLHFCQUFxQixDQUFDO1FBRXRFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sQ0FBQyxNQUFNLG1DQUFJLEtBQUssQ0FBQztRQUV0QyxNQUFNLFdBQVcsR0FBRyxpQ0FBaUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxPQUFPO1lB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Q1AsUUFBUSxFQUNSLFlBQVksRUFDWixFQUFFLEVBQ0YsbUVBQW1FLEVBQ25FLFNBQVMsRUFDVCxFQUFFLEVBQ0Ysa0RBQWtELEVBQ2xELFVBQVUsRUFDVixRQUFRLEVBQ1IsRUFBRSxFQUNGLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsRUFBRSxFQUNGLHVGQUF1RixFQUN2RixRQUFRLEVBQ1IsRUFBRSxFQUNGLGlEQUFpRCxFQUNqRCxrQkFBa0IsRUFDbEIsRUFBRSxFQUNGLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsRUFBRSxFQUNGLCtEQUErRCxFQUMvRCxlQUFlLEVBQ2YsRUFBRSxFQUNGLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLEVBQUUsRUFDRixtQ0FBbUMsRUFDbkMsVUFBVSxFQUNWLEVBQUUsRUFDRixnQ0FBZ0MsRUFDaEMsTUFBTSxFQUNOLEVBQUUsRUFDRix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLEVBQUUsRUFDRix5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLEVBQUUsRUFDRix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLEVBQUUsRUFDRix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLEVBQUUsRUFDRixxQ0FBcUMsRUFDckMsTUFBTSxFQUNOLEVBQUUsRUFDRix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLEVBQUUsRUFDRixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLHNCQUFzQixDQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBM09ELDBCQTJPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gJ2NhbWVsY2FzZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE5vZGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgU2VtdmVyIH0gZnJvbSAnLi4vc2VtdmVyJztcbmltcG9ydCB7IFRlbXBsYXRlRmlsZSB9IGZyb20gJy4vdGVtcGxhdGUtZmlsZSc7XG5pbXBvcnQgeyBEaXJlY3RvcnkgfSBmcm9tICcuL2RpcmVjdG9yeSc7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gJy4vanNvbi1maWxlJztcbmltcG9ydCB7IEdpdElnbm9yZSB9IGZyb20gJy4vZ2l0LWlnbm9yZSc7XG5cbmNvbnN0IERFRkFVTFRfSlNJSV9NSU5fTk9ERSA9ICcxMi4yMi4wJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBTZW12ZXI+O1xuXG4gIHJlYWRvbmx5IHNyY0Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0RGlyPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IG1pbk5vZGVWZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlZXJEZXBlbmRlbmN5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGFkZCBhIHBpbm5lZCBkZXYgZGVwZW5kZW5jeS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGlubmVkRGV2RGVwZW5kZW5jeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFBhdGg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtaW5Ob2RlVmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0RGlyOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzcmNEaXI6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdpdGlnbm9yZTogR2l0SWdub3JlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2NyaXB0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBlZXJEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXZEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQcm9qZWN0T3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3VwZXIodW5kZWZpbmVkIGFzIGFueSwgJ2Nka2R4Jyk7XG5cbiAgICB0aGlzLnRhcmdldFBhdGggPSBvcHRpb25zLnRhcmdldFBhdGg7XG5cbiAgICB0aGlzLnRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICB0aGlzLm1pbk5vZGVWZXJzaW9uID0gb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiA/PyBERUZBVUxUX0pTSUlfTUlOX05PREU7XG5cbiAgICB0aGlzLnNyY0RpciA9IG9wdGlvbnMuc3JjRGlyID8/ICdzcmMnO1xuICAgIHRoaXMub3V0RGlyID0gb3B0aW9ucy5vdXREaXIgPz8gJ2xpYic7XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICdUT0RPOiBBZGQgeW91ciBkZXNjcmlwdGlvbiBoZXJlJztcblxuICAgIHRoaXMubWFuaWZlc3QgPSB7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICB2ZXJzaW9uOiAnMC4xLjAnLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBsaWNlbnNlOiAnTUlUJyxcbiAgICAgIGF1dGhvcjoge1xuICAgICAgICBuYW1lOiBvcHRpb25zLmF1dGhvcixcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9naXRodWIuY29tLyR7b3B0aW9ucy5hdXRob3J9YCxcbiAgICAgIH0sXG4gICAgICByZXBvc2l0b3J5OiB7XG4gICAgICAgIHR5cGU6ICdnaXQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2dpdGh1Yi5jb20vJHtvcHRpb25zLmF1dGhvcn0vJHtvcHRpb25zLm5hbWV9LmdpdGAsXG4gICAgICB9LFxuICAgICAgaG9tZXBhZ2U6IGBodHRwczovL2dpdGh1Yi5jb20vJHtvcHRpb25zLmF1dGhvcn0vJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgIGtleXdvcmRzOiBbJ2NkayddLFxuICAgICAgZW5naW5lczogeyBub2RlOiBgPj0gJHt0aGlzLm1pbk5vZGVWZXJzaW9ufWAgfSxcbiAgICAgIG1haW46IHVuZGVmaW5lZCxcbiAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgICBmaWxlczogdW5kZWZpbmVkLFxuICAgICAganNpaTogdW5kZWZpbmVkLFxuICAgICAgc2NyaXB0czogdGhpcy5zY3JpcHRzLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogdGhpcy5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgZGVwZW5kZW5jaWVzOiB0aGlzLmRlcGVuZGVuY2llcyxcbiAgICAgIGRldkRlcGVuZGVuY2llczogdGhpcy5kZXZEZXBlbmRlbmNpZXMsXG4gICAgICBlc2xpbnRDb25maWc6IHtcbiAgICAgICAgZXh0ZW5kczogWydjZGsnXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIG5ldyBKc29uRmlsZSh0aGlzLCAncGFja2FnZS5qc29uJywge1xuICAgICAgb2JqOiB0aGlzLm1hbmlmZXN0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5naXRpZ25vcmUgPSBuZXcgR2l0SWdub3JlKHRoaXMpO1xuICAgIHRoaXMuYWRkRGVmYXVsdEdpdElnbm9yZUV4Y2x1ZGVzKCk7XG5cbiAgICB0aGlzLmFkZFNjcmlwdHMoe1xuICAgICAgYnVpbGQ6ICdjZGtkeCBidWlsZCcsXG4gICAgICB3YXRjaDogJ2Nka2R4IGJ1aWxkIC13JyxcbiAgICAgIHRlc3Q6ICdjZGtkeCB0ZXN0JyxcbiAgICAgIGxpbnQ6ICdjZGtkeCBsaW50JyxcbiAgICAgIFsndXBncmFkZTpjZGsnXTogJ2Nka2R4IHVwZ3JhZGUtY2RrJyxcbiAgICAgIGRvY2dlbjogJ2Nka2R4IGRvY2dlbicsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRlbXBsYXRlQ29udGV4dCA9IHtcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgYXV0aG9yOiBvcHRpb25zLmF1dGhvcixcbiAgICAgIHllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGNhbWVsQ2FzZTogKHN0cjogc3RyaW5nKSA9PiBjYW1lbENhc2Uoc3RyKSxcbiAgICAgIHBhc2NhbENhc2U6IChzdHI6IHN0cmluZykgPT4gY2FtZWxDYXNlKHN0ciwgeyBwYXNjYWxDYXNlOiB0cnVlIH0pLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYWRkRmllbGRzKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogdW5rbm93biB9KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIHRoaXMubWFuaWZlc3RbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkU2NyaXB0cyhzY3JpcHRzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbW1hbmRdIG9mIE9iamVjdC5lbnRyaWVzKHNjcmlwdHMpKSB7XG4gICAgICB0aGlzLnNjcmlwdHNbbmFtZV0gPSBjb21tYW5kO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRQZWVyRGVwZW5kZW5jaWVzKFxuICAgIGRlcHM6IHsgW21vZHVsZTogc3RyaW5nXTogU2VtdmVyIH0sXG4gICAgb3B0aW9uczogUGVlckRlcGVuZGVuY3lPcHRpb25zID0ge30sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBpbm5lZERldkRlcGVuZGVuY3kgPSBvcHRpb25zLnBpbm5lZERldkRlcGVuZGVuY3kgPz8gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRlcHMpKSB7XG4gICAgICB0aGlzLnBlZXJEZXBlbmRlbmNpZXNba10gPSB2LnNwZWM7XG5cbiAgICAgIGlmIChwaW5uZWREZXZEZXBlbmRlbmN5KSB7XG4gICAgICAgIHRoaXMuYWRkRGV2RGVwZW5kZW5jaWVzKHsgW2tdOiBTZW12ZXIucGlubmVkKHYudmVyc2lvbikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZERlcGVuZGVuY2llcyhkZXBzOiB7IFttb2R1bGU6IHN0cmluZ106IFNlbXZlciB9KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZGVwcykpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzW2tdID0gdi5zcGVjO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGREZXZEZXBlbmRlbmNpZXMoZGVwczogeyBbbW9kdWxlOiBzdHJpbmddOiBTZW12ZXIgfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRlcHMgPz8ge30pKSB7XG4gICAgICB0aGlzLmRldkRlcGVuZGVuY2llc1trXSA9IHYuc3BlYztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmlsZXMoZmlsZXM6IHN0cmluZ1tdLCBmcm9tUGF0aD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IGZyb21QYXRoID8/IHRoaXMudGVtcGxhdGU7XG5cbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgZmlsZSk7XG4gICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHNvdXJjZUZpbGUpO1xuXG4gICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBuZXcgRGlyZWN0b3J5KHRoaXMsIGZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBmcy5yZWFkRmlsZVN5bmMoc291cmNlRmlsZSwge1xuICAgICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgVGVtcGxhdGVGaWxlKHRoaXMsIGZpbGUsIHtcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLnRlbXBsYXRlQ29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVwZW5kZW5jeU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICAgLi4uT2JqZWN0LmtleXModGhpcy5kZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uT2JqZWN0LmtleXModGhpcy5kZXZEZXBlbmRlbmNpZXMpLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIFsuLi5kZXBlbmRlbmN5TmFtZXNdO1xuICB9XG5cbiAgcHVibGljIHN5bnRoKCk6IHZvaWQge1xuICAgIE5vZGUub2YodGhpcykuc3ludGhlc2l6ZSh7IG91dGRpcjogdGhpcy50YXJnZXRQYXRoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0R2l0SWdub3JlRXhjbHVkZXMoKSB7XG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShcbiAgICAgICcjIExvZ3MnLFxuICAgICAgJ2xvZ3MnLFxuICAgICAgJyoubG9nJyxcbiAgICAgICducG0tZGVidWcubG9nKicsXG4gICAgICAneWFybi1kZWJ1Zy5sb2cqJyxcbiAgICAgICd5YXJuLWVycm9yLmxvZyonLFxuICAgICAgJ2xlcm5hLWRlYnVnLmxvZyonLFxuICAgICAgJycsXG4gICAgICAnIyBEaWFnbm9zdGljIHJlcG9ydHMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcmVwb3J0Lmh0bWwpJyxcbiAgICAgICdyZXBvcnQuWzAtOV0qLlswLTldKi5bMC05XSouWzAtOV0qLmpzb24nLFxuICAgICAgJycsXG4gICAgICAnIyBSdW50aW1lIGRhdGEnLFxuICAgICAgJ3BpZHMnLFxuICAgICAgJyoucGlkJyxcbiAgICAgICcqLnNlZWQnLFxuICAgICAgJyoucGlkLmxvY2snLFxuICAgICAgJycsXG4gICAgICAnIyBEaXJlY3RvcnkgZm9yIGluc3RydW1lbnRlZCBsaWJzIGdlbmVyYXRlZCBieSBqc2NvdmVyYWdlL0pTQ292ZXInLFxuICAgICAgJ2xpYi1jb3YnLFxuICAgICAgJycsXG4gICAgICAnIyBDb3ZlcmFnZSBkaXJlY3RvcnkgdXNlZCBieSB0b29scyBsaWtlIGlzdGFuYnVsJyxcbiAgICAgICdjb3ZlcmFnZScsXG4gICAgICAnKi5sY292JyxcbiAgICAgICcnLFxuICAgICAgJyMgbnljIHRlc3QgY292ZXJhZ2UnLFxuICAgICAgJy5ueWNfb3V0cHV0JyxcbiAgICAgICcnLFxuICAgICAgJyMgR3J1bnQgaW50ZXJtZWRpYXRlIHN0b3JhZ2UoaHR0cHM6Ly9ncnVudGpzLmNvbS9jcmVhdGluZy1wbHVnaW5zI3N0b3JpbmctdGFzay1maWxlcyknLFxuICAgICAgJy5ncnVudCcsXG4gICAgICAnJyxcbiAgICAgICcjIEJvd2VyIGRlcGVuZGVuY3kgZGlyZWN0b3J5KGh0dHBzOi8vYm93ZXIuaW8vKScsXG4gICAgICAnYm93ZXJfY29tcG9uZW50cycsXG4gICAgICAnJyxcbiAgICAgICcjIG5vZGUtd2FmIGNvbmZpZ3VyYXRpb24nLFxuICAgICAgJy5sb2NrLXdzY3JpcHQnLFxuICAgICAgJycsXG4gICAgICAnIyBDb21waWxlZCBiaW5hcnkgYWRkb25zIChodHRwczovL25vZGVqcy5vcmcvYXBpL2FkZG9ucy5odG1sKScsXG4gICAgICAnYnVpbGQvUmVsZWFzZScsXG4gICAgICAnJyxcbiAgICAgICcjIERlcGVuZGVuY3kgZGlyZWN0b3JpZXMnLFxuICAgICAgJ25vZGVfbW9kdWxlcy8nLFxuICAgICAgJ2pzcG1fcGFja2FnZXMvJyxcbiAgICAgICcnLFxuICAgICAgJyMgVHlwZVNjcmlwdCB2MSBkZWNsYXJhdGlvbiBmaWxlcycsXG4gICAgICAndHlwaW5ncy8nLFxuICAgICAgJycsXG4gICAgICAnIyBPcHRpb25hbCBucG0gY2FjaGUgZGlyZWN0b3J5JyxcbiAgICAgICcubnBtJyxcbiAgICAgICcnLFxuICAgICAgJyMgT3B0aW9uYWwgZXNsaW50IGNhY2hlJyxcbiAgICAgICcuZXNsaW50Y2FjaGUnLFxuICAgICAgJycsXG4gICAgICAnIyBPcHRpb25hbCBSRVBMIGhpc3RvcnknLFxuICAgICAgJy5ub2RlX3JlcGxfaGlzdG9yeScsXG4gICAgICAnJyxcbiAgICAgICcjIE91dHB1dCBvZiBgbnBtIHBhY2tgJyxcbiAgICAgICcqLnRneicsXG4gICAgICAnJyxcbiAgICAgICcjIFlhcm4gSW50ZWdyaXR5IGZpbGUnLFxuICAgICAgJy55YXJuLWludGVncml0eScsXG4gICAgICAnJyxcbiAgICAgICcjIGRvdGVudiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlsZScsXG4gICAgICAnLmVudicsXG4gICAgICAnJyxcbiAgICAgICcjIG5leHQuanMgYnVpbGQgb3V0cHV0JyxcbiAgICAgICcubmV4dCcsXG4gICAgICAnJyxcbiAgICAgICcjIGNka2R4JyxcbiAgICAgICcuRFNfU3RvcmUnLFxuICAgICAgJ2xpYicsXG4gICAgICAnKi50c2J1aWxkaW5mbycsXG4gICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAndHNjb25maWcuZXNsaW50Lmpzb24nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==