@jjrawlins/cdk-diff-pr-github-action 0.0.2-beta → 0.0.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.
Files changed (137) hide show
  1. package/.jsii +327 -38
  2. package/.mergify.yml +102 -0
  3. package/API.md +226 -6
  4. package/README.md +221 -37
  5. package/lib/CdkDiffIamTemplate.js +1 -1
  6. package/lib/CdkDiffStackWorkflow.js +1 -1
  7. package/lib/CdkDriftDetectionWorkflow.d.ts +32 -0
  8. package/lib/CdkDriftDetectionWorkflow.js +281 -0
  9. package/lib/CdkDriftIamTemplate.js +3 -2
  10. package/lib/bin/cdk-changeset-script.js +3 -3
  11. package/lib/bin/cdk-drift-detection-script.d.ts +15 -0
  12. package/lib/bin/cdk-drift-detection-script.js +196 -0
  13. package/lib/bin/detect-drift.js +41 -1
  14. package/lib/index.d.ts +1 -0
  15. package/lib/index.js +2 -1
  16. package/node_modules/@aws-sdk/client-cloudformation/dist-types/auth/httpAuthSchemeProvider.d.ts +1 -1
  17. package/node_modules/@aws-sdk/client-cloudformation/package.json +8 -8
  18. package/node_modules/@aws-sdk/client-sso/dist-types/auth/httpAuthSchemeProvider.d.ts +1 -1
  19. package/node_modules/@aws-sdk/client-sso/package.json +7 -7
  20. package/node_modules/@aws-sdk/core/dist-cjs/index.js +9 -5
  21. package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +9 -5
  22. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +1 -4
  23. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/SinglePassJsonShapeSerializer.js +126 -0
  24. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/AwsQueryProtocol.js +8 -1
  25. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/experimental/SinglePassJsonShapeSerializer.d.ts +27 -0
  26. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/SinglePassJsonShapeSerializer.d.ts +17 -0
  27. package/node_modules/@aws-sdk/core/package.json +1 -1
  28. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  29. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  30. package/node_modules/@aws-sdk/credential-provider-ini/package.json +8 -8
  31. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  32. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  33. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  34. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  35. package/node_modules/@aws-sdk/middleware-user-agent/package.json +2 -2
  36. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +1 -1
  37. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthSchemeProvider.d.ts +1 -1
  38. package/node_modules/@aws-sdk/nested-clients/package.json +7 -7
  39. package/node_modules/@aws-sdk/region-config-resolver/package.json +2 -2
  40. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  41. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  42. package/node_modules/@smithy/config-resolver/dist-cjs/index.js +6 -1
  43. package/node_modules/@smithy/config-resolver/dist-es/regionConfig/checkRegion.js +6 -1
  44. package/node_modules/@smithy/config-resolver/package.json +1 -1
  45. package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
  46. package/package.json +10 -5
  47. package/sonar-project.properties +17 -0
  48. package/.junie/guidelines.md +0 -62
  49. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.jsii +0 -4070
  50. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.junie/guidelines.md +0 -62
  51. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.tool-versions +0 -3
  52. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.jsii +0 -4070
  53. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.junie/guidelines.md +0 -62
  54. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.tool-versions +0 -3
  55. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.jsii +0 -3946
  56. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.junie/guidelines.md +0 -62
  57. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.tool-versions +0 -3
  58. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.jsii +0 -3917
  59. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.junie/guidelines.md +0 -62
  60. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.tool-versions +0 -3
  61. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/API.md +0 -276
  62. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/LICENSE +0 -202
  63. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/README.md +0 -146
  64. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.d.ts +0 -8
  65. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.js +0 -96
  66. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.d.ts +0 -22
  67. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.js +0 -144
  68. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.d.ts +0 -9
  69. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.js +0 -256
  70. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.d.ts +0 -1
  71. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.js +0 -204
  72. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.d.ts +0 -2
  73. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.js +0 -19
  74. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/package.json +0 -137
  75. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.lock +0 -10
  76. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.sig +0 -1
  77. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/API.md +0 -276
  78. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/LICENSE +0 -202
  79. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/README.md +0 -146
  80. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.d.ts +0 -10
  81. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.js +0 -96
  82. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.d.ts +0 -22
  83. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.js +0 -144
  84. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.d.ts +0 -9
  85. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.js +0 -256
  86. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.d.ts +0 -1
  87. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.js +0 -204
  88. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.d.ts +0 -1
  89. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.js +0 -122
  90. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.d.ts +0 -2
  91. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.js +0 -19
  92. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/package.json +0 -137
  93. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.lock +0 -10
  94. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.sig +0 -1
  95. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/API.md +0 -298
  96. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/LICENSE +0 -202
  97. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/README.md +0 -146
  98. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.d.ts +0 -10
  99. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.js +0 -101
  100. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.d.ts +0 -22
  101. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.js +0 -144
  102. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDriftIamTemplate.d.ts +0 -10
  103. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDriftIamTemplate.js +0 -76
  104. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.d.ts +0 -9
  105. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.js +0 -256
  106. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.d.ts +0 -1
  107. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.js +0 -204
  108. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.d.ts +0 -1
  109. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.js +0 -122
  110. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.d.ts +0 -3
  111. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.js +0 -20
  112. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/package.json +0 -136
  113. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.lock +0 -10
  114. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.sig +0 -1
  115. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/API.md +0 -396
  116. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/LICENSE +0 -202
  117. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/README.md +0 -146
  118. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.d.ts +0 -10
  119. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffIamTemplate.js +0 -101
  120. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.d.ts +0 -22
  121. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDiffStackWorkflow.js +0 -144
  122. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDriftIamTemplate.d.ts +0 -10
  123. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/CdkDriftIamTemplate.js +0 -76
  124. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.d.ts +0 -9
  125. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/cdk-changeset-script.js +0 -256
  126. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.d.ts +0 -1
  127. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/describe-cfn-changeset.js +0 -204
  128. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.d.ts +0 -1
  129. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/bin/detect-drift.js +0 -122
  130. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.d.ts +0 -3
  131. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/lib/index.js +0 -20
  132. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/package.json +0 -136
  133. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.lock +0 -10
  134. package/.yalc/@jjrawlins/cdk-diff-pr-github-action/yalc.sig +0 -1
  135. package/lib/bin/describe-cfn-changeset.d.ts +0 -1
  136. package/lib/bin/describe-cfn-changeset.js +0 -204
  137. package/yalc.lock +0 -10
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CdkDriftDetectionScript = void 0;
4
+ const projen_1 = require("projen");
5
+ /**
6
+ * Projen helper to emit the drift detection script into the repository so
7
+ * GitHub workflows can execute it from a stable location.
8
+ *
9
+ * This mirrors the pattern used by CdkChangesetScript, but writes the
10
+ * drift script (detect-drift.ts) under the workflows scripts directory by default.
11
+ */
12
+ class CdkDriftDetectionScript {
13
+ constructor(props) {
14
+ const outputPath = props.outputPath ?? '.github/workflows/scripts/detect-drift.ts';
15
+ new projen_1.TextFile(props.project, outputPath, {
16
+ lines: [
17
+ "import {\n CloudFormationClient,\n DescribeStackDriftDetectionStatusCommand,\n DetectStackDriftCommand,\n DescribeStackResourceDriftsCommand,\n type DescribeStackResourceDriftsCommandOutput,\n type StackResourceDriftStatus,\n} from '@aws-sdk/client-cloudformation';",
18
+ '',
19
+ 'async function sleep(ms: number) {',
20
+ ' return new Promise((r) => setTimeout(r, ms));',
21
+ '}',
22
+ '',
23
+ 'async function main() {',
24
+ ' const stackName = process.env.STACK_NAME;',
25
+ ' if (!stackName) {',
26
+ " console.error('STACK_NAME env var is required');",
27
+ ' process.exit(1);',
28
+ ' }',
29
+ '',
30
+ ' // Region and credentials pulled from environment set by actions/configure-aws-credentials',
31
+ ' const client = new CloudFormationClient({});',
32
+ '',
33
+ ' const detect = await client.send(new DetectStackDriftCommand({ StackName: stackName }));',
34
+ ' if (!detect.StackDriftDetectionId) {',
35
+ " console.error('Failed to start drift detection');",
36
+ ' process.exit(1);',
37
+ ' }',
38
+ '',
39
+ ' const id = detect.StackDriftDetectionId;',
40
+ ' console.log(`Drift detection started: ${id}`);',
41
+ '',
42
+ " let detectionStatus = 'DETECTION_IN_PROGRESS';",
43
+ ' let stackDriftStatus: string | undefined;',
44
+ '',
45
+ " while (detectionStatus === 'DETECTION_IN_PROGRESS') {",
46
+ ' await sleep(5000);',
47
+ ' const res = await client.send(',
48
+ ' new DescribeStackDriftDetectionStatusCommand({ StackDriftDetectionId: id }),',
49
+ ' );',
50
+ " detectionStatus = res.DetectionStatus ?? 'UNKNOWN';",
51
+ ' stackDriftStatus = res.StackDriftStatus;',
52
+ ' console.log(`Detection status: ${detectionStatus}`);',
53
+ ' }',
54
+ '',
55
+ ' // Helper to build an HTML report of drifted resources',
56
+ ' const buildHtml = (stack: string, drifts: any[]): string => {',
57
+ ' let body = `<h1>Drift report</h1><h2>Stack Name: ${stack}</h2><br>`;',
58
+ ' if (drifts.length === 0) {',
59
+ " body += 'no drift.';",
60
+ ' return body;',
61
+ ' }',
62
+ " body += '<table>' +",
63
+ " '<tr><th>Status</th><th>ID</th><th>Type</th><th>Differences</th></tr>';",
64
+ ' for (const d of drifts) {',
65
+ " const status = d.StackResourceDriftStatus ?? '-';",
66
+ " const logicalId = d.LogicalResourceId ?? '-';",
67
+ " const type = d.ResourceType ?? '-';",
68
+ ' const diffs = (d.PropertyDifferences ?? []).map((pd: any) => {',
69
+ " const p = pd.PropertyPath ?? '-';",
70
+ " const t = pd.DifferenceType ?? '-';",
71
+ ' return `- ${t}: ${p}`;',
72
+ " }).join('<br>');",
73
+ " const statusEmoji = status === 'MODIFIED' ? '🟠' : status === 'DELETED' ? '🔴' : status === 'NOT_CHECKED' ? '⚪' : '🟢';",
74
+ " body += '<tr>' +",
75
+ ' `<td>${statusEmoji} ${status}</td>` +',
76
+ ' `<td>${logicalId}</td>` +',
77
+ ' `<td>${type}</td>` +',
78
+ ' `<td>${diffs}</td>` +',
79
+ " '</tr>';",
80
+ ' }',
81
+ " body += '</table>';",
82
+ ' return body;',
83
+ ' };',
84
+ '',
85
+ ' async function listDriftedResources(): Promise<any[]> {',
86
+ ' const results: any[] = [];',
87
+ ' // Only include resources that are not IN_SYNC',
88
+ " const filters: StackResourceDriftStatus[] = ['MODIFIED', 'DELETED', 'NOT_CHECKED'];",
89
+ ' let nextToken: string | undefined = undefined;',
90
+ ' do {',
91
+ ' const resp: DescribeStackResourceDriftsCommandOutput = await client.send(new DescribeStackResourceDriftsCommand({',
92
+ ' StackName: stackName,',
93
+ ' NextToken: nextToken,',
94
+ ' StackResourceDriftStatusFilters: filters,',
95
+ ' }));',
96
+ ' if (resp.StackResourceDrifts) results.push(...resp.StackResourceDrifts);',
97
+ ' nextToken = resp.NextToken;',
98
+ ' } while (nextToken);',
99
+ ' return results;',
100
+ ' }',
101
+ '',
102
+ ' async function postGithubComment(url: string, token: string, body: string): Promise<void> {',
103
+ ' const res = await fetch(url, {',
104
+ " method: 'POST',",
105
+ ' headers: {',
106
+ " 'Authorization': `token ${token}`,",
107
+ " 'Content-Type': 'application/json',",
108
+ " 'Accept': 'application/vnd.github+json',",
109
+ ' },',
110
+ ' body: JSON.stringify({ body }),',
111
+ ' });',
112
+ ' if (!res.ok) {',
113
+ ' const text = await res.text().catch(() => \'\');',
114
+ ' console.error(`Failed to post GitHub comment: ${res.status} ${res.statusText} ${text}`);',
115
+ ' }',
116
+ ' }',
117
+ '',
118
+ ' // When there is drift, collect details and post a PR comment + step summary',
119
+ ' const outputFile = process.env.DRIFT_DETECTION_OUTPUT;',
120
+ " if (stackDriftStatus !== 'IN_SYNC') {",
121
+ ' console.error(`Drift detected (status: ${stackDriftStatus})`);',
122
+ ' const drifts = await listDriftedResources();',
123
+ ' const html = buildHtml(stackName, drifts);',
124
+ '',
125
+ ' // Write machine-readable JSON if requested',
126
+ ' if (outputFile) {',
127
+ ' try {',
128
+ " const { writeFile } = await import('fs/promises');",
129
+ ' const result = [',
130
+ ' {',
131
+ ' stackName,',
132
+ ' driftStatus: stackDriftStatus,',
133
+ ' driftedResources: (drifts || []).map(d => ({',
134
+ ' logicalResourceId: d.LogicalResourceId,',
135
+ ' resourceType: d.ResourceType,',
136
+ ' stackResourceDriftStatus: d.StackResourceDriftStatus,',
137
+ ' propertyDifferences: d.PropertyDifferences,',
138
+ ' })),',
139
+ ' },',
140
+ ' ];',
141
+ " await writeFile(outputFile, JSON.stringify(result, null, 2), { encoding: 'utf8' });",
142
+ ' } catch (e: any) {',
143
+ " console.error('Failed to write drift JSON results:', e?.message || e);",
144
+ ' }',
145
+ ' }',
146
+ '',
147
+ ' // Print to stdout and append to summary if available',
148
+ ' console.log(html);',
149
+ ' const stepSummary = process.env.GITHUB_STEP_SUMMARY;',
150
+ ' if (stepSummary) {',
151
+ ' try {',
152
+ " const { appendFile } = await import('fs/promises');",
153
+ " await appendFile(stepSummary, `${html}\\n`, { encoding: 'utf8' });",
154
+ ' } catch (e: any) {',
155
+ " console.error('Failed to append to GITHUB_STEP_SUMMARY:', e?.message || e);",
156
+ ' }',
157
+ ' }',
158
+ '',
159
+ ' const commentUrl = process.env.GITHUB_COMMENT_URL;',
160
+ ' const token = process.env.GITHUB_TOKEN;',
161
+ ' if (commentUrl && token) {',
162
+ ' await postGithubComment(commentUrl, token, html);',
163
+ ' }',
164
+ '',
165
+ ' process.exit(1);',
166
+ ' }',
167
+ '',
168
+ ' // No drift case',
169
+ ' if (outputFile) {',
170
+ ' try {',
171
+ " const { writeFile } = await import('fs/promises');",
172
+ ' const result = [',
173
+ ' {',
174
+ ' stackName,',
175
+ " driftStatus: 'IN_SYNC',",
176
+ ' driftedResources: [],',
177
+ ' },',
178
+ ' ];',
179
+ " await writeFile(outputFile, JSON.stringify(result, null, 2), { encoding: 'utf8' });",
180
+ ' } catch (e: any) {',
181
+ " console.error('Failed to write drift JSON results:', e?.message || e);",
182
+ ' }',
183
+ ' }',
184
+ " console.log('No drift detected (IN_SYNC)');",
185
+ '}',
186
+ '',
187
+ 'main().catch((e) => {',
188
+ ' console.error(e);',
189
+ ' process.exit(1);',
190
+ '});',
191
+ ],
192
+ });
193
+ }
194
+ }
195
+ exports.CdkDriftDetectionScript = CdkDriftDetectionScript;
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRyaWZ0LWRldGVjdGlvbi1zY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2Nkay1kcmlmdC1kZXRlY3Rpb24tc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFrQztBQVFsQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLHVCQUF1QjtJQUNsQyxZQUFZLEtBQW1DO1FBQzdDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksMkNBQTJDLENBQUM7UUFFbkYsSUFBSSxpQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3RDLEtBQUssRUFBRTtnQkFDTCxpUkFBaVI7Z0JBQ2pSLEVBQUU7Z0JBQ0Ysb0NBQW9DO2dCQUNwQyxpREFBaUQ7Z0JBQ2pELEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRix5QkFBeUI7Z0JBQ3pCLDZDQUE2QztnQkFDN0MscUJBQXFCO2dCQUNyQixzREFBc0Q7Z0JBQ3RELHNCQUFzQjtnQkFDdEIsS0FBSztnQkFDTCxFQUFFO2dCQUNGLDhGQUE4RjtnQkFDOUYsZ0RBQWdEO2dCQUNoRCxFQUFFO2dCQUNGLDRGQUE0RjtnQkFDNUYsd0NBQXdDO2dCQUN4Qyx1REFBdUQ7Z0JBQ3ZELHNCQUFzQjtnQkFDdEIsS0FBSztnQkFDTCxFQUFFO2dCQUNGLDRDQUE0QztnQkFDNUMsa0RBQWtEO2dCQUNsRCxFQUFFO2dCQUNGLGtEQUFrRDtnQkFDbEQsNkNBQTZDO2dCQUM3QyxFQUFFO2dCQUNGLHlEQUF5RDtnQkFDekQsd0JBQXdCO2dCQUN4QixvQ0FBb0M7Z0JBQ3BDLG9GQUFvRjtnQkFDcEYsUUFBUTtnQkFDUix5REFBeUQ7Z0JBQ3pELDhDQUE4QztnQkFDOUMsMERBQTBEO2dCQUMxRCxLQUFLO2dCQUNMLEVBQUU7Z0JBQ0YsMERBQTBEO2dCQUMxRCxpRUFBaUU7Z0JBQ2pFLDBFQUEwRTtnQkFDMUUsZ0NBQWdDO2dCQUNoQyw0QkFBNEI7Z0JB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aWxlIH0gZnJvbSAncHJvamVuJztcblxuaW50ZXJmYWNlIENka0RyaWZ0RGV0ZWN0aW9uU2NyaXB0UHJvcHMge1xuICAvLyBBdm9pZCBleHBvcnRpbmcgcHJvamVuIHR5cGVzIGluIHB1YmxpYyBBUElcbiAgcHJvamVjdDogYW55O1xuICBvdXRwdXRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb2plbiBoZWxwZXIgdG8gZW1pdCB0aGUgZHJpZnQgZGV0ZWN0aW9uIHNjcmlwdCBpbnRvIHRoZSByZXBvc2l0b3J5IHNvXG4gKiBHaXRIdWIgd29ya2Zsb3dzIGNhbiBleGVjdXRlIGl0IGZyb20gYSBzdGFibGUgbG9jYXRpb24uXG4gKlxuICogVGhpcyBtaXJyb3JzIHRoZSBwYXR0ZXJuIHVzZWQgYnkgQ2RrQ2hhbmdlc2V0U2NyaXB0LCBidXQgd3JpdGVzIHRoZVxuICogZHJpZnQgc2NyaXB0IChkZXRlY3QtZHJpZnQudHMpIHVuZGVyIHRoZSB3b3JrZmxvd3Mgc2NyaXB0cyBkaXJlY3RvcnkgYnkgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RyaWZ0RGV0ZWN0aW9uU2NyaXB0IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENka0RyaWZ0RGV0ZWN0aW9uU2NyaXB0UHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnLmdpdGh1Yi93b3JrZmxvd3Mvc2NyaXB0cy9kZXRlY3QtZHJpZnQudHMnO1xuXG4gICAgbmV3IFRleHRGaWxlKHByb3BzLnByb2plY3QsIG91dHB1dFBhdGgsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIFwiaW1wb3J0IHtcXG4gIENsb3VkRm9ybWF0aW9uQ2xpZW50LFxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZCxcXG4gIERldGVjdFN0YWNrRHJpZnRDb21tYW5kLFxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZCxcXG4gIHR5cGUgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCxcXG4gIHR5cGUgU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLFxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcIixcbiAgICAgICAgJycsXG4gICAgICAgICdhc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7JyxcbiAgICAgICAgJyAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7JyxcbiAgICAgICAgJyAgY29uc3Qgc3RhY2tOYW1lID0gcHJvY2Vzcy5lbnYuU1RBQ0tfTkFNRTsnLFxuICAgICAgICAnICBpZiAoIXN0YWNrTmFtZSkgeycsXG4gICAgICAgIFwiICAgIGNvbnNvbGUuZXJyb3IoJ1NUQUNLX05BTUUgZW52IHZhciBpcyByZXF1aXJlZCcpO1wiLFxuICAgICAgICAnICAgIHByb2Nlc3MuZXhpdCgxKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIFJlZ2lvbiBhbmQgY3JlZGVudGlhbHMgcHVsbGVkIGZyb20gZW52aXJvbm1lbnQgc2V0IGJ5IGFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFscycsXG4gICAgICAgICcgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7fSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGNvbnN0IGRldGVjdCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pKTsnLFxuICAgICAgICAnICBpZiAoIWRldGVjdC5TdGFja0RyaWZ0RGV0ZWN0aW9uSWQpIHsnLFxuICAgICAgICBcIiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgZHJpZnQgZGV0ZWN0aW9uJyk7XCIsXG4gICAgICAgICcgICAgcHJvY2Vzcy5leGl0KDEpOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgY29uc3QgaWQgPSBkZXRlY3QuU3RhY2tEcmlmdERldGVjdGlvbklkOycsXG4gICAgICAgICcgIGNvbnNvbGUubG9nKGBEcmlmdCBkZXRlY3Rpb24gc3RhcnRlZDogJHtpZH1gKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIGxldCBkZXRlY3Rpb25TdGF0dXMgPSAnREVURUNUSU9OX0lOX1BST0dSRVNTJztcIixcbiAgICAgICAgJyAgbGV0IHN0YWNrRHJpZnRTdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgIHdoaWxlIChkZXRlY3Rpb25TdGF0dXMgPT09ICdERVRFQ1RJT05fSU5fUFJPR1JFU1MnKSB7XCIsXG4gICAgICAgICcgICAgYXdhaXQgc2xlZXAoNTAwMCk7JyxcbiAgICAgICAgJyAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuc2VuZCgnLFxuICAgICAgICAnICAgICAgbmV3IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmQoeyBTdGFja0RyaWZ0RGV0ZWN0aW9uSWQ6IGlkIH0pLCcsXG4gICAgICAgICcgICAgKTsnLFxuICAgICAgICBcIiAgICBkZXRlY3Rpb25TdGF0dXMgPSByZXMuRGV0ZWN0aW9uU3RhdHVzID8/ICdVTktOT1dOJztcIixcbiAgICAgICAgJyAgICBzdGFja0RyaWZ0U3RhdHVzID0gcmVzLlN0YWNrRHJpZnRTdGF0dXM7JyxcbiAgICAgICAgJyAgICBjb25zb2xlLmxvZyhgRGV0ZWN0aW9uIHN0YXR1czogJHtkZXRlY3Rpb25TdGF0dXN9YCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAvLyBIZWxwZXIgdG8gYnVpbGQgYW4gSFRNTCByZXBvcnQgb2YgZHJpZnRlZCByZXNvdXJjZXMnLFxuICAgICAgICAnICBjb25zdCBidWlsZEh0bWwgPSAoc3RhY2s6IHN0cmluZywgZHJpZnRzOiBhbnlbXSk6IHN0cmluZyA9PiB7JyxcbiAgICAgICAgJyAgICBsZXQgYm9keSA9IGA8aDE+RHJpZnQgcmVwb3J0PC9oMT48aDI+U3RhY2sgTmFtZTogJHtzdGFja308L2gyPjxicj5gOycsXG4gICAgICAgICcgICAgaWYgKGRyaWZ0cy5sZW5ndGggPT09IDApIHsnLFxuICAgICAgICBcIiAgICAgIGJvZHkgKz0gJ25vIGRyaWZ0Lic7XCIsXG4gICAgICAgICcgICAgICByZXR1cm4gYm9keTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICBcIiAgICBib2R5ICs9ICc8dGFibGU+JyArXCIsXG4gICAgICAgIFwiICAgICAgJzx0cj48dGg+U3RhdHVzPC90aD48dGg+SUQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGlmZmVyZW5jZXM8L3RoPjwvdHI+JztcIixcbiAgICAgICAgJyAgICBmb3IgKGNvbnN0IGQgb2YgZHJpZnRzKSB7JyxcbiAgICAgICAgXCIgICAgICBjb25zdCBzdGF0dXMgPSBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA/PyAnLSc7XCIsXG4gICAgICAgIFwiICAgICAgY29uc3QgbG9naWNhbElkID0gZC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnLSc7XCIsXG4gICAgICAgIFwiICAgICAgY29uc3QgdHlwZSA9IGQuUmVzb3VyY2VUeXBlID8/ICctJztcIixcbiAgICAgICAgJyAgICAgIGNvbnN0IGRpZmZzID0gKGQuUHJvcGVydHlEaWZmZXJlbmNlcyA/PyBbXSkubWFwKChwZDogYW55KSA9PiB7JyxcbiAgICAgICAgXCIgICAgICAgIGNvbnN0IHAgPSBwZC5Qcm9wZXJ0eVBhdGggPz8gJy0nO1wiLFxuICAgICAgICBcIiAgICAgICAgY29uc3QgdCA9IHBkLkRpZmZlcmVuY2VUeXBlID8/ICctJztcIixcbiAgICAgICAgJyAgICAgICAgcmV0dXJuIGAtICR7dH06ICR7cH1gOycsXG4gICAgICAgIFwiICAgICAgfSkuam9pbignPGJyPicpO1wiLFxuICAgICAgICBcIiAgICAgIGNvbnN0IHN0YXR1c0Vtb2ppID0gc3RhdHVzID09PSAnTU9ESUZJRUQnID8gJ/Cfn6AnIDogc3RhdHVzID09PSAnREVMRVRFRCcgPyAn8J+UtCcgOiBzdGF0dXMgPT09ICdOT1RfQ0hFQ0tFRCcgPyAn4pqqJyA6ICfwn5+iJztcIixcbiAgICAgICAgXCIgICAgICBib2R5ICs9ICc8dHI+JyArXCIsXG4gICAgICAgICcgICAgICAgIGA8dGQ+JHtzdGF0dXNFbW9qaX0gJHtzdGF0dXN9PC90ZD5gICsnLFxuICAgICAgICAnICAgICAgICBgPHRkPiR7bG9naWNhbElkfTwvdGQ+YCArJyxcbiAgICAgICAgJyAgICAgICAgYDx0ZD4ke3R5cGV9PC90ZD5gICsnLFxuICAgICAgICAnICAgICAgICBgPHRkPiR7ZGlmZnN9PC90ZD5gICsnLFxuICAgICAgICBcIiAgICAgICAgJzwvdHI+JztcIixcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgXCIgICAgYm9keSArPSAnPC90YWJsZT4nO1wiLFxuICAgICAgICAnICAgIHJldHVybiBib2R5OycsXG4gICAgICAgICcgIH07JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGFzeW5jIGZ1bmN0aW9uIGxpc3REcmlmdGVkUmVzb3VyY2VzKCk6IFByb21pc2U8YW55W10+IHsnLFxuICAgICAgICAnICAgIGNvbnN0IHJlc3VsdHM6IGFueVtdID0gW107JyxcbiAgICAgICAgJyAgICAvLyBPbmx5IGluY2x1ZGUgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBJTl9TWU5DJyxcbiAgICAgICAgXCIgICAgY29uc3QgZmlsdGVyczogU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzW10gPSBbJ01PRElGSUVEJywgJ0RFTEVURUQnLCAnTk9UX0NIRUNLRUQnXTtcIixcbiAgICAgICAgJyAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7JyxcbiAgICAgICAgJyAgICBkbyB7JyxcbiAgICAgICAgJyAgICAgIGNvbnN0IHJlc3A6IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZCh7JyxcbiAgICAgICAgJyAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsJyxcbiAgICAgICAgJyAgICAgICAgTmV4dFRva2VuOiBuZXh0VG9rZW4sJyxcbiAgICAgICAgJyAgICAgICAgU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzRmlsdGVyczogZmlsdGVycywnLFxuICAgICAgICAnICAgICAgfSkpOycsXG4gICAgICAgICcgICAgICBpZiAocmVzcC5TdGFja1Jlc291cmNlRHJpZnRzKSByZXN1bHRzLnB1c2goLi4ucmVzcC5TdGFja1Jlc291cmNlRHJpZnRzKTsnLFxuICAgICAgICAnICAgICAgbmV4dFRva2VuID0gcmVzcC5OZXh0VG9rZW47JyxcbiAgICAgICAgJyAgICB9IHdoaWxlIChuZXh0VG9rZW4pOycsXG4gICAgICAgICcgICAgcmV0dXJuIHJlc3VsdHM7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICBhc3luYyBmdW5jdGlvbiBwb3N0R2l0aHViQ29tbWVudCh1cmw6IHN0cmluZywgdG9rZW46IHN0cmluZywgYm9keTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7JyxcbiAgICAgICAgJyAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsnLFxuICAgICAgICBcIiAgICAgIG1ldGhvZDogJ1BPU1QnLFwiLFxuICAgICAgICAnICAgICAgaGVhZGVyczogeycsXG4gICAgICAgIFwiICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke3Rva2VufWAsXCIsXG4gICAgICAgIFwiICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFwiLFxuICAgICAgICBcIiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFwiLFxuICAgICAgICAnICAgICAgfSwnLFxuICAgICAgICAnICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBib2R5IH0pLCcsXG4gICAgICAgICcgICAgfSk7JyxcbiAgICAgICAgJyAgICBpZiAoIXJlcy5vaykgeycsXG4gICAgICAgICcgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiBcXCdcXCcpOycsXG4gICAgICAgICcgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcG9zdCBHaXRIdWIgY29tbWVudDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAke3RleHR9YCk7JyxcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAvLyBXaGVuIHRoZXJlIGlzIGRyaWZ0LCBjb2xsZWN0IGRldGFpbHMgYW5kIHBvc3QgYSBQUiBjb21tZW50ICsgc3RlcCBzdW1tYXJ5JyxcbiAgICAgICAgJyAgY29uc3Qgb3V0cHV0RmlsZSA9IHByb2Nlc3MuZW52LkRSSUZUX0RFVEVDVElPTl9PVVRQVVQ7JyxcbiAgICAgICAgXCIgIGlmIChzdGFja0RyaWZ0U3RhdHVzICE9PSAnSU5fU1lOQycpIHtcIixcbiAgICAgICAgJyAgICBjb25zb2xlLmVycm9yKGBEcmlmdCBkZXRlY3RlZCAoc3RhdHVzOiAke3N0YWNrRHJpZnRTdGF0dXN9KWApOycsXG4gICAgICAgICcgICAgY29uc3QgZHJpZnRzID0gYXdhaXQgbGlzdERyaWZ0ZWRSZXNvdXJjZXMoKTsnLFxuICAgICAgICAnICAgIGNvbnN0IGh0bWwgPSBidWlsZEh0bWwoc3RhY2tOYW1lLCBkcmlmdHMpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIC8vIFdyaXRlIG1hY2hpbmUtcmVhZGFibGUgSlNPTiBpZiByZXF1ZXN0ZWQnLFxuICAgICAgICAnICAgIGlmIChvdXRwdXRGaWxlKSB7JyxcbiAgICAgICAgJyAgICAgIHRyeSB7JyxcbiAgICAgICAgXCIgICAgICAgIGNvbnN0IHsgd3JpdGVGaWxlIH0gPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XCIsXG4gICAgICAgICcgICAgICAgIGNvbnN0IHJlc3VsdCA9IFsnLFxuICAgICAgICAnICAgICAgICAgIHsnLFxuICAgICAgICAnICAgICAgICAgICAgc3RhY2tOYW1lLCcsXG4gICAgICAgICcgICAgICAgICAgICBkcmlmdFN0YXR1czogc3RhY2tEcmlmdFN0YXR1cywnLFxuICAgICAgICAnICAgICAgICAgICAgZHJpZnRlZFJlc291cmNlczogKGRyaWZ0cyB8fCBbXSkubWFwKGQgPT4gKHsnLFxuICAgICAgICAnICAgICAgICAgICAgICBsb2dpY2FsUmVzb3VyY2VJZDogZC5Mb2dpY2FsUmVzb3VyY2VJZCwnLFxuICAgICAgICAnICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IGQuUmVzb3VyY2VUeXBlLCcsXG4gICAgICAgICcgICAgICAgICAgICAgIHN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1czogZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsJyxcbiAgICAgICAgJyAgICAgICAgICAgICAgcHJvcGVydHlEaWZmZXJlbmNlczogZC5Qcm9wZXJ0eURpZmZlcmVuY2VzLCcsXG4gICAgICAgICcgICAgICAgICAgICB9KSksJyxcbiAgICAgICAgJyAgICAgICAgICB9LCcsXG4gICAgICAgICcgICAgICAgIF07JyxcbiAgICAgICAgXCIgICAgICAgIGF3YWl0IHdyaXRlRmlsZShvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XCIsXG4gICAgICAgICcgICAgICB9IGNhdGNoIChlOiBhbnkpIHsnLFxuICAgICAgICBcIiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHdyaXRlIGRyaWZ0IEpTT04gcmVzdWx0czonLCBlPy5tZXNzYWdlIHx8IGUpO1wiLFxuICAgICAgICAnICAgICAgfScsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIC8vIFByaW50IHRvIHN0ZG91dCBhbmQgYXBwZW5kIHRvIHN1bW1hcnkgaWYgYXZhaWxhYmxlJyxcbiAgICAgICAgJyAgICBjb25zb2xlLmxvZyhodG1sKTsnLFxuICAgICAgICAnICAgIGNvbnN0IHN0ZXBTdW1tYXJ5ID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1NURVBfU1VNTUFSWTsnLFxuICAgICAgICAnICAgIGlmIChzdGVwU3VtbWFyeSkgeycsXG4gICAgICAgICcgICAgICB0cnkgeycsXG4gICAgICAgIFwiICAgICAgICBjb25zdCB7IGFwcGVuZEZpbGUgfSA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcIixcbiAgICAgICAgXCIgICAgICAgIGF3YWl0IGFwcGVuZEZpbGUoc3RlcFN1bW1hcnksIGAke2h0bWx9XFxcXG5gLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XCIsXG4gICAgICAgICcgICAgICB9IGNhdGNoIChlOiBhbnkpIHsnLFxuICAgICAgICBcIiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGVuZCB0byBHSVRIVUJfU1RFUF9TVU1NQVJZOicsIGU/Lm1lc3NhZ2UgfHwgZSk7XCIsXG4gICAgICAgICcgICAgICB9JyxcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgY29uc3QgY29tbWVudFVybCA9IHByb2Nlc3MuZW52LkdJVEhVQl9DT01NRU5UX1VSTDsnLFxuICAgICAgICAnICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOOycsXG4gICAgICAgICcgICAgaWYgKGNvbW1lbnRVcmwgJiYgdG9rZW4pIHsnLFxuICAgICAgICAnICAgICAgYXdhaXQgcG9zdEdpdGh1YkNvbW1lbnQoY29tbWVudFVybCwgdG9rZW4sIGh0bWwpOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIHByb2Nlc3MuZXhpdCgxKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8vIE5vIGRyaWZ0IGNhc2UnLFxuICAgICAgICAnICBpZiAob3V0cHV0RmlsZSkgeycsXG4gICAgICAgICcgICAgdHJ5IHsnLFxuICAgICAgICBcIiAgICAgIGNvbnN0IHsgd3JpdGVGaWxlIH0gPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XCIsXG4gICAgICAgICcgICAgICBjb25zdCByZXN1bHQgPSBbJyxcbiAgICAgICAgJyAgICAgICAgeycsXG4gICAgICAgICcgICAgICAgICAgc3RhY2tOYW1lLCcsXG4gICAgICAgIFwiICAgICAgICAgIGRyaWZ0U3RhdHVzOiAnSU5fU1lOQycsXCIsXG4gICAgICAgICcgICAgICAgICAgZHJpZnRlZFJlc291cmNlczogW10sJyxcbiAgICAgICAgJyAgICAgICAgfSwnLFxuICAgICAgICAnICAgICAgXTsnLFxuICAgICAgICBcIiAgICAgIGF3YWl0IHdyaXRlRmlsZShvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XCIsXG4gICAgICAgICcgICAgfSBjYXRjaCAoZTogYW55KSB7JyxcbiAgICAgICAgXCIgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd3JpdGUgZHJpZnQgSlNPTiByZXN1bHRzOicsIGU/Lm1lc3NhZ2UgfHwgZSk7XCIsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICBcIiAgY29uc29sZS5sb2coJ05vIGRyaWZ0IGRldGVjdGVkIChJTl9TWU5DKScpO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnbWFpbigpLmNhdGNoKChlKSA9PiB7JyxcbiAgICAgICAgJyAgY29uc29sZS5lcnJvcihlKTsnLFxuICAgICAgICAnICBwcm9jZXNzLmV4aXQoMSk7JyxcbiAgICAgICAgJ30pOycsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -90,10 +90,33 @@ async function main() {
90
90
  }
91
91
  }
92
92
  // When there is drift, collect details and post a PR comment + step summary
93
+ const outputFile = process.env.DRIFT_DETECTION_OUTPUT;
93
94
  if (stackDriftStatus !== 'IN_SYNC') {
94
95
  console.error(`Drift detected (status: ${stackDriftStatus})`);
95
96
  const drifts = await listDriftedResources();
96
97
  const html = buildHtml(stackName, drifts);
98
+ // Write machine-readable JSON if requested
99
+ if (outputFile) {
100
+ try {
101
+ const { writeFile } = await Promise.resolve().then(() => require('fs/promises'));
102
+ const result = [
103
+ {
104
+ stackName,
105
+ driftStatus: stackDriftStatus,
106
+ driftedResources: (drifts || []).map(d => ({
107
+ logicalResourceId: d.LogicalResourceId,
108
+ resourceType: d.ResourceType,
109
+ stackResourceDriftStatus: d.StackResourceDriftStatus,
110
+ propertyDifferences: d.PropertyDifferences,
111
+ })),
112
+ },
113
+ ];
114
+ await writeFile(outputFile, JSON.stringify(result, null, 2), { encoding: 'utf8' });
115
+ }
116
+ catch (e) {
117
+ console.error('Failed to write drift JSON results:', e?.message || e);
118
+ }
119
+ }
97
120
  // Print to stdout and append to summary if available
98
121
  console.log(html);
99
122
  const stepSummary = process.env.GITHUB_STEP_SUMMARY;
@@ -113,10 +136,27 @@ async function main() {
113
136
  }
114
137
  process.exit(1);
115
138
  }
139
+ // No drift case
140
+ if (outputFile) {
141
+ try {
142
+ const { writeFile } = await Promise.resolve().then(() => require('fs/promises'));
143
+ const result = [
144
+ {
145
+ stackName,
146
+ driftStatus: 'IN_SYNC',
147
+ driftedResources: [],
148
+ },
149
+ ];
150
+ await writeFile(outputFile, JSON.stringify(result, null, 2), { encoding: 'utf8' });
151
+ }
152
+ catch (e) {
153
+ console.error('Failed to write drift JSON results:', e?.message || e);
154
+ }
155
+ }
116
156
  console.log('No drift detected (IN_SYNC)');
117
157
  }
118
158
  main().catch((e) => {
119
159
  console.error(e);
120
160
  process.exit(1);
121
161
  });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWRyaWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9kZXRlY3QtZHJpZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFPd0M7QUFFeEMsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFVO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFJLDRDQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLCtDQUF1QixDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLElBQUksZUFBZSxHQUFHLHVCQUF1QixDQUFDO0lB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kLFxuICBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0LFxuICB0eXBlIFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3Qgc3RhY2tOYW1lID0gcHJvY2Vzcy5lbnYuU1RBQ0tfTkFNRTtcbiAgaWYgKCFzdGFja05hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKCdTVEFDS19OQU1FIGVudiB2YXIgaXMgcmVxdWlyZWQnKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBSZWdpb24gYW5kIGNyZWRlbnRpYWxzIHB1bGxlZCBmcm9tIGVudmlyb25tZW50IHNldCBieSBhY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNcbiAgY29uc3QgY2xpZW50ID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHt9KTtcblxuICBjb25zdCBkZXRlY3QgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmQoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSk7XG4gIGlmICghZGV0ZWN0LlN0YWNrRHJpZnREZXRlY3Rpb25JZCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBkcmlmdCBkZXRlY3Rpb24nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBpZCA9IGRldGVjdC5TdGFja0RyaWZ0RGV0ZWN0aW9uSWQ7XG4gIGNvbnNvbGUubG9nKGBEcmlmdCBkZXRlY3Rpb24gc3RhcnRlZDogJHtpZH1gKTtcblxuICBsZXQgZGV0ZWN0aW9uU3RhdHVzID0gJ0RFVEVDVElPTl9JTl9QUk9HUkVTUyc7XG4gIGxldCBzdGFja0RyaWZ0U3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgd2hpbGUgKGRldGVjdGlvblN0YXR1cyA9PT0gJ0RFVEVDVElPTl9JTl9QUk9HUkVTUycpIHtcbiAgICBhd2FpdCBzbGVlcCg1MDAwKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kKHsgU3RhY2tEcmlmdERldGVjdGlvbklkOiBpZCB9KSxcbiAgICApO1xuICAgIGRldGVjdGlvblN0YXR1cyA9IHJlcy5EZXRlY3Rpb25TdGF0dXMgPz8gJ1VOS05PV04nO1xuICAgIHN0YWNrRHJpZnRTdGF0dXMgPSByZXMuU3RhY2tEcmlmdFN0YXR1cztcbiAgICBjb25zb2xlLmxvZyhgRGV0ZWN0aW9uIHN0YXR1czogJHtkZXRlY3Rpb25TdGF0dXN9YCk7XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gYnVpbGQgYW4gSFRNTCByZXBvcnQgb2YgZHJpZnRlZCByZXNvdXJjZXNcbiAgY29uc3QgYnVpbGRIdG1sID0gKHN0YWNrOiBzdHJpbmcsIGRyaWZ0czogYW55W10pOiBzdHJpbmcgPT4ge1xuICAgIGxldCBib2R5ID0gYDxoMT5EcmlmdCByZXBvcnQ8L2gxPjxoMj5TdGFjayBOYW1lOiAke3N0YWNrfTwvaDI+PGJyPmA7XG4gICAgaWYgKGRyaWZ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGJvZHkgKz0gJ25vIGRyaWZ0Lic7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gICAgYm9keSArPSAnPHRhYmxlPicgK1xuICAgICAgJzx0cj48dGg+U3RhdHVzPC90aD48dGg+SUQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGlmZmVyZW5jZXM8L3RoPjwvdHI+JztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZHJpZnRzKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA/PyAnLSc7XG4gICAgICBjb25zdCBsb2dpY2FsSWQgPSBkLkxvZ2ljYWxSZXNvdXJjZUlkID8/ICctJztcbiAgICAgIGNvbnN0IHR5cGUgPSBkLlJlc291cmNlVHlwZSA/PyAnLSc7XG4gICAgICBjb25zdCBkaWZmcyA9IChkLlByb3BlcnR5RGlmZmVyZW5jZXMgPz8gW10pLm1hcCgocGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcGQuUHJvcGVydHlQYXRoID8/ICctJztcbiAgICAgICAgY29uc3QgdCA9IHBkLkRpZmZlcmVuY2VUeXBlID8/ICctJztcbiAgICAgICAgcmV0dXJuIGAtICR7dH06ICR7cH1gO1xuICAgICAgfSkuam9pbignPGJyPicpO1xuICAgICAgY29uc3Qgc3RhdHVzRW1vamkgPSBzdGF0dXMgPT09ICdNT0RJRklFRCcgPyAn8J+foCcgOiBzdGF0dXMgPT09ICdERUxFVEVEJyA/ICfwn5S0JyA6IHN0YXR1cyA9PT0gJ05PVF9DSEVDS0VEJyA/ICfimqonIDogJ/Cfn6InO1xuICAgICAgYm9keSArPSAnPHRyPicgK1xuICAgICAgICBgPHRkPiR7c3RhdHVzRW1vaml9ICR7c3RhdHVzfTwvdGQ+YCArXG4gICAgICAgIGA8dGQ+JHtsb2dpY2FsSWR9PC90ZD5gICtcbiAgICAgICAgYDx0ZD4ke3R5cGV9PC90ZD5gICtcbiAgICAgICAgYDx0ZD4ke2RpZmZzfTwvdGQ+YCArXG4gICAgICAgICc8L3RyPic7XG4gICAgfVxuICAgIGJvZHkgKz0gJzwvdGFibGU+JztcbiAgICByZXR1cm4gYm9keTtcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBsaXN0RHJpZnRlZFJlc291cmNlcygpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBbXTtcbiAgICAvLyBPbmx5IGluY2x1ZGUgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBJTl9TWU5DXG4gICAgY29uc3QgZmlsdGVyczogU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzW10gPSBbJ01PRElGSUVEJywgJ0RFTEVURUQnLCAnTk9UX0NIRUNLRUQnXTtcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzcDogRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgICBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXNGaWx0ZXJzOiBmaWx0ZXJzLFxuICAgICAgfSkpO1xuICAgICAgaWYgKHJlc3AuU3RhY2tSZXNvdXJjZURyaWZ0cykgcmVzdWx0cy5wdXNoKC4uLnJlc3AuU3RhY2tSZXNvdXJjZURyaWZ0cyk7XG4gICAgICBuZXh0VG9rZW4gPSByZXNwLk5leHRUb2tlbjtcbiAgICB9IHdoaWxlIChuZXh0VG9rZW4pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcG9zdEdpdGh1YkNvbW1lbnQodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYHRva2VuICR7dG9rZW59YCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYm9keSB9KSxcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gJycpO1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBvc3QgR2l0SHViIGNvbW1lbnQ6ICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH0gJHt0ZXh0fWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdoZW4gdGhlcmUgaXMgZHJpZnQsIGNvbGxlY3QgZGV0YWlscyBhbmQgcG9zdCBhIFBSIGNvbW1lbnQgKyBzdGVwIHN1bW1hcnlcbiAgaWYgKHN0YWNrRHJpZnRTdGF0dXMgIT09ICdJTl9TWU5DJykge1xuICAgIGNvbnNvbGUuZXJyb3IoYERyaWZ0IGRldGVjdGVkIChzdGF0dXM6ICR7c3RhY2tEcmlmdFN0YXR1c30pYCk7XG4gICAgY29uc3QgZHJpZnRzID0gYXdhaXQgbGlzdERyaWZ0ZWRSZXNvdXJjZXMoKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRIdG1sKHN0YWNrTmFtZSwgZHJpZnRzKTtcblxuICAgIC8vIFByaW50IHRvIHN0ZG91dCBhbmQgYXBwZW5kIHRvIHN1bW1hcnkgaWYgYXZhaWxhYmxlXG4gICAgY29uc29sZS5sb2coaHRtbCk7XG4gICAgY29uc3Qgc3RlcFN1bW1hcnkgPSBwcm9jZXNzLmVudi5HSVRIVUJfU1RFUF9TVU1NQVJZO1xuICAgIGlmIChzdGVwU3VtbWFyeSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBhcHBlbmRGaWxlIH0gPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XG4gICAgICAgIGF3YWl0IGFwcGVuZEZpbGUoc3RlcFN1bW1hcnksIGAke2h0bWx9XFxuYCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhcHBlbmQgdG8gR0lUSFVCX1NURVBfU1VNTUFSWTonLCBlPy5tZXNzYWdlIHx8IGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRVcmwgPSBwcm9jZXNzLmVudi5HSVRIVUJfQ09NTUVOVF9VUkw7XG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgaWYgKGNvbW1lbnRVcmwgJiYgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHBvc3RHaXRodWJDb21tZW50KGNvbW1lbnRVcmwsIHRva2VuLCBodG1sKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgY29uc29sZS5sb2coJ05vIGRyaWZ0IGRldGVjdGVkIChJTl9TWU5DKScpO1xufVxuXG5tYWluKCkuY2F0Y2goKGUpID0+IHtcbiAgY29uc29sZS5lcnJvcihlKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWRyaWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9kZXRlY3QtZHJpZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFPd0M7QUFFeEMsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFVO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFJLDRDQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLCtDQUF1QixDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLElBQUksZUFBZSxHQUFHLHVCQUF1QixDQUFDO0lB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LENBQUMscUNBQXFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmQsXG4gIERldGVjdFN0YWNrRHJpZnRDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQsXG4gIHR5cGUgU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBzdGFja05hbWUgPSBwcm9jZXNzLmVudi5TVEFDS19OQU1FO1xuICBpZiAoIXN0YWNrTmFtZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1NUQUNLX05BTUUgZW52IHZhciBpcyByZXF1aXJlZCcpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIFJlZ2lvbiBhbmQgY3JlZGVudGlhbHMgcHVsbGVkIGZyb20gZW52aXJvbm1lbnQgc2V0IGJ5IGFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc1xuICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoe30pO1xuXG4gIGNvbnN0IGRldGVjdCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pKTtcbiAgaWYgKCFkZXRlY3QuU3RhY2tEcmlmdERldGVjdGlvbklkKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGRyaWZ0IGRldGVjdGlvbicpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IGlkID0gZGV0ZWN0LlN0YWNrRHJpZnREZXRlY3Rpb25JZDtcbiAgY29uc29sZS5sb2coYERyaWZ0IGRldGVjdGlvbiBzdGFydGVkOiAke2lkfWApO1xuXG4gIGxldCBkZXRlY3Rpb25TdGF0dXMgPSAnREVURUNUSU9OX0lOX1BST0dSRVNTJztcbiAgbGV0IHN0YWNrRHJpZnRTdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB3aGlsZSAoZGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0lOX1BST0dSRVNTJykge1xuICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmQoeyBTdGFja0RyaWZ0RGV0ZWN0aW9uSWQ6IGlkIH0pLFxuICAgICk7XG4gICAgZGV0ZWN0aW9uU3RhdHVzID0gcmVzLkRldGVjdGlvblN0YXR1cyA/PyAnVU5LTk9XTic7XG4gICAgc3RhY2tEcmlmdFN0YXR1cyA9IHJlcy5TdGFja0RyaWZ0U3RhdHVzO1xuICAgIGNvbnNvbGUubG9nKGBEZXRlY3Rpb24gc3RhdHVzOiAke2RldGVjdGlvblN0YXR1c31gKTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBidWlsZCBhbiBIVE1MIHJlcG9ydCBvZiBkcmlmdGVkIHJlc291cmNlc1xuICBjb25zdCBidWlsZEh0bWwgPSAoc3RhY2s6IHN0cmluZywgZHJpZnRzOiBhbnlbXSk6IHN0cmluZyA9PiB7XG4gICAgbGV0IGJvZHkgPSBgPGgxPkRyaWZ0IHJlcG9ydDwvaDE+PGgyPlN0YWNrIE5hbWU6ICR7c3RhY2t9PC9oMj48YnI+YDtcbiAgICBpZiAoZHJpZnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYm9keSArPSAnbm8gZHJpZnQuJztcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH1cbiAgICBib2R5ICs9ICc8dGFibGU+JyArXG4gICAgICAnPHRyPjx0aD5TdGF0dXM8L3RoPjx0aD5JRDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EaWZmZXJlbmNlczwvdGg+PC90cj4nO1xuICAgIGZvciAoY29uc3QgZCBvZiBkcmlmdHMpIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID8/ICctJztcbiAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IGQuTG9naWNhbFJlc291cmNlSWQgPz8gJy0nO1xuICAgICAgY29uc3QgdHlwZSA9IGQuUmVzb3VyY2VUeXBlID8/ICctJztcbiAgICAgIGNvbnN0IGRpZmZzID0gKGQuUHJvcGVydHlEaWZmZXJlbmNlcyA/PyBbXSkubWFwKChwZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwZC5Qcm9wZXJ0eVBhdGggPz8gJy0nO1xuICAgICAgICBjb25zdCB0ID0gcGQuRGlmZmVyZW5jZVR5cGUgPz8gJy0nO1xuICAgICAgICByZXR1cm4gYC0gJHt0fTogJHtwfWA7XG4gICAgICB9KS5qb2luKCc8YnI+Jyk7XG4gICAgICBjb25zdCBzdGF0dXNFbW9qaSA9IHN0YXR1cyA9PT0gJ01PRElGSUVEJyA/ICfwn5+gJyA6IHN0YXR1cyA9PT0gJ0RFTEVURUQnID8gJ/CflLQnIDogc3RhdHVzID09PSAnTk9UX0NIRUNLRUQnID8gJ+KaqicgOiAn8J+foic7XG4gICAgICBib2R5ICs9ICc8dHI+JyArXG4gICAgICAgIGA8dGQ+JHtzdGF0dXNFbW9qaX0gJHtzdGF0dXN9PC90ZD5gICtcbiAgICAgICAgYDx0ZD4ke2xvZ2ljYWxJZH08L3RkPmAgK1xuICAgICAgICBgPHRkPiR7dHlwZX08L3RkPmAgK1xuICAgICAgICBgPHRkPiR7ZGlmZnN9PC90ZD5gICtcbiAgICAgICAgJzwvdHI+JztcbiAgICB9XG4gICAgYm9keSArPSAnPC90YWJsZT4nO1xuICAgIHJldHVybiBib2R5O1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGxpc3REcmlmdGVkUmVzb3VyY2VzKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIC8vIE9ubHkgaW5jbHVkZSByZXNvdXJjZXMgdGhhdCBhcmUgbm90IElOX1NZTkNcbiAgICBjb25zdCBmaWx0ZXJzOiBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXNbXSA9IFsnTU9ESUZJRUQnLCAnREVMRVRFRCcsICdOT1RfQ0hFQ0tFRCddO1xuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBkbyB7XG4gICAgICBjb25zdCByZXNwOiBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0ID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgTmV4dFRva2VuOiBuZXh0VG9rZW4sXG4gICAgICAgIFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1c0ZpbHRlcnM6IGZpbHRlcnMsXG4gICAgICB9KSk7XG4gICAgICBpZiAocmVzcC5TdGFja1Jlc291cmNlRHJpZnRzKSByZXN1bHRzLnB1c2goLi4ucmVzcC5TdGFja1Jlc291cmNlRHJpZnRzKTtcbiAgICAgIG5leHRUb2tlbiA9IHJlc3AuTmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwb3N0R2l0aHViQ29tbWVudCh1cmw6IHN0cmluZywgdG9rZW46IHN0cmluZywgYm9keTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBib2R5IH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcG9zdCBHaXRIdWIgY29tbWVudDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAke3RleHR9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2hlbiB0aGVyZSBpcyBkcmlmdCwgY29sbGVjdCBkZXRhaWxzIGFuZCBwb3N0IGEgUFIgY29tbWVudCArIHN0ZXAgc3VtbWFyeVxuICBjb25zdCBvdXRwdXRGaWxlID0gcHJvY2Vzcy5lbnYuRFJJRlRfREVURUNUSU9OX09VVFBVVDtcbiAgaWYgKHN0YWNrRHJpZnRTdGF0dXMgIT09ICdJTl9TWU5DJykge1xuICAgIGNvbnNvbGUuZXJyb3IoYERyaWZ0IGRldGVjdGVkIChzdGF0dXM6ICR7c3RhY2tEcmlmdFN0YXR1c30pYCk7XG4gICAgY29uc3QgZHJpZnRzID0gYXdhaXQgbGlzdERyaWZ0ZWRSZXNvdXJjZXMoKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRIdG1sKHN0YWNrTmFtZSwgZHJpZnRzKTtcblxuICAgIC8vIFdyaXRlIG1hY2hpbmUtcmVhZGFibGUgSlNPTiBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3V0cHV0RmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyB3cml0ZUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgICAgIGRyaWZ0U3RhdHVzOiBzdGFja0RyaWZ0U3RhdHVzLFxuICAgICAgICAgICAgZHJpZnRlZFJlc291cmNlczogKGRyaWZ0cyB8fCBbXSkubWFwKGQgPT4gKHtcbiAgICAgICAgICAgICAgbG9naWNhbFJlc291cmNlSWQ6IGQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogZC5SZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgIHN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1czogZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICAgICAgICAgIHByb3BlcnR5RGlmZmVyZW5jZXM6IGQuUHJvcGVydHlEaWZmZXJlbmNlcyxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUob3V0cHV0RmlsZSwgSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB3cml0ZSBkcmlmdCBKU09OIHJlc3VsdHM6JywgZT8ubWVzc2FnZSB8fCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmludCB0byBzdGRvdXQgYW5kIGFwcGVuZCB0byBzdW1tYXJ5IGlmIGF2YWlsYWJsZVxuICAgIGNvbnNvbGUubG9nKGh0bWwpO1xuICAgIGNvbnN0IHN0ZXBTdW1tYXJ5ID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1NURVBfU1VNTUFSWTtcbiAgICBpZiAoc3RlcFN1bW1hcnkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgYXBwZW5kRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCdmcy9wcm9taXNlcycpO1xuICAgICAgICBhd2FpdCBhcHBlbmRGaWxlKHN0ZXBTdW1tYXJ5LCBgJHtodG1sfVxcbmAsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYXBwZW5kIHRvIEdJVEhVQl9TVEVQX1NVTU1BUlk6JywgZT8ubWVzc2FnZSB8fCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50VXJsID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0NPTU1FTlRfVVJMO1xuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuICAgIGlmIChjb21tZW50VXJsICYmIHRva2VuKSB7XG4gICAgICBhd2FpdCBwb3N0R2l0aHViQ29tbWVudChjb21tZW50VXJsLCB0b2tlbiwgaHRtbCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gTm8gZHJpZnQgY2FzZVxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHdyaXRlRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCdmcy9wcm9taXNlcycpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICAgIGRyaWZ0U3RhdHVzOiAnSU5fU1lOQycsXG4gICAgICAgICAgZHJpZnRlZFJlc291cmNlczogW10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMiksIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB3cml0ZSBkcmlmdCBKU09OIHJlc3VsdHM6JywgZT8ubWVzc2FnZSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgY29uc29sZS5sb2coJ05vIGRyaWZ0IGRldGVjdGVkIChJTl9TWU5DKScpO1xufVxuXG5tYWluKCkuY2F0Y2goKGUpID0+IHtcbiAgY29uc29sZS5lcnJvcihlKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './CdkDiffStackWorkflow';
2
2
  export * from './CdkDiffIamTemplate';
3
3
  export * from './CdkDriftIamTemplate';
4
+ export * from './CdkDriftDetectionWorkflow';
package/lib/index.js CHANGED
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./CdkDiffStackWorkflow"), exports);
18
18
  __exportStar(require("./CdkDiffIamTemplate"), exports);
19
19
  __exportStar(require("./CdkDriftIamTemplate"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2Qyx1REFBcUM7QUFDckMsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9DZGtEaWZmU3RhY2tXb3JrZmxvdyc7XG5leHBvcnQgKiBmcm9tICcuL0Nka0RpZmZJYW1UZW1wbGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL0Nka0RyaWZ0SWFtVGVtcGxhdGUnO1xuIl19
20
+ __exportStar(require("./CdkDriftDetectionWorkflow"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2Qyx1REFBcUM7QUFDckMsd0RBQXNDO0FBQ3RDLDhEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vQ2RrRGlmZlN0YWNrV29ya2Zsb3cnO1xuZXhwb3J0ICogZnJvbSAnLi9DZGtEaWZmSWFtVGVtcGxhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9DZGtEcmlmdElhbVRlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvdyc7XG4iXX0=
@@ -26,7 +26,7 @@ export interface CloudFormationHttpAuthSchemeProvider extends HttpAuthSchemeProv
26
26
  */
27
27
  export declare const defaultCloudFormationHttpAuthSchemeProvider: CloudFormationHttpAuthSchemeProvider;
28
28
  /**
29
- * @internal
29
+ * @public
30
30
  */
31
31
  export interface HttpAuthSchemeInputConfig extends AwsSdkSigV4AuthInputConfig {
32
32
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-cloudformation",
3
3
  "description": "AWS SDK for JavaScript Cloudformation Client for Node.js, Browser and React Native",
4
- "version": "3.922.0",
4
+ "version": "3.927.0",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
7
7
  "build:cjs": "node ../../scripts/compilation/inline client-cloudformation",
@@ -20,18 +20,18 @@
20
20
  "dependencies": {
21
21
  "@aws-crypto/sha256-browser": "5.2.0",
22
22
  "@aws-crypto/sha256-js": "5.2.0",
23
- "@aws-sdk/core": "3.922.0",
24
- "@aws-sdk/credential-provider-node": "3.922.0",
23
+ "@aws-sdk/core": "3.927.0",
24
+ "@aws-sdk/credential-provider-node": "3.927.0",
25
25
  "@aws-sdk/middleware-host-header": "3.922.0",
26
26
  "@aws-sdk/middleware-logger": "3.922.0",
27
27
  "@aws-sdk/middleware-recursion-detection": "3.922.0",
28
- "@aws-sdk/middleware-user-agent": "3.922.0",
29
- "@aws-sdk/region-config-resolver": "3.922.0",
28
+ "@aws-sdk/middleware-user-agent": "3.927.0",
29
+ "@aws-sdk/region-config-resolver": "3.925.0",
30
30
  "@aws-sdk/types": "3.922.0",
31
31
  "@aws-sdk/util-endpoints": "3.922.0",
32
32
  "@aws-sdk/util-user-agent-browser": "3.922.0",
33
- "@aws-sdk/util-user-agent-node": "3.922.0",
34
- "@smithy/config-resolver": "^4.4.1",
33
+ "@aws-sdk/util-user-agent-node": "3.927.0",
34
+ "@smithy/config-resolver": "^4.4.2",
35
35
  "@smithy/core": "^3.17.2",
36
36
  "@smithy/fetch-http-handler": "^5.3.5",
37
37
  "@smithy/hash-node": "^4.2.4",
@@ -51,7 +51,7 @@
51
51
  "@smithy/util-body-length-browser": "^4.2.0",
52
52
  "@smithy/util-body-length-node": "^4.2.1",
53
53
  "@smithy/util-defaults-mode-browser": "^4.3.5",
54
- "@smithy/util-defaults-mode-node": "^4.2.7",
54
+ "@smithy/util-defaults-mode-node": "^4.2.8",
55
55
  "@smithy/util-endpoints": "^3.2.4",
56
56
  "@smithy/util-middleware": "^4.2.4",
57
57
  "@smithy/util-retry": "^4.2.4",
@@ -26,7 +26,7 @@ export interface SSOHttpAuthSchemeProvider extends HttpAuthSchemeProvider<SSOHtt
26
26
  */
27
27
  export declare const defaultSSOHttpAuthSchemeProvider: SSOHttpAuthSchemeProvider;
28
28
  /**
29
- * @internal
29
+ * @public
30
30
  */
31
31
  export interface HttpAuthSchemeInputConfig extends AwsSdkSigV4AuthInputConfig {
32
32
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-sso",
3
3
  "description": "AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",
4
- "version": "3.922.0",
4
+ "version": "3.927.0",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
7
7
  "build:cjs": "node ../../scripts/compilation/inline client-sso",
@@ -20,17 +20,17 @@
20
20
  "dependencies": {
21
21
  "@aws-crypto/sha256-browser": "5.2.0",
22
22
  "@aws-crypto/sha256-js": "5.2.0",
23
- "@aws-sdk/core": "3.922.0",
23
+ "@aws-sdk/core": "3.927.0",
24
24
  "@aws-sdk/middleware-host-header": "3.922.0",
25
25
  "@aws-sdk/middleware-logger": "3.922.0",
26
26
  "@aws-sdk/middleware-recursion-detection": "3.922.0",
27
- "@aws-sdk/middleware-user-agent": "3.922.0",
28
- "@aws-sdk/region-config-resolver": "3.922.0",
27
+ "@aws-sdk/middleware-user-agent": "3.927.0",
28
+ "@aws-sdk/region-config-resolver": "3.925.0",
29
29
  "@aws-sdk/types": "3.922.0",
30
30
  "@aws-sdk/util-endpoints": "3.922.0",
31
31
  "@aws-sdk/util-user-agent-browser": "3.922.0",
32
- "@aws-sdk/util-user-agent-node": "3.922.0",
33
- "@smithy/config-resolver": "^4.4.1",
32
+ "@aws-sdk/util-user-agent-node": "3.927.0",
33
+ "@smithy/config-resolver": "^4.4.2",
34
34
  "@smithy/core": "^3.17.2",
35
35
  "@smithy/fetch-http-handler": "^5.3.5",
36
36
  "@smithy/hash-node": "^4.2.4",
@@ -50,7 +50,7 @@
50
50
  "@smithy/util-body-length-browser": "^4.2.0",
51
51
  "@smithy/util-body-length-node": "^4.2.1",
52
52
  "@smithy/util-defaults-mode-browser": "^4.3.5",
53
- "@smithy/util-defaults-mode-node": "^4.2.7",
53
+ "@smithy/util-defaults-mode-node": "^4.2.8",
54
54
  "@smithy/util-endpoints": "^3.2.4",
55
55
  "@smithy/util-middleware": "^4.2.4",
56
56
  "@smithy/util-retry": "^4.2.4",
@@ -830,10 +830,7 @@ class JsonShapeSerializer extends SerdeContextConfig {
830
830
  if (ns === this.rootSchema) {
831
831
  return value;
832
832
  }
833
- if (!this.serdeContext?.base64Encoder) {
834
- return utilBase64.toBase64(value);
835
- }
836
- return this.serdeContext?.base64Encoder(value);
833
+ return (this.serdeContext?.base64Encoder ?? utilBase64.toBase64)(value);
837
834
  }
838
835
  if ((ns.isTimestampSchema() || ns.isDocumentSchema()) && value instanceof Date) {
839
836
  const format = protocols.determineTimestampFormat(ns, this.settings);
@@ -1469,7 +1466,14 @@ class AwsQueryProtocol extends protocols.RpcProtocol {
1469
1466
  Code: errorData.Code,
1470
1467
  Message: message,
1471
1468
  };
1472
- const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, errorData, metadata, (registry, errorName) => registry.find((schema$1) => schema.NormalizedSchema.of(schema$1).getMergedTraits().awsQueryError?.[0] === errorName));
1469
+ const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, errorData, metadata, (registry, errorName) => {
1470
+ try {
1471
+ return registry.getSchema(errorName);
1472
+ }
1473
+ catch (e) {
1474
+ return registry.find((schema$1) => schema.NormalizedSchema.of(schema$1).getMergedTraits().awsQueryError?.[0] === errorName);
1475
+ }
1476
+ });
1473
1477
  const ns = schema.NormalizedSchema.of(errorSchema);
1474
1478
  const ErrorCtor = schema.TypeRegistry.for(errorSchema[1]).getErrorCtor(errorSchema) ?? Error;
1475
1479
  const exception = new ErrorCtor(message);
@@ -500,10 +500,7 @@ class JsonShapeSerializer extends SerdeContextConfig {
500
500
  if (ns === this.rootSchema) {
501
501
  return value;
502
502
  }
503
- if (!this.serdeContext?.base64Encoder) {
504
- return utilBase64.toBase64(value);
505
- }
506
- return this.serdeContext?.base64Encoder(value);
503
+ return (this.serdeContext?.base64Encoder ?? utilBase64.toBase64)(value);
507
504
  }
508
505
  if ((ns.isTimestampSchema() || ns.isDocumentSchema()) && value instanceof Date) {
509
506
  const format = protocols.determineTimestampFormat(ns, this.settings);
@@ -1139,7 +1136,14 @@ class AwsQueryProtocol extends protocols.RpcProtocol {
1139
1136
  Code: errorData.Code,
1140
1137
  Message: message,
1141
1138
  };
1142
- const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, errorData, metadata, (registry, errorName) => registry.find((schema$1) => schema.NormalizedSchema.of(schema$1).getMergedTraits().awsQueryError?.[0] === errorName));
1139
+ const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, errorData, metadata, (registry, errorName) => {
1140
+ try {
1141
+ return registry.getSchema(errorName);
1142
+ }
1143
+ catch (e) {
1144
+ return registry.find((schema$1) => schema.NormalizedSchema.of(schema$1).getMergedTraits().awsQueryError?.[0] === errorName);
1145
+ }
1146
+ });
1143
1147
  const ns = schema.NormalizedSchema.of(errorSchema);
1144
1148
  const ErrorCtor = schema.TypeRegistry.for(errorSchema[1]).getErrorCtor(errorSchema) ?? Error;
1145
1149
  const exception = new ErrorCtor(message);
@@ -75,10 +75,7 @@ export class JsonShapeSerializer extends SerdeContextConfig {
75
75
  if (ns === this.rootSchema) {
76
76
  return value;
77
77
  }
78
- if (!this.serdeContext?.base64Encoder) {
79
- return toBase64(value);
80
- }
81
- return this.serdeContext?.base64Encoder(value);
78
+ return (this.serdeContext?.base64Encoder ?? toBase64)(value);
82
79
  }
83
80
  if ((ns.isTimestampSchema() || ns.isDocumentSchema()) && value instanceof Date) {
84
81
  const format = determineTimestampFormat(ns, this.settings);