cdk8s-cli
Version:
This is the command line tool for Cloud Development Kit (CDK) for Kubernetes (cdk8s).
163 lines • 22.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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImportBase = exports.Language = void 0;
const path = __importStar(require("path"));
const codemaker_1 = require("codemaker");
const fs = __importStar(require("fs-extra"));
const srcmak = __importStar(require("jsii-srcmak"));
const util_1 = require("../util");
var Language;
(function (Language) {
Language["TYPESCRIPT"] = "typescript";
Language["PYTHON"] = "python";
Language["CSHARP"] = "csharp";
Language["JAVA"] = "java";
Language["GO"] = "go";
})(Language = exports.Language || (exports.Language = {}));
class ImportBase {
async import(options) {
const code = new codemaker_1.CodeMaker();
const outdir = path.resolve(options.outdir);
await fs.mkdirp(outdir);
const isTypescript = options.targetLanguage === Language.TYPESCRIPT;
const { moduleNamePrefix } = options;
if (this.moduleNames.length === 0) {
console.error('warning: no definitions to import');
}
const mapFunc = (origName) => {
let name = origName;
switch (options.targetLanguage) {
case Language.PYTHON:
case Language.JAVA:
name = name.split('.').reverse().join('.');
break;
}
return {
origName: origName,
name: name,
};
};
// sort to ensure python writes parent packages first, so children are not deleted
const modules = this.moduleNames.map(mapFunc).sort((a, b) => a.name.localeCompare(b.name));
for (const module of modules) {
// output the name of the imported resource
console.log(module.origName);
const fileName = moduleNamePrefix ? `${moduleNamePrefix}-${module.name}.ts` : `${module.name}.ts`;
code.openFile(fileName);
code.indentation = 2;
await this.generateTypeScript(code, module.origName, {
classNamePrefix: options.classNamePrefix,
});
code.closeFile(fileName);
if (isTypescript) {
await code.save(outdir);
}
if (!isTypescript || options.outputJsii) {
await (0, util_1.mkdtemp)(async (staging) => {
// this is not typescript, so we generate in a staging directory and
// use jsii-srcmak to compile and extract the language-specific source
// into our project.
await code.save(staging);
// these are the module dependencies we compile against
const deps = ['@types/node', 'constructs', 'cdk8s'];
const opts = {
entrypoint: fileName,
moduleKey: moduleNamePrefix ? `${moduleNamePrefix}_${module.name}` : module.name,
deps: deps.map(dep => path.dirname(require.resolve(`${dep}/package.json`))),
};
// used for testing.
if (options.outputJsii) {
opts.jsii = { path: options.outputJsii };
}
// python!
if (options.targetLanguage === Language.PYTHON) {
const moduleName = `${moduleNamePrefix ? `${moduleNamePrefix}.${module.name}` : module.name}`.replace(/-/g, '_');
opts.python = {
outdir: outdir,
moduleName,
};
}
// java!
if (options.targetLanguage === Language.JAVA) {
const javaName = module.name.replace(/\//g, '.').replace(/-/g, '_');
opts.java = {
outdir: '.',
package: `imports.${moduleNamePrefix ? moduleNamePrefix + '.' + javaName : javaName}`,
};
}
// go!
if (options.targetLanguage === Language.GO) {
const { userModuleName, userModulePath } = this.getGoModuleName(outdir);
const relativeDir = path.relative(userModulePath, outdir);
// go package names may only consist of letters or digits.
// underscores are allowed too, but they are less idiomatic
// this converts e.g. "cert-manager.path.to.url" to "certmanagerpathtourl"
const importModuleName = module.name.replace(/[^A-Za-z0-9]/g, '').toLocaleLowerCase();
opts.golang = {
outdir: outdir,
moduleName: `${userModuleName}/${relativeDir}`,
packageName: moduleNamePrefix ? moduleNamePrefix + '_' + importModuleName : importModuleName,
};
}
// csharp!
if (options.targetLanguage === Language.CSHARP) {
const csharpName = module.name.replace(/\//g, '.').replace(/-/g, '_').replace(/(?:^|_)([a-z])/g, (_, char) => char.toUpperCase());
opts.csharp = {
outdir: outdir,
namespace: `Imports.${moduleNamePrefix ? moduleNamePrefix + '.' + csharpName : csharpName}`,
};
}
await srcmak.srcmak(staging, opts);
});
}
}
}
/**
* Traverses up directories until it finds a directory with a go.mod file,
* and parses the module name from the file.
*/
getGoModuleName(origOutdir) {
let outdir = path.resolve(origOutdir);
while (outdir !== path.dirname(outdir)) {
const file = path.join(outdir, 'go.mod');
if (fs.existsSync(file)) {
const contents = fs.readFileSync(file, 'utf8');
const matches = /module (.*)/.exec(contents);
if (!matches) {
throw new Error('Invalid go.mod file - could not find module path.');
}
return {
userModuleName: matches[1],
userModulePath: outdir,
};
}
outdir = path.dirname(outdir);
}
throw new Error(`Cannot find go.mod file within ${origOutdir} or any of its parent directories.`);
}
}
exports.ImportBase = ImportBase;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnQvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNkNBQStCO0FBQy9CLG9EQUFzQztBQUN0QyxrQ0FBa0M7QUFFbEMsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLHFDQUF5QixDQUFBO0lBQ3pCLDZCQUFpQixDQUFBO0lBQ2pCLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7SUFDYixxQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBTW5CO0FBMkJELE1BQXNCLFVBQVU7SUFLdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFzQjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQztRQUU3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3BFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFFLFFBQWdCLEVBQUcsRUFBRTtZQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7WUFDcEIsUUFBUSxPQUFPLENBQUMsY0FBYyxFQUFFO2dCQUM5QixLQUFLLFFBQVEsQ0FBQyxNQUFN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RUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7aUJBQ3RFO2dCQUVELE9BQU87b0JBQ0wsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzFCLGNBQWMsRUFBRSxNQUFNO2lCQUN2QixDQUFDO2FBQ0g7WUFFRCxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLFVBQVUsb0NBQW9DLENBQUMsQ0FBQztJQUNwRyxDQUFDO0NBQ0Y7QUF4SkQsZ0NBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBzcmNtYWsgZnJvbSAnanNpaS1zcmNtYWsnO1xuaW1wb3J0IHsgbWtkdGVtcCB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgZW51bSBMYW5ndWFnZSB7XG4gIFRZUEVTQ1JJUFQgPSAndHlwZXNjcmlwdCcsXG4gIFBZVEhPTiA9ICdweXRob24nLFxuICBDU0hBUlAgPSAnY3NoYXJwJyxcbiAgSkFWQSA9ICdqYXZhJyxcbiAgR08gPSAnZ28nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydE9wdGlvbnMge1xuICByZWFkb25seSBtb2R1bGVOYW1lUHJlZml4Pzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2U7XG4gIHJlYWRvbmx5IG91dGRpcjogc3RyaW5nO1xuICByZWFkb25seSBzYXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF0aCB0byBjb3B5IHRoZSBvdXRwdXQgLmpzaWkgZmlsZS5cbiAgICogQGRlZmF1bHQgLSBqc2lpIGZpbGUgaXMgbm90IGVtaXR0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dEpzaWk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcHJlZml4IGZvciBhbGwgY29uc3RydWN0IGNsYXNzZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzcGVjaWZpYyBpbXBvcnQgdHlwZS4gRm9yIGV4YW1wbGVcbiAgICogazhzIGltcG9ydHMgd2lsbCBhZGQgYSBcIkt1YmVcIiBwcmVmaXggYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGNsYXNzTmFtZVByZWZpeD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU9wdGlvbnMge1xuICByZWFkb25seSBjbGFzc05hbWVQcmVmaXg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbXBvcnRCYXNlIHtcbiAgcHVibGljIGFic3RyYWN0IGdldCBtb2R1bGVOYW1lcygpOiBzdHJpbmdbXTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2VuZXJhdGVUeXBlU2NyaXB0KGNvZGU6IENvZGVNYWtlciwgbW9kdWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBHZW5lcmF0ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhc3luYyBpbXBvcnQob3B0aW9uczogSW1wb3J0T3B0aW9ucykge1xuICAgIGNvbnN0IGNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG5cbiAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5vdXRkaXIpO1xuICAgIGF3YWl0IGZzLm1rZGlycChvdXRkaXIpO1xuICAgIGNvbnN0IGlzVHlwZXNjcmlwdCA9IG9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlRZUEVTQ1JJUFQ7XG4gICAgY29uc3QgeyBtb2R1bGVOYW1lUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMubW9kdWxlTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd3YXJuaW5nOiBubyBkZWZpbml0aW9ucyB0byBpbXBvcnQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBGdW5jID0gKCBvcmlnTmFtZTogc3RyaW5nICkgPT4ge1xuICAgICAgbGV0IG5hbWUgPSBvcmlnTmFtZTtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjpcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOlxuICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcuJykucmV2ZXJzZSgpLmpvaW4oJy4nKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdOYW1lOiBvcmlnTmFtZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIC8vIHNvcnQgdG8gZW5zdXJlIHB5dGhvbiB3cml0ZXMgcGFyZW50IHBhY2thZ2VzIGZpcnN0LCBzbyBjaGlsZHJlbiBhcmUgbm90IGRlbGV0ZWRcbiAgICBjb25zdCBtb2R1bGVzID0gdGhpcy5tb2R1bGVOYW1lcy5tYXAobWFwRnVuYykuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgLy8gb3V0cHV0IHRoZSBuYW1lIG9mIHRoZSBpbXBvcnRlZCByZXNvdXJjZVxuICAgICAgY29uc29sZS5sb2cobW9kdWxlLm9yaWdOYW1lKTtcblxuICAgICAgY29uc3QgZmlsZU5hbWUgPSBtb2R1bGVOYW1lUHJlZml4ID8gYCR7bW9kdWxlTmFtZVByZWZpeH0tJHttb2R1bGUubmFtZX0udHNgIDogYCR7bW9kdWxlLm5hbWV9LnRzYDtcbiAgICAgIGNvZGUub3BlbkZpbGUoZmlsZU5hbWUpO1xuICAgICAgY29kZS5pbmRlbnRhdGlvbiA9IDI7XG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlVHlwZVNjcmlwdChjb2RlLCBtb2R1bGUub3JpZ05hbWUsIHtcbiAgICAgICAgY2xhc3NOYW1lUHJlZml4OiBvcHRpb25zLmNsYXNzTmFtZVByZWZpeCxcbiAgICAgIH0pO1xuXG4gICAgICBjb2RlLmNsb3NlRmlsZShmaWxlTmFtZSk7XG5cbiAgICAgIGlmIChpc1R5cGVzY3JpcHQpIHtcbiAgICAgICAgYXdhaXQgY29kZS5zYXZlKG91dGRpcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNUeXBlc2NyaXB0IHx8IG9wdGlvbnMub3V0cHV0SnNpaSkge1xuICAgICAgICBhd2FpdCBta2R0ZW1wKGFzeW5jIHN0YWdpbmcgPT4ge1xuXG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgdHlwZXNjcmlwdCwgc28gd2UgZ2VuZXJhdGUgaW4gYSBzdGFnaW5nIGRpcmVjdG9yeSBhbmRcbiAgICAgICAgICAvLyB1c2UganNpaS1zcmNtYWsgdG8gY29tcGlsZSBhbmQgZXh0cmFjdCB0aGUgbGFuZ3VhZ2Utc3BlY2lmaWMgc291cmNlXG4gICAgICAgICAgLy8gaW50byBvdXIgcHJvamVjdC5cbiAgICAgICAgICBhd2FpdCBjb2RlLnNhdmUoc3RhZ2luZyk7XG5cbiAgICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIG1vZHVsZSBkZXBlbmRlbmNpZXMgd2UgY29tcGlsZSBhZ2FpbnN0XG4gICAgICAgICAgY29uc3QgZGVwcyA9IFsnQHR5cGVzL25vZGUnLCAnY29uc3RydWN0cycsICdjZGs4cyddO1xuXG4gICAgICAgICAgY29uc3Qgb3B0czogc3JjbWFrLk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBlbnRyeXBvaW50OiBmaWxlTmFtZSxcbiAgICAgICAgICAgIG1vZHVsZUtleTogbW9kdWxlTmFtZVByZWZpeCA/IGAke21vZHVsZU5hbWVQcmVmaXh9XyR7bW9kdWxlLm5hbWV9YCA6IG1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgZGVwczogZGVwcy5tYXAoZGVwID0+IHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoYCR7ZGVwfS9wYWNrYWdlLmpzb25gKSkpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyB1c2VkIGZvciB0ZXN0aW5nLlxuICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgICAgICAgIG9wdHMuanNpaSA9IHsgcGF0aDogb3B0aW9ucy5vdXRwdXRKc2lpIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcHl0aG9uIVxuICAgICAgICAgIGlmIChvcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5QWVRIT04pIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBgJHttb2R1bGVOYW1lUHJlZml4ID8gYCR7bW9kdWxlTmFtZVByZWZpeH0uJHttb2R1bGUubmFtZX1gIDogbW9kdWxlLm5hbWV9YC5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgICAgICAgICBvcHRzLnB5dGhvbiA9IHtcbiAgICAgICAgICAgICAgb3V0ZGlyOiBvdXRkaXIsXG4gICAgICAgICAgICAgIG1vZHVsZU5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGphdmEhXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkpBVkEpIHtcbiAgICAgICAgICAgIGNvbnN0IGphdmFOYW1lID0gbW9kdWxlLm5hbWUucmVwbGFjZSgvXFwvL2csICcuJykucmVwbGFjZSgvLS9nLCAnXycpO1xuICAgICAgICAgICAgb3B0cy5qYXZhID0ge1xuICAgICAgICAgICAgICBvdXRkaXI6ICcuJyxcbiAgICAgICAgICAgICAgcGFja2FnZTogYGltcG9ydHMuJHttb2R1bGVOYW1lUHJlZml4ID8gbW9kdWxlTmFtZVByZWZpeCArICcuJyArIGphdmFOYW1lIDogamF2YU5hbWV9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZ28hXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkdPKSB7XG4gICAgICAgICAgICBjb25zdCB7IHVzZXJNb2R1bGVOYW1lLCB1c2VyTW9kdWxlUGF0aCB9ID0gdGhpcy5nZXRHb01vZHVsZU5hbWUob3V0ZGlyKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRGlyID0gcGF0aC5yZWxhdGl2ZSh1c2VyTW9kdWxlUGF0aCwgb3V0ZGlyKTtcblxuICAgICAgICAgICAgLy8gZ28gcGFja2FnZSBuYW1lcyBtYXkgb25seSBjb25zaXN0IG9mIGxldHRlcnMgb3IgZGlnaXRzLlxuICAgICAgICAgICAgLy8gdW5kZXJzY29yZXMgYXJlIGFsbG93ZWQgdG9vLCBidXQgdGhleSBhcmUgbGVzcyBpZGlvbWF0aWNcbiAgICAgICAgICAgIC8vIHRoaXMgY29udmVydHMgZS5nLiBcImNlcnQtbWFuYWdlci5wYXRoLnRvLnVybFwiIHRvIFwiY2VydG1hbmFnZXJwYXRodG91cmxcIlxuICAgICAgICAgICAgY29uc3QgaW1wb3J0TW9kdWxlTmFtZSA9IG1vZHVsZS5uYW1lLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgb3B0cy5nb2xhbmcgPSB7XG4gICAgICAgICAgICAgIG91dGRpcjogb3V0ZGlyLFxuICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBgJHt1c2VyTW9kdWxlTmFtZX0vJHtyZWxhdGl2ZURpcn1gLFxuICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogbW9kdWxlTmFtZVByZWZpeCA/IG1vZHVsZU5hbWVQcmVmaXggKyAnXycgKyBpbXBvcnRNb2R1bGVOYW1lIDogaW1wb3J0TW9kdWxlTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY3NoYXJwIVxuICAgICAgICAgIGlmIChvcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5DU0hBUlApIHtcbiAgICAgICAgICAgIGNvbnN0IGNzaGFycE5hbWUgPSBtb2R1bGUubmFtZS5yZXBsYWNlKC9cXC8vZywgJy4nKS5yZXBsYWNlKC8tL2csICdfJykucmVwbGFjZSgvKD86XnxfKShbYS16XSkvZywgKF8sIGNoYXIpID0+IGNoYXIudG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICBvcHRzLmNzaGFycCA9IHtcbiAgICAgICAgICAgICAgb3V0ZGlyOiBvdXRkaXIsXG4gICAgICAgICAgICAgIG5hbWVzcGFjZTogYEltcG9ydHMuJHttb2R1bGVOYW1lUHJlZml4ID8gbW9kdWxlTmFtZVByZWZpeCArICcuJyArIGNzaGFycE5hbWUgOiBjc2hhcnBOYW1lfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHNyY21hay5zcmNtYWsoc3RhZ2luZywgb3B0cyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdXAgZGlyZWN0b3JpZXMgdW50aWwgaXQgZmluZHMgYSBkaXJlY3Rvcnkgd2l0aCBhIGdvLm1vZCBmaWxlLFxuICAgKiBhbmQgcGFyc2VzIHRoZSBtb2R1bGUgbmFtZSBmcm9tIHRoZSBmaWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRHb01vZHVsZU5hbWUob3JpZ091dGRpcjogc3RyaW5nKSB7XG4gICAgbGV0IG91dGRpciA9IHBhdGgucmVzb2x2ZShvcmlnT3V0ZGlyKTtcblxuICAgIHdoaWxlIChvdXRkaXIgIT09IHBhdGguZGlybmFtZShvdXRkaXIpKSB7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5qb2luKG91dGRpciwgJ2dvLm1vZCcpO1xuXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gL21vZHVsZSAoLiopLy5leGVjKGNvbnRlbnRzKTtcblxuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ28ubW9kIGZpbGUgLSBjb3VsZCBub3QgZmluZCBtb2R1bGUgcGF0aC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXNlck1vZHVsZU5hbWU6IG1hdGNoZXNbMV0sXG4gICAgICAgICAgdXNlck1vZHVsZVBhdGg6IG91dGRpcixcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3V0ZGlyID0gcGF0aC5kaXJuYW1lKG91dGRpcik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBnby5tb2QgZmlsZSB3aXRoaW4gJHtvcmlnT3V0ZGlyfSBvciBhbnkgb2YgaXRzIHBhcmVudCBkaXJlY3Rvcmllcy5gKTtcbiAgfVxufVxuIl19
;