@aws-cdk/aws-amplify-alpha
Version:
The CDK Construct Library for AWS::Amplify
125 lines • 17.4 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Domain = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const core_1 = require("aws-cdk-lib/core");
const aws_amplify_1 = require("aws-cdk-lib/aws-amplify");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
/**
* An Amplify Console domain
*/
let Domain = class Domain extends core_1.Resource {
constructor(scope, id, props) {
super(scope, id);
try {
jsiiDeprecationWarnings._aws_cdk_aws_amplify_alpha_DomainProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, Domain);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
this.subDomains = props.subDomains || [];
const domainName = props.domainName || id;
if (!core_1.Token.isUnresolved(domainName) && domainName.length > 255) {
throw new core_1.ValidationError(`Domain name must be 255 characters or less, got: ${domainName.length} characters.`, this);
}
if (!core_1.Token.isUnresolved(domainName) && !/^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\.)?$/.test(domainName)) {
throw new core_1.ValidationError(`Domain name must be a valid hostname, got: ${domainName}.`, this);
}
const domain = new aws_amplify_1.CfnDomain(this, 'Resource', {
appId: props.app.appId,
domainName,
subDomainSettings: core_1.Lazy.any({ produce: () => this.renderSubDomainSettings() }, { omitEmptyArray: true }),
enableAutoSubDomain: !!props.enableAutoSubdomain,
autoSubDomainCreationPatterns: props.autoSubdomainCreationPatterns || ['*', 'pr*'],
autoSubDomainIamRole: props.autoSubDomainIamRole?.roleArn,
certificateSettings: props.customCertificate ? {
certificateType: 'CUSTOM',
customCertificateArn: props.customCertificate.certificateArn,
} : undefined,
});
this.arn = domain.attrArn;
this.certificateRecord = domain.attrCertificateRecord;
this.domainName = domain.attrDomainName;
this.domainStatus = domain.attrDomainStatus;
this.statusReason = domain.attrStatusReason;
this.domainAutoSubDomainCreationPatterns = domain.attrAutoSubDomainCreationPatterns;
this.domainAutoSubDomainIamRole = domain.attrAutoSubDomainIamRole;
this.domainEnableAutoSubDomain = domain.attrEnableAutoSubDomain;
this.node.addValidation({ validate: () => this.validateDomain() });
}
/**
* Maps a branch to a sub domain
*
* @param branch The branch
* @param prefix The prefix. Use '' to map to the root of the domain. Defaults to branch name.
*/
mapSubDomain(branch, prefix) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_amplify_alpha_IBranch(branch);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.mapSubDomain);
}
throw error;
}
this.subDomains.push({ branch, prefix });
return this;
}
/**
* Maps a branch to the domain root
*/
mapRoot(branch) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_amplify_alpha_IBranch(branch);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.mapRoot);
}
throw error;
}
return this.mapSubDomain(branch, '');
}
validateDomain() {
if (this.subDomains.length === 0) {
return ['The domain doesn\'t contain any subdomains'];
}
return [];
}
renderSubDomainSettings() {
return this.subDomains.map(s => ({
branchName: s.branch.branchName,
prefix: s.prefix ?? s.branch.branchName,
}));
}
};
exports.Domain = Domain;
_a = JSII_RTTI_SYMBOL_1;
Domain[_a] = { fqn: "@aws-cdk/aws-amplify-alpha.Domain", version: "2.210.0-alpha.0" };
/** Uniquely identifies this class. */
Domain.PROPERTY_INJECTION_ID = '@aws-cdk.aws-amplify-alpha.Domain';
__decorate([
(0, metadata_resource_1.MethodMetadata)()
], Domain.prototype, "mapSubDomain", null);
__decorate([
(0, metadata_resource_1.MethodMetadata)()
], Domain.prototype, "mapRoot", null);
exports.Domain = Domain = __decorate([
prop_injectable_1.propertyInjectable
], Domain);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBLDJDQUF1RjtBQUV2Rix5REFBb0Q7QUFHcEQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQTBEMUU7O0dBRUc7QUFFSSxJQUFNLE1BQU0sR0FBWixNQUFNLE1BQU8sU0FBUSxlQUFRO0lBNkRsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0E5RFIsTUFBTTs7OztRQStEZixtQ0FBbUM7UUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxzQkFBZSxDQUFDLG9EQUFvRCxVQUFVLENBQUMsTUFBTSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkgsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0ZBQXNGLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEosTUFBTSxJQUFJLHNCQUFlLENBQUMsOENBQThDLFVBQVUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM3QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQ3RCLFVBQVU7WUFDVixpQkFBaUIsRUFBRSxXQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDeEcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7WUFDaEQsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztZQUNsRixvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsT0FBTztZQUN6RCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxlQUFlLEVBQUUsUUFBUTtnQkFDekIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGNBQWM7YUFDN0QsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsTUFBTSxDQUFDLGlDQUFpQyxDQUFDO1FBQ3BGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUM7UUFDbEUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztRQUVoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3BFO0lBRUQ7Ozs7O09BS0c7SUFFSSxZQUFZLENBQUMsTUFBZSxFQUFFLE1BQWU7Ozs7Ozs7Ozs7UUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7O09BRUc7SUFFSSxPQUFPLENBQUMsTUFBZTs7Ozs7Ozs7OztRQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3RDO0lBRU8sY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRU8sdUJBQXVCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDL0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1NBQ3hDLENBQUMsQ0FBQyxDQUFDO0tBQ0w7O0FBdElVLHdCQUFNOzs7QUFDakIsc0NBQXNDO0FBQ2YsNEJBQXFCLEdBQVcsbUNBQW1DLEFBQTlDLENBQStDO0FBMEdwRjtJQUROLElBQUEsa0NBQWMsR0FBRTswQ0FJaEI7QUFNTTtJQUROLElBQUEsa0NBQWMsR0FBRTtxQ0FHaEI7aUJBdkhVLE1BQU07SUFEbEIsb0NBQWtCO0dBQ04sTUFBTSxDQXVJbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhY20gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBMYXp5LCBSZXNvdXJjZSwgSVJlc29sdmFibGUsIFRva2VuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2ZuRG9tYWluIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFtcGxpZnknO1xuaW1wb3J0IHsgSUFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB7IElCcmFuY2ggfSBmcm9tICcuL2JyYW5jaCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gYWRkIGEgZG9tYWluIHRvIGFuIGFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tYWluT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9tYWluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGNvbnN0cnVjdCdzIGlkXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJkb21haW5zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGBhZGRTdWJEb21haW4oKWAgdG8gYWRkIHN1YmRvbWFpbnNcbiAgICovXG4gIHJlYWRvbmx5IHN1YkRvbWFpbnM/OiBTdWJEb21haW5bXTtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBjcmVhdGUgc3ViZG9tYWlucyBmb3IgY29ubmVjdGVkIGJyYW5jaGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVBdXRvU3ViZG9tYWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQnJhbmNoZXMgd2hpY2ggc2hvdWxkIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHN1YmRvbWFpbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgcmVwb3NpdG9yeSBicmFuY2hlcyBbJyonLCAncHIqJ11cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9TdWJkb21haW5DcmVhdGlvblBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIFNTTC9UTFMgY2VydGlmaWNhdGUgdG8gdXNlIGZvciB5b3VyIGN1c3RvbSBkb21haW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbXBsaWZ5IHVzZXMgdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgdGhhdCBpdCBwcm92aXNpb25zIGFuZCBtYW5hZ2VzIGZvciB5b3VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUNlcnRpZmljYXRlPzogYWNtLklDZXJ0aWZpY2F0ZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIERvbWFpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpblByb3BzIGV4dGVuZHMgRG9tYWluT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gdG8gd2hpY2ggdGhlIGRvbWFpbiBtdXN0IGJlIGNvbm5lY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBJQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgd2l0aCBhY2Nlc3MgdG8gUm91dGU1MyB3aGVuIHVzaW5nIGVuYWJsZUF1dG9TdWJkb21haW5cbiAgICogQGRlZmF1bHQgdGhlIElBTSByb2xlIGZyb20gQXBwLmdyYW50UHJpbmNpcGFsXG4gICAqL1xuICByZWFkb25seSBhdXRvU3ViRG9tYWluSWFtUm9sZT86IGlhbS5JUm9sZTtcbn1cblxuLyoqXG4gKiBBbiBBbXBsaWZ5IENvbnNvbGUgZG9tYWluXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBEb21haW4gZXh0ZW5kcyBSZXNvdXJjZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWFtcGxpZnktYWxwaGEuRG9tYWluJztcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRvbWFpblxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBETlMgUmVjb3JkIGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlUmVjb3JkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb21haW5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZG9tYWluIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW5TdGF0dXM6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkb21haW5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1JlYXNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCcmFuY2ggcGF0dGVybnMgZm9yIHRoZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgc3ViZG9tYWluLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluQXV0b1N1YkRvbWFpbkNyZWF0aW9uUGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHNlcnZpY2Ugcm9sZSBmb3IgdGhlIHN1YmRvbWFpbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbkF1dG9TdWJEb21haW5JYW1Sb2xlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBhdXRvbWF0ZWQgY3JlYXRpb24gb2Ygc3ViZG9tYWlucyBmb3IgYnJhbmNoZXMgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbkVuYWJsZUF1dG9TdWJEb21haW46IElSZXNvbHZhYmxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3ViRG9tYWluczogU3ViRG9tYWluW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERvbWFpblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuc3ViRG9tYWlucyA9IHByb3BzLnN1YkRvbWFpbnMgfHwgW107XG5cbiAgICBjb25zdCBkb21haW5OYW1lID0gcHJvcHMuZG9tYWluTmFtZSB8fCBpZDtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChkb21haW5OYW1lKSAmJiBkb21haW5OYW1lLmxlbmd0aCA+IDI1NSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRG9tYWluIG5hbWUgbXVzdCBiZSAyNTUgY2hhcmFjdGVycyBvciBsZXNzLCBnb3Q6ICR7ZG9tYWluTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCwgdGhpcyk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGRvbWFpbk5hbWUpICYmICEvXigoKD8hLSlbQS1aYS16MC05LV17MCw2Mn1bQS1aYS16MC05XSlcXC4pKygoPyEtKVtBLVphLXowLTktXXsxLDYyfVtBLVphLXowLTldKShcXC4pPyQvLnRlc3QoZG9tYWluTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYERvbWFpbiBuYW1lIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgZ290OiAke2RvbWFpbk5hbWV9LmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRvbWFpbiA9IG5ldyBDZm5Eb21haW4odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgYXBwSWQ6IHByb3BzLmFwcC5hcHBJZCxcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICBzdWJEb21haW5TZXR0aW5nczogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlclN1YkRvbWFpblNldHRpbmdzKCkgfSwgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9KSxcbiAgICAgIGVuYWJsZUF1dG9TdWJEb21haW46ICEhcHJvcHMuZW5hYmxlQXV0b1N1YmRvbWFpbixcbiAgICAgIGF1dG9TdWJEb21haW5DcmVhdGlvblBhdHRlcm5zOiBwcm9wcy5hdXRvU3ViZG9tYWluQ3JlYXRpb25QYXR0ZXJucyB8fCBbJyonLCAncHIqJ10sXG4gICAgICBhdXRvU3ViRG9tYWluSWFtUm9sZTogcHJvcHMuYXV0b1N1YkRvbWFpbklhbVJvbGU/LnJvbGVBcm4sXG4gICAgICBjZXJ0aWZpY2F0ZVNldHRpbmdzOiBwcm9wcy5jdXN0b21DZXJ0aWZpY2F0ZSA/IHtcbiAgICAgICAgY2VydGlmaWNhdGVUeXBlOiAnQ1VTVE9NJyxcbiAgICAgICAgY3VzdG9tQ2VydGlmaWNhdGVBcm46IHByb3BzLmN1c3RvbUNlcnRpZmljYXRlLmNlcnRpZmljYXRlQXJuLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMuYXJuID0gZG9tYWluLmF0dHJBcm47XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZVJlY29yZCA9IGRvbWFpbi5hdHRyQ2VydGlmaWNhdGVSZWNvcmQ7XG4gICAgdGhpcy5kb21haW5OYW1lID0gZG9tYWluLmF0dHJEb21haW5OYW1lO1xuICAgIHRoaXMuZG9tYWluU3RhdHVzID0gZG9tYWluLmF0dHJEb21haW5TdGF0dXM7XG4gICAgdGhpcy5zdGF0dXNSZWFzb24gPSBkb21haW4uYXR0clN0YXR1c1JlYXNvbjtcbiAgICB0aGlzLmRvbWFpbkF1dG9TdWJEb21haW5DcmVhdGlvblBhdHRlcm5zID0gZG9tYWluLmF0dHJBdXRvU3ViRG9tYWluQ3JlYXRpb25QYXR0ZXJucztcbiAgICB0aGlzLmRvbWFpbkF1dG9TdWJEb21haW5JYW1Sb2xlID0gZG9tYWluLmF0dHJBdXRvU3ViRG9tYWluSWFtUm9sZTtcbiAgICB0aGlzLmRvbWFpbkVuYWJsZUF1dG9TdWJEb21haW4gPSBkb21haW4uYXR0ckVuYWJsZUF1dG9TdWJEb21haW47XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiAoKSA9PiB0aGlzLnZhbGlkYXRlRG9tYWluKCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhIGJyYW5jaCB0byBhIHN1YiBkb21haW5cbiAgICpcbiAgICogQHBhcmFtIGJyYW5jaCBUaGUgYnJhbmNoXG4gICAqIEBwYXJhbSBwcmVmaXggVGhlIHByZWZpeC4gVXNlICcnIHRvIG1hcCB0byB0aGUgcm9vdCBvZiB0aGUgZG9tYWluLiBEZWZhdWx0cyB0byBicmFuY2ggbmFtZS5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBtYXBTdWJEb21haW4oYnJhbmNoOiBJQnJhbmNoLCBwcmVmaXg/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN1YkRvbWFpbnMucHVzaCh7IGJyYW5jaCwgcHJlZml4IH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYSBicmFuY2ggdG8gdGhlIGRvbWFpbiByb290XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgbWFwUm9vdChicmFuY2g6IElCcmFuY2gpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBTdWJEb21haW4oYnJhbmNoLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRG9tYWluKCkge1xuICAgIGlmICh0aGlzLnN1YkRvbWFpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gWydUaGUgZG9tYWluIGRvZXNuXFwndCBjb250YWluIGFueSBzdWJkb21haW5zJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdWJEb21haW5TZXR0aW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJEb21haW5zLm1hcChzID0+ICh7XG4gICAgICBicmFuY2hOYW1lOiBzLmJyYW5jaC5icmFuY2hOYW1lLFxuICAgICAgcHJlZml4OiBzLnByZWZpeCA/PyBzLmJyYW5jaC5icmFuY2hOYW1lLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1YiBkb21haW4gc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJEb21haW4ge1xuICAvKipcbiAgICogVGhlIGJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoOiBJQnJhbmNoO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4LiBVc2UgJycgdG8gbWFwIHRvIHRoZSByb290IG9mIHRoZSBkb21haW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgYnJhbmNoIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbn1cbiJdfQ==