Socket
Socket
Sign inDemoInstall

@aws-cdk/assets

Package Overview
Dependencies
Maintainers
5
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/assets - npm Package Compare versions

Comparing version 0.28.0 to 0.29.0

lib/fs/copy.d.ts

9

lib/asset.d.ts

@@ -18,3 +18,3 @@ import iam = require('@aws-cdk/aws-iam');

}
export interface GenericAssetProps {
export interface AssetProps {
/**

@@ -53,3 +53,6 @@ * The disk location of the asset.

/**
* Resolved full-path location of this asset.
* The path to the asset (stringinfied token).
*
* If asset staging is disabled, this will just be the original path.
* If asset staging is enabled it will be the staged path.
*/

@@ -70,3 +73,3 @@ readonly assetPath: string;

private readonly s3Prefix;
constructor(scope: cdk.Construct, id: string, props: GenericAssetProps);
constructor(scope: cdk.Construct, id: string, props: AssetProps);
/**

@@ -73,0 +76,0 @@ * Adds CloudFormation template metadata to the specified resource with

@@ -8,2 +8,3 @@ "use strict";

const path = require("path");
const staging_1 = require("./staging");
/**

@@ -31,4 +32,7 @@ * Defines the way an asset is packaged before it is uploaded to S3.

super(scope, id);
// resolve full path
this.assetPath = path.resolve(props.path);
// stage the asset source (conditionally).
const staging = new staging_1.Staging(this, 'Stage', {
sourcePath: path.resolve(props.path)
});
this.assetPath = staging.stagedPath;
// sets isZipArchive based on the type of packaging and file extension

@@ -38,4 +42,4 @@ const allowedExtensions = ['.jar', '.zip'];

? true
: allowedExtensions.some(ext => this.assetPath.toLowerCase().endsWith(ext));
validateAssetOnDisk(this.assetPath, props.packaging);
: allowedExtensions.some(ext => staging.sourcePath.toLowerCase().endsWith(ext));
validateAssetOnDisk(staging.sourcePath, props.packaging);
// add parameters for s3 bucket and s3 key. those will be set by

@@ -120,3 +124,3 @@ // the toolkit or by CI/CD when the stack is deployed and will include

constructor(scope, id, props) {
super(scope, id, Object.assign({ packaging: AssetPackaging.File }, props));
super(scope, id, { packaging: AssetPackaging.File, ...props });
}

@@ -130,3 +134,3 @@ }

constructor(scope, id, props) {
super(scope, id, Object.assign({ packaging: AssetPackaging.ZipDirectory }, props));
super(scope, id, { packaging: AssetPackaging.ZipDirectory, ...props });
}

@@ -154,2 +158,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHNDQUF1QztBQUN2QyxvQ0FBcUM7QUFDckMseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFFOUI7O0dBRUc7QUFDSCxJQUFZLGNBV1g7QUFYRCxXQUFZLGNBQWM7SUFDeEI7OztPQUdHO0lBQ0gsc0NBQW9CLENBQUE7SUFFcEI7O09BRUc7SUFDSCwrQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVhXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBV3pCO0FBb0JEOzs7R0FHRztBQUNILE1BQWEsS0FBTSxTQUFRLEdBQUcsQ0FBQyxTQUFTO0lBc0N0QyxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsc0VBQXNFO1FBQ3RFLE1BQU0saUJBQWlCLEdBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxZQUFZO1lBQ2pFLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFOUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsZ0VBQWdFO1FBQ2hFLHNFQUFzRTtRQUN0RSw4REFBOEQ7UUFFOUQsTUFB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RjtZQUNELE1BQU07UUFFUixLQUFLLGNBQWMsQ0FBQyxJQUFJO1lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxrRUFBa0UsQ0FBQyxDQUFDO2FBQ2pHO1lBQ0QsTUFBTTtRQUVSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUN2RTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaWFtID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWlhbScpO1xuaW1wb3J0IHMzID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLXMzJyk7XG5pbXBvcnQgY2RrID0gcmVxdWlyZSgnQGF3cy1jZGsvY2RrJyk7XG5pbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSB3YXkgYW4gYXNzZXQgaXMgcGFja2FnZWQgYmVmb3JlIGl0IGlzIHVwbG9hZGVkIHRvIFMzLlxuICovXG5leHBvcnQgZW51bSBBc3NldFBhY2thZ2luZyB7XG4gIC8qKlxuICAgKiBQYXRoIHJlZmVycyB0byBhIGRpcmVjdG9yeSBvbiBkaXNrLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBpc1xuICAgKiBhcmNoaXZlZCBpbnRvIGEgLnppcC5cbiAgICovXG4gIFppcERpcmVjdG9yeSA9ICd6aXAnLFxuXG4gIC8qKlxuICAgKiBQYXRoIHJlZmVycyB0byBhIHNpbmdsZSBmaWxlIG9uIGRpc2suIFRoZSBmaWxlIGlzIHVwbG9hZGVkIGFzLWlzLlxuICAgKi9cbiAgRmlsZSA9ICdmaWxlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQXNzZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzayBsb2NhdGlvbiBvZiB0aGUgYXNzZXQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdpbmcgdHlwZSBmb3IgdGhpcyBhc3NldC5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2luZzogQXNzZXRQYWNrYWdpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwcmluY2lwYWxzIHRoYXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhZCB0aGlzIGFzc2V0IGZyb20gUzMuXG4gICAqIFlvdSBjYW4gdXNlIGBhc3NldC5ncmFudFJlYWQocHJpbmNpcGFsKWAgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyBsYXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRlcnM/OiBpYW0uSUdyYW50YWJsZVtdO1xufVxuXG4vKipcbiAqIEFuIGFzc2V0IHJlcHJlc2VudHMgYSBsb2NhbCBmaWxlIG9yIGRpcmVjdG9yeSwgd2hpY2ggaXMgYXV0b21hdGljYWxseSB1cGxvYWRlZCB0byBTM1xuICogYW5kIHRoZW4gY2FuIGJlIHJlZmVyZW5jZWQgd2l0aGluIGEgQ0RLIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXNzZXQgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCB0aGlzIGFzc2V0IGV4aXN0cyBpbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzM0J1Y2tldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQXR0cmlidXRlIHdoaWNoIHJlcHJlc2VudHMgdGhlIFMzIG9iamVjdCBrZXkgb2YgdGhpcyBhc3NldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzM09iamVjdEtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgUzMgVVJMIG9mIHRoaXMgYXNzZXQuXG4gICAqIEBleGFtcGxlIGh0dHBzOi8vczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20vYnVja2V0L2tleVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHMzVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIGZ1bGwtcGF0aCBsb2NhdGlvbiBvZiB0aGlzIGFzc2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2V0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IGluIHdoaWNoIHRoaXMgYXNzZXQgcmVzaWRlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGlzIGFzc2V0IGlzIGEgemlwIGFyY2hpdmUuIEFsbG93cyBjb25zdHJ1Y3RzIHRvIGVuc3VyZSB0aGF0IHRoZVxuICAgKiBjb3JyZWN0IGZpbGUgdHlwZSB3YXMgdXNlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1ppcEFyY2hpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBTMyBwcmVmaXggd2hlcmUgYWxsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGlzIGFzc2V0IGFyZSBzdG9yZWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgczNQcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdlbmVyaWNBc3NldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIHJlc29sdmUgZnVsbCBwYXRoXG4gICAgdGhpcy5hc3NldFBhdGggPSBwYXRoLnJlc29sdmUocHJvcHMucGF0aCk7XG5cbiAgICAvLyBzZXRzIGlzWmlwQXJjaGl2ZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBwYWNrYWdpbmcgYW5kIGZpbGUgZXh0ZW5zaW9uXG4gICAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnM6IHN0cmluZ1tdID0gWycuamFyJywgJy56aXAnXTtcbiAgICB0aGlzLmlzWmlwQXJjaGl2ZSA9IHByb3BzLnBhY2thZ2luZyA9PT0gQXNzZXRQYWNrYWdpbmcuWmlwRGlyZWN0b3J5XG4gICAgICA/IHRydWVcbiAgICAgIDogYWxsb3dlZEV4dGVuc2lvbnMuc29tZShleHQgPT4gdGhpcy5hc3NldFBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpKTtcblxuICAgIHZhbGlkYXRlQXNzZXRPbkRpc2sodGhpcy5hc3NldFBhdGgsIHByb3BzLnBhY2thZ2luZyk7XG5cbiAgICAvLyBhZGQgcGFyYW1ldGVycyBmb3IgczMgYnVja2V0IGFuZCBzMyBrZXkuIHRob3NlIHdpbGwgYmUgc2V0IGJ5XG4gICAgLy8gdGhlIHRvb2xraXQgb3IgYnkgQ0kvQ0Qgd2hlbiB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgYW5kIHdpbGwgaW5jbHVkZVxuICAgIC8vIHRoZSBuYW1lIG9mIHRoZSBidWNrZXQgYW5kIHRoZSBTMyBrZXkgd2hlcmUgdGhlIGNvZGUgbGl2ZXMuXG5cbiAgICBjb25zdCBidWNrZXRQYXJhbSA9IG5ldyBjZGsuQ2ZuUGFyYW1ldGVyKHRoaXMsICdTM0J1Y2tldCcsIHtcbiAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgZGVzY3JpcHRpb246IGBTMyBidWNrZXQgZm9yIGFzc2V0IFwiJHt0aGlzLm5vZGUucGF0aH1cImAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYXJhbSA9IG5ldyBjZGsuQ2ZuUGFyYW1ldGVyKHRoaXMsICdTM1ZlcnNpb25LZXknLCB7XG4gICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUzMga2V5IGZvciBhc3NldCB2ZXJzaW9uIFwiJHt0aGlzLm5vZGUucGF0aH1cImBcbiAgICB9KTtcblxuICAgIHRoaXMuczNCdWNrZXROYW1lID0gYnVja2V0UGFyYW0uc3RyaW5nVmFsdWU7XG4gICAgdGhpcy5zM1ByZWZpeCA9IGNkay5Gbi5zZWxlY3QoMCwgY2RrLkZuLnNwbGl0KGN4YXBpLkFTU0VUX1BSRUZJWF9TRVBBUkFUT1IsIGtleVBhcmFtLnN0cmluZ1ZhbHVlKSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBzM0ZpbGVuYW1lID0gY2RrLkZuLnNlbGVjdCgxLCBjZGsuRm4uc3BsaXQoY3hhcGkuQVNTRVRfUFJFRklYX1NFUEFSQVRPUiwga2V5UGFyYW0uc3RyaW5nVmFsdWUpKS50b1N0cmluZygpO1xuICAgIHRoaXMuczNPYmplY3RLZXkgPSBgJHt0aGlzLnMzUHJlZml4fSR7czNGaWxlbmFtZX1gO1xuXG4gICAgdGhpcy5idWNrZXQgPSBzMy5CdWNrZXQuaW1wb3J0KHRoaXMsICdBc3NldEJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuczNCdWNrZXROYW1lXG4gICAgfSk7XG5cbiAgICAvLyBmb3JtIHRoZSBzMyBVUkwgb2YgdGhlIG9iamVjdCBrZXlcbiAgICB0aGlzLnMzVXJsID0gdGhpcy5idWNrZXQudXJsRm9yT2JqZWN0KHRoaXMuczNPYmplY3RLZXkpO1xuXG4gICAgLy8gYXR0YWNoIG1ldGFkYXRhIHRvIHRoZSBsYW1iZGEgZnVuY3Rpb24gd2hpY2ggaW5jbHVkZXMgaW5mb3JtYXRpb25cbiAgICAvLyBmb3IgdG9vbGluZyB0byBiZSBhYmxlIHRvIHBhY2thZ2UgYW5kIHVwbG9hZCBhIGRpcmVjdG9yeSB0byB0aGVcbiAgICAvLyBzMyBidWNrZXQgYW5kIHBsdWcgaW4gdGhlIGJ1Y2tldCBuYW1lIGFuZCBrZXkgaW4gdGhlIGNvcnJlY3RcbiAgICAvLyBwYXJhbWV0ZXJzLlxuICAgIGNvbnN0IGFzc2V0OiBjeGFwaS5GaWxlQXNzZXRNZXRhZGF0YUVudHJ5ID0ge1xuICAgICAgcGF0aDogdGhpcy5hc3NldFBhdGgsXG4gICAgICBpZDogdGhpcy5ub2RlLnVuaXF1ZUlkLFxuICAgICAgcGFja2FnaW5nOiBwcm9wcy5wYWNrYWdpbmcsXG4gICAgICBzM0J1Y2tldFBhcmFtZXRlcjogYnVja2V0UGFyYW0ubG9naWNhbElkLFxuICAgICAgczNLZXlQYXJhbWV0ZXI6IGtleVBhcmFtLmxvZ2ljYWxJZCxcbiAgICB9O1xuXG4gICAgdGhpcy5ub2RlLmFkZE1ldGFkYXRhKGN4YXBpLkFTU0VUX01FVEFEQVRBLCBhc3NldCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiAocHJvcHMucmVhZGVycyB8fCBbXSkpIHtcbiAgICAgIHRoaXMuZ3JhbnRSZWFkKHJlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgbWV0YWRhdGEgdG8gdGhlIHNwZWNpZmllZCByZXNvdXJjZSB3aXRoXG4gICAqIGluZm9ybWF0aW9uIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHJlc291cmNlIHByb3BlcnR5IGlzIG1hcHBlZCB0byB0aGlzIGxvY2FsXG4gICAqIGFzc2V0LiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXMgU0FNIENMSSB0byBwcm92aWRlIGxvY2FsXG4gICAqIGV4cGVyaWVuY2Ugc3VjaCBhcyBsb2NhbCBpbnZvY2F0aW9uIGFuZCBkZWJ1Z2dpbmcgb2YgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQXNzZXQgbWV0YWRhdGEgd2lsbCBvbmx5IGJlIGluY2x1ZGVkIGlmIHRoZSBzdGFjayBpcyBzeW50aGVzaXplZCB3aXRoIHRoZVxuICAgKiBcImF3czpjZGs6ZW5hYmxlLWFzc2V0LW1ldGFkYXRhXCIgY29udGV4dCBrZXkgZGVmaW5lZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHRcbiAgICogYmVoYXZpb3Igd2hlbiBzeW50aGVzaXppbmcgdmlhIHRoZSBDREsgVG9vbGtpdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzbGFicy9hd3MtY2RrL2lzc3Vlcy8xNDMyXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZSBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2Ugd2hpY2ggaXMgdXNpbmcgdGhpcyBhc3NldC5cbiAgICogQHBhcmFtIHJlc291cmNlUHJvcGVydHkgVGhlIHByb3BlcnR5IG5hbWUgd2hlcmUgdGhpcyBhc3NldCBpcyByZWZlcmVuY2VkXG4gICAqIChlLmcuIFwiQ29kZVwiIGZvciBBV1M6OkxhbWJkYTo6RnVuY3Rpb24pXG4gICAqL1xuICBwdWJsaWMgYWRkUmVzb3VyY2VNZXRhZGF0YShyZXNvdXJjZTogY2RrLkNmblJlc291cmNlLCByZXNvdXJjZVByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubm9kZS5nZXRDb250ZXh0KGN4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX0VOQUJMRURfQ09OVEVYVCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm90IGVuYWJsZWRcbiAgICB9XG5cbiAgICAvLyB0ZWxsIHRvb2xzIHN1Y2ggYXMgU0FNIENMSSB0aGF0IHRoZSBcIkNvZGVcIiBwcm9wZXJ0eSBvZiB0aGlzIHJlc291cmNlXG4gICAgLy8gcG9pbnRzIHRvIGEgbG9jYWwgcGF0aCBpbiBvcmRlciB0byBlbmFibGUgbG9jYWwgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgIHJlc291cmNlLm9wdGlvbnMubWV0YWRhdGEgPSByZXNvdXJjZS5vcHRpb25zLm1ldGFkYXRhIHx8IHsgfTtcbiAgICByZXNvdXJjZS5vcHRpb25zLm1ldGFkYXRhW2N4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX1BBVEhfS0VZXSA9IHRoaXMuYXNzZXRQYXRoO1xuICAgIHJlc291cmNlLm9wdGlvbnMubWV0YWRhdGFbY3hhcGkuQVNTRVRfUkVTT1VSQ0VfTUVUQURBVEFfUFJPUEVSVFlfS0VZXSA9IHJlc291cmNlUHJvcGVydHk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHByaW5jaXBhbCBvbiB0aGUgYXNzZXQncyBTMyBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgLy8gV2UgZ2l2ZSBwZXJtaXNzaW9ucyBvbiBhbGwgZmlsZXMgd2l0aCB0aGUgc2FtZSBwcmVmaXguIFByZXN1bWFibHlcbiAgICAvLyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZmlsZSB3aWxsIGhhdmUgdGhlIHNhbWUgcHJlZml4XG4gICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gYWNjaWRlbnRhbGx5IHJldm9rZSBwZXJtaXNzaW9uIG9uIG9sZCB2ZXJzaW9uc1xuICAgIC8vIHdoZW4gZGVwbG95aW5nIGEgbmV3IHZlcnNpb24uXG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIGAke3RoaXMuczNQcmVmaXh9KmApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUFzc2V0UHJvcHMge1xuICAvKipcbiAgICogRmlsZSBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcHJpbmNpcGFscyB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgdGhpcyBmaWxlIGFzc2V0IGZyb20gUzMuXG4gICAqIFlvdSBjYW4gdXNlIGBhc3NldC5ncmFudFJlYWQocHJpbmNpcGFsKWAgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyBsYXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRlcnM/OiBpYW0uSUdyYW50YWJsZVtdO1xufVxuXG4vKipcbiAqIEFuIGFzc2V0IHRoYXQgcmVwcmVzZW50cyBhIGZpbGUgb24gZGlzay5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVBc3NldCBleHRlbmRzIEFzc2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaWxlQXNzZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgeyBwYWNrYWdpbmc6IEFzc2V0UGFja2FnaW5nLkZpbGUsIC4uLnByb3BzIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRGlyZWN0b3J5QXNzZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwcmluY2lwYWxzIHRoYXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhZCB0aGlzIFpJUCBmaWxlIGZyb20gUzMuXG4gICAqIFlvdSBjYW4gdXNlIGBhc3NldC5ncmFudFJlYWQocHJpbmNpcGFsKWAgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyBsYXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRlcnM/OiBpYW0uSUdyYW50YWJsZVtdO1xufVxuXG4vKipcbiAqIEFuIGFzc2V0IHRoYXQgcmVwcmVzZW50cyBhIFpJUCBhcmNoaXZlIG9mIGEgZGlyZWN0b3J5IG9uIGRpc2suXG4gKi9cbmV4cG9ydCBjbGFzcyBaaXBEaXJlY3RvcnlBc3NldCBleHRlbmRzIEFzc2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBaaXBEaXJlY3RvcnlBc3NldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7IHBhY2thZ2luZzogQXNzZXRQYWNrYWdpbmcuWmlwRGlyZWN0b3J5LCAuLi5wcm9wcyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFzc2V0T25EaXNrKGFzc2V0UGF0aDogc3RyaW5nLCBwYWNrYWdpbmc6IEFzc2V0UGFja2FnaW5nKSB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhhc3NldFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhc3NldCBhdCAke2Fzc2V0UGF0aH1gKTtcbiAgfVxuXG4gIHN3aXRjaCAocGFja2FnaW5nKSB7XG4gICAgY2FzZSBBc3NldFBhY2thZ2luZy5aaXBEaXJlY3Rvcnk6XG4gICAgICBpZiAoIWZzLnN0YXRTeW5jKGFzc2V0UGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXNzZXRQYXRofSBpcyBleHBlY3RlZCB0byBiZSBhIGRpcmVjdG9yeSB3aGVuIGFzc2V0IHBhY2thZ2luZyBpcyAnemlwJ2ApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFzc2V0UGFja2FnaW5nLkZpbGU6XG4gICAgICBpZiAoIWZzLnN0YXRTeW5jKGFzc2V0UGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Fzc2V0UGF0aH0gaXMgZXhwZWN0ZWQgdG8gYmUgYSByZWd1bGFyIGZpbGUgd2hlbiBhc3NldCBwYWNrYWdpbmcgaXMgJ2ZpbGUnYCk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFzc2V0IHBhY2thZ2luZyBmb3JtYXQ6ICR7cGFja2FnaW5nfWApO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHNDQUF1QztBQUN2QyxvQ0FBcUM7QUFDckMseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFDOUIsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsSUFBWSxjQVdYO0FBWEQsV0FBWSxjQUFjO0lBQ3hCOzs7T0FHRztJQUNILHNDQUFvQixDQUFBO0lBRXBCOztPQUVHO0lBQ0gsK0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFYVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQVd6QjtBQW9CRDs7O0dBR0c7QUFDSCxNQUFhLEtBQU0sU0FBUSxHQUFHLENBQUMsU0FBUztJQXlDdEMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUFpQjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDBDQUEwQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ3JDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVwQyxzRUFBc0U7UUFDdEUsTUFBTSxpQkFBaUIsR0FBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFlBQVk7WUFDakUsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMs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S0FBSyxjQUFjLENBQUMsWUFBWTtZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsOERBQThELENBQUMsQ0FBQzthQUM3RjtZQUNELE1BQU07UUFFUixLQUFLLGNBQWMsQ0FBQyxJQUFJO1lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxrRUFBa0UsQ0FBQyxDQUFDO2FBQ2pHO1lBQ0QsTUFBTTtRQUVSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUN2RTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaWFtID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWlhbScpO1xuaW1wb3J0IHMzID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLXMzJyk7XG5pbXBvcnQgY2RrID0gcmVxdWlyZSgnQGF3cy1jZGsvY2RrJyk7XG5pbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmltcG9ydCB7IFN0YWdpbmcgfSBmcm9tICcuL3N0YWdpbmcnO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIHdheSBhbiBhc3NldCBpcyBwYWNrYWdlZCBiZWZvcmUgaXQgaXMgdXBsb2FkZWQgdG8gUzMuXG4gKi9cbmV4cG9ydCBlbnVtIEFzc2V0UGFja2FnaW5nIHtcbiAgLyoqXG4gICAqIFBhdGggcmVmZXJzIHRvIGEgZGlyZWN0b3J5IG9uIGRpc2ssIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGlzXG4gICAqIGFyY2hpdmVkIGludG8gYSAuemlwLlxuICAgKi9cbiAgWmlwRGlyZWN0b3J5ID0gJ3ppcCcsXG5cbiAgLyoqXG4gICAqIFBhdGggcmVmZXJzIHRvIGEgc2luZ2xlIGZpbGUgb24gZGlzay4gVGhlIGZpbGUgaXMgdXBsb2FkZWQgYXMtaXMuXG4gICAqL1xuICBGaWxlID0gJ2ZpbGUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGRpc2sgbG9jYXRpb24gb2YgdGhlIGFzc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnaW5nIHR5cGUgZm9yIHRoaXMgYXNzZXQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdpbmc6IEFzc2V0UGFja2FnaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcHJpbmNpcGFscyB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgdGhpcyBhc3NldCBmcm9tIFMzLlxuICAgKiBZb3UgY2FuIHVzZSBgYXNzZXQuZ3JhbnRSZWFkKHByaW5jaXBhbClgIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgbGF0ZXIuXG4gICAqL1xuICByZWFkb25seSByZWFkZXJzPzogaWFtLklHcmFudGFibGVbXTtcbn1cblxuLyoqXG4gKiBBbiBhc3NldCByZXByZXNlbnRzIGEgbG9jYWwgZmlsZSBvciBkaXJlY3RvcnksIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgdXBsb2FkZWQgdG8gUzNcbiAqIGFuZCB0aGVuIGNhbiBiZSByZWZlcmVuY2VkIHdpdGhpbiBhIENESyBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0IGV4dGVuZHMgY2RrLkNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgdGhhdCByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBidWNrZXQgdGhpcyBhc3NldCBleGlzdHMgaW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSB3aGljaCByZXByZXNlbnRzIHRoZSBTMyBvYmplY3Qga2V5IG9mIHRoaXMgYXNzZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgczNPYmplY3RLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogQXR0cmlidXRlIHdoaWNoIHJlcHJlc2VudHMgdGhlIFMzIFVSTCBvZiB0aGlzIGFzc2V0LlxuICAgKiBAZXhhbXBsZSBodHRwczovL3MzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tL2J1Y2tldC9rZXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzM1VybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgYXNzZXQgKHN0cmluZ2luZmllZCB0b2tlbikuXG4gICAqXG4gICAqIElmIGFzc2V0IHN0YWdpbmcgaXMgZGlzYWJsZWQsIHRoaXMgd2lsbCBqdXN0IGJlIHRoZSBvcmlnaW5hbCBwYXRoLlxuICAgKiBJZiBhc3NldCBzdGFnaW5nIGlzIGVuYWJsZWQgaXQgd2lsbCBiZSB0aGUgc3RhZ2VkIHBhdGguXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZXRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgaW4gd2hpY2ggdGhpcyBhc3NldCByZXNpZGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoaXMgYXNzZXQgaXMgYSB6aXAgYXJjaGl2ZS4gQWxsb3dzIGNvbnN0cnVjdHMgdG8gZW5zdXJlIHRoYXQgdGhlXG4gICAqIGNvcnJlY3QgZmlsZSB0eXBlIHdhcyB1c2VkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzWmlwQXJjaGl2ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIFMzIHByZWZpeCB3aGVyZSBhbGwgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoaXMgYXNzZXQgYXJlIHN0b3JlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzM1ByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXNzZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBzdGFnZSB0aGUgYXNzZXQgc291cmNlIChjb25kaXRpb25hbGx5KS5cbiAgICBjb25zdCBzdGFnaW5nID0gbmV3IFN0YWdpbmcodGhpcywgJ1N0YWdlJywge1xuICAgICAgc291cmNlUGF0aDogcGF0aC5yZXNvbHZlKHByb3BzLnBhdGgpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2V0UGF0aCA9IHN0YWdpbmcuc3RhZ2VkUGF0aDtcblxuICAgIC8vIHNldHMgaXNaaXBBcmNoaXZlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHBhY2thZ2luZyBhbmQgZmlsZSBleHRlbnNpb25cbiAgICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbJy5qYXInLCAnLnppcCddO1xuICAgIHRoaXMuaXNaaXBBcmNoaXZlID0gcHJvcHMucGFja2FnaW5nID09PSBBc3NldFBhY2thZ2luZy5aaXBEaXJlY3RvcnlcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBhbGxvd2VkRXh0ZW5zaW9ucy5zb21lKGV4dCA9PiBzdGFnaW5nLnNvdXJjZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpKTtcblxuICAgIHZhbGlkYXRlQXNzZXRPbkRpc2soc3RhZ2luZy5zb3VyY2VQYXRoLCBwcm9wcy5wYWNrYWdpbmcpO1xuXG4gICAgLy8gYWRkIHBhcmFtZXRlcnMgZm9yIHMzIGJ1Y2tldCBhbmQgczMga2V5LiB0aG9zZSB3aWxsIGJlIHNldCBieVxuICAgIC8vIHRoZSB0b29sa2l0IG9yIGJ5IENJL0NEIHdoZW4gdGhlIHN0YWNrIGlzIGRlcGxveWVkIGFuZCB3aWxsIGluY2x1ZGVcbiAgICAvLyB0aGUgbmFtZSBvZiB0aGUgYnVja2V0IGFuZCB0aGUgUzMga2V5IHdoZXJlIHRoZSBjb2RlIGxpdmVzLlxuXG4gICAgY29uc3QgYnVja2V0UGFyYW0gPSBuZXcgY2RrLkNmblBhcmFtZXRlcih0aGlzLCAnUzNCdWNrZXQnLCB7XG4gICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUzMgYnVja2V0IGZvciBhc3NldCBcIiR7dGhpcy5ub2RlLnBhdGh9XCJgLFxuICAgIH0pO1xuXG4gICAgY29uc3Qga2V5UGFyYW0gPSBuZXcgY2RrLkNmblBhcmFtZXRlcih0aGlzLCAnUzNWZXJzaW9uS2V5Jywge1xuICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICBkZXNjcmlwdGlvbjogYFMzIGtleSBmb3IgYXNzZXQgdmVyc2lvbiBcIiR7dGhpcy5ub2RlLnBhdGh9XCJgXG4gICAgfSk7XG5cbiAgICB0aGlzLnMzQnVja2V0TmFtZSA9IGJ1Y2tldFBhcmFtLnN0cmluZ1ZhbHVlO1xuICAgIHRoaXMuczNQcmVmaXggPSBjZGsuRm4uc2VsZWN0KDAsIGNkay5Gbi5zcGxpdChjeGFwaS5BU1NFVF9QUkVGSVhfU0VQQVJBVE9SLCBrZXlQYXJhbS5zdHJpbmdWYWx1ZSkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgczNGaWxlbmFtZSA9IGNkay5Gbi5zZWxlY3QoMSwgY2RrLkZuLnNwbGl0KGN4YXBpLkFTU0VUX1BSRUZJWF9TRVBBUkFUT1IsIGtleVBhcmFtLnN0cmluZ1ZhbHVlKSkudG9TdHJpbmcoKTtcbiAgICB0aGlzLnMzT2JqZWN0S2V5ID0gYCR7dGhpcy5zM1ByZWZpeH0ke3MzRmlsZW5hbWV9YDtcblxuICAgIHRoaXMuYnVja2V0ID0gczMuQnVja2V0LmltcG9ydCh0aGlzLCAnQXNzZXRCdWNrZXQnLCB7XG4gICAgICBidWNrZXROYW1lOiB0aGlzLnMzQnVja2V0TmFtZVxuICAgIH0pO1xuXG4gICAgLy8gZm9ybSB0aGUgczMgVVJMIG9mIHRoZSBvYmplY3Qga2V5XG4gICAgdGhpcy5zM1VybCA9IHRoaXMuYnVja2V0LnVybEZvck9iamVjdCh0aGlzLnMzT2JqZWN0S2V5KTtcblxuICAgIC8vIGF0dGFjaCBtZXRhZGF0YSB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGluY2x1ZGVzIGluZm9ybWF0aW9uXG4gICAgLy8gZm9yIHRvb2xpbmcgdG8gYmUgYWJsZSB0byBwYWNrYWdlIGFuZCB1cGxvYWQgYSBkaXJlY3RvcnkgdG8gdGhlXG4gICAgLy8gczMgYnVja2V0IGFuZCBwbHVnIGluIHRoZSBidWNrZXQgbmFtZSBhbmQga2V5IGluIHRoZSBjb3JyZWN0XG4gICAgLy8gcGFyYW1ldGVycy5cbiAgICBjb25zdCBhc3NldDogY3hhcGkuRmlsZUFzc2V0TWV0YWRhdGFFbnRyeSA9IHtcbiAgICAgIHBhdGg6IHRoaXMuYXNzZXRQYXRoLFxuICAgICAgaWQ6IHRoaXMubm9kZS51bmlxdWVJZCxcbiAgICAgIHBhY2thZ2luZzogcHJvcHMucGFja2FnaW5nLFxuICAgICAgczNCdWNrZXRQYXJhbWV0ZXI6IGJ1Y2tldFBhcmFtLmxvZ2ljYWxJZCxcbiAgICAgIHMzS2V5UGFyYW1ldGVyOiBrZXlQYXJhbS5sb2dpY2FsSWQsXG4gICAgfTtcblxuICAgIHRoaXMubm9kZS5hZGRNZXRhZGF0YShjeGFwaS5BU1NFVF9NRVRBREFUQSwgYXNzZXQpO1xuXG4gICAgZm9yIChjb25zdCByZWFkZXIgb2YgKHByb3BzLnJlYWRlcnMgfHwgW10pKSB7XG4gICAgICB0aGlzLmdyYW50UmVhZChyZWFkZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIG1ldGFkYXRhIHRvIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2Ugd2l0aFxuICAgKiBpbmZvcm1hdGlvbiB0aGF0IGluZGljYXRlcyB3aGljaCByZXNvdXJjZSBwcm9wZXJ0eSBpcyBtYXBwZWQgdG8gdGhpcyBsb2NhbFxuICAgKiBhc3NldC4gVGhpcyBjYW4gYmUgdXNlZCBieSB0b29scyBzdWNoIGFzIFNBTSBDTEkgdG8gcHJvdmlkZSBsb2NhbFxuICAgKiBleHBlcmllbmNlIHN1Y2ggYXMgbG9jYWwgaW52b2NhdGlvbiBhbmQgZGVidWdnaW5nIG9mIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEFzc2V0IG1ldGFkYXRhIHdpbGwgb25seSBiZSBpbmNsdWRlZCBpZiB0aGUgc3RhY2sgaXMgc3ludGhlc2l6ZWQgd2l0aCB0aGVcbiAgICogXCJhd3M6Y2RrOmVuYWJsZS1hc3NldC1tZXRhZGF0YVwiIGNvbnRleHQga2V5IGRlZmluZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0XG4gICAqIGJlaGF2aW9yIHdoZW4gc3ludGhlc2l6aW5nIHZpYSB0aGUgQ0RLIFRvb2xraXQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3c2xhYnMvYXdzLWNkay9pc3N1ZXMvMTQzMlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHdoaWNoIGlzIHVzaW5nIHRoaXMgYXNzZXQuXG4gICAqIEBwYXJhbSByZXNvdXJjZVByb3BlcnR5IFRoZSBwcm9wZXJ0eSBuYW1lIHdoZXJlIHRoaXMgYXNzZXQgaXMgcmVmZXJlbmNlZFxuICAgKiAoZS5nLiBcIkNvZGVcIiBmb3IgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uKVxuICAgKi9cbiAgcHVibGljIGFkZFJlc291cmNlTWV0YWRhdGEocmVzb3VyY2U6IGNkay5DZm5SZXNvdXJjZSwgcmVzb3VyY2VQcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm5vZGUuZ2V0Q29udGV4dChjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9FTkFCTEVEX0NPTlRFWFQpKSB7XG4gICAgICByZXR1cm47IC8vIG5vdCBlbmFibGVkXG4gICAgfVxuXG4gICAgLy8gdGVsbCB0b29scyBzdWNoIGFzIFNBTSBDTEkgdGhhdCB0aGUgXCJDb2RlXCIgcHJvcGVydHkgb2YgdGhpcyByZXNvdXJjZVxuICAgIC8vIHBvaW50cyB0byBhIGxvY2FsIHBhdGggaW4gb3JkZXIgdG8gZW5hYmxlIGxvY2FsIGludm9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbi5cbiAgICByZXNvdXJjZS5vcHRpb25zLm1ldGFkYXRhID0gcmVzb3VyY2Uub3B0aW9ucy5tZXRhZGF0YSB8fCB7IH07XG4gICAgcmVzb3VyY2Uub3B0aW9ucy5tZXRhZGF0YVtjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9QQVRIX0tFWV0gPSB0aGlzLmFzc2V0UGF0aDtcbiAgICByZXNvdXJjZS5vcHRpb25zLm1ldGFkYXRhW2N4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX1BST1BFUlRZX0tFWV0gPSByZXNvdXJjZVByb3BlcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBwcmluY2lwYWwgb24gdGhlIGFzc2V0J3MgUzMgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIC8vIFdlIGdpdmUgcGVybWlzc2lvbnMgb24gYWxsIGZpbGVzIHdpdGggdGhlIHNhbWUgcHJlZml4LiBQcmVzdW1hYmx5XG4gICAgLy8gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIGZpbGUgd2lsbCBoYXZlIHRoZSBzYW1lIHByZWZpeFxuICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxseSByZXZva2UgcGVybWlzc2lvbiBvbiBvbGQgdmVyc2lvbnNcbiAgICAvLyB3aGVuIGRlcGxveWluZyBhIG5ldyB2ZXJzaW9uLlxuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZChncmFudGVlLCBgJHt0aGlzLnMzUHJlZml4fSpgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVBc3NldFByb3BzIHtcbiAgLyoqXG4gICAqIEZpbGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHByaW5jaXBhbHMgdGhhdCBzaG91bGQgYmUgYWJsZSB0byByZWFkIHRoaXMgZmlsZSBhc3NldCBmcm9tIFMzLlxuICAgKiBZb3UgY2FuIHVzZSBgYXNzZXQuZ3JhbnRSZWFkKHByaW5jaXBhbClgIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgbGF0ZXIuXG4gICAqL1xuICByZWFkb25seSByZWFkZXJzPzogaWFtLklHcmFudGFibGVbXTtcbn1cblxuLyoqXG4gKiBBbiBhc3NldCB0aGF0IHJlcHJlc2VudHMgYSBmaWxlIG9uIGRpc2suXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlQXNzZXQgZXh0ZW5kcyBBc3NldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlsZUFzc2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHsgcGFja2FnaW5nOiBBc3NldFBhY2thZ2luZy5GaWxlLCAuLi5wcm9wcyB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFppcERpcmVjdG9yeUFzc2V0UHJvcHMge1xuICAvKipcbiAgICogUGF0aCBvZiB0aGUgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcHJpbmNpcGFscyB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgdGhpcyBaSVAgZmlsZSBmcm9tIFMzLlxuICAgKiBZb3UgY2FuIHVzZSBgYXNzZXQuZ3JhbnRSZWFkKHByaW5jaXBhbClgIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgbGF0ZXIuXG4gICAqL1xuICByZWFkb25seSByZWFkZXJzPzogaWFtLklHcmFudGFibGVbXTtcbn1cblxuLyoqXG4gKiBBbiBhc3NldCB0aGF0IHJlcHJlc2VudHMgYSBaSVAgYXJjaGl2ZSBvZiBhIGRpcmVjdG9yeSBvbiBkaXNrLlxuICovXG5leHBvcnQgY2xhc3MgWmlwRGlyZWN0b3J5QXNzZXQgZXh0ZW5kcyBBc3NldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogWmlwRGlyZWN0b3J5QXNzZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgeyBwYWNrYWdpbmc6IEFzc2V0UGFja2FnaW5nLlppcERpcmVjdG9yeSwgLi4ucHJvcHMgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBc3NldE9uRGlzayhhc3NldFBhdGg6IHN0cmluZywgcGFja2FnaW5nOiBBc3NldFBhY2thZ2luZykge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXNzZXRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYXNzZXQgYXQgJHthc3NldFBhdGh9YCk7XG4gIH1cblxuICBzd2l0Y2ggKHBhY2thZ2luZykge1xuICAgIGNhc2UgQXNzZXRQYWNrYWdpbmcuWmlwRGlyZWN0b3J5OlxuICAgICAgaWYgKCFmcy5zdGF0U3luYyhhc3NldFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Fzc2V0UGF0aH0gaXMgZXhwZWN0ZWQgdG8gYmUgYSBkaXJlY3Rvcnkgd2hlbiBhc3NldCBwYWNrYWdpbmcgaXMgJ3ppcCdgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBBc3NldFBhY2thZ2luZy5GaWxlOlxuICAgICAgaWYgKCFmcy5zdGF0U3luYyhhc3NldFBhdGgpLmlzRmlsZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthc3NldFBhdGh9IGlzIGV4cGVjdGVkIHRvIGJlIGEgcmVndWxhciBmaWxlIHdoZW4gYXNzZXQgcGFja2FnaW5nIGlzICdmaWxlJ2ApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhc3NldCBwYWNrYWdpbmcgZm9ybWF0OiAke3BhY2thZ2luZ31gKTtcbiAgfVxufVxuIl19
export * from './asset';
export * from './staging';

@@ -7,2 +7,3 @@ "use strict";

__export(require("./asset"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXNzZXQnO1xuIl19
__export(require("./staging"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUF3QjtBQUN4QiwrQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Fzc2V0JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhZ2luZyc7XG4iXX0=
{
"name": "@aws-cdk/assets",
"version": "0.28.0",
"version": "0.29.0",
"description": "Integration of CDK apps with local assets",

@@ -32,3 +32,4 @@ "main": "lib/index.js",

"type": "git",
"url": "https://github.com/awslabs/aws-cdk.git"
"url": "https://github.com/awslabs/aws-cdk.git",
"directory": "packages/@aws-cdk/assets"
},

@@ -45,2 +46,7 @@ "scripts": {

},
"cdk-build": {
"pre": [
"cd test/fs && tar -xzvf fixtures.tar.gz"
]
},
"keywords": [

@@ -59,23 +65,29 @@ "aws",

"devDependencies": {
"@aws-cdk/assert": "^0.28.0",
"aws-cdk": "^0.28.0",
"cdk-build-tools": "^0.28.0",
"cdk-integ-tools": "^0.28.0",
"pkglint": "^0.28.0"
"@aws-cdk/assert": "^0.29.0",
"@types/minimatch": "^3.0.3",
"aws-cdk": "^0.29.0",
"cdk-build-tools": "^0.29.0",
"cdk-integ-tools": "^0.29.0",
"pkglint": "^0.29.0"
},
"dependencies": {
"@aws-cdk/aws-iam": "^0.28.0",
"@aws-cdk/aws-s3": "^0.28.0",
"@aws-cdk/cdk": "^0.28.0",
"@aws-cdk/cx-api": "^0.28.0"
"@aws-cdk/aws-iam": "^0.29.0",
"@aws-cdk/aws-s3": "^0.29.0",
"@aws-cdk/cdk": "^0.29.0",
"@aws-cdk/cx-api": "^0.29.0",
"minimatch": "^3.0.4"
},
"homepage": "https://github.com/awslabs/aws-cdk",
"peerDependencies": {
"@aws-cdk/aws-iam": "^0.28.0",
"@aws-cdk/aws-s3": "^0.28.0",
"@aws-cdk/cdk": "^0.28.0"
"@aws-cdk/aws-iam": "^0.29.0",
"@aws-cdk/aws-s3": "^0.29.0",
"@aws-cdk/cdk": "^0.29.0",
"@aws-cdk/cx-api": "^0.29.0"
},
"engines": {
"node": ">= 8.10.0"
}
}
},
"bundledDependencies": [
"minimatch"
]
}

@@ -12,3 +12,10 @@ import { Test } from 'nodeunit';

'asset metadata is only emitted if ASSET_RESOURCE_METADATA_ENABLED_CONTEXT is defined'(test: Test): void;
'staging': {
'copy file assets under .assets/fingerprint.ext'(test: Test): void;
'copy directory under .assets/fingerprint/**'(test: Test): void;
'staging path is relative if the dir is below the working directory'(test: Test): void;
'if staging directory is absolute, asset path is absolute'(test: Test): void;
'cdk metadata points to staged asset'(test: Test): void;
};
};
export = _default;

@@ -5,11 +5,17 @@ "use strict";

const cdk = require("@aws-cdk/cdk");
const cdk_1 = require("@aws-cdk/cdk");
const cxapi = require("@aws-cdk/cx-api");
const fs = require("fs");
const os = require("os");
const path = require("path");
const asset_1 = require("../lib/asset");
const SAMPLE_ASSET_DIR = path.join(__dirname, 'sample-asset-directory');
function mkdtempSync() {
return fs.mkdtempSync(path.join(os.tmpdir(), 'test.assets'));
}
module.exports = {
'simple use case'(test) {
const stack = new cdk.Stack();
const dirPath = path.join(__dirname, 'sample-asset-directory');
const asset = new asset_1.ZipDirectoryAsset(stack, 'MyAsset', {
path: dirPath
path: SAMPLE_ASSET_DIR
});

@@ -20,5 +26,6 @@ // verify that metadata contains an "aws:cdk:asset" entry with

test.ok(entry, 'found metadata entry');
// console.error(JSON.stringify(stack.node.resolve(entry!.data)));
// verify that now the template contains parameters for this asset
const template = assert_1.SynthUtils.toCloudFormation(stack);
test.deepEqual(stack.node.resolve(entry.data), {
path: dirPath,
path: SAMPLE_ASSET_DIR,
id: 'MyAsset',

@@ -29,4 +36,2 @@ packaging: 'zip',

});
// verify that now the template contains parameters for this asset
const template = assert_1.SynthUtils.toCloudFormation(stack);
test.equal(template.Parameters.MyAssetS3Bucket68C9B344.Type, 'String');

@@ -59,2 +64,4 @@ test.equal(template.Parameters.MyAssetS3VersionKey68E1A45D.Type, 'String');

test.ok(entry, 'found metadata entry');
// synthesize first so "prepare" is called
const template = assert_1.SynthUtils.toCloudFormation(stack);
test.deepEqual(stack.node.resolve(entry.data), {

@@ -68,3 +75,2 @@ path: filePath,

// verify that now the template contains parameters for this asset
const template = assert_1.SynthUtils.toCloudFormation(stack);
test.equal(template.Parameters.MyAssetS3Bucket68C9B344.Type, 'String');

@@ -167,5 +173,4 @@ test.equal(template.Parameters.MyAssetS3VersionKey68E1A45D.Type, 'String');

const stack = new cdk.Stack();
const location = path.join(__dirname, 'sample-asset-directory');
const resource = new cdk.CfnResource(stack, 'MyResource', { type: 'My::Resource::Type' });
const asset = new asset_1.ZipDirectoryAsset(stack, 'MyAsset', { path: location });
const asset = new asset_1.ZipDirectoryAsset(stack, 'MyAsset', { path: SAMPLE_ASSET_DIR });
// WHEN

@@ -176,3 +181,3 @@ asset.addResourceMetadata(resource, 'PropName');

Metadata: {
"aws:asset:path": location,
"aws:asset:path": SAMPLE_ASSET_DIR,
"aws:asset:property": "PropName"

@@ -182,4 +187,113 @@ }

test.done();
},
'staging': {
'copy file assets under .assets/fingerprint.ext'(test) {
const tempdir = mkdtempSync();
process.chdir(tempdir); // change current directory to somewhere in /tmp
// GIVEN
const app = new cdk_1.App({
context: { [cxapi.ASSET_STAGING_DIR_CONTEXT]: '.assets' }
});
const stack = new cdk_1.Stack(app, 'stack');
// WHEN
new asset_1.FileAsset(stack, 'ZipFile', {
path: path.join(SAMPLE_ASSET_DIR, 'sample-zip-asset.zip')
});
new asset_1.FileAsset(stack, 'TextFile', {
path: path.join(SAMPLE_ASSET_DIR, 'sample-asset-file.txt')
});
// THEN
app.run();
test.ok(fs.existsSync(path.join(tempdir, '.assets')));
test.ok(fs.existsSync(path.join(tempdir, '.assets', 'fdb4701ff6c99e676018ee2c24a3119b.zip')));
fs.readdirSync(path.join(tempdir, '.assets'));
test.done();
},
'copy directory under .assets/fingerprint/**'(test) {
const tempdir = mkdtempSync();
process.chdir(tempdir); // change current directory to somewhere in /tmp
// GIVEN
const app = new cdk_1.App({
context: { [cxapi.ASSET_STAGING_DIR_CONTEXT]: '.assets' }
});
const stack = new cdk_1.Stack(app, 'stack');
// WHEN
new asset_1.ZipDirectoryAsset(stack, 'ZipDirectory', {
path: SAMPLE_ASSET_DIR
});
// THEN
app.run();
test.ok(fs.existsSync(path.join(tempdir, '.assets')));
test.ok(fs.existsSync(path.join(tempdir, '.assets', 'b550524e103eb4cf257c594fba5b9fe8', 'sample-asset-file.txt')));
test.ok(fs.existsSync(path.join(tempdir, '.assets', 'b550524e103eb4cf257c594fba5b9fe8', 'sample-jar-asset.jar')));
fs.readdirSync(path.join(tempdir, '.assets'));
test.done();
},
'staging path is relative if the dir is below the working directory'(test) {
// GIVEN
const tempdir = mkdtempSync();
process.chdir(tempdir); // change current directory to somewhere in /tmp
const staging = '.my-awesome-staging-directory';
const app = new cdk_1.App({
context: {
[cxapi.ASSET_STAGING_DIR_CONTEXT]: staging,
[cxapi.ASSET_RESOURCE_METADATA_ENABLED_CONTEXT]: 'true',
}
});
const stack = new cdk_1.Stack(app, 'stack');
const resource = new cdk.CfnResource(stack, 'MyResource', { type: 'My::Resource::Type' });
const asset = new asset_1.ZipDirectoryAsset(stack, 'MyAsset', { path: SAMPLE_ASSET_DIR });
// WHEN
asset.addResourceMetadata(resource, 'PropName');
const session = app.run();
const template = assert_1.SynthUtils.templateForStackName(session, stack.name);
test.deepEqual(template.Resources.MyResource.Metadata, {
"aws:asset:path": `.my-awesome-staging-directory/b550524e103eb4cf257c594fba5b9fe8`,
"aws:asset:property": "PropName"
});
test.done();
},
'if staging directory is absolute, asset path is absolute'(test) {
// GIVEN
const staging = path.resolve(mkdtempSync());
const app = new cdk_1.App({
context: {
[cxapi.ASSET_STAGING_DIR_CONTEXT]: staging,
[cxapi.ASSET_RESOURCE_METADATA_ENABLED_CONTEXT]: 'true',
}
});
const stack = new cdk_1.Stack(app, 'stack');
const resource = new cdk.CfnResource(stack, 'MyResource', { type: 'My::Resource::Type' });
const asset = new asset_1.ZipDirectoryAsset(stack, 'MyAsset', { path: SAMPLE_ASSET_DIR });
// WHEN
asset.addResourceMetadata(resource, 'PropName');
const session = app.run();
const template = assert_1.SynthUtils.templateForStackName(session, stack.name);
test.deepEqual(template.Resources.MyResource.Metadata, {
"aws:asset:path": `${staging}/b550524e103eb4cf257c594fba5b9fe8`,
"aws:asset:property": "PropName"
});
test.done();
},
'cdk metadata points to staged asset'(test) {
// GIVEN
const tempdir = mkdtempSync();
process.chdir(tempdir); // change current directory to somewhere in /tmp
const staging = '.stageme';
const app = new cdk_1.App({
context: {
[cxapi.ASSET_STAGING_DIR_CONTEXT]: staging,
}
});
const stack = new cdk_1.Stack(app, 'stack');
new asset_1.ZipDirectoryAsset(stack, 'MyAsset', { path: SAMPLE_ASSET_DIR });
// WHEN
const session = app.run();
const artifact = session.getArtifact(stack.name);
const md = Object.values(artifact.metadata || {})[0][0].data;
test.deepEqual(md.path, '.stageme/b550524e103eb4cf257c594fba5b9fe8');
test.done();
}
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUFpRjtBQUNqRix3Q0FBeUM7QUFDekMsb0NBQXFDO0FBQ3JDLHlDQUEwQztBQUUxQyw2QkFBOEI7QUFDOUIsd0NBQTREO0FBRTVELGlCQUFTO0lBQ1AsaUJBQWlCLENBQUMsSUFBVTtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUNwRCxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILDhEQUE4RDtRQUM5RCwwQkFBMEI7UUFDMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRXZDLGtFQUFrRTtRQUVsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsT0FBTztZQUNiLEVBQUUsRUFBRSxTQUFTO1lBQ2IsU0FBUyxFQUFFLEtBQUs7WUFDaEIsaUJBQWlCLEVBQUUseUJBQXlCO1lBQzVDLGNBQWMsRUFBRSw2QkFBNkI7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsa0VBQWtFO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLG1CQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FB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RSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTFFLE9BQU87UUFDUCxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWhELE9BQU87UUFDUCxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLHFCQUFZLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsUUFBUSxFQUFFO2dCQUNSLGdCQUFnQixFQUFFLFFBQVE7Z0JBQzFCLG9CQUFvQixFQUFFLFVBQVU7YUFDakM7U0FDRixFQUFFLHFCQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBoYXZlUmVzb3VyY2UsIFJlc291cmNlUGFydCwgU3ludGhVdGlscyB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgaWFtID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWlhbScpO1xuaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5pbXBvcnQgeyBGaWxlQXNzZXQsIFppcERpcmVjdG9yeUFzc2V0IH0gZnJvbSAnLi4vbGliL2Fzc2V0JztcblxuZXhwb3J0ID0ge1xuICAnc2ltcGxlIHVzZSBjYXNlJyh0ZXN0OiBUZXN0KSAge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScpO1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlBc3NldCcsIHtcbiAgICAgIHBhdGg6IGRpclBhdGhcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IG1ldGFkYXRhIGNvbnRhaW5zIGFuIFwiYXdzOmNkazphc3NldFwiIGVudHJ5IHdpdGhcbiAgICAvLyB0aGUgY29ycmVjdCBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVudHJ5ID0gYXNzZXQubm9kZS5tZXRhZGF0YS5maW5kKG0gPT4gbS50eXBlID09PSAnYXdzOmNkazphc3NldCcpO1xuICAgIHRlc3Qub2soZW50cnksICdmb3VuZCBtZXRhZGF0YSBlbnRyeScpO1xuXG4gICAgLy8gY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShzdGFjay5ub2RlLnJlc29sdmUoZW50cnkhLmRhdGEpKSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay5ub2RlLnJlc29sdmUoZW50cnkhLmRhdGEpLCB7XG4gICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgaWQ6ICdNeUFzc2V0JyxcbiAgICAgIHBhY2thZ2luZzogJ3ppcCcsXG4gICAgICBzM0J1Y2tldFBhcmFtZXRlcjogJ015QXNzZXRTM0J1Y2tldDY4QzlCMzQ0JyxcbiAgICAgIHMzS2V5UGFyYW1ldGVyOiAnTXlBc3NldFMzVmVyc2lvbktleTY4RTFBNDVEJyxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IG5vdyB0aGUgdGVtcGxhdGUgY29udGFpbnMgcGFyYW1ldGVycyBmb3IgdGhpcyBhc3NldFxuICAgIGNvbnN0IHRlbXBsYXRlID0gU3ludGhVdGlscy50b0Nsb3VkRm9ybWF0aW9uKHN0YWNrKTtcbiAgICB0ZXN0LmVxdWFsKHRlbXBsYXRlLlBhcmFtZXRlcnMuTXlBc3NldFMzQnVja2V0NjhDOUIzNDQuVHlwZSwgJ1N0cmluZycpO1xuICAgIHRlc3QuZXF1YWwodGVtcGxhdGUuUGFyYW1ldGVycy5NeUFzc2V0UzNWZXJzaW9uS2V5NjhFMUE0NUQuVHlwZSwgJ1N0cmluZycpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3ZlcmlmeSB0aGF0IHRoZSBhcHAgcmVzb2x2ZXMgdG9rZW5zIGluIG1ldGFkYXRhJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCAnbXktc3RhY2snKTtcbiAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3NhbXBsZS1hc3NldC1kaXJlY3RvcnknKTtcblxuICAgIG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7XG4gICAgICBwYXRoOiBkaXJQYXRoXG4gICAgfSk7XG5cbiAgICBjb25zdCBzeW50aCA9IGFwcC5zeW50aGVzaXplU3RhY2soc3RhY2submFtZSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzeW50aC5tZXRhZGF0YVsnL215LXN0YWNrL015QXNzZXQnXVswXS5kYXRhLCB7XG4gICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgaWQ6IFwibXlzdGFja015QXNzZXRENkIxQjU5M1wiLFxuICAgICAgcGFja2FnaW5nOiBcInppcFwiLFxuICAgICAgczNCdWNrZXRQYXJhbWV0ZXI6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIixcbiAgICAgIHMzS2V5UGFyYW1ldGVyOiBcIk15QXNzZXRTM1ZlcnNpb25LZXk2OEUxQTQ1RFwiXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnXCJmaWxlXCIgYXNzZXRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZmlsZS1hc3NldC50eHQnKTtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBGaWxlQXNzZXQoc3RhY2ssICdNeUFzc2V0JywgeyBwYXRoOiBmaWxlUGF0aCB9KTtcbiAgICBjb25zdCBlbnRyeSA9IGFzc2V0Lm5vZGUubWV0YWRhdGEuZmluZChtID0+IG0udHlwZSA9PT0gJ2F3czpjZGs6YXNzZXQnKTtcbiAgICB0ZXN0Lm9rKGVudHJ5LCAnZm91bmQgbWV0YWRhdGEgZW50cnknKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay5ub2RlLnJlc29sdmUoZW50cnkhLmRhdGEpLCB7XG4gICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgIHBhY2thZ2luZzogJ2ZpbGUnLFxuICAgICAgaWQ6ICdNeUFzc2V0JyxcbiAgICAgIHMzQnVja2V0UGFyYW1ldGVyOiAnTXlBc3NldFMzQnVja2V0NjhDOUIzNDQnLFxuICAgICAgczNLZXlQYXJhbWV0ZXI6ICdNeUFzc2V0UzNWZXJzaW9uS2V5NjhFMUE0NUQnLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgbm93IHRoZSB0ZW1wbGF0ZSBjb250YWlucyBwYXJhbWV0ZXJzIGZvciB0aGlzIGFzc2V0XG4gICAgY29uc3QgdGVtcGxhdGUgPSBTeW50aFV0aWxzLnRvQ2xvdWRGb3JtYXRpb24oc3RhY2spO1xuICAgIHRlc3QuZXF1YWwodGVtcGxhdGUuUGFyYW1ldGVycy5NeUFzc2V0UzNCdWNrZXQ2OEM5QjM0NC5UeXBlLCAnU3RyaW5nJyk7XG4gICAgdGVzdC5lcXVhbCh0ZW1wbGF0ZS5QYXJhbWV0ZXJzLk15QXNzZXRTM1ZlcnNpb25LZXk2OEUxQTQ1RC5UeXBlLCAnU3RyaW5nJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnXCJyZWFkZXJzXCIgb3IgXCJncmFudFJlYWRcIiBjYW4gYmUgdXNlZCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIG9uIHRoZSBhc3NldCB0byBhIHByaW5jaXBhbCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIGNvbnN0IHVzZXIgPSBuZXcgaWFtLlVzZXIoc3RhY2ssICdNeVVzZXInKTtcbiAgICBjb25zdCBncm91cCA9IG5ldyBpYW0uR3JvdXAoc3RhY2ssICdNeUdyb3VwJyk7XG5cbiAgICBjb25zdCBhc3NldCA9IG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScpLFxuICAgICAgcmVhZGVyczogWyB1c2VyIF1cbiAgICB9KTtcblxuICAgIGFzc2V0LmdyYW50UmVhZChncm91cCk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpJQU06OlBvbGljeScsIHtcbiAgICAgIFBvbGljeURvY3VtZW50OiB7XG4gICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgQWN0aW9uOiBbXCJzMzpHZXRPYmplY3QqXCIsIFwiczM6R2V0QnVja2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgeyBcIkZuOjpKb2luXCI6IFtcIlwiLCBbXCJhcm46XCIsIHtSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIn0sIFwiOnMzOjo6XCIsIHtSZWY6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIn1dXSB9LFxuICAgICAgICAgICAgICB7IFwiRm46OkpvaW5cIjogW1wiXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgXCJhcm46XCIsIHtSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIn0sIFwiOnMzOjo6XCIsIHtSZWY6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIn0sXG4gICAgICAgICAgICAgICAgICBcIi9cIixcbiAgICAgICAgICAgICAgICAgIHsgXCJGbjo6U2VsZWN0XCI6IFswLCB7IFwiRm46OlNwbGl0XCI6IFsgXCJ8fFwiLCB7IFJlZjogXCJNeUFzc2V0UzNWZXJzaW9uS2V5NjhFMUE0NURcIiB9XSB9XSB9LFxuICAgICAgICAgICAgICAgICAgXCIqXCJcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIF0gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuICAnZmFpbHMgaWYgZGlyZWN0b3J5IG5vdCBmb3VuZCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015RGlyZWN0b3J5Jywge1xuICAgICAgcGF0aDogJy9wYXRoL25vdC9mb3VuZC8nICsgTWF0aC5yYW5kb20oKSAqIDk5OTk5OVxuICAgIH0pKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnbXVsdGlwbGUgYXNzZXRzIHVuZGVyIHRoZSBzYW1lIHBhcmVudCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlEaXJlY3RvcnkxJywgeyBwYXRoOiAnLicgfSk7XG4gICAgbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlEaXJlY3RvcnkyJywgeyBwYXRoOiAnLicgfSk7XG5cbiAgICAvLyBUSEVOOiBubyBlcnJvclxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lzWmlwQXJjaGl2ZSBpbmRpY2F0ZXMgaWYgdGhlIGFzc2V0IHJlcHJlc2VudHMgYSAuemlwIGZpbGUgKGVpdGhlciBleHBsaWNpdGx5IG9yIHZpYSBaaXBEaXJlY3RvcnkgcGFja2FnaW5nKScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3Qgbm9uWmlwQXNzZXQgPSBuZXcgRmlsZUFzc2V0KHN0YWNrLCAnTm9uWmlwQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScsICdzYW1wbGUtYXNzZXQtZmlsZS50eHQnKVxuICAgIH0pO1xuXG4gICAgY29uc3QgemlwRGlyZWN0b3J5QXNzZXQgPSBuZXcgWmlwRGlyZWN0b3J5QXNzZXQoc3RhY2ssICdaaXBEaXJlY3RvcnlBc3NldCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICdzYW1wbGUtYXNzZXQtZGlyZWN0b3J5JylcbiAgICB9KTtcblxuICAgIGNvbnN0IHppcEZpbGVBc3NldCA9IG5ldyBGaWxlQXNzZXQoc3RhY2ssICdaaXBGaWxlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScsICdzYW1wbGUtemlwLWFzc2V0LnppcCcpXG4gICAgfSk7XG5cbiAgICBjb25zdCBqYXJGaWxlQXNzZXQgPSBuZXcgRmlsZUFzc2V0KHN0YWNrLCAnSmFyRmlsZUFzc2V0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJ3NhbXBsZS1hc3NldC1kaXJlY3RvcnknLCAnc2FtcGxlLWphci1hc3NldC5qYXInKVxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZXF1YWwobm9uWmlwQXNzZXQuaXNaaXBBcmNoaXZlLCBmYWxzZSk7XG4gICAgdGVzdC5lcXVhbCh6aXBEaXJlY3RvcnlBc3NldC5pc1ppcEFyY2hpdmUsIHRydWUpO1xuICAgIHRlc3QuZXF1YWwoemlwRmlsZUFzc2V0LmlzWmlwQXJjaGl2ZSwgdHJ1ZSk7XG4gICAgdGVzdC5lcXVhbChqYXJGaWxlQXNzZXQuaXNaaXBBcmNoaXZlLCB0cnVlKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYWRkUmVzb3VyY2VNZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBhZGQgQ0ZOIG1ldGFkYXRhIHRvIHJlc291cmNlcycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgc3RhY2subm9kZS5zZXRDb250ZXh0KGN4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX0VOQUJMRURfQ09OVEVYVCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdzYW1wbGUtYXNzZXQtZGlyZWN0b3J5Jyk7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY2RrLkNmblJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ015OjpSZXNvdXJjZTo6VHlwZScgfSk7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgWmlwRGlyZWN0b3J5QXNzZXQoc3RhY2ssICdNeUFzc2V0JywgeyBwYXRoOiBsb2NhdGlvbiB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhc3NldC5hZGRSZXNvdXJjZU1ldGFkYXRhKHJlc291cmNlLCAnUHJvcE5hbWUnKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnTXk6OlJlc291cmNlOjpUeXBlJywge1xuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgXCJhd3M6YXNzZXQ6cGF0aFwiOiBsb2NhdGlvbixcbiAgICAgICAgXCJhd3M6YXNzZXQ6cHJvcGVydHlcIjogXCJQcm9wTmFtZVwiXG4gICAgICB9XG4gICAgfSwgUmVzb3VyY2VQYXJ0LkNvbXBsZXRlRGVmaW5pdGlvbikpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhc3NldCBtZXRhZGF0YSBpcyBvbmx5IGVtaXR0ZWQgaWYgQVNTRVRfUkVTT1VSQ0VfTUVUQURBVEFfRU5BQkxFRF9DT05URVhUIGlzIGRlZmluZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gICAgY29uc3QgbG9jYXRpb24gPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScpO1xuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGNkay5DZm5SZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UnLCB7IHR5cGU6ICdNeTo6UmVzb3VyY2U6OlR5cGUnIH0pO1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlBc3NldCcsIHsgcGF0aDogbG9jYXRpb24gfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXNzZXQuYWRkUmVzb3VyY2VNZXRhZGF0YShyZXNvdXJjZSwgJ1Byb3BOYW1lJyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS5ub3RUbyhoYXZlUmVzb3VyY2UoJ015OjpSZXNvdXJjZTo6VHlwZScsIHtcbiAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgIFwiYXdzOmFzc2V0OnBhdGhcIjogbG9jYXRpb24sXG4gICAgICAgIFwiYXdzOmFzc2V0OnByb3BlcnR5XCI6IFwiUHJvcE5hbWVcIlxuICAgICAgfVxuICAgIH0sIFJlc291cmNlUGFydC5Db21wbGV0ZURlZmluaXRpb24pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUFpRjtBQUNqRix3Q0FBeUM7QUFDekMsb0NBQXFDO0FBQ3JDLHNDQUEwQztBQUMxQyx5Q0FBMEM7QUFDMUMseUJBQTBCO0FBRTFCLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFDOUIsd0NBQTREO0FBRTVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQTZWeEUsU0FBUyxXQUFXO0lBQ2xCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUE3VkQsaUJBQVM7SUFDUCxpQkFBaUIsQ0FBQyxJQUFVO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUNwRCxJQUFJLEVBQUUsZ0JBQWdCO1NBQ3ZCLENBQUMsQ0FBQztRQUVILDhEQUE4RDtRQUM5RCwwQkFBMEI7UUFDMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRXZDLGtFQUFrRTtRQUNsRSxNQUFNLFFBQVEsR0FBRyxtQkFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElB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QUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDJDQUEyQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUVGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdCwgaGF2ZVJlc291cmNlLCBSZXNvdXJjZVBhcnQsIFN5bnRoVXRpbHMgfSBmcm9tICdAYXdzLWNkay9hc3NlcnQnO1xuaW1wb3J0IGlhbSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2F3cy1pYW0nKTtcbmltcG9ydCBjZGsgPSByZXF1aXJlKCdAYXdzLWNkay9jZGsnKTtcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgZnMgPSByZXF1aXJlKCdmcycpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmltcG9ydCB7IEZpbGVBc3NldCwgWmlwRGlyZWN0b3J5QXNzZXQgfSBmcm9tICcuLi9saWIvYXNzZXQnO1xuXG5jb25zdCBTQU1QTEVfQVNTRVRfRElSID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3NhbXBsZS1hc3NldC1kaXJlY3RvcnknKTtcblxuZXhwb3J0ID0ge1xuICAnc2ltcGxlIHVzZSBjYXNlJyh0ZXN0OiBUZXN0KSAge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlBc3NldCcsIHtcbiAgICAgIHBhdGg6IFNBTVBMRV9BU1NFVF9ESVJcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IG1ldGFkYXRhIGNvbnRhaW5zIGFuIFwiYXdzOmNkazphc3NldFwiIGVudHJ5IHdpdGhcbiAgICAvLyB0aGUgY29ycmVjdCBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVudHJ5ID0gYXNzZXQubm9kZS5tZXRhZGF0YS5maW5kKG0gPT4gbS50eXBlID09PSAnYXdzOmNkazphc3NldCcpO1xuICAgIHRlc3Qub2soZW50cnksICdmb3VuZCBtZXRhZGF0YSBlbnRyeScpO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgbm93IHRoZSB0ZW1wbGF0ZSBjb250YWlucyBwYXJhbWV0ZXJzIGZvciB0aGlzIGFzc2V0XG4gICAgY29uc3QgdGVtcGxhdGUgPSBTeW50aFV0aWxzLnRvQ2xvdWRGb3JtYXRpb24oc3RhY2spO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2subm9kZS5yZXNvbHZlKGVudHJ5IS5kYXRhKSwge1xuICAgICAgcGF0aDogU0FNUExFX0FTU0VUX0RJUixcbiAgICAgIGlkOiAnTXlBc3NldCcsXG4gICAgICBwYWNrYWdpbmc6ICd6aXAnLFxuICAgICAgczNCdWNrZXRQYXJhbWV0ZXI6ICdNeUFzc2V0UzNCdWNrZXQ2OEM5QjM0NCcsXG4gICAgICBzM0tleVBhcmFtZXRlcjogJ015QXNzZXRTM1ZlcnNpb25LZXk2OEUxQTQ1RCcsXG4gICAgfSk7XG5cbiAgICB0ZXN0LmVxdWFsKHRlbXBsYXRlLlBhcmFtZXRlcnMuTXlBc3NldFMzQnVja2V0NjhDOUIzNDQuVHlwZSwgJ1N0cmluZycpO1xuICAgIHRlc3QuZXF1YWwodGVtcGxhdGUuUGFyYW1ldGVycy5NeUFzc2V0UzNWZXJzaW9uS2V5NjhFMUE0NUQuVHlwZSwgJ1N0cmluZycpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3ZlcmlmeSB0aGF0IHRoZSBhcHAgcmVzb2x2ZXMgdG9rZW5zIGluIG1ldGFkYXRhJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCAnbXktc3RhY2snKTtcbiAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3NhbXBsZS1hc3NldC1kaXJlY3RvcnknKTtcblxuICAgIG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7XG4gICAgICBwYXRoOiBkaXJQYXRoXG4gICAgfSk7XG5cbiAgICBjb25zdCBzeW50aCA9IGFwcC5zeW50aGVzaXplU3RhY2soc3RhY2submFtZSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzeW50aC5tZXRhZGF0YVsnL215LXN0YWNrL015QXNzZXQnXVswXS5kYXRhLCB7XG4gICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgaWQ6IFwibXlzdGFja015QXNzZXRENkIxQjU5M1wiLFxuICAgICAgcGFja2FnaW5nOiBcInppcFwiLFxuICAgICAgczNCdWNrZXRQYXJhbWV0ZXI6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIixcbiAgICAgIHMzS2V5UGFyYW1ldGVyOiBcIk15QXNzZXRTM1ZlcnNpb25LZXk2OEUxQTQ1RFwiXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnXCJmaWxlXCIgYXNzZXRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZmlsZS1hc3NldC50eHQnKTtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBGaWxlQXNzZXQoc3RhY2ssICdNeUFzc2V0JywgeyBwYXRoOiBmaWxlUGF0aCB9KTtcbiAgICBjb25zdCBlbnRyeSA9IGFzc2V0Lm5vZGUubWV0YWRhdGEuZmluZChtID0+IG0udHlwZSA9PT0gJ2F3czpjZGs6YXNzZXQnKTtcbiAgICB0ZXN0Lm9rKGVudHJ5LCAnZm91bmQgbWV0YWRhdGEgZW50cnknKTtcblxuICAgIC8vIHN5bnRoZXNpemUgZmlyc3Qgc28gXCJwcmVwYXJlXCIgaXMgY2FsbGVkXG4gICAgY29uc3QgdGVtcGxhdGUgPSBTeW50aFV0aWxzLnRvQ2xvdWRGb3JtYXRpb24oc3RhY2spO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2subm9kZS5yZXNvbHZlKGVudHJ5IS5kYXRhKSwge1xuICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICBwYWNrYWdpbmc6ICdmaWxlJyxcbiAgICAgIGlkOiAnTXlBc3NldCcsXG4gICAgICBzM0J1Y2tldFBhcmFtZXRlcjogJ015QXNzZXRTM0J1Y2tldDY4QzlCMzQ0JyxcbiAgICAgIHMzS2V5UGFyYW1ldGVyOiAnTXlBc3NldFMzVmVyc2lvbktleTY4RTFBNDVEJyxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IG5vdyB0aGUgdGVtcGxhdGUgY29udGFpbnMgcGFyYW1ldGVycyBmb3IgdGhpcyBhc3NldFxuICAgIHRlc3QuZXF1YWwodGVtcGxhdGUuUGFyYW1ldGVycy5NeUFzc2V0UzNCdWNrZXQ2OEM5QjM0NC5UeXBlLCAnU3RyaW5nJyk7XG4gICAgdGVzdC5lcXVhbCh0ZW1wbGF0ZS5QYXJhbWV0ZXJzLk15QXNzZXRTM1ZlcnNpb25LZXk2OEUxQTQ1RC5UeXBlLCAnU3RyaW5nJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnXCJyZWFkZXJzXCIgb3IgXCJncmFudFJlYWRcIiBjYW4gYmUgdXNlZCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIG9uIHRoZSBhc3NldCB0byBhIHByaW5jaXBhbCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIGNvbnN0IHVzZXIgPSBuZXcgaWFtLlVzZXIoc3RhY2ssICdNeVVzZXInKTtcbiAgICBjb25zdCBncm91cCA9IG5ldyBpYW0uR3JvdXAoc3RhY2ssICdNeUdyb3VwJyk7XG5cbiAgICBjb25zdCBhc3NldCA9IG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScpLFxuICAgICAgcmVhZGVyczogWyB1c2VyIF1cbiAgICB9KTtcblxuICAgIGFzc2V0LmdyYW50UmVhZChncm91cCk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpJQU06OlBvbGljeScsIHtcbiAgICAgIFBvbGljeURvY3VtZW50OiB7XG4gICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgQWN0aW9uOiBbXCJzMzpHZXRPYmplY3QqXCIsIFwiczM6R2V0QnVja2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgeyBcIkZuOjpKb2luXCI6IFtcIlwiLCBbXCJhcm46XCIsIHtSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIn0sIFwiOnMzOjo6XCIsIHtSZWY6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIn1dXSB9LFxuICAgICAgICAgICAgICB7IFwiRm46OkpvaW5cIjogW1wiXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgXCJhcm46XCIsIHtSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIn0sIFwiOnMzOjo6XCIsIHtSZWY6IFwiTXlBc3NldFMzQnVja2V0NjhDOUIzNDRcIn0sXG4gICAgICAgICAgICAgICAgICBcIi9cIixcbiAgICAgICAgICAgICAgICAgIHsgXCJGbjo6U2VsZWN0XCI6IFswLCB7IFwiRm46OlNwbGl0XCI6IFsgXCJ8fFwiLCB7IFJlZjogXCJNeUFzc2V0UzNWZXJzaW9uS2V5NjhFMUE0NURcIiB9XSB9XSB9LFxuICAgICAgICAgICAgICAgICAgXCIqXCJcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIF0gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuICAnZmFpbHMgaWYgZGlyZWN0b3J5IG5vdCBmb3VuZCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015RGlyZWN0b3J5Jywge1xuICAgICAgcGF0aDogJy9wYXRoL25vdC9mb3VuZC8nICsgTWF0aC5yYW5kb20oKSAqIDk5OTk5OVxuICAgIH0pKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnbXVsdGlwbGUgYXNzZXRzIHVuZGVyIHRoZSBzYW1lIHBhcmVudCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlEaXJlY3RvcnkxJywgeyBwYXRoOiAnLicgfSk7XG4gICAgbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlEaXJlY3RvcnkyJywgeyBwYXRoOiAnLicgfSk7XG5cbiAgICAvLyBUSEVOOiBubyBlcnJvclxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lzWmlwQXJjaGl2ZSBpbmRpY2F0ZXMgaWYgdGhlIGFzc2V0IHJlcHJlc2VudHMgYSAuemlwIGZpbGUgKGVpdGhlciBleHBsaWNpdGx5IG9yIHZpYSBaaXBEaXJlY3RvcnkgcGFja2FnaW5nKScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3Qgbm9uWmlwQXNzZXQgPSBuZXcgRmlsZUFzc2V0KHN0YWNrLCAnTm9uWmlwQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScsICdzYW1wbGUtYXNzZXQtZmlsZS50eHQnKVxuICAgIH0pO1xuXG4gICAgY29uc3QgemlwRGlyZWN0b3J5QXNzZXQgPSBuZXcgWmlwRGlyZWN0b3J5QXNzZXQoc3RhY2ssICdaaXBEaXJlY3RvcnlBc3NldCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICdzYW1wbGUtYXNzZXQtZGlyZWN0b3J5JylcbiAgICB9KTtcblxuICAgIGNvbnN0IHppcEZpbGVBc3NldCA9IG5ldyBGaWxlQXNzZXQoc3RhY2ssICdaaXBGaWxlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnc2FtcGxlLWFzc2V0LWRpcmVjdG9yeScsICdzYW1wbGUtemlwLWFzc2V0LnppcCcpXG4gICAgfSk7XG5cbiAgICBjb25zdCBqYXJGaWxlQXNzZXQgPSBuZXcgRmlsZUFzc2V0KHN0YWNrLCAnSmFyRmlsZUFzc2V0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJ3NhbXBsZS1hc3NldC1kaXJlY3RvcnknLCAnc2FtcGxlLWphci1hc3NldC5qYXInKVxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZXF1YWwobm9uWmlwQXNzZXQuaXNaaXBBcmNoaXZlLCBmYWxzZSk7XG4gICAgdGVzdC5lcXVhbCh6aXBEaXJlY3RvcnlBc3NldC5pc1ppcEFyY2hpdmUsIHRydWUpO1xuICAgIHRlc3QuZXF1YWwoemlwRmlsZUFzc2V0LmlzWmlwQXJjaGl2ZSwgdHJ1ZSk7XG4gICAgdGVzdC5lcXVhbChqYXJGaWxlQXNzZXQuaXNaaXBBcmNoaXZlLCB0cnVlKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYWRkUmVzb3VyY2VNZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBhZGQgQ0ZOIG1ldGFkYXRhIHRvIHJlc291cmNlcycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgc3RhY2subm9kZS5zZXRDb250ZXh0KGN4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX0VOQUJMRURfQ09OVEVYVCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdzYW1wbGUtYXNzZXQtZGlyZWN0b3J5Jyk7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY2RrLkNmblJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ015OjpSZXNvdXJjZTo6VHlwZScgfSk7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgWmlwRGlyZWN0b3J5QXNzZXQoc3RhY2ssICdNeUFzc2V0JywgeyBwYXRoOiBsb2NhdGlvbiB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhc3NldC5hZGRSZXNvdXJjZU1ldGFkYXRhKHJlc291cmNlLCAnUHJvcE5hbWUnKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnTXk6OlJlc291cmNlOjpUeXBlJywge1xuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgXCJhd3M6YXNzZXQ6cGF0aFwiOiBsb2NhdGlvbixcbiAgICAgICAgXCJhd3M6YXNzZXQ6cHJvcGVydHlcIjogXCJQcm9wTmFtZVwiXG4gICAgICB9XG4gICAgfSwgUmVzb3VyY2VQYXJ0LkNvbXBsZXRlRGVmaW5pdGlvbikpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhc3NldCBtZXRhZGF0YSBpcyBvbmx5IGVtaXR0ZWQgaWYgQVNTRVRfUkVTT1VSQ0VfTUVUQURBVEFfRU5BQkxFRF9DT05URVhUIGlzIGRlZmluZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY2RrLkNmblJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ015OjpSZXNvdXJjZTo6VHlwZScgfSk7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgWmlwRGlyZWN0b3J5QXNzZXQoc3RhY2ssICdNeUFzc2V0JywgeyBwYXRoOiBTQU1QTEVfQVNTRVRfRElSIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGFzc2V0LmFkZFJlc291cmNlTWV0YWRhdGEocmVzb3VyY2UsICdQcm9wTmFtZScpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykubm90VG8oaGF2ZVJlc291cmNlKCdNeTo6UmVzb3VyY2U6OlR5cGUnLCB7XG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICBcImF3czphc3NldDpwYXRoXCI6IFNBTVBMRV9BU1NFVF9ESVIsXG4gICAgICAgIFwiYXdzOmFzc2V0OnByb3BlcnR5XCI6IFwiUHJvcE5hbWVcIlxuICAgICAgfVxuICAgIH0sIFJlc291cmNlUGFydC5Db21wbGV0ZURlZmluaXRpb24pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzdGFnaW5nJzoge1xuXG4gICAgJ2NvcHkgZmlsZSBhc3NldHMgdW5kZXIgLmFzc2V0cy9maW5nZXJwcmludC5leHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHRlbXBkaXIgPSBta2R0ZW1wU3luYygpO1xuICAgICAgcHJvY2Vzcy5jaGRpcih0ZW1wZGlyKTsgLy8gY2hhbmdlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHNvbWV3aGVyZSBpbiAvdG1wXG5cbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKHtcbiAgICAgICAgY29udGV4dDogeyBbY3hhcGkuQVNTRVRfU1RBR0lOR19ESVJfQ09OVEVYVF06ICcuYXNzZXRzJyB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ3N0YWNrJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIG5ldyBGaWxlQXNzZXQoc3RhY2ssICdaaXBGaWxlJywge1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oU0FNUExFX0FTU0VUX0RJUiwgJ3NhbXBsZS16aXAtYXNzZXQuemlwJylcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgRmlsZUFzc2V0KHN0YWNrLCAnVGV4dEZpbGUnLCB7XG4gICAgICAgIHBhdGg6IHBhdGguam9pbihTQU1QTEVfQVNTRVRfRElSLCAnc2FtcGxlLWFzc2V0LWZpbGUudHh0JylcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBhcHAucnVuKCk7XG4gICAgICB0ZXN0Lm9rKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRlbXBkaXIsICcuYXNzZXRzJykpKTtcbiAgICAgIHRlc3Qub2soZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGVtcGRpciwgJy5hc3NldHMnLCAnZmRiNDcwMWZmNmM5OWU2NzYwMThlZTJjMjRhMzExOWIuemlwJykpKTtcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHBhdGguam9pbih0ZW1wZGlyLCAnLmFzc2V0cycpKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY29weSBkaXJlY3RvcnkgdW5kZXIgLmFzc2V0cy9maW5nZXJwcmludC8qKicodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgdGVtcGRpciA9IG1rZHRlbXBTeW5jKCk7XG4gICAgICBwcm9jZXNzLmNoZGlyKHRlbXBkaXIpOyAvLyBjaGFuZ2UgY3VycmVudCBkaXJlY3RvcnkgdG8gc29tZXdoZXJlIGluIC90bXBcblxuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoe1xuICAgICAgICBjb250ZXh0OiB7IFtjeGFwaS5BU1NFVF9TVEFHSU5HX0RJUl9DT05URVhUXTogJy5hc3NldHMnIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnc3RhY2snKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnWmlwRGlyZWN0b3J5Jywge1xuICAgICAgICBwYXRoOiBTQU1QTEVfQVNTRVRfRElSXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgYXBwLnJ1bigpO1xuICAgICAgdGVzdC5vayhmcy5leGlzdHNTeW5jKHBhdGguam9pbih0ZW1wZGlyLCAnLmFzc2V0cycpKSk7XG4gICAgICB0ZXN0Lm9rKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRlbXBkaXIsICcuYXNzZXRzJywgJ2I1NTA1MjRlMTAzZWI0Y2YyNTdjNTk0ZmJhNWI5ZmU4JywgJ3NhbXBsZS1hc3NldC1maWxlLnR4dCcpKSk7XG4gICAgICB0ZXN0Lm9rKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRlbXBkaXIsICcuYXNzZXRzJywgJ2I1NTA1MjRlMTAzZWI0Y2YyNTdjNTk0ZmJhNWI5ZmU4JywgJ3NhbXBsZS1qYXItYXNzZXQuamFyJykpKTtcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHBhdGguam9pbih0ZW1wZGlyLCAnLmFzc2V0cycpKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnc3RhZ2luZyBwYXRoIGlzIHJlbGF0aXZlIGlmIHRoZSBkaXIgaXMgYmVsb3cgdGhlIHdvcmtpbmcgZGlyZWN0b3J5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdGVtcGRpciA9IG1rZHRlbXBTeW5jKCk7XG4gICAgICBwcm9jZXNzLmNoZGlyKHRlbXBkaXIpOyAvLyBjaGFuZ2UgY3VycmVudCBkaXJlY3RvcnkgdG8gc29tZXdoZXJlIGluIC90bXBcblxuICAgICAgY29uc3Qgc3RhZ2luZyA9ICcubXktYXdlc29tZS1zdGFnaW5nLWRpcmVjdG9yeSc7XG4gICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIFtjeGFwaS5BU1NFVF9TVEFHSU5HX0RJUl9DT05URVhUXTogc3RhZ2luZyxcbiAgICAgICAgICBbY3hhcGkuQVNTRVRfUkVTT1VSQ0VfTUVUQURBVEFfRU5BQkxFRF9DT05URVhUXTogJ3RydWUnLFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnc3RhY2snKTtcblxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY2RrLkNmblJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ015OjpSZXNvdXJjZTo6VHlwZScgfSk7XG4gICAgICBjb25zdCBhc3NldCA9IG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7IHBhdGg6IFNBTVBMRV9BU1NFVF9ESVIgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGFzc2V0LmFkZFJlc291cmNlTWV0YWRhdGEocmVzb3VyY2UsICdQcm9wTmFtZScpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uID0gYXBwLnJ1bigpO1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBTeW50aFV0aWxzLnRlbXBsYXRlRm9yU3RhY2tOYW1lKHNlc3Npb24sIHN0YWNrLm5hbWUpO1xuXG4gICAgICB0ZXN0LmRlZXBFcXVhbCh0ZW1wbGF0ZS5SZXNvdXJjZXMuTXlSZXNvdXJjZS5NZXRhZGF0YSwge1xuICAgICAgICBcImF3czphc3NldDpwYXRoXCI6IGAubXktYXdlc29tZS1zdGFnaW5nLWRpcmVjdG9yeS9iNTUwNTI0ZTEwM2ViNGNmMjU3YzU5NGZiYTViOWZlOGAsXG4gICAgICAgIFwiYXdzOmFzc2V0OnByb3BlcnR5XCI6IFwiUHJvcE5hbWVcIlxuICAgICAgfSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2lmIHN0YWdpbmcgZGlyZWN0b3J5IGlzIGFic29sdXRlLCBhc3NldCBwYXRoIGlzIGFic29sdXRlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgc3RhZ2luZyA9IHBhdGgucmVzb2x2ZShta2R0ZW1wU3luYygpKTtcbiAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoe1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgW2N4YXBpLkFTU0VUX1NUQUdJTkdfRElSX0NPTlRFWFRdOiBzdGFnaW5nLFxuICAgICAgICAgIFtjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9FTkFCTEVEX0NPTlRFWFRdOiAndHJ1ZScsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdzdGFjaycpO1xuXG4gICAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBjZGsuQ2ZuUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnTXk6OlJlc291cmNlOjpUeXBlJyB9KTtcbiAgICAgIGNvbnN0IGFzc2V0ID0gbmV3IFppcERpcmVjdG9yeUFzc2V0KHN0YWNrLCAnTXlBc3NldCcsIHsgcGF0aDogU0FNUExFX0FTU0VUX0RJUiB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXNzZXQuYWRkUmVzb3VyY2VNZXRhZGF0YShyZXNvdXJjZSwgJ1Byb3BOYW1lJyk7XG5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBhcHAucnVuKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFN5bnRoVXRpbHMudGVtcGxhdGVGb3JTdGFja05hbWUoc2Vzc2lvbiwgc3RhY2submFtZSk7XG5cbiAgICAgIHRlc3QuZGVlcEVxdWFsKHRlbXBsYXRlLlJlc291cmNlcy5NeVJlc291cmNlLk1ldGFkYXRhLCB7XG4gICAgICAgIFwiYXdzOmFzc2V0OnBhdGhcIjogYCR7c3RhZ2luZ30vYjU1MDUyNGUxMDNlYjRjZjI1N2M1OTRmYmE1YjlmZThgLFxuICAgICAgICBcImF3czphc3NldDpwcm9wZXJ0eVwiOiBcIlByb3BOYW1lXCJcbiAgICAgIH0pO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjZGsgbWV0YWRhdGEgcG9pbnRzIHRvIHN0YWdlZCBhc3NldCcodGVzdDogVGVzdCkge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRlbXBkaXIgPSBta2R0ZW1wU3luYygpO1xuICAgICAgcHJvY2Vzcy5jaGRpcih0ZW1wZGlyKTsgLy8gY2hhbmdlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHNvbWV3aGVyZSBpbiAvdG1wXG5cbiAgICAgIGNvbnN0IHN0YWdpbmcgPSAnLnN0YWdlbWUnO1xuXG4gICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIFtjeGFwaS5BU1NFVF9TVEFHSU5HX0RJUl9DT05URVhUXTogc3RhZ2luZyxcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ3N0YWNrJyk7XG5cbiAgICAgIG5ldyBaaXBEaXJlY3RvcnlBc3NldChzdGFjaywgJ015QXNzZXQnLCB7IHBhdGg6IFNBTVBMRV9BU1NFVF9ESVIgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBhcHAucnVuKCk7XG4gICAgICBjb25zdCBhcnRpZmFjdCA9IHNlc3Npb24uZ2V0QXJ0aWZhY3Qoc3RhY2submFtZSk7XG5cbiAgICAgIGNvbnN0IG1kID0gT2JqZWN0LnZhbHVlcyhhcnRpZmFjdC5tZXRhZGF0YSB8fCB7fSlbMF1bMF0uZGF0YTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKG1kLnBhdGgsICcuc3RhZ2VtZS9iNTUwNTI0ZTEwM2ViNGNmMjU3YzU5NGZiYTViOWZlOCcpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuXG4gIH1cbn07XG5cbmZ1bmN0aW9uIG1rZHRlbXBTeW5jKCkge1xuICByZXR1cm4gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAndGVzdC5hc3NldHMnKSk7XG59XG4iXX0=

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc