@aws-solutions-constructs/core 2.96.0 → 2.97.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +4388 -55
- package/lib/constructs-feature-flags.js +3 -3
- package/lib/glue-job-helper.js +2 -2
- package/package.json +3 -3
- package/test/constructs-feature-flags.test.js +28 -4
|
@@ -26,8 +26,8 @@ const QUEUE_USE_SSE = "@aws-solutions-constructs/aws-sqs:QueueUseSse";
|
|
|
26
26
|
*/
|
|
27
27
|
class ConstructsFeatureFlagsReport extends constructs_1.Construct {
|
|
28
28
|
static ensure(scope) {
|
|
29
|
-
const app =
|
|
30
|
-
if (!app) {
|
|
29
|
+
const app = scope.node.root;
|
|
30
|
+
if (!app || !aws_cdk_lib_1.App.isApp(app)) {
|
|
31
31
|
throw new Error('Invalid scope provided to ConstructsFeatureFlagsReport');
|
|
32
32
|
}
|
|
33
33
|
const id = 'AwsSolutionsFeatureFlagsReport';
|
|
@@ -60,4 +60,4 @@ class ConstructsFeatureFlagsReport extends constructs_1.Construct {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
exports.ConstructsFeatureFlagsReport = ConstructsFeatureFlagsReport;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1mZWF0dXJlLWZsYWdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RydWN0cy1mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBRUg7OztHQUdHO0FBRUgsMkNBQXVDO0FBQ3ZDLDZDQUE0RTtBQUM1RSwwRUFBMkU7QUFFM0UsTUFBTSxhQUFhLEdBQUcsK0NBQStDLENBQUM7QUFFdEU7O0dBRUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBRWxELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBZ0I7UUFDbkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxnQ0FBZ0MsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQW9CLEtBQWdCLEVBQUUsRUFBVTtRQUM5QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUEsbUNBQXFCLEVBQUMsSUFBSSxFQUFFO1lBQzFCLFlBQVksRUFBRSxDQUFDLE9BQTBCLEVBQUUsRUFBRTtnQkFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsK0NBQStDLEVBQUU7b0JBQzVFLElBQUksRUFBRSxvQ0FBWSxDQUFDLG1CQUFtQjtvQkFDdEMsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSwyQkFBMkI7d0JBQ25DLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7cUJBQ2pDO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU87WUFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNmLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFdBQVcsRUFBRSx1R0FBdUc7Z0JBQ3BILFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7YUFDbEQ7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNKO0FBdENELG9FQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBcHAsIGF0dGFjaEN1c3RvbVN5bnRoZXNpcywgSVN5bnRoZXNpc1Nlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcnRpZmFjdFR5cGUsIEZlYXR1cmVGbGFnIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcblxuY29uc3QgUVVFVUVfVVNFX1NTRSA9IFwiQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9hd3Mtc3FzOlF1ZXVlVXNlU3NlXCI7XG5cbi8qKlxuICogQSBDREsgTDMgY29uc3RydWN0IHRoYXQgY3JlYXRlcyByZXNvdXJjZXMgZm9yIFNvbHV0aW9ucyBGZWF0dXJlIEZsYWdzIHJlcG9ydGluZ1xuICovXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0c0ZlYXR1cmVGbGFnc1JlcG9ydCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmUoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgIGNvbnN0IGFwcCA9IHNjb3BlLm5vZGUucm9vdDtcbiAgICBpZiAoIWFwcCB8fCAhQXBwLmlzQXBwKGFwcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzY29wZSBwcm92aWRlZCB0byBDb25zdHJ1Y3RzRmVhdHVyZUZsYWdzUmVwb3J0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gJ0F3c1NvbHV0aW9uc0ZlYXR1cmVGbGFnc1JlcG9ydCc7XG4gICAgaWYgKCFhcHAubm9kZS50cnlGaW5kQ2hpbGQoaWQpKSB7XG4gICAgICBuZXcgQ29uc3RydWN0c0ZlYXR1cmVGbGFnc1JlcG9ydChhcHAsIGlkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgYXR0YWNoQ3VzdG9tU3ludGhlc2lzKHRoaXMsIHtcbiAgICAgIG9uU3ludGhlc2l6ZTogKHNlc3Npb246IElTeW50aGVzaXNTZXNzaW9uKSA9PiB7XG4gICAgICAgIHNlc3Npb24uYXNzZW1ibHkuYWRkQXJ0aWZhY3QoXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2ZlYXR1cmUtZmxhZy1yZXBvcnRcIiwge1xuICAgICAgICAgIHR5cGU6IEFydGlmYWN0VHlwZS5GRUFUVVJFX0ZMQUdfUkVQT1JULFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1vZHVsZTogJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMnLFxuICAgICAgICAgICAgZmxhZ3M6IHRoaXMuR2V0RmxhZ0RlZmluaXRpb25zKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBHZXRGbGFnRGVmaW5pdGlvbnMoKTogUmVjb3JkIDwgc3RyaW5nLCBGZWF0dXJlRmxhZyA+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtRVUVVRV9VU0VfU1NFXToge1xuICAgICAgICAgIHJlY29tbWVuZGVkVmFsdWU6IHRydWUsXG4gICAgICAgICAgZXhwbGFuYXRpb246IFwiQ2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgY29uc3RydWN0IHRvIGVuY3J5cHQgdGhlIHF1ZXVlIHVzaW5nIFNlcnZlciBTaWRlIEVuY3J5cHRpb24gKFNTRSlcIixcbiAgICAgICAgICB1c2VyVmFsdWU6IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFFVRVVFX1VTRV9TU0UpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxufVxuIl19
|
package/lib/glue-job-helper.js
CHANGED
|
@@ -98,7 +98,7 @@ function deployGlueJob(scope, glueJobProps, database, table, outputDataStore, et
|
|
|
98
98
|
]
|
|
99
99
|
});
|
|
100
100
|
const jobRole = glueJobProps.role ?
|
|
101
|
-
aws_iam_1.Role.fromRoleArn(scope, 'JobRole', glueJobProps.role) :
|
|
101
|
+
aws_iam_1.Role.fromRoleArn(scope, 'JobRole', (typeof glueJobProps.role === "string") ? glueJobProps.role : glueJobProps.role.roleArn) :
|
|
102
102
|
defaults.createGlueJobRole(scope);
|
|
103
103
|
glueJobPolicy.attachToRole(jobRole);
|
|
104
104
|
let outputLocation;
|
|
@@ -207,4 +207,4 @@ function isJobCommandProperty(command) {
|
|
|
207
207
|
return false;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x1ZS1qb2ItaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2x1ZS1qb2ItaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBNkZILG9DQTBCQztBQVlELHNDQXFGQztBQVVELDhDQUtDO0FBT0QsMENBSUM7QUFXRCxnREFJQztBQXpQRCw2Q0FBNkM7QUFDN0MsaURBQXFHO0FBQ3JHLCtDQUFrRTtBQUNsRSw2Q0FBK0M7QUFFL0MsZ0NBQWdDO0FBQ2hDLG1DQUF3QztBQUd4Qzs7O0dBR0c7QUFDSCxJQUFZLGFBRVg7QUFGRCxXQUFZLGFBQWE7SUFDdkIsMEJBQVMsQ0FBQTtBQUNYLENBQUMsRUFGVyxhQUFhLDZCQUFiLGFBQWEsUUFFeEI7QUFtRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBZ0IsRUFBRSxLQUF3QjtJQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQy9FLE1BQU0sS0FBSyxDQUFDLG1HQUFtRztvQkFDL0csMEdBQTBHLENBQUMsQ0FBQztZQUM5RyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDNUcsTUFBTSxLQUFLLENBQUMscUdBQXFHO29CQUNqSCw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxNQUFNLHFCQUFxQixHQUN6QixhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFB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QUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgZ2x1ZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBFZmZlY3QsIElSb2xlLCBQb2xpY3ksIFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQnVja2V0LCBCdWNrZXRQcm9wcywgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBBd3MsIElSZXNvbHZhYmxlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgczNhc3NldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1hc3NldHNcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCdWlsZFMzQnVja2V0UmVzcG9uc2UgfSBmcm9tICcuLi8nO1xuXG4vKipcbiAqIEVudW1lcmF0aW9uIG9mIGRhdGEgc3RvcmUgdHlwZXMgdGhhdCBjb3VsZCBpbmNsdWRlIFMzLCBEeW5hbW9EQiwgRG9jdW1lbnREQiwgUkRTIG9yIFJlZHNoaWZ0LiBDdXJyZW50XG4gKiBjb25zdHJ1Y3QgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBTMywgYnV0IHBvdGVudGlhbCB0byBhZGQgb3RoZXIgb3V0cHV0IHR5cGVzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IGVudW0gU2lua1N0b3JlVHlwZSB7XG4gIFMzID0gJ1MzJ1xufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgcG90ZW50aWFsIG91dHB1dHMgdG8gYWxsb3cgdGhlIGNvbnN0cnVjdCBkZWZpbmUgYWRkaXRpb25hbCBvdXRwdXQgZGVzdGluYXRpb25zIGZvciBFVExcbiAqIHRyYW5zZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lua0RhdGFTdG9yZVByb3BzIHtcbiAgLyoqXG4gICAqIFNpbmsgZGF0YSBzdG9yZSB0eXBlXG4gICAqL1xuICByZWFkb25seSBkYXRhc3RvcmVUeXBlOiBTaW5rU3RvcmVUeXBlO1xuICAvKipcbiAgICogVGhlIG91dHB1dCBTMyBsb2NhdGlvbiB3aGVyZSB0aGUgZGF0YSBzaG91bGQgYmUgd3JpdHRlbi4gVGhlIHByb3ZpZGVkIFMzIGJ1Y2tldCB3aWxsIGJlIHVzZWQgdG8gcGFzc1xuICAgKiB0aGUgb3V0cHV0IGxvY2F0aW9uIHRvIHRoZSBldGwgc2NyaXB0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBBV1MgR2x1ZSBqb2IuXG4gICAqXG4gICAqIElmIG5vIGxvY2F0aW9uIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGNoZWNrIGlmIEBvdXRwdXRCdWNrZXRQcm9wcyBhcmUgcHJvdmlkZWQuIElmIG5vdCBpdCB3aWxsIGNyZWF0ZSBhIG5ld1xuICAgKiBidWNrZXQgaWYgdGhlIEBkYXRhc3RvcmVUeXBlIGlzIFMzLlxuICAgKlxuICAgKiBUaGUgYXJndW1lbnQga2V5IGlzIGBvdXRwdXRfcGF0aGAuIFRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgY2FuIGJlIHJldHJpZXZlIGluIHRoZSBweXRob24gc2NyaXB0XG4gICAqIGFzIGZvbGxvd3M6XG4gICAqICBnZXRSZXNvbHZlZE9wdGlvbnMoc3lzLmFyZ3YsIFtcIkpPQl9OQU1FXCIsIFwib3V0cHV0X3BhdGhcIiwgPG90aGVyIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXNzZWQ+IF0pXG4gICAqICBvdXRwdXRfcGF0aCA9IGFyZ3NbXCJvdXRwdXRfcGF0aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdTM091dHB1dEJ1Y2tldD86IEJ1Y2tldFxuICAvKipcbiAgICogSWYgQGV4aXN0aW5nUzNPdXRwdXRCVWNrZXQgaXMgcHJvdmlkZWQsIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCxcbiAgICogdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIG5ldyBidWNrZXQgaWYgdGhlIEBkYXRhc3RvcmVUeXBlIGlzIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0QnVja2V0UHJvcHM/OiBCdWNrZXRQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEdsdWVKb2JQcm9wcyB7XG4gIC8qKlxuICAgKiBHbHVlIEVUTCBqb2IgcHJvcGVydGllcy5cbiAgICovXG4gIHJlYWRvbmx5IGdsdWVKb2JQcm9wcz86IGdsdWUuQ2ZuSm9iUHJvcHMgfCBhbnlcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIHRoZSBTMyBidWNrZXQgb2JqZWN0LCBpZiB0aGlzIGlzIHNldCB0aGVuIHRoZSBzY3JpcHQgbG9jYXRpb24gaXMgaWdub3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nQ2ZuSm9iPzogZ2x1ZS5DZm5Kb2I7XG4gIC8qKlxuICAgKiBBV1MgR2x1ZSB0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU6IGdsdWUuQ2ZuVGFibGU7XG4gIC8qKlxuICAgKiBBV1MgR2x1ZSBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U6IGdsdWUuQ2ZuRGF0YWJhc2U7XG4gIC8qKlxuICAgKiBPdXRwdXQgc3RvcmFnZSBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvdXRwdXREYXRhU3RvcmU/OiBTaW5rRGF0YVN0b3JlUHJvcHNcbiAgLyoqXG4gICAqIEFzc2V0IGluc3RhbmNlIGZvciB0aGUgRVRMIGNvZGUgdGhhdCBwZXJmb3JtcyBHbHVlIEpvYiB0cmFuc2Zvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gICByZWFkb25seSBldGxDb2RlQXNzZXQ/OiBzM2Fzc2V0cy5Bc3NldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEdsdWVKb2JSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGpvYjogZ2x1ZS5DZm5Kb2IsXG4gIHJlYWRvbmx5IHJvbGU6IElSb2xlLFxuICByZWFkb25seSBidWNrZXQ/OiBCdWNrZXQsXG4gIHJlYWRvbmx5IGxvZ2dpbmdCdWNrZXQ/OiBCdWNrZXQsXG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkR2x1ZUpvYihzY29wZTogQ29uc3RydWN0LCBwcm9wczogQnVpbGRHbHVlSm9iUHJvcHMpOiBCdWlsZEdsdWVKb2JSZXNwb25zZSB7XG4gIGlmICghcHJvcHMuZXhpc3RpbmdDZm5Kb2IpIHtcbiAgICBpZiAocHJvcHMuZ2x1ZUpvYlByb3BzKSB7XG4gICAgICBpZiAocHJvcHMuZ2x1ZUpvYlByb3BzLmdsdWVWZXJzaW9uID09PSAnMi4wJyAmJiBwcm9wcy5nbHVlSm9iUHJvcHMubWF4Q2FwYWNpdHkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBzZXQgXCJNYXhDYXBhY2l0eVwiIHdpdGggR2x1ZVZlcnNpb24gMi4wIG9yIGhpZ2hlci4gVXNlIFwiTnVtYmVyT2ZXb3JrZXJzXCIgYW5kIFwiV29ya2VyVHlwZVwiLiAnICtcbiAgICAgICAgJ1JlZmVyIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3Qvd2ViYXBpL0FQSV9Kb2IuaHRtbCBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5nbHVlSm9iUHJvcHMubWF4Q2FwYWNpdHkgJiYgKHByb3BzLmdsdWVKb2JQcm9wcy5udW1iZXJPZldvcmtlcnMgfHwgcHJvcHMuZ2x1ZUpvYlByb3BzLndvcmtlclR5cGUpKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW5ub3Qgc2V0IE1heENhcGFjaXR5IGFuZCBcIldvcmtlclR5cGVcIiBvciAgXCJOdW1iZXJPZldvcmtlcnNcIi4gSWYgdXNpbmcgZ2x1ZVZlcnNpb24gMi4wIG9yIGJleW9uZCwgJyArXG4gICAgICAgICdpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgXCJXb3JrZXJUeXBlXCIgb3IgIFwiTnVtYmVyT2ZXb3JrZXJzXCInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVwbG95R2x1ZUpvYlJlc3BvbnNlID1cbiAgICAgICAgZGVwbG95R2x1ZUpvYihzY29wZSwgcHJvcHMuZ2x1ZUpvYlByb3BzLCBwcm9wcy5kYXRhYmFzZSwgcHJvcHMudGFibGUsIHByb3BzLm91dHB1dERhdGFTdG9yZSEsIHByb3BzLmV0bENvZGVBc3NldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBqb2I6IGRlcGxveUdsdWVKb2JSZXNwb25zZS5qb2IsXG4gICAgICAgIHJvbGU6IGRlcGxveUdsdWVKb2JSZXNwb25zZS5yb2xlLFxuICAgICAgICBidWNrZXQ6IGRlcGxveUdsdWVKb2JSZXNwb25zZS5idWNrZXQsXG4gICAgICAgIGxvZ2dpbmdCdWNrZXQ6IGRlcGxveUdsdWVKb2JSZXNwb25zZS5sb2dnaW5nQnVja2V0IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKCdFaXRoZXIgZ2x1ZUpvYlByb3BzIG9yIGV4aXN0aW5nQ2ZuSm9iIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGpvYjogcHJvcHMuZXhpc3RpbmdDZm5Kb2IsIHJvbGU6IFJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsICdFeGlzdGluZ1JvbGUnLCBwcm9wcy5leGlzdGluZ0NmbkpvYi5yb2xlKX07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lHbHVlSm9iUmVzcG9uc2Uge1xuICByZWFkb25seSBqb2I6IGdsdWUuQ2ZuSm9iLFxuICByZWFkb25seSByb2xlOiBJUm9sZSxcbiAgcmVhZG9ubHkgYnVja2V0PzogQnVja2V0LFxuICByZWFkb25seSBsb2dnaW5nQnVja2V0PzogQnVja2V0LFxufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXBsb3lHbHVlSm9iKHNjb3BlOiBDb25zdHJ1Y3QsIGdsdWVKb2JQcm9wczogZ2x1ZS5DZm5Kb2JQcm9wcywgZGF0YWJhc2U6IGdsdWUuQ2ZuRGF0YWJhc2UsIHRhYmxlOiBnbHVlLkNmblRhYmxlLFxuICBvdXRwdXREYXRhU3RvcmU6IFNpbmtEYXRhU3RvcmVQcm9wcywgZXRsQ29kZUFzc2V0PzogczNhc3NldHMuQXNzZXQpOiBEZXBsb3lHbHVlSm9iUmVzcG9uc2Uge1xuXG4gIGxldCBnbHVlU2VjdXJpdHlDb25maWdOYW1lOiBzdHJpbmc7XG5cbiAgaWYgKGdsdWVKb2JQcm9wcy5zZWN1cml0eUNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIGdsdWVTZWN1cml0eUNvbmZpZ05hbWUgPSBgRVRMSm9iU2VjdXJpdHlDb25maWcke0F3cy5TVEFDS19JRH1gO1xuICAgIGNvbnN0IGdsdWVLTVNLZXkgPSBgYXJuOiR7QXdzLlBBUlRJVElPTn06a21zOiR7QXdzLlJFR0lPTn06JHtBd3MuQUNDT1VOVF9JRH06YWxpYXMvYXdzL2dsdWVgO1xuXG4gICAgY29uc3Qgc2VjdXJpdHlDb25maWd1cmF0aW9uUHJvcHM6IGdsdWUuQ2ZuU2VjdXJpdHlDb25maWd1cmF0aW9uUHJvcHMgPSB7XG4gICAgICBuYW1lOiBnbHVlU2VjdXJpdHlDb25maWdOYW1lLFxuICAgICAgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgam9iQm9va21hcmtzRW5jcnlwdGlvbjoge1xuICAgICAgICAgIGpvYkJvb2ttYXJrc0VuY3J5cHRpb25Nb2RlOiAnQ1NFLUtNUycsXG4gICAgICAgICAga21zS2V5QXJuOiBnbHVlS01TS2V5XG4gICAgICAgIH0sXG4gICAgICAgIHMzRW5jcnlwdGlvbnM6IFt7XG4gICAgICAgICAgczNFbmNyeXB0aW9uTW9kZTogJ1NTRS1TMydcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQmVmb3JlIHR1cm5pbmcgb2ZmIFNvbmFyUXViZSBmb3IgdGhlIGxpbmUsIHJlZHVjZSB0aGUgbGluZSB0byBpdCdzIG1pbmltdW1cbiAgICBuZXcgZ2x1ZS5DZm5TZWN1cml0eUNvbmZpZ3VyYXRpb24oc2NvcGUsICdHbHVlU2VjdXJpdHlDb25maWcnLCBzZWN1cml0eUNvbmZpZ3VyYXRpb25Qcm9wcyk7ICAvLyBOT1NPTkFSXG5cbiAgfSBlbHNlIHtcbiAgICBnbHVlU2VjdXJpdHlDb25maWdOYW1lID0gZ2x1ZUpvYlByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IGdsdWVKb2JQb2xpY3kgPSBuZXcgUG9saWN5KHNjb3BlLCAnTG9nUG9saWN5Jywge1xuICAgIHN0YXRlbWVudHM6IFtcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWyAnbG9nczpDcmVhdGVMb2dHcm91cCcsICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOlB1dExvZ0V2ZW50cycgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbIGBhcm46JHtBd3MuUEFSVElUSU9OfTpsb2dzOiR7QXdzLlJFR0lPTn06JHtBd3MuQUNDT1VOVF9JRH06bG9nLWdyb3VwOi9hd3MtZ2x1ZS8qYCBdXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG5cbiAgY29uc3Qgam9iUm9sZSA9IGdsdWVKb2JQcm9wcy5yb2xlID9cbiAgICBSb2xlLmZyb21Sb2xlQXJuKHNjb3BlLCAnSm9iUm9sZScsIGdsdWVKb2JQcm9wcy5yb2xlKSA6XG4gICAgZGVmYXVsdHMuY3JlYXRlR2x1ZUpvYlJvbGUoc2NvcGUpO1xuXG4gIGdsdWVKb2JQb2xpY3kuYXR0YWNoVG9Sb2xlKGpvYlJvbGUpO1xuXG4gIGxldCBvdXRwdXRMb2NhdGlvbjogQnVpbGRTM0J1Y2tldFJlc3BvbnNlO1xuICBpZiAob3V0cHV0RGF0YVN0b3JlICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RGF0YVN0b3JlLmRhdGFzdG9yZVR5cGUgPT09IFNpbmtTdG9yZVR5cGUuUzMpIHtcbiAgICBpZiAob3V0cHV0RGF0YVN0b3JlLmV4aXN0aW5nUzNPdXRwdXRCdWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0cHV0TG9jYXRpb24gPSB7IGJ1Y2tldDogb3V0cHV0RGF0YVN0b3JlLmV4aXN0aW5nUzNPdXRwdXRCdWNrZXQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0TG9jYXRpb24gPSBkZWZhdWx0cy5idWlsZFMzQnVja2V0KHNjb3BlLCB7IGJ1Y2tldFByb3BzOiBvdXRwdXREYXRhU3RvcmUub3V0cHV0QnVja2V0UHJvcHMgfSApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRMb2NhdGlvbiA9IGRlZmF1bHRzLmJ1aWxkUzNCdWNrZXQoc2NvcGUsIHt9KTtcbiAgfVxuXG4gIG91dHB1dExvY2F0aW9uLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShqb2JSb2xlKTtcblxuICBjb25zdCBqb2JBcmd1bWVudHNMaXN0ID0ge1xuICAgIFwiLS1lbmFibGUtbWV0cmljc1wiIDogdHJ1ZSxcbiAgICBcIi0tZW5hYmxlLWNvbnRpbnVvdXMtY2xvdWR3YXRjaC1sb2dcIiA6IHRydWUsXG4gICAgXCItLWRhdGFiYXNlX25hbWVcIjogZGF0YWJhc2UucmVmLFxuICAgIFwiLS10YWJsZV9uYW1lXCI6IHRhYmxlLnJlZixcbiAgICAuLi4oKG91dHB1dERhdGFTdG9yZSA9PT0gdW5kZWZpbmVkIHx8IChvdXRwdXREYXRhU3RvcmUgJiYgb3V0cHV0RGF0YVN0b3JlLmRhdGFzdG9yZVR5cGUgPT09IFNpbmtTdG9yZVR5cGUuUzMpKSAmJlxuICAgICAgeyAnLS1vdXRwdXRfcGF0aCcgOiBgczNhOi8vJHtvdXRwdXRMb2NhdGlvbi5idWNrZXQuYnVja2V0TmFtZX0vb3V0cHV0L2AgfSksXG4gICAgLi4uZ2x1ZUpvYlByb3BzLmRlZmF1bHRBcmd1bWVudHNcbiAgfTtcblxuICBjb25zdCBuZXdHbHVlSm9iUHJvcHM6IGdsdWUuQ2ZuSm9iUHJvcHMgPSBvdmVycmlkZVByb3BzKGRlZmF1bHRzLkRlZmF1bHRHbHVlSm9iUHJvcHMoam9iUm9sZSwgZ2x1ZUpvYlByb3BzLFxuICAgIGdsdWVTZWN1cml0eUNvbmZpZ05hbWUsIGpvYkFyZ3VtZW50c0xpc3QsIGV0bENvZGVBc3NldCksIGdsdWVKb2JQcm9wcyk7XG4gIGlmIChldGxDb2RlQXNzZXQpIHtcbiAgICBldGxDb2RlQXNzZXQuZ3JhbnRSZWFkKGpvYlJvbGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBDREsgQnVja2V0IGluc3RhbmNlIGZyb20gUzMgdXJsIGFuZCBncmFudCByZWFkIGFjY2VzcyB0byBHbHVlIEpvYidzIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAgaWYgKGlzSm9iQ29tbWFuZFByb3BlcnR5KG5ld0dsdWVKb2JQcm9wcy5jb21tYW5kKSkge1xuICAgICAgY29uc3Qgc2NyaXB0TG9jYXRpb24gPSBuZXdHbHVlSm9iUHJvcHMuY29tbWFuZC5zY3JpcHRMb2NhdGlvbjtcblxuICAgICAgLy8gSW5jb21pbmcgUHJvcHMsIGluY2x1ZGluZyBzY3JpcHRMb2NhdGlvbiwgYXJlIGNoZWNrZWQgdXBzdHJlYW0gaW4gQ2hlY2tHbHVlUHJvcHMoKVxuICAgICAgY29uc3Qgc2NyaXB0QnVja2V0TG9jYXRpb246IElCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldEFybihzY29wZSwgJ1NjcmlwdExvY2F0aW9uJywgZ2V0UzNBcm5mcm9tUzNVcmwoc2NyaXB0TG9jYXRpb24hKSk7XG4gICAgICBzY3JpcHRCdWNrZXRMb2NhdGlvbi5ncmFudFJlYWQoam9iUm9sZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2x1ZUpvYjogZ2x1ZS5DZm5Kb2IgPSBuZXcgZ2x1ZS5DZm5Kb2Ioc2NvcGUsICdLaW5lc2lzRVRMSm9iJywgbmV3R2x1ZUpvYlByb3BzKTtcbiAgcmV0dXJuICB7IGpvYjogZ2x1ZUpvYiwgcm9sZTogam9iUm9sZSwgYnVja2V0OiBvdXRwdXRMb2NhdGlvbi5idWNrZXQsIGxvZ2dpbmdCdWNrZXQ6IG91dHB1dExvY2F0aW9uLmxvZ2dpbmdCdWNrZXQgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgUm9sZSByZXF1aXJlZCBmb3IgdGhlIEdsdWUgSm9iLiBJZiBhIHJvbGUgaXMgYWxyZWFkeSBjcmVhdGVkIHRoZW4gdGhpc1xuICogbWV0aG9kIGlzIG5vdCByZXF1aXJlZCB0byBiZSBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIEFXUyBDb25zdHJ1Y3QgdW5kZXIgd2hpY2ggdGhlIHJvbGUgaXMgdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2x1ZUpvYlJvbGUoc2NvcGU6IENvbnN0cnVjdCk6IFJvbGUge1xuICByZXR1cm4gbmV3IFJvbGUoc2NvcGUsICdKb2JSb2xlJywge1xuICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2dsdWUuYW1hem9uYXdzLmNvbScpLFxuICAgIGRlc2NyaXB0aW9uOiAnU2VydmljZSByb2xlIHRoYXQgR2x1ZSBjdXN0b20gRVRMIGpvYnMgd2lsbCBhc3N1bWUgZm9yIGV4ZWN1dGlvbicsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBBV1MgR2x1ZSB0YWJsZS4gVGhlIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBleGlzdGluZyBHbHVlIHRhYmxlIGlzIG5vdCBwcm92aWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2x1ZVRhYmxlKHNjb3BlOiBDb25zdHJ1Y3QsIGRhdGFiYXNlOiBnbHVlLkNmbkRhdGFiYXNlLCB0YWJsZVByb3BzPzogZ2x1ZS5DZm5UYWJsZVByb3BzLFxuICBmaWVsZFNjaGVtYT86IGdsdWUuQ2ZuVGFibGUuQ29sdW1uUHJvcGVydHkgW10sIHNvdXJjZVR5cGU/OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnkpOiBnbHVlLkNmblRhYmxlIHtcbiAgcmV0dXJuIGRlZmF1bHRzLkRlZmF1bHRHbHVlVGFibGUoc2NvcGUsIHRhYmxlUHJvcHMgIT09IHVuZGVmaW5lZCA/IHRhYmxlUHJvcHMgOlxuICAgIGRlZmF1bHRzLkRlZmF1bHRHbHVlVGFibGVQcm9wcyhkYXRhYmFzZSwgZmllbGRTY2hlbWEhLCBzb3VyY2VUeXBlLCBwYXJhbWV0ZXJzKSk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIEFXUyBHbHVlIGRhdGFiYXNlLiBUaGUgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIHdpdGggYW4gZXhpc3RpbmcgR2x1ZSBkYXRhYmFzZSB0eXBlIGlzIG5vdCBwcm92aWRlZC5cbiAqIFRoZSBtZXRob2QgdXNlcyB0aGUgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIEdsdWUgZGF0YWJhc2VcbiAqXG4gKiBAcGFyYW0gc2NvcGVcbiAqIEBwYXJhbSBkYXRhYmFzZVByb3BzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbHVlRGF0YWJhc2Uoc2NvcGU6IENvbnN0cnVjdCwgIGRhdGFiYXNlUHJvcHM/OiBnbHVlLkNmbkRhdGFiYXNlUHJvcHMpOiBnbHVlLkNmbkRhdGFiYXNlIHtcbiAgY29uc3QgbWVyZ2VkREJQcm9wczogZ2x1ZS5DZm5EYXRhYmFzZVByb3BzID0gKGRhdGFiYXNlUHJvcHMgIT09IHVuZGVmaW5lZCkgPyBvdmVycmlkZVByb3BzKGRlZmF1bHRzLkRlZmF1bHRHbHVlRGF0YWJhc2VQcm9wcygpLCBkYXRhYmFzZVByb3BzKSA6XG4gICAgZGVmYXVsdHMuRGVmYXVsdEdsdWVEYXRhYmFzZVByb3BzKCk7XG4gIHJldHVybiBkZWZhdWx0cy5EZWZhdWx0R2x1ZURhdGFiYXNlKHNjb3BlLCBtZXJnZWREQlByb3BzKTtcbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBTMyBBcm4gZnJvbSBhbiBTMyBVcmwuXG4gKlxuICogQHBhcmFtIHMzVXJsXG4gKi9cbmZ1bmN0aW9uIGdldFMzQXJuZnJvbVMzVXJsKHMzVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoczNVcmwgJiYgczNVcmwuc3RhcnRzV2l0aCgnczM6Ly8nKSkge1xuICAgIGNvbnN0IHNwbGl0U3RyaW5nOiBzdHJpbmcgPSBzM1VybC5zbGljZSgnczM6Ly8nLmxlbmd0aCk7XG4gICAgcmV0dXJuIGBhcm46JHtBd3MuUEFSVElUSU9OfTpzMzo6OiR7c3BsaXRTdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihgUmVjZWl2ZWQgUzNVUkwgYXMgJHtzM1VybH0uIFRoZSBTMyB1cmwgc3RyaW5nIGRvZXMgbm90IGJlZ2luIHdpdGggczM6Ly8uIFRoaXMgaXMgbm90IGEgc3RhbmRhcmQgUzMgdXJsYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgbWV0aG9kIHRvIHR5cGUgY2hlY2sgQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSB0eXBlLiBGb3IgdGhlIGNvbnN0cnVjdCB0byB3b3JrIGZvciBzdHJlYW1pbmcgRVRMIGZyb20gS2luZXNpcyBEYXRhXG4gKiBTdHJlYW1zLCBhbGwgdGhyZWUgYXR0cmlidXRlcyBvZiB0aGUgSm9iQ29tbWFuZFByb3BlcnR5IGFyZSByZXF1aXJlZCwgZXZlbiB0aG91Z2ggdGhleSBtYXkgYmUgb3B0aW9uYWwgZm9yIG90aGVyIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZFxuICovXG5mdW5jdGlvbiBpc0pvYkNvbW1hbmRQcm9wZXJ0eShjb21tYW5kOiBnbHVlLkNmbkpvYi5Kb2JDb21tYW5kUHJvcGVydHkgfCBJUmVzb2x2YWJsZSk6IGNvbW1hbmQgaXMgZ2x1ZS5DZm5Kb2IuSm9iQ29tbWFuZFByb3BlcnR5IHtcbiAgaWYgKChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkubmFtZSAmJlxuICAgIChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkucHl0aG9uVmVyc2lvbiAmJlxuICAgIChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkuc2NyaXB0TG9jYXRpb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBkZWZhdWx0cy5wcmludFdhcm5pbmcoJ2NvbW1hbmQgbm90IG9mIHR5cGUgSm9iQ29tbWFuZFByb3BlcnR5IHR5cGUnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x1ZS1qb2ItaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2x1ZS1qb2ItaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBNkZILG9DQTBCQztBQVlELHNDQXFGQztBQVVELDhDQUtDO0FBT0QsMENBSUM7QUFXRCxnREFJQztBQXpQRCw2Q0FBNkM7QUFDN0MsaURBQXFHO0FBQ3JHLCtDQUFrRTtBQUNsRSw2Q0FBK0M7QUFFL0MsZ0NBQWdDO0FBQ2hDLG1DQUF3QztBQUd4Qzs7O0dBR0c7QUFDSCxJQUFZLGFBRVg7QUFGRCxXQUFZLGFBQWE7SUFDdkIsMEJBQVMsQ0FBQTtBQUNYLENBQUMsRUFGVyxhQUFhLDZCQUFiLGFBQWEsUUFFeEI7QUFtRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBZ0IsRUFBRSxLQUF3QjtJQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQy9FLE1BQU0sS0FBSyxDQUFDLG1HQUFtRztvQkFDL0csMEdBQTBHLENBQUMsQ0FBQztZQUM5RyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDNUcsTUFBTSxLQUFLLENBQUMscUdBQXFHO29CQUNqSCw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxNQUFNLHFCQUFxQixHQUN6QixhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFB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O0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsWUFBWSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDckUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBnbHVlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB7IEVmZmVjdCwgSVJvbGUsIFBvbGljeSwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBCdWNrZXQsIEJ1Y2tldFByb3BzLCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEF3cywgSVJlc29sdmFibGUgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBzM2Fzc2V0cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0c1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi4vJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJ1aWxkUzNCdWNrZXRSZXNwb25zZSB9IGZyb20gJy4uLyc7XG5cbi8qKlxuICogRW51bWVyYXRpb24gb2YgZGF0YSBzdG9yZSB0eXBlcyB0aGF0IGNvdWxkIGluY2x1ZGUgUzMsIER5bmFtb0RCLCBEb2N1bWVudERCLCBSRFMgb3IgUmVkc2hpZnQuIEN1cnJlbnRcbiAqIGNvbnN0cnVjdCBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIFMzLCBidXQgcG90ZW50aWFsIHRvIGFkZCBvdGhlciBvdXRwdXQgdHlwZXMgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgZW51bSBTaW5rU3RvcmVUeXBlIHtcbiAgUzMgPSAnUzMnXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBwb3RlbnRpYWwgb3V0cHV0cyB0byBhbGxvdyB0aGUgY29uc3RydWN0IGRlZmluZSBhZGRpdGlvbmFsIG91dHB1dCBkZXN0aW5hdGlvbnMgZm9yIEVUTFxuICogdHJhbnNmb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaW5rRGF0YVN0b3JlUHJvcHMge1xuICAvKipcbiAgICogU2luayBkYXRhIHN0b3JlIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFzdG9yZVR5cGU6IFNpbmtTdG9yZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IFMzIGxvY2F0aW9uIHdoZXJlIHRoZSBkYXRhIHNob3VsZCBiZSB3cml0dGVuLiBUaGUgcHJvdmlkZWQgUzMgYnVja2V0IHdpbGwgYmUgdXNlZCB0byBwYXNzXG4gICAqIHRoZSBvdXRwdXQgbG9jYXRpb24gdG8gdGhlIGV0bCBzY3JpcHQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIEFXUyBHbHVlIGpvYi5cbiAgICpcbiAgICogSWYgbm8gbG9jYXRpb24gaXMgcHJvdmlkZWQsIGl0IHdpbGwgY2hlY2sgaWYgQG91dHB1dEJ1Y2tldFByb3BzIGFyZSBwcm92aWRlZC4gSWYgbm90IGl0IHdpbGwgY3JlYXRlIGEgbmV3XG4gICAqIGJ1Y2tldCBpZiB0aGUgQGRhdGFzdG9yZVR5cGUgaXMgUzMuXG4gICAqXG4gICAqIFRoZSBhcmd1bWVudCBrZXkgaXMgYG91dHB1dF9wYXRoYC4gVGhlIHZhbHVlIG9mIHRoZSBhcmd1bWVudCBjYW4gYmUgcmV0cmlldmUgaW4gdGhlIHB5dGhvbiBzY3JpcHRcbiAgICogYXMgZm9sbG93czpcbiAgICogIGdldFJlc29sdmVkT3B0aW9ucyhzeXMuYXJndiwgW1wiSk9CX05BTUVcIiwgXCJvdXRwdXRfcGF0aFwiLCA8b3RoZXIgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZD4gXSlcbiAgICogIG91dHB1dF9wYXRoID0gYXJnc1tcIm91dHB1dF9wYXRoXCJdXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1MzT3V0cHV0QnVja2V0PzogQnVja2V0XG4gIC8qKlxuICAgKiBJZiBAZXhpc3RpbmdTM091dHB1dEJVY2tldCBpcyBwcm92aWRlZCwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLFxuICAgKiB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgbmV3IGJ1Y2tldCBpZiB0aGUgQGRhdGFzdG9yZVR5cGUgaXMgUzMuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRCdWNrZXRQcm9wcz86IEJ1Y2tldFByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkR2x1ZUpvYlByb3BzIHtcbiAgLyoqXG4gICAqIEdsdWUgRVRMIGpvYiBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2x1ZUpvYlByb3BzPzogZ2x1ZS5DZm5Kb2JQcm9wcyB8IGFueVxuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgdGhlIFMzIGJ1Y2tldCBvYmplY3QsIGlmIHRoaXMgaXMgc2V0IHRoZW4gdGhlIHNjcmlwdCBsb2NhdGlvbiBpcyBpZ25vcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdDZm5Kb2I/OiBnbHVlLkNmbkpvYjtcbiAgLyoqXG4gICAqIEFXUyBHbHVlIHRhYmxlXG4gICAqL1xuICByZWFkb25seSB0YWJsZTogZ2x1ZS5DZm5UYWJsZTtcbiAgLyoqXG4gICAqIEFXUyBHbHVlIGRhdGFiYXNlXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZTogZ2x1ZS5DZm5EYXRhYmFzZTtcbiAgLyoqXG4gICAqIE91dHB1dCBzdG9yYWdlIG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dERhdGFTdG9yZT86IFNpbmtEYXRhU3RvcmVQcm9wc1xuICAvKipcbiAgICogQXNzZXQgaW5zdGFuY2UgZm9yIHRoZSBFVEwgY29kZSB0aGF0IHBlcmZvcm1zIEdsdWUgSm9iIHRyYW5zZm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgIHJlYWRvbmx5IGV0bENvZGVBc3NldD86IHMzYXNzZXRzLkFzc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkR2x1ZUpvYlJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgam9iOiBnbHVlLkNmbkpvYixcbiAgcmVhZG9ubHkgcm9sZTogSVJvbGUsXG4gIHJlYWRvbmx5IGJ1Y2tldD86IEJ1Y2tldCxcbiAgcmVhZG9ubHkgbG9nZ2luZ0J1Y2tldD86IEJ1Y2tldCxcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRHbHVlSm9iKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBCdWlsZEdsdWVKb2JQcm9wcyk6IEJ1aWxkR2x1ZUpvYlJlc3BvbnNlIHtcbiAgaWYgKCFwcm9wcy5leGlzdGluZ0NmbkpvYikge1xuICAgIGlmIChwcm9wcy5nbHVlSm9iUHJvcHMpIHtcbiAgICAgIGlmIChwcm9wcy5nbHVlSm9iUHJvcHMuZ2x1ZVZlcnNpb24gPT09ICcyLjAnICYmIHByb3BzLmdsdWVKb2JQcm9wcy5tYXhDYXBhY2l0eSkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IHNldCBcIk1heENhcGFjaXR5XCIgd2l0aCBHbHVlVmVyc2lvbiAyLjAgb3IgaGlnaGVyLiBVc2UgXCJOdW1iZXJPZldvcmtlcnNcIiBhbmQgXCJXb3JrZXJUeXBlXCIuICcgK1xuICAgICAgICAnUmVmZXIgdGhlIEFQSSBkb2N1bWVudGF0aW9uIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0pvYi5odG1sIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmdsdWVKb2JQcm9wcy5tYXhDYXBhY2l0eSAmJiAocHJvcHMuZ2x1ZUpvYlByb3BzLm51bWJlck9mV29ya2VycyB8fCBwcm9wcy5nbHVlSm9iUHJvcHMud29ya2VyVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBzZXQgTWF4Q2FwYWNpdHkgYW5kIFwiV29ya2VyVHlwZVwiIG9yICBcIk51bWJlck9mV29ya2Vyc1wiLiBJZiB1c2luZyBnbHVlVmVyc2lvbiAyLjAgb3IgYmV5b25kLCAnICtcbiAgICAgICAgJ2l0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBcIldvcmtlclR5cGVcIiBvciAgXCJOdW1iZXJPZldvcmtlcnNcIicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXBsb3lHbHVlSm9iUmVzcG9uc2UgPVxuICAgICAgICBkZXBsb3lHbHVlSm9iKHNjb3BlLCBwcm9wcy5nbHVlSm9iUHJvcHMsIHByb3BzLmRhdGFiYXNlLCBwcm9wcy50YWJsZSwgcHJvcHMub3V0cHV0RGF0YVN0b3JlISwgcHJvcHMuZXRsQ29kZUFzc2V0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpvYjogZGVwbG95R2x1ZUpvYlJlc3BvbnNlLmpvYixcbiAgICAgICAgcm9sZTogZGVwbG95R2x1ZUpvYlJlc3BvbnNlLnJvbGUsXG4gICAgICAgIGJ1Y2tldDogZGVwbG95R2x1ZUpvYlJlc3BvbnNlLmJ1Y2tldCxcbiAgICAgICAgbG9nZ2luZ0J1Y2tldDogZGVwbG95R2x1ZUpvYlJlc3BvbnNlLmxvZ2dpbmdCdWNrZXQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoJ0VpdGhlciBnbHVlSm9iUHJvcHMgb3IgZXhpc3RpbmdDZm5Kb2IgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgam9iOiBwcm9wcy5leGlzdGluZ0NmbkpvYiwgcm9sZTogUm9sZS5mcm9tUm9sZUFybihzY29wZSwgJ0V4aXN0aW5nUm9sZScsIHByb3BzLmV4aXN0aW5nQ2ZuSm9iLnJvbGUpfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUdsdWVKb2JSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGpvYjogZ2x1ZS5DZm5Kb2IsXG4gIHJlYWRvbmx5IHJvbGU6IElSb2xlLFxuICByZWFkb25seSBidWNrZXQ/OiBCdWNrZXQsXG4gIHJlYWRvbmx5IGxvZ2dpbmdCdWNrZXQ/OiBCdWNrZXQsXG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveUdsdWVKb2Ioc2NvcGU6IENvbnN0cnVjdCwgZ2x1ZUpvYlByb3BzOiBnbHVlLkNmbkpvYlByb3BzLCBkYXRhYmFzZTogZ2x1ZS5DZm5EYXRhYmFzZSwgdGFibGU6IGdsdWUuQ2ZuVGFibGUsXG4gIG91dHB1dERhdGFTdG9yZTogU2lua0RhdGFTdG9yZVByb3BzLCBldGxDb2RlQXNzZXQ/OiBzM2Fzc2V0cy5Bc3NldCk6IERlcGxveUdsdWVKb2JSZXNwb25zZSB7XG5cbiAgbGV0IGdsdWVTZWN1cml0eUNvbmZpZ05hbWU6IHN0cmluZztcblxuICBpZiAoZ2x1ZUpvYlByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZ2x1ZVNlY3VyaXR5Q29uZmlnTmFtZSA9IGBFVExKb2JTZWN1cml0eUNvbmZpZyR7QXdzLlNUQUNLX0lEfWA7XG4gICAgY29uc3QgZ2x1ZUtNU0tleSA9IGBhcm46JHtBd3MuUEFSVElUSU9OfTprbXM6JHtBd3MuUkVHSU9OfToke0F3cy5BQ0NPVU5UX0lEfTphbGlhcy9hd3MvZ2x1ZWA7XG5cbiAgICBjb25zdCBzZWN1cml0eUNvbmZpZ3VyYXRpb25Qcm9wczogZ2x1ZS5DZm5TZWN1cml0eUNvbmZpZ3VyYXRpb25Qcm9wcyA9IHtcbiAgICAgIG5hbWU6IGdsdWVTZWN1cml0eUNvbmZpZ05hbWUsXG4gICAgICBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBqb2JCb29rbWFya3NFbmNyeXB0aW9uOiB7XG4gICAgICAgICAgam9iQm9va21hcmtzRW5jcnlwdGlvbk1vZGU6ICdDU0UtS01TJyxcbiAgICAgICAgICBrbXNLZXlBcm46IGdsdWVLTVNLZXlcbiAgICAgICAgfSxcbiAgICAgICAgczNFbmNyeXB0aW9uczogW3tcbiAgICAgICAgICBzM0VuY3J5cHRpb25Nb2RlOiAnU1NFLVMzJ1xuICAgICAgICB9XVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBCZWZvcmUgdHVybmluZyBvZmYgU29uYXJRdWJlIGZvciB0aGUgbGluZSwgcmVkdWNlIHRoZSBsaW5lIHRvIGl0J3MgbWluaW11bVxuICAgIG5ldyBnbHVlLkNmblNlY3VyaXR5Q29uZmlndXJhdGlvbihzY29wZSwgJ0dsdWVTZWN1cml0eUNvbmZpZycsIHNlY3VyaXR5Q29uZmlndXJhdGlvblByb3BzKTsgIC8vIE5PU09OQVJcblxuICB9IGVsc2Uge1xuICAgIGdsdWVTZWN1cml0eUNvbmZpZ05hbWUgPSBnbHVlSm9iUHJvcHMuc2VjdXJpdHlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgY29uc3QgZ2x1ZUpvYlBvbGljeSA9IG5ldyBQb2xpY3koc2NvcGUsICdMb2dQb2xpY3knLCB7XG4gICAgc3RhdGVtZW50czogW1xuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJywgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJywgJ2xvZ3M6UHV0TG9nRXZlbnRzJyBdLFxuICAgICAgICByZXNvdXJjZXM6IFsgYGFybjoke0F3cy5QQVJUSVRJT059OmxvZ3M6JHtBd3MuUkVHSU9OfToke0F3cy5BQ0NPVU5UX0lEfTpsb2ctZ3JvdXA6L2F3cy1nbHVlLypgIF1cbiAgICAgIH0pXG4gICAgXVxuICB9KTtcblxuICBjb25zdCBqb2JSb2xlID0gZ2x1ZUpvYlByb3BzLnJvbGUgP1xuICAgIFJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsICdKb2JSb2xlJywgKHR5cGVvZiBnbHVlSm9iUHJvcHMucm9sZSA9PT0gXCJzdHJpbmdcIikgPyBnbHVlSm9iUHJvcHMucm9sZSA6IChnbHVlSm9iUHJvcHMucm9sZSBhcyBSb2xlKS5yb2xlQXJuKSA6XG4gICAgZGVmYXVsdHMuY3JlYXRlR2x1ZUpvYlJvbGUoc2NvcGUpO1xuXG4gIGdsdWVKb2JQb2xpY3kuYXR0YWNoVG9Sb2xlKGpvYlJvbGUpO1xuXG4gIGxldCBvdXRwdXRMb2NhdGlvbjogQnVpbGRTM0J1Y2tldFJlc3BvbnNlO1xuICBpZiAob3V0cHV0RGF0YVN0b3JlICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RGF0YVN0b3JlLmRhdGFzdG9yZVR5cGUgPT09IFNpbmtTdG9yZVR5cGUuUzMpIHtcbiAgICBpZiAob3V0cHV0RGF0YVN0b3JlLmV4aXN0aW5nUzNPdXRwdXRCdWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0cHV0TG9jYXRpb24gPSB7IGJ1Y2tldDogb3V0cHV0RGF0YVN0b3JlLmV4aXN0aW5nUzNPdXRwdXRCdWNrZXQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0TG9jYXRpb24gPSBkZWZhdWx0cy5idWlsZFMzQnVja2V0KHNjb3BlLCB7IGJ1Y2tldFByb3BzOiBvdXRwdXREYXRhU3RvcmUub3V0cHV0QnVja2V0UHJvcHMgfSApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRMb2NhdGlvbiA9IGRlZmF1bHRzLmJ1aWxkUzNCdWNrZXQoc2NvcGUsIHt9KTtcbiAgfVxuXG4gIG91dHB1dExvY2F0aW9uLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShqb2JSb2xlKTtcblxuICBjb25zdCBqb2JBcmd1bWVudHNMaXN0ID0ge1xuICAgIFwiLS1lbmFibGUtbWV0cmljc1wiIDogdHJ1ZSxcbiAgICBcIi0tZW5hYmxlLWNvbnRpbnVvdXMtY2xvdWR3YXRjaC1sb2dcIiA6IHRydWUsXG4gICAgXCItLWRhdGFiYXNlX25hbWVcIjogZGF0YWJhc2UucmVmLFxuICAgIFwiLS10YWJsZV9uYW1lXCI6IHRhYmxlLnJlZixcbiAgICAuLi4oKG91dHB1dERhdGFTdG9yZSA9PT0gdW5kZWZpbmVkIHx8IChvdXRwdXREYXRhU3RvcmUgJiYgb3V0cHV0RGF0YVN0b3JlLmRhdGFzdG9yZVR5cGUgPT09IFNpbmtTdG9yZVR5cGUuUzMpKSAmJlxuICAgICAgeyAnLS1vdXRwdXRfcGF0aCcgOiBgczNhOi8vJHtvdXRwdXRMb2NhdGlvbi5idWNrZXQuYnVja2V0TmFtZX0vb3V0cHV0L2AgfSksXG4gICAgLi4uZ2x1ZUpvYlByb3BzLmRlZmF1bHRBcmd1bWVudHNcbiAgfTtcblxuICBjb25zdCBuZXdHbHVlSm9iUHJvcHM6IGdsdWUuQ2ZuSm9iUHJvcHMgPSBvdmVycmlkZVByb3BzKGRlZmF1bHRzLkRlZmF1bHRHbHVlSm9iUHJvcHMoam9iUm9sZSwgZ2x1ZUpvYlByb3BzLFxuICAgIGdsdWVTZWN1cml0eUNvbmZpZ05hbWUsIGpvYkFyZ3VtZW50c0xpc3QsIGV0bENvZGVBc3NldCksIGdsdWVKb2JQcm9wcyk7XG4gIGlmIChldGxDb2RlQXNzZXQpIHtcbiAgICBldGxDb2RlQXNzZXQuZ3JhbnRSZWFkKGpvYlJvbGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBDREsgQnVja2V0IGluc3RhbmNlIGZyb20gUzMgdXJsIGFuZCBncmFudCByZWFkIGFjY2VzcyB0byBHbHVlIEpvYidzIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAgaWYgKGlzSm9iQ29tbWFuZFByb3BlcnR5KG5ld0dsdWVKb2JQcm9wcy5jb21tYW5kKSkge1xuICAgICAgY29uc3Qgc2NyaXB0TG9jYXRpb24gPSBuZXdHbHVlSm9iUHJvcHMuY29tbWFuZC5zY3JpcHRMb2NhdGlvbjtcblxuICAgICAgLy8gSW5jb21pbmcgUHJvcHMsIGluY2x1ZGluZyBzY3JpcHRMb2NhdGlvbiwgYXJlIGNoZWNrZWQgdXBzdHJlYW0gaW4gQ2hlY2tHbHVlUHJvcHMoKVxuICAgICAgY29uc3Qgc2NyaXB0QnVja2V0TG9jYXRpb246IElCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldEFybihzY29wZSwgJ1NjcmlwdExvY2F0aW9uJywgZ2V0UzNBcm5mcm9tUzNVcmwoc2NyaXB0TG9jYXRpb24hKSk7XG4gICAgICBzY3JpcHRCdWNrZXRMb2NhdGlvbi5ncmFudFJlYWQoam9iUm9sZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2x1ZUpvYjogZ2x1ZS5DZm5Kb2IgPSBuZXcgZ2x1ZS5DZm5Kb2Ioc2NvcGUsICdLaW5lc2lzRVRMSm9iJywgbmV3R2x1ZUpvYlByb3BzKTtcbiAgcmV0dXJuICB7IGpvYjogZ2x1ZUpvYiwgcm9sZTogam9iUm9sZSwgYnVja2V0OiBvdXRwdXRMb2NhdGlvbi5idWNrZXQsIGxvZ2dpbmdCdWNrZXQ6IG91dHB1dExvY2F0aW9uLmxvZ2dpbmdCdWNrZXQgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgUm9sZSByZXF1aXJlZCBmb3IgdGhlIEdsdWUgSm9iLiBJZiBhIHJvbGUgaXMgYWxyZWFkeSBjcmVhdGVkIHRoZW4gdGhpc1xuICogbWV0aG9kIGlzIG5vdCByZXF1aXJlZCB0byBiZSBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIEFXUyBDb25zdHJ1Y3QgdW5kZXIgd2hpY2ggdGhlIHJvbGUgaXMgdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2x1ZUpvYlJvbGUoc2NvcGU6IENvbnN0cnVjdCk6IFJvbGUge1xuICByZXR1cm4gbmV3IFJvbGUoc2NvcGUsICdKb2JSb2xlJywge1xuICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2dsdWUuYW1hem9uYXdzLmNvbScpLFxuICAgIGRlc2NyaXB0aW9uOiAnU2VydmljZSByb2xlIHRoYXQgR2x1ZSBjdXN0b20gRVRMIGpvYnMgd2lsbCBhc3N1bWUgZm9yIGV4ZWN1dGlvbicsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBBV1MgR2x1ZSB0YWJsZS4gVGhlIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBleGlzdGluZyBHbHVlIHRhYmxlIGlzIG5vdCBwcm92aWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2x1ZVRhYmxlKHNjb3BlOiBDb25zdHJ1Y3QsIGRhdGFiYXNlOiBnbHVlLkNmbkRhdGFiYXNlLCB0YWJsZVByb3BzPzogZ2x1ZS5DZm5UYWJsZVByb3BzLFxuICBmaWVsZFNjaGVtYT86IGdsdWUuQ2ZuVGFibGUuQ29sdW1uUHJvcGVydHkgW10sIHNvdXJjZVR5cGU/OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnkpOiBnbHVlLkNmblRhYmxlIHtcbiAgcmV0dXJuIGRlZmF1bHRzLkRlZmF1bHRHbHVlVGFibGUoc2NvcGUsIHRhYmxlUHJvcHMgIT09IHVuZGVmaW5lZCA/IHRhYmxlUHJvcHMgOlxuICAgIGRlZmF1bHRzLkRlZmF1bHRHbHVlVGFibGVQcm9wcyhkYXRhYmFzZSwgZmllbGRTY2hlbWEhLCBzb3VyY2VUeXBlLCBwYXJhbWV0ZXJzKSk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIEFXUyBHbHVlIGRhdGFiYXNlLiBUaGUgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIHdpdGggYW4gZXhpc3RpbmcgR2x1ZSBkYXRhYmFzZSB0eXBlIGlzIG5vdCBwcm92aWRlZC5cbiAqIFRoZSBtZXRob2QgdXNlcyB0aGUgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIEdsdWUgZGF0YWJhc2VcbiAqXG4gKiBAcGFyYW0gc2NvcGVcbiAqIEBwYXJhbSBkYXRhYmFzZVByb3BzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbHVlRGF0YWJhc2Uoc2NvcGU6IENvbnN0cnVjdCwgIGRhdGFiYXNlUHJvcHM/OiBnbHVlLkNmbkRhdGFiYXNlUHJvcHMpOiBnbHVlLkNmbkRhdGFiYXNlIHtcbiAgY29uc3QgbWVyZ2VkREJQcm9wczogZ2x1ZS5DZm5EYXRhYmFzZVByb3BzID0gKGRhdGFiYXNlUHJvcHMgIT09IHVuZGVmaW5lZCkgPyBvdmVycmlkZVByb3BzKGRlZmF1bHRzLkRlZmF1bHRHbHVlRGF0YWJhc2VQcm9wcygpLCBkYXRhYmFzZVByb3BzKSA6XG4gICAgZGVmYXVsdHMuRGVmYXVsdEdsdWVEYXRhYmFzZVByb3BzKCk7XG4gIHJldHVybiBkZWZhdWx0cy5EZWZhdWx0R2x1ZURhdGFiYXNlKHNjb3BlLCBtZXJnZWREQlByb3BzKTtcbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBTMyBBcm4gZnJvbSBhbiBTMyBVcmwuXG4gKlxuICogQHBhcmFtIHMzVXJsXG4gKi9cbmZ1bmN0aW9uIGdldFMzQXJuZnJvbVMzVXJsKHMzVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoczNVcmwgJiYgczNVcmwuc3RhcnRzV2l0aCgnczM6Ly8nKSkge1xuICAgIGNvbnN0IHNwbGl0U3RyaW5nOiBzdHJpbmcgPSBzM1VybC5zbGljZSgnczM6Ly8nLmxlbmd0aCk7XG4gICAgcmV0dXJuIGBhcm46JHtBd3MuUEFSVElUSU9OfTpzMzo6OiR7c3BsaXRTdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihgUmVjZWl2ZWQgUzNVUkwgYXMgJHtzM1VybH0uIFRoZSBTMyB1cmwgc3RyaW5nIGRvZXMgbm90IGJlZ2luIHdpdGggczM6Ly8uIFRoaXMgaXMgbm90IGEgc3RhbmRhcmQgUzMgdXJsYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgbWV0aG9kIHRvIHR5cGUgY2hlY2sgQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSB0eXBlLiBGb3IgdGhlIGNvbnN0cnVjdCB0byB3b3JrIGZvciBzdHJlYW1pbmcgRVRMIGZyb20gS2luZXNpcyBEYXRhXG4gKiBTdHJlYW1zLCBhbGwgdGhyZWUgYXR0cmlidXRlcyBvZiB0aGUgSm9iQ29tbWFuZFByb3BlcnR5IGFyZSByZXF1aXJlZCwgZXZlbiB0aG91Z2ggdGhleSBtYXkgYmUgb3B0aW9uYWwgZm9yIG90aGVyIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZFxuICovXG5mdW5jdGlvbiBpc0pvYkNvbW1hbmRQcm9wZXJ0eShjb21tYW5kOiBnbHVlLkNmbkpvYi5Kb2JDb21tYW5kUHJvcGVydHkgfCBJUmVzb2x2YWJsZSk6IGNvbW1hbmQgaXMgZ2x1ZS5DZm5Kb2IuSm9iQ29tbWFuZFByb3BlcnR5IHtcbiAgaWYgKChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkubmFtZSAmJlxuICAgIChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkucHl0aG9uVmVyc2lvbiAmJlxuICAgIChjb21tYW5kIGFzIGdsdWUuQ2ZuSm9iLkpvYkNvbW1hbmRQcm9wZXJ0eSkuc2NyaXB0TG9jYXRpb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBkZWZhdWx0cy5wcmludFdhcm5pbmcoJ2NvbW1hbmQgbm90IG9mIHR5cGUgSm9iQ29tbWFuZFByb3BlcnR5IHR5cGUnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-solutions-constructs/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.97.0",
|
|
4
4
|
"description": "Core CDK Construct for patterns library",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.ts",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"@types/jest": "^27.4.0",
|
|
68
68
|
"@types/node": "^10.3.0",
|
|
69
69
|
"constructs": "^10.0.0",
|
|
70
|
-
"aws-cdk-lib": "2.
|
|
70
|
+
"aws-cdk-lib": "2.233.0"
|
|
71
71
|
},
|
|
72
72
|
"jest": {
|
|
73
73
|
"moduleFileExtensions": [
|
|
@@ -90,6 +90,6 @@
|
|
|
90
90
|
],
|
|
91
91
|
"peerDependencies": {
|
|
92
92
|
"constructs": "^10.0.0",
|
|
93
|
-
"aws-cdk-lib": "^2.
|
|
93
|
+
"aws-cdk-lib": "^2.233.0"
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -16,6 +16,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
const cdk = require("aws-cdk-lib");
|
|
17
17
|
const cloud_assembly_schema_1 = require("@aws-cdk/cloud-assembly-schema");
|
|
18
18
|
const constructs_feature_flags_1 = require("../lib/constructs-feature-flags");
|
|
19
|
+
test('ensures feature flag report when scope is app', () => {
|
|
20
|
+
const app = new cdk.App();
|
|
21
|
+
constructs_feature_flags_1.ConstructsFeatureFlagsReport.ensure(app);
|
|
22
|
+
const assembly = app.synth();
|
|
23
|
+
const featureFlagArtifact = extractConstructFeatureFlagArtifact(assembly.manifest);
|
|
24
|
+
expect(featureFlagArtifact).toBeDefined();
|
|
25
|
+
});
|
|
19
26
|
test('test ConstructsFeatureFlagsReport synthesis and manifest output', () => {
|
|
20
27
|
const app = new cdk.App();
|
|
21
28
|
const stack = new cdk.Stack(app, 'TestStack');
|
|
@@ -24,9 +31,7 @@ test('test ConstructsFeatureFlagsReport synthesis and manifest output', () => {
|
|
|
24
31
|
// Synthesize the stack
|
|
25
32
|
const assembly = app.synth();
|
|
26
33
|
// Examine the manifest output
|
|
27
|
-
const
|
|
28
|
-
// Verify the manifest contains our feature flag report artifact
|
|
29
|
-
const featureFlagArtifact = Object.values(manifest.artifacts || {}).find(artifact => ((artifact.type === cloud_assembly_schema_1.ArtifactType.FEATURE_FLAG_REPORT) && (artifact.properties.module === '@aws-solutions-constructs')));
|
|
34
|
+
const featureFlagArtifact = extractConstructFeatureFlagArtifact(assembly.manifest);
|
|
30
35
|
expect(featureFlagArtifact).toBeDefined();
|
|
31
36
|
// Cast to any to access custom properties since TypeScript doesn't know about our custom artifact type
|
|
32
37
|
const artifactProps = featureFlagArtifact?.properties;
|
|
@@ -47,4 +52,23 @@ test('test ConstructsFeatureFlagsReport synthesis and manifest output', () => {
|
|
|
47
52
|
expect(constructsFlag).toHaveProperty('explanation');
|
|
48
53
|
});
|
|
49
54
|
});
|
|
50
|
-
|
|
55
|
+
test('ensures feature flag report when scope is stack->stage->app', () => {
|
|
56
|
+
const app = new cdk.App();
|
|
57
|
+
const stage = new cdk.Stage(app, 'TestStage');
|
|
58
|
+
const stack = new cdk.Stack(stage, 'TestStack');
|
|
59
|
+
constructs_feature_flags_1.ConstructsFeatureFlagsReport.ensure(stack);
|
|
60
|
+
const assembly = app.synth();
|
|
61
|
+
const featureFlagArtifact = extractConstructFeatureFlagArtifact(assembly.manifest);
|
|
62
|
+
expect(featureFlagArtifact).toBeDefined();
|
|
63
|
+
});
|
|
64
|
+
function extractConstructFeatureFlagArtifact(manifest) {
|
|
65
|
+
if (!manifest.artifacts) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const allArtifacts = Object.values(manifest.artifacts);
|
|
69
|
+
return allArtifacts.find(artifact => isConstructsFeatureFlagReport(artifact));
|
|
70
|
+
}
|
|
71
|
+
function isConstructsFeatureFlagReport(artifact) {
|
|
72
|
+
return ((artifact.type === cloud_assembly_schema_1.ArtifactType.FEATURE_FLAG_REPORT) && (artifact.properties.module === '@aws-solutions-constructs'));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1mZWF0dXJlLWZsYWdzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25zdHJ1Y3RzLWZlYXR1cmUtZmxhZ3MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsVUFBVTtBQUNWLG1DQUFtQztBQUNuQywwRUFBa0c7QUFDbEcsOEVBQStFO0FBRS9FLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7SUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsdURBQTRCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixNQUFNLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxpRUFBaUUsRUFBRSxHQUFHLEVBQUU7SUFDM0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUU5Qyw2Q0FBNkM7SUFDN0MsdURBQTRCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLHVCQUF1QjtJQUN2QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFN0IsOEJBQThCO0lBQzlCLE1BQU0sbUJBQW1CLEdBQUcsbUNBQW1DLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRW5GLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTFDLHVHQUF1RztJQUN2RyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsRUFBRSxVQUFpQixDQUFDO0lBRTdELE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDaEUsTUFBTSxLQUFLLEdBQUcsYUFBYSxFQUFFLEtBQUssQ0FBQztJQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5Qyx5QkFBeUI7SUFDekIsTUFBTSxnQkFBZ0IsR0FBRywyQkFBMkIsQ0FBQztJQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JCLGlEQUFpRDtRQUNqRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFekMsNEJBQTRCO1FBQzVCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFFTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7SUFDdkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELHVEQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsTUFBTSxtQkFBbUIsR0FBRyxtQ0FBbUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkYsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLG1DQUFtQyxDQUFDLFFBQTBCO0lBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsUUFBMEI7SUFDL0QsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxvQ0FBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBRSxRQUFRLENBQUMsVUFBbUIsQ0FBQyxNQUFNLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0FBQzFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJ0aWZhY3RUeXBlLCBBc3NlbWJseU1hbmlmZXN0LCBBcnRpZmFjdE1hbmlmZXN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IENvbnN0cnVjdHNGZWF0dXJlRmxhZ3NSZXBvcnQgfSBmcm9tICcuLi9saWIvY29uc3RydWN0cy1mZWF0dXJlLWZsYWdzJztcblxudGVzdCgnZW5zdXJlcyBmZWF0dXJlIGZsYWcgcmVwb3J0IHdoZW4gc2NvcGUgaXMgYXBwJywgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBDb25zdHJ1Y3RzRmVhdHVyZUZsYWdzUmVwb3J0LmVuc3VyZShhcHApO1xuICBjb25zdCBhc3NlbWJseSA9IGFwcC5zeW50aCgpO1xuICBjb25zdCBmZWF0dXJlRmxhZ0FydGlmYWN0ID0gZXh0cmFjdENvbnN0cnVjdEZlYXR1cmVGbGFnQXJ0aWZhY3QoYXNzZW1ibHkubWFuaWZlc3QpO1xuICBleHBlY3QoZmVhdHVyZUZsYWdBcnRpZmFjdCkudG9CZURlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCd0ZXN0IENvbnN0cnVjdHNGZWF0dXJlRmxhZ3NSZXBvcnQgc3ludGhlc2lzIGFuZCBtYW5pZmVzdCBvdXRwdXQnLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsICdUZXN0U3RhY2snKTtcblxuICAvLyBDYWxsIENvbnN0cnVjdHNGZWF0dXJlRmxhZ3NSZXBvcnQuZW5zdXJlKClcbiAgQ29uc3RydWN0c0ZlYXR1cmVGbGFnc1JlcG9ydC5lbnN1cmUoc3RhY2spO1xuXG4gIC8vIFN5bnRoZXNpemUgdGhlIHN0YWNrXG4gIGNvbnN0IGFzc2VtYmx5ID0gYXBwLnN5bnRoKCk7XG5cbiAgLy8gRXhhbWluZSB0aGUgbWFuaWZlc3Qgb3V0cHV0XG4gIGNvbnN0IGZlYXR1cmVGbGFnQXJ0aWZhY3QgPSBleHRyYWN0Q29uc3RydWN0RmVhdHVyZUZsYWdBcnRpZmFjdChhc3NlbWJseS5tYW5pZmVzdCk7XG5cbiAgZXhwZWN0KGZlYXR1cmVGbGFnQXJ0aWZhY3QpLnRvQmVEZWZpbmVkKCk7XG5cbiAgLy8gQ2FzdCB0byBhbnkgdG8gYWNjZXNzIGN1c3RvbSBwcm9wZXJ0aWVzIHNpbmNlIFR5cGVTY3JpcHQgZG9lc24ndCBrbm93IGFib3V0IG91ciBjdXN0b20gYXJ0aWZhY3QgdHlwZVxuICBjb25zdCBhcnRpZmFjdFByb3BzID0gZmVhdHVyZUZsYWdBcnRpZmFjdD8ucHJvcGVydGllcyBhcyBhbnk7XG5cbiAgZXhwZWN0KGFydGlmYWN0UHJvcHM/Lm1vZHVsZSkudG9CZSgnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cycpO1xuICBjb25zdCBmbGFncyA9IGFydGlmYWN0UHJvcHM/LmZsYWdzO1xuICBleHBlY3QoZmxhZ3MpLnRvQmVEZWZpbmVkKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnRpZmFjdFByb3BzPy5mbGFncyk7XG4gIGV4cGVjdChrZXlzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgxKTtcblxuICAvLyBDaGVjayBldmVyeSBmbGFnIGVudHJ5XG4gIGNvbnN0IEZMQUdfTkFNRV9QUkVGSVggPSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHNcIjtcbiAga2V5cy5mb3JFYWNoKGtleU5hbWUgPT4ge1xuICAgIC8vIElzIHRoZSBuYW1lIG9mIHRoZSBmbGFnIG9mIHRoZSBjb3JyZWN0IGZvcm1hdD9cbiAgICBjb25zdCBwcmVmaXggPSBrZXlOYW1lLnN1YnN0cmluZygwLCBGTEFHX05BTUVfUFJFRklYLmxlbmd0aCk7XG4gICAgZXhwZWN0KHByZWZpeCkudG9FcXVhbChGTEFHX05BTUVfUFJFRklYKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgZmxhZyBzdHJ1Y3R1cmVcbiAgICBjb25zdCBjb25zdHJ1Y3RzRmxhZyA9IGZsYWdzW2tleU5hbWVdO1xuICAgIGV4cGVjdChjb25zdHJ1Y3RzRmxhZykudG9IYXZlUHJvcGVydHkoJ3JlY29tbWVuZGVkVmFsdWUnLCB0cnVlKTtcbiAgICBleHBlY3QoY29uc3RydWN0c0ZsYWcpLnRvSGF2ZVByb3BlcnR5KCdleHBsYW5hdGlvbicpO1xuICB9KTtcblxufSk7XG5cbnRlc3QoJ2Vuc3VyZXMgZmVhdHVyZSBmbGFnIHJlcG9ydCB3aGVuIHNjb3BlIGlzIHN0YWNrLT5zdGFnZS0+YXBwJywgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFnZSA9IG5ldyBjZGsuU3RhZ2UoYXBwLCAnVGVzdFN0YWdlJyk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhzdGFnZSwgJ1Rlc3RTdGFjaycpO1xuICBDb25zdHJ1Y3RzRmVhdHVyZUZsYWdzUmVwb3J0LmVuc3VyZShzdGFjayk7XG4gIGNvbnN0IGFzc2VtYmx5ID0gYXBwLnN5bnRoKCk7XG4gIGNvbnN0IGZlYXR1cmVGbGFnQXJ0aWZhY3QgPSBleHRyYWN0Q29uc3RydWN0RmVhdHVyZUZsYWdBcnRpZmFjdChhc3NlbWJseS5tYW5pZmVzdCk7XG4gIGV4cGVjdChmZWF0dXJlRmxhZ0FydGlmYWN0KS50b0JlRGVmaW5lZCgpO1xufSk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb25zdHJ1Y3RGZWF0dXJlRmxhZ0FydGlmYWN0KG1hbmlmZXN0OiBBc3NlbWJseU1hbmlmZXN0KTogQXJ0aWZhY3RNYW5pZmVzdCB8IHVuZGVmaW5lZCB7XG4gIGlmICghbWFuaWZlc3QuYXJ0aWZhY3RzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBhbGxBcnRpZmFjdHMgPSBPYmplY3QudmFsdWVzKG1hbmlmZXN0LmFydGlmYWN0cyk7XG4gIHJldHVybiBhbGxBcnRpZmFjdHMuZmluZChhcnRpZmFjdCA9PiBpc0NvbnN0cnVjdHNGZWF0dXJlRmxhZ1JlcG9ydChhcnRpZmFjdCkpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnN0cnVjdHNGZWF0dXJlRmxhZ1JlcG9ydChhcnRpZmFjdDogQXJ0aWZhY3RNYW5pZmVzdCkge1xuICByZXR1cm4gKChhcnRpZmFjdC50eXBlID09PSBBcnRpZmFjdFR5cGUuRkVBVFVSRV9GTEFHX1JFUE9SVCkgJiYgKChhcnRpZmFjdC5wcm9wZXJ0aWVzISBhcyBhbnkpLm1vZHVsZSA9PT0gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMnKSk7XG59XG4iXX0=
|