@aws-cdk/toolkit-lib 1.28.0 → 1.29.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/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/validate/index.d.ts +10 -0
- package/lib/actions/validate/index.js +1 -1
- package/lib/api/cloud-assembly/environment.js +16 -4
- package/lib/api/deployments/cfn-api.d.ts +24 -6
- package/lib/api/deployments/cfn-api.js +81 -33
- package/lib/api/hotswap/lambda-functions.js +3 -33
- package/lib/api/io/private/index.d.ts +1 -0
- package/lib/api/io/private/index.js +2 -1
- package/lib/api/io/private/messages.d.ts +1 -0
- package/lib/api/io/private/messages.js +8 -4
- package/lib/api/io/private/span.d.ts +6 -0
- package/lib/api/io/private/span.js +10 -3
- package/lib/api/validate/validate-formatting.d.ts +5 -0
- package/lib/api/validate/validate-formatting.js +127 -0
- package/lib/api/work-graph/work-graph-builder.d.ts +3 -0
- package/lib/api/work-graph/work-graph-builder.js +38 -3
- package/lib/api/work-graph/work-graph-types.d.ts +19 -7
- package/lib/api/work-graph/work-graph-types.js +1 -1
- package/lib/api/work-graph/work-graph.d.ts +2 -1
- package/lib/api/work-graph/work-graph.js +8 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/private/tools.d.ts +2 -0
- package/lib/private/tools.js +120 -0
- package/lib/private/tools.js.plain +21 -0
- package/lib/toolkit/toolkit.d.ts +2 -1
- package/lib/toolkit/toolkit.js +103 -19
- package/lib/util/index.d.ts +0 -1
- package/lib/util/index.js +1 -2
- package/package.json +13 -11
- package/lib/util/archive.d.ts +0 -2
- package/lib/util/archive.js +0 -86
package/lib/util/index.d.ts
CHANGED
package/lib/util/index.js
CHANGED
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./archive"), exports);
|
|
18
17
|
__exportStar(require("./arrays"), exports);
|
|
19
18
|
__exportStar(require("./bool"), exports);
|
|
20
19
|
__exportStar(require("./bytes"), exports);
|
|
@@ -35,4 +34,4 @@ __exportStar(require("./type-brands"), exports);
|
|
|
35
34
|
__exportStar(require("./types"), exports);
|
|
36
35
|
__exportStar(require("./version-range"), exports);
|
|
37
36
|
__exportStar(require("./yaml-cfn"), exports);
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLHlDQUF1QjtBQUN2QiwwQ0FBd0I7QUFDeEIsbURBQWlDO0FBQ2pDLGlEQUErQjtBQUMvQixnREFBOEI7QUFDOUIsaURBQStCO0FBQy9CLGlEQUErQjtBQUMvQixtREFBaUM7QUFDakMseUNBQXVCO0FBQ3ZCLHdDQUFzQjtBQUN0Qiw0Q0FBMEI7QUFDMUIsNkNBQTJCO0FBQzNCLGlEQUErQjtBQUMvQiw4Q0FBNEI7QUFDNUIsd0RBQXNDO0FBQ3RDLGdEQUE4QjtBQUM5QiwwQ0FBd0I7QUFDeEIsa0RBQWdDO0FBQ2hDLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXJyYXlzJztcbmV4cG9ydCAqIGZyb20gJy4vYm9vbCc7XG5leHBvcnQgKiBmcm9tICcuL2J5dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZW50LWhhc2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rvcmllcyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2dsb2ItbWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL2d1ZXNzLWxhbmd1YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vanNvbic7XG5leHBvcnQgKiBmcm9tICcuL25ldCc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJhbGxlbCc7XG5leHBvcnQgKiBmcm9tICcuL3BhY2thZ2UtaW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcmlhbGl6ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZy1tYW5pcHVsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlLWJyYW5kcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbi1yYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL3lhbWwtY2ZuJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -35,14 +35,15 @@
|
|
|
35
35
|
"organization": true
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@aws-cdk/aws-service-spec": "^0.1.
|
|
38
|
+
"@aws-cdk/aws-service-spec": "^0.1.185",
|
|
39
39
|
"@aws-cdk/cli-plugin-contract": "2.182.2",
|
|
40
|
-
"@
|
|
40
|
+
"@aws-cdk/private-tools": "0.0.0",
|
|
41
|
+
"@cdklabs/eslint-plugin": "^2.0.9",
|
|
41
42
|
"@jest/environment": "^29.7.0",
|
|
42
43
|
"@jest/globals": "^29.7.0",
|
|
43
44
|
"@jest/types": "^29.6.3",
|
|
44
|
-
"@microsoft/api-extractor": "^7.58.
|
|
45
|
-
"@smithy/util-stream": "^4.6.
|
|
45
|
+
"@microsoft/api-extractor": "^7.58.8",
|
|
46
|
+
"@smithy/util-stream": "^4.6.6",
|
|
46
47
|
"@stylistic/eslint-plugin": "^3",
|
|
47
48
|
"@types/fs-extra": "^11",
|
|
48
49
|
"@types/jest": "^29.5.14",
|
|
@@ -52,14 +53,15 @@
|
|
|
52
53
|
"@types/split2": "^4.2.3",
|
|
53
54
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
54
55
|
"@typescript-eslint/parser": "^8",
|
|
55
|
-
"aws-cdk-lib": "2.
|
|
56
|
+
"aws-cdk-lib": "2.258.1",
|
|
56
57
|
"aws-sdk-client-mock": "^4.1.0",
|
|
57
58
|
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
58
59
|
"commit-and-tag-version": "^12",
|
|
59
60
|
"constructs": "^10.0.0",
|
|
61
|
+
"esbuild": "^0.28.1",
|
|
60
62
|
"eslint": "^9",
|
|
61
63
|
"eslint-config-prettier": "^10.1.8",
|
|
62
|
-
"eslint-import-resolver-typescript": "^4.4.
|
|
64
|
+
"eslint-import-resolver-typescript": "^4.4.5",
|
|
63
65
|
"eslint-plugin-import": "^2.32.0",
|
|
64
66
|
"eslint-plugin-jest": "^29.15.2",
|
|
65
67
|
"eslint-plugin-jsdoc": "^62.9.0",
|
|
@@ -73,7 +75,7 @@
|
|
|
73
75
|
"nock": "13",
|
|
74
76
|
"nx": "^22.7.5",
|
|
75
77
|
"prettier": "^2.8",
|
|
76
|
-
"projen": "^0.99.
|
|
78
|
+
"projen": "^0.99.73",
|
|
77
79
|
"ts-jest": "^29.4.11",
|
|
78
80
|
"tsx": "^4.22.4",
|
|
79
81
|
"typescript": "5.9"
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
"dependencies": {
|
|
85
87
|
"@aws-cdk/cdk-assets-lib": "^1",
|
|
86
88
|
"@aws-cdk/cloud-assembly-api": "2.2.5",
|
|
87
|
-
"@aws-cdk/cloud-assembly-schema": ">=54.
|
|
89
|
+
"@aws-cdk/cloud-assembly-schema": ">=54.3.0",
|
|
88
90
|
"@aws-cdk/cloudformation-diff": "^2",
|
|
89
91
|
"@aws-cdk/cx-api": "^2",
|
|
90
92
|
"@aws-sdk/client-appsync": "^3",
|
|
@@ -115,7 +117,7 @@
|
|
|
115
117
|
"@smithy/util-retry": "^4",
|
|
116
118
|
"@smithy/util-waiter": "^4",
|
|
117
119
|
"archiver": "^7.0.1",
|
|
118
|
-
"cdk-from-cfn": "^0.
|
|
120
|
+
"cdk-from-cfn": "^0.304.0",
|
|
119
121
|
"chalk": "^4",
|
|
120
122
|
"chokidar": "^4",
|
|
121
123
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -123,7 +125,7 @@
|
|
|
123
125
|
"fs-extra": "^11",
|
|
124
126
|
"p-limit": "^3",
|
|
125
127
|
"picomatch": "^4",
|
|
126
|
-
"semver": "^7.8.
|
|
128
|
+
"semver": "^7.8.4",
|
|
127
129
|
"split2": "^4.2.0",
|
|
128
130
|
"wrap-ansi": "^7",
|
|
129
131
|
"yaml": "^1"
|
|
@@ -148,7 +150,7 @@
|
|
|
148
150
|
"publishConfig": {
|
|
149
151
|
"access": "public"
|
|
150
152
|
},
|
|
151
|
-
"version": "1.
|
|
153
|
+
"version": "1.29.0",
|
|
152
154
|
"packageManager": "yarn@4.13.0",
|
|
153
155
|
"types": "lib/index.d.ts",
|
|
154
156
|
"exports": {
|
package/lib/util/archive.d.ts
DELETED
package/lib/util/archive.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.zipDirectory = zipDirectory;
|
|
4
|
-
const console_1 = require("console");
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const fast_glob_1 = require("fast-glob");
|
|
8
|
-
const format_error_1 = require("./format-error");
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
10
|
-
const archiver = require('archiver');
|
|
11
|
-
// Adapted from cdk-assets
|
|
12
|
-
async function zipDirectory(directory, outputFile) {
|
|
13
|
-
// We write to a temporary file and rename at the last moment. This is so that if we are
|
|
14
|
-
// interrupted during this process, we don't leave a half-finished file in the target location.
|
|
15
|
-
const temporaryOutputFile = `${outputFile}.${randomString()}._tmp`;
|
|
16
|
-
await writeZipFile(directory, temporaryOutputFile);
|
|
17
|
-
await moveIntoPlace(temporaryOutputFile, outputFile);
|
|
18
|
-
}
|
|
19
|
-
function writeZipFile(directory, outputFile) {
|
|
20
|
-
return new Promise(async (ok, fail) => {
|
|
21
|
-
// The below options are needed to support following symlinks when building zip files:
|
|
22
|
-
// - onlyFiles: This will prevent symlinks themselves from being copied into the zip.
|
|
23
|
-
// - followSymbolicLinks: This will follow symlinks and copy the files within.
|
|
24
|
-
const globOptions = {
|
|
25
|
-
dot: true,
|
|
26
|
-
onlyFiles: true,
|
|
27
|
-
followSymbolicLinks: true,
|
|
28
|
-
cwd: directory,
|
|
29
|
-
};
|
|
30
|
-
const files = (0, fast_glob_1.globSync)('**', globOptions); // The output here is already sorted
|
|
31
|
-
const output = (0, fs_1.createWriteStream)(outputFile);
|
|
32
|
-
const archive = archiver('zip');
|
|
33
|
-
archive.on('warning', fail);
|
|
34
|
-
archive.on('error', fail);
|
|
35
|
-
// archive has been finalized and the output file descriptor has closed, resolve promise
|
|
36
|
-
// this has to be done before calling `finalize` since the events may fire immediately after.
|
|
37
|
-
// see https://www.npmjs.com/package/archiver
|
|
38
|
-
output.once('close', ok);
|
|
39
|
-
archive.pipe(output);
|
|
40
|
-
// Append files serially to ensure file order
|
|
41
|
-
for (const file of files) {
|
|
42
|
-
const fullPath = path.resolve(directory, file);
|
|
43
|
-
// Exactly 2 promises
|
|
44
|
-
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
45
|
-
const [data, stat] = await Promise.all([fs_1.promises.readFile(fullPath), fs_1.promises.stat(fullPath)]);
|
|
46
|
-
archive.append(data, {
|
|
47
|
-
name: file,
|
|
48
|
-
mode: stat.mode,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
await archive.finalize();
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Rename the file to the target location, taking into account:
|
|
56
|
-
*
|
|
57
|
-
* - That we may see EPERM on Windows while an Antivirus scanner still has the
|
|
58
|
-
* file open, so retry a couple of times.
|
|
59
|
-
* - This same function may be called in parallel and be interrupted at any point.
|
|
60
|
-
*/
|
|
61
|
-
async function moveIntoPlace(source, target) {
|
|
62
|
-
let delay = 100;
|
|
63
|
-
let attempts = 5;
|
|
64
|
-
while (true) {
|
|
65
|
-
try {
|
|
66
|
-
// 'rename' is guaranteed to overwrite an existing target, as long as it is a file (not a directory)
|
|
67
|
-
await fs_1.promises.rename(source, target);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
catch (e) {
|
|
71
|
-
if (e.code !== 'EPERM' || attempts-- <= 0) {
|
|
72
|
-
throw e;
|
|
73
|
-
}
|
|
74
|
-
(0, console_1.error)((0, format_error_1.formatErrorMessage)(e));
|
|
75
|
-
await sleep(Math.floor(Math.random() * delay));
|
|
76
|
-
delay *= 2;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function sleep(ms) {
|
|
81
|
-
return new Promise(ok => setTimeout(ok, ms));
|
|
82
|
-
}
|
|
83
|
-
function randomString() {
|
|
84
|
-
return Math.random().toString(36).replace(/[^a-z0-9]+/g, '');
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyY2hpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSxvQ0FNQztBQWpCRCxxQ0FBZ0M7QUFDaEMsMkJBQXVEO0FBQ3ZELDZCQUE2QjtBQUU3Qix5Q0FBcUM7QUFDckMsaURBQW9EO0FBRXBELGlFQUFpRTtBQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFckMsMEJBQTBCO0FBQ25CLEtBQUssVUFBVSxZQUFZLENBQUMsU0FBaUIsRUFBRSxVQUFrQjtJQUN0RSx3RkFBd0Y7SUFDeEYsK0ZBQStGO0lBQy9GLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxVQUFVLElBQUksWUFBWSxFQUFFLE9BQU8sQ0FBQztJQUNuRSxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRCxNQUFNLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsU0FBaUIsRUFBRSxVQUFrQjtJQUN6RCxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDcEMsc0ZBQXNGO1FBQ3RGLHFGQUFxRjtRQUNyRiw4RUFBOEU7UUFDOUUsTUFBTSxXQUFXLEdBQVk7WUFDM0IsR0FBRyxFQUFFLElBQUk7WUFDVCxTQUFTLEVBQUUsSUFBSTtZQUNmLG1CQUFtQixFQUFFLElBQUk7WUFDekIsR0FBRyxFQUFFLFNBQVM7U0FDZixDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBUSxFQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztRQUUvRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFpQixFQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQix3RkFBd0Y7UUFDeEYsNkZBQTZGO1FBQzdGLDZDQUE2QztRQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV6QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJCLDZDQUE2QztRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLHFCQUFxQjtZQUNyQix3RUFBd0U7WUFDeEUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNuQixJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILEtBQUssVUFBVSxhQUFhLENBQUMsTUFBYyxFQUFFLE1BQWM7SUFDekQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNqQixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDO1lBQ0gsb0dBQW9HO1lBQ3BHLE1BQU0sYUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELElBQUEsZUFBSyxFQUFDLElBQUEsaUNBQWtCLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9DLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsWUFBWTtJQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXJyb3IgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMgfSBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgZ2xvYlN5bmMgfSBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi9mb3JtYXQtZXJyb3InO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgYXJjaGl2ZXIgPSByZXF1aXJlKCdhcmNoaXZlcicpO1xuXG4vLyBBZGFwdGVkIGZyb20gY2RrLWFzc2V0c1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHppcERpcmVjdG9yeShkaXJlY3Rvcnk6IHN0cmluZywgb3V0cHV0RmlsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFdlIHdyaXRlIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJlbmFtZSBhdCB0aGUgbGFzdCBtb21lbnQuIFRoaXMgaXMgc28gdGhhdCBpZiB3ZSBhcmVcbiAgLy8gaW50ZXJydXB0ZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcywgd2UgZG9uJ3QgbGVhdmUgYSBoYWxmLWZpbmlzaGVkIGZpbGUgaW4gdGhlIHRhcmdldCBsb2NhdGlvbi5cbiAgY29uc3QgdGVtcG9yYXJ5T3V0cHV0RmlsZSA9IGAke291dHB1dEZpbGV9LiR7cmFuZG9tU3RyaW5nKCl9Ll90bXBgO1xuICBhd2FpdCB3cml0ZVppcEZpbGUoZGlyZWN0b3J5LCB0ZW1wb3JhcnlPdXRwdXRGaWxlKTtcbiAgYXdhaXQgbW92ZUludG9QbGFjZSh0ZW1wb3JhcnlPdXRwdXRGaWxlLCBvdXRwdXRGaWxlKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVaaXBGaWxlKGRpcmVjdG9yeTogc3RyaW5nLCBvdXRwdXRGaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChvaywgZmFpbCkgPT4ge1xuICAgIC8vIFRoZSBiZWxvdyBvcHRpb25zIGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBmb2xsb3dpbmcgc3ltbGlua3Mgd2hlbiBidWlsZGluZyB6aXAgZmlsZXM6XG4gICAgLy8gLSBvbmx5RmlsZXM6IFRoaXMgd2lsbCBwcmV2ZW50IHN5bWxpbmtzIHRoZW1zZWx2ZXMgZnJvbSBiZWluZyBjb3BpZWQgaW50byB0aGUgemlwLlxuICAgIC8vIC0gZm9sbG93U3ltYm9saWNMaW5rczogVGhpcyB3aWxsIGZvbGxvdyBzeW1saW5rcyBhbmQgY29weSB0aGUgZmlsZXMgd2l0aGluLlxuICAgIGNvbnN0IGdsb2JPcHRpb25zOiBPcHRpb25zID0ge1xuICAgICAgZG90OiB0cnVlLFxuICAgICAgb25seUZpbGVzOiB0cnVlLFxuICAgICAgZm9sbG93U3ltYm9saWNMaW5rczogdHJ1ZSxcbiAgICAgIGN3ZDogZGlyZWN0b3J5LFxuICAgIH07XG4gICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYygnKionLCBnbG9iT3B0aW9ucyk7IC8vIFRoZSBvdXRwdXQgaGVyZSBpcyBhbHJlYWR5IHNvcnRlZFxuXG4gICAgY29uc3Qgb3V0cHV0ID0gY3JlYXRlV3JpdGVTdHJlYW0ob3V0cHV0RmlsZSk7XG5cbiAgICBjb25zdCBhcmNoaXZlID0gYXJjaGl2ZXIoJ3ppcCcpO1xuICAgIGFyY2hpdmUub24oJ3dhcm5pbmcnLCBmYWlsKTtcbiAgICBhcmNoaXZlLm9uKCdlcnJvcicsIGZhaWwpO1xuXG4gICAgLy8gYXJjaGl2ZSBoYXMgYmVlbiBmaW5hbGl6ZWQgYW5kIHRoZSBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIGhhcyBjbG9zZWQsIHJlc29sdmUgcHJvbWlzZVxuICAgIC8vIHRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgYGZpbmFsaXplYCBzaW5jZSB0aGUgZXZlbnRzIG1heSBmaXJlIGltbWVkaWF0ZWx5IGFmdGVyLlxuICAgIC8vIHNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9hcmNoaXZlclxuICAgIG91dHB1dC5vbmNlKCdjbG9zZScsIG9rKTtcblxuICAgIGFyY2hpdmUucGlwZShvdXRwdXQpO1xuXG4gICAgLy8gQXBwZW5kIGZpbGVzIHNlcmlhbGx5IHRvIGVuc3VyZSBmaWxlIG9yZGVyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShkaXJlY3RvcnksIGZpbGUpO1xuICAgICAgLy8gRXhhY3RseSAyIHByb21pc2VzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgIGNvbnN0IFtkYXRhLCBzdGF0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtmcy5yZWFkRmlsZShmdWxsUGF0aCksIGZzLnN0YXQoZnVsbFBhdGgpXSk7XG4gICAgICBhcmNoaXZlLmFwcGVuZChkYXRhLCB7XG4gICAgICAgIG5hbWU6IGZpbGUsXG4gICAgICAgIG1vZGU6IHN0YXQubW9kZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IGFyY2hpdmUuZmluYWxpemUoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSB0YXJnZXQgbG9jYXRpb24sIHRha2luZyBpbnRvIGFjY291bnQ6XG4gKlxuICogLSBUaGF0IHdlIG1heSBzZWUgRVBFUk0gb24gV2luZG93cyB3aGlsZSBhbiBBbnRpdmlydXMgc2Nhbm5lciBzdGlsbCBoYXMgdGhlXG4gKiAgIGZpbGUgb3Blbiwgc28gcmV0cnkgYSBjb3VwbGUgb2YgdGltZXMuXG4gKiAtIFRoaXMgc2FtZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIHBhcmFsbGVsIGFuZCBiZSBpbnRlcnJ1cHRlZCBhdCBhbnkgcG9pbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1vdmVJbnRvUGxhY2Uoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSB7XG4gIGxldCBkZWxheSA9IDEwMDtcbiAgbGV0IGF0dGVtcHRzID0gNTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgLy8gJ3JlbmFtZScgaXMgZ3VhcmFudGVlZCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGFyZ2V0LCBhcyBsb25nIGFzIGl0IGlzIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KVxuICAgICAgYXdhaXQgZnMucmVuYW1lKHNvdXJjZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLmNvZGUgIT09ICdFUEVSTScgfHwgYXR0ZW1wdHMtLSA8PSAwKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBlcnJvcihmb3JtYXRFcnJvck1lc3NhZ2UoZSkpO1xuICAgICAgYXdhaXQgc2xlZXAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZGVsYXkpKTtcbiAgICAgIGRlbGF5ICo9IDI7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKG9rID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJycpO1xufVxuIl19
|