@aws-cdk-testing/cli-integ 3.33.1 → 3.33.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-cdk-testing/cli-integ",
3
- "version": "3.33.1",
3
+ "version": "3.33.2",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -39,7 +39,7 @@
39
39
  "organization": true
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-cdk/toolkit-lib": "1.29.1",
42
+ "@aws-cdk/toolkit-lib": "1.30.0",
43
43
  "@aws-cdk/yarn-cling": "0.0.0",
44
44
  "@cdklabs/eslint-plugin": "^2.0.9",
45
45
  "@stylistic/eslint-plugin": "^3",
@@ -125,7 +125,7 @@
125
125
  "publishConfig": {
126
126
  "access": "public"
127
127
  },
128
- "version": "3.33.1",
128
+ "version": "3.33.2",
129
129
  "packageManager": "yarn@4.13.0",
130
130
  "types": "lib/index.d.ts",
131
131
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"yarn projen\"."
@@ -40,7 +40,9 @@ class SecurityPlugin {
40
40
  }
41
41
 
42
42
  const app = new cdk.App();
43
- cdk.Validations.of(app).addPlugins(new SecurityPlugin());
43
+ if (process.env.INJECT_OFFLINE_ERRORS) {
44
+ cdk.Validations.of(app).addPlugins(new SecurityPlugin());
45
+ }
44
46
 
45
47
  // Valid stack — no offline or online errors
46
48
  class ValidStack extends cdk.Stack {
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const lib_1 = require("../../../lib");
4
4
  (0, lib_1.integTest)('cdk validate passes for clean app', (0, lib_1.withSpecificFixture)('validate-passing-app', async (fixture) => {
5
5
  const output = await fixture.cdk(['--unstable=validate', 'validate', fixture.fullStackName('validate-passing')]);
6
- expect(output).toContain('Policy validation passed. No problems found.');
6
+ expect(output).toContain('Validation did not find any problems.');
7
7
  }));
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLXBhc3Nlcy1jbGVhbi1hcHAuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLXBhc3Nlcy1jbGVhbi1hcHAuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLG1DQUFtQyxFQUNuQyxJQUFBLHlCQUFtQixFQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUMvRSxDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgdmFsaWRhdGUgcGFzc2VzIGZvciBjbGVhbiBhcHAnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCd2YWxpZGF0ZS1wYXNzaW5nLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJy0tdW5zdGFibGU9dmFsaWRhdGUnLCAndmFsaWRhdGUnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLXBhc3NpbmcnKV0sXG4gICAgKTtcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignUG9saWN5IHZhbGlkYXRpb24gcGFzc2VkLiBObyBwcm9ibGVtcyBmb3VuZC4nKTtcbiAgfSksXG4pO1xuIl19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLXBhc3Nlcy1jbGVhbi1hcHAuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLXBhc3Nlcy1jbGVhbi1hcHAuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLG1DQUFtQyxFQUNuQyxJQUFBLHlCQUFtQixFQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUMvRSxDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgdmFsaWRhdGUgcGFzc2VzIGZvciBjbGVhbiBhcHAnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCd2YWxpZGF0ZS1wYXNzaW5nLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJy0tdW5zdGFibGU9dmFsaWRhdGUnLCAndmFsaWRhdGUnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLXBhc3NpbmcnKV0sXG4gICAgKTtcblxuICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignVmFsaWRhdGlvbiBkaWQgbm90IGZpbmQgYW55IHByb2JsZW1zLicpO1xuICB9KSxcbik7XG4iXX0=
@@ -8,6 +8,9 @@ const lib_1 = require("../../../lib");
8
8
  // Validate combined stack — has both a bucket (SecurityPlugin) and
9
9
  // uses the same bucket name (CFN early validation conflict)
10
10
  const output = await fixture.cdk(['--unstable=validate', 'validate', '--online', fixture.fullStackName('validate-online-combined')], {
11
+ modEnv: {
12
+ INJECT_OFFLINE_ERRORS: 'true',
13
+ },
11
14
  allowErrExit: true,
12
15
  });
13
16
  // Offline: SecurityPlugin catches the S3 bucket
@@ -21,4 +24,4 @@ const lib_1 = require("../../../lib");
21
24
  await fixture.cdk(['destroy', '--force', fixture.fullStackName('validate-online-deployed')]);
22
25
  }
23
26
  }));
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLW9ubGluZS1jb21iaW5lZC1vZmZsaW5lLWFuZC1vbmxpbmUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLW9ubGluZS1jb21iaW5lZC1vZmZsaW5lLWFuZC1vbmxpbmUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHlCQUFtQixFQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMzRCxzQ0FBc0M7SUFDdEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLENBQUMsUUFBUSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0gsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFDbEc7WUFDRSxZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUNGLENBQUM7UUFFRixnREFBZ0Q7UUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUzQywwREFBMEQ7UUFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmludGVnVGVzdChcbiAgJ2NkayB2YWxpZGF0ZSAtLW9ubGluZSByZXBvcnRzIGJvdGggb2ZmbGluZSBhbmQgb25saW5lIGVycm9ycycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3ZhbGlkYXRlLW9ubGluZS1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSBhIHN0YWNrIHRoYXQgb3ducyB0aGUgYnVja2V0XG4gICAgYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJ2RlcGxveScsICctLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXInLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLW9ubGluZS1kZXBsb3llZCcpXSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIGNvbWJpbmVkIHN0YWNrIOKAlCBoYXMgYm90aCBhIGJ1Y2tldCAoU2VjdXJpdHlQbHVnaW4pIGFuZFxuICAgICAgLy8gdXNlcyB0aGUgc2FtZSBidWNrZXQgbmFtZSAoQ0ZOIGVhcmx5IHZhbGlkYXRpb24gY29uZmxpY3QpXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgICAgWyctLXVuc3RhYmxlPXZhbGlkYXRlJywgJ3ZhbGlkYXRlJywgJy0tb25saW5lJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd2YWxpZGF0ZS1vbmxpbmUtY29tYmluZWQnKV0sXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBPZmZsaW5lOiBTZWN1cml0eVBsdWdpbiBjYXRjaGVzIHRoZSBTMyBidWNrZXRcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignUzMgQnVja2V0cyBtdXN0IG5vdCBiZSBwdWJsaWNseSBhY2Nlc3NpYmxlJyk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ1NlY3VyaXR5UGx1Z2luJyk7XG5cbiAgICAgIC8vIE9ubGluZTogQ2xvdWRGb3JtYXRpb24gY2F0Y2hlcyB0aGUgYnVja2V0IG5hbWUgY29uZmxpY3RcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignQ2xvdWRGb3JtYXRpb24nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydkZXN0cm95JywgJy0tZm9yY2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLW9ubGluZS1kZXBsb3llZCcpXSk7XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLW9ubGluZS1jb21iaW5lZC1vZmZsaW5lLWFuZC1vbmxpbmUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLW9ubGluZS1jb21iaW5lZC1vZmZsaW5lLWFuZC1vbmxpbmUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHlCQUFtQixFQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMzRCxzQ0FBc0M7SUFDdEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLENBQUMsUUFBUSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0gsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFDbEc7WUFDRSxNQUFNLEVBQUU7Z0JBQ04scUJBQXFCLEVBQUUsTUFBTTthQUM5QjtZQUNELFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQ0YsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTNDLDBEQUEwRDtRQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHZhbGlkYXRlIC0tb25saW5lIHJlcG9ydHMgYm90aCBvZmZsaW5lIGFuZCBvbmxpbmUgZXJyb3JzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgndmFsaWRhdGUtb25saW5lLWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IGEgc3RhY2sgdGhhdCBvd25zIHRoZSBidWNrZXRcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnZGVwbG95JywgJy0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlcicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndmFsaWRhdGUtb25saW5lLWRlcGxveWVkJyldLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgY29tYmluZWQgc3RhY2sg4oCUIGhhcyBib3RoIGEgYnVja2V0IChTZWN1cml0eVBsdWdpbikgYW5kXG4gICAgICAvLyB1c2VzIHRoZSBzYW1lIGJ1Y2tldCBuYW1lIChDRk4gZWFybHkgdmFsaWRhdGlvbiBjb25mbGljdClcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgICBbJy0tdW5zdGFibGU9dmFsaWRhdGUnLCAndmFsaWRhdGUnLCAnLS1vbmxpbmUnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLW9ubGluZS1jb21iaW5lZCcpXSxcbiAgICAgICAge1xuICAgICAgICAgIG1vZEVudjoge1xuICAgICAgICAgICAgSU5KRUNUX09GRkxJTkVfRVJST1JTOiAndHJ1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBPZmZsaW5lOiBTZWN1cml0eVBsdWdpbiBjYXRjaGVzIHRoZSBTMyBidWNrZXRcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignUzMgQnVja2V0cyBtdXN0IG5vdCBiZSBwdWJsaWNseSBhY2Nlc3NpYmxlJyk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ1NlY3VyaXR5UGx1Z2luJyk7XG5cbiAgICAgIC8vIE9ubGluZTogQ2xvdWRGb3JtYXRpb24gY2F0Y2hlcyB0aGUgYnVja2V0IG5hbWUgY29uZmxpY3RcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignQ2xvdWRGb3JtYXRpb24nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydkZXN0cm95JywgJy0tZm9yY2UnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3ZhbGlkYXRlLW9ubGluZS1kZXBsb3llZCcpXSk7XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const lib_1 = require("../../../lib");
4
4
  (0, lib_1.integTest)('cdk validate --online passes for valid template', (0, lib_1.withSpecificFixture)('validate-online-app', async (fixture) => {
5
5
  const output = await fixture.cdk(['--unstable=validate', 'validate', '--online', fixture.fullStackName('validate-online-valid')]);
6
- expect(output).toContain('No problems found');
6
+ expect(output).toContain('Validation did not find any problems');
7
7
  }));
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLW9ubGluZS1wYXNzZXMtdmFsaWQtdGVtcGxhdGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLW9ubGluZS1wYXNzZXMtdmFsaWQtdGVtcGxhdGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGlEQUFpRCxFQUNqRCxJQUFBLHlCQUFtQixFQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FDaEcsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHZhbGlkYXRlIC0tb25saW5lIHBhc3NlcyBmb3IgdmFsaWQgdGVtcGxhdGUnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCd2YWxpZGF0ZS1vbmxpbmUtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnLS11bnN0YWJsZT12YWxpZGF0ZScsICd2YWxpZGF0ZScsICctLW9ubGluZScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndmFsaWRhdGUtb25saW5lLXZhbGlkJyldLFxuICAgICk7XG5cbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ05vIHByb2JsZW1zIGZvdW5kJyk7XG4gIH0pLFxuKTtcbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXZhbGlkYXRlLW9ubGluZS1wYXNzZXMtdmFsaWQtdGVtcGxhdGUuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXZhbGlkYXRlLW9ubGluZS1wYXNzZXMtdmFsaWQtdGVtcGxhdGUuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUEsZUFBUyxFQUNQLGlEQUFpRCxFQUNqRCxJQUFBLHlCQUFtQixFQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FDaEcsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHZhbGlkYXRlIC0tb25saW5lIHBhc3NlcyBmb3IgdmFsaWQgdGVtcGxhdGUnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCd2YWxpZGF0ZS1vbmxpbmUtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnLS11bnN0YWJsZT12YWxpZGF0ZScsICd2YWxpZGF0ZScsICctLW9ubGluZScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndmFsaWRhdGUtb25saW5lLXZhbGlkJyldLFxuICAgICk7XG5cbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ1ZhbGlkYXRpb24gZGlkIG5vdCBmaW5kIGFueSBwcm9ibGVtcycpO1xuICB9KSxcbik7XG4iXX0=
@@ -0,0 +1,65 @@
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(5 * 60 * 1000); // 5 minutes for watch tests
9
+ // Regression test for https://github.com/aws/aws-cdk-cli/issues/1647:
10
+ // a user-supplied glob scoped to a subdirectory (e.g. 'src/**/*.ts') must
11
+ // detect changes to files nested inside that directory. The chokidar v4
12
+ // `ignored` callback also gates directory traversal, so an earlier bug pruned
13
+ // the 'src' directory (which does not itself match the file glob) before any
14
+ // nested file could be discovered - watch then silently observed nothing.
15
+ (0, lib_1.integTest)('cdk watch detects file changes with a directory-scoped glob pattern', (0, lib_1.withDefaultFixture)(async (fixture) => {
16
+ // Create a watched file nested inside a subdirectory, matched by 'src/**/*.ts'.
17
+ const srcDir = path.join(fixture.integTestDir, 'src');
18
+ fs.mkdirSync(srcDir, { recursive: true });
19
+ const testFile = path.join(srcDir, 'watch-test-file.ts');
20
+ fs.writeFileSync(testFile, 'export const initial = true;');
21
+ // Update cdk.json with a watch glob scoped to the 'src' directory.
22
+ const cdkJsonPath = path.join(fixture.integTestDir, 'cdk.json');
23
+ const cdkJson = JSON.parse(fs.readFileSync(cdkJsonPath, 'utf-8'));
24
+ cdkJson.watch = {
25
+ include: ['src/**/*.ts'],
26
+ };
27
+ fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
28
+ await fixture.cli.makeCliAvailable();
29
+ let output = '';
30
+ // Start cdk watch
31
+ const watchProcess = child_process.spawn('cdk', [
32
+ 'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
33
+ ], {
34
+ cwd: fixture.integTestDir,
35
+ stdio: 'pipe',
36
+ env: { ...process.env, ...fixture.cdkShellEnv() },
37
+ });
38
+ try {
39
+ watchProcess.stdout?.on('data', (data) => {
40
+ output += data.toString();
41
+ fixture.log(data.toString());
42
+ });
43
+ watchProcess.stderr?.on('data', (data) => {
44
+ output += data.toString();
45
+ fixture.log(data.toString());
46
+ });
47
+ await (0, watch_helpers_1.waitForOutput)(() => output, "Triggering initial 'cdk deploy'");
48
+ fixture.log('✓ Watch start detected');
49
+ await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
50
+ fixture.log('✓ Initial deployment completed');
51
+ // Modify the nested file to trigger a watch event. Before the fix the
52
+ // 'src' directory was pruned, so this change was never detected.
53
+ fs.writeFileSync(testFile, 'export const modified = true;');
54
+ await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
55
+ fixture.log('✓ Watch detected change to file nested under a directory-scoped glob');
56
+ // Wait for the second deployment to complete (2 occurrences of 'deployment time')
57
+ await (0, watch_helpers_1.waitForCondition)(() => (output.match(/deployment time/g) || []).length >= 2);
58
+ fixture.log('✓ Second deployment completed');
59
+ }
60
+ finally {
61
+ (0, watch_helpers_1.safeKillProcess)(watchProcess);
62
+ }
63
+ expect.assertions(4);
64
+ }));
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZGlyZWN0b3J5LXNjb3BlZC1nbG9iLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay13YXRjaC1kZXRlY3RzLWZpbGUtY2hhbmdlcy13aXRoLWRpcmVjdG9yeS1zY29wZWQtZ2xvYi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtREFBbUY7QUFDbkYsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtBQUU1RCxzRUFBc0U7QUFDdEUsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsZ0ZBQWdGO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxtRUFBbUU7SUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3pCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsa0JBQWtCO0lBQ2xCLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0tBQzVELEVBQUU7UUFDRCxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDekIsS0FBSyxFQUFFLE1BQU07UUFDYixHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7S0FDbEQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUU5QyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFFNUQsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1FBRXBGLGtGQUFrRjtRQUNsRixNQUFNLElBQUEsZ0NBQWdCLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMvQyxDQUFDO1lBQVMsQ0FBQztRQUNULElBQUEsK0JBQWUsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3YWl0Rm9yT3V0cHV0LCB3YWl0Rm9yQ29uZGl0aW9uLCBzYWZlS2lsbFByb2Nlc3MgfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoNSAqIDYwICogMTAwMCk7IC8vIDUgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL2lzc3Vlcy8xNjQ3OlxuLy8gYSB1c2VyLXN1cHBsaWVkIGdsb2Igc2NvcGVkIHRvIGEgc3ViZGlyZWN0b3J5IChlLmcuICdzcmMvKiovKi50cycpIG11c3Rcbi8vIGRldGVjdCBjaGFuZ2VzIHRvIGZpbGVzIG5lc3RlZCBpbnNpZGUgdGhhdCBkaXJlY3RvcnkuIFRoZSBjaG9raWRhciB2NFxuLy8gYGlnbm9yZWRgIGNhbGxiYWNrIGFsc28gZ2F0ZXMgZGlyZWN0b3J5IHRyYXZlcnNhbCwgc28gYW4gZWFybGllciBidWcgcHJ1bmVkXG4vLyB0aGUgJ3NyYycgZGlyZWN0b3J5ICh3aGljaCBkb2VzIG5vdCBpdHNlbGYgbWF0Y2ggdGhlIGZpbGUgZ2xvYikgYmVmb3JlIGFueVxuLy8gbmVzdGVkIGZpbGUgY291bGQgYmUgZGlzY292ZXJlZCAtIHdhdGNoIHRoZW4gc2lsZW50bHkgb2JzZXJ2ZWQgbm90aGluZy5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkZXRlY3RzIGZpbGUgY2hhbmdlcyB3aXRoIGEgZGlyZWN0b3J5LXNjb3BlZCBnbG9iIHBhdHRlcm4nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBDcmVhdGUgYSB3YXRjaGVkIGZpbGUgbmVzdGVkIGluc2lkZSBhIHN1YmRpcmVjdG9yeSwgbWF0Y2hlZCBieSAnc3JjLyoqLyoudHMnLlxuICAgIGNvbnN0IHNyY0RpciA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3NyYycpO1xuICAgIGZzLm1rZGlyU3luYyhzcmNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHRlc3RGaWxlID0gcGF0aC5qb2luKHNyY0RpciwgJ3dhdGNoLXRlc3QtZmlsZS50cycpO1xuICAgIGZzLndyaXRlRmlsZVN5bmModGVzdEZpbGUsICdleHBvcnQgY29uc3QgaW5pdGlhbCA9IHRydWU7Jyk7XG5cbiAgICAvLyBVcGRhdGUgY2RrLmpzb24gd2l0aCBhIHdhdGNoIGdsb2Igc2NvcGVkIHRvIHRoZSAnc3JjJyBkaXJlY3RvcnkuXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJ3NyYy8qKi8qLnRzJ10sXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNka0pzb25QYXRoLCBKU09OLnN0cmluZ2lmeShjZGtKc29uLCBudWxsLCAyKSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNsaS5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICAvLyBTdGFydCBjZGsgd2F0Y2hcbiAgICBjb25zdCB3YXRjaFByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzLnNwYXduKCdjZGsnLCBbXG4gICAgICAnd2F0Y2gnLCAnLS1ob3Rzd2FwJywgJy12JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSxcbiAgICBdLCB7XG4gICAgICBjd2Q6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZml4dHVyZS5jZGtTaGVsbEVudigpIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgICB3YXRjaFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsIFwiVHJpZ2dlcmluZyBpbml0aWFsICdjZGsgZGVwbG95J1wiKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggc3RhcnQgZGV0ZWN0ZWQnKTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsICdkZXBsb3ltZW50IHRpbWUnKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgSW5pdGlhbCBkZXBsb3ltZW50IGNvbXBsZXRlZCcpO1xuXG4gICAgICAvLyBNb2RpZnkgdGhlIG5lc3RlZCBmaWxlIHRvIHRyaWdnZXIgYSB3YXRjaCBldmVudC4gQmVmb3JlIHRoZSBmaXggdGhlXG4gICAgICAvLyAnc3JjJyBkaXJlY3Rvcnkgd2FzIHBydW5lZCwgc28gdGhpcyBjaGFuZ2Ugd2FzIG5ldmVyIGRldGVjdGVkLlxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZXN0RmlsZSwgJ2V4cG9ydCBjb25zdCBtb2RpZmllZCA9IHRydWU7Jyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnRGV0ZWN0ZWQgY2hhbmdlIHRvJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIGRldGVjdGVkIGNoYW5nZSB0byBmaWxlIG5lc3RlZCB1bmRlciBhIGRpcmVjdG9yeS1zY29wZWQgZ2xvYicpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FmZUtpbGxQcm9jZXNzKHdhdGNoUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgZXhwZWN0LmFzc2VydGlvbnMoNCk7XG4gIH0pLFxuKTtcbiJdfQ==