@aws-cdk-testing/cli-integ 3.24.0 → 3.25.1

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/package.json CHANGED
@@ -39,9 +39,9 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.17.0",
42
+ "@aws-cdk/toolkit-lib": "1.18.0",
43
43
  "@aws-cdk/yarn-cling": "0.0.0",
44
- "@cdklabs/eslint-plugin": "^1.5.5",
44
+ "@cdklabs/eslint-plugin": "^1.5.6",
45
45
  "@stylistic/eslint-plugin": "^3",
46
46
  "@types/fs-extra": "^9",
47
47
  "@types/jest": "^29.5.14",
@@ -67,23 +67,23 @@
67
67
  "typescript": "5.9"
68
68
  },
69
69
  "dependencies": {
70
- "@aws-sdk/client-cloudformation": "^3.1000.0",
71
- "@aws-sdk/client-codeartifact": "^3.1000.0",
72
- "@aws-sdk/client-ecr": "^3.1000.0",
73
- "@aws-sdk/client-ecr-public": "^3.1000.0",
74
- "@aws-sdk/client-ecs": "^3.1000.0",
75
- "@aws-sdk/client-iam": "^3.1000.0",
76
- "@aws-sdk/client-lambda": "^3.1000.0",
77
- "@aws-sdk/client-s3": "^3.1000.0",
78
- "@aws-sdk/client-secrets-manager": "^3.1000.0",
79
- "@aws-sdk/client-sns": "^3.1000.0",
80
- "@aws-sdk/client-sso": "^3.1000.0",
81
- "@aws-sdk/client-sts": "^3.1000.0",
82
- "@aws-sdk/credential-providers": "^3.1000.0",
83
- "@cdklabs/cdk-atmosphere-client": "^0.0.90",
70
+ "@aws-sdk/client-cloudformation": "^3.1004.0",
71
+ "@aws-sdk/client-codeartifact": "^3.1004.0",
72
+ "@aws-sdk/client-ecr": "^3.1004.0",
73
+ "@aws-sdk/client-ecr-public": "^3.1004.0",
74
+ "@aws-sdk/client-ecs": "^3.1004.0",
75
+ "@aws-sdk/client-iam": "^3.1004.0",
76
+ "@aws-sdk/client-lambda": "^3.1004.0",
77
+ "@aws-sdk/client-s3": "^3.1004.0",
78
+ "@aws-sdk/client-secrets-manager": "^3.1004.0",
79
+ "@aws-sdk/client-sns": "^3.1004.0",
80
+ "@aws-sdk/client-sso": "^3.1004.0",
81
+ "@aws-sdk/client-sts": "^3.1004.0",
82
+ "@aws-sdk/credential-providers": "^3.1004.0",
83
+ "@cdklabs/cdk-atmosphere-client": "^0.0.91",
84
84
  "@octokit/rest": "^20",
85
85
  "@smithy/types": "^4.13.0",
86
- "@smithy/util-retry": "^4.2.10",
86
+ "@smithy/util-retry": "^4.2.11",
87
87
  "axios": "^1",
88
88
  "chalk": "^4",
89
89
  "fast-glob": "^3.3.3",
@@ -116,7 +116,7 @@
116
116
  "publishConfig": {
117
117
  "access": "public"
118
118
  },
119
- "version": "3.24.0",
119
+ "version": "3.25.1",
120
120
  "types": "lib/index.d.ts",
121
121
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
122
122
  }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
+ const client_lambda_1 = require("@aws-sdk/client-lambda");
5
+ const lib_1 = require("../../../lib");
6
+ const drift_helpers_1 = require("../drift/drift_helpers");
7
+ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
8
+ (0, lib_1.integTest)('deploy with revert-drift true', (0, lib_1.withDefaultFixture)(async (fixture) => {
9
+ await fixture.cdkDeploy('driftable', {});
10
+ // Get the Lambda, we want to now make it drift
11
+ const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
12
+ StackName: fixture.fullStackName('driftable'),
13
+ }));
14
+ const lambdaResource = response.StackResources?.find(resource => resource.ResourceType === 'AWS::Lambda::Function');
15
+ if (!lambdaResource || !lambdaResource.PhysicalResourceId) {
16
+ throw new Error('Could not find Lambda function in stack resources');
17
+ }
18
+ const functionName = lambdaResource.PhysicalResourceId;
19
+ // Update the Lambda function, introducing drift
20
+ await fixture.aws.lambda.send(new client_lambda_1.UpdateFunctionConfigurationCommand({
21
+ FunctionName: functionName,
22
+ Description: 'I\'m slowly drifting (drifting away)',
23
+ }));
24
+ // Wait for the stack update to complete
25
+ await (0, drift_helpers_1.waitForLambdaUpdateComplete)(fixture, functionName);
26
+ const drifted = await fixture.cdk(['drift', fixture.fullStackName('driftable')], { verbose: false });
27
+ expect(drifted).toMatch(/Stack.*driftable/);
28
+ expect(drifted).toContain('1 resource has drifted');
29
+ // Update the Stack with drift-aware
30
+ await fixture.cdkDeploy('driftable', {
31
+ options: ['--revert-drift'],
32
+ captureStderr: false,
33
+ });
34
+ // After performing a drift-aware deployment, verify that no drift has occurred.
35
+ const noDrifted = await fixture.cdk(['drift', fixture.fullStackName('driftable')], { verbose: false });
36
+ expect(noDrifted).toMatch(/Stack.*driftable/); // can't just .toContain because of formatting
37
+ expect(noDrifted).toContain('No drift detected');
38
+ }));
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS13aXRoLXJldmVydC1kcmlmdC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZGVwbG95LXdpdGgtcmV2ZXJ0LWRyaWZ0LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUErRTtBQUMvRSwwREFBNEU7QUFDNUUsc0NBQTZEO0FBQzdELDBEQUFxRTtBQUVyRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQ1AsK0JBQStCLEVBQy9CLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekMsK0NBQStDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNwRCxJQUFJLHFEQUE2QixDQUFDO1FBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUM5QyxDQUFDLENBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUNsRCxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssdUJBQXVCLENBQzlELENBQUM7SUFDRixJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUM7SUFFdkQsZ0RBQWdEO0lBQ2hELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQixJQUFJLGtEQUFrQyxDQUFDO1FBQ3JDLFlBQVksRUFBRSxZQUFZO1FBQzFCLFdBQVcsRUFBRSxzQ0FBc0M7S0FDcEQsQ0FBQyxDQUNILENBQUM7SUFFRix3Q0FBd0M7SUFDeEMsTUFBTSxJQUFBLDJDQUEyQixFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFckcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVwRCxvQ0FBb0M7SUFDcEMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtRQUNuQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQixhQUFhLEVBQUUsS0FBSztLQUNyQixDQUFDLENBQUM7SUFFSCxnRkFBZ0Y7SUFDaEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXZHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztJQUM3RixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZSB9IGZyb20gJy4uL2RyaWZ0L2RyaWZ0X2hlbHBlcnMnO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCByZXZlcnQtZHJpZnQgdHJ1ZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkcmlmdGFibGUnLCB7fSk7XG5cbiAgICAvLyBHZXQgdGhlIExhbWJkYSwgd2Ugd2FudCB0byBub3cgbWFrZSBpdCBkcmlmdFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhUmVzb3VyY2UgPSByZXNwb25zZS5TdGFja1Jlc291cmNlcz8uZmluZChcbiAgICAgIHJlc291cmNlID0+IHJlc291cmNlLlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgKTtcbiAgICBpZiAoIWxhbWJkYVJlc291cmNlIHx8ICFsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgTGFtYmRhIGZ1bmN0aW9uIGluIHN0YWNrIHJlc291cmNlcycpO1xuICAgIH1cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQ7XG5cbiAgICAvLyBVcGRhdGUgdGhlIExhbWJkYSBmdW5jdGlvbiwgaW50cm9kdWNpbmcgZHJpZnRcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnSVxcJ20gc2xvd2x5IGRyaWZ0aW5nIChkcmlmdGluZyBhd2F5KScsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIHN0YWNrIHVwZGF0ZSB0byBjb21wbGV0ZVxuICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZShmaXh0dXJlLCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgY29uc3QgZHJpZnRlZCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZHJpZnQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdChkcmlmdGVkKS50b01hdGNoKC9TdGFjay4qZHJpZnRhYmxlLyk7XG4gICAgZXhwZWN0KGRyaWZ0ZWQpLnRvQ29udGFpbignMSByZXNvdXJjZSBoYXMgZHJpZnRlZCcpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBTdGFjayB3aXRoIGRyaWZ0LWF3YXJlXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RyaWZ0YWJsZScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1yZXZlcnQtZHJpZnQnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyBhIGRyaWZ0LWF3YXJlIGRlcGxveW1lbnQsIHZlcmlmeSB0aGF0IG5vIGRyaWZ0IGhhcyBvY2N1cnJlZC5cbiAgICBjb25zdCBub0RyaWZ0ZWQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG5cbiAgICBleHBlY3Qobm9EcmlmdGVkKS50b01hdGNoKC9TdGFjay4qZHJpZnRhYmxlLyk7IC8vIGNhbid0IGp1c3QgLnRvQ29udGFpbiBiZWNhdXNlIG9mIGZvcm1hdHRpbmdcbiAgICBleHBlY3Qobm9EcmlmdGVkKS50b0NvbnRhaW4oJ05vIGRyaWZ0IGRldGVjdGVkJyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ jest.setTimeout(2 * 60 * 60_000);
5
+ (0, lib_1.integTest)('cdk doctor displays diagnostic information', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ const output = await fixture.cdk(['doctor']);
7
+ expect(output).toContain('CDK Version');
8
+ expect(output).toContain('AWS environment variables');
9
+ expect(output).toContain('CDK environment variables');
10
+ }));
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRvY3Rvci5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstZG9jdG9yLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RDtBQUU3RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFFakMsSUFBQSxlQUFTLEVBQ1AsNENBQTRDLEVBQzVDLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZG9jdG9yIGRpc3BsYXlzIGRpYWdub3N0aWMgaW5mb3JtYXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RvY3RvciddKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ0NESyBWZXJzaW9uJyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdBV1MgZW52aXJvbm1lbnQgdmFyaWFibGVzJyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdDREsgZW52aXJvbm1lbnQgdmFyaWFibGVzJyk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
4
  const client_lambda_1 = require("@aws-sdk/client-lambda");
5
+ const drift_helpers_1 = require("./drift_helpers");
5
6
  const lib_1 = require("../../../lib");
6
7
  jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
7
8
  (0, lib_1.integTest)('cdk drift --fail throws when drift is detected', (0, lib_1.withDefaultFixture)(async (fixture) => {
@@ -24,29 +25,7 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
24
25
  Description: 'I\'m slowly drifting (drifting away)',
25
26
  }));
26
27
  // Wait for the stack update to complete
27
- await waitForLambdaUpdateComplete(fixture, functionName);
28
+ await (0, drift_helpers_1.waitForLambdaUpdateComplete)(fixture, functionName);
28
29
  await expect(fixture.cdk(['drift', '--fail', fixture.fullStackName('driftable')], { verbose: false })).rejects.toThrow('exited with error');
29
30
  }));
30
- async function waitForLambdaUpdateComplete(fixture, functionName) {
31
- const delaySeconds = 5;
32
- const timeout = 30_000; // timeout after 30s
33
- const deadline = Date.now() + timeout;
34
- while (true) {
35
- const response = await fixture.aws.lambda.send(new client_lambda_1.GetFunctionCommand({
36
- FunctionName: functionName,
37
- }));
38
- const lastUpdateStatus = response.Configuration?.LastUpdateStatus;
39
- if (lastUpdateStatus === 'Successful') {
40
- return; // Update completed successfully
41
- }
42
- if (lastUpdateStatus === 'Failed') {
43
- throw new Error('Lambda function update failed');
44
- }
45
- if (Date.now() > deadline) {
46
- throw new Error(`Timed out after ${timeout / 1000} seconds.`);
47
- }
48
- // Wait before checking again
49
- await (0, lib_1.sleep)(delaySeconds * 1000);
50
- }
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEVBQStFO0FBQy9FLDBEQUFnRztBQUNoRyxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLGdEQUFnRCxFQUNoRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLHNGQUFzRjtJQUN0RixNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTdHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUU3QywrQ0FBK0M7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO0tBQzlDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQ2xELFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyx1QkFBdUIsQ0FDOUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2RCxnREFBZ0Q7SUFDaEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNCLElBQUksa0RBQWtDLENBQUM7UUFDckMsWUFBWSxFQUFFLFlBQVk7UUFDMUIsV0FBVyxFQUFFLHNDQUFzQztLQUNwRCxDQUFDLENBQ0gsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxNQUFNLE1BQU0sQ0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDekYsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUVGLEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxPQUFZLEVBQUUsWUFBb0I7SUFDM0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQjtJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXRDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUMsSUFBSSxrQ0FBa0IsQ0FBQztZQUNyQixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQztRQUVsRSxJQUFJLGdCQUFnQixLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxnQ0FBZ0M7UUFDMUMsQ0FBQztRQUVELElBQUksZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLE1BQU0sSUFBQSxXQUFLLEVBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgR2V0RnVuY3Rpb25Db21tYW5kLCBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHNsZWVwLCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZHJpZnQgLS1mYWlsIHRocm93cyB3aGVuIGRyaWZ0IGlzIGRldGVjdGVkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RyaWZ0YWJsZScsIHt9KTtcblxuICAgIC8vIEFzc2VydCB0aGF0LCByaWdodCBhZnRlciBkZXBsb3lpbmcsIHRoZXJlIGlzIG5vIGRyaWZ0IChiZWNhdXNlIHdlIGp1c3QgZGVwbG95ZWQgaXQpXG4gICAgY29uc3QgZHJpZnQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyldLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuXG4gICAgZXhwZWN0KGRyaWZ0KS50b0NvbnRhaW4oJ05vIGRyaWZ0IGRldGVjdGVkJyk7XG5cbiAgICAvLyBHZXQgdGhlIExhbWJkYSwgd2Ugd2FudCB0byBub3cgbWFrZSBpdCBkcmlmdFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhUmVzb3VyY2UgPSByZXNwb25zZS5TdGFja1Jlc291cmNlcz8uZmluZChcbiAgICAgIHJlc291cmNlID0+IHJlc291cmNlLlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgKTtcbiAgICBpZiAoIWxhbWJkYVJlc291cmNlIHx8ICFsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgTGFtYmRhIGZ1bmN0aW9uIGluIHN0YWNrIHJlc291cmNlcycpO1xuICAgIH1cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQ7XG5cbiAgICAvLyBVcGRhdGUgdGhlIExhbWJkYSBmdW5jdGlvbiwgaW50cm9kdWNpbmcgZHJpZnRcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnSVxcJ20gc2xvd2x5IGRyaWZ0aW5nIChkcmlmdGluZyBhd2F5KScsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIHN0YWNrIHVwZGF0ZSB0byBjb21wbGV0ZVxuICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZShmaXh0dXJlLCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkcmlmdCcsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yTGFtYmRhVXBkYXRlQ29tcGxldGUoZml4dHVyZTogYW55LCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWxheVNlY29uZHMgPSA1O1xuICBjb25zdCB0aW1lb3V0ID0gMzBfMDAwOyAvLyB0aW1lb3V0IGFmdGVyIDMwc1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBHZXRGdW5jdGlvbkNvbW1hbmQoe1xuICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBsYXN0VXBkYXRlU3RhdHVzID0gcmVzcG9uc2UuQ29uZmlndXJhdGlvbj8uTGFzdFVwZGF0ZVN0YXR1cztcblxuICAgIGlmIChsYXN0VXBkYXRlU3RhdHVzID09PSAnU3VjY2Vzc2Z1bCcpIHtcbiAgICAgIHJldHVybjsgLy8gVXBkYXRlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICB9XG5cbiAgICBpZiAobGFzdFVwZGF0ZVN0YXR1cyA9PT0gJ0ZhaWxlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGFtYmRhIGZ1bmN0aW9uIHVwZGF0ZSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBhZnRlciAke3RpbWVvdXQgLyAxMDAwfSBzZWNvbmRzLmApO1xuICAgIH1cblxuICAgIC8vIFdhaXQgYmVmb3JlIGNoZWNraW5nIGFnYWluXG4gICAgYXdhaXQgc2xlZXAoZGVsYXlTZWNvbmRzICogMTAwMCk7XG4gIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEVBQStFO0FBQy9FLDBEQUE0RTtBQUM1RSxtREFBOEQ7QUFDOUQsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxnREFBZ0QsRUFDaEQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV6QyxzRkFBc0Y7SUFDdEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUU3RyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0MsK0NBQStDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNwRCxJQUFJLHFEQUE2QixDQUFDO1FBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUM5QyxDQUFDLENBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUNsRCxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssdUJBQXVCLENBQzlELENBQUM7SUFDRixJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUM7SUFFdkQsZ0RBQWdEO0lBQ2hELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQixJQUFJLGtEQUFrQyxDQUFDO1FBQ3JDLFlBQVksRUFBRSxZQUFZO1FBQzFCLFdBQVcsRUFBRSxzQ0FBc0M7S0FDcEQsQ0FBQyxDQUNILENBQUM7SUFFRix3Q0FBd0M7SUFDeEMsTUFBTSxJQUFBLDJDQUEyQixFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxNQUFNLE1BQU0sQ0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDekYsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZSB9IGZyb20gJy4vZHJpZnRfaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2NkayBkcmlmdCAtLWZhaWwgdGhyb3dzIHdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZHJpZnRhYmxlJywge30pO1xuXG4gICAgLy8gQXNzZXJ0IHRoYXQsIHJpZ2h0IGFmdGVyIGRlcGxveWluZywgdGhlcmUgaXMgbm8gZHJpZnQgKGJlY2F1c2Ugd2UganVzdCBkZXBsb3llZCBpdClcbiAgICBjb25zdCBkcmlmdCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZHJpZnQnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG5cbiAgICBleHBlY3QoZHJpZnQpLnRvQ29udGFpbignTm8gZHJpZnQgZGV0ZWN0ZWQnKTtcblxuICAgIC8vIEdldCB0aGUgTGFtYmRhLCB3ZSB3YW50IHRvIG5vdyBtYWtlIGl0IGRyaWZ0XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBsYW1iZGFSZXNvdXJjZSA9IHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5maW5kKFxuICAgICAgcmVzb3VyY2UgPT4gcmVzb3VyY2UuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICApO1xuICAgIGlmICghbGFtYmRhUmVzb3VyY2UgfHwgIWxhbWJkYVJlc291cmNlLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBMYW1iZGEgZnVuY3Rpb24gaW4gc3RhY2sgcmVzb3VyY2VzJyk7XG4gICAgfVxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGxhbWJkYVJlc291cmNlLlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIC8vIFVwZGF0ZSB0aGUgTGFtYmRhIGZ1bmN0aW9uLCBpbnRyb2R1Y2luZyBkcmlmdFxuICAgIGF3YWl0IGZpeHR1cmUuYXdzLmxhbWJkYS5zZW5kKFxuICAgICAgbmV3IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQoe1xuICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgRGVzY3JpcHRpb246ICdJXFwnbSBzbG93bHkgZHJpZnRpbmcgKGRyaWZ0aW5nIGF3YXkpJyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgc3RhY2sgdXBkYXRlIHRvIGNvbXBsZXRlXG4gICAgYXdhaXQgd2FpdEZvckxhbWJkYVVwZGF0ZUNvbXBsZXRlKGZpeHR1cmUsIGZ1bmN0aW9uTmFtZSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyldLCB7IHZlcmJvc2U6IGZhbHNlIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG4iXX0=
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
4
  const client_lambda_1 = require("@aws-sdk/client-lambda");
5
+ const drift_helpers_1 = require("./drift_helpers");
5
6
  const lib_1 = require("../../../lib");
6
7
  jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
7
8
  (0, lib_1.integTest)('cdk drift', (0, lib_1.withDefaultFixture)(async (fixture) => {
@@ -27,7 +28,7 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
27
28
  Description: 'I\'m slowly drifting (drifting away)',
28
29
  }));
29
30
  // Wait for the stack update to complete
30
- await waitForLambdaUpdateComplete(fixture, functionName);
31
+ await (0, drift_helpers_1.waitForLambdaUpdateComplete)(fixture, functionName);
31
32
  const driftAfterModification = await fixture.cdk(['drift', fixture.fullStackName('driftable')], { verbose: false });
32
33
  const expectedMatches = [
33
34
  /Stack.*driftable/,
@@ -47,26 +48,4 @@ jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-c
47
48
  expect(driftAfterModification).toContain(expectedSubstring);
48
49
  }
49
50
  }));
50
- async function waitForLambdaUpdateComplete(fixture, functionName) {
51
- const delaySeconds = 5;
52
- const timeout = 30_000; // timeout after 30s
53
- const deadline = Date.now() + timeout;
54
- while (true) {
55
- const response = await fixture.aws.lambda.send(new client_lambda_1.GetFunctionCommand({
56
- FunctionName: functionName,
57
- }));
58
- const lastUpdateStatus = response.Configuration?.LastUpdateStatus;
59
- if (lastUpdateStatus === 'Successful') {
60
- return; // Update completed successfully
61
- }
62
- if (lastUpdateStatus === 'Failed') {
63
- throw new Error('Lambda function update failed');
64
- }
65
- if (Date.now() > deadline) {
66
- throw new Error(`Timed out after ${timeout / 1000} seconds.`);
67
- }
68
- // Wait before checking again
69
- await (0, lib_1.sleep)(delaySeconds * 1000);
70
- }
71
- }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRyaWZ0LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUErRTtBQUMvRSwwREFBZ0c7QUFDaEcsc0NBQW9FO0FBRXBFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCxXQUFXLEVBQ1gsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV6QyxzRkFBc0Y7SUFDdEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5HLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztJQUN6RixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0RBQW9EO0lBRTlGLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEQsSUFBSSxxREFBNkIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsT0FB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WSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgR2V0RnVuY3Rpb25Db21tYW5kLCBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHNsZWVwLCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZHJpZnQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZHJpZnRhYmxlJywge30pO1xuXG4gICAgLy8gQXNzZXJ0IHRoYXQsIHJpZ2h0IGFmdGVyIGRlcGxveWluZywgdGhlcmUgaXMgbm8gZHJpZnQgKGJlY2F1c2Ugd2UganVzdCBkZXBsb3llZCBpdClcbiAgICBjb25zdCBkcmlmdCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZHJpZnQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdChkcmlmdCkudG9NYXRjaCgvU3RhY2suKmRyaWZ0YWJsZS8pOyAvLyBjYW4ndCBqdXN0IC50b0NvbnRhaW4gYmVjYXVzZSBvZiBmb3JtYXR0aW5nXG4gICAgZXhwZWN0KGRyaWZ0KS50b0NvbnRhaW4oJ05vIGRyaWZ0IGRldGVjdGVkJyk7XG4gICAgZXhwZWN0KGRyaWZ0KS50b0NvbnRhaW4oJ+KcqCAgTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0OiAwJyk7XG4gICAgZXhwZWN0KGRyaWZ0KS5ub3QudG9Db250YWluKCd1bmNoZWNrZWQnKTsgLy8gc2hvdWxkIG5vdCBzZWUgdW5jaGVja2VkIHJlc291cmNlcyB1bmxlc3MgdmVyYm9zZVxuXG4gICAgLy8gR2V0IHRoZSBMYW1iZGEsIHdlIHdhbnQgdG8gbm93IG1ha2UgaXQgZHJpZnRcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGxhbWJkYVJlc291cmNlID0gcmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/LmZpbmQoXG4gICAgICByZXNvdXJjZSA9PiByZXNvdXJjZS5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICk7XG4gICAgaWYgKCFsYW1iZGFSZXNvdXJjZSB8fCAhbGFtYmRhUmVzb3VyY2UuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIExhbWJkYSBmdW5jdGlvbiBpbiBzdGFjayByZXNvdXJjZXMnKTtcbiAgICB9XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gbGFtYmRhUmVzb3VyY2UuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBMYW1iZGEgZnVuY3Rpb24sIGludHJvZHVjaW5nIGRyaWZ0XG4gICAgYXdhaXQgZml4dHVyZS5hd3MubGFtYmRhLnNlbmQoXG4gICAgICBuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBEZXNjcmlwdGlvbjogJ0lcXCdtIHNsb3dseSBkcmlmdGluZyAoZHJpZnRpbmcgYXdheSknLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBzdGFjayB1cGRhdGUgdG8gY29tcGxldGVcbiAgICBhd2FpdCB3YWl0Rm9yTGFtYmRhVXBkYXRlQ29tcGxldGUoZml4dHVyZSwgZnVuY3Rpb25OYW1lKTtcblxuICAgIGNvbnN0IGRyaWZ0QWZ0ZXJNb2RpZmljYXRpb24gPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZE1hdGNoZXMgPSBbXG4gICAgICAvU3RhY2suKmRyaWZ0YWJsZS8sXG4gICAgICAvWy1dLipUaGlzIGlzIG15IGZ1bmN0aW9uIS9tLFxuICAgICAgL1srXS4qSSdtIHNsb3dseSBkcmlmdGluZyBcXChkcmlmdGluZyBhd2F5XFwpL20sXG4gICAgXTtcbiAgICBjb25zdCBleHBlY3RlZFN1YnN0cmluZ3MgPSBbXG4gICAgICAnMSByZXNvdXJjZSBoYXMgZHJpZnRlZCcsIC8vIG51bSByZXNvdXJjZXMgZHJpZnRlZFxuICAgICAgJ+KcqCAgTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0OiAxJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCAvLyB0aGUgbGFtYmRhIHNob3VsZCBiZSBtYXJrZWQgZHJpZnRlZFxuICAgICAgJy9EZXNjcmlwdGlvbicsIC8vIHRoZSByZXNvdXJjZXMgdGhhdCBoYXZlIGRyaWZ0ZWRcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZXhwZWN0ZWRNYXRjaCBvZiBleHBlY3RlZE1hdGNoZXMpIHtcbiAgICAgIGV4cGVjdChkcmlmdEFmdGVyTW9kaWZpY2F0aW9uKS50b01hdGNoKGV4cGVjdGVkTWF0Y2gpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4cGVjdGVkU3Vic3RyaW5nIG9mIGV4cGVjdGVkU3Vic3RyaW5ncykge1xuICAgICAgZXhwZWN0KGRyaWZ0QWZ0ZXJNb2RpZmljYXRpb24pLnRvQ29udGFpbihleHBlY3RlZFN1YnN0cmluZyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZShmaXh0dXJlOiBhbnksIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlbGF5U2Vjb25kcyA9IDU7XG4gIGNvbnN0IHRpbWVvdXQgPSAzMF8wMDA7IC8vIHRpbWVvdXQgYWZ0ZXIgMzBzXG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmxhbWJkYS5zZW5kKFxuICAgICAgbmV3IEdldEZ1bmN0aW9uQ29tbWFuZCh7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGxhc3RVcGRhdGVTdGF0dXMgPSByZXNwb25zZS5Db25maWd1cmF0aW9uPy5MYXN0VXBkYXRlU3RhdHVzO1xuXG4gICAgaWYgKGxhc3RVcGRhdGVTdGF0dXMgPT09ICdTdWNjZXNzZnVsJykge1xuICAgICAgcmV0dXJuOyAvLyBVcGRhdGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgIH1cblxuICAgIGlmIChsYXN0VXBkYXRlU3RhdHVzID09PSAnRmFpbGVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMYW1iZGEgZnVuY3Rpb24gdXBkYXRlIGZhaWxlZCcpO1xuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpID4gZGVhZGxpbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGFmdGVyICR7dGltZW91dCAvIDEwMDB9IHNlY29uZHMuYCk7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBiZWZvcmUgY2hlY2tpbmcgYWdhaW5cbiAgICBhd2FpdCBzbGVlcChkZWxheVNlY29uZHMgKiAxMDAwKTtcbiAgfVxufVxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRyaWZ0LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUErRTtBQUMvRSwwREFBNEU7QUFDNUUsbURBQThEO0FBQzlELHNDQUE2RDtBQUU3RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQ1AsV0FBVyxFQUNYLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekMsc0ZBQXNGO0lBQ3RGLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVuRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7SUFDekYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNoRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtJQUU5RiwrQ0FBK0M7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO0tBQzlDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQ2xELFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyx1QkFBdUIsQ0FDOUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2RCxnREFBZ0Q7SUFDaEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNCLElBQUksa0RBQWtDLENBQUM7UUFDckMsWUFBWSxFQUFFLFlBQVk7UUFDMUIsV0FBVyxFQUFFLHNDQUFzQztLQUNwRCxDQUFDLENBQ0gsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLElBQUEsMkNBQTJCLEVBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXpELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXBILE1BQU0sZUFBZSxHQUFHO1FBQ3RCLGtCQUFrQjtRQUNsQiw0QkFBNEI7UUFDNUIsNkNBQTZDO0tBQzlDLENBQUM7SUFDRixNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLHdCQUF3QixFQUFFLHdCQUF3QjtRQUNsRCxzQ0FBc0M7UUFDdEMsdUJBQXVCLEVBQUUsc0NBQXNDO1FBQy9ELGNBQWMsRUFBRSxrQ0FBa0M7S0FDbkQsQ0FBQztJQUNGLEtBQUssTUFBTSxhQUFhLElBQUksZUFBZSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxLQUFLLE1BQU0saUJBQWlCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZSB9IGZyb20gJy4vZHJpZnRfaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ2NkayBkcmlmdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkcmlmdGFibGUnLCB7fSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCwgcmlnaHQgYWZ0ZXIgZGVwbG95aW5nLCB0aGVyZSBpcyBubyBkcmlmdCAoYmVjYXVzZSB3ZSBqdXN0IGRlcGxveWVkIGl0KVxuICAgIGNvbnN0IGRyaWZ0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkcmlmdCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyldLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuXG4gICAgZXhwZWN0KGRyaWZ0KS50b01hdGNoKC9TdGFjay4qZHJpZnRhYmxlLyk7IC8vIGNhbid0IGp1c3QgLnRvQ29udGFpbiBiZWNhdXNlIG9mIGZvcm1hdHRpbmdcbiAgICBleHBlY3QoZHJpZnQpLnRvQ29udGFpbignTm8gZHJpZnQgZGV0ZWN0ZWQnKTtcbiAgICBleHBlY3QoZHJpZnQpLnRvQ29udGFpbign4pyoICBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQ6IDAnKTtcbiAgICBleHBlY3QoZHJpZnQpLm5vdC50b0NvbnRhaW4oJ3VuY2hlY2tlZCcpOyAvLyBzaG91bGQgbm90IHNlZSB1bmNoZWNrZWQgcmVzb3VyY2VzIHVubGVzcyB2ZXJib3NlXG5cbiAgICAvLyBHZXQgdGhlIExhbWJkYSwgd2Ugd2FudCB0byBub3cgbWFrZSBpdCBkcmlmdFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhUmVzb3VyY2UgPSByZXNwb25zZS5TdGFja1Jlc291cmNlcz8uZmluZChcbiAgICAgIHJlc291cmNlID0+IHJlc291cmNlLlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgKTtcbiAgICBpZiAoIWxhbWJkYVJlc291cmNlIHx8ICFsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgTGFtYmRhIGZ1bmN0aW9uIGluIHN0YWNrIHJlc291cmNlcycpO1xuICAgIH1cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQ7XG5cbiAgICAvLyBVcGRhdGUgdGhlIExhbWJkYSBmdW5jdGlvbiwgaW50cm9kdWNpbmcgZHJpZnRcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnSVxcJ20gc2xvd2x5IGRyaWZ0aW5nIChkcmlmdGluZyBhd2F5KScsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIHN0YWNrIHVwZGF0ZSB0byBjb21wbGV0ZVxuICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZShmaXh0dXJlLCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgY29uc3QgZHJpZnRBZnRlck1vZGlmaWNhdGlvbiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZHJpZnQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGV4cGVjdGVkTWF0Y2hlcyA9IFtcbiAgICAgIC9TdGFjay4qZHJpZnRhYmxlLyxcbiAgICAgIC9bLV0uKlRoaXMgaXMgbXkgZnVuY3Rpb24hL20sXG4gICAgICAvWytdLipJJ20gc2xvd2x5IGRyaWZ0aW5nIFxcKGRyaWZ0aW5nIGF3YXlcXCkvbSxcbiAgICBdO1xuICAgIGNvbnN0IGV4cGVjdGVkU3Vic3RyaW5ncyA9IFtcbiAgICAgICcxIHJlc291cmNlIGhhcyBkcmlmdGVkJywgLy8gbnVtIHJlc291cmNlcyBkcmlmdGVkXG4gICAgICAn4pyoICBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQ6IDEnLFxuICAgICAgJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIC8vIHRoZSBsYW1iZGEgc2hvdWxkIGJlIG1hcmtlZCBkcmlmdGVkXG4gICAgICAnL0Rlc2NyaXB0aW9uJywgLy8gdGhlIHJlc291cmNlcyB0aGF0IGhhdmUgZHJpZnRlZFxuICAgIF07XG4gICAgZm9yIChjb25zdCBleHBlY3RlZE1hdGNoIG9mIGV4cGVjdGVkTWF0Y2hlcykge1xuICAgICAgZXhwZWN0KGRyaWZ0QWZ0ZXJNb2RpZmljYXRpb24pLnRvTWF0Y2goZXhwZWN0ZWRNYXRjaCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZXhwZWN0ZWRTdWJzdHJpbmcgb2YgZXhwZWN0ZWRTdWJzdHJpbmdzKSB7XG4gICAgICBleHBlY3QoZHJpZnRBZnRlck1vZGlmaWNhdGlvbikudG9Db250YWluKGV4cGVjdGVkU3Vic3RyaW5nKTtcbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export declare function waitForLambdaUpdateComplete(fixture: any, functionName: string): Promise<void>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForLambdaUpdateComplete = waitForLambdaUpdateComplete;
4
+ const client_lambda_1 = require("@aws-sdk/client-lambda");
5
+ const lib_1 = require("../../../lib");
6
+ async function waitForLambdaUpdateComplete(fixture, functionName) {
7
+ const delaySeconds = 5;
8
+ const timeout = 30_000; // timeout after 30s
9
+ const deadline = Date.now() + timeout;
10
+ while (true) {
11
+ const response = await fixture.aws.lambda.send(new client_lambda_1.GetFunctionCommand({
12
+ FunctionName: functionName,
13
+ }));
14
+ const lastUpdateStatus = response.Configuration?.LastUpdateStatus;
15
+ if (lastUpdateStatus === 'Successful') {
16
+ return; // Update completed successfully
17
+ }
18
+ if (lastUpdateStatus === 'Failed') {
19
+ throw new Error('Lambda function update failed');
20
+ }
21
+ if (Date.now() > deadline) {
22
+ throw new Error(`Timed out after ${timeout / 1000} seconds.`);
23
+ }
24
+ // Wait before checking again
25
+ await (0, lib_1.sleep)(delaySeconds * 1000);
26
+ }
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnRfaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRyaWZ0X2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrRUE2QkM7QUFoQ0QsMERBQTREO0FBQzVELHNDQUFxQztBQUU5QixLQUFLLFVBQVUsMkJBQTJCLENBQUMsT0FBWSxFQUFFLFlBQW9CO0lBQ2xGLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7SUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV0QyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzVDLElBQUksa0NBQWtCLENBQUM7WUFDckIsWUFBWSxFQUFFLFlBQVk7U0FDM0IsQ0FBQyxDQUNILENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7UUFFbEUsSUFBSSxnQkFBZ0IsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxPQUFPLENBQUMsZ0NBQWdDO1FBQzFDLENBQUM7UUFFRCxJQUFJLGdCQUFnQixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixNQUFNLElBQUEsV0FBSyxFQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldEZ1bmN0aW9uQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckxhbWJkYVVwZGF0ZUNvbXBsZXRlKGZpeHR1cmU6IGFueSwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVsYXlTZWNvbmRzID0gNTtcbiAgY29uc3QgdGltZW91dCA9IDMwXzAwMDsgLy8gdGltZW91dCBhZnRlciAzMHNcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MubGFtYmRhLnNlbmQoXG4gICAgICBuZXcgR2V0RnVuY3Rpb25Db21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgbGFzdFVwZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLkNvbmZpZ3VyYXRpb24/Lkxhc3RVcGRhdGVTdGF0dXM7XG5cbiAgICBpZiAobGFzdFVwZGF0ZVN0YXR1cyA9PT0gJ1N1Y2Nlc3NmdWwnKSB7XG4gICAgICByZXR1cm47IC8vIFVwZGF0ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgfVxuXG4gICAgaWYgKGxhc3RVcGRhdGVTdGF0dXMgPT09ICdGYWlsZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xhbWJkYSBmdW5jdGlvbiB1cGRhdGUgZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKERhdGUubm93KCkgPiBkZWFkbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0IC8gMTAwMH0gc2Vjb25kcy5gKTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IGJlZm9yZSBjaGVja2luZyBhZ2FpblxuICAgIGF3YWl0IHNsZWVwKGRlbGF5U2Vjb25kcyAqIDEwMDApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../../lib");
4
+ jest.setTimeout(2 * 60 * 60_000);
5
+ (0, lib_1.integTest)('cdk metadata displays stack metadata', (0, lib_1.withDefaultFixture)(async (fixture) => {
6
+ await fixture.cdk(['synth', fixture.fullStackName('test-2')]);
7
+ const output = await fixture.cdk(['metadata', fixture.fullStackName('test-2')]);
8
+ // Most basic metadata type
9
+ expect(output).toContain('aws:cdk:logicalId');
10
+ }));
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW1ldGFkYXRhLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1tZXRhZGF0YS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBRWpDLElBQUEsZUFBUyxFQUNQLHNDQUFzQyxFQUN0QyxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhGLDJCQUEyQjtJQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7XG5cbmludGVnVGVzdChcbiAgJ2NkayBtZXRhZGF0YSBkaXNwbGF5cyBzdGFjayBtZXRhZGF0YScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydtZXRhZGF0YScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcblxuICAgIC8vIE1vc3QgYmFzaWMgbWV0YWRhdGEgdHlwZVxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignYXdzOmNkazpsb2dpY2FsSWQnKTtcbiAgfSksXG4pO1xuIl19
@@ -5,7 +5,7 @@ const fs = require("fs");
5
5
  const path = require("path");
6
6
  const watch_helpers_1 = require("./watch-helpers");
7
7
  const lib_1 = require("../../../lib");
8
- jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
8
+ jest.setTimeout(5 * 60 * 1000); // 5 minutes for watch tests
9
9
  (0, lib_1.integTest)('cdk watch does NOT detect file changes for excluded patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
10
10
  // Create a test file that will be watched (for initial deploy)
11
11
  const watchedFile = path.join(fixture.integTestDir, 'watched-file.ts');
@@ -20,13 +20,12 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
20
20
  fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
21
21
  await fixture.cli.makeCliAvailable();
22
22
  let output = '';
23
- // Start cdk watch with detached process group for clean termination
23
+ // Start cdk watch
24
24
  const watchProcess = child_process.spawn('cdk', [
25
25
  'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
26
26
  ], {
27
27
  cwd: fixture.integTestDir,
28
- shell: true,
29
- detached: true,
28
+ stdio: 'pipe',
30
29
  env: { ...process.env, ...fixture.cdkShellEnv() },
31
30
  });
32
31
  try {
@@ -63,10 +62,8 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
63
62
  fixture.log('✓ Watch still detects changes to included files');
64
63
  }
65
64
  finally {
66
- // Kill the entire process group (negative PID)
67
- if (watchProcess.pid) {
68
- process.kill(-watchProcess.pid, 'SIGTERM');
69
- }
65
+ (0, watch_helpers_1.safeKillProcess)(watchProcess);
70
66
  }
67
+ expect.assertions(5);
71
68
  }));
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy1uZWdhdGl2ZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLW5lZ2F0aXZlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFnRDtBQUNoRCxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENB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QUFFLCtCQUErQixDQUFDLENBQUM7UUFFL0QsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7WUFBUyxDQUFDO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2FpdEZvck91dHB1dCB9IGZyb20gJy4vd2F0Y2gtaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSwgc2xlZXAgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMyAqIDYwICogMTAwMCk7IC8vIDMgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuaW50ZWdUZXN0KFxuICAnY2RrIHdhdGNoIGRvZXMgTk9UIGRldGVjdCBmaWxlIGNoYW5nZXMgZm9yIGV4Y2x1ZGVkIHBhdHRlcm5zJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gQ3JlYXRlIGEgdGVzdCBmaWxlIHRoYXQgd2lsbCBiZSB3YXRjaGVkIChmb3IgaW5pdGlhbCBkZXBsb3kpXG4gICAgY29uc3Qgd2F0Y2hlZEZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICd3YXRjaGVkLWZpbGUudHMnKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHdhdGNoZWRGaWxlLCAnZXhwb3J0IGNvbnN0IGluaXRpYWwgPSB0cnVlOycpO1xuXG4gICAgLy8gVXBkYXRlIGNkay5qc29uIHRvIGluY2x1ZGUgd2F0Y2ggY29uZmlndXJhdGlvbiB3aXRoIHNwZWNpZmljIGV4Y2x1ZGVcbiAgICBjb25zdCBjZGtKc29uUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyk7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNka0pzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY2RrSnNvbi53YXRjaCA9IHtcbiAgICAgIGluY2x1ZGU6IFsnKiovKi50cyddLFxuICAgICAgZXhjbHVkZTogWycqKi8qLmV4Y2x1ZGVkLnRzJ10sXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNka0pzb25QYXRoLCBKU09OLnN0cmluZ2lmeShjZGtKc29uLCBudWxsLCAyKSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNsaS5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICAvLyBTdGFydCBjZGsgd2F0Y2ggd2l0aCBkZXRhY2hlZCBwcm9jZXNzIGdyb3VwIGZvciBjbGVhbiB0ZXJtaW5hdGlvblxuICAgIGNvbnN0IHdhdGNoUHJvY2VzcyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oJ2NkaycsIFtcbiAgICAgICd3YXRjaCcsICctLWhvdHN3YXAnLCAnLXYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLFxuICAgIF0sIHtcbiAgICAgIGN3ZDogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5maXh0dXJlLmNka1NoZWxsRW52KCkgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICB3YXRjaFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgXCJUcmlnZ2VyaW5nIGluaXRpYWwgJ2NkayBkZXBsb3knXCIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGFydCBkZXRlY3RlZCcpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ2RlcGxveW1lbnQgdGltZScpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBJbml0aWFsIGRlcGxveW1lbnQgY29tcGxldGVkJyk7XG5cbiAgICAgIC8vIENvdW50IGRlcGxveW1lbnRzIGJlZm9yZSBjcmVhdGluZyBleGNsdWRlZCBmaWxlXG4gICAgICBjb25zdCBkZXBsb3ltZW50c0JlZm9yZSA9IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAvLyBDcmVhdGUgYW4gZXhjbHVkZWQgZmlsZSAtIHRoaXMgc2hvdWxkIE5PVCB0cmlnZ2VyIGEgd2F0Y2ggZXZlbnRcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3Nob3VsZC1iZS1pZ25vcmVkLmV4Y2x1ZGVkLnRzJyk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGV4Y2x1ZGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBleGNsdWRlZCA9IHRydWU7Jyk7XG4gICAgICBmaXh0dXJlLmxvZygnQ3JlYXRlZCBleGNsdWRlZCBmaWxlOiBzaG91bGQtYmUtaWdub3JlZC5leGNsdWRlZC50cycpO1xuXG4gICAgICAvLyBXYWl0IGEgcmVhc29uYWJsZSB0aW1lIGZvciBhbnkgcG90ZW50aWFsICh1bndhbnRlZCkgZGV0ZWN0aW9uXG4gICAgICBhd2FpdCBzbGVlcCg1MDAwKTtcblxuICAgICAgLy8gVmVyaWZ5IG5vIFwiRGV0ZWN0ZWQgY2hhbmdlXCIgbWVzc2FnZSBmb3IgdGhlIGV4Y2x1ZGVkIGZpbGVcbiAgICAgIGNvbnN0IGRldGVjdGVkRXhjbHVkZWQgPSBvdXRwdXQuaW5jbHVkZXMoJ0RldGVjdGVkIGNoYW5nZSB0bycpICYmIG91dHB1dC5pbmNsdWRlcygnZXhjbHVkZWQnKTtcbiAgICAgIGV4cGVjdChkZXRlY3RlZEV4Y2x1ZGVkKS50b0JlKGZhbHNlKTtcblxuICAgICAgLy8gVmVyaWZ5IGRlcGxveW1lbnQgY291bnQgaGFzbid0IGluY3JlYXNlZFxuICAgICAgY29uc3QgZGVwbG95bWVudHNBZnRlciA9IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgZXhwZWN0KGRlcGxveW1lbnRzQWZ0ZXIpLnRvQmUoZGVwbG95bWVudHNCZWZvcmUpO1xuXG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIGNvcnJlY3RseSBpZ25vcmVkIGV4Y2x1ZGVkIGZpbGUnKTtcblxuICAgICAgLy8gTm93IG1vZGlmeSBhIHdhdGNoZWQgZmlsZSB0byBjb25maXJtIHdhdGNoIGlzIHN0aWxsIHdvcmtpbmdcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMod2F0Y2hlZEZpbGUsICdleHBvcnQgY29uc3QgbW9kaWZpZWQgPSB0cnVlOycpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGlsbCBkZXRlY3RzIGNoYW5nZXMgdG8gaW5jbHVkZWQgZmlsZXMnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gS2lsbCB0aGUgZW50aXJlIHByb2Nlc3MgZ3JvdXAgKG5lZ2F0aXZlIFBJRClcbiAgICAgIGlmICh3YXRjaFByb2Nlc3MucGlkKSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbCgtd2F0Y2hQcm9jZXNzLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy1uZWdhdGl2ZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLW5lZ2F0aXZlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFpRTtBQUNqRSxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENB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O1FBRS9ELE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNqRSxDQUFDO1lBQVMsQ0FBQztRQUNULElBQUEsK0JBQWUsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3YWl0Rm9yT3V0cHV0LCBzYWZlS2lsbFByb2Nlc3MgfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUsIHNsZWVwIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApOyAvLyA1IG1pbnV0ZXMgZm9yIHdhdGNoIHRlc3RzXG5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkb2VzIE5PVCBkZXRlY3QgZmlsZSBjaGFuZ2VzIGZvciBleGNsdWRlZCBwYXR0ZXJucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHRlc3QgZmlsZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZCAoZm9yIGluaXRpYWwgZGVwbG95KVxuICAgIGNvbnN0IHdhdGNoZWRGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnd2F0Y2hlZC1maWxlLnRzJyk7XG4gICAgZnMud3JpdGVGaWxlU3luYyh3YXRjaGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBpbml0aWFsID0gdHJ1ZTsnKTtcblxuICAgIC8vIFVwZGF0ZSBjZGsuanNvbiB0byBpbmNsdWRlIHdhdGNoIGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBleGNsdWRlXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJyoqLyoudHMnXSxcbiAgICAgIGV4Y2x1ZGU6IFsnKiovKi5leGNsdWRlZC50cyddLFxuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYyhjZGtKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jbGkubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgLy8gU3RhcnQgY2RrIHdhdGNoXG4gICAgY29uc3Qgd2F0Y2hQcm9jZXNzID0gY2hpbGRfcHJvY2Vzcy5zcGF3bignY2RrJywgW1xuICAgICAgJ3dhdGNoJywgJy0taG90c3dhcCcsICctdicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksXG4gICAgXSwge1xuICAgICAgY3dkOiBmaXh0dXJlLmludGVnVGVzdERpcixcbiAgICAgIHN0ZGlvOiAncGlwZScsXG4gICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLmZpeHR1cmUuY2RrU2hlbGxFbnYoKSB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCBcIlRyaWdnZXJpbmcgaW5pdGlhbCAnY2RrIGRlcGxveSdcIik7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIHN0YXJ0IGRldGVjdGVkJyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnZGVwbG95bWVudCB0aW1lJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIEluaXRpYWwgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcblxuICAgICAgLy8gQ291bnQgZGVwbG95bWVudHMgYmVmb3JlIGNyZWF0aW5nIGV4Y2x1ZGVkIGZpbGVcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRzQmVmb3JlID0gKG91dHB1dC5tYXRjaCgvZGVwbG95bWVudCB0aW1lL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgIC8vIENyZWF0ZSBhbiBleGNsdWRlZCBmaWxlIC0gdGhpcyBzaG91bGQgTk9UIHRyaWdnZXIgYSB3YXRjaCBldmVudFxuICAgICAgY29uc3QgZXhjbHVkZWRGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnc2hvdWxkLWJlLWlnbm9yZWQuZXhjbHVkZWQudHMnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZXhjbHVkZWRGaWxlLCAnZXhwb3J0IGNvbnN0IGV4Y2x1ZGVkID0gdHJ1ZTsnKTtcbiAgICAgIGZpeHR1cmUubG9nKCdDcmVhdGVkIGV4Y2x1ZGVkIGZpbGU6IHNob3VsZC1iZS1pZ25vcmVkLmV4Y2x1ZGVkLnRzJyk7XG5cbiAgICAgIC8vIFdhaXQgYSByZWFzb25hYmxlIHRpbWUgZm9yIGFueSBwb3RlbnRpYWwgKHVud2FudGVkKSBkZXRlY3Rpb25cbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuXG4gICAgICAvLyBWZXJpZnkgbm8gXCJEZXRlY3RlZCBjaGFuZ2VcIiBtZXNzYWdlIGZvciB0aGUgZXhjbHVkZWQgZmlsZVxuICAgICAgY29uc3QgZGV0ZWN0ZWRFeGNsdWRlZCA9IG91dHB1dC5pbmNsdWRlcygnRGV0ZWN0ZWQgY2hhbmdlIHRvJykgJiYgb3V0cHV0LmluY2x1ZGVzKCdleGNsdWRlZCcpO1xuICAgICAgZXhwZWN0KGRldGVjdGVkRXhjbHVkZWQpLnRvQmUoZmFsc2UpO1xuXG4gICAgICAvLyBWZXJpZnkgZGVwbG95bWVudCBjb3VudCBoYXNuJ3QgaW5jcmVhc2VkXG4gICAgICBjb25zdCBkZXBsb3ltZW50c0FmdGVyID0gKG91dHB1dC5tYXRjaCgvZGVwbG95bWVudCB0aW1lL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBleHBlY3QoZGVwbG95bWVudHNBZnRlcikudG9CZShkZXBsb3ltZW50c0JlZm9yZSk7XG5cbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggY29ycmVjdGx5IGlnbm9yZWQgZXhjbHVkZWQgZmlsZScpO1xuXG4gICAgICAvLyBOb3cgbW9kaWZ5IGEgd2F0Y2hlZCBmaWxlIHRvIGNvbmZpcm0gd2F0Y2ggaXMgc3RpbGwgd29ya2luZ1xuICAgICAgZnMud3JpdGVGaWxlU3luYyh3YXRjaGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBtb2RpZmllZCA9IHRydWU7Jyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnRGV0ZWN0ZWQgY2hhbmdlIHRvJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIHN0aWxsIGRldGVjdHMgY2hhbmdlcyB0byBpbmNsdWRlZCBmaWxlcycpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzYWZlS2lsbFByb2Nlc3Mod2F0Y2hQcm9jZXNzKTtcbiAgICB9XG5cbiAgICBleHBlY3QuYXNzZXJ0aW9ucyg1KTtcbiAgfSksXG4pO1xuIl19
@@ -5,7 +5,7 @@ const fs = require("fs");
5
5
  const path = require("path");
6
6
  const watch_helpers_1 = require("./watch-helpers");
7
7
  const lib_1 = require("../../../lib");
8
- jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
8
+ jest.setTimeout(5 * 60 * 1000); // 5 minutes for watch tests
9
9
  (0, lib_1.integTest)('cdk watch detects file changes with glob patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
10
10
  // Create a test file that will be watched
11
11
  const testFile = path.join(fixture.integTestDir, 'watch-test-file.ts');
@@ -19,13 +19,12 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
19
19
  fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
20
20
  await fixture.cli.makeCliAvailable();
21
21
  let output = '';
22
- // Start cdk watch with detached process group for clean termination
22
+ // Start cdk watch
23
23
  const watchProcess = child_process.spawn('cdk', [
24
24
  'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
25
25
  ], {
26
26
  cwd: fixture.integTestDir,
27
- shell: true,
28
- detached: true,
27
+ stdio: 'pipe',
29
28
  env: { ...process.env, ...fixture.cdkShellEnv() },
30
29
  });
31
30
  try {
@@ -42,7 +41,7 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
42
41
  await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
43
42
  fixture.log('✓ Initial deployment completed');
44
43
  // Update the test file timestamp to trigger a watch event
45
- child_process.spawn('touch', [testFile]);
44
+ child_process.spawnSync('touch', [testFile]);
46
45
  await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
47
46
  fixture.log('✓ Watch detected file change');
48
47
  // Wait for the second deployment to complete (2 occurrences of 'deployment time')
@@ -50,10 +49,8 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
50
49
  fixture.log('✓ Second deployment completed');
51
50
  }
52
51
  finally {
53
- // Kill the entire process group (negative PID)
54
- if (watchProcess.pid) {
55
- process.kill(-watchProcess.pid, 'SIGTERM');
56
- }
52
+ (0, watch_helpers_1.safeKillProcess)(watchProcess);
57
53
  }
54
+ expect.assertions(4);
58
55
  }));
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFrRTtBQUNsRSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLG1EQUFtRCxFQUNuRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywwQ0FBMEM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxpREFBaUQ7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3JCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0tBQzVELEVBQUU7UUFDRCxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDekIsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRLEVBQUUsSUFBSTtRQUNkLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRTtLQUNsRCxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUEsNkJBQWEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFdEMsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlDLDBEQUEwRDtRQUMxRCxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFekMsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRTVDLGtGQUFrRjtRQUNsRixNQUFNLElBQUEsZ0NBQWdCLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMvQyxDQUFDO1lBQVMsQ0FBQztRQUNULCtDQUErQztRQUMvQyxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHdhaXRGb3JPdXRwdXQsIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMyAqIDYwICogMTAwMCk7IC8vIDMgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuaW50ZWdUZXN0KFxuICAnY2RrIHdhdGNoIGRldGVjdHMgZmlsZSBjaGFuZ2VzIHdpdGggZ2xvYiBwYXR0ZXJucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHRlc3QgZmlsZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZFxuICAgIGNvbnN0IHRlc3RGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnd2F0Y2gtdGVzdC1maWxlLnRzJyk7XG4gICAgZnMud3JpdGVGaWxlU3luYyh0ZXN0RmlsZSwgJ2V4cG9ydCBjb25zdCBpbml0aWFsID0gdHJ1ZTsnKTtcblxuICAgIC8vIFVwZGF0ZSBjZGsuanNvbiB0byBpbmNsdWRlIHdhdGNoIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBjZGtKc29uUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyk7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNka0pzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY2RrSnNvbi53YXRjaCA9IHtcbiAgICAgIGluY2x1ZGU6IFsnKiovKi50cyddLFxuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYyhjZGtKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jbGkubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgLy8gU3RhcnQgY2RrIHdhdGNoIHdpdGggZGV0YWNoZWQgcHJvY2VzcyBncm91cCBmb3IgY2xlYW4gdGVybWluYXRpb25cbiAgICBjb25zdCB3YXRjaFByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzLnNwYXduKCdjZGsnLCBbXG4gICAgICAnd2F0Y2gnLCAnLS1ob3Rzd2FwJywgJy12JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSxcbiAgICBdLCB7XG4gICAgICBjd2Q6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZml4dHVyZS5jZGtTaGVsbEVudigpIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgICB3YXRjaFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsIFwiVHJpZ2dlcmluZyBpbml0aWFsICdjZGsgZGVwbG95J1wiKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggc3RhcnQgZGV0ZWN0ZWQnKTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsICdkZXBsb3ltZW50IHRpbWUnKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgSW5pdGlhbCBkZXBsb3ltZW50IGNvbXBsZXRlZCcpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHRlc3QgZmlsZSB0aW1lc3RhbXAgdG8gdHJpZ2dlciBhIHdhdGNoIGV2ZW50XG4gICAgICBjaGlsZF9wcm9jZXNzLnNwYXduKCd0b3VjaCcsIFt0ZXN0RmlsZV0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBkZXRlY3RlZCBmaWxlIGNoYW5nZScpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gS2lsbCB0aGUgZW50aXJlIHByb2Nlc3MgZ3JvdXAgKG5lZ2F0aXZlIFBJRClcbiAgICAgIGlmICh3YXRjaFByb2Nlc3MucGlkKSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbCgtd2F0Y2hQcm9jZXNzLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFtRjtBQUNuRixzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLG1EQUFtRCxFQUNuRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywwQ0FBMEM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxpREFBaUQ7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3JCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsa0JBQWtCO0lBQ2xCLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0tBQzVELEVBQUU7UUFDRCxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDekIsS0FBSyxFQUFFLE1BQU07UUFDYixHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7S0FDbEQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUU1QyxrRkFBa0Y7UUFDbEYsTUFBTSxJQUFBLGdDQUFnQixFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0MsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFBLCtCQUFlLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2FpdEZvck91dHB1dCwgd2FpdEZvckNvbmRpdGlvbiwgc2FmZUtpbGxQcm9jZXNzIH0gZnJvbSAnLi93YXRjaC1oZWxwZXJzJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApOyAvLyA1IG1pbnV0ZXMgZm9yIHdhdGNoIHRlc3RzXG5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkZXRlY3RzIGZpbGUgY2hhbmdlcyB3aXRoIGdsb2IgcGF0dGVybnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBDcmVhdGUgYSB0ZXN0IGZpbGUgdGhhdCB3aWxsIGJlIHdhdGNoZWRcbiAgICBjb25zdCB0ZXN0RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3dhdGNoLXRlc3QtZmlsZS50cycpO1xuICAgIGZzLndyaXRlRmlsZVN5bmModGVzdEZpbGUsICdleHBvcnQgY29uc3QgaW5pdGlhbCA9IHRydWU7Jyk7XG5cbiAgICAvLyBVcGRhdGUgY2RrLmpzb24gdG8gaW5jbHVkZSB3YXRjaCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJyoqLyoudHMnXSxcbiAgICB9O1xuICAgIGZzLndyaXRlRmlsZVN5bmMoY2RrSnNvblBhdGgsIEpTT04uc3RyaW5naWZ5KGNka0pzb24sIG51bGwsIDIpKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2xpLm1ha2VDbGlBdmFpbGFibGUoKTtcblxuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIC8vIFN0YXJ0IGNkayB3YXRjaFxuICAgIGNvbnN0IHdhdGNoUHJvY2VzcyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oJ2NkaycsIFtcbiAgICAgICd3YXRjaCcsICctLWhvdHN3YXAnLCAnLXYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLFxuICAgIF0sIHtcbiAgICAgIGN3ZDogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgICBzdGRpbzogJ3BpcGUnLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5maXh0dXJlLmNka1NoZWxsRW52KCkgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICB3YXRjaFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgXCJUcmlnZ2VyaW5nIGluaXRpYWwgJ2NkayBkZXBsb3knXCIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGFydCBkZXRlY3RlZCcpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ2RlcGxveW1lbnQgdGltZScpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBJbml0aWFsIGRlcGxveW1lbnQgY29tcGxldGVkJyk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdGVzdCBmaWxlIHRpbWVzdGFtcCB0byB0cmlnZ2VyIGEgd2F0Y2ggZXZlbnRcbiAgICAgIGNoaWxkX3Byb2Nlc3Muc3Bhd25TeW5jKCd0b3VjaCcsIFt0ZXN0RmlsZV0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBkZXRlY3RlZCBmaWxlIGNoYW5nZScpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FmZUtpbGxQcm9jZXNzKHdhdGNoUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgZXhwZWN0LmFzc2VydGlvbnMoNCk7XG4gIH0pLFxuKTtcbiJdfQ==
@@ -1,6 +1,4 @@
1
- /**
2
- * Shared helper functions for watch integration tests.
3
- */
1
+ import type { ChildProcess } from 'node:child_process';
4
2
  /**
5
3
  * Wait for a specific string to appear in the output.
6
4
  */
@@ -9,3 +7,7 @@ export declare function waitForOutput(getOutput: () => string, searchString: str
9
7
  * Wait for a condition to become true.
10
8
  */
11
9
  export declare function waitForCondition(condition: () => boolean): Promise<void>;
10
+ /**
11
+ * Kill a spawned process.
12
+ */
13
+ export declare function safeKillProcess(proc: ChildProcess): void;
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
- /**
3
- * Shared helper functions for watch integration tests.
4
- */
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.waitForOutput = waitForOutput;
7
4
  exports.waitForCondition = waitForCondition;
5
+ exports.safeKillProcess = safeKillProcess;
6
+ const DEFAULT_POLL_TIMEOUT = 120_000; // 2 minutes
8
7
  /**
9
- * Poll a condition until we see it.
8
+ * Poll a condition until we see it, with a timeout.
10
9
  */
11
- async function poll(condition) {
12
- return new Promise((resolve) => {
10
+ async function poll(condition, timeoutMs = DEFAULT_POLL_TIMEOUT) {
11
+ return new Promise((resolve, reject) => {
12
+ const deadline = Date.now() + timeoutMs;
13
13
  const check = () => {
14
14
  if (condition())
15
15
  return resolve();
16
+ if (Date.now() >= deadline)
17
+ return reject(new Error(`poll timed out after ${timeoutMs}ms`));
16
18
  setTimeout(check, 1000);
17
19
  };
18
20
  check();
@@ -22,12 +24,25 @@ async function poll(condition) {
22
24
  * Wait for a specific string to appear in the output.
23
25
  */
24
26
  async function waitForOutput(getOutput, searchString) {
25
- return poll(() => getOutput().includes(searchString));
27
+ await poll(() => getOutput().includes(searchString));
28
+ expect(getOutput()).toContain(searchString);
26
29
  }
27
30
  /**
28
31
  * Wait for a condition to become true.
29
32
  */
30
33
  async function waitForCondition(condition) {
31
- return poll(condition);
34
+ await poll(condition);
35
+ expect(condition()).toBe(true);
36
+ }
37
+ /**
38
+ * Kill a spawned process.
39
+ */
40
+ function safeKillProcess(proc) {
41
+ try {
42
+ proc.kill('SIGKILL');
43
+ }
44
+ catch {
45
+ // process may have already exited
46
+ }
32
47
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndhdGNoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQWtCSCxzQ0FFQztBQUtELDRDQUVDO0FBekJEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLElBQUksQ0FBQyxTQUF3QjtJQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksU0FBUyxFQUFFO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FBQyxTQUF1QixFQUFFLFlBQW9CO0lBQy9FLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxTQUF3QjtJQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd2F0Y2ggaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuLyoqXG4gKiBQb2xsIGEgY29uZGl0aW9uIHVudGlsIHdlIHNlZSBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9sbChjb25kaXRpb246ICgpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2hlY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uKCkpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBzZXRUaW1lb3V0KGNoZWNrLCAxMDAwKTtcbiAgICB9O1xuICAgIGNoZWNrKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGEgc3BlY2lmaWMgc3RyaW5nIHRvIGFwcGVhciBpbiB0aGUgb3V0cHV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvck91dHB1dChnZXRPdXRwdXQ6ICgpID0+IHN0cmluZywgc2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBvbGwoKCkgPT4gZ2V0T3V0cHV0KCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSk7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcG9sbChjb25kaXRpb24pO1xufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndhdGNoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsc0NBR0M7QUFLRCw0Q0FHQztBQUtELDBDQU1DO0FBMUNELE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsWUFBWTtBQUVsRDs7R0FFRztBQUNILEtBQUssVUFBVSxJQUFJLENBQUMsU0FBd0IsRUFBRSxTQUFTLEdBQUcsb0JBQW9CO0lBQzVFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxTQUFTLEVBQUU7Z0JBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHdCQUF3QixTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUYsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FBQyxTQUF1QixFQUFFLFlBQW9CO0lBQy9FLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsU0FBd0I7SUFDN0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUFrQjtJQUNoRCxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxrQ0FBa0M7SUFDcEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmNvbnN0IERFRkFVTFRfUE9MTF9USU1FT1VUID0gMTIwXzAwMDsgLy8gMiBtaW51dGVzXG5cbi8qKlxuICogUG9sbCBhIGNvbmRpdGlvbiB1bnRpbCB3ZSBzZWUgaXQsIHdpdGggYSB0aW1lb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBwb2xsKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbiwgdGltZW91dE1zID0gREVGQVVMVF9QT0xMX1RJTUVPVVQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7XG4gICAgY29uc3QgY2hlY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uKCkpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYHBvbGwgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpO1xuICAgICAgc2V0VGltZW91dChjaGVjaywgMTAwMCk7XG4gICAgfTtcbiAgICBjaGVjaygpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhIHNwZWNpZmljIHN0cmluZyB0byBhcHBlYXIgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JPdXRwdXQoZ2V0T3V0cHV0OiAoKSA9PiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHBvbGwoKCkgPT4gZ2V0T3V0cHV0KCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSk7XG4gIGV4cGVjdChnZXRPdXRwdXQoKSkudG9Db250YWluKHNlYXJjaFN0cmluZyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwb2xsKGNvbmRpdGlvbik7XG4gIGV4cGVjdChjb25kaXRpb24oKSkudG9CZSh0cnVlKTtcbn1cblxuLyoqXG4gKiBLaWxsIGEgc3Bhd25lZCBwcm9jZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZUtpbGxQcm9jZXNzKHByb2M6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICB0cnkge1xuICAgIHByb2Mua2lsbCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBwcm9jZXNzIG1heSBoYXZlIGFscmVhZHkgZXhpdGVkXG4gIH1cbn1cbiJdfQ==