@aws-cdk-testing/cli-integ 2.164.1 → 2.166.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/aws.d.ts +3 -2
- package/lib/aws.js +9 -8
- package/lib/corking.d.ts +0 -3
- package/lib/files.js +10 -11
- package/lib/github.js +2 -3
- package/lib/integ-test.d.ts +0 -1
- package/lib/integ-test.js +3 -4
- package/lib/lists.js +2 -3
- package/lib/memoize.js +2 -3
- package/lib/npm.d.ts +4 -0
- package/lib/npm.js +26 -3
- package/lib/package-sources/release-source.d.ts +1 -0
- package/lib/package-sources/release-source.js +4 -1
- package/lib/package-sources/repo-source.d.ts +1 -0
- package/lib/package-sources/repo-source.js +7 -4
- package/lib/package-sources/source.d.ts +4 -0
- package/lib/package-sources/source.js +1 -1
- package/lib/package-sources/subprocess.js +3 -4
- package/lib/shell.d.ts +2 -6
- package/lib/shell.js +23 -21
- package/lib/staging/maven.js +5 -6
- package/lib/staging/npm.js +4 -5
- package/lib/staging/nuget.js +4 -5
- package/lib/staging/parallel-shell.d.ts +0 -1
- package/lib/staging/parallel-shell.js +2 -3
- package/lib/staging/pypi.js +4 -5
- package/lib/with-aws.d.ts +1 -1
- package/lib/with-aws.js +3 -4
- package/lib/with-cdk-app.d.ts +2 -2
- package/lib/with-cdk-app.js +26 -17
- package/lib/with-cli-lib.js +4 -4
- package/lib/with-packages.js +2 -3
- package/lib/with-sam.js +19 -14
- package/lib/with-temporary-directory.js +2 -3
- package/lib/with-timeout.js +2 -3
- package/package.json +5 -5
- package/resources/cdk-apps/app/app.js +14 -0
- package/resources/cdk-apps/rollback-test-app/app.js +12 -2
- package/tests/cli-integ-tests/cli.integtest.js +117 -2
- package/tests/cli-integ-tests/garbage-collection.integtest.js +153 -6
- package/tests/init-typescript-app/init-typescript-app.integtest.js +7 -2
- package/tests/tool-integrations/amplify.integtest.d.ts +1 -0
- package/tests/tool-integrations/amplify.integtest.js +39 -0
- package/tests/tool-integrations/with-tool-context.d.ts +9 -0
- package/tests/tool-integrations/with-tool-context.js +13 -0
package/lib/with-sam.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SamIntegrationTestFixture = void 0;
|
|
4
|
+
exports.withSamIntegrationCdkApp = withSamIntegrationCdkApp;
|
|
5
|
+
exports.withSamIntegrationFixture = withSamIntegrationFixture;
|
|
6
|
+
exports.randomInteger = randomInteger;
|
|
7
|
+
exports.shellWithAction = shellWithAction;
|
|
4
8
|
const child_process = require("child_process");
|
|
5
9
|
const fs = require("fs");
|
|
6
10
|
const os = require("os");
|
|
@@ -69,7 +73,6 @@ function withSamIntegrationCdkApp(block) {
|
|
|
69
73
|
}
|
|
70
74
|
};
|
|
71
75
|
}
|
|
72
|
-
exports.withSamIntegrationCdkApp = withSamIntegrationCdkApp;
|
|
73
76
|
/**
|
|
74
77
|
* Return whether or not the error is being caused by gopkg.in being down
|
|
75
78
|
*
|
|
@@ -103,11 +106,10 @@ function errorCausedByGoPkg(error) {
|
|
|
103
106
|
function withSamIntegrationFixture(block) {
|
|
104
107
|
return (0, with_aws_1.withAws)((0, with_timeout_1.withTimeout)(with_cdk_app_1.DEFAULT_TEST_TIMEOUT_S, withSamIntegrationCdkApp(block)));
|
|
105
108
|
}
|
|
106
|
-
exports.withSamIntegrationFixture = withSamIntegrationFixture;
|
|
107
109
|
class SamIntegrationTestFixture extends with_cdk_app_1.TestFixture {
|
|
108
110
|
async samShell(command, filter, action, options = {}) {
|
|
109
111
|
return shellWithAction(command, filter, action, {
|
|
110
|
-
|
|
112
|
+
outputs: [this.output],
|
|
111
113
|
cwd: path.join(this.integTestDir, 'cdk.out').toString(),
|
|
112
114
|
...options,
|
|
113
115
|
});
|
|
@@ -149,7 +151,6 @@ exports.SamIntegrationTestFixture = SamIntegrationTestFixture;
|
|
|
149
151
|
function randomInteger(min, max) {
|
|
150
152
|
return Math.floor(Math.random() * (max - min) + min);
|
|
151
153
|
}
|
|
152
|
-
exports.randomInteger = randomInteger;
|
|
153
154
|
/**
|
|
154
155
|
* A shell command that does what you want
|
|
155
156
|
*
|
|
@@ -159,7 +160,12 @@ async function shellWithAction(command, filter, action, options = {}, actionTime
|
|
|
159
160
|
if (options.modEnv && options.env) {
|
|
160
161
|
throw new Error('Use either env or modEnv but not both');
|
|
161
162
|
}
|
|
162
|
-
|
|
163
|
+
const writeToOutputs = (x) => {
|
|
164
|
+
for (const output of options.outputs ?? []) {
|
|
165
|
+
output.write(x);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
writeToOutputs(`💻 ${command.join(' ')}\n`);
|
|
163
169
|
const env = options.env ?? (options.modEnv ? { ...process.env, ...options.modEnv } : undefined);
|
|
164
170
|
const child = child_process.spawn(command[0], command.slice(1), {
|
|
165
171
|
...options,
|
|
@@ -179,17 +185,17 @@ async function shellWithAction(command, filter, action, options = {}, actionTime
|
|
|
179
185
|
out.push(Buffer.from(chunk));
|
|
180
186
|
if (!actionExecuted && typeof filter === 'string' && Buffer.concat(out).toString('utf-8').includes(filter) && typeof action === 'function') {
|
|
181
187
|
actionExecuted = true;
|
|
182
|
-
|
|
188
|
+
writeToOutputs('before executing action');
|
|
183
189
|
action().then((output) => {
|
|
184
|
-
|
|
190
|
+
writeToOutputs(`action output is ${output}`);
|
|
185
191
|
actionOutput = output;
|
|
186
192
|
actionSucceeded = true;
|
|
187
193
|
}).catch((error) => {
|
|
188
|
-
|
|
194
|
+
writeToOutputs(`action error is ${error}`);
|
|
189
195
|
actionSucceeded = false;
|
|
190
196
|
actionOutput = error;
|
|
191
197
|
}).finally(() => {
|
|
192
|
-
|
|
198
|
+
writeToOutputs('terminate sam sub process');
|
|
193
199
|
killSubProcess(child, command.join(' '));
|
|
194
200
|
});
|
|
195
201
|
}
|
|
@@ -204,12 +210,12 @@ async function shellWithAction(command, filter, action, options = {}, actionTime
|
|
|
204
210
|
}, actionTimeoutSeconds * 1000).unref();
|
|
205
211
|
}
|
|
206
212
|
child.stdout.on('data', chunk => {
|
|
207
|
-
|
|
213
|
+
writeToOutputs(chunk);
|
|
208
214
|
stdout.push(chunk);
|
|
209
215
|
executeAction(chunk);
|
|
210
216
|
});
|
|
211
217
|
child.stderr.on('data', chunk => {
|
|
212
|
-
|
|
218
|
+
writeToOutputs(chunk);
|
|
213
219
|
if (options.captureStderr ?? true) {
|
|
214
220
|
stderr.push(chunk);
|
|
215
221
|
}
|
|
@@ -234,7 +240,6 @@ async function shellWithAction(command, filter, action, options = {}, actionTime
|
|
|
234
240
|
});
|
|
235
241
|
});
|
|
236
242
|
}
|
|
237
|
-
exports.shellWithAction = shellWithAction;
|
|
238
243
|
function killSubProcess(child, command) {
|
|
239
244
|
/**
|
|
240
245
|
* Check if the sub process is running in container, so child_process.spawn will
|
|
@@ -247,4 +252,4 @@ function killSubProcess(child, command) {
|
|
|
247
252
|
child.kill('SIGINT');
|
|
248
253
|
}
|
|
249
254
|
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLXNhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQTBCO0FBRTFCLDJDQUE0QztBQUM1QyxtQ0FBK0M7QUFDL0MseUNBQWlEO0FBQ2pELGlEQUF5RztBQUN6RyxpREFBNkM7QUFRN0M7O0dBRUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBcUMsS0FBNEQ7SUFDdkksT0FBTyxLQUFLLEVBQUUsT0FBVSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxXQUFXLEtBQUssRUFBRSxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVsRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixlQUFlLElBQUksQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBRXhELE1BQU0sSUFBQSw2QkFBYyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQWEsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlHLE1BQU0sT0FBTyxHQUFHLElBQUkseUJBQXlCLENBQzNDLFlBQVksRUFDWixlQUFlLEVBQ2YsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsR0FBRyxFQUNYLE9BQU8sQ0FBQyxZQUFZLENBQUMs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O1NBQU0sQ0FBQztRQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUVILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBUZXN0Q29udGV4dCB9IGZyb20gJy4vaW50ZWctdGVzdCc7XG5pbXBvcnQgeyBSRVNPVVJDRVNfRElSIH0gZnJvbSAnLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgU2hlbGxPcHRpb25zLCByaW1yYWYgfSBmcm9tICcuL3NoZWxsJztcbmltcG9ydCB7IEF3c0NvbnRleHQsIHdpdGhBd3MgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IGNsb25lRGlyZWN0b3J5LCBpbnN0YWxsTnBtUGFja2FnZXMsIFRlc3RGaXh0dXJlLCBERUZBVUxUX1RFU1RfVElNRU9VVF9TIH0gZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3dpdGgtdGltZW91dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uT3V0cHV0IHtcbiAgYWN0aW9uU3VjY2VlZGVkPzogYm9vbGVhbjtcbiAgYWN0aW9uT3V0cHV0PzogYW55O1xuICBzaGVsbE91dHB1dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYSBTQU0gSW50ZWdyYXRpb24gQ0RLIGFwcCBmaXh0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2FtSW50ZWdyYXRpb25DZGtBcHA8QSBleHRlbmRzIFRlc3RDb250ZXh0ICYgQXdzQ29udGV4dD4oYmxvY2s6IChjb250ZXh0OiBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IHJhbmR5ID0gY29udGV4dC5yYW5kb21TdHJpbmc7XG4gICAgY29uc3Qgc3RhY2tOYW1lUHJlZml4ID0gYGNka3Rlc3QtJHtyYW5keX1gO1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay1pbnRlZy0ke3JhbmR5fWApO1xuXG4gICAgY29udGV4dC5sb2coYCBTdGFjayBwcmVmaXg6ICAgJHtzdGFja05hbWVQcmVmaXh9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBUZXN0IGRpcmVjdG9yeTogJHtpbnRlZ1Rlc3REaXJ9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBSZWdpb246ICAgICAgICAgJHtjb250ZXh0LmF3cy5yZWdpb259XFxuYCk7XG5cbiAgICBhd2FpdCBjbG9uZURpcmVjdG9yeShwYXRoLmpvaW4oUkVTT1VSQ0VTX0RJUiwgJ2Nkay1hcHBzJywgJ3NhbV9jZGtfaW50ZWdfYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG5cbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbGxhdGlvblZlcnNpb24gPSBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKTtcblxuICAgICAgaWYgKGZpeHR1cmUucGFja2FnZXMubWFqb3JWZXJzaW9uKCkgPT09ICcxJykge1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdAYXdzLWNkay9hd3MtaWFtJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXknOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxhbWJkYS1nbyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtbm9kZWpzJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxhbWJkYS1weXRob24nOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtbG9ncyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2NvcmUnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJzogJ14zJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhbHBoYUluc3RhbGxhdGlvblZlcnNpb24gPSBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEFscGhhVmVyc2lvbigpO1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdhd3MtY2RrLWxpYic6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZ28tYWxwaGEnOiBhbHBoYUluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJzogYWxwaGFJbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJzogJ14xMCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYXdhaXQgYmxvY2soZml4dHVyZSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBXZSBzdXJ2aXZlIGNlcnRhaW4gY2FzZXMgaW52b2x2aW5nIGdvcGtnLmluXG4gICAgICBpZiAoZXJyb3JDYXVzZWRCeUdvUGtnKGUubWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LklOVEVHX05PX0NMRUFOKSB7XG4gICAgICAgIGNvbnRleHQubG9nKGBMZWZ0IHRlc3QgZGlyZWN0b3J5IGluICcke2ludGVnVGVzdERpcn0nICgkSU5URUdfTk9fQ0xFQU4pXFxuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmRpc3Bvc2Uoc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgZXJyb3IgaXMgYmVpbmcgY2F1c2VkIGJ5IGdvcGtnLmluIGJlaW5nIGRvd25cbiAqXG4gKiBPdXIgR28gYnVpbGQgZGVwZW5kcyBvbiBodHRwczovL2dvcGtnLmluLywgd2hpY2ggaGFzIGVycm9ycyBwcmV0dHkgb2Z0ZW5cbiAqIChldmVyeSBjb3VwbGUgb2YgZGF5cykuIEl0IGlzIHJ1biBieSBhIHNpbmdsZSB2b2x1bnRlZXIuXG4gKi9cbmZ1bmN0aW9uIGVycm9yQ2F1c2VkQnlHb1BrZyhlcnJvcjogc3RyaW5nKSB7XG4gIC8vIFRoZSBlcnJvciBpcyBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoYXQgcmVxdWVzdCBmYWlscy4gTWVzc2FnZXMgcmVjb2duaXplZDpcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gICAgZ286IGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ29AdjEuMjguMCByZXF1aXJlc1xuICAvLyAgICAgICAgZ29wa2cuaW4veWFtbC52M0B2My4wLjAtMjAyMDA2MTUxMTM0MTMtZWVlY2E0OGZlNzc2OiBpbnZhbGlkIHZlcnNpb246IGdpdCBscy1yZW1vdGUgLXEgb3JpZ2luIGluIC9nby9wa2cvbW9kL2NhY2hlL3Zjcy8wOTAxZGMxZWY2N2ZjY2UxYzliM2FlNTEwNzg3NDBkZTRhMGUyZGM2NzNlNzIwNTg0YWMzMDI5NzNhZjgyZjM2OiBleGl0IHN0YXR1cyAxMjg6XG4gIC8vICAgICAgICByZW1vdGU6IENhbm5vdCBvYnRhaW4gcmVmcyBmcm9tIEdpdEh1YjogY2Fubm90IHRhbGsgdG8gR2l0SHViOiBHZXQgaHR0cHM6Ly9naXRodWIuY29tL2dvLXlhbWwveWFtbC5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrOiBuZXQvaHR0cDogcmVxdWVzdCBjYW5jZWxlZCAoQ2xpZW50LlRpbWVvdXQgZXhjZWVkZWQgd2hpbGUgYXdhaXRpbmcgaGVhZGVycylcbiAgLy8gICAgICAgIGZhdGFsOiB1bmFibGUgdG8gYWNjZXNzICdodHRwczovL2dvcGtnLmluL3lhbWwudjMvJzogVGhlIHJlcXVlc3RlZCBVUkwgcmV0dXJuZWQgZXJyb3I6IDUwMlxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZG93bmxvYWRpbmcgZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nbyB2MS4yOC4wXG4gIC8vICAgIGdvOiBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvQHYxLjI4LjAgcmVxdWlyZXNcbiAgLy8gICAgICAgIGdvcGtnLmluL3lhbWwudjNAdjMuMC4wLTIwMjAwNjE1MTEzNDEzLWVlZWNhNDhmZTc3NjogdW5yZWNvZ25pemVkIGltcG9ydCBwYXRoIFwiZ29wa2cuaW4veWFtbC52M1wiOiByZWFkaW5nIGh0dHBzOi8vZ29wa2cuaW4veWFtbC52Mz9nby1nZXQ9MTogNTAyIEJhZCBHYXRld2F5XG4gIC8vICAgICAgICBzZXJ2ZXIgcmVzcG9uc2U6IENhbm5vdCBvYnRhaW4gcmVmcyBmcm9tIEdpdEh1YjogY2Fubm90IHRhbGsgdG8gR2l0SHViOiBHZXQgaHR0cHM6Ly9naXRodWIuY29tL2dvLXlhbWwveWFtbC5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrOiBuZXQvaHR0cDogcmVxdWVzdCBjYW5jZWxlZCAoQ2xpZW50LlRpbWVvdXQgZXhjZWVkZWQgd2hpbGUgYXdhaXRpbmcgaGVhZGVycylcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gICAgZ286IGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ29AdjEuMjguMCByZXF1aXJlc1xuICAvLyAgICAgICAgZ29wa2cuaW4veWFtbC52M0B2My4wLjAtMjAyMDA2MTUxMTM0MTMtZWVlY2E0OGZlNzc2OiBpbnZhbGlkIHZlcnNpb246IGdpdCBmZXRjaCAtZiBvcmlnaW4gcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiBpbiAvZ28vcGtnL21vZC9jYWNoZS92Y3MvMDkwMWRjMWVmNjdmY2NlMWM5YjNhZTUxMDc4NzQwZGU0YTBlMmRjNjczZTcyMDU4NGFjMzAyOTczYWY4MmYzNjogZXhpdCBzdGF0dXMgMTI4OlxuICAvLyAgICAgICAgZXJyb3I6IFJQQyBmYWlsZWQ7IEhUVFAgNTAyIGN1cmwgMjIgVGhlIHJlcXVlc3RlZCBVUkwgcmV0dXJuZWQgZXJyb3I6IDUwMlxuICAvLyAgICAgICAgZmF0YWw6IHRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5XG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgcmV0dXJuIChlcnJvci5pbmNsdWRlcygnZ29wa2dcXC5pbi4qaW52YWxpZCB2ZXJzaW9uLipleGl0IHN0YXR1cyAxMjgnKVxuICAgIHx8IGVycm9yLm1hdGNoKC91bnJlY29nbml6ZWQgaW1wb3J0IHBhdGhbXlxcbl1nb3BrZ1xcLmluLykpO1xufVxuXG4vKipcbiAqIFNBTSBJbnRlZ3JhdGlvbiB0ZXN0IGZpeHR1cmUgZm9yIENESyAtIFNBTSBpbnRlZ3JhdGlvbiB0ZXN0IGNhc2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGJsb2NrOiAoY29udGV4dDogU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gd2l0aEF3cyh3aXRoVGltZW91dChERUZBVUxUX1RFU1RfVElNRU9VVF9TLCB3aXRoU2FtSW50ZWdyYXRpb25DZGtBcHAoYmxvY2spKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlIGV4dGVuZHMgVGVzdEZpeHR1cmUge1xuICBwdWJsaWMgYXN5bmMgc2FtU2hlbGwoY29tbWFuZDogc3RyaW5nW10sIGZpbHRlcj86IHN0cmluZywgYWN0aW9uPzogKCkgPT4gYW55LCBvcHRpb25zOiBPbWl0PFNoZWxsT3B0aW9ucywgJ2N3ZCcgfCAnb3V0cHV0Jz4gPSB7fSk6IFByb21pc2U8QWN0aW9uT3V0cHV0PiB7XG4gICAgcmV0dXJuIHNoZWxsV2l0aEFjdGlvbihjb21tYW5kLCBmaWx0ZXIsIGFjdGlvbiwge1xuICAgICAgb3V0cHV0OiB0aGlzLm91dHB1dCxcbiAgICAgIGN3ZDogcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcpLnRvU3RyaW5nKCksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhbUJ1aWxkKHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IHRoaXMuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbih0aGlzLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCBgJHtmdWxsU3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYCk7XG4gICAgY29uc3QgYXJncyA9IFsnLS10ZW1wbGF0ZScsIHRlbXBsYXRlUGF0aC50b1N0cmluZygpXTtcbiAgICByZXR1cm4gdGhpcy5zYW1TaGVsbChbJ3NhbScsICdidWlsZCcsIC4uLmFyZ3NdKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYW1Mb2NhbFN0YXJ0QXBpKHN0YWNrTmFtZTogc3RyaW5nLCBpc0J1aWx0OiBib29sZWFuLCBwb3J0OiBudW1iZXIsIGFwaVBhdGg6IHN0cmluZyk6IFByb21pc2U8QWN0aW9uT3V0cHV0PiB7XG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IHRoaXMuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbih0aGlzLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCBgJHtmdWxsU3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYCk7XG4gICAgY29uc3QgYXJncyA9IGlzQnVpbHQ/IFtdIDogWyctLXRlbXBsYXRlJywgdGVtcGxhdGVQYXRoLnRvU3RyaW5nKCldO1xuICAgIGFyZ3MucHVzaCgnLS1wb3J0Jyk7XG4gICAgYXJncy5wdXNoKHBvcnQudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcy5zYW1TaGVsbChbJ3NhbScsICdsb2NhbCcsICdzdGFydC1hcGknLCAuLi5hcmdzXSwgJ1ByZXNzIENUUkwrQyB0byBxdWl0JywgKCk9PntcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxBY3Rpb25PdXRwdXQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0ke2FwaVBhdGh9YCkudGhlbiggcmVzcCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwLmRhdGEpO1xuICAgICAgICB9KS5jYXRjaCggZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBpbnZva2UgYXBpIHBhdGggJHthcGlQYXRofSBvbiBwb3J0ICR7cG9ydH0gd2l0aCBlcnJvciAke2Vycm9yfWApKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGxlZnRvdmVyIHN0YWNrcyBhbmQgYnVja2V0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2Uoc3VjY2VzczogYm9vbGVhbikge1xuICAgIC8vIElmIHRoZSB0ZXN0cyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBoYXBwaWx5IGRlbGV0ZSB0aGUgZml4dHVyZVxuICAgIC8vIChvdGhlcndpc2UgbGVhdmUgaXQgZm9yIGh1bWFucyB0byBpbnNwZWN0KVxuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICByaW1yYWYodGhpcy5pbnRlZ1Rlc3REaXIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSW50ZWdlcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluKTtcbn1cblxuLyoqXG4gKiBBIHNoZWxsIGNvbW1hbmQgdGhhdCBkb2VzIHdoYXQgeW91IHdhbnRcbiAqXG4gKiBJcyBwbGF0Zm9ybS1hd2FyZSwgaGFuZGxlcyBlcnJvcnMgbmljZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hlbGxXaXRoQWN0aW9uKFxuICBjb21tYW5kOiBzdHJpbmdbXSxcbiAgZmlsdGVyPzogc3RyaW5nLFxuICBhY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4sXG4gIG9wdGlvbnM6IFNoZWxsT3B0aW9ucyA9IHt9LFxuICBhY3Rpb25UaW1lb3V0U2Vjb25kczogbnVtYmVyID0gNjAwLFxuKTogUHJvbWlzZTxBY3Rpb25PdXRwdXQ+IHtcbiAgaWYgKG9wdGlvbnMubW9kRW52ICYmIG9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2UgZWl0aGVyIGVudiBvciBtb2RFbnYgYnV0IG5vdCBib3RoJyk7XG4gIH1cblxuICBvcHRpb25zLm91dHB1dD8ud3JpdGUoYPCfkrsgJHtjb21tYW5kLmpvaW4oJyAnKX1cXG5gKTtcblxuICBjb25zdCBlbnYgPSBvcHRpb25zLmVudiA/PyAob3B0aW9ucy5tb2RFbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRpb25zLm1vZEVudiB9IDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBjaGlsZCA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oY29tbWFuZFswXSwgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW52LFxuICAgIC8vIE5lZWQgdGhpcyBmb3IgV2luZG93cyB3aGVyZSB3ZSB3YW50IC5jbWQgYW5kIC5iYXQgdG8gYmUgZm91bmQgYXMgd2VsbC5cbiAgICBzaGVsbDogdHJ1ZSxcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxBY3Rpb25PdXRwdXQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGNvbnN0IHN0ZG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3RkZXJyID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcbiAgICBsZXQgYWN0aW9uU3VjY2VlZGVkID0gZmFsc2U7XG4gICAgbGV0IGFjdGlvbk91dHB1dDogYW55O1xuICAgIGxldCBhY3Rpb25FeGVjdXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZXhlY3V0ZUFjdGlvbihjaHVuazogYW55KSB7XG4gICAgICBvdXQucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgaWYgKCFhY3Rpb25FeGVjdXRlZCAmJiB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiBCdWZmZXIuY29uY2F0KG91dCkudG9TdHJpbmcoJ3V0Zi04JykuaW5jbHVkZXMoZmlsdGVyKSAmJiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFjdGlvbkV4ZWN1dGVkID0gdHJ1ZTtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXQ/LndyaXRlKCdiZWZvcmUgZXhlY3V0aW5nIGFjdGlvbicpO1xuICAgICAgICBhY3Rpb24oKS50aGVuKChvdXRwdXQpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm91dHB1dD8ud3JpdGUoYGFjdGlvbiBvdXRwdXQgaXMgJHtvdXRwdXR9YCk7XG4gICAgICAgICAgYWN0aW9uT3V0cHV0ID0gb3V0cHV0O1xuICAgICAgICAgIGFjdGlvblN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub3V0cHV0Py53cml0ZShgYWN0aW9uIGVycm9yIGlzICR7ZXJyb3J9YCk7XG4gICAgICAgICAgYWN0aW9uU3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgYWN0aW9uT3V0cHV0ID0gZXJyb3I7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub3V0cHV0Py53cml0ZSgndGVybWluYXRlIHNhbSBzdWIgcHJvY2VzcycpO1xuICAgICAgICAgIGtpbGxTdWJQcm9jZXNzKGNoaWxkLCBjb21tYW5kLmpvaW4oJyAnKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBSZWplY3Qgd2l0aCBhbiBlcnJvciBpZiBhbiBhY3Rpb24gaXMgY29uZmlndXJlZCwgYnV0IHRoZSBmaWx0ZXIgZmFpbGVkXG4gICAgICAvLyB0byBzaG93IHVwIGluIHRoZSBvdXRwdXQgYmVmb3JlIHRoZSB0aW1lb3V0IG9jY3VycmVkLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghYWN0aW9uRXhlY3V0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBmaWx0ZXIgJHtKU09OLnN0cmluZ2lmeShmaWx0ZXIpfSB0byBhcHBlYXIgaW4gY29tbWFuZCBvdXRwdXQgYWZ0ZXIgJHthY3Rpb25UaW1lb3V0U2Vjb25kc30gc2Vjb25kc1xcbk91dHB1dCBzbyBmYXI6XFxuJHtCdWZmZXIuY29uY2F0KG91dCkudG9TdHJpbmcoJ3V0Zi04Jyl9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgYWN0aW9uVGltZW91dFNlY29uZHMgKiAxXzAwMCxcbiAgICAgICkudW5yZWYoKTtcbiAgICB9XG5cbiAgICBjaGlsZC5zdGRvdXQhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgb3B0aW9ucy5vdXRwdXQ/LndyaXRlKGNodW5rKTtcbiAgICAgIHN0ZG91dC5wdXNoKGNodW5rKTtcbiAgICAgIGV4ZWN1dGVBY3Rpb24oY2h1bmspO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyIS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIG9wdGlvbnMub3V0cHV0Py53cml0ZShjaHVuayk7XG4gICAgICBpZiAob3B0aW9ucy5jYXB0dXJlU3RkZXJyID8/IHRydWUpIHtcbiAgICAgICAgc3RkZXJyLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgICAgZXhlY3V0ZUFjdGlvbihjaHVuayk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICBjaGlsZC5vbmNlKCdjbG9zZScsIGNvZGUgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gKEJ1ZmZlci5jb25jYXQoc3Rkb3V0KS50b1N0cmluZygndXRmLTgnKSArIEJ1ZmZlci5jb25jYXQoc3RkZXJyKS50b1N0cmluZygndXRmLTgnKSkudHJpbSgpO1xuICAgICAgaWYgKGNvZGUgPT0gbnVsbCB8fCBjb2RlID09PSAwIHx8IG9wdGlvbnMuYWxsb3dFcnJFeGl0KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgICAgICByZXN1bHQucHVzaChhY3Rpb25PdXRwdXQpO1xuICAgICAgICByZXN1bHQucHVzaChvdXRwdXQpO1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBhY3Rpb25TdWNjZWVkZWQ6IGFjdGlvblN1Y2NlZWRlZCxcbiAgICAgICAgICBhY3Rpb25PdXRwdXQ6IGFjdGlvbk91dHB1dCxcbiAgICAgICAgICBzaGVsbE91dHB1dDogb3V0cHV0LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCcke2NvbW1hbmQuam9pbignICcpfScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAke2NvZGV9LiBPdXRwdXQ6IFxcbiR7b3V0cHV0fWApKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9KTtcbn1cblxuZnVuY3Rpb24ga2lsbFN1YlByb2Nlc3MoY2hpbGQ6IGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzLCBjb21tYW5kOiBzdHJpbmcpIHtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBzdWIgcHJvY2VzcyBpcyBydW5uaW5nIGluIGNvbnRhaW5lciwgc28gY2hpbGRfcHJvY2Vzcy5zcGF3biB3aWxsXG4gICAqIGNyZWF0ZSBtdWx0aXBsZSBwcm9jZXNzZXMsIGFuZCB0byBraWxsIGFsbCBvZiB0aGVtIHdlIG5lZWQgdG8gcnVuIGRpZmZlcmVudCBsb2dpY1xuICAgKi9cbiAgaWYgKGZzLmV4aXN0c1N5bmMoJy8uZG9ja2VyZW52JykpIHtcbiAgICBjaGlsZF9wcm9jZXNzLmV4ZWMoYGZvciBwaWQgaW4gJChwcyAtZWYgfCBncmVwIFwiJHtjb21tYW5kfVwiIHwgYXdrICd7cHJpbnQgJDJ9Jyk7IGRvIGtpbGwgLTIgJHBpZDsgZG9uZWApO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkLmtpbGwoJ1NJR0lOVCcpO1xuICB9XG5cbn1cbiJdfQ==
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLXNhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQkEsNERBMkRDO0FBa0NELDhEQUVDO0FBZ0RELHNDQUVDO0FBT0QsMENBcUdDO0FBbFJELCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBMEI7QUFFMUIsMkNBQTRDO0FBQzVDLG1DQUErQztBQUMvQyx5Q0FBaUQ7QUFDakQsaURBQXlHO0FBQ3pHLGlEQUE2QztBQVE3Qzs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFxQyxLQUE0RDtJQUN2SSxPQUFPLEtBQUssRUFBRSxPQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ25DLE1BQU0sZUFBZSxHQUFHLFdBQVcsS0FBSyxFQUFFLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFFeEQsTUFBTSxJQUFBLDZCQUFjLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBYSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUcsTUFBTSxPQUFPLEdBQUcsSUFBSSx5QkFBeUIsQ0FDM0MsWUFBWSxFQUNaLGVBQWUsRUFDZixPQUFPLENBQUMs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LCtCQUErQixPQUFPLDhDQUE4QyxDQUFDLENBQUM7SUFDM0csQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7QUFFSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUkVTT1VSQ0VTX0RJUiB9IGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFNoZWxsT3B0aW9ucywgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgeyBBd3NDb250ZXh0LCB3aXRoQXdzIH0gZnJvbSAnLi93aXRoLWF3cyc7XG5pbXBvcnQgeyBjbG9uZURpcmVjdG9yeSwgaW5zdGFsbE5wbVBhY2thZ2VzLCBUZXN0Rml4dHVyZSwgREVGQVVMVF9URVNUX1RJTUVPVVRfUyB9IGZyb20gJy4vd2l0aC1jZGstYXBwJztcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSAnLi93aXRoLXRpbWVvdXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbk91dHB1dCB7XG4gIGFjdGlvblN1Y2NlZWRlZD86IGJvb2xlYW47XG4gIGFjdGlvbk91dHB1dD86IGFueTtcbiAgc2hlbGxPdXRwdXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGEgU0FNIEludGVncmF0aW9uIENESyBhcHAgZml4dHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNhbUludGVncmF0aW9uQ2RrQXBwPEEgZXh0ZW5kcyBUZXN0Q29udGV4dCAmIEF3c0NvbnRleHQ+KGJsb2NrOiAoY29udGV4dDogU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gYXN5bmMgKGNvbnRleHQ6IEEpID0+IHtcbiAgICBjb25zdCByYW5keSA9IGNvbnRleHQucmFuZG9tU3RyaW5nO1xuICAgIGNvbnN0IHN0YWNrTmFtZVByZWZpeCA9IGBjZGt0ZXN0LSR7cmFuZHl9YDtcbiAgICBjb25zdCBpbnRlZ1Rlc3REaXIgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksIGBjZGstaW50ZWctJHtyYW5keX1gKTtcblxuICAgIGNvbnRleHQubG9nKGAgU3RhY2sgcHJlZml4OiAgICR7c3RhY2tOYW1lUHJlZml4fVxcbmApO1xuICAgIGNvbnRleHQubG9nKGAgVGVzdCBkaXJlY3Rvcnk6ICR7aW50ZWdUZXN0RGlyfVxcbmApO1xuICAgIGNvbnRleHQubG9nKGAgUmVnaW9uOiAgICAgICAgICR7Y29udGV4dC5hd3MucmVnaW9ufVxcbmApO1xuXG4gICAgYXdhaXQgY2xvbmVEaXJlY3RvcnkocGF0aC5qb2luKFJFU09VUkNFU19ESVIsICdjZGstYXBwcycsICdzYW1fY2RrX2ludGVnX2FwcCcpLCBpbnRlZ1Rlc3REaXIsIGNvbnRleHQub3V0cHV0KTtcbiAgICBjb25zdCBmaXh0dXJlID0gbmV3IFNhbUludGVncmF0aW9uVGVzdEZpeHR1cmUoXG4gICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICBzdGFja05hbWVQcmVmaXgsXG4gICAgICBjb250ZXh0Lm91dHB1dCxcbiAgICAgIGNvbnRleHQuYXdzLFxuICAgICAgY29udGV4dC5yYW5kb21TdHJpbmcpO1xuXG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5wYWNrYWdlcy5yZXF1ZXN0ZWRGcmFtZXdvcmtWZXJzaW9uKCk7XG5cbiAgICAgIGlmIChmaXh0dXJlLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpID09PSAnMScpIHtcbiAgICAgICAgYXdhaXQgaW5zdGFsbE5wbVBhY2thZ2VzKGZpeHR1cmUsIHtcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWlhbSc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5JzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxhbWJkYSc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZ28nOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLW5vZGVqcyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxvZ3MnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9jb3JlJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnY29uc3RydWN0cyc6ICdeMycsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYWxwaGFJbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5wYWNrYWdlcy5yZXF1ZXN0ZWRBbHBoYVZlcnNpb24oKTtcbiAgICAgICAgYXdhaXQgaW5zdGFsbE5wbVBhY2thZ2VzKGZpeHR1cmUsIHtcbiAgICAgICAgICAnYXdzLWNkay1saWInOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLWdvLWFscGhhJzogYWxwaGFJbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc6IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnY29uc3RydWN0cyc6ICdeMTAnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGJsb2NrKGZpeHR1cmUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gV2Ugc3Vydml2ZSBjZXJ0YWluIGNhc2VzIGludm9sdmluZyBnb3BrZy5pblxuICAgICAgaWYgKGVycm9yQ2F1c2VkQnlHb1BrZyhlLm1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5JTlRFR19OT19DTEVBTikge1xuICAgICAgICBjb250ZXh0LmxvZyhgTGVmdCB0ZXN0IGRpcmVjdG9yeSBpbiAnJHtpbnRlZ1Rlc3REaXJ9JyAoJElOVEVHX05PX0NMRUFOKVxcbmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5kaXNwb3NlKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGVycm9yIGlzIGJlaW5nIGNhdXNlZCBieSBnb3BrZy5pbiBiZWluZyBkb3duXG4gKlxuICogT3VyIEdvIGJ1aWxkIGRlcGVuZHMgb24gaHR0cHM6Ly9nb3BrZy5pbi8sIHdoaWNoIGhhcyBlcnJvcnMgcHJldHR5IG9mdGVuXG4gKiAoZXZlcnkgY291cGxlIG9mIGRheXMpLiBJdCBpcyBydW4gYnkgYSBzaW5nbGUgdm9sdW50ZWVyLlxuICovXG5mdW5jdGlvbiBlcnJvckNhdXNlZEJ5R29Qa2coZXJyb3I6IHN0cmluZykge1xuICAvLyBUaGUgZXJyb3IgaXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGF0IHJlcXVlc3QgZmFpbHMuIE1lc3NhZ2VzIHJlY29nbml6ZWQ6XG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgIGdvOiBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvQHYxLjI4LjAgcmVxdWlyZXNcbiAgLy8gICAgICAgIGdvcGtnLmluL3lhbWwudjNAdjMuMC4wLTIwMjAwNjE1MTEzNDEzLWVlZWNhNDhmZTc3NjogaW52YWxpZCB2ZXJzaW9uOiBnaXQgbHMtcmVtb3RlIC1xIG9yaWdpbiBpbiAvZ28vcGtnL21vZC9jYWNoZS92Y3MvMDkwMWRjMWVmNjdmY2NlMWM5YjNhZTUxMDc4NzQwZGU0YTBlMmRjNjczZTcyMDU4NGFjMzAyOTczYWY4MmYzNjogZXhpdCBzdGF0dXMgMTI4OlxuICAvLyAgICAgICAgcmVtb3RlOiBDYW5ub3Qgb2J0YWluIHJlZnMgZnJvbSBHaXRIdWI6IGNhbm5vdCB0YWxrIHRvIEdpdEh1YjogR2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9nby15YW1sL3lhbWwuZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjazogbmV0L2h0dHA6IHJlcXVlc3QgY2FuY2VsZWQgKENsaWVudC5UaW1lb3V0IGV4Y2VlZGVkIHdoaWxlIGF3YWl0aW5nIGhlYWRlcnMpXG4gIC8vICAgICAgICBmYXRhbDogdW5hYmxlIHRvIGFjY2VzcyAnaHR0cHM6Ly9nb3BrZy5pbi95YW1sLnYzLyc6IFRoZSByZXF1ZXN0ZWQgVVJMIHJldHVybmVkIGVycm9yOiA1MDJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gICAgZ286IGRvd25sb2FkaW5nIGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ28gdjEuMjguMFxuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IHVucmVjb2duaXplZCBpbXBvcnQgcGF0aCBcImdvcGtnLmluL3lhbWwudjNcIjogcmVhZGluZyBodHRwczovL2dvcGtnLmluL3lhbWwudjM/Z28tZ2V0PTE6IDUwMiBCYWQgR2F0ZXdheVxuICAvLyAgICAgICAgc2VydmVyIHJlc3BvbnNlOiBDYW5ub3Qgb2J0YWluIHJlZnMgZnJvbSBHaXRIdWI6IGNhbm5vdCB0YWxrIHRvIEdpdEh1YjogR2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9nby15YW1sL3lhbWwuZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjazogbmV0L2h0dHA6IHJlcXVlc3QgY2FuY2VsZWQgKENsaWVudC5UaW1lb3V0IGV4Y2VlZGVkIHdoaWxlIGF3YWl0aW5nIGhlYWRlcnMpXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgIGdvOiBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvQHYxLjI4LjAgcmVxdWlyZXNcbiAgLy8gICAgICAgIGdvcGtnLmluL3lhbWwudjNAdjMuMC4wLTIwMjAwNjE1MTEzNDEzLWVlZWNhNDhmZTc3NjogaW52YWxpZCB2ZXJzaW9uOiBnaXQgZmV0Y2ggLWYgb3JpZ2luIHJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyogcmVmcy90YWdzLyo6cmVmcy90YWdzLyogaW4gL2dvL3BrZy9tb2QvY2FjaGUvdmNzLzA5MDFkYzFlZjY3ZmNjZTFjOWIzYWU1MTA3ODc0MGRlNGEwZTJkYzY3M2U3MjA1ODRhYzMwMjk3M2FmODJmMzY6IGV4aXQgc3RhdHVzIDEyODpcbiAgLy8gICAgICAgIGVycm9yOiBSUEMgZmFpbGVkOyBIVFRQIDUwMiBjdXJsIDIyIFRoZSByZXF1ZXN0ZWQgVVJMIHJldHVybmVkIGVycm9yOiA1MDJcbiAgLy8gICAgICAgIGZhdGFsOiB0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseVxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHJldHVybiAoZXJyb3IuaW5jbHVkZXMoJ2dvcGtnXFwuaW4uKmludmFsaWQgdmVyc2lvbi4qZXhpdCBzdGF0dXMgMTI4JylcbiAgICB8fCBlcnJvci5tYXRjaCgvdW5yZWNvZ25pemVkIGltcG9ydCBwYXRoW15cXG5dZ29wa2dcXC5pbi8pKTtcbn1cblxuLyoqXG4gKiBTQU0gSW50ZWdyYXRpb24gdGVzdCBmaXh0dXJlIGZvciBDREsgLSBTQU0gaW50ZWdyYXRpb24gdGVzdCBjYXNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShibG9jazogKGNvbnRleHQ6IFNhbUludGVncmF0aW9uVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIHdpdGhBd3Mod2l0aFRpbWVvdXQoREVGQVVMVF9URVNUX1RJTUVPVVRfUywgd2l0aFNhbUludGVncmF0aW9uQ2RrQXBwKGJsb2NrKSkpO1xufVxuXG5leHBvcnQgY2xhc3MgU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZSBleHRlbmRzIFRlc3RGaXh0dXJlIHtcbiAgcHVibGljIGFzeW5jIHNhbVNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBmaWx0ZXI/OiBzdHJpbmcsIGFjdGlvbj86ICgpID0+IGFueSwgb3B0aW9uczogT21pdDxTaGVsbE9wdGlvbnMsICdjd2QnIHwgJ291dHB1dCc+ID0ge30pOiBQcm9taXNlPEFjdGlvbk91dHB1dD4ge1xuICAgIHJldHVybiBzaGVsbFdpdGhBY3Rpb24oY29tbWFuZCwgZmlsdGVyLCBhY3Rpb24sIHtcbiAgICAgIG91dHB1dHM6IFt0aGlzLm91dHB1dF0sXG4gICAgICBjd2Q6IHBhdGguam9pbih0aGlzLmludGVnVGVzdERpciwgJ2Nkay5vdXQnKS50b1N0cmluZygpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYW1CdWlsZChzdGFja05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGZ1bGxTdGFja05hbWUgPSB0aGlzLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4odGhpcy5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgYCR7ZnVsbFN0YWNrTmFtZX0udGVtcGxhdGUuanNvbmApO1xuICAgIGNvbnN0IGFyZ3MgPSBbJy0tdGVtcGxhdGUnLCB0ZW1wbGF0ZVBhdGgudG9TdHJpbmcoKV07XG4gICAgcmV0dXJuIHRoaXMuc2FtU2hlbGwoWydzYW0nLCAnYnVpbGQnLCAuLi5hcmdzXSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2FtTG9jYWxTdGFydEFwaShzdGFja05hbWU6IHN0cmluZywgaXNCdWlsdDogYm9vbGVhbiwgcG9ydDogbnVtYmVyLCBhcGlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEFjdGlvbk91dHB1dD4ge1xuICAgIGNvbnN0IGZ1bGxTdGFja05hbWUgPSB0aGlzLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4odGhpcy5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgYCR7ZnVsbFN0YWNrTmFtZX0udGVtcGxhdGUuanNvbmApO1xuICAgIGNvbnN0IGFyZ3MgPSBpc0J1aWx0PyBbXSA6IFsnLS10ZW1wbGF0ZScsIHRlbXBsYXRlUGF0aC50b1N0cmluZygpXTtcbiAgICBhcmdzLnB1c2goJy0tcG9ydCcpO1xuICAgIGFyZ3MucHVzaChwb3J0LnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2FtU2hlbGwoWydzYW0nLCAnbG9jYWwnLCAnc3RhcnQtYXBpJywgLi4uYXJnc10sICdQcmVzcyBDVFJMK0MgdG8gcXVpdCcsICgpPT57XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8QWN0aW9uT3V0cHV0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChgaHR0cDovLzEyNy4wLjAuMToke3BvcnR9JHthcGlQYXRofWApLnRoZW4oIHJlc3AgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzcC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goIGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gaW52b2tlIGFwaSBwYXRoICR7YXBpUGF0aH0gb24gcG9ydCAke3BvcnR9IHdpdGggZXJyb3IgJHtlcnJvcn1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBsZWZ0b3ZlciBzdGFja3MgYW5kIGJ1Y2tldHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKHN1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICAvLyBJZiB0aGUgdGVzdHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgaGFwcGlseSBkZWxldGUgdGhlIGZpeHR1cmVcbiAgICAvLyAob3RoZXJ3aXNlIGxlYXZlIGl0IGZvciBodW1hbnMgdG8gaW5zcGVjdClcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgcmltcmFmKHRoaXMuaW50ZWdUZXN0RGlyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludGVnZXIobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbik7XG59XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsV2l0aEFjdGlvbihcbiAgY29tbWFuZDogc3RyaW5nW10sXG4gIGZpbHRlcj86IHN0cmluZyxcbiAgYWN0aW9uPzogKCkgPT4gUHJvbWlzZTxhbnk+LFxuICBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSxcbiAgYWN0aW9uVGltZW91dFNlY29uZHM6IG51bWJlciA9IDYwMCxcbik6IFByb21pc2U8QWN0aW9uT3V0cHV0PiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgY29uc3Qgd3JpdGVUb091dHB1dHMgPSAoeDogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2Ygb3B0aW9ucy5vdXRwdXRzID8/IFtdKSB7XG4gICAgICBvdXRwdXQud3JpdGUoeCk7XG4gICAgfVxuICB9O1xuICB3cml0ZVRvT3V0cHV0cyhg8J+SuyAke2NvbW1hbmQuam9pbignICcpfVxcbmApO1xuXG4gIGNvbnN0IGVudiA9IG9wdGlvbnMuZW52ID8/IChvcHRpb25zLm1vZEVudiA/IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLm9wdGlvbnMubW9kRW52IH0gOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGNoaWxkID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvbk91dHB1dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3Rkb3V0ID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcbiAgICBjb25zdCBzdGRlcnIgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGxldCBhY3Rpb25TdWNjZWVkZWQgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uT3V0cHV0OiBhbnk7XG4gICAgbGV0IGFjdGlvbkV4ZWN1dGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBleGVjdXRlQWN0aW9uKGNodW5rOiBhbnkpIHtcbiAgICAgIG91dC5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICBpZiAoIWFjdGlvbkV4ZWN1dGVkICYmIHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnICYmIEJ1ZmZlci5jb25jYXQob3V0KS50b1N0cmluZygndXRmLTgnKS5pbmNsdWRlcyhmaWx0ZXIpICYmIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWN0aW9uRXhlY3V0ZWQgPSB0cnVlO1xuICAgICAgICB3cml0ZVRvT3V0cHV0cygnYmVmb3JlIGV4ZWN1dGluZyBhY3Rpb24nKTtcbiAgICAgICAgYWN0aW9uKCkudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoYGFjdGlvbiBvdXRwdXQgaXMgJHtvdXRwdXR9YCk7XG4gICAgICAgICAgYWN0aW9uT3V0cHV0ID0gb3V0cHV0O1xuICAgICAgICAgIGFjdGlvblN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKGBhY3Rpb24gZXJyb3IgaXMgJHtlcnJvcn1gKTtcbiAgICAgICAgICBhY3Rpb25TdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICBhY3Rpb25PdXRwdXQgPSBlcnJvcjtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoJ3Rlcm1pbmF0ZSBzYW0gc3ViIHByb2Nlc3MnKTtcbiAgICAgICAgICBraWxsU3ViUHJvY2VzcyhjaGlsZCwgY29tbWFuZC5qb2luKCcgJykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUmVqZWN0IHdpdGggYW4gZXJyb3IgaWYgYW4gYWN0aW9uIGlzIGNvbmZpZ3VyZWQsIGJ1dCB0aGUgZmlsdGVyIGZhaWxlZFxuICAgICAgLy8gdG8gc2hvdyB1cCBpbiB0aGUgb3V0cHV0IGJlZm9yZSB0aGUgdGltZW91dCBvY2N1cnJlZC5cbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoIWFjdGlvbkV4ZWN1dGVkKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgZmlsdGVyICR7SlNPTi5zdHJpbmdpZnkoZmlsdGVyKX0gdG8gYXBwZWFyIGluIGNvbW1hbmQgb3V0cHV0IGFmdGVyICR7YWN0aW9uVGltZW91dFNlY29uZHN9IHNlY29uZHNcXG5PdXRwdXQgc28gZmFyOlxcbiR7QnVmZmVyLmNvbmNhdChvdXQpLnRvU3RyaW5nKCd1dGYtOCcpfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGFjdGlvblRpbWVvdXRTZWNvbmRzICogMV8wMDAsXG4gICAgICApLnVucmVmKCk7XG4gICAgfVxuXG4gICAgY2hpbGQuc3Rkb3V0IS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHdyaXRlVG9PdXRwdXRzKGNodW5rKTtcbiAgICAgIHN0ZG91dC5wdXNoKGNodW5rKTtcbiAgICAgIGV4ZWN1dGVBY3Rpb24oY2h1bmspO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyIS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHdyaXRlVG9PdXRwdXRzKGNodW5rKTtcbiAgICAgIGlmIChvcHRpb25zLmNhcHR1cmVTdGRlcnIgPz8gdHJ1ZSkge1xuICAgICAgICBzdGRlcnIucHVzaChjaHVuayk7XG4gICAgICB9XG4gICAgICBleGVjdXRlQWN0aW9uKGNodW5rKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcblxuICAgIGNoaWxkLm9uY2UoJ2Nsb3NlJywgY29kZSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSAoQnVmZmVyLmNvbmNhdChzdGRvdXQpLnRvU3RyaW5nKCd1dGYtOCcpICsgQnVmZmVyLmNvbmNhdChzdGRlcnIpLnRvU3RyaW5nKCd1dGYtOCcpKS50cmltKCk7XG4gICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IDAgfHwgb3B0aW9ucy5hbGxvd0VyckV4aXQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbk91dHB1dCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKG91dHB1dCk7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGFjdGlvblN1Y2NlZWRlZDogYWN0aW9uU3VjY2VlZGVkLFxuICAgICAgICAgIGFjdGlvbk91dHB1dDogYWN0aW9uT3V0cHV0LFxuICAgICAgICAgIHNoZWxsT3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgJyR7Y29tbWFuZC5qb2luKCcgJyl9JyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0uIE91dHB1dDogXFxuJHtvdXRwdXR9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBraWxsU3ViUHJvY2VzcyhjaGlsZDogY2hpbGRfcHJvY2Vzcy5DaGlsZFByb2Nlc3MsIGNvbW1hbmQ6IHN0cmluZykge1xuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHN1YiBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gY29udGFpbmVyLCBzbyBjaGlsZF9wcm9jZXNzLnNwYXduIHdpbGxcbiAgICogY3JlYXRlIG11bHRpcGxlIHByb2Nlc3NlcywgYW5kIHRvIGtpbGwgYWxsIG9mIHRoZW0gd2UgbmVlZCB0byBydW4gZGlmZmVyZW50IGxvZ2ljXG4gICAqL1xuICBpZiAoZnMuZXhpc3RzU3luYygnLy5kb2NrZXJlbnYnKSkge1xuICAgIGNoaWxkX3Byb2Nlc3MuZXhlYyhgZm9yIHBpZCBpbiAkKHBzIC1lZiB8IGdyZXAgXCIke2NvbW1hbmR9XCIgfCBhd2sgJ3twcmludCAkMn0nKTsgZG8ga2lsbCAtMiAkcGlkOyBkb25lYCk7XG4gIH0gZWxzZSB7XG4gICAgY2hpbGQua2lsbCgnU0lHSU5UJyk7XG4gIH1cblxufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withTemporaryDirectory =
|
|
3
|
+
exports.withTemporaryDirectory = withTemporaryDirectory;
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const os = require("os");
|
|
6
6
|
const path = require("path");
|
|
@@ -28,5 +28,4 @@ function withTemporaryDirectory(block) {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10ZW1wb3JhcnktZGlyZWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC10ZW1wb3JhcnktZGlyZWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCLG1DQUFpQztBQU1qQyxTQUFnQixzQkFBc0IsQ0FBd0IsS0FBZ0U7SUFDNUgsT0FBTyxLQUFLLEVBQUUsT0FBVSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVqRixFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxDQUFDO2dCQUNWLEdBQUcsT0FBTztnQkFDVixZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsOEJBQThCO1lBQzlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFBLGNBQU0sRUFBQyxZQUFZLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixZQUFZLEtBQUssQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUF2QkQsd0RBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRlc3RDb250ZXh0IH0gZnJvbSAnLi9pbnRlZy10ZXN0JztcbmltcG9ydCB7IHJpbXJhZiB9IGZyb20gJy4vc2hlbGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQge1xuICByZWFkb25seSBpbnRlZ1Rlc3REaXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUZW1wb3JhcnlEaXJlY3Rvcnk8QSBleHRlbmRzIFRlc3RDb250ZXh0PihibG9jazogKGNvbnRleHQ6IEEgJiBUZW1wb3JhcnlEaXJlY3RvcnlDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay1pbnRlZy0ke2NvbnRleHQucmFuZG9tU3RyaW5nfWApO1xuXG4gICAgZnMubWtkaXJTeW5jKGludGVnVGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYmxvY2soe1xuICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgaW4gY2FzZSBvZiBzdWNjZXNzXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0tJUF9DTEVBTlVQKSB7XG4gICAgICAgIGNvbnRleHQubG9nKGBMZWZ0IHRlc3QgZGlyZWN0b3J5IGluICcke2ludGVnVGVzdERpcn0nICgkU0tJUF9DTEVBTlVQKVxcbmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmltcmFmKGludGVnVGVzdERpcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfSdcXG5gKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xufVxuXG4iXX0=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10ZW1wb3JhcnktZGlyZWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC10ZW1wb3JhcnktZGlyZWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsd0RBdUJDO0FBakNELHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCLG1DQUFpQztBQU1qQyxTQUFnQixzQkFBc0IsQ0FBd0IsS0FBZ0U7SUFDNUgsT0FBTyxLQUFLLEVBQUUsT0FBVSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVqRixFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxDQUFDO2dCQUNWLEdBQUcsT0FBTztnQkFDVixZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsOEJBQThCO1lBQzlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFBLGNBQU0sRUFBQyxZQUFZLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixZQUFZLEtBQUssQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcG9yYXJ5RGlyZWN0b3J5Q29udGV4dCB7XG4gIHJlYWRvbmx5IGludGVnVGVzdERpcjogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRlbXBvcmFyeURpcmVjdG9yeTxBIGV4dGVuZHMgVGVzdENvbnRleHQ+KGJsb2NrOiAoY29udGV4dDogQSAmIFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBBKSA9PiB7XG4gICAgY29uc3QgaW50ZWdUZXN0RGlyID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgY2RrLWludGVnLSR7Y29udGV4dC5yYW5kb21TdHJpbmd9YCk7XG5cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBibG9jayh7XG4gICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgIGludGVnVGVzdERpcixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDbGVhbiB1cCBpbiBjYXNlIG9mIHN1Y2Nlc3NcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TS0lQX0NMRUFOVVApIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRTS0lQX0NMRUFOVVApXFxuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaW1yYWYoaW50ZWdUZXN0RGlyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb250ZXh0LmxvZyhgTGVmdCB0ZXN0IGRpcmVjdG9yeSBpbiAnJHtpbnRlZ1Rlc3REaXJ9J1xcbmApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG59XG5cbiJdfQ==
|
package/lib/with-timeout.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withTimeout =
|
|
3
|
+
exports.withTimeout = withTimeout;
|
|
4
4
|
/**
|
|
5
5
|
* Run a block with a timeout
|
|
6
6
|
*
|
|
@@ -31,5 +31,4 @@ function withTimeout(seconds, block) {
|
|
|
31
31
|
]);
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10aW1lb3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC10aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQWdCLFdBQVcsQ0FBSSxPQUFlLEVBQUUsS0FBOEI7SUFDNUUsT0FBTyxDQUFDLENBQUksRUFBRSxFQUFFO1FBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUM1QixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLE9BQU8sZUFBZSxDQUFDLENBQUMsRUFDM0UsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFkRCxrQ0FjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuIGEgYmxvY2sgd2l0aCBhIHRpbWVvdXRcbiAqXG4gKiBXZSBjYW4ndCB1c2UgdGhlIGplc3QgdGltZW91dCBmZWF0dXJlOlxuICpcbiAqIC0gYGplc3QuY29uY3VycmVudCgpYCBkb2VzIG5vdCBkbyBhbnkgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gSXQgc3RhcnRzIGFsbFxuICogICB0ZXN0cyBhdCB0aGUgc2FtZSB0aW1lLlxuICogLSBPdXIgdGVzdHMgdXNlIGxvY2tpbmcgdG8gbWFrZSBzdXJlIG9ubHkgb25lIHRlc3QgaXMgcnVubmluZyBhdCBhIHRpbWUgcGVyXG4gKiAgIHJlZ2lvbi5cbiAqXG4gKiBUaGUgd2FpdCB0aW1lIGZvciB0aGUgbG9ja3MgaXMgaW5jbHVkZWQgaW4gdGhlIGplc3QgdGVzdCB0aW1lb3V0LiBXZSB0aGVyZWZvcmVcbiAqIG5lZWQgdG8gc2V0IGl0IHVucmVhc29uYWJseSBoaWdoIChhcyBsb25nIGFzIHRoZSBsYXN0IHRlc3QgbWF5IG5lZWQgdG8gd2FpdFxuICogaWYgYWxsIHRlc3RzIGFyZSBleGVjdXRlZCB1c2luZyBvbmx5IDEgcmVnaW9uLCBhbmQgdGhleSBlZmZlY3RpdmVseSBleGVjdXRlXG4gKiBzZXF1ZW50aWFsbHkpLCB3aGljaCBtYWtlcyBpdCBub3QgdXNlZnVsIHRvIGRldGVjdCBzdHVjayB0ZXN0cy5cbiAqXG4gKiBUaGUgYHdpdGhUaW1lb3V0KClgIG1vZGlmaWVyIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1lYXN1cmUgb25seSBhIHNwZWNpZmljXG4gKiBibG9jayBvZiBjb2RlLiBJbiBvdXIgY2FzZTogdGhlIGVmZmVjdGl2ZSB0ZXN0IGNvZGUsIGV4Y2x1ZGluZyB0aGUgd2FpdCB0aW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8QT4oc2Vjb25kczogbnVtYmVyLCBibG9jazogKHg6IEEpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuICh4OiBBKSA9PiB7XG4gICAgY29uc3QgdGltZU91dCA9IG5ldyBQcm9taXNlPHZvaWQ+KChfb2ssIGtvKSA9PiB7XG4gICAgICBjb25zdCB0aW1lckhhbmRsZSA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IGtvKG5ldyBFcnJvcihgVGltZW91dDogdGVzdCB0b29rIG1vcmUgdGhhbiAke3NlY29uZHN9cyB0byBjb21wbGV0ZWApKSxcbiAgICAgICAgc2Vjb25kcyAqIDEwMDApO1xuICAgICAgdGltZXJIYW5kbGUudW5yZWYoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgYmxvY2soeCksXG4gICAgICB0aW1lT3V0LFxuICAgIF0pO1xuICB9O1xufSJdfQ==
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10aW1lb3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC10aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLGtDQWNDO0FBaENEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQWdCLFdBQVcsQ0FBSSxPQUFlLEVBQUUsS0FBOEI7SUFDNUUsT0FBTyxDQUFDLENBQUksRUFBRSxFQUFFO1FBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUM1QixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLE9BQU8sZUFBZSxDQUFDLENBQUMsRUFDM0UsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1biBhIGJsb2NrIHdpdGggYSB0aW1lb3V0XG4gKlxuICogV2UgY2FuJ3QgdXNlIHRoZSBqZXN0IHRpbWVvdXQgZmVhdHVyZTpcbiAqXG4gKiAtIGBqZXN0LmNvbmN1cnJlbnQoKWAgZG9lcyBub3QgZG8gYW55IGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQuIEl0IHN0YXJ0cyBhbGxcbiAqICAgdGVzdHMgYXQgdGhlIHNhbWUgdGltZS5cbiAqIC0gT3VyIHRlc3RzIHVzZSBsb2NraW5nIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSB0ZXN0IGlzIHJ1bm5pbmcgYXQgYSB0aW1lIHBlclxuICogICByZWdpb24uXG4gKlxuICogVGhlIHdhaXQgdGltZSBmb3IgdGhlIGxvY2tzIGlzIGluY2x1ZGVkIGluIHRoZSBqZXN0IHRlc3QgdGltZW91dC4gV2UgdGhlcmVmb3JlXG4gKiBuZWVkIHRvIHNldCBpdCB1bnJlYXNvbmFibHkgaGlnaCAoYXMgbG9uZyBhcyB0aGUgbGFzdCB0ZXN0IG1heSBuZWVkIHRvIHdhaXRcbiAqIGlmIGFsbCB0ZXN0cyBhcmUgZXhlY3V0ZWQgdXNpbmcgb25seSAxIHJlZ2lvbiwgYW5kIHRoZXkgZWZmZWN0aXZlbHkgZXhlY3V0ZVxuICogc2VxdWVudGlhbGx5KSwgd2hpY2ggbWFrZXMgaXQgbm90IHVzZWZ1bCB0byBkZXRlY3Qgc3R1Y2sgdGVzdHMuXG4gKlxuICogVGhlIGB3aXRoVGltZW91dCgpYCBtb2RpZmllciBtYWtlcyBpdCBwb3NzaWJsZSB0byBtZWFzdXJlIG9ubHkgYSBzcGVjaWZpY1xuICogYmxvY2sgb2YgY29kZS4gSW4gb3VyIGNhc2U6IHRoZSBlZmZlY3RpdmUgdGVzdCBjb2RlLCBleGNsdWRpbmcgdGhlIHdhaXQgdGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PEE+KHNlY29uZHM6IG51bWJlciwgYmxvY2s6ICh4OiBBKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiAoeDogQSkgPT4ge1xuICAgIGNvbnN0IHRpbWVPdXQgPSBuZXcgUHJvbWlzZTx2b2lkPigoX29rLCBrbykgPT4ge1xuICAgICAgY29uc3QgdGltZXJIYW5kbGUgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiBrbyhuZXcgRXJyb3IoYFRpbWVvdXQ6IHRlc3QgdG9vayBtb3JlIHRoYW4gJHtzZWNvbmRzfXMgdG8gY29tcGxldGVgKSksXG4gICAgICAgIHNlY29uZHMgKiAxMDAwKTtcbiAgICAgIHRpbWVySGFuZGxlLnVucmVmKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICAgIGJsb2NrKHgpLFxuICAgICAgdGltZU91dCxcbiAgICBdKTtcbiAgfTtcbn0iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk-testing/cli-integ",
|
|
3
3
|
"description": "Integration tests for the AWS CDK CLI",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.166.0",
|
|
5
5
|
"bin": {
|
|
6
6
|
"run-suite": "bin/run-suite",
|
|
7
7
|
"download-and-run-old-tests": "bin/download-and-run-old-tests",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
32
|
+
"@aws-cdk/cdk-build-tools": "2.166.0-alpha.0",
|
|
33
33
|
"@types/semver": "^7.5.8",
|
|
34
34
|
"@types/yargs": "^15.0.19",
|
|
35
35
|
"@types/fs-extra": "^9.0.13",
|
|
36
36
|
"@types/glob": "^7.2.0",
|
|
37
37
|
"@types/npm": "^7.19.3",
|
|
38
|
-
"@aws-cdk/pkglint": "2.
|
|
38
|
+
"@aws-cdk/pkglint": "2.166.0-alpha.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@octokit/rest": "^18.12.0",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"@aws-sdk/client-sso": "3.632.0",
|
|
51
51
|
"@aws-sdk/client-sts": "3.632.0",
|
|
52
52
|
"@aws-sdk/credential-providers": "3.632.0",
|
|
53
|
-
"@smithy/util-retry": "3.0.
|
|
54
|
-
"@smithy/types": "3.
|
|
53
|
+
"@smithy/util-retry": "3.0.8",
|
|
54
|
+
"@smithy/types": "3.6.0",
|
|
55
55
|
"axios": "^1.7.7",
|
|
56
56
|
"chalk": "^4",
|
|
57
57
|
"fs-extra": "^9.1.0",
|
|
@@ -606,6 +606,19 @@ class DockerStack extends cdk.Stack {
|
|
|
606
606
|
}
|
|
607
607
|
}
|
|
608
608
|
|
|
609
|
+
class DockerInUseStack extends cdk.Stack {
|
|
610
|
+
constructor(parent, id, props) {
|
|
611
|
+
super(parent, id, props);
|
|
612
|
+
|
|
613
|
+
// Use the docker file in a lambda otherwise it will not be referenced in the template
|
|
614
|
+
const fn = new lambda.Function(this, 'my-function', {
|
|
615
|
+
code: lambda.Code.fromAssetImage(path.join(__dirname, 'docker')),
|
|
616
|
+
runtime: lambda.Runtime.FROM_IMAGE,
|
|
617
|
+
handler: lambda.Handler.FROM_IMAGE,
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
609
622
|
class DockerStackWithCustomFile extends cdk.Stack {
|
|
610
623
|
constructor(parent, id, props) {
|
|
611
624
|
super(parent, id, props);
|
|
@@ -814,6 +827,7 @@ switch (stackSet) {
|
|
|
814
827
|
new EcsHotswapStack(app, `${stackPrefix}-ecs-hotswap`);
|
|
815
828
|
new AppSyncHotswapStack(app, `${stackPrefix}-appsync-hotswap`);
|
|
816
829
|
new DockerStack(app, `${stackPrefix}-docker`);
|
|
830
|
+
new DockerInUseStack(app, `${stackPrefix}-docker-in-use`);
|
|
817
831
|
new DockerStackWithCustomFile(app, `${stackPrefix}-docker-with-custom-file`);
|
|
818
832
|
|
|
819
833
|
new NotificationArnPropStack(app, `${stackPrefix}-notification-arn-prop`, {
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
const cdk = require('aws-cdk-lib');
|
|
2
2
|
const lambda = require('aws-cdk-lib/aws-lambda');
|
|
3
|
+
const sqs = require('aws-cdk-lib/aws-sqs');
|
|
3
4
|
const cr = require('aws-cdk-lib/custom-resources');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* This stack will be deployed in multiple phases, to achieve a very specific effect
|
|
7
8
|
*
|
|
8
|
-
* It contains resources r1 and r2, where r1 gets deployed first.
|
|
9
|
+
* It contains resources r1 and r2, and a queue q, where r1 gets deployed first.
|
|
9
10
|
*
|
|
10
11
|
* - PHASE = 1: both resources deploy regularly.
|
|
11
12
|
* - PHASE = 2a: r1 gets updated, r2 will fail to update
|
|
12
13
|
* - PHASE = 2b: r1 gets updated, r2 will fail to update, and r1 will fail its rollback.
|
|
14
|
+
* - PHASE = 3: q gets replaced w.r.t. phases 1 and 2
|
|
13
15
|
*
|
|
14
16
|
* To exercise this app:
|
|
15
17
|
*
|
|
@@ -22,7 +24,7 @@ const cr = require('aws-cdk-lib/custom-resources');
|
|
|
22
24
|
* # This will start a rollback that will fail because r1 fails its rollabck
|
|
23
25
|
*
|
|
24
26
|
* env PHASE=2b npx cdk rollback --force
|
|
25
|
-
* # This will retry the
|
|
27
|
+
* # This will retry the rollback and skip r1
|
|
26
28
|
* ```
|
|
27
29
|
*/
|
|
28
30
|
class RollbacktestStack extends cdk.Stack {
|
|
@@ -31,6 +33,7 @@ class RollbacktestStack extends cdk.Stack {
|
|
|
31
33
|
|
|
32
34
|
let r1props = {};
|
|
33
35
|
let r2props = {};
|
|
36
|
+
let fifo = false;
|
|
34
37
|
|
|
35
38
|
const phase = process.env.PHASE;
|
|
36
39
|
switch (phase) {
|
|
@@ -46,6 +49,9 @@ class RollbacktestStack extends cdk.Stack {
|
|
|
46
49
|
r1props.FailRollback = true;
|
|
47
50
|
r2props.FailUpdate = true;
|
|
48
51
|
break;
|
|
52
|
+
case '3':
|
|
53
|
+
fifo = true;
|
|
54
|
+
break;
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
const fn = new lambda.Function(this, 'Fun', {
|
|
@@ -76,6 +82,10 @@ class RollbacktestStack extends cdk.Stack {
|
|
|
76
82
|
properties: r2props,
|
|
77
83
|
});
|
|
78
84
|
r2.node.addDependency(r1);
|
|
85
|
+
|
|
86
|
+
new sqs.Queue(this, 'Queue', {
|
|
87
|
+
fifo,
|
|
88
|
+
});
|
|
79
89
|
}
|
|
80
90
|
}
|
|
81
91
|
|