UNPKG

14.8 kBJavaScriptView Raw
1"use strict";
2var _a, _b;
3Object.defineProperty(exports, "__esModule", { value: true });
4exports.ArtifactPath = exports.Artifact = void 0;
5const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
6const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7const core_1 = require("@aws-cdk/core");
8const validation = require("./private/validation");
9/**
10 * An output artifact of an action. Artifacts can be used as input by some actions.
11 */
12class Artifact {
13 constructor(artifactName) {
14 this.metadata = {};
15 validation.validateArtifactName(artifactName);
16 this._artifactName = artifactName;
17 }
18 /**
19 * A static factory method used to create instances of the Artifact class.
20 * Mainly meant to be used from `decdk`.
21 *
22 * @param name the (required) name of the Artifact
23 */
24 static artifact(name) {
25 return new Artifact(name);
26 }
27 get artifactName() {
28 return this._artifactName;
29 }
30 /**
31 * Returns an ArtifactPath for a file within this artifact.
32 * CfnOutput is in the form "<artifact-name>::<file-name>"
33 * @param fileName The name of the file
34 */
35 atPath(fileName) {
36 return new ArtifactPath(this, fileName);
37 }
38 /**
39 * The artifact attribute for the name of the S3 bucket where the artifact is stored.
40 */
41 get bucketName() {
42 return artifactAttribute(this, 'BucketName');
43 }
44 /**
45 * The artifact attribute for The name of the .zip file that contains the artifact that is
46 * generated by AWS CodePipeline, such as 1ABCyZZ.zip.
47 */
48 get objectKey() {
49 return artifactAttribute(this, 'ObjectKey');
50 }
51 /**
52 * The artifact attribute of the Amazon Simple Storage Service (Amazon S3) URL of the artifact,
53 * such as https://s3-us-west-2.amazonaws.com/artifactstorebucket-yivczw8jma0c/test/TemplateSo/1ABCyZZ.zip.
54 */
55 get url() {
56 return artifactAttribute(this, 'URL');
57 }
58 /**
59 * Returns a token for a value inside a JSON file within this artifact.
60 * @param jsonFile The JSON file name.
61 * @param keyName The hash key.
62 */
63 getParam(jsonFile, keyName) {
64 return artifactGetParam(this, jsonFile, keyName);
65 }
66 /**
67 * Returns the location of the .zip file in S3 that this Artifact represents.
68 * Used by Lambda's `CfnParametersCode` when being deployed in a CodePipeline.
69 */
70 get s3Location() {
71 return {
72 bucketName: this.bucketName,
73 objectKey: this.objectKey,
74 };
75 }
76 /**
77 * Add arbitrary extra payload to the artifact under a given key.
78 * This can be used by CodePipeline actions to communicate data between themselves.
79 * If metadata was already present under the given key,
80 * it will be overwritten with the new value.
81 */
82 setMetadata(key, value) {
83 this.metadata[key] = value;
84 }
85 /**
86 * Retrieve the metadata stored in this artifact under the given key.
87 * If there is no metadata stored under the given key,
88 * null will be returned.
89 */
90 getMetadata(key) {
91 return this.metadata[key];
92 }
93 toString() {
94 return this.artifactName;
95 }
96 /** @internal */
97 _setName(name) {
98 if (this._artifactName) {
99 throw new Error(`Artifact already has name '${this._artifactName}', cannot override it`);
100 }
101 else {
102 this._artifactName = name;
103 }
104 }
105}
106exports.Artifact = Artifact;
107_a = JSII_RTTI_SYMBOL_1;
108Artifact[_a] = { fqn: "@aws-cdk/aws-codepipeline.Artifact", version: "1.156.1" };
109/**
110 * A specific file within an output artifact.
111 *
112 * The most common use case for this is specifying the template file
113 * for a CloudFormation action.
114 */
115class ArtifactPath {
116 constructor(artifact, fileName) {
117 this.artifact = artifact;
118 this.fileName = fileName;
119 try {
120 jsiiDeprecationWarnings._aws_cdk_aws_codepipeline_Artifact(artifact);
121 }
122 catch (error) {
123 if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
124 Error.captureStackTrace(error, this.constructor);
125 }
126 throw error;
127 }
128 }
129 static artifactPath(artifactName, fileName) {
130 return new ArtifactPath(Artifact.artifact(artifactName), fileName);
131 }
132 get location() {
133 const artifactName = this.artifact.artifactName
134 ? this.artifact.artifactName
135 : core_1.Lazy.string({ produce: () => this.artifact.artifactName });
136 return `${artifactName}::${this.fileName}`;
137 }
138}
139exports.ArtifactPath = ArtifactPath;
140_b = JSII_RTTI_SYMBOL_1;
141ArtifactPath[_b] = { fqn: "@aws-cdk/aws-codepipeline.ArtifactPath", version: "1.156.1" };
142function artifactAttribute(artifact, attributeName) {
143 const lazyArtifactName = core_1.Lazy.string({ produce: () => artifact.artifactName });
144 return core_1.Token.asString({ 'Fn::GetArtifactAtt': [lazyArtifactName, attributeName] });
145}
146function artifactGetParam(artifact, jsonFile, keyName) {
147 const lazyArtifactName = core_1.Lazy.string({ produce: () => artifact.artifactName });
148 return core_1.Token.asString({ 'Fn::GetParam': [lazyArtifactName, jsonFile, keyName] });
149}
150//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcnRpZmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSx3Q0FBNEM7QUFDNUMsbURBQW1EO0FBRW5EOztHQUVHO0FBQ0gsTUFBYSxRQUFRO0lBY25CLFlBQVksWUFBcUI7UUFGaEIsYUFBUSxHQUEyQixFQUFFLENBQUM7UUFHckQsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0tBQ25DO0lBakJEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0I7SUFXRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQzNCO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxRQUFnQjtRQUM1QixPQUFPLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN6QztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8saUJBQWlCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzlDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8saUJBQWlCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxHQUFHO1FBQ1osT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDdkM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUMvQyxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbEQ7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztLQUNIO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDNUI7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEdBQVc7UUFDNUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzNCO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUMxQjtJQUVELGdCQUFnQjtJQUNOLFFBQVEsQ0FBQyxJQUFZO1FBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixJQUFJLENBQUMsYUFBYSx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFGO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtLQUNGOztBQTFHSCw0QkEyR0M7OztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxZQUFZO0lBS3ZCLFlBQXFCLFFBQWtCLEVBQVcsUUFBZ0I7UUFBN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFXLGFBQVEsR0FBUixRQUFRLENBQVE7Ozs7Ozs7Ozs7S0FFakU7SUFOTSxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQW9CLEVBQUUsUUFBZ0I7UUFDL0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3BFO0lBTUQsSUFBVyxRQUFRO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQzVCLENBQUMsQ0FBQyxXQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsWUFBWSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUM1Qzs7QUFkSCxvQ0FlQzs7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxRQUFrQixFQUFFLGFBQXFCO0lBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMvRSxPQUFPLFlBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFrQixFQUFFLFFBQWdCLEVBQUUsT0FBZTtJQUM3RSxNQUFNLGdCQUFnQixHQUFHLFdBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDL0UsT0FBTyxZQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgczMgZnJvbSAnQGF3cy1jZGsvYXdzLXMzJztcbmltcG9ydCB7IExhenksIFRva2VuIH0gZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9uIGZyb20gJy4vcHJpdmF0ZS92YWxpZGF0aW9uJztcblxuLyoqXG4gKiBBbiBvdXRwdXQgYXJ0aWZhY3Qgb2YgYW4gYWN0aW9uLiBBcnRpZmFjdHMgY2FuIGJlIHVzZWQgYXMgaW5wdXQgYnkgc29tZSBhY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgQXJ0aWZhY3Qge1xuICAvKipcbiAgICogQSBzdGF0aWMgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZSBBcnRpZmFjdCBjbGFzcy5cbiAgICogTWFpbmx5IG1lYW50IHRvIGJlIHVzZWQgZnJvbSBgZGVjZGtgLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgKHJlcXVpcmVkKSBuYW1lIG9mIHRoZSBBcnRpZmFjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcnRpZmFjdChuYW1lOiBzdHJpbmcpOiBBcnRpZmFjdCB7XG4gICAgcmV0dXJuIG5ldyBBcnRpZmFjdChuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FydGlmYWN0TmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRhZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGFydGlmYWN0TmFtZT86IHN0cmluZykge1xuICAgIHZhbGlkYXRpb24udmFsaWRhdGVBcnRpZmFjdE5hbWUoYXJ0aWZhY3ROYW1lKTtcblxuICAgIHRoaXMuX2FydGlmYWN0TmFtZSA9IGFydGlmYWN0TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJ0aWZhY3ROYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FydGlmYWN0TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIEFydGlmYWN0UGF0aCBmb3IgYSBmaWxlIHdpdGhpbiB0aGlzIGFydGlmYWN0LlxuICAgKiBDZm5PdXRwdXQgaXMgaW4gdGhlIGZvcm0gXCI8YXJ0aWZhY3QtbmFtZT46OjxmaWxlLW5hbWU+XCJcbiAgICogQHBhcmFtIGZpbGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWxlXG4gICAqL1xuICBwdWJsaWMgYXRQYXRoKGZpbGVOYW1lOiBzdHJpbmcpOiBBcnRpZmFjdFBhdGgge1xuICAgIHJldHVybiBuZXcgQXJ0aWZhY3RQYXRoKHRoaXMsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgYXR0cmlidXRlIGZvciB0aGUgbmFtZSBvZiB0aGUgUzMgYnVja2V0IHdoZXJlIHRoZSBhcnRpZmFjdCBpcyBzdG9yZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1Y2tldE5hbWUoKSB7XG4gICAgcmV0dXJuIGFydGlmYWN0QXR0cmlidXRlKHRoaXMsICdCdWNrZXROYW1lJyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFydGlmYWN0IGF0dHJpYnV0ZSBmb3IgVGhlIG5hbWUgb2YgdGhlIC56aXAgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhcnRpZmFjdCB0aGF0IGlzXG4gICAqIGdlbmVyYXRlZCBieSBBV1MgQ29kZVBpcGVsaW5lLCBzdWNoIGFzIDFBQkN5WlouemlwLlxuICAgKi9cbiAgcHVibGljIGdldCBvYmplY3RLZXkoKSB7XG4gICAgcmV0dXJuIGFydGlmYWN0QXR0cmlidXRlKHRoaXMsICdPYmplY3RLZXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgYXR0cmlidXRlIG9mIHRoZSBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSAoQW1hem9uIFMzKSBVUkwgb2YgdGhlIGFydGlmYWN0LFxuICAgKiBzdWNoIGFzIGh0dHBzOi8vczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vYXJ0aWZhY3RzdG9yZWJ1Y2tldC15aXZjenc4am1hMGMvdGVzdC9UZW1wbGF0ZVNvLzFBQkN5WlouemlwLlxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKSB7XG4gICAgcmV0dXJuIGFydGlmYWN0QXR0cmlidXRlKHRoaXMsICdVUkwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gZm9yIGEgdmFsdWUgaW5zaWRlIGEgSlNPTiBmaWxlIHdpdGhpbiB0aGlzIGFydGlmYWN0LlxuICAgKiBAcGFyYW0ganNvbkZpbGUgVGhlIEpTT04gZmlsZSBuYW1lLlxuICAgKiBAcGFyYW0ga2V5TmFtZSBUaGUgaGFzaCBrZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFyYW0oanNvbkZpbGU6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFydGlmYWN0R2V0UGFyYW0odGhpcywganNvbkZpbGUsIGtleU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSAuemlwIGZpbGUgaW4gUzMgdGhhdCB0aGlzIEFydGlmYWN0IHJlcHJlc2VudHMuXG4gICAqIFVzZWQgYnkgTGFtYmRhJ3MgYENmblBhcmFtZXRlcnNDb2RlYCB3aGVuIGJlaW5nIGRlcGxveWVkIGluIGEgQ29kZVBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIGdldCBzM0xvY2F0aW9uKCk6IHMzLkxvY2F0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgb2JqZWN0S2V5OiB0aGlzLm9iamVjdEtleSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhcmJpdHJhcnkgZXh0cmEgcGF5bG9hZCB0byB0aGUgYXJ0aWZhY3QgdW5kZXIgYSBnaXZlbiBrZXkuXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgQ29kZVBpcGVsaW5lIGFjdGlvbnMgdG8gY29tbXVuaWNhdGUgZGF0YSBiZXR3ZWVuIHRoZW1zZWx2ZXMuXG4gICAqIElmIG1ldGFkYXRhIHdhcyBhbHJlYWR5IHByZXNlbnQgdW5kZXIgdGhlIGdpdmVuIGtleSxcbiAgICogaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc2V0TWV0YWRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgbWV0YWRhdGEgc3RvcmVkIGluIHRoaXMgYXJ0aWZhY3QgdW5kZXIgdGhlIGdpdmVuIGtleS5cbiAgICogSWYgdGhlcmUgaXMgbm8gbWV0YWRhdGEgc3RvcmVkIHVuZGVyIHRoZSBnaXZlbiBrZXksXG4gICAqIG51bGwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICovXG4gIHB1YmxpYyBnZXRNZXRhZGF0YShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFba2V5XTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5hcnRpZmFjdE5hbWU7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBfc2V0TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5fYXJ0aWZhY3ROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFydGlmYWN0IGFscmVhZHkgaGFzIG5hbWUgJyR7dGhpcy5fYXJ0aWZhY3ROYW1lfScsIGNhbm5vdCBvdmVycmlkZSBpdGApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hcnRpZmFjdE5hbWUgPSBuYW1lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgc3BlY2lmaWMgZmlsZSB3aXRoaW4gYW4gb3V0cHV0IGFydGlmYWN0LlxuICpcbiAqIFRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyBzcGVjaWZ5aW5nIHRoZSB0ZW1wbGF0ZSBmaWxlXG4gKiBmb3IgYSBDbG91ZEZvcm1hdGlvbiBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcnRpZmFjdFBhdGgge1xuICBwdWJsaWMgc3RhdGljIGFydGlmYWN0UGF0aChhcnRpZmFjdE5hbWU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IEFydGlmYWN0UGF0aCB7XG4gICAgcmV0dXJuIG5ldyBBcnRpZmFjdFBhdGgoQXJ0aWZhY3QuYXJ0aWZhY3QoYXJ0aWZhY3ROYW1lKSwgZmlsZU5hbWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgYXJ0aWZhY3Q6IEFydGlmYWN0LCByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nKSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9jYXRpb24oKSB7XG4gICAgY29uc3QgYXJ0aWZhY3ROYW1lID0gdGhpcy5hcnRpZmFjdC5hcnRpZmFjdE5hbWVcbiAgICAgID8gdGhpcy5hcnRpZmFjdC5hcnRpZmFjdE5hbWVcbiAgICAgIDogTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLmFydGlmYWN0LmFydGlmYWN0TmFtZSB9KTtcbiAgICByZXR1cm4gYCR7YXJ0aWZhY3ROYW1lfTo6JHt0aGlzLmZpbGVOYW1lfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJ0aWZhY3RBdHRyaWJ1dGUoYXJ0aWZhY3Q6IEFydGlmYWN0LCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgbGF6eUFydGlmYWN0TmFtZSA9IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gYXJ0aWZhY3QuYXJ0aWZhY3ROYW1lIH0pO1xuICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoeyAnRm46OkdldEFydGlmYWN0QXR0JzogW2xhenlBcnRpZmFjdE5hbWUsIGF0dHJpYnV0ZU5hbWVdIH0pO1xufVxuXG5mdW5jdGlvbiBhcnRpZmFjdEdldFBhcmFtKGFydGlmYWN0OiBBcnRpZmFjdCwganNvbkZpbGU6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGxhenlBcnRpZmFjdE5hbWUgPSBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IGFydGlmYWN0LmFydGlmYWN0TmFtZSB9KTtcbiAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHsgJ0ZuOjpHZXRQYXJhbSc6IFtsYXp5QXJ0aWZhY3ROYW1lLCBqc29uRmlsZSwga2V5TmFtZV0gfSk7XG59XG4iXX0=
\No newline at end of file