@aws-cdk-testing/cli-integ 3.8.0 → 3.9.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/lib/package-sources/cli-npm-source.js +2 -1
- package/lib/package-sources/library-globalinstall-source.js +2 -1
- package/npm-shrinkwrap.json +1 -1
- package/package.json +2 -2
- package/resources/cdk-apps/import-app/app.js +38 -0
- package/resources/cdk-apps/import-app/cdk.json +7 -0
- package/tests/cli-integ-tests/cdk-cdk-diff--import-existing-resources-shows-import.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cdk-cdk-diff--import-existing-resources-shows-import.integtest.js +38 -0
- package/tests/cli-integ-tests/cdk-gc-deletes-unused-s3-objects-rollback.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cdk-gc-deletes-unused-s3-objects-rollback.integtest.js +60 -0
|
@@ -18,6 +18,7 @@ class RunnerCliNpmSource {
|
|
|
18
18
|
fs.mkdirSync(tempDir, { recursive: true });
|
|
19
19
|
await (0, shell_1.shell)(['node', require.resolve('npm'), 'install', `aws-cdk@${this.range}`], {
|
|
20
20
|
cwd: tempDir,
|
|
21
|
+
show: 'error',
|
|
21
22
|
});
|
|
22
23
|
const installedVersion = await (0, npm_1.npmQueryInstalledVersion)('aws-cdk', tempDir);
|
|
23
24
|
return {
|
|
@@ -47,4 +48,4 @@ class TestCliNpmSource {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
exports.TestCliNpmSource = TestCliNpmSource;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW5wbS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktbnBtLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQixnQ0FBa0Q7QUFDbEQsb0NBQXlEO0FBRXpELE1BQWEsa0JBQWtCO0lBR0E7SUFGYixpQkFBaUIsQ0FBUztJQUUxQyxZQUE2QixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUNoRixHQUFHLEVBQUUsT0FBTztZQUNaLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUEsOEJBQXdCLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLE9BQU87WUFDTCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLEtBQUssQ0FBQyxPQUFPO2dCQUNYLElBQUEsY0FBTSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTNCRCxnREEyQkM7QUFFRCxNQUFhLGdCQUFnQjtJQUNFO0lBQXNDO0lBQW5FLFlBQTZCLFdBQW1CLEVBQW1CLEtBQWE7UUFBbkQsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUNoRixDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQVhELDRDQVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB0eXBlIHsgSVJ1bm5lclNvdXJjZSwgSVRlc3RDbGlTb3VyY2UsIElQcmVwYXJlZFJ1bm5lclNvdXJjZSB9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB7IG5wbVF1ZXJ5SW5zdGFsbGVkVmVyc2lvbiB9IGZyb20gJy4uL25wbSc7XG5pbXBvcnQgeyBhZGRUb1NoZWxsUGF0aCwgcmltcmFmLCBzaGVsbCB9IGZyb20gJy4uL3NoZWxsJztcblxuZXhwb3J0IGNsYXNzIFJ1bm5lckNsaU5wbVNvdXJjZSBpbXBsZW1lbnRzIElSdW5uZXJTb3VyY2U8SVRlc3RDbGlTb3VyY2U+IHtcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByYW5nZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zb3VyY2VEZXNjcmlwdGlvbiA9IGAke3RoaXMucmFuZ2V9IChucG0pYDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBydW5uZXJQcmVwYXJlKCk6IFByb21pc2U8SVByZXBhcmVkUnVubmVyU291cmNlPElUZXN0Q2xpU291cmNlPj4ge1xuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICd0bXBjZGsnKSk7XG4gICAgZnMubWtkaXJTeW5jKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2luc3RhbGwnLCBgYXdzLWNka0Ake3RoaXMucmFuZ2V9YF0sIHtcbiAgICAgIGN3ZDogdGVtcERpcixcbiAgICAgIHNob3c6ICdlcnJvcicsXG4gICAgfSk7XG4gICAgY29uc3QgaW5zdGFsbGVkVmVyc2lvbiA9IGF3YWl0IG5wbVF1ZXJ5SW5zdGFsbGVkVmVyc2lvbignYXdzLWNkaycsIHRlbXBEaXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IGluc3RhbGxlZFZlcnNpb24sXG4gICAgICBhc3luYyBkaXNwb3NlKCkge1xuICAgICAgICByaW1yYWYodGVtcERpcik7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXplOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBbVGVzdENsaU5wbVNvdXJjZSwgW3RlbXBEaXIsIHRoaXMucmFuZ2VdXTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVzdENsaU5wbVNvdXJjZSBpbXBsZW1lbnRzIElUZXN0Q2xpU291cmNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbnN0YWxsUm9vdDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHJhbmdlOiBzdHJpbmcpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtYWtlQ2xpQXZhaWxhYmxlKCkge1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGguam9pbih0aGlzLmluc3RhbGxSb290LCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nKSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxufVxuXG4iXX0=
|
|
@@ -25,6 +25,7 @@ class RunnerLibraryGlobalInstallSource {
|
|
|
25
25
|
await fs_1.promises.mkdir(tempDir, { recursive: true });
|
|
26
26
|
await (0, shell_1.shell)(['node', require.resolve('npm'), 'install', `${this.packageName}@${this.range}`], {
|
|
27
27
|
cwd: tempDir,
|
|
28
|
+
show: 'error',
|
|
28
29
|
});
|
|
29
30
|
const symlinkPath = path.join(__dirname, '..', '..', 'node_modules', this.packageName);
|
|
30
31
|
await fs_1.promises.mkdir(path.dirname(symlinkPath), { recursive: true });
|
|
@@ -67,4 +68,4 @@ class TestLibraryGlobalInstallSource {
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
exports.TestLibraryGlobalInstallSource = TestLibraryGlobalInstallSource;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1nbG9iYWxpbnN0YWxsLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxpYnJhcnktZ2xvYmFsaW5zdGFsbC1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0Isb0NBQWlEO0FBQ2pELGdDQUFrRDtBQUNsRCxvQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFhLGdDQUFnQztJQUdkO0lBQXNDO0lBRm5ELGlCQUFpQixDQUFTO0lBRTFDLFlBQTZCLFdBQW1CLEVBQW1CLEtBQWE7UUFBbkQsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUM5RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFDeEIsZ0dBQWdHO1FBQ2hHLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3QyxNQUFNLElBQUEsYUFBSyxFQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM1RixHQUFHLEVBQUUsT0FBTztZQUNaLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sYUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxhQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSw4QkFBd0IsRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTFFLE9BQU87WUFDTCxPQUFPO1lBQ1AsS0FBSyxDQUFDLE9BQU87Z0JBQ1gsMkJBQTJCO2dCQUMzQixNQUFNLGFBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbENELDRFQWtDQztBQUVELE1BQWEsOEJBQThCO0lBQ2I7SUFBc0M7SUFBbEUsWUFBNEIsV0FBbUIsRUFBbUIsT0FBZTtRQUFyRCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUFtQixZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQ2pGLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFTSwyQkFBMkI7UUFDaEMseUJBQXlCO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCLENBQUMsVUFBa0I7UUFDdEQsNEZBQTRGO1FBQzVGLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUEsNkJBQXFCLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQXRCRCx3RUFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IElSdW5uZXJTb3VyY2UsIElQcmVwYXJlZFJ1bm5lclNvdXJjZSwgSVRlc3RMaWJyYXJ5U291cmNlIH0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHsgY29weURpcmVjdG9yeUNvbnRlbnRzIH0gZnJvbSAnLi4vZmlsZXMnO1xuaW1wb3J0IHsgbnBtUXVlcnlJbnN0YWxsZWRWZXJzaW9uIH0gZnJvbSAnLi4vbnBtJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi4vc2hlbGwnO1xuXG4vKipcbiAqIEEgbGlicmFyeSBkZXBlbmRlbmN5IHRoYXQgY2xpLWludGVnIGluc3RhbGxzIGludG8gaXRzIG93biBgbm9kZV9tb2R1bGVzYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lckxpYnJhcnlHbG9iYWxJbnN0YWxsU291cmNlIGltcGxlbWVudHMgSVJ1bm5lclNvdXJjZTxJVGVzdExpYnJhcnlTb3VyY2U+IHtcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHJhbmdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvdXJjZURlc2NyaXB0aW9uID0gYCR7dGhpcy5wYWNrYWdlTmFtZX1AJHt0aGlzLnJhbmdlfWA7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVubmVyUHJlcGFyZSgpOiBQcm9taXNlPElQcmVwYXJlZFJ1bm5lclNvdXJjZTxJVGVzdExpYnJhcnlTb3VyY2U+PiB7XG4gICAgLy8gQ3JlYXRlIGEgdGVtcGRpciB3aGVyZSB3ZSBpbnN0YWxsIHRoZSByZXF1ZXN0ZWQgcGFja2FnZSwgdGhlbiBzeW1saW5rIGludG8gb3VyIGBub2RlX21vZHVsZXNgXG4gICAgY29uc3QgdGVtcERpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAndG1wY2RrJykpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2luc3RhbGwnLCBgJHt0aGlzLnBhY2thZ2VOYW1lfUAke3RoaXMucmFuZ2V9YF0sIHtcbiAgICAgIGN3ZDogdGVtcERpcixcbiAgICAgIHNob3c6ICdlcnJvcicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzeW1saW5rUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdub2RlX21vZHVsZXMnLCB0aGlzLnBhY2thZ2VOYW1lKTtcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUoc3ltbGlua1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBmcy5zeW1saW5rKHBhdGguam9pbih0ZW1wRGlyLCAnbm9kZV9tb2R1bGVzJywgdGhpcy5wYWNrYWdlTmFtZSksIHN5bWxpbmtQYXRoLCAnanVuY3Rpb24nKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBucG1RdWVyeUluc3RhbGxlZFZlcnNpb24odGhpcy5wYWNrYWdlTmFtZSwgdGVtcERpcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbixcbiAgICAgIGFzeW5jIGRpc3Bvc2UoKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc3ltbGluayBhZ2FpblxuICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3ltbGlua1BhdGgpO1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6ZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gW1Rlc3RMaWJyYXJ5R2xvYmFsSW5zdGFsbFNvdXJjZSwgW3RoaXMucGFja2FnZU5hbWUsIHZlcnNpb25dXTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVzdExpYnJhcnlHbG9iYWxJbnN0YWxsU291cmNlIGltcGxlbWVudHMgSVRlc3RMaWJyYXJ5U291cmNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBhY2thZ2VOYW1lOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0SnNpaVBhY2thZ2VzQXZhaWxhYmxlKCk6IHZvaWQge1xuICAgIC8vIEZJWE1FOiBBbHdheXMgYSBuby1vcC5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplRG90bmV0UGFja2FnZXMoY3VycmVudERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRklYTUU6IHRoaXMgY29kZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBwYWNrYWdlIHNvdXJjZSwgcmVhbGx5LCBzbyBzaG91bGRuJ3QgYmUgaGVyZS5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQ1dEX0ZJTEVTX0RJUikge1xuICAgICAgYXdhaXQgY29weURpcmVjdG9yeUNvbnRlbnRzKHByb2Nlc3MuZW52LkNXRF9GSUxFU19ESVIsIGN1cnJlbnREaXIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRBbHBoYVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG59XG5cbiJdfQ==
|
package/npm-shrinkwrap.json
CHANGED
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"organization": true
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@aws-cdk/toolkit-lib": "0.3.
|
|
42
|
+
"@aws-cdk/toolkit-lib": "0.3.6",
|
|
43
43
|
"@aws-cdk/yarn-cling": "0.0.0",
|
|
44
44
|
"@cdklabs/eslint-plugin": "^1.3.2",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"publishConfig": {
|
|
116
116
|
"access": "public"
|
|
117
117
|
},
|
|
118
|
-
"version": "3.
|
|
118
|
+
"version": "3.9.0",
|
|
119
119
|
"types": "lib/index.d.ts",
|
|
120
120
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
121
121
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib/core');
|
|
2
|
+
const dynamodb = require('aws-cdk-lib/aws-dynamodb');
|
|
3
|
+
|
|
4
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
5
|
+
if (!stackPrefix) {
|
|
6
|
+
throw new Error(`the STACK_NAME_PREFIX environment variable is required`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class BaseStack extends cdk.Stack {
|
|
10
|
+
constructor(scope, id, props) {
|
|
11
|
+
super(scope, id, props);
|
|
12
|
+
|
|
13
|
+
// Create a random table name with prefix
|
|
14
|
+
if (process.env.VERSION == 'v2') {
|
|
15
|
+
new dynamodb.TableV2(this, 'MyGlobalTable', {
|
|
16
|
+
partitionKey: {
|
|
17
|
+
name: 'PK',
|
|
18
|
+
type: dynamodb.AttributeType.STRING,
|
|
19
|
+
},
|
|
20
|
+
tableName: 'integ-test-import-app-base-table-1',
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
new dynamodb.Table(this, 'MyTable', {
|
|
24
|
+
partitionKey: {
|
|
25
|
+
name: 'PK',
|
|
26
|
+
type: dynamodb.AttributeType.STRING,
|
|
27
|
+
},
|
|
28
|
+
tableName: 'integ-test-import-app-base-table-1',
|
|
29
|
+
removalPolicy: process.env.VERSION == 'v1' ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const app = new cdk.App();
|
|
36
|
+
new BaseStack(app, `${stackPrefix}-base-1`);
|
|
37
|
+
|
|
38
|
+
app.synth();
|
package/tests/cli-integ-tests/cdk-cdk-diff--import-existing-resources-shows-import.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/cdk-cdk-diff--import-existing-resources-shows-import.integtest.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
5
|
+
(0, lib_1.integTest)('cdk diff --import-existing-resources show resource being imported', (0, lib_1.withSpecificFixture)('import-app', async (fixture) => {
|
|
6
|
+
// GIVEN
|
|
7
|
+
await fixture.cdkDeploy('base-1', {
|
|
8
|
+
modEnv: {
|
|
9
|
+
VERSION: 'v1',
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
// THEN
|
|
13
|
+
let diff = await fixture.cdk(['diff', '--import-existing-resources', fixture.fullStackName('base-1')], {
|
|
14
|
+
modEnv: {
|
|
15
|
+
VERSION: 'v2',
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
// Assert there are no changes and diff shows import
|
|
19
|
+
expect(diff).not.toContain('There were no differences');
|
|
20
|
+
expect(diff).toContain('[←]');
|
|
21
|
+
expect(diff).toContain('import');
|
|
22
|
+
// THEN
|
|
23
|
+
diff = await fixture.cdk(['diff', fixture.fullStackName('base-1')], {
|
|
24
|
+
modEnv: {
|
|
25
|
+
VERSION: 'v2',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
// Assert there are no changes and diff shows add
|
|
29
|
+
expect(diff).not.toContain('There were no differences');
|
|
30
|
+
expect(diff).toContain('[+]');
|
|
31
|
+
// Deploy the stack with v3 to set table removal policy as destroy
|
|
32
|
+
await fixture.cdkDeploy('base-1', {
|
|
33
|
+
modEnv: {
|
|
34
|
+
VERSION: 'v3',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}));
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzLXNob3dzLWltcG9ydC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRpZmYtLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMtc2hvd3MtaW1wb3J0LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUEyRDtBQUUzRCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQ1AsbUVBQW1FLEVBQ25FLElBQUEseUJBQW1CLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNsRCxRQUFRO0lBQ1IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtRQUNoQyxNQUFNLEVBQUU7WUFDTixPQUFPLEVBQUUsSUFBSTtTQUNkO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztJQUNQLElBQUksSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDckcsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUFFLElBQUk7U0FDZDtLQUNGLENBQUMsQ0FBQztJQUVILG9EQUFvRDtJQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqQyxPQUFPO0lBQ1AsSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDbEUsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUFFLElBQUk7U0FDZDtLQUNGLENBQUMsQ0FBQztJQUVILGlEQUFpRDtJQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUIsa0VBQWtFO0lBQ2xFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7UUFDaEMsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUFFLElBQUk7U0FDZDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgc2hvdyByZXNvdXJjZSBiZWluZyBpbXBvcnRlZCcsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2ltcG9ydC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2UtMScsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBWRVJTSU9OOiAndjEnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBsZXQgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2Jhc2UtMScpXSwge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIFZFUlNJT046ICd2MicsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQXNzZXJ0IHRoZXJlIGFyZSBubyBjaGFuZ2VzIGFuZCBkaWZmIHNob3dzIGltcG9ydFxuICAgIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignW+KGkF0nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdpbXBvcnQnKTtcblxuICAgIC8vIFRIRU5cbiAgICBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdiYXNlLTEnKV0sIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBWRVJTSU9OOiAndjInLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFzc2VydCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBhbmQgZGlmZiBzaG93cyBhZGRcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1srXScpO1xuXG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRoIHYzIHRvIHNldCB0YWJsZSByZW1vdmFsIHBvbGljeSBhcyBkZXN0cm95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2UtMScsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBWRVJTSU9OOiAndjMnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
4
|
+
const lib_1 = require("../../lib");
|
|
5
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
6
|
+
const DAY = 24 * 60 * 60 * 1000;
|
|
7
|
+
const S3_ISOLATED_TAG = 'aws-cdk:isolated';
|
|
8
|
+
(0, lib_1.integTest)('Garbage Collection deletes unused s3 objects with rollback-buffer-days', (0, lib_1.withoutBootstrap)(async (fixture) => {
|
|
9
|
+
const toolkitStackName = fixture.bootstrapStackName;
|
|
10
|
+
const bootstrapBucketName = `aws-cdk-garbage-collect-integ-test-bckt-${(0, lib_1.randomString)()}`;
|
|
11
|
+
fixture.rememberToDeleteBucket(bootstrapBucketName); // just in case
|
|
12
|
+
await fixture.cdkBootstrapModern({
|
|
13
|
+
toolkitStackName,
|
|
14
|
+
bootstrapBucketName,
|
|
15
|
+
});
|
|
16
|
+
await fixture.cdkDeploy('lambda', {
|
|
17
|
+
options: [
|
|
18
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
19
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
20
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
21
|
+
'--force',
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
fixture.log('Setup complete!');
|
|
25
|
+
await fixture.cdkDestroy('lambda', {
|
|
26
|
+
options: [
|
|
27
|
+
'--context', `bootstrapBucket=${bootstrapBucketName}`,
|
|
28
|
+
'--context', `@aws-cdk/core:bootstrapQualifier=${fixture.qualifier}`,
|
|
29
|
+
'--toolkit-stack-name', toolkitStackName,
|
|
30
|
+
'--force',
|
|
31
|
+
],
|
|
32
|
+
});
|
|
33
|
+
// Pretend the assets were tagged with an old date > 1 day ago so that garbage collection
|
|
34
|
+
// should pick up and delete asset even with rollbackBufferDays=1
|
|
35
|
+
const res = await fixture.aws.s3.send(new client_s3_1.ListObjectsV2Command({ Bucket: bootstrapBucketName }));
|
|
36
|
+
for (const contents of res.Contents ?? []) {
|
|
37
|
+
await fixture.aws.s3.send(new client_s3_1.PutObjectTaggingCommand({
|
|
38
|
+
Bucket: bootstrapBucketName,
|
|
39
|
+
Key: contents.Key,
|
|
40
|
+
Tagging: {
|
|
41
|
+
TagSet: [{
|
|
42
|
+
Key: S3_ISOLATED_TAG,
|
|
43
|
+
Value: String(Date.now() - (30 * DAY)),
|
|
44
|
+
}],
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
await fixture.cdkGarbageCollect({
|
|
49
|
+
rollbackBufferDays: 1,
|
|
50
|
+
type: 's3',
|
|
51
|
+
bootstrapStackName: toolkitStackName,
|
|
52
|
+
});
|
|
53
|
+
fixture.log('Garbage collection complete!');
|
|
54
|
+
// assert that the bootstrap bucket is empty
|
|
55
|
+
await fixture.aws.s3.send(new client_s3_1.ListObjectsV2Command({ Bucket: bootstrapBucketName }))
|
|
56
|
+
.then((result) => {
|
|
57
|
+
expect(result.Contents).toBeUndefined();
|
|
58
|
+
});
|
|
59
|
+
}));
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWdjLWRlbGV0ZXMtdW51c2VkLXMzLW9iamVjdHMtcm9sbGJhY2suaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWdjLWRlbGV0ZXMtdW51c2VkLXMzLW9iamVjdHMtcm9sbGJhY2suaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0RBQW1GO0FBQ25GLG1DQUFzRTtBQUV0RSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBRTNDLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLHNCQUFnQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNqQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJDQUEyQyxJQUFBLGtCQUFZLEdBQUUsRUFBRSxDQUFDO0lBQ3hGLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZTtJQUVwRSxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQixnQkFBZ0I7UUFDaEIsbUJBQW1CO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7UUFDaEMsT0FBTyxFQUFFO1lBQ1AsV0FBVyxFQUFFLG1CQUFtQixtQkFBbUIsRUFBRTtZQUNyRCxXQUFXLEVBQUUsb0NBQW9DLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDcEUsc0JBQXNCLEVBQUUsZ0JBQWdCO1lBQ3hDLFNBQVM7U0FDVjtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvQixNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1FBQ2pDLE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRSxtQkFBbUIsbUJBQW1CLEVBQUU7WUFDckQsV0FBVyxFQUFFLG9DQUFvQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3BFLHNCQUFzQixFQUFFLGdCQUFnQjtZQUN4QyxTQUFTO1NBQ1Y7S0FDRixDQUFDLENBQUM7SUFFSCx5RkFBeUY7SUFDekYsaUVBQWlFO0lBQ2pFLE1BQU0sR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksZ0NBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsS0FBSyxNQUFNLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksbUNBQXVCLENBQUM7WUFDcEQsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7WUFDakIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxDQUFDO3dCQUNQLEdBQUcsRUFBRSxlQUFlO3dCQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztxQkFDdkMsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDOUIsa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixJQUFJLEVBQUUsSUFBSTtRQUNWLGtCQUFrQixFQUFFLGdCQUFnQjtLQUNyQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFNUMsNENBQTRDO0lBQzVDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksZ0NBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXN0T2JqZWN0c1YyQ29tbWFuZCwgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRob3V0Qm9vdHN0cmFwLCByYW5kb21TdHJpbmcgfSBmcm9tICcuLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5jb25zdCBEQVkgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgUzNfSVNPTEFURURfVEFHID0gJ2F3cy1jZGs6aXNvbGF0ZWQnO1xuXG5pbnRlZ1Rlc3QoXG4gICdHYXJiYWdlIENvbGxlY3Rpb24gZGVsZXRlcyB1bnVzZWQgczMgb2JqZWN0cyB3aXRoIHJvbGxiYWNrLWJ1ZmZlci1kYXlzJyxcbiAgd2l0aG91dEJvb3RzdHJhcChhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSBmaXh0dXJlLmJvb3RzdHJhcFN0YWNrTmFtZTtcbiAgICBjb25zdCBib290c3RyYXBCdWNrZXROYW1lID0gYGF3cy1jZGstZ2FyYmFnZS1jb2xsZWN0LWludGVnLXRlc3QtYmNrdC0ke3JhbmRvbVN0cmluZygpfWA7XG4gICAgZml4dHVyZS5yZW1lbWJlclRvRGVsZXRlQnVja2V0KGJvb3RzdHJhcEJ1Y2tldE5hbWUpOyAvLyBqdXN0IGluIGNhc2VcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrQm9vdHN0cmFwTW9kZXJuKHtcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBib290c3RyYXBCdWNrZXROYW1lLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHtcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJy0tY29udGV4dCcsIGBib290c3RyYXBCdWNrZXQ9JHtib290c3RyYXBCdWNrZXROYW1lfWAsXG4gICAgICAgICctLWNvbnRleHQnLCBgQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXI9JHtmaXh0dXJlLnF1YWxpZmllcn1gLFxuICAgICAgICAnLS10b29sa2l0LXN0YWNrLW5hbWUnLCB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAnLS1mb3JjZScsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGZpeHR1cmUubG9nKCdTZXR1cCBjb21wbGV0ZSEnKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbGFtYmRhJywge1xuICAgICAgb3B0aW9uczogW1xuICAgICAgICAnLS1jb250ZXh0JywgYGJvb3RzdHJhcEJ1Y2tldD0ke2Jvb3RzdHJhcEJ1Y2tldE5hbWV9YCxcbiAgICAgICAgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke2ZpeHR1cmUucXVhbGlmaWVyfWAsXG4gICAgICAgICctLXRvb2xraXQtc3RhY2stbmFtZScsIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICctLWZvcmNlJyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBQcmV0ZW5kIHRoZSBhc3NldHMgd2VyZSB0YWdnZWQgd2l0aCBhbiBvbGQgZGF0ZSA+IDEgZGF5IGFnbyBzbyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvblxuICAgIC8vIHNob3VsZCBwaWNrIHVwIGFuZCBkZWxldGUgYXNzZXQgZXZlbiB3aXRoIHJvbGxiYWNrQnVmZmVyRGF5cz0xXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZml4dHVyZS5hd3MuczMuc2VuZChuZXcgTGlzdE9iamVjdHNWMkNvbW1hbmQoeyBCdWNrZXQ6IGJvb3RzdHJhcEJ1Y2tldE5hbWUgfSkpO1xuICAgIGZvciAoY29uc3QgY29udGVudHMgb2YgcmVzLkNvbnRlbnRzID8/IFtdKSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5zMy5zZW5kKG5ldyBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogYm9vdHN0cmFwQnVja2V0TmFtZSxcbiAgICAgICAgS2V5OiBjb250ZW50cy5LZXksXG4gICAgICAgIFRhZ2dpbmc6IHtcbiAgICAgICAgICBUYWdTZXQ6IFt7XG4gICAgICAgICAgICBLZXk6IFMzX0lTT0xBVEVEX1RBRyxcbiAgICAgICAgICAgIFZhbHVlOiBTdHJpbmcoRGF0ZS5ub3coKSAtICgzMCAqIERBWSkpLFxuICAgICAgICAgIH1dLFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrR2FyYmFnZUNvbGxlY3Qoe1xuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAxLFxuICAgICAgdHlwZTogJ3MzJyxcbiAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICB9KTtcbiAgICBmaXh0dXJlLmxvZygnR2FyYmFnZSBjb2xsZWN0aW9uIGNvbXBsZXRlIScpO1xuXG4gICAgLy8gYXNzZXJ0IHRoYXQgdGhlIGJvb3RzdHJhcCBidWNrZXQgaXMgZW1wdHlcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zMy5zZW5kKG5ldyBMaXN0T2JqZWN0c1YyQ29tbWFuZCh7IEJ1Y2tldDogYm9vdHN0cmFwQnVja2V0TmFtZSB9KSlcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5Db250ZW50cykudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgfSk7XG4gIH0pLFxuKTtcbiJdfQ==
|