UNPKG

@aws-cdk/aws-amplify-alpha

Version:

The CDK Construct Library for AWS::Amplify

146 lines 23.6 kB
"use strict"; 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.Branch = void 0; const jsiiDeprecationWarnings = require("../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const iam = require("aws-cdk-lib/aws-iam"); const core_1 = require("aws-cdk-lib/core"); const custom_resources_1 = require("aws-cdk-lib/custom-resources"); const aws_amplify_1 = require("aws-cdk-lib/aws-amplify"); const app_1 = require("./app"); const utils_1 = require("./utils"); const asset_deployment_provider_generated_1 = require("../custom-resource-handlers/dist/aws-amplify-alpha/asset-deployment-provider.generated"); 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 branch */ let Branch = class Branch extends core_1.Resource { /** * Import an existing branch */ static fromBranchName(scope, id, branchName) { class Import extends core_1.Resource { constructor() { super(...arguments); this.branchName = branchName; } } return new Import(scope, id); } constructor(scope, id, props) { super(scope, id); try { jsiiDeprecationWarnings._aws_cdk_aws_amplify_alpha_BranchProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, Branch); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); if (props.app instanceof app_1.App) { const platform = props.app.platform; const isSSR = (0, utils_1.isServerSideRendered)(platform); if (props.computeRole && !isSSR) { throw new core_1.ValidationError('`computeRole` can only be specified for branches of apps with `Platform.WEB_COMPUTE` or `Platform.WEB_DYNAMIC`.', this); } } this.environmentVariables = props.environmentVariables || {}; const branchName = props.branchName || id; const branch = new aws_amplify_1.CfnBranch(this, 'Resource', { appId: props.app.appId, basicAuthConfig: props.basicAuth && props.basicAuth.bind(this, `${branchName}BasicAuth`), branchName, buildSpec: props.buildSpec && props.buildSpec.toBuildSpec(), description: props.description, enableAutoBuild: props.autoBuild ?? true, enablePullRequestPreview: props.pullRequestPreview ?? true, environmentVariables: core_1.Lazy.any({ produce: () => (0, utils_1.renderEnvironmentVariables)(this.environmentVariables) }, { omitEmptyArray: true }), pullRequestEnvironmentName: props.pullRequestEnvironmentName, stage: props.stage, enablePerformanceMode: props.performanceMode, enableSkewProtection: props.skewProtection, computeRoleArn: props.computeRole?.roleArn, }); this.arn = branch.attrArn; this.branchName = branch.attrBranchName; if (props.asset) { new core_1.CustomResource(this, 'DeploymentResource', { serviceToken: AmplifyAssetDeploymentProvider.getOrCreate(this), resourceType: 'Custom::AmplifyAssetDeployment', properties: { AppId: props.app.appId, BranchName: branchName, S3ObjectKey: props.asset.s3ObjectKey, S3BucketName: props.asset.s3BucketName, }, }); } } /** * Adds an environment variable to this branch. * * All environment variables that you add are encrypted to prevent rogue * access so you can use them to store secret information. */ addEnvironment(name, value) { this.environmentVariables[name] = value; return this; } }; exports.Branch = Branch; _a = JSII_RTTI_SYMBOL_1; Branch[_a] = { fqn: "@aws-cdk/aws-amplify-alpha.Branch", version: "2.215.0-alpha.0" }; /** Uniquely identifies this class. */ Branch.PROPERTY_INJECTION_ID = '@aws-cdk.aws-amplify-alpha.Branch'; __decorate([ (0, metadata_resource_1.MethodMetadata)() ], Branch.prototype, "addEnvironment", null); exports.Branch = Branch = __decorate([ prop_injectable_1.propertyInjectable ], Branch); class AmplifyAssetDeploymentProvider extends core_1.NestedStack { /** * Returns the singleton provider. */ static getOrCreate(scope) { const providerId = 'com.amazonaws.cdk.custom-resources.amplify-asset-deployment-provider'; const stack = core_1.Stack.of(scope); const group = stack.node.tryFindChild(providerId) ?? new AmplifyAssetDeploymentProvider(stack, providerId); return group.provider.serviceToken; } constructor(scope, id) { super(scope, id); const onEvent = new asset_deployment_provider_generated_1.AssetDeploymentOnEventFunction(this, 'amplify-asset-deployment-on-event'); onEvent.addToRolePolicy(new iam.PolicyStatement({ resources: ['*'], actions: [ 's3:GetObject', 's3:GetSignedUrl', 'amplify:ListJobs', 'amplify:StartDeployment', ], })); const isComplete = new asset_deployment_provider_generated_1.AssetDeploymentIsCompleteFunction(this, 'amplify-asset-deployment-is-complete'); isComplete.addToRolePolicy(new iam.PolicyStatement({ resources: ['*'], actions: ['amplify:GetJob*'], })); this.provider = new custom_resources_1.Provider(this, 'amplify-asset-deployment-handler-provider', { onEventHandler: onEvent, isCompleteHandler: isComplete, totalTimeout: core_1.Duration.minutes(5), }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYnJhbmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLDJDQUEyQztBQUUzQywyQ0FTMEI7QUFDMUIsbUVBQXdEO0FBRXhELHlEQUFvRDtBQUNwRCwrQkFBa0M7QUFFbEMsbUNBQTJFO0FBQzNFLGdKQUEySztBQUMzSyw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBNkkxRTs7R0FFRztBQUVJLElBQU0sTUFBTSxHQUFaLE1BQU0sTUFBTyxTQUFRLGVBQVE7SUFJbEM7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFVBQWtCO1FBQzNFLE1BQU0sTUFBTyxTQUFRLGVBQVE7WUFBN0I7O2dCQUNrQixlQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzFDLENBQUM7U0FBQTtRQUNELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBYUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBMUJSLE1BQU07Ozs7UUEyQmYsbUNBQW1DO1FBQ25DLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxTQUFHLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFBLDRCQUFvQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTdDLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksc0JBQWUsQ0FBQyxpSEFBaUgsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNySixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBRTdELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDdEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsVUFBVSxXQUFXLENBQUM7WUFDeEYsVUFBVTtZQUNWLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzNELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixlQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJO1lBQ3hDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxJQUFJO1lBQzFELG9CQUFvQixFQUFFLFdBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxrQ0FBMEIsRUFBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xJLDBCQUEwQixFQUFFLEtBQUssQ0FBQywwQkFBMEI7WUFDNUQsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQzVDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQzFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLE9BQU87U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUV4QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUM3QyxZQUFZLEVBQUUsOEJBQThCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDOUQsWUFBWSxFQUFFLGdDQUFnQztnQkFDOUMsVUFBVSxFQUFFO29CQUNWLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7b0JBQ3RCLFVBQVUsRUFBRSxVQUFVO29CQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXO29CQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUN2QzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRjtJQUVEOzs7OztPQUtHO0lBRUksY0FBYyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7S0FDYjs7QUFyRlUsd0JBQU07OztBQUNqQixzQ0FBc0M7QUFDZiw0QkFBcUIsR0FBVyxtQ0FBbUMsQUFBOUMsQ0FBK0M7QUFnRnBGO0lBRE4sSUFBQSxrQ0FBYyxHQUFFOzRDQUloQjtpQkFyRlUsTUFBTTtJQURsQixvQ0FBa0I7R0FDTixNQUFNLENBc0ZsQjtBQUVELE1BQU0sOEJBQStCLFNBQVEsa0JBQVc7SUFDdEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCO1FBQ3hDLE1BQU0sVUFBVSxHQUNkLHNFQUFzRSxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLFlBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFvQyxJQUFJLElBQUksOEJBQThCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25JLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7S0FDcEM7SUFJRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLElBQUksb0VBQThCLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDLENBQUM7UUFDOUYsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDOUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2hCLE9BQU8sRUFBRTtnQkFDUCxjQUFjO2dCQUNkLGlCQUFpQjtnQkFDakIsa0JBQWtCO2dCQUNsQix5QkFBeUI7YUFDMUI7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sVUFBVSxHQUFHLElBQUksdUVBQWlDLENBQUMsSUFBSSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDdkcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDakQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO1NBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQzFCLElBQUksRUFDSiwyQ0FBMkMsRUFDM0M7WUFDRSxjQUFjLEVBQUUsT0FBTztZQUN2QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFlBQVksRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNsQyxDQUNGLENBQUM7S0FDSDtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29kZWJ1aWxkIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7XG4gIEN1c3RvbVJlc291cmNlLFxuICBJUmVzb3VyY2UsXG4gIExhenksXG4gIFJlc291cmNlLFxuICBEdXJhdGlvbixcbiAgTmVzdGVkU3RhY2ssXG4gIFN0YWNrLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2ZuQnJhbmNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFtcGxpZnknO1xuaW1wb3J0IHsgQXBwLCBJQXBwIH0gZnJvbSAnLi9hcHAnO1xuaW1wb3J0IHsgQmFzaWNBdXRoIH0gZnJvbSAnLi9iYXNpYy1hdXRoJztcbmltcG9ydCB7IHJlbmRlckVudmlyb25tZW50VmFyaWFibGVzLCBpc1NlcnZlclNpZGVSZW5kZXJlZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQXNzZXREZXBsb3ltZW50SXNDb21wbGV0ZUZ1bmN0aW9uLCBBc3NldERlcGxveW1lbnRPbkV2ZW50RnVuY3Rpb24gfSBmcm9tICcuLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvZGlzdC9hd3MtYW1wbGlmeS1hbHBoYS9hc3NldC1kZXBsb3ltZW50LXByb3ZpZGVyLmdlbmVyYXRlZCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuXG4vKipcbiAqIEEgYnJhbmNoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJyYW5jaCBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYnJhbmNoXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGJyYW5jaCB0byBhbiBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEJhc2ljIEF1dGggY29uZmlndXJhdGlvbi4gVXNlIHRoaXMgdG8gc2V0IHBhc3N3b3JkIHByb3RlY3Rpb24gZm9yXG4gICAqIHRoZSBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwYXNzd29yZCBwcm90ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBiYXNpY0F1dGg/OiBCYXNpY0F1dGg7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgY29uc3RydWN0J3MgaWRcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkU3BlYyBmb3IgdGhlIGJyYW5jaFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbXBsaWZ5L2xhdGVzdC91c2VyZ3VpZGUvYnVpbGQtc2V0dGluZ3MuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGJ1aWxkIHNwZWNcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNvZGVidWlsZC5CdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG8gYnVpbGRpbmcgZm9yIHRoZSBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgcHVsbCByZXF1ZXN0IHByZXZpZXcgZm9yIHRoZSBicmFuY2guXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0UHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGJyYW5jaC5cbiAgICpcbiAgICogQWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSBhZGQgYXJlIGVuY3J5cHRlZCB0byBwcmV2ZW50IHJvZ3VlXG4gICAqIGFjY2VzcyBzbyB5b3UgY2FuIHVzZSB0aGVtIHRvIHN0b3JlIHNlY3JldCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBkZWRpY2F0ZWQgYmFja2VuZCBlbnZpcm9ubWVudCBmb3IgdGhlIHB1bGwgcmVxdWVzdCBwcmV2aWV3c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgcHJvdmlzaW9uIGEgdGVtcG9yYXJ5IGJhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0RW52aXJvbm1lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFnZSBmb3IgdGhlIGJyYW5jaFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBzdGFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXNzZXQgZm9yIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIFRoZSBBbXBsaWZ5IGFwcCBtdXN0IG5vdCBoYXZlIGEgc291cmNlQ29kZVByb3ZpZGVyIGNvbmZpZ3VyZWQgYXMgdGhpcyByZXNvdXJjZSB1c2VzIEFtcGxpZnknc1xuICAgKiBzdGFydERlcGxveW1lbnQgQVBJIHRvIGluaXRpYXRlIGFuZCBkZXBsb3kgYSBTMyBhc3NldCBvbnRvIHRoZSBBcHAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYXNzZXRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0PzogQXNzZXQ7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGVyZm9ybWFuY2UgbW9kZSBmb3IgdGhlIGJyYW5jaC5cbiAgICpcbiAgICogUGVyZm9ybWFuY2UgbW9kZSBvcHRpbWl6ZXMgZm9yIGZhc3RlciBob3N0aW5nIHBlcmZvcm1hbmNlIGJ5IGtlZXBpbmcgY29udGVudCBjYWNoZWQgYXQgdGhlIGVkZ2VcbiAgICogZm9yIGEgbG9uZ2VyIGludGVydmFsLiBXaGVuIHBlcmZvcm1hbmNlIG1vZGUgaXMgZW5hYmxlZCwgaG9zdGluZyBjb25maWd1cmF0aW9uIG9yIGNvZGUgY2hhbmdlc1xuICAgKiBjYW4gdGFrZSB1cCB0byAxMCBtaW51dGVzIHRvIHJvbGwgb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVyZm9ybWFuY2VNb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNrZXcgcHJvdGVjdGlvbiBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoZSBicmFuY2guXG4gICAqXG4gICAqIERlcGxveW1lbnQgc2tldyBwcm90ZWN0aW9uIGlzIGF2YWlsYWJsZSB0byBBbXBsaWZ5IGFwcGxpY2F0aW9ucyB0byBlbGltaW5hdGUgdmVyc2lvbiBza2V3IGlzc3Vlc1xuICAgKiBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVycyBpbiB3ZWIgYXBwbGljYXRpb25zLlxuICAgKiBXaGVuIHlvdSBhcHBseSBza2V3IHByb3RlY3Rpb24gdG8gYSBicmFuY2gsIHlvdSBjYW4gZW5zdXJlIHRoYXQgeW91ciBjbGllbnRzIGFsd2F5cyBpbnRlcmFjdFxuICAgKiB3aXRoIHRoZSBjb3JyZWN0IHZlcnNpb24gb2Ygc2VydmVyLXNpZGUgYXNzZXRzLCByZWdhcmRsZXNzIG9mIHdoZW4gYSBkZXBsb3ltZW50IG9jY3Vycy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSAtIERlZmF1bHQgc2V0dGluZyBpcyBubyBza2V3IHByb3RlY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBza2V3UHJvdGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0byBhc3NpZ24gdG8gYSBicmFuY2ggb2YgYW4gU1NSIGFwcC5cbiAgICogVGhlIFNTUiBDb21wdXRlIHJvbGUgYWxsb3dzIHRoZSBBbXBsaWZ5IEhvc3RpbmcgY29tcHV0ZSBzZXJ2aWNlIHRvIHNlY3VyZWx5IGFjY2VzcyBzcGVjaWZpYyBBV1MgcmVzb3VyY2VzIGJhc2VkIG9uIHRoZSByb2xlJ3MgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIFRoaXMgcm9sZSBvdmVycmlkZXMgdGhlIGFwcC1sZXZlbCBjb21wdXRlIHJvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIHNwZWNpZmljIHJvbGUgZm9yIHRoZSBicmFuY2guIElmIHRoZSBhcHAgaGFzIGEgY29tcHV0ZSByb2xlLCBpdCB3aWxsIGJlIGluaGVyaXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVSb2xlPzogaWFtLklSb2xlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgQnJhbmNoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmNoUHJvcHMgZXh0ZW5kcyBCcmFuY2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiB3aXRoaW4gd2hpY2ggdGhlIGJyYW5jaCBtdXN0IGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGFwcDogSUFwcDtcbn1cblxuLyoqXG4gKiBBbiBBbXBsaWZ5IENvbnNvbGUgYnJhbmNoXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBCcmFuY2ggZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElCcmFuY2gge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1hbXBsaWZ5LWFscGhhLkJyYW5jaCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBicmFuY2hcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJyYW5jaE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYnJhbmNoTmFtZTogc3RyaW5nKTogSUJyYW5jaCB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJQnJhbmNoIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lID0gYnJhbmNoTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBicmFuY2hcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJyYW5jaFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5hcHAgaW5zdGFuY2VvZiBBcHApIHtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gcHJvcHMuYXBwLnBsYXRmb3JtO1xuICAgICAgY29uc3QgaXNTU1IgPSBpc1NlcnZlclNpZGVSZW5kZXJlZChwbGF0Zm9ybSk7XG5cbiAgICAgIGlmIChwcm9wcy5jb21wdXRlUm9sZSAmJiAhaXNTU1IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignYGNvbXB1dGVSb2xlYCBjYW4gb25seSBiZSBzcGVjaWZpZWQgZm9yIGJyYW5jaGVzIG9mIGFwcHMgd2l0aCBgUGxhdGZvcm0uV0VCX0NPTVBVVEVgIG9yIGBQbGF0Zm9ybS5XRUJfRFlOQU1JQ2AuJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzIHx8IHt9O1xuXG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IHByb3BzLmJyYW5jaE5hbWUgfHwgaWQ7XG4gICAgY29uc3QgYnJhbmNoID0gbmV3IENmbkJyYW5jaCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBhcHBJZDogcHJvcHMuYXBwLmFwcElkLFxuICAgICAgYmFzaWNBdXRoQ29uZmlnOiBwcm9wcy5iYXNpY0F1dGggJiYgcHJvcHMuYmFzaWNBdXRoLmJpbmQodGhpcywgYCR7YnJhbmNoTmFtZX1CYXNpY0F1dGhgKSxcbiAgICAgIGJyYW5jaE5hbWUsXG4gICAgICBidWlsZFNwZWM6IHByb3BzLmJ1aWxkU3BlYyAmJiBwcm9wcy5idWlsZFNwZWMudG9CdWlsZFNwZWMoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGVuYWJsZUF1dG9CdWlsZDogcHJvcHMuYXV0b0J1aWxkID8/IHRydWUsXG4gICAgICBlbmFibGVQdWxsUmVxdWVzdFByZXZpZXc6IHByb3BzLnB1bGxSZXF1ZXN0UHJldmlldyA/PyB0cnVlLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gcmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXModGhpcy5lbnZpcm9ubWVudFZhcmlhYmxlcykgfSwgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9KSxcbiAgICAgIHB1bGxSZXF1ZXN0RW52aXJvbm1lbnROYW1lOiBwcm9wcy5wdWxsUmVxdWVzdEVudmlyb25tZW50TmFtZSxcbiAgICAgIHN0YWdlOiBwcm9wcy5zdGFnZSxcbiAgICAgIGVuYWJsZVBlcmZvcm1hbmNlTW9kZTogcHJvcHMucGVyZm9ybWFuY2VNb2RlLFxuICAgICAgZW5hYmxlU2tld1Byb3RlY3Rpb246IHByb3BzLnNrZXdQcm90ZWN0aW9uLFxuICAgICAgY29tcHV0ZVJvbGVBcm46IHByb3BzLmNvbXB1dGVSb2xlPy5yb2xlQXJuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcm4gPSBicmFuY2guYXR0ckFybjtcbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBicmFuY2guYXR0ckJyYW5jaE5hbWU7XG5cbiAgICBpZiAocHJvcHMuYXNzZXQpIHtcbiAgICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnRGVwbG95bWVudFJlc291cmNlJywge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IEFtcGxpZnlBc3NldERlcGxveW1lbnRQcm92aWRlci5nZXRPckNyZWF0ZSh0aGlzKSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpBbXBsaWZ5QXNzZXREZXBsb3ltZW50JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIEFwcElkOiBwcm9wcy5hcHAuYXBwSWQsXG4gICAgICAgICAgQnJhbmNoTmFtZTogYnJhbmNoTmFtZSxcbiAgICAgICAgICBTM09iamVjdEtleTogcHJvcHMuYXNzZXQuczNPYmplY3RLZXksXG4gICAgICAgICAgUzNCdWNrZXROYW1lOiBwcm9wcy5hc3NldC5zM0J1Y2tldE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIGJyYW5jaC5cbiAgICpcbiAgICogQWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSBhZGQgYXJlIGVuY3J5cHRlZCB0byBwcmV2ZW50IHJvZ3VlXG4gICAqIGFjY2VzcyBzbyB5b3UgY2FuIHVzZSB0aGVtIHRvIHN0b3JlIHNlY3JldCBpbmZvcm1hdGlvbi5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRFbnZpcm9ubWVudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGVzW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuY2xhc3MgQW1wbGlmeUFzc2V0RGVwbG95bWVudFByb3ZpZGVyIGV4dGVuZHMgTmVzdGVkU3RhY2sge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRPckNyZWF0ZShzY29wZTogQ29uc3RydWN0KSB7XG4gICAgY29uc3QgcHJvdmlkZXJJZCA9XG4gICAgICAnY29tLmFtYXpvbmF3cy5jZGsuY3VzdG9tLXJlc291cmNlcy5hbXBsaWZ5LWFzc2V0LWRlcGxveW1lbnQtcHJvdmlkZXInO1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGdyb3VwID1cbiAgICAgIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChwcm92aWRlcklkKSBhcyBBbXBsaWZ5QXNzZXREZXBsb3ltZW50UHJvdmlkZXIpID8/IG5ldyBBbXBsaWZ5QXNzZXREZXBsb3ltZW50UHJvdmlkZXIoc3RhY2ssIHByb3ZpZGVySWQpO1xuICAgIHJldHVybiBncm91cC5wcm92aWRlci5zZXJ2aWNlVG9rZW47XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IG9uRXZlbnQgPSBuZXcgQXNzZXREZXBsb3ltZW50T25FdmVudEZ1bmN0aW9uKHRoaXMsICdhbXBsaWZ5LWFzc2V0LWRlcGxveW1lbnQtb24tZXZlbnQnKTtcbiAgICBvbkV2ZW50LmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnczM6R2V0T2JqZWN0JyxcbiAgICAgICAgJ3MzOkdldFNpZ25lZFVybCcsXG4gICAgICAgICdhbXBsaWZ5Okxpc3RKb2JzJyxcbiAgICAgICAgJ2FtcGxpZnk6U3RhcnREZXBsb3ltZW50JyxcbiAgICAgIF0sXG4gICAgfSkpO1xuXG4gICAgY29uc3QgaXNDb21wbGV0ZSA9IG5ldyBBc3NldERlcGxveW1lbnRJc0NvbXBsZXRlRnVuY3Rpb24odGhpcywgJ2FtcGxpZnktYXNzZXQtZGVwbG95bWVudC1pcy1jb21wbGV0ZScpO1xuICAgIGlzQ29tcGxldGUuYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICBhY3Rpb25zOiBbJ2FtcGxpZnk6R2V0Sm9iKiddLFxuICAgIH0pKTtcblxuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIoXG4gICAgICB0aGlzLFxuICAgICAgJ2FtcGxpZnktYXNzZXQtZGVwbG95bWVudC1oYW5kbGVyLXByb3ZpZGVyJyxcbiAgICAgIHtcbiAgICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnQsXG4gICAgICAgIGlzQ29tcGxldGVIYW5kbGVyOiBpc0NvbXBsZXRlLFxuICAgICAgICB0b3RhbFRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==