aws-delivlib
Version:
A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.
138 lines • 18.1 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.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=