@aws-cdk-testing/cli-integ 3.23.0 → 3.24.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/npm-shrinkwrap.json +1549 -3007
- package/package.json +23 -23
- package/resources/cdk-apps/app/app.js +23 -0
- package/resources/cdk-apps/app/docker-concurrent/image1/Dockerfile +2 -0
- package/resources/cdk-apps/app/docker-concurrent/image2/Dockerfile +2 -0
- package/resources/cdk-apps/app/docker-concurrent/image3/Dockerfile +2 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-multiple-docker-assets.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-multiple-docker-assets.integtest.js +10 -0
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns-negative.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns-negative.integtest.js +72 -0
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.js +59 -0
- package/tests/cli-integ-tests/watch/watch-helpers.d.ts +11 -0
- package/tests/cli-integ-tests/watch/watch-helpers.js +33 -0
- package/tests/toolkit-lib-integ-tests/toolkit-deploy-stack-with-multiple-docker-assets.integtest.d.ts +1 -0
- package/tests/toolkit-lib-integ-tests/toolkit-deploy-stack-with-multiple-docker-assets.integtest.js +22 -0
- package/tests/toolkit-lib-integ-tests/toolkit-watch-glob-negative.integtest.d.ts +1 -0
- package/tests/toolkit-lib-integ-tests/toolkit-watch-glob-negative.integtest.js +52 -0
- package/tests/toolkit-lib-integ-tests/toolkit-watch-glob.integtest.d.ts +1 -0
- package/tests/toolkit-lib-integ-tests/toolkit-watch-glob.integtest.js +68 -0
package/package.json
CHANGED
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"organization": true
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@aws-cdk/toolkit-lib": "1.
|
|
42
|
+
"@aws-cdk/toolkit-lib": "1.17.0",
|
|
43
43
|
"@aws-cdk/yarn-cling": "0.0.0",
|
|
44
|
-
"@cdklabs/eslint-plugin": "^1.
|
|
44
|
+
"@cdklabs/eslint-plugin": "^1.5.5",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
46
46
|
"@types/fs-extra": "^9",
|
|
47
47
|
"@types/jest": "^29.5.14",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"eslint-config-prettier": "^9.1.2",
|
|
57
57
|
"eslint-import-resolver-typescript": "^3.10.1",
|
|
58
58
|
"eslint-plugin-import": "^2.32.0",
|
|
59
|
-
"eslint-plugin-jest": "^29.
|
|
60
|
-
"eslint-plugin-jsdoc": "^62.
|
|
61
|
-
"eslint-plugin-prettier": "^5.5.
|
|
59
|
+
"eslint-plugin-jest": "^29.15.0",
|
|
60
|
+
"eslint-plugin-jsdoc": "^62.7.1",
|
|
61
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
62
62
|
"jest": "^29.7.0",
|
|
63
63
|
"jest-junit": "^16",
|
|
64
64
|
"license-checker": "^25.0.1",
|
|
@@ -67,23 +67,23 @@
|
|
|
67
67
|
"typescript": "5.9"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aws-sdk/client-cloudformation": "^3.
|
|
71
|
-
"@aws-sdk/client-codeartifact": "^3.
|
|
72
|
-
"@aws-sdk/client-ecr": "^3.
|
|
73
|
-
"@aws-sdk/client-ecr-public": "^3.
|
|
74
|
-
"@aws-sdk/client-ecs": "^3.
|
|
75
|
-
"@aws-sdk/client-iam": "^3.
|
|
76
|
-
"@aws-sdk/client-lambda": "^3.
|
|
77
|
-
"@aws-sdk/client-s3": "^3.
|
|
78
|
-
"@aws-sdk/client-secrets-manager": "^3.
|
|
79
|
-
"@aws-sdk/client-sns": "^3.
|
|
80
|
-
"@aws-sdk/client-sso": "^3.
|
|
81
|
-
"@aws-sdk/client-sts": "^3.
|
|
82
|
-
"@aws-sdk/credential-providers": "^3.
|
|
83
|
-
"@cdklabs/cdk-atmosphere-client": "^0.0.
|
|
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",
|
|
84
84
|
"@octokit/rest": "^20",
|
|
85
|
-
"@smithy/types": "^4.
|
|
86
|
-
"@smithy/util-retry": "^4.2.
|
|
85
|
+
"@smithy/types": "^4.13.0",
|
|
86
|
+
"@smithy/util-retry": "^4.2.10",
|
|
87
87
|
"axios": "^1",
|
|
88
88
|
"chalk": "^4",
|
|
89
89
|
"fast-glob": "^3.3.3",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"jest-junit": "^15",
|
|
93
93
|
"make-runnable": "^1",
|
|
94
94
|
"mockttp": "^3",
|
|
95
|
-
"node-pty": "^1.
|
|
95
|
+
"node-pty": "^1.1.0",
|
|
96
96
|
"npm": "^11",
|
|
97
97
|
"p-queue": "^6",
|
|
98
98
|
"proxy-agent": "^6.5.0",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"publishConfig": {
|
|
117
117
|
"access": "public"
|
|
118
118
|
},
|
|
119
|
-
"version": "3.
|
|
119
|
+
"version": "3.24.0",
|
|
120
120
|
"types": "lib/index.d.ts",
|
|
121
121
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
122
122
|
}
|
|
@@ -757,6 +757,28 @@ class DockerStackWithCustomFile extends cdk.Stack {
|
|
|
757
757
|
}
|
|
758
758
|
}
|
|
759
759
|
|
|
760
|
+
class MultipleDockerAssetsStack extends cdk.Stack {
|
|
761
|
+
constructor(parent, id, props) {
|
|
762
|
+
super(parent, id, props);
|
|
763
|
+
|
|
764
|
+
new docker.DockerImageAsset(this, 'image1', {
|
|
765
|
+
directory: path.join(__dirname, 'docker-concurrent/image1')
|
|
766
|
+
});
|
|
767
|
+
new docker.DockerImageAsset(this, 'image2', {
|
|
768
|
+
directory: path.join(__dirname, 'docker-concurrent/image2')
|
|
769
|
+
});
|
|
770
|
+
new docker.DockerImageAsset(this, 'image3', {
|
|
771
|
+
directory: path.join(__dirname, 'docker-concurrent/image3')
|
|
772
|
+
});
|
|
773
|
+
|
|
774
|
+
// Add at least a single resource (WaitConditionHandle), otherwise this stack will never
|
|
775
|
+
// be deployed (and its assets never built)
|
|
776
|
+
new cdk.CfnResource(this, 'Handle', {
|
|
777
|
+
type: 'AWS::CloudFormation::WaitConditionHandle'
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
|
|
760
782
|
/**
|
|
761
783
|
* A stack that will never succeed deploying (done in a way that CDK cannot detect but CFN will complain about)
|
|
762
784
|
*/
|
|
@@ -972,6 +994,7 @@ switch (stackSet) {
|
|
|
972
994
|
new DockerStack(app, `${stackPrefix}-docker`);
|
|
973
995
|
new DockerInUseStack(app, `${stackPrefix}-docker-in-use`);
|
|
974
996
|
new DockerStackWithCustomFile(app, `${stackPrefix}-docker-with-custom-file`);
|
|
997
|
+
new MultipleDockerAssetsStack(app, `${stackPrefix}-multiple-docker-assets`);
|
|
975
998
|
|
|
976
999
|
new NotificationArnsStack(app, `${stackPrefix}-notification-arns`);
|
|
977
1000
|
|
package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-multiple-docker-assets.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-multiple-docker-assets.integtest.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
5
|
+
(0, lib_1.integTest)('deploy stack with multiple docker assets', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
6
|
+
await fixture.cdkDeploy('multiple-docker-assets', {
|
|
7
|
+
options: ['--asset-parallelism', '--asset-build-concurrency', '3'],
|
|
8
|
+
});
|
|
9
|
+
}));
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1zdGFjay13aXRoLW11bHRpcGxlLWRvY2tlci1hc3NldHMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRlcGxveS1zdGFjay13aXRoLW11bHRpcGxlLWRvY2tlci1hc3NldHMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCwwQ0FBMEMsRUFDMUMsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO1FBQ2hELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFLEdBQUcsQ0FBQztLQUNuRSxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgc3RhY2sgd2l0aCBtdWx0aXBsZSBkb2NrZXIgYXNzZXRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ211bHRpcGxlLWRvY2tlci1hc3NldHMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tYXNzZXQtcGFyYWxsZWxpc20nLCAnLS1hc3NldC1idWlsZC1jb25jdXJyZW5jeScsICczJ10sXG4gICAgfSk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const child_process = require("child_process");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const watch_helpers_1 = require("./watch-helpers");
|
|
7
|
+
const lib_1 = require("../../../lib");
|
|
8
|
+
jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
9
|
+
(0, lib_1.integTest)('cdk watch does NOT detect file changes for excluded patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
10
|
+
// Create a test file that will be watched (for initial deploy)
|
|
11
|
+
const watchedFile = path.join(fixture.integTestDir, 'watched-file.ts');
|
|
12
|
+
fs.writeFileSync(watchedFile, 'export const initial = true;');
|
|
13
|
+
// Update cdk.json to include watch configuration with specific exclude
|
|
14
|
+
const cdkJsonPath = path.join(fixture.integTestDir, 'cdk.json');
|
|
15
|
+
const cdkJson = JSON.parse(fs.readFileSync(cdkJsonPath, 'utf-8'));
|
|
16
|
+
cdkJson.watch = {
|
|
17
|
+
include: ['**/*.ts'],
|
|
18
|
+
exclude: ['**/*.excluded.ts'],
|
|
19
|
+
};
|
|
20
|
+
fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
|
|
21
|
+
await fixture.cli.makeCliAvailable();
|
|
22
|
+
let output = '';
|
|
23
|
+
// Start cdk watch with detached process group for clean termination
|
|
24
|
+
const watchProcess = child_process.spawn('cdk', [
|
|
25
|
+
'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
|
|
26
|
+
], {
|
|
27
|
+
cwd: fixture.integTestDir,
|
|
28
|
+
shell: true,
|
|
29
|
+
detached: true,
|
|
30
|
+
env: { ...process.env, ...fixture.cdkShellEnv() },
|
|
31
|
+
});
|
|
32
|
+
try {
|
|
33
|
+
watchProcess.stdout?.on('data', (data) => {
|
|
34
|
+
output += data.toString();
|
|
35
|
+
fixture.log(data.toString());
|
|
36
|
+
});
|
|
37
|
+
watchProcess.stderr?.on('data', (data) => {
|
|
38
|
+
output += data.toString();
|
|
39
|
+
fixture.log(data.toString());
|
|
40
|
+
});
|
|
41
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, "Triggering initial 'cdk deploy'");
|
|
42
|
+
fixture.log('✓ Watch start detected');
|
|
43
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
|
|
44
|
+
fixture.log('✓ Initial deployment completed');
|
|
45
|
+
// Count deployments before creating excluded file
|
|
46
|
+
const deploymentsBefore = (output.match(/deployment time/g) || []).length;
|
|
47
|
+
// Create an excluded file - this should NOT trigger a watch event
|
|
48
|
+
const excludedFile = path.join(fixture.integTestDir, 'should-be-ignored.excluded.ts');
|
|
49
|
+
fs.writeFileSync(excludedFile, 'export const excluded = true;');
|
|
50
|
+
fixture.log('Created excluded file: should-be-ignored.excluded.ts');
|
|
51
|
+
// Wait a reasonable time for any potential (unwanted) detection
|
|
52
|
+
await (0, lib_1.sleep)(5000);
|
|
53
|
+
// Verify no "Detected change" message for the excluded file
|
|
54
|
+
const detectedExcluded = output.includes('Detected change to') && output.includes('excluded');
|
|
55
|
+
expect(detectedExcluded).toBe(false);
|
|
56
|
+
// Verify deployment count hasn't increased
|
|
57
|
+
const deploymentsAfter = (output.match(/deployment time/g) || []).length;
|
|
58
|
+
expect(deploymentsAfter).toBe(deploymentsBefore);
|
|
59
|
+
fixture.log('✓ Watch correctly ignored excluded file');
|
|
60
|
+
// Now modify a watched file to confirm watch is still working
|
|
61
|
+
fs.writeFileSync(watchedFile, 'export const modified = true;');
|
|
62
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
|
|
63
|
+
fixture.log('✓ Watch still detects changes to included files');
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
// Kill the entire process group (negative PID)
|
|
67
|
+
if (watchProcess.pid) {
|
|
68
|
+
process.kill(-watchProcess.pid, 'SIGTERM');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}));
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy1uZWdhdGl2ZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLW5lZ2F0aXZlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFnRDtBQUNoRCxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENB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QUFFLCtCQUErQixDQUFDLENBQUM7UUFFL0QsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7WUFBUyxDQUFDO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2FpdEZvck91dHB1dCB9IGZyb20gJy4vd2F0Y2gtaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSwgc2xlZXAgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMyAqIDYwICogMTAwMCk7IC8vIDMgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuaW50ZWdUZXN0KFxuICAnY2RrIHdhdGNoIGRvZXMgTk9UIGRldGVjdCBmaWxlIGNoYW5nZXMgZm9yIGV4Y2x1ZGVkIHBhdHRlcm5zJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gQ3JlYXRlIGEgdGVzdCBmaWxlIHRoYXQgd2lsbCBiZSB3YXRjaGVkIChmb3IgaW5pdGlhbCBkZXBsb3kpXG4gICAgY29uc3Qgd2F0Y2hlZEZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICd3YXRjaGVkLWZpbGUudHMnKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHdhdGNoZWRGaWxlLCAnZXhwb3J0IGNvbnN0IGluaXRpYWwgPSB0cnVlOycpO1xuXG4gICAgLy8gVXBkYXRlIGNkay5qc29uIHRvIGluY2x1ZGUgd2F0Y2ggY29uZmlndXJhdGlvbiB3aXRoIHNwZWNpZmljIGV4Y2x1ZGVcbiAgICBjb25zdCBjZGtKc29uUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyk7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNka0pzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY2RrSnNvbi53YXRjaCA9IHtcbiAgICAgIGluY2x1ZGU6IFsnKiovKi50cyddLFxuICAgICAgZXhjbHVkZTogWycqKi8qLmV4Y2x1ZGVkLnRzJ10sXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNka0pzb25QYXRoLCBKU09OLnN0cmluZ2lmeShjZGtKc29uLCBudWxsLCAyKSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNsaS5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICAvLyBTdGFydCBjZGsgd2F0Y2ggd2l0aCBkZXRhY2hlZCBwcm9jZXNzIGdyb3VwIGZvciBjbGVhbiB0ZXJtaW5hdGlvblxuICAgIGNvbnN0IHdhdGNoUHJvY2VzcyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oJ2NkaycsIFtcbiAgICAgICd3YXRjaCcsICctLWhvdHN3YXAnLCAnLXYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLFxuICAgIF0sIHtcbiAgICAgIGN3ZDogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5maXh0dXJlLmNka1NoZWxsRW52KCkgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICB3YXRjaFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgXCJUcmlnZ2VyaW5nIGluaXRpYWwgJ2NkayBkZXBsb3knXCIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGFydCBkZXRlY3RlZCcpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ2RlcGxveW1lbnQgdGltZScpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBJbml0aWFsIGRlcGxveW1lbnQgY29tcGxldGVkJyk7XG5cbiAgICAgIC8vIENvdW50IGRlcGxveW1lbnRzIGJlZm9yZSBjcmVhdGluZyBleGNsdWRlZCBmaWxlXG4gICAgICBjb25zdCBkZXBsb3ltZW50c0JlZm9yZSA9IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAvLyBDcmVhdGUgYW4gZXhjbHVkZWQgZmlsZSAtIHRoaXMgc2hvdWxkIE5PVCB0cmlnZ2VyIGEgd2F0Y2ggZXZlbnRcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3Nob3VsZC1iZS1pZ25vcmVkLmV4Y2x1ZGVkLnRzJyk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGV4Y2x1ZGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBleGNsdWRlZCA9IHRydWU7Jyk7XG4gICAgICBmaXh0dXJlLmxvZygnQ3JlYXRlZCBleGNsdWRlZCBmaWxlOiBzaG91bGQtYmUtaWdub3JlZC5leGNsdWRlZC50cycpO1xuXG4gICAgICAvLyBXYWl0IGEgcmVhc29uYWJsZSB0aW1lIGZvciBhbnkgcG90ZW50aWFsICh1bndhbnRlZCkgZGV0ZWN0aW9uXG4gICAgICBhd2FpdCBzbGVlcCg1MDAwKTtcblxuICAgICAgLy8gVmVyaWZ5IG5vIFwiRGV0ZWN0ZWQgY2hhbmdlXCIgbWVzc2FnZSBmb3IgdGhlIGV4Y2x1ZGVkIGZpbGVcbiAgICAgIGNvbnN0IGRldGVjdGVkRXhjbHVkZWQgPSBvdXRwdXQuaW5jbHVkZXMoJ0RldGVjdGVkIGNoYW5nZSB0bycpICYmIG91dHB1dC5pbmNsdWRlcygnZXhjbHVkZWQnKTtcbiAgICAgIGV4cGVjdChkZXRlY3RlZEV4Y2x1ZGVkKS50b0JlKGZhbHNlKTtcblxuICAgICAgLy8gVmVyaWZ5IGRlcGxveW1lbnQgY291bnQgaGFzbid0IGluY3JlYXNlZFxuICAgICAgY29uc3QgZGVwbG95bWVudHNBZnRlciA9IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgZXhwZWN0KGRlcGxveW1lbnRzQWZ0ZXIpLnRvQmUoZGVwbG95bWVudHNCZWZvcmUpO1xuXG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIGNvcnJlY3RseSBpZ25vcmVkIGV4Y2x1ZGVkIGZpbGUnKTtcblxuICAgICAgLy8gTm93IG1vZGlmeSBhIHdhdGNoZWQgZmlsZSB0byBjb25maXJtIHdhdGNoIGlzIHN0aWxsIHdvcmtpbmdcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMod2F0Y2hlZEZpbGUsICdleHBvcnQgY29uc3QgbW9kaWZpZWQgPSB0cnVlOycpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGlsbCBkZXRlY3RzIGNoYW5nZXMgdG8gaW5jbHVkZWQgZmlsZXMnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gS2lsbCB0aGUgZW50aXJlIHByb2Nlc3MgZ3JvdXAgKG5lZ2F0aXZlIFBJRClcbiAgICAgIGlmICh3YXRjaFByb2Nlc3MucGlkKSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbCgtd2F0Y2hQcm9jZXNzLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
|
package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const child_process = require("child_process");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const watch_helpers_1 = require("./watch-helpers");
|
|
7
|
+
const lib_1 = require("../../../lib");
|
|
8
|
+
jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
9
|
+
(0, lib_1.integTest)('cdk watch detects file changes with glob patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
10
|
+
// Create a test file that will be watched
|
|
11
|
+
const testFile = path.join(fixture.integTestDir, 'watch-test-file.ts');
|
|
12
|
+
fs.writeFileSync(testFile, 'export const initial = true;');
|
|
13
|
+
// Update cdk.json to include watch configuration
|
|
14
|
+
const cdkJsonPath = path.join(fixture.integTestDir, 'cdk.json');
|
|
15
|
+
const cdkJson = JSON.parse(fs.readFileSync(cdkJsonPath, 'utf-8'));
|
|
16
|
+
cdkJson.watch = {
|
|
17
|
+
include: ['**/*.ts'],
|
|
18
|
+
};
|
|
19
|
+
fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
|
|
20
|
+
await fixture.cli.makeCliAvailable();
|
|
21
|
+
let output = '';
|
|
22
|
+
// Start cdk watch with detached process group for clean termination
|
|
23
|
+
const watchProcess = child_process.spawn('cdk', [
|
|
24
|
+
'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
|
|
25
|
+
], {
|
|
26
|
+
cwd: fixture.integTestDir,
|
|
27
|
+
shell: true,
|
|
28
|
+
detached: true,
|
|
29
|
+
env: { ...process.env, ...fixture.cdkShellEnv() },
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
watchProcess.stdout?.on('data', (data) => {
|
|
33
|
+
output += data.toString();
|
|
34
|
+
fixture.log(data.toString());
|
|
35
|
+
});
|
|
36
|
+
watchProcess.stderr?.on('data', (data) => {
|
|
37
|
+
output += data.toString();
|
|
38
|
+
fixture.log(data.toString());
|
|
39
|
+
});
|
|
40
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, "Triggering initial 'cdk deploy'");
|
|
41
|
+
fixture.log('✓ Watch start detected');
|
|
42
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
|
|
43
|
+
fixture.log('✓ Initial deployment completed');
|
|
44
|
+
// Update the test file timestamp to trigger a watch event
|
|
45
|
+
child_process.spawn('touch', [testFile]);
|
|
46
|
+
await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
|
|
47
|
+
fixture.log('✓ Watch detected file change');
|
|
48
|
+
// Wait for the second deployment to complete (2 occurrences of 'deployment time')
|
|
49
|
+
await (0, watch_helpers_1.waitForCondition)(() => (output.match(/deployment time/g) || []).length >= 2);
|
|
50
|
+
fixture.log('✓ Second deployment completed');
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
// Kill the entire process group (negative PID)
|
|
54
|
+
if (watchProcess.pid) {
|
|
55
|
+
process.kill(-watchProcess.pid, 'SIGTERM');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFrRTtBQUNsRSxzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLG1EQUFtRCxFQUNuRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywwQ0FBMEM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxpREFBaUQ7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3JCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0tBQzVELEVBQUU7UUFDRCxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDekIsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRLEVBQUUsSUFBSTtRQUNkLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRTtLQUNsRCxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUEsNkJBQWEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFdEMsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlDLDBEQUEwRDtRQUMxRCxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFekMsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRTVDLGtGQUFrRjtRQUNsRixNQUFNLElBQUEsZ0NBQWdCLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMvQyxDQUFDO1lBQVMsQ0FBQztRQUNULCtDQUErQztRQUMvQyxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHdhaXRGb3JPdXRwdXQsIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMyAqIDYwICogMTAwMCk7IC8vIDMgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuaW50ZWdUZXN0KFxuICAnY2RrIHdhdGNoIGRldGVjdHMgZmlsZSBjaGFuZ2VzIHdpdGggZ2xvYiBwYXR0ZXJucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHRlc3QgZmlsZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZFxuICAgIGNvbnN0IHRlc3RGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnd2F0Y2gtdGVzdC1maWxlLnRzJyk7XG4gICAgZnMud3JpdGVGaWxlU3luYyh0ZXN0RmlsZSwgJ2V4cG9ydCBjb25zdCBpbml0aWFsID0gdHJ1ZTsnKTtcblxuICAgIC8vIFVwZGF0ZSBjZGsuanNvbiB0byBpbmNsdWRlIHdhdGNoIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBjZGtKc29uUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyk7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNka0pzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY2RrSnNvbi53YXRjaCA9IHtcbiAgICAgIGluY2x1ZGU6IFsnKiovKi50cyddLFxuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYyhjZGtKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jbGkubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgLy8gU3RhcnQgY2RrIHdhdGNoIHdpdGggZGV0YWNoZWQgcHJvY2VzcyBncm91cCBmb3IgY2xlYW4gdGVybWluYXRpb25cbiAgICBjb25zdCB3YXRjaFByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzLnNwYXduKCdjZGsnLCBbXG4gICAgICAnd2F0Y2gnLCAnLS1ob3Rzd2FwJywgJy12JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSxcbiAgICBdLCB7XG4gICAgICBjd2Q6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZml4dHVyZS5jZGtTaGVsbEVudigpIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgICB3YXRjaFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsIFwiVHJpZ2dlcmluZyBpbml0aWFsICdjZGsgZGVwbG95J1wiKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggc3RhcnQgZGV0ZWN0ZWQnKTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsICdkZXBsb3ltZW50IHRpbWUnKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgSW5pdGlhbCBkZXBsb3ltZW50IGNvbXBsZXRlZCcpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHRlc3QgZmlsZSB0aW1lc3RhbXAgdG8gdHJpZ2dlciBhIHdhdGNoIGV2ZW50XG4gICAgICBjaGlsZF9wcm9jZXNzLnNwYXduKCd0b3VjaCcsIFt0ZXN0RmlsZV0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBkZXRlY3RlZCBmaWxlIGNoYW5nZScpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gS2lsbCB0aGUgZW50aXJlIHByb2Nlc3MgZ3JvdXAgKG5lZ2F0aXZlIFBJRClcbiAgICAgIGlmICh3YXRjaFByb2Nlc3MucGlkKSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbCgtd2F0Y2hQcm9jZXNzLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper functions for watch integration tests.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Wait for a specific string to appear in the output.
|
|
6
|
+
*/
|
|
7
|
+
export declare function waitForOutput(getOutput: () => string, searchString: string): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Wait for a condition to become true.
|
|
10
|
+
*/
|
|
11
|
+
export declare function waitForCondition(condition: () => boolean): Promise<void>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared helper functions for watch integration tests.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.waitForOutput = waitForOutput;
|
|
7
|
+
exports.waitForCondition = waitForCondition;
|
|
8
|
+
/**
|
|
9
|
+
* Poll a condition until we see it.
|
|
10
|
+
*/
|
|
11
|
+
async function poll(condition) {
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
const check = () => {
|
|
14
|
+
if (condition())
|
|
15
|
+
return resolve();
|
|
16
|
+
setTimeout(check, 1000);
|
|
17
|
+
};
|
|
18
|
+
check();
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wait for a specific string to appear in the output.
|
|
23
|
+
*/
|
|
24
|
+
async function waitForOutput(getOutput, searchString) {
|
|
25
|
+
return poll(() => getOutput().includes(searchString));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Wait for a condition to become true.
|
|
29
|
+
*/
|
|
30
|
+
async function waitForCondition(condition) {
|
|
31
|
+
return poll(condition);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndhdGNoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQWtCSCxzQ0FFQztBQUtELDRDQUVDO0FBekJEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLElBQUksQ0FBQyxTQUF3QjtJQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksU0FBUyxFQUFFO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FBQyxTQUF1QixFQUFFLFlBQW9CO0lBQy9FLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxTQUF3QjtJQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd2F0Y2ggaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuLyoqXG4gKiBQb2xsIGEgY29uZGl0aW9uIHVudGlsIHdlIHNlZSBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9sbChjb25kaXRpb246ICgpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2hlY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uKCkpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBzZXRUaW1lb3V0KGNoZWNrLCAxMDAwKTtcbiAgICB9O1xuICAgIGNoZWNrKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGEgc3BlY2lmaWMgc3RyaW5nIHRvIGFwcGVhciBpbiB0aGUgb3V0cHV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvck91dHB1dChnZXRPdXRwdXQ6ICgpID0+IHN0cmluZywgc2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBvbGwoKCkgPT4gZ2V0T3V0cHV0KCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSk7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcG9sbChjb25kaXRpb24pO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/tests/toolkit-lib-integ-tests/toolkit-deploy-stack-with-multiple-docker-assets.integtest.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
const toolkit = require("@aws-cdk/toolkit-lib");
|
|
5
|
+
const toolkit_helpers_1 = require("./toolkit-helpers");
|
|
6
|
+
const lib_1 = require("../../lib");
|
|
7
|
+
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
|
|
8
|
+
(0, lib_1.integTest)('toolkit deploy stack with multiple docker assets', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
9
|
+
const tk = (0, toolkit_helpers_1.toolkitFromFixture)(fixture);
|
|
10
|
+
const assembly = await (0, toolkit_helpers_1.assemblyFromCdkAppDir)(tk, fixture);
|
|
11
|
+
const stacks = {
|
|
12
|
+
strategy: toolkit.StackSelectionStrategy.PATTERN_MUST_MATCH_SINGLE,
|
|
13
|
+
patterns: [fixture.fullStackName('multiple-docker-assets')],
|
|
14
|
+
};
|
|
15
|
+
await tk.deploy(assembly, {
|
|
16
|
+
stacks,
|
|
17
|
+
assetParallelism: true,
|
|
18
|
+
assetBuildConcurrency: 3,
|
|
19
|
+
});
|
|
20
|
+
await tk.destroy(assembly, { stacks });
|
|
21
|
+
}));
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1kZXBsb3ktc3RhY2std2l0aC1tdWx0aXBsZS1kb2NrZXItYXNzZXRzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRvb2xraXQtZGVwbG95LXN0YWNrLXdpdGgtbXVsdGlwbGUtZG9ja2VyLWFzc2V0cy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsZ0RBQWdEO0FBQ2hELHVEQUE4RTtBQUM5RSxtQ0FBMEQ7QUFFMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLGtEQUFrRCxFQUNsRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLEVBQUUsR0FBRyxJQUFBLG9DQUFrQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSx1Q0FBcUIsRUFBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFMUQsTUFBTSxNQUFNLEdBQTBCO1FBQ3BDLFFBQVEsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUMseUJBQXlCO1FBQ2xFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBRUYsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUN4QixNQUFNO1FBQ04sZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixxQkFBcUIsRUFBRSxDQUFDO0tBQ3pCLENBQUMsQ0FBQztJQUNILE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCAqIGFzIHRvb2xraXQgZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgYXNzZW1ibHlGcm9tQ2RrQXBwRGlyLCB0b29sa2l0RnJvbUZpeHR1cmUgfSBmcm9tICcuL3Rvb2xraXQtaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdChcbiAgJ3Rvb2xraXQgZGVwbG95IHN0YWNrIHdpdGggbXVsdGlwbGUgZG9ja2VyIGFzc2V0cycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHRrID0gdG9vbGtpdEZyb21GaXh0dXJlKGZpeHR1cmUpO1xuXG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBhc3NlbWJseUZyb21DZGtBcHBEaXIodGssIGZpeHR1cmUpO1xuXG4gICAgY29uc3Qgc3RhY2tzOiB0b29sa2l0LlN0YWNrU2VsZWN0b3IgPSB7XG4gICAgICBzdHJhdGVneTogdG9vbGtpdC5TdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTVVTVF9NQVRDSF9TSU5HTEUsXG4gICAgICBwYXR0ZXJuczogW2ZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbXVsdGlwbGUtZG9ja2VyLWFzc2V0cycpXSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGsuZGVwbG95KGFzc2VtYmx5LCB7XG4gICAgICBzdGFja3MsXG4gICAgICBhc3NldFBhcmFsbGVsaXNtOiB0cnVlLFxuICAgICAgYXNzZXRCdWlsZENvbmN1cnJlbmN5OiAzLFxuICAgIH0pO1xuICAgIGF3YWl0IHRrLmRlc3Ryb3koYXNzZW1ibHksIHsgc3RhY2tzIH0pO1xuICB9KSxcbik7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
const toolkit = require("@aws-cdk/toolkit-lib");
|
|
5
|
+
const toolkit_helpers_1 = require("./toolkit-helpers");
|
|
6
|
+
const lib_1 = require("../../lib");
|
|
7
|
+
/**
|
|
8
|
+
* Integration test for toolkit-lib watch with glob pattern matching.
|
|
9
|
+
*
|
|
10
|
+
* These tests verify that the chokidar v4 glob pattern fix does not
|
|
11
|
+
* detects file changes on files that are excluded via config.
|
|
12
|
+
*/
|
|
13
|
+
(0, lib_1.integTest)('toolkit watch excludes node_modules and dotfiles by default', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
14
|
+
const tk = (0, toolkit_helpers_1.toolkitFromFixture)(fixture);
|
|
15
|
+
const assembly = await (0, toolkit_helpers_1.assemblyFromCdkAppDir)(tk, fixture);
|
|
16
|
+
// Track the exclude patterns that were configured
|
|
17
|
+
const configMessages = [];
|
|
18
|
+
// Create a custom IoHost to capture configuration messages
|
|
19
|
+
const customTk = new toolkit.Toolkit({
|
|
20
|
+
ioHost: {
|
|
21
|
+
notify: async (msg) => {
|
|
22
|
+
if (msg.code === 'CDK_TOOLKIT_I5310') {
|
|
23
|
+
configMessages.push(msg.message);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
requestResponse: async () => undefined,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
// Start watching with default exclude patterns
|
|
30
|
+
const watcher = await customTk.watch(assembly, {
|
|
31
|
+
include: ['**'],
|
|
32
|
+
watchDir: fixture.integTestDir,
|
|
33
|
+
deploymentMethod: { method: 'hotswap' },
|
|
34
|
+
});
|
|
35
|
+
try {
|
|
36
|
+
// Wait for initialization
|
|
37
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
38
|
+
// Verify that default excludes are applied
|
|
39
|
+
const configMsg = configMessages.find(m => m.includes("'exclude' patterns"));
|
|
40
|
+
expect(configMsg).toBeDefined();
|
|
41
|
+
// Check that default excludes are present
|
|
42
|
+
expect(configMsg).toContain('node_modules');
|
|
43
|
+
expect(configMsg).toContain('.*');
|
|
44
|
+
fixture.log('✓ Toolkit watch applies default exclude patterns correctly');
|
|
45
|
+
fixture.log(` Config: ${configMsg.substring(0, 200)}...`);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await watcher.dispose();
|
|
49
|
+
await new Promise(resolve => setTimeout(resolve, 1000)); // Allow async operations to complete
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC13YXRjaC1nbG9iLW5lZ2F0aXZlLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRvb2xraXQtd2F0Y2gtZ2xvYi1uZWdhdGl2ZS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsZ0RBQWdEO0FBQ2hELHVEQUE4RTtBQUM5RSxtQ0FBMEQ7QUFFMUQ7Ozs7O0dBS0c7QUFFSCxJQUFBLGVBQVMsRUFDUCw2REFBNkQsRUFDN0QsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBQSxvQ0FBa0IsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsdUNBQXFCLEVBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFELGtEQUFrRDtJQUNsRCxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFcEMsMkRBQTJEO0lBQzNELE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNwQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztvQkFDckMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1lBQ0QsZUFBZSxFQUFFLEtBQUssSUFBbUIsRUFBRSxDQUFDLFNBQXlCO1NBQ3RFO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsK0NBQStDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDN0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1FBQzlCLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtLQUN4QyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDSCwwQkFBMEI7UUFDMUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2RCwyQ0FBMkM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoQywwQ0FBMEM7UUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsU0FBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztJQUNoRyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0ICogYXMgdG9vbGtpdCBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBhc3NlbWJseUZyb21DZGtBcHBEaXIsIHRvb2xraXRGcm9tRml4dHVyZSB9IGZyb20gJy4vdG9vbGtpdC1oZWxwZXJzJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbGliJztcblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciB0b29sa2l0LWxpYiB3YXRjaCB3aXRoIGdsb2IgcGF0dGVybiBtYXRjaGluZy5cbiAqXG4gKiBUaGVzZSB0ZXN0cyB2ZXJpZnkgdGhhdCB0aGUgY2hva2lkYXIgdjQgZ2xvYiBwYXR0ZXJuIGZpeCBkb2VzIG5vdFxuICogZGV0ZWN0cyBmaWxlIGNoYW5nZXMgb24gZmlsZXMgdGhhdCBhcmUgZXhjbHVkZWQgdmlhIGNvbmZpZy5cbiAqL1xuXG5pbnRlZ1Rlc3QoXG4gICd0b29sa2l0IHdhdGNoIGV4Y2x1ZGVzIG5vZGVfbW9kdWxlcyBhbmQgZG90ZmlsZXMgYnkgZGVmYXVsdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHRrID0gdG9vbGtpdEZyb21GaXh0dXJlKGZpeHR1cmUpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gYXdhaXQgYXNzZW1ibHlGcm9tQ2RrQXBwRGlyKHRrLCBmaXh0dXJlKTtcblxuICAgIC8vIFRyYWNrIHRoZSBleGNsdWRlIHBhdHRlcm5zIHRoYXQgd2VyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDcmVhdGUgYSBjdXN0b20gSW9Ib3N0IHRvIGNhcHR1cmUgY29uZmlndXJhdGlvbiBtZXNzYWdlc1xuICAgIGNvbnN0IGN1c3RvbVRrID0gbmV3IHRvb2xraXQuVG9vbGtpdCh7XG4gICAgICBpb0hvc3Q6IHtcbiAgICAgICAgbm90aWZ5OiBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgICAgaWYgKG1zZy5jb2RlID09PSAnQ0RLX1RPT0xLSVRfSTUzMTAnKSB7XG4gICAgICAgICAgICBjb25maWdNZXNzYWdlcy5wdXNoKG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RSZXNwb25zZTogYXN5bmMgPFQ+KCk6IFByb21pc2U8VD4gPT4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCB3YXRjaGluZyB3aXRoIGRlZmF1bHQgZXhjbHVkZSBwYXR0ZXJuc1xuICAgIGNvbnN0IHdhdGNoZXIgPSBhd2FpdCBjdXN0b21Uay53YXRjaChhc3NlbWJseSwge1xuICAgICAgaW5jbHVkZTogWycqKiddLFxuICAgICAgd2F0Y2hEaXI6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgZGVwbG95bWVudE1ldGhvZDogeyBtZXRob2Q6ICdob3Rzd2FwJyB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdhaXQgZm9yIGluaXRpYWxpemF0aW9uXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwKSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGRlZmF1bHQgZXhjbHVkZXMgYXJlIGFwcGxpZWRcbiAgICAgIGNvbnN0IGNvbmZpZ01zZyA9IGNvbmZpZ01lc3NhZ2VzLmZpbmQobSA9PiBtLmluY2x1ZGVzKFwiJ2V4Y2x1ZGUnIHBhdHRlcm5zXCIpKTtcbiAgICAgIGV4cGVjdChjb25maWdNc2cpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgZGVmYXVsdCBleGNsdWRlcyBhcmUgcHJlc2VudFxuICAgICAgZXhwZWN0KGNvbmZpZ01zZykudG9Db250YWluKCdub2RlX21vZHVsZXMnKTtcbiAgICAgIGV4cGVjdChjb25maWdNc2cpLnRvQ29udGFpbignLionKTtcblxuICAgICAgZml4dHVyZS5sb2coJ+KckyBUb29sa2l0IHdhdGNoIGFwcGxpZXMgZGVmYXVsdCBleGNsdWRlIHBhdHRlcm5zIGNvcnJlY3RseScpO1xuICAgICAgZml4dHVyZS5sb2coYCAgQ29uZmlnOiAke2NvbmZpZ01zZyEuc3Vic3RyaW5nKDAsIDIwMCl9Li4uYCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHdhdGNoZXIuZGlzcG9zZSgpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTsgLy8gQWxsb3cgYXN5bmMgb3BlcmF0aW9ucyB0byBjb21wbGV0ZVxuICAgIH1cbiAgfSksXG4pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const toolkit = require("@aws-cdk/toolkit-lib");
|
|
7
|
+
const toolkit_helpers_1 = require("./toolkit-helpers");
|
|
8
|
+
const lib_1 = require("../../lib");
|
|
9
|
+
/**
|
|
10
|
+
* Integration test for toolkit-lib watch with glob pattern matching.
|
|
11
|
+
*
|
|
12
|
+
* These tests verify that the chokidar v4 glob pattern fix detects file changes.
|
|
13
|
+
*/
|
|
14
|
+
(0, lib_1.integTest)('toolkit watch detects file changes with glob patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
15
|
+
const tk = (0, toolkit_helpers_1.toolkitFromFixture)(fixture);
|
|
16
|
+
const assembly = await (0, toolkit_helpers_1.assemblyFromCdkAppDir)(tk, fixture);
|
|
17
|
+
// Track events received from the watcher
|
|
18
|
+
const receivedEvents = [];
|
|
19
|
+
// Create a custom IoHost to capture watch events
|
|
20
|
+
const customTk = new toolkit.Toolkit({
|
|
21
|
+
ioHost: {
|
|
22
|
+
notify: async (msg) => {
|
|
23
|
+
receivedEvents.push({ code: msg.code, message: msg.message });
|
|
24
|
+
},
|
|
25
|
+
requestResponse: async () => undefined,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
// Create a test file in the watch directory
|
|
29
|
+
const testFile = path.join(fixture.integTestDir, 'watch-test-file.ts');
|
|
30
|
+
// Start watching with specific include patterns
|
|
31
|
+
const watcher = await customTk.watch(assembly, {
|
|
32
|
+
include: ['**/*.ts'],
|
|
33
|
+
exclude: ['**/node_modules/**', '**/*.test.ts'],
|
|
34
|
+
watchDir: fixture.integTestDir,
|
|
35
|
+
// Use a deployment method that won't actually deploy (we just want to test file watching)
|
|
36
|
+
deploymentMethod: { method: 'hotswap' },
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
// Wait a bit for the watcher to initialize
|
|
40
|
+
await (0, lib_1.sleep)(1000);
|
|
41
|
+
// Create a new .ts file - this should be detected
|
|
42
|
+
fs.writeFileSync(testFile, 'export const watchTest = true;');
|
|
43
|
+
// Wait for the file change to be detected
|
|
44
|
+
await (0, lib_1.sleep)(2000);
|
|
45
|
+
// Verify that the watcher detected the file
|
|
46
|
+
const observingEvents = receivedEvents.filter(e => e.code === 'CDK_TOOLKIT_I5311' || // observing file
|
|
47
|
+
e.code === 'CDK_TOOLKIT_I5312' || // detected change
|
|
48
|
+
e.code === 'CDK_TOOLKIT_I5314');
|
|
49
|
+
fixture.log(`Received ${observingEvents.length} watch-related events`);
|
|
50
|
+
for (const event of observingEvents) {
|
|
51
|
+
fixture.log(` ${event.code}: ${event.message.substring(0, 100)}...`);
|
|
52
|
+
}
|
|
53
|
+
// The watcher should have received the ready event and started observing
|
|
54
|
+
const hasReadyOrObserving = receivedEvents.some(e => e.code === 'CDK_TOOLKIT_I5314' || // triggering initial deploy
|
|
55
|
+
e.code === 'CDK_TOOLKIT_I5311');
|
|
56
|
+
expect(hasReadyOrObserving).toBe(true);
|
|
57
|
+
fixture.log('✓ Toolkit watch successfully initialized and detected files');
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
// Clean up - dispose and wait for async operations to settle
|
|
61
|
+
await watcher.dispose();
|
|
62
|
+
await (0, lib_1.sleep)(1000); // Allow async operations to complete
|
|
63
|
+
if (fs.existsSync(testFile)) {
|
|
64
|
+
fs.unlinkSync(testFile);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC13YXRjaC1nbG9iLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRvb2xraXQtd2F0Y2gtZ2xvYi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixnREFBZ0Q7QUFDaEQsdURBQThFO0FBQzlFLG1DQUFpRTtBQUVqRTs7OztHQUlHO0FBRUgsSUFBQSxlQUFTLEVBQ1AsdURBQXVELEVBQ3ZELElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sRUFBRSxHQUFHLElBQUEsb0NBQWtCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHVDQUFxQixFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUUxRCx5Q0FBeUM7SUFDekMsTUFBTSxjQUFjLEdBQXlELEVBQUUsQ0FBQztJQUVoRixpREFBaUQ7SUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ25DLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUNELGVBQWUsRUFBRSxLQUFLLElBQW1CLEVBQUUsQ0FBQyxTQUF5QjtTQUN0RTtLQUNGLENBQUMsQ0FBQztJQUVILDRDQUE0QztJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUV2RSxnREFBZ0Q7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtRQUM3QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDO1FBQy9DLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFBWTtRQUM5QiwwRkFBMEY7UUFDMUYsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0tBQ3hDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQztRQUNILDJDQUEyQztRQUMzQyxNQUFNLElBQUEsV0FBSyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxCLGtEQUFrRDtRQUNsRCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTdELDBDQUEwQztRQUMxQyxNQUFNLElBQUEsV0FBSyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxCLDRDQUE0QztRQUM1QyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2hELENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksaUJBQWlCO1lBQ25ELENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksa0JBQWtCO1lBQ3BELENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQy9CLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksZUFBZSxDQUFDLE1BQU0sdUJBQXVCLENBQUMsQ0FBQztRQUN2RSxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDbEQsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsSUFBSSw0QkFBNEI7WUFDOUQsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FDL0IsQ0FBQztRQUNGLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxPQUFPLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztZQUFTLENBQUM7UUFDVCw2REFBNkQ7UUFDN0QsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFBLFdBQUssRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztRQUN4RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRvb2xraXQgZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgYXNzZW1ibHlGcm9tQ2RrQXBwRGlyLCB0b29sa2l0RnJvbUZpeHR1cmUgfSBmcm9tICcuL3Rvb2xraXQtaGVscGVycyc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSwgc2xlZXAgfSBmcm9tICcuLi8uLi9saWInO1xuXG4vKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIHRvb2xraXQtbGliIHdhdGNoIHdpdGggZ2xvYiBwYXR0ZXJuIG1hdGNoaW5nLlxuICpcbiAqIFRoZXNlIHRlc3RzIHZlcmlmeSB0aGF0IHRoZSBjaG9raWRhciB2NCBnbG9iIHBhdHRlcm4gZml4IGRldGVjdHMgZmlsZSBjaGFuZ2VzLlxuICovXG5cbmludGVnVGVzdChcbiAgJ3Rvb2xraXQgd2F0Y2ggZGV0ZWN0cyBmaWxlIGNoYW5nZXMgd2l0aCBnbG9iIHBhdHRlcm5zJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgdGsgPSB0b29sa2l0RnJvbUZpeHR1cmUoZml4dHVyZSk7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBhc3NlbWJseUZyb21DZGtBcHBEaXIodGssIGZpeHR1cmUpO1xuXG4gICAgLy8gVHJhY2sgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIHdhdGNoZXJcbiAgICBjb25zdCByZWNlaXZlZEV2ZW50czogQXJyYXk8eyBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7IG1lc3NhZ2U6IHN0cmluZyB9PiA9IFtdO1xuXG4gICAgLy8gQ3JlYXRlIGEgY3VzdG9tIElvSG9zdCB0byBjYXB0dXJlIHdhdGNoIGV2ZW50c1xuICAgIGNvbnN0IGN1c3RvbVRrID0gbmV3IHRvb2xraXQuVG9vbGtpdCh7XG4gICAgICBpb0hvc3Q6IHtcbiAgICAgICAgbm90aWZ5OiBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgICAgcmVjZWl2ZWRFdmVudHMucHVzaCh7IGNvZGU6IG1zZy5jb2RlLCBtZXNzYWdlOiBtc2cubWVzc2FnZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFJlc3BvbnNlOiBhc3luYyA8VD4oKTogUHJvbWlzZTxUPiA9PiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIHRlc3QgZmlsZSBpbiB0aGUgd2F0Y2ggZGlyZWN0b3J5XG4gICAgY29uc3QgdGVzdEZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICd3YXRjaC10ZXN0LWZpbGUudHMnKTtcblxuICAgIC8vIFN0YXJ0IHdhdGNoaW5nIHdpdGggc3BlY2lmaWMgaW5jbHVkZSBwYXR0ZXJuc1xuICAgIGNvbnN0IHdhdGNoZXIgPSBhd2FpdCBjdXN0b21Uay53YXRjaChhc3NlbWJseSwge1xuICAgICAgaW5jbHVkZTogWycqKi8qLnRzJ10sXG4gICAgICBleGNsdWRlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi8qLnRlc3QudHMnXSxcbiAgICAgIHdhdGNoRGlyOiBmaXh0dXJlLmludGVnVGVzdERpcixcbiAgICAgIC8vIFVzZSBhIGRlcGxveW1lbnQgbWV0aG9kIHRoYXQgd29uJ3QgYWN0dWFsbHkgZGVwbG95ICh3ZSBqdXN0IHdhbnQgdG8gdGVzdCBmaWxlIHdhdGNoaW5nKVxuICAgICAgZGVwbG95bWVudE1ldGhvZDogeyBtZXRob2Q6ICdob3Rzd2FwJyB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdhaXQgYSBiaXQgZm9yIHRoZSB3YXRjaGVyIHRvIGluaXRpYWxpemVcbiAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgLnRzIGZpbGUgLSB0aGlzIHNob3VsZCBiZSBkZXRlY3RlZFxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZXN0RmlsZSwgJ2V4cG9ydCBjb25zdCB3YXRjaFRlc3QgPSB0cnVlOycpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZmlsZSBjaGFuZ2UgdG8gYmUgZGV0ZWN0ZWRcbiAgICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgd2F0Y2hlciBkZXRlY3RlZCB0aGUgZmlsZVxuICAgICAgY29uc3Qgb2JzZXJ2aW5nRXZlbnRzID0gcmVjZWl2ZWRFdmVudHMuZmlsdGVyKGUgPT5cbiAgICAgICAgZS5jb2RlID09PSAnQ0RLX1RPT0xLSVRfSTUzMTEnIHx8IC8vIG9ic2VydmluZyBmaWxlXG4gICAgICAgIGUuY29kZSA9PT0gJ0NES19UT09MS0lUX0k1MzEyJyB8fCAvLyBkZXRlY3RlZCBjaGFuZ2VcbiAgICAgICAgZS5jb2RlID09PSAnQ0RLX1RPT0xLSVRfSTUzMTQnLCAvLyB0cmlnZ2VyaW5nIGRlcGxveVxuICAgICAgKTtcblxuICAgICAgZml4dHVyZS5sb2coYFJlY2VpdmVkICR7b2JzZXJ2aW5nRXZlbnRzLmxlbmd0aH0gd2F0Y2gtcmVsYXRlZCBldmVudHNgKTtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2Ygb2JzZXJ2aW5nRXZlbnRzKSB7XG4gICAgICAgIGZpeHR1cmUubG9nKGAgICR7ZXZlbnQuY29kZX06ICR7ZXZlbnQubWVzc2FnZS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHdhdGNoZXIgc2hvdWxkIGhhdmUgcmVjZWl2ZWQgdGhlIHJlYWR5IGV2ZW50IGFuZCBzdGFydGVkIG9ic2VydmluZ1xuICAgICAgY29uc3QgaGFzUmVhZHlPck9ic2VydmluZyA9IHJlY2VpdmVkRXZlbnRzLnNvbWUoZSA9PlxuICAgICAgICBlLmNvZGUgPT09ICdDREtfVE9PTEtJVF9JNTMxNCcgfHwgLy8gdHJpZ2dlcmluZyBpbml0aWFsIGRlcGxveVxuICAgICAgICBlLmNvZGUgPT09ICdDREtfVE9PTEtJVF9JNTMxMScsIC8vIG9ic2VydmluZyBmaWxlc1xuICAgICAgKTtcbiAgICAgIGV4cGVjdChoYXNSZWFkeU9yT2JzZXJ2aW5nKS50b0JlKHRydWUpO1xuXG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFRvb2xraXQgd2F0Y2ggc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBkZXRlY3RlZCBmaWxlcycpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cCAtIGRpc3Bvc2UgYW5kIHdhaXQgZm9yIGFzeW5jIG9wZXJhdGlvbnMgdG8gc2V0dGxlXG4gICAgICBhd2FpdCB3YXRjaGVyLmRpc3Bvc2UoKTtcbiAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBBbGxvdyBhc3luYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyh0ZXN0RmlsZSkpIHtcbiAgICAgICAgZnMudW5saW5rU3luYyh0ZXN0RmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
|