UNPKG

aws-delivlib

Version:

A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.

138 lines • 18.1 kB
"use strict"; 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.MirrorSource = void 0; const path = __importStar(require("node:path")); const aws_cdk_lib_1 = require("aws-cdk-lib"); /** * Source of the image. */ class MirrorSource { /** * Configure an image from DockerHub. * * @param image e.g jsii/superchain * @param tag optional, defaults to 'latest' * * @deprecated This method's name inaccurately expresses that the image comes * from DockerHub, when any publicly-accessible repository can be used. Prefer * using `fromImageName(string, string?)` instead, which is more aptly named. */ static fromDockerHub(image, tag = 'latest') { return this.fromPublicImage(image, tag); } /** * Configure an image from DockerHub or a repository-qualified image name. * * @param image e.g public.ecr.aws/jsii/superchain * @param tag optional, defaults to 'latest' * @param ecrRepositoryName the name of the ECR Repository to use (e.g: jsii/superchain) */ static fromPublicImage(image, tag = 'latest', ecrRepositoryName = image.includes('/') ? image : `library/${image}`) { class DockerHubMirrorSource extends MirrorSource { constructor() { if (image.includes(':')) { throw new Error('image must not include tag'); } // simulates DockerHub by prefixing library/ to official images const repositoryName = image.includes('/') ? image : `library/${image}`; super(repositoryName, tag, undefined, ecrRepositoryName); } bind(options) { const ecrImageUri = `${options.ecrRegistry}/${this.ecrRepositoryName}:${this.tag}`; return { commands: [ `docker pull ${this.repositoryName}:${this.tag}`, `docker tag ${this.repositoryName}:${this.tag} ${ecrImageUri}`, ], repositoryName: this.ecrRepositoryName, tag: this.tag, }; } } return new DockerHubMirrorSource(); } /** * DEPRECATED * @deprecated use fromDir() */ static fromDirectory(directory, repositoryName, tag) { return this.fromDir(directory, repositoryName, { tag }); } /** * Configure an image from a local directory. * * @param directory Path to directory containing the Dockerfile. * @param repositoryName Repository name of the built image. * @param options additional configuration options */ static fromDir(directory, repositoryName, opts = {}) { class DirectoryMirrorSource extends MirrorSource { constructor() { super(repositoryName, opts.tag ?? 'latest', directory); } bind(options) { const asset = new aws_cdk_lib_1.aws_s3_assets.Asset(options.scope, `BuildContext${this.directory}${JSON.stringify(opts.buildArgs ?? {})}`, { path: this.directory, // Need to give an explicit displayName, because the directory might // be absolute, and the directories and args are liable to change on // every pipeline run. displayName: `EcrMirror directory ${path.basename(directory)}`, }); if (options.syncJob) { asset.grantRead(options.syncJob); } const ecrImageUri = `${options.ecrRegistry}/${this.ecrRepositoryName}:${this.tag}`; const cmdFlags = []; cmdFlags.push('--pull'); cmdFlags.push('-t', ecrImageUri); if (opts.buildArgs) { Object.entries(opts.buildArgs).forEach(([k, v]) => cmdFlags.push('--build-arg', `${k}=${v}`)); } const zipFile = `${this.repositoryName}.zip`; const tmpDir = this.repositoryName; return { commands: [ `rm -rf ${zipFile} ${tmpDir}`, `aws s3 cp ${asset.s3ObjectUrl} ${zipFile}`, `unzip ${zipFile} -d ${tmpDir}`, `docker build ${cmdFlags.join(' ')} ${tmpDir}`, ], repositoryName: this.ecrRepositoryName, tag: this.tag, }; } } return new DirectoryMirrorSource(); } constructor(repositoryName, tag, directory, ecrRepositoryName = repositoryName) { this.repositoryName = repositoryName; this.tag = tag; this.directory = directory; this.ecrRepositoryName = ecrRepositoryName; } } exports.MirrorSource = MirrorSource; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlycm9yLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1pcnJvci1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsNkNBR3FCO0FBc0RyQjs7R0FFRztBQUNILE1BQXNCLFlBQVk7SUFFaEM7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxRQUFRO1FBQy9ELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBYSxFQUFFLE1BQWMsUUFBUSxFQUFFLG9CQUE0QixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFO1FBQy9JLE1BQU0scUJBQXNCLFNBQVEsWUFBWTtZQUM5QztnQkFDRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsK0RBQStEO2dCQUMvRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUM7Z0JBQ3hFLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFTSxJQUFJLENBQUMsT0FBZ0M7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEdB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QyxpQkFBaUI7b0JBQ3RDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztpQkFDZCxDQUFDO1lBQ0osQ0FBQztTQUNGO1FBQ0QsT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQ3FCLGNBQXNCLEVBQ3RCLEdBQVcsRUFDWCxTQUFrQixFQUNsQixvQkFBb0IsY0FBYztRQUhsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWlCO0lBRXZELENBQUM7Q0FNRjtBQTFIRCxvQ0EwSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBhd3NfY29kZWJ1aWxkIGFzIGNvZGVidWlsZCxcbiAgYXdzX3MzX2Fzc2V0cyBhcyBzM0Fzc2V0cyxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlycm9yU291cmNlQmluZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHRhcmdldCBFQ1IgcmVnaXN0cnlcbiAgICovXG4gIHJlYWRvbmx5IGVjclJlZ2lzdHJ5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdG8gYXR0YWNoIGFueSBjb25zdHJ1Y3RzIHRoYXQgbWF5IGFsc28gYmUgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogVGhlIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgd2lsbCBydW4gdGhlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIERvY2tlckh1YiBhbmQgRUNSLlxuICAgKiBAZGVmYXVsdCAtIGVpdGhlciBubyBzeW5jIGpvYiBpcyBwcmVzZW50IG9yIGl0J3Mgbm90IGRlZmluZWQgeWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3luY0pvYj86IGNvZGVidWlsZC5JUHJvamVjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaXJyb3JTb3VyY2VDb25maWcge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmRzIHRvIHJ1biB0byByZXRyaWV2ZSB0aGUgZG9ja2VyIGltYWdlLlxuICAgKiBlLmcuIFsnZG9ja2VyIHB1bGwgPGltYWdlLWlkPiddXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgRUNSIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFnIHRvIGJlIHVzZSBmb3IgdGhlIHRhcmdldCBFQ1IgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB0YWc6IHN0cmluZztcbn1cblxuLyoqIEFkZGl0aW9uYWwgb3B0aW9ucyB3aGVuIGNvbmZpZ3VyaW5nIGEgTWlycm9yIFNvdXJjZSBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5ICovXG5leHBvcnQgaW50ZXJmYWNlIE1pcnJvclNvdXJjZURpcmVjdG9yeU9wdGlvbnMge1xuICAvKipcbiAgICogVGFnIG9mIHRoZSBidWlsdCBpbWFnZS5cbiAgICogQGRlZmF1bHQgJ2xhdGVzdCdcbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJncyB0byBwYXNzIHRvIHRoZSBgZG9ja2VyIGJ1aWxkYCBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGJ1aWxkIGFyZ3MgYXJlIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBTb3VyY2Ugb2YgdGhlIGltYWdlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWlycm9yU291cmNlIHtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFuIGltYWdlIGZyb20gRG9ja2VySHViLlxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2UgZS5nIGpzaWkvc3VwZXJjaGFpblxuICAgKiBAcGFyYW0gdGFnIG9wdGlvbmFsLCBkZWZhdWx0cyB0byAnbGF0ZXN0J1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCdzIG5hbWUgaW5hY2N1cmF0ZWx5IGV4cHJlc3NlcyB0aGF0IHRoZSBpbWFnZSBjb21lc1xuICAgKiBmcm9tIERvY2tlckh1Yiwgd2hlbiBhbnkgcHVibGljbHktYWNjZXNzaWJsZSByZXBvc2l0b3J5IGNhbiBiZSB1c2VkLiBQcmVmZXJcbiAgICogdXNpbmcgYGZyb21JbWFnZU5hbWUoc3RyaW5nLCBzdHJpbmc/KWAgaW5zdGVhZCwgd2hpY2ggaXMgbW9yZSBhcHRseSBuYW1lZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURvY2tlckh1YihpbWFnZTogc3RyaW5nLCB0YWc6IHN0cmluZyA9ICdsYXRlc3QnKTogTWlycm9yU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tUHVibGljSW1hZ2UoaW1hZ2UsIHRhZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIGFuIGltYWdlIGZyb20gRG9ja2VySHViIG9yIGEgcmVwb3NpdG9yeS1xdWFsaWZpZWQgaW1hZ2UgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGltYWdlIGUuZyBwdWJsaWMuZWNyLmF3cy9qc2lpL3N1cGVyY2hhaW5cbiAgICogQHBhcmFtIHRhZyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2xhdGVzdCdcbiAgICogQHBhcmFtIGVjclJlcG9zaXRvcnlOYW1lIHRoZSBuYW1lIG9mIHRoZSBFQ1IgUmVwb3NpdG9yeSB0byB1c2UgKGUuZzoganNpaS9zdXBlcmNoYWluKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUHVibGljSW1hZ2UoaW1hZ2U6IHN0cmluZywgdGFnOiBzdHJpbmcgPSAnbGF0ZXN0JywgZWNyUmVwb3NpdG9yeU5hbWU6IHN0cmluZyA9IGltYWdlLmluY2x1ZGVzKCcvJykgPyBpbWFnZSA6IGBsaWJyYXJ5LyR7aW1hZ2V9YCk6IE1pcnJvclNvdXJjZSB7XG4gICAgY2xhc3MgRG9ja2VySHViTWlycm9yU291cmNlIGV4dGVuZHMgTWlycm9yU291cmNlIHtcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAoaW1hZ2UuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgbXVzdCBub3QgaW5jbHVkZSB0YWcnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaW11bGF0ZXMgRG9ja2VySHViIGJ5IHByZWZpeGluZyBsaWJyYXJ5LyB0byBvZmZpY2lhbCBpbWFnZXNcbiAgICAgICAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBpbWFnZS5pbmNsdWRlcygnLycpID8gaW1hZ2UgOiBgbGlicmFyeS8ke2ltYWdlfWA7XG4gICAgICAgIHN1cGVyKHJlcG9zaXRvcnlOYW1lLCB0YWcsIHVuZGVmaW5lZCwgZWNyUmVwb3NpdG9yeU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgYmluZChvcHRpb25zOiBNaXJyb3JTb3VyY2VCaW5kT3B0aW9ucyk6IE1pcnJvclNvdXJjZUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IGVjckltYWdlVXJpID0gYCR7b3B0aW9ucy5lY3JSZWdpc3RyeX0vJHt0aGlzLmVjclJlcG9zaXRvcnlOYW1lfToke3RoaXMudGFnfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgIGBkb2NrZXIgcHVsbCAke3RoaXMucmVwb3NpdG9yeU5hbWV9OiR7dGhpcy50YWd9YCxcbiAgICAgICAgICAgIGBkb2NrZXIgdGFnICR7dGhpcy5yZXBvc2l0b3J5TmFtZX06JHt0aGlzLnRhZ30gJHtlY3JJbWFnZVVyaX1gLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHRoaXMuZWNyUmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgdGFnOiB0aGlzLnRhZyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERvY2tlckh1Yk1pcnJvclNvdXJjZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21EaXIoKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRGlyZWN0b3J5KGRpcmVjdG9yeTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCB0YWc/OiBzdHJpbmcpOiBNaXJyb3JTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLmZyb21EaXIoZGlyZWN0b3J5LCByZXBvc2l0b3J5TmFtZSwgeyB0YWcgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIGFuIGltYWdlIGZyb20gYSBsb2NhbCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZS5cbiAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFJlcG9zaXRvcnkgbmFtZSBvZiB0aGUgYnVpbHQgaW1hZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EaXIoZGlyZWN0b3J5OiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsIG9wdHM6IE1pcnJvclNvdXJjZURpcmVjdG9yeU9wdGlvbnMgPSB7fSk6IE1pcnJvclNvdXJjZSB7XG4gICAgY2xhc3MgRGlyZWN0b3J5TWlycm9yU291cmNlIGV4dGVuZHMgTWlycm9yU291cmNlIHtcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihyZXBvc2l0b3J5TmFtZSwgb3B0cy50YWcgPz8gJ2xhdGVzdCcsIGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBiaW5kKG9wdGlvbnM6IE1pcnJvclNvdXJjZUJpbmRPcHRpb25zKTogTWlycm9yU291cmNlQ29uZmlnIHtcbiAgICAgICAgY29uc3QgYXNzZXQgPSBuZXcgczNBc3NldHMuQXNzZXQob3B0aW9ucy5zY29wZSwgYEJ1aWxkQ29udGV4dCR7dGhpcy5kaXJlY3Rvcnl9JHtKU09OLnN0cmluZ2lmeShvcHRzLmJ1aWxkQXJncyA/PyB7fSl9YCwge1xuICAgICAgICAgIHBhdGg6IHRoaXMuZGlyZWN0b3J5ISxcblxuICAgICAgICAgIC8vIE5lZWQgdG8gZ2l2ZSBhbiBleHBsaWNpdCBkaXNwbGF5TmFtZSwgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IG1pZ2h0XG4gICAgICAgICAgLy8gYmUgYWJzb2x1dGUsIGFuZCB0aGUgZGlyZWN0b3JpZXMgYW5kIGFyZ3MgYXJlIGxpYWJsZSB0byBjaGFuZ2Ugb25cbiAgICAgICAgICAvLyBldmVyeSBwaXBlbGluZSBydW4uXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGBFY3JNaXJyb3IgZGlyZWN0b3J5ICR7cGF0aC5iYXNlbmFtZShkaXJlY3RvcnkpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5zeW5jSm9iKSB7XG4gICAgICAgICAgYXNzZXQuZ3JhbnRSZWFkKG9wdGlvbnMuc3luY0pvYik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWNySW1hZ2VVcmkgPSBgJHtvcHRpb25zLmVjclJlZ2lzdHJ5fS8ke3RoaXMuZWNyUmVwb3NpdG9yeU5hbWV9OiR7dGhpcy50YWd9YDtcbiAgICAgICAgY29uc3QgY21kRmxhZ3MgPSBbXTtcbiAgICAgICAgY21kRmxhZ3MucHVzaCgnLS1wdWxsJyk7XG4gICAgICAgIGNtZEZsYWdzLnB1c2goJy10JywgZWNySW1hZ2VVcmkpO1xuXG4gICAgICAgIGlmIChvcHRzLmJ1aWxkQXJncykge1xuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMuYnVpbGRBcmdzKS5mb3JFYWNoKChbaywgdl0pID0+IGNtZEZsYWdzLnB1c2goJy0tYnVpbGQtYXJnJywgYCR7a309JHt2fWApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHppcEZpbGUgPSBgJHt0aGlzLnJlcG9zaXRvcnlOYW1lfS56aXBgO1xuICAgICAgICBjb25zdCB0bXBEaXIgPSB0aGlzLnJlcG9zaXRvcnlOYW1lO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgIGBybSAtcmYgJHt6aXBGaWxlfSAke3RtcERpcn1gLFxuICAgICAgICAgICAgYGF3cyBzMyBjcCAke2Fzc2V0LnMzT2JqZWN0VXJsfSAke3ppcEZpbGV9YCxcbiAgICAgICAgICAgIGB1bnppcCAke3ppcEZpbGV9IC1kICR7dG1wRGlyfWAsXG4gICAgICAgICAgICBgZG9ja2VyIGJ1aWxkICR7Y21kRmxhZ3Muam9pbignICcpfSAke3RtcERpcn1gLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHRoaXMuZWNyUmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgdGFnOiB0aGlzLnRhZyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEaXJlY3RvcnlNaXJyb3JTb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhZzogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3Rvcnk/OiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVjclJlcG9zaXRvcnlOYW1lID0gcmVwb3NpdG9yeU5hbWUsXG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhlIHNvdXJjZSB3aXRoIHRoZSBFY3JNaXJyb3IgY29uc3RydWN0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGJpbmQob3B0aW9uczogTWlycm9yU291cmNlQmluZE9wdGlvbnMpOiBNaXJyb3JTb3VyY2VDb25maWc7XG59XG4iXX0=