cdk-cost-analyzer 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cdk-cost-analyzer-cache/metadata.json +12 -0
- package/.gitlab-ci.yml +214 -0
- package/.husky/pre-commit +12 -0
- package/.kiro/hooks/accessibility-audit.kiro.hook +18 -0
- package/.kiro/hooks/api-schema-validation.kiro.hook +21 -0
- package/.kiro/hooks/auto-test-on-save.kiro.hook +19 -0
- package/.kiro/hooks/cdk-synth-on-change.kiro.hook +20 -0
- package/.kiro/hooks/code-coverage-check.kiro.hook +14 -0
- package/.kiro/hooks/commit-message-helper.kiro.hook +14 -0
- package/.kiro/hooks/dependency-update-check.kiro.hook +14 -0
- package/.kiro/hooks/env-file-validation.kiro.hook +18 -0
- package/.kiro/hooks/lint-and-format-on-save.kiro.hook +21 -0
- package/.kiro/hooks/mcp-config-validation.kiro.hook +17 -0
- package/.kiro/hooks/mcp-server-test.kiro.hook +14 -0
- package/.kiro/hooks/performance-analysis.kiro.hook +14 -0
- package/.kiro/hooks/readme-spell-check.kiro.hook +14 -0
- package/.kiro/hooks/security-scan-on-dependency-change.kiro.hook +21 -0
- package/.kiro/hooks/translation-update.kiro.hook +18 -0
- package/.kiro/hooks/update-documentation.kiro.hook +18 -0
- package/.kiro/settings/mcp.json +20 -0
- package/.kiro/specs/cdk-cost-analyzer/design.md +620 -0
- package/.kiro/specs/cdk-cost-analyzer/requirements.md +183 -0
- package/.kiro/specs/cdk-cost-analyzer/tasks.md +357 -0
- package/.kiro/specs/github-actions-ci/design.md +281 -0
- package/.kiro/specs/github-actions-ci/requirements.md +86 -0
- package/.kiro/specs/github-actions-ci/tasks.md +115 -0
- package/.kiro/specs/nlb-calculator-test-coverage/design.md +190 -0
- package/.kiro/specs/nlb-calculator-test-coverage/requirements.md +84 -0
- package/.kiro/specs/nlb-calculator-test-coverage/tasks.md +150 -0
- package/.kiro/specs/production-readiness/design.md +1213 -0
- package/.kiro/specs/production-readiness/requirements.md +312 -0
- package/.kiro/specs/production-readiness/tasks.md +269 -0
- package/.kiro/specs/repository-cleanup/design.md +283 -0
- package/.kiro/specs/repository-cleanup/requirements.md +74 -0
- package/.kiro/specs/repository-cleanup/tasks.md +64 -0
- package/.kiro/steering/aws-cli-best-practices.md +41 -0
- package/.kiro/steering/cdk-best-practices.md +49 -0
- package/.kiro/steering/development-standards.md +54 -0
- package/.kiro/steering/docker-best-practices.md +34 -0
- package/.kiro/steering/documentation-style.md +151 -0
- package/.kiro/steering/git-best-practices.md +37 -0
- package/.kiro/steering/mcp-best-practices.md +95 -0
- package/.kiro/steering/python-best-practices.md +48 -0
- package/.kiro/steering/react-best-practices.md +44 -0
- package/.kiro/steering/security-best-practices.md +41 -0
- package/.kiro/steering/testing-best-practices.md +59 -0
- package/.kiro/steering/typescript-best-practices.md +40 -0
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +258 -0
- package/LICENSE +19 -0
- package/README.md +480 -0
- package/SECURITY.md +117 -0
- package/dist/api/index.d.ts +11 -0
- package/dist/api/index.js +65 -0
- package/dist/api/types.d.ts +15 -0
- package/dist/api/types.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +262 -0
- package/dist/config/ConfigManager.d.ts +40 -0
- package/dist/config/ConfigManager.js +238 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +19 -0
- package/dist/config/types.d.ts +72 -0
- package/dist/config/types.js +15 -0
- package/dist/diff/DiffEngine.d.ts +7 -0
- package/dist/diff/DiffEngine.js +73 -0
- package/dist/diff/index.d.ts +2 -0
- package/dist/diff/index.js +21 -0
- package/dist/diff/types.d.ts +20 -0
- package/dist/diff/types.js +3 -0
- package/dist/integrations/GitLabIntegration.d.ts +7 -0
- package/dist/integrations/GitLabIntegration.js +45 -0
- package/dist/integrations/index.d.ts +2 -0
- package/dist/integrations/index.js +21 -0
- package/dist/integrations/types.d.ts +11 -0
- package/dist/integrations/types.js +13 -0
- package/dist/parser/TemplateParser.d.ts +8 -0
- package/dist/parser/TemplateParser.js +75 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.js +22 -0
- package/dist/parser/types.d.ts +30 -0
- package/dist/parser/types.js +3 -0
- package/dist/pipeline/PipelineOrchestrator.d.ts +23 -0
- package/dist/pipeline/PipelineOrchestrator.js +191 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +19 -0
- package/dist/pipeline/types.d.ts +41 -0
- package/dist/pipeline/types.js +13 -0
- package/dist/pricing/CacheManager.d.ts +75 -0
- package/dist/pricing/CacheManager.js +195 -0
- package/dist/pricing/PricingClient.d.ts +17 -0
- package/dist/pricing/PricingClient.js +122 -0
- package/dist/pricing/PricingService.d.ts +16 -0
- package/dist/pricing/PricingService.js +149 -0
- package/dist/pricing/calculators/ALBCalculator.d.ts +16 -0
- package/dist/pricing/calculators/ALBCalculator.js +163 -0
- package/dist/pricing/calculators/APIGatewayCalculator.d.ts +10 -0
- package/dist/pricing/calculators/APIGatewayCalculator.js +177 -0
- package/dist/pricing/calculators/CloudFrontCalculator.d.ts +59 -0
- package/dist/pricing/calculators/CloudFrontCalculator.js +151 -0
- package/dist/pricing/calculators/DynamoDBCalculator.d.ts +9 -0
- package/dist/pricing/calculators/DynamoDBCalculator.js +146 -0
- package/dist/pricing/calculators/EC2Calculator.d.ts +7 -0
- package/dist/pricing/calculators/EC2Calculator.js +80 -0
- package/dist/pricing/calculators/ECSCalculator.d.ts +9 -0
- package/dist/pricing/calculators/ECSCalculator.js +116 -0
- package/dist/pricing/calculators/ElastiCacheCalculator.d.ts +8 -0
- package/dist/pricing/calculators/ElastiCacheCalculator.js +106 -0
- package/dist/pricing/calculators/LambdaCalculator.d.ts +13 -0
- package/dist/pricing/calculators/LambdaCalculator.js +111 -0
- package/dist/pricing/calculators/NLBCalculator.d.ts +16 -0
- package/dist/pricing/calculators/NLBCalculator.js +138 -0
- package/dist/pricing/calculators/NatGatewayCalculator.d.ts +12 -0
- package/dist/pricing/calculators/NatGatewayCalculator.js +116 -0
- package/dist/pricing/calculators/RDSCalculator.d.ts +9 -0
- package/dist/pricing/calculators/RDSCalculator.js +103 -0
- package/dist/pricing/calculators/S3Calculator.d.ts +8 -0
- package/dist/pricing/calculators/S3Calculator.js +68 -0
- package/dist/pricing/calculators/VPCEndpointCalculator.d.ts +12 -0
- package/dist/pricing/calculators/VPCEndpointCalculator.js +129 -0
- package/dist/pricing/index.d.ts +10 -0
- package/dist/pricing/index.js +37 -0
- package/dist/pricing/types.d.ts +53 -0
- package/dist/pricing/types.js +22 -0
- package/dist/releasetag.txt +1 -0
- package/dist/reporter/Reporter.d.ts +18 -0
- package/dist/reporter/Reporter.js +412 -0
- package/dist/reporter/index.d.ts +2 -0
- package/dist/reporter/index.js +21 -0
- package/dist/reporter/types.d.ts +72 -0
- package/dist/reporter/types.js +3 -0
- package/dist/synthesis/SynthesisOrchestrator.d.ts +26 -0
- package/dist/synthesis/SynthesisOrchestrator.js +243 -0
- package/dist/synthesis/index.d.ts +2 -0
- package/dist/synthesis/index.js +19 -0
- package/dist/synthesis/types.d.ts +17 -0
- package/dist/synthesis/types.js +13 -0
- package/dist/threshold/ThresholdEnforcer.d.ts +29 -0
- package/dist/threshold/ThresholdEnforcer.js +143 -0
- package/dist/threshold/index.d.ts +2 -0
- package/dist/threshold/index.js +19 -0
- package/dist/threshold/types.d.ts +15 -0
- package/dist/threshold/types.js +17 -0
- package/docs/CALCULATORS.md +820 -0
- package/docs/CI_CD.md +608 -0
- package/docs/CONFIGURATION.md +407 -0
- package/docs/DEVELOPMENT.md +387 -0
- package/docs/RELEASE.md +223 -0
- package/docs/TROUBLESHOOTING.md +847 -0
- package/examples/.cdk-cost-analyzer.yml +85 -0
- package/examples/.gitlab-ci.yml +125 -0
- package/examples/api-usage.js +26 -0
- package/examples/complex/base.json +16 -0
- package/examples/complex/target.json +29 -0
- package/examples/monorepo/.gitlab-ci.yml +251 -0
- package/examples/monorepo/README.md +341 -0
- package/examples/monorepo/package.json +27 -0
- package/examples/monorepo/packages/backend-infra/.cdk-cost-analyzer.yml +34 -0
- package/examples/monorepo/packages/backend-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/backend-infra/cdk.json +7 -0
- package/examples/monorepo/packages/backend-infra/lib/backend-stack.ts +128 -0
- package/examples/monorepo/packages/backend-infra/package.json +30 -0
- package/examples/monorepo/packages/backend-infra/tsconfig.json +11 -0
- package/examples/monorepo/packages/data-infra/.cdk-cost-analyzer.yml +38 -0
- package/examples/monorepo/packages/data-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/data-infra/cdk.json +7 -0
- package/examples/monorepo/packages/data-infra/lib/data-stack.ts +121 -0
- package/examples/monorepo/packages/data-infra/package.json +30 -0
- package/examples/monorepo/packages/data-infra/tsconfig.json +11 -0
- package/examples/monorepo/packages/frontend-infra/.cdk-cost-analyzer.yml +31 -0
- package/examples/monorepo/packages/frontend-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/frontend-infra/cdk.json +7 -0
- package/examples/monorepo/packages/frontend-infra/lib/frontend-stack.ts +60 -0
- package/examples/monorepo/packages/frontend-infra/package.json +30 -0
- package/examples/monorepo/packages/frontend-infra/tsconfig.json +11 -0
- package/examples/monorepo/tsconfig.json +35 -0
- package/examples/multi-stack/.cdk-cost-analyzer.yml +72 -0
- package/examples/multi-stack/.gitlab-ci.yml +184 -0
- package/examples/multi-stack/README.md +279 -0
- package/examples/multi-stack/bin/app.ts +36 -0
- package/examples/multi-stack/cdk.json +72 -0
- package/examples/multi-stack/lib/compute-stack.ts +128 -0
- package/examples/multi-stack/lib/networking-stack.ts +69 -0
- package/examples/multi-stack/lib/storage-stack.ts +141 -0
- package/examples/multi-stack/package-lock.json +4437 -0
- package/examples/multi-stack/package.json +42 -0
- package/examples/multi-stack/tsconfig.json +34 -0
- package/examples/simple/base.json +8 -0
- package/examples/simple/target.json +14 -0
- package/examples/single-stack/.NVP +0 -0
- package/examples/single-stack/.cdk-cost-analyzer.yml +52 -0
- package/examples/single-stack/.gitlab-ci.yml +126 -0
- package/examples/single-stack/README.md +184 -0
- package/examples/single-stack/UeK +0 -0
- package/examples/single-stack/bin/app.ts +16 -0
- package/examples/single-stack/cdk.json +72 -0
- package/examples/single-stack/lib/infrastructure-stack.ts +119 -0
- package/examples/single-stack/package-lock.json +4443 -0
- package/examples/single-stack/package.json +38 -0
- package/examples/single-stack/tsconfig.json +34 -0
- package/package.json +139 -0
- package/test-cdk-project/README-COMPUTE.md +141 -0
- package/test-cdk-project/README.md +95 -0
- package/test-cdk-project/app-with-compute.js +102 -0
- package/test-cdk-project/app.js +81 -0
- package/test-cdk-project/cdk-compute.json +3 -0
- package/test-cdk-project/cdk.context.json +7 -0
- package/test-cdk-project/cdk.json +3 -0
- package/test-cdk-project/cdk.out/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out/TestStack.template.json +115 -0
- package/test-cdk-project/cdk.out/cdk.out +1 -0
- package/test-cdk-project/cdk.out/manifest.json +503 -0
- package/test-cdk-project/cdk.out/tree.json +1 -0
- package/test-cdk-project/cdk.out.base/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out.base/TestStack.template.json +115 -0
- package/test-cdk-project/cdk.out.base/cdk.out +1 -0
- package/test-cdk-project/cdk.out.base/manifest.json +503 -0
- package/test-cdk-project/cdk.out.base/tree.json +1 -0
- package/test-cdk-project/cdk.out.target/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out.target/TestStack.template.json +183 -0
- package/test-cdk-project/cdk.out.target/cdk.out +1 -0
- package/test-cdk-project/cdk.out.target/manifest.json +521 -0
- package/test-cdk-project/cdk.out.target/tree.json +1 -0
- package/test-cdk-project/package-lock.json +422 -0
- package/test-cdk-project/package.json +17 -0
- package/tools/workflows/README.md +102 -0
- package/tools/workflows/validate-workflows.js +109 -0
- package/tools/workflows/workflow-utils.ts +181 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SynthesisOrchestrator = void 0;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const types_1 = require("./types");
|
|
41
|
+
class SynthesisOrchestrator {
|
|
42
|
+
DEFAULT_OUTPUT_PATH = 'cdk.out';
|
|
43
|
+
/**
|
|
44
|
+
* Execute CDK synthesis
|
|
45
|
+
*/
|
|
46
|
+
async synthesize(options) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
try {
|
|
49
|
+
const outputPath = options.outputPath || this.DEFAULT_OUTPUT_PATH;
|
|
50
|
+
const command = options.customCommand || 'npx cdk synth';
|
|
51
|
+
await this.executeSynthesis(command, options.cdkAppPath, options.context, outputPath);
|
|
52
|
+
const fullOutputPath = path.join(options.cdkAppPath, outputPath);
|
|
53
|
+
const { templatePaths, stackNames } = await this.findTemplates(fullOutputPath);
|
|
54
|
+
const duration = Date.now() - startTime;
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
templatePaths,
|
|
58
|
+
stackNames,
|
|
59
|
+
duration,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const duration = Date.now() - startTime;
|
|
64
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
65
|
+
if (error instanceof types_1.SynthesisError) {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
templatePaths: [],
|
|
69
|
+
stackNames: [],
|
|
70
|
+
error: errorMessage,
|
|
71
|
+
duration,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
templatePaths: [],
|
|
77
|
+
stackNames: [],
|
|
78
|
+
error: `Synthesis failed: ${errorMessage}`,
|
|
79
|
+
duration,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Execute synthesis command
|
|
85
|
+
*
|
|
86
|
+
* Uses shell: false for security to prevent command injection attacks.
|
|
87
|
+
* Arguments are passed as an array to avoid shell interpretation.
|
|
88
|
+
*
|
|
89
|
+
* Implements a 15-second timeout to prevent hanging processes in CI:
|
|
90
|
+
* - Sends SIGTERM for graceful termination
|
|
91
|
+
* - Follows up with SIGKILL after 1 second if process doesn't exit
|
|
92
|
+
* - Prevents duplicate resolution using isResolved flag
|
|
93
|
+
* - Ensures all event listeners are cleaned up
|
|
94
|
+
* - Uses process.kill as fallback for stubborn processes
|
|
95
|
+
*/
|
|
96
|
+
async executeSynthesis(command, cdkAppPath, context, outputPath) {
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
const [cmd, ...args] = command.split(' ');
|
|
99
|
+
// Add context arguments
|
|
100
|
+
const allArgs = [...args];
|
|
101
|
+
if (context) {
|
|
102
|
+
for (const [key, value] of Object.entries(context)) {
|
|
103
|
+
allArgs.push('-c', `${key}=${value}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Add output path if specified
|
|
107
|
+
if (outputPath) {
|
|
108
|
+
allArgs.push('--output', outputPath);
|
|
109
|
+
}
|
|
110
|
+
// Use shell: false for security and pass arguments properly
|
|
111
|
+
const proc = (0, child_process_1.spawn)(cmd, allArgs, {
|
|
112
|
+
cwd: cdkAppPath,
|
|
113
|
+
shell: false,
|
|
114
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
115
|
+
detached: false, // Ensure process is part of the same process group
|
|
116
|
+
});
|
|
117
|
+
let stdout = '';
|
|
118
|
+
let stderr = '';
|
|
119
|
+
let isResolved = false;
|
|
120
|
+
let killTimeout = null;
|
|
121
|
+
const cleanup = () => {
|
|
122
|
+
if (killTimeout) {
|
|
123
|
+
clearTimeout(killTimeout);
|
|
124
|
+
killTimeout = null;
|
|
125
|
+
}
|
|
126
|
+
// Remove all listeners to prevent memory leaks
|
|
127
|
+
proc.removeAllListeners();
|
|
128
|
+
proc.stdout?.removeAllListeners();
|
|
129
|
+
proc.stderr?.removeAllListeners();
|
|
130
|
+
};
|
|
131
|
+
const forceKill = () => {
|
|
132
|
+
try {
|
|
133
|
+
// Try multiple kill methods for stubborn processes
|
|
134
|
+
if (proc.pid && !proc.killed) {
|
|
135
|
+
proc.kill('SIGKILL');
|
|
136
|
+
// Also try process.kill as fallback
|
|
137
|
+
try {
|
|
138
|
+
process.kill(proc.pid, 'SIGKILL');
|
|
139
|
+
}
|
|
140
|
+
catch (killError) {
|
|
141
|
+
// Ignore kill errors - process might already be dead
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
// Ignore errors during force kill
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
// Set up timeout to prevent hanging processes
|
|
150
|
+
const timeout = setTimeout(() => {
|
|
151
|
+
if (!isResolved) {
|
|
152
|
+
isResolved = true;
|
|
153
|
+
// First try graceful termination
|
|
154
|
+
proc.kill('SIGTERM');
|
|
155
|
+
// Force kill after 1 second if still running
|
|
156
|
+
killTimeout = setTimeout(() => {
|
|
157
|
+
forceKill();
|
|
158
|
+
}, 1000);
|
|
159
|
+
cleanup();
|
|
160
|
+
reject(new types_1.SynthesisError('CDK synthesis timed out after 15 seconds', stderr || stdout || 'No output captured'));
|
|
161
|
+
}
|
|
162
|
+
}, 15000); // Reduced to 15 second timeout
|
|
163
|
+
proc.stdout?.on('data', (data) => {
|
|
164
|
+
stdout += data.toString();
|
|
165
|
+
});
|
|
166
|
+
proc.stderr?.on('data', (data) => {
|
|
167
|
+
stderr += data.toString();
|
|
168
|
+
});
|
|
169
|
+
proc.on('error', (error) => {
|
|
170
|
+
if (!isResolved) {
|
|
171
|
+
isResolved = true;
|
|
172
|
+
clearTimeout(timeout);
|
|
173
|
+
cleanup();
|
|
174
|
+
reject(new types_1.SynthesisError(`Failed to execute synthesis command: ${error.message}`, stderr || 'No error output captured'));
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
proc.on('close', (code) => {
|
|
178
|
+
if (!isResolved) {
|
|
179
|
+
isResolved = true;
|
|
180
|
+
clearTimeout(timeout);
|
|
181
|
+
cleanup();
|
|
182
|
+
if (code !== 0) {
|
|
183
|
+
reject(new types_1.SynthesisError(`CDK synthesis failed with exit code ${code}`, stderr || stdout || 'No output captured'));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
resolve();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
// Additional safety: handle process exit
|
|
191
|
+
proc.on('exit', (code, signal) => {
|
|
192
|
+
if (!isResolved) {
|
|
193
|
+
isResolved = true;
|
|
194
|
+
clearTimeout(timeout);
|
|
195
|
+
cleanup();
|
|
196
|
+
if (signal) {
|
|
197
|
+
reject(new types_1.SynthesisError(`CDK synthesis terminated by signal ${signal}`, stderr || stdout || 'No output captured'));
|
|
198
|
+
}
|
|
199
|
+
else if (code !== 0) {
|
|
200
|
+
reject(new types_1.SynthesisError(`CDK synthesis failed with exit code ${code}`, stderr || stdout || 'No output captured'));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
resolve();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Find all CloudFormation templates in output directory
|
|
211
|
+
*/
|
|
212
|
+
async findTemplates(outputPath) {
|
|
213
|
+
try {
|
|
214
|
+
const files = await fs.readdir(outputPath);
|
|
215
|
+
const templatePaths = [];
|
|
216
|
+
const stackNames = [];
|
|
217
|
+
for (const file of files) {
|
|
218
|
+
// Match CloudFormation template files (stack-name.template.json or stack-name.template.yaml)
|
|
219
|
+
if (file.endsWith('.template.json') ||
|
|
220
|
+
file.endsWith('.template.yaml') ||
|
|
221
|
+
file.endsWith('.template.yml')) {
|
|
222
|
+
const fullPath = path.join(outputPath, file);
|
|
223
|
+
templatePaths.push(fullPath);
|
|
224
|
+
// Extract stack name from filename
|
|
225
|
+
const stackName = file
|
|
226
|
+
.replace('.template.json', '')
|
|
227
|
+
.replace('.template.yaml', '')
|
|
228
|
+
.replace('.template.yml', '');
|
|
229
|
+
stackNames.push(stackName);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (templatePaths.length === 0) {
|
|
233
|
+
throw new Error('No CloudFormation templates found in output directory');
|
|
234
|
+
}
|
|
235
|
+
return { templatePaths, stackNames };
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
throw new Error(`Failed to find templates: ${error instanceof Error ? error.message : String(error)}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.SynthesisOrchestrator = SynthesisOrchestrator;
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ludGhlc2lzT3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bnRoZXNpcy9TeW50aGVzaXNPcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQXNDO0FBQ3RDLGdEQUFrQztBQUNsQywyQ0FBNkI7QUFDN0IsbUNBQTRFO0FBRTVFLE1BQWEscUJBQXFCO0lBQ2YsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0lBRWpEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUF5QjtRQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUM7WUFFekQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUV0RixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUV4QyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixRQUFRO2FBQ1QsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFP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O29CQUM3QyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUU3QixtQ0FBbUM7b0JBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUk7eUJBQ25CLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7eUJBQzdCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7eUJBQzdCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDM0UsQ0FBQztZQUVELE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLDZCQUE2QixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuUUQsc0RBbVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBTeW50aGVzaXNPcHRpb25zLCBTeW50aGVzaXNSZXN1bHQsIFN5bnRoZXNpc0Vycm9yIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBTeW50aGVzaXNPcmNoZXN0cmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfT1VUUFVUX1BBVEggPSAnY2RrLm91dCc7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgQ0RLIHN5bnRoZXNpc1xuICAgKi9cbiAgYXN5bmMgc3ludGhlc2l6ZShvcHRpb25zOiBTeW50aGVzaXNPcHRpb25zKTogUHJvbWlzZTxTeW50aGVzaXNSZXN1bHQ+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBvcHRpb25zLm91dHB1dFBhdGggfHwgdGhpcy5ERUZBVUxUX09VVFBVVF9QQVRIO1xuICAgICAgY29uc3QgY29tbWFuZCA9IG9wdGlvbnMuY3VzdG9tQ29tbWFuZCB8fCAnbnB4IGNkayBzeW50aCc7XG5cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVN5bnRoZXNpcyhjb21tYW5kLCBvcHRpb25zLmNka0FwcFBhdGgsIG9wdGlvbnMuY29udGV4dCwgb3V0cHV0UGF0aCk7XG5cbiAgICAgIGNvbnN0IGZ1bGxPdXRwdXRQYXRoID0gcGF0aC5qb2luKG9wdGlvbnMuY2RrQXBwUGF0aCwgb3V0cHV0UGF0aCk7XG4gICAgICBjb25zdCB7IHRlbXBsYXRlUGF0aHMsIHN0YWNrTmFtZXMgfSA9IGF3YWl0IHRoaXMuZmluZFRlbXBsYXRlcyhmdWxsT3V0cHV0UGF0aCk7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgdGVtcGxhdGVQYXRocyxcbiAgICAgICAgc3RhY2tOYW1lcyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRoZXNpc0Vycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgdGVtcGxhdGVQYXRoczogW10sXG4gICAgICAgICAgc3RhY2tOYW1lczogW10sXG4gICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIHRlbXBsYXRlUGF0aHM6IFtdLFxuICAgICAgICBzdGFja05hbWVzOiBbXSxcbiAgICAgICAgZXJyb3I6IGBTeW50aGVzaXMgZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgc3ludGhlc2lzIGNvbW1hbmRcbiAgICpcbiAgICogVXNlcyBzaGVsbDogZmFsc2UgZm9yIHNlY3VyaXR5IHRvIHByZXZlbnQgY29tbWFuZCBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICogQXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgYW4gYXJyYXkgdG8gYXZvaWQgc2hlbGwgaW50ZXJwcmV0YXRpb24uXG4gICAqIFxuICAgKiBJbXBsZW1lbnRzIGEgMTUtc2Vjb25kIHRpbWVvdXQgdG8gcHJldmVudCBoYW5naW5nIHByb2Nlc3NlcyBpbiBDSTpcbiAgICogLSBTZW5kcyBTSUdURVJNIGZvciBncmFjZWZ1bCB0ZXJtaW5hdGlvblxuICAgKiAtIEZvbGxvd3MgdXAgd2l0aCBTSUdLSUxMIGFmdGVyIDEgc2Vjb25kIGlmIHByb2Nlc3MgZG9lc24ndCBleGl0XG4gICAqIC0gUHJldmVudHMgZHVwbGljYXRlIHJlc29sdXRpb24gdXNpbmcgaXNSZXNvbHZlZCBmbGFnXG4gICAqIC0gRW5zdXJlcyBhbGwgZXZlbnQgbGlzdGVuZXJzIGFyZSBjbGVhbmVkIHVwXG4gICAqIC0gVXNlcyBwcm9jZXNzLmtpbGwgYXMgZmFsbGJhY2sgZm9yIHN0dWJib3JuIHByb2Nlc3Nlc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlU3ludGhlc2lzKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBjZGtBcHBQYXRoOiBzdHJpbmcsXG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgb3V0cHV0UGF0aD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IFtjbWQsIC4uLmFyZ3NdID0gY29tbWFuZC5zcGxpdCgnICcpO1xuXG4gICAgICAvLyBBZGQgY29udGV4dCBhcmd1bWVudHNcbiAgICAgIGNvbnN0IGFsbEFyZ3MgPSBbLi4uYXJnc107XG4gICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb250ZXh0KSkge1xuICAgICAgICAgIGFsbEFyZ3MucHVzaCgnLWMnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIG91dHB1dCBwYXRoIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG91dHB1dFBhdGgpIHtcbiAgICAgICAgYWxsQXJncy5wdXNoKCctLW91dHB1dCcsIG91dHB1dFBhdGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2Ugc2hlbGw6IGZhbHNlIGZvciBzZWN1cml0eSBhbmQgcGFzcyBhcmd1bWVudHMgcHJvcGVybHlcbiAgICAgIGNvbnN0IHByb2MgPSBzcGF3bihjbWQsIGFsbEFyZ3MsIHtcbiAgICAgICAgY3dkOiBjZGtBcHBQYXRoLFxuICAgICAgICBzaGVsbDogZmFsc2UsXG4gICAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgICAgZGV0YWNoZWQ6IGZhbHNlLCAvLyBFbnN1cmUgcHJvY2VzcyBpcyBwYXJ0IG9mIHRoZSBzYW1lIHByb2Nlc3MgZ3JvdXBcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICBsZXQgc3RkZXJyID0gJyc7XG4gICAgICBsZXQgaXNSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgbGV0IGtpbGxUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoa2lsbFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoa2lsbFRpbWVvdXQpO1xuICAgICAgICAgIGtpbGxUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgYWxsIGxpc3RlbmVycyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgICAgICBwcm9jLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICBwcm9jLnN0ZG91dD8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIHByb2Muc3RkZXJyPy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZvcmNlS2lsbCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUcnkgbXVsdGlwbGUga2lsbCBtZXRob2RzIGZvciBzdHViYm9ybiBwcm9jZXNzZXNcbiAgICAgICAgICBpZiAocHJvYy5waWQgJiYgIXByb2Mua2lsbGVkKSB7XG4gICAgICAgICAgICBwcm9jLmtpbGwoJ1NJR0tJTEwnKTtcbiAgICAgICAgICAgIC8vIEFsc28gdHJ5IHByb2Nlc3Mua2lsbCBhcyBmYWxsYmFja1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2MucGlkLCAnU0lHS0lMTCcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoa2lsbEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBraWxsIGVycm9ycyAtIHByb2Nlc3MgbWlnaHQgYWxyZWFkeSBiZSBkZWFkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgZHVyaW5nIGZvcmNlIGtpbGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gU2V0IHVwIHRpbWVvdXQgdG8gcHJldmVudCBoYW5naW5nIHByb2Nlc3Nlc1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBGaXJzdCB0cnkgZ3JhY2VmdWwgdGVybWluYXRpb25cbiAgICAgICAgICBwcm9jLmtpbGwoJ1NJR1RFUk0nKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBGb3JjZSBraWxsIGFmdGVyIDEgc2Vjb25kIGlmIHN0aWxsIHJ1bm5pbmdcbiAgICAgICAgICBraWxsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZm9yY2VLaWxsKCk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgIG5ldyBTeW50aGVzaXNFcnJvcihcbiAgICAgICAgICAgICAgJ0NESyBzeW50aGVzaXMgdGltZWQgb3V0IGFmdGVyIDE1IHNlY29uZHMnLFxuICAgICAgICAgICAgICBzdGRlcnIgfHwgc3Rkb3V0IHx8ICdObyBvdXRwdXQgY2FwdHVyZWQnLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LCAxNTAwMCk7IC8vIFJlZHVjZWQgdG8gMTUgc2Vjb25kIHRpbWVvdXRcblxuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSk7XG5cbiAgICAgIHByb2Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0pO1xuXG4gICAgICBwcm9jLm9uKCdlcnJvcicsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICBuZXcgU3ludGhlc2lzRXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSBzeW50aGVzaXMgY29tbWFuZDogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgIHN0ZGVyciB8fCAnTm8gZXJyb3Igb3V0cHV0IGNhcHR1cmVkJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzRXJyb3IoXG4gICAgICAgICAgICAgICAgYENESyBzeW50aGVzaXMgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7Y29kZX1gLFxuICAgICAgICAgICAgICAgIHN0ZGVyciB8fCBzdGRvdXQgfHwgJ05vIG91dHB1dCBjYXB0dXJlZCcsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkaXRpb25hbCBzYWZldHk6IGhhbmRsZSBwcm9jZXNzIGV4aXRcbiAgICAgIHByb2Mub24oJ2V4aXQnLCAoY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgICAgIGlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzRXJyb3IoXG4gICAgICAgICAgICAgICAgYENESyBzeW50aGVzaXMgdGVybWluYXRlZCBieSBzaWduYWwgJHtzaWduYWx9YCxcbiAgICAgICAgICAgICAgICBzdGRlcnIgfHwgc3Rkb3V0IHx8ICdObyBvdXRwdXQgY2FwdHVyZWQnLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IFN5bnRoZXNpc0Vycm9yKFxuICAgICAgICAgICAgICAgIGBDREsgc3ludGhlc2lzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2NvZGV9YCxcbiAgICAgICAgICAgICAgICBzdGRlcnIgfHwgc3Rkb3V0IHx8ICdObyBvdXRwdXQgY2FwdHVyZWQnLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbGwgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzIGluIG91dHB1dCBkaXJlY3RvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZFRlbXBsYXRlcyhcbiAgICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyB0ZW1wbGF0ZVBhdGhzOiBzdHJpbmdbXTsgc3RhY2tOYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIob3V0cHV0UGF0aCk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aHM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBzdGFja05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgLy8gTWF0Y2ggQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgZmlsZXMgKHN0YWNrLW5hbWUudGVtcGxhdGUuanNvbiBvciBzdGFjay1uYW1lLnRlbXBsYXRlLnlhbWwpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWxlLmVuZHNXaXRoKCcudGVtcGxhdGUuanNvbicpIHx8XG4gICAgICAgICAgZmlsZS5lbmRzV2l0aCgnLnRlbXBsYXRlLnlhbWwnKSB8fFxuICAgICAgICAgIGZpbGUuZW5kc1dpdGgoJy50ZW1wbGF0ZS55bWwnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihvdXRwdXRQYXRoLCBmaWxlKTtcbiAgICAgICAgICB0ZW1wbGF0ZVBhdGhzLnB1c2goZnVsbFBhdGgpO1xuXG4gICAgICAgICAgLy8gRXh0cmFjdCBzdGFjayBuYW1lIGZyb20gZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBzdGFja05hbWUgPSBmaWxlXG4gICAgICAgICAgICAucmVwbGFjZSgnLnRlbXBsYXRlLmpzb24nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCcudGVtcGxhdGUueWFtbCcsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJy50ZW1wbGF0ZS55bWwnLCAnJyk7XG4gICAgICAgICAgc3RhY2tOYW1lcy5wdXNoKHN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzIGZvdW5kIGluIG91dHB1dCBkaXJlY3RvcnknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdGVtcGxhdGVQYXRocywgc3RhY2tOYW1lcyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gZmluZCB0ZW1wbGF0ZXM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./SynthesisOrchestrator"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ludGhlc2lzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBd0M7QUFDeEMsMENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9TeW50aGVzaXNPcmNoZXN0cmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface SynthesisOptions {
|
|
2
|
+
cdkAppPath: string;
|
|
3
|
+
outputPath?: string;
|
|
4
|
+
context?: Record<string, string>;
|
|
5
|
+
customCommand?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SynthesisResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
templatePaths: string[];
|
|
10
|
+
stackNames: string[];
|
|
11
|
+
error?: string;
|
|
12
|
+
duration: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class SynthesisError extends Error {
|
|
15
|
+
cdkOutput: string;
|
|
16
|
+
constructor(message: string, cdkOutput: string);
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SynthesisError = void 0;
|
|
4
|
+
class SynthesisError extends Error {
|
|
5
|
+
cdkOutput;
|
|
6
|
+
constructor(message, cdkOutput) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.cdkOutput = cdkOutput;
|
|
9
|
+
this.name = 'SynthesisError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.SynthesisError = SynthesisError;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ludGhlc2lzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVBLE1BQWEsY0FBZSxTQUFRLEtBQUs7SUFHOUI7SUFGVCxZQUNFLE9BQWUsRUFDUixTQUFpQjtRQUV4QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBR3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBUkQsd0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFN5bnRoZXNpc09wdGlvbnMge1xuICBjZGtBcHBQYXRoOiBzdHJpbmc7XG4gIG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjdXN0b21Db21tYW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoZXNpc1Jlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHRlbXBsYXRlUGF0aHM6IHN0cmluZ1tdO1xuICBzdGFja05hbWVzOiBzdHJpbmdbXTtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBTeW50aGVzaXNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyBjZGtPdXRwdXQ6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1N5bnRoZXNpc0Vycm9yJztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ThresholdEvaluation } from './types';
|
|
2
|
+
import { ThresholdConfig } from '../config/types';
|
|
3
|
+
import { ResourceCost, ModifiedResourceCost } from '../pricing/types';
|
|
4
|
+
export declare class ThresholdEnforcer {
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate cost delta against configured thresholds
|
|
7
|
+
*/
|
|
8
|
+
evaluateThreshold(costDelta: number, addedResources: ResourceCost[], modifiedResources: ModifiedResourceCost[], config?: ThresholdConfig, environment?: string): ThresholdEvaluation;
|
|
9
|
+
/**
|
|
10
|
+
* Select appropriate threshold based on environment
|
|
11
|
+
*/
|
|
12
|
+
private selectThresholds;
|
|
13
|
+
/**
|
|
14
|
+
* Get top cost contributors sorted by impact
|
|
15
|
+
*/
|
|
16
|
+
private getTopContributors;
|
|
17
|
+
/**
|
|
18
|
+
* Format error threshold message
|
|
19
|
+
*/
|
|
20
|
+
private formatErrorMessage;
|
|
21
|
+
/**
|
|
22
|
+
* Format warning threshold message
|
|
23
|
+
*/
|
|
24
|
+
private formatWarningMessage;
|
|
25
|
+
/**
|
|
26
|
+
* Get recommendations based on threshold level and contributors
|
|
27
|
+
*/
|
|
28
|
+
private getRecommendations;
|
|
29
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThresholdEnforcer = void 0;
|
|
4
|
+
class ThresholdEnforcer {
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate cost delta against configured thresholds
|
|
7
|
+
*/
|
|
8
|
+
evaluateThreshold(costDelta, addedResources, modifiedResources, config, environment) {
|
|
9
|
+
if (!config) {
|
|
10
|
+
return {
|
|
11
|
+
passed: true,
|
|
12
|
+
level: 'none',
|
|
13
|
+
delta: costDelta,
|
|
14
|
+
message: 'No thresholds configured',
|
|
15
|
+
recommendations: [],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const thresholds = this.selectThresholds(config, environment);
|
|
19
|
+
if (!thresholds) {
|
|
20
|
+
return {
|
|
21
|
+
passed: true,
|
|
22
|
+
level: 'none',
|
|
23
|
+
delta: costDelta,
|
|
24
|
+
message: 'No thresholds configured',
|
|
25
|
+
recommendations: [],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Check error threshold first
|
|
29
|
+
if (thresholds.error !== undefined && costDelta > thresholds.error) {
|
|
30
|
+
const topContributors = this.getTopContributors(addedResources, modifiedResources, 5);
|
|
31
|
+
return {
|
|
32
|
+
passed: false,
|
|
33
|
+
level: 'error',
|
|
34
|
+
threshold: thresholds.error,
|
|
35
|
+
delta: costDelta,
|
|
36
|
+
message: this.formatErrorMessage(costDelta, thresholds.error),
|
|
37
|
+
recommendations: this.getRecommendations('error', topContributors),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Check warning threshold
|
|
41
|
+
if (thresholds.warning !== undefined && costDelta > thresholds.warning) {
|
|
42
|
+
const topContributors = this.getTopContributors(addedResources, modifiedResources, 5);
|
|
43
|
+
return {
|
|
44
|
+
passed: true,
|
|
45
|
+
level: 'warning',
|
|
46
|
+
threshold: thresholds.warning,
|
|
47
|
+
delta: costDelta,
|
|
48
|
+
message: this.formatWarningMessage(costDelta, thresholds.warning),
|
|
49
|
+
recommendations: this.getRecommendations('warning', topContributors),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
passed: true,
|
|
54
|
+
level: 'none',
|
|
55
|
+
delta: costDelta,
|
|
56
|
+
message: `Cost delta $${costDelta.toFixed(2)}/month is within thresholds`,
|
|
57
|
+
recommendations: [],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Select appropriate threshold based on environment
|
|
62
|
+
*/
|
|
63
|
+
selectThresholds(config, environment) {
|
|
64
|
+
if (environment && config.environments?.[environment]) {
|
|
65
|
+
return config.environments[environment];
|
|
66
|
+
}
|
|
67
|
+
return config.default;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get top cost contributors sorted by impact
|
|
71
|
+
*/
|
|
72
|
+
getTopContributors(addedResources, modifiedResources, limit) {
|
|
73
|
+
const allContributors = [
|
|
74
|
+
...addedResources,
|
|
75
|
+
...modifiedResources.map((r) => ({
|
|
76
|
+
logicalId: r.logicalId,
|
|
77
|
+
type: r.type,
|
|
78
|
+
monthlyCost: {
|
|
79
|
+
amount: r.costDelta,
|
|
80
|
+
currency: r.newMonthlyCost.currency,
|
|
81
|
+
confidence: r.newMonthlyCost.confidence,
|
|
82
|
+
assumptions: r.newMonthlyCost.assumptions,
|
|
83
|
+
},
|
|
84
|
+
})),
|
|
85
|
+
];
|
|
86
|
+
return allContributors
|
|
87
|
+
.sort((a, b) => b.monthlyCost.amount - a.monthlyCost.amount)
|
|
88
|
+
.slice(0, limit);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format error threshold message
|
|
92
|
+
*/
|
|
93
|
+
formatErrorMessage(delta, threshold) {
|
|
94
|
+
const exceededBy = delta - threshold;
|
|
95
|
+
const percentage = ((exceededBy / threshold) * 100).toFixed(1);
|
|
96
|
+
return `Cost increase of $${delta.toFixed(2)}/month exceeds error threshold of $${threshold.toFixed(2)}/month by $${exceededBy.toFixed(2)} (${percentage}%)`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Format warning threshold message
|
|
100
|
+
*/
|
|
101
|
+
formatWarningMessage(delta, threshold) {
|
|
102
|
+
const exceededBy = delta - threshold;
|
|
103
|
+
const percentage = ((exceededBy / threshold) * 100).toFixed(1);
|
|
104
|
+
return `Cost increase of $${delta.toFixed(2)}/month exceeds warning threshold of $${threshold.toFixed(2)}/month by $${exceededBy.toFixed(2)} (${percentage}%)`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get recommendations based on threshold level and contributors
|
|
108
|
+
*/
|
|
109
|
+
getRecommendations(level, topContributors) {
|
|
110
|
+
const recommendations = [];
|
|
111
|
+
if (level === 'error') {
|
|
112
|
+
recommendations.push('This change cannot be merged without approval due to cost impact.');
|
|
113
|
+
recommendations.push('Review the cost breakdown and consider optimizations before proceeding.');
|
|
114
|
+
recommendations.push('Contact your FinOps team for threshold override approval if this cost increase is necessary.');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
recommendations.push('Review this cost increase with your team before merging.');
|
|
118
|
+
recommendations.push('Consider whether all resources in this change are necessary.');
|
|
119
|
+
}
|
|
120
|
+
if (topContributors.length > 0) {
|
|
121
|
+
recommendations.push(`Top cost contributors: ${topContributors
|
|
122
|
+
.map((r) => `${r.type} (${r.logicalId}): $${r.monthlyCost.amount.toFixed(2)}/month`)
|
|
123
|
+
.join(', ')}`);
|
|
124
|
+
// Specific recommendations based on resource types
|
|
125
|
+
const resourceTypes = new Set(topContributors.map((r) => r.type));
|
|
126
|
+
if (resourceTypes.has('AWS::RDS::DBInstance')) {
|
|
127
|
+
recommendations.push('Consider using smaller RDS instance types or Aurora Serverless for lower costs.');
|
|
128
|
+
}
|
|
129
|
+
if (resourceTypes.has('AWS::EC2::Instance')) {
|
|
130
|
+
recommendations.push('Consider using smaller EC2 instance types, Spot instances, or Savings Plans.');
|
|
131
|
+
}
|
|
132
|
+
if (resourceTypes.has('AWS::EC2::NatGateway')) {
|
|
133
|
+
recommendations.push('NAT Gateways have high data processing costs. Consider using VPC endpoints or consolidating NAT Gateways.');
|
|
134
|
+
}
|
|
135
|
+
if (resourceTypes.has('AWS::ElasticLoadBalancingV2::LoadBalancer')) {
|
|
136
|
+
recommendations.push('Load Balancers have hourly costs. Consider sharing load balancers across services if possible.');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return recommendations;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.ThresholdEnforcer = ThresholdEnforcer;
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZXNob2xkRW5mb3JjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZXNob2xkL1RocmVzaG9sZEVuZm9yY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsaUJBQWlCO0lBQzVCOztPQUVHO0lBQ0gsaUJBQWlCLENBQ2YsU0FBaUIsRUFDakIsY0FBOEIsRUFDOUIsaUJBQXlDLEVBQ3pDLE1BQXdCLEVBQ3hCLFdBQW9CO1FBRXBCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUk7Z0JBQ1osS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE9BQU8sRUFBRSwwQkFBMEI7Z0JBQ25DLGVBQWUsRUFBRSxFQUFFO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsT0FBTyxFQUFFLDBCQUEwQjtnQkFDbkMsZUFBZSxFQUFFLEVBQUU7YUFDcEIsQ0FBQztRQUNKLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25FLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FDN0MsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixDQUFDLENBQ0YsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLFVBQVUsQ0FBQyxL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aUJBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7aUJBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoQixDQUFDO1lBRUYsbURBQW1EO1lBQ25ELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRWxFLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLGlGQUFpRixDQUNsRixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLDhFQUE4RSxDQUMvRSxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLDJHQUEyRyxDQUM1RyxDQUFDO1lBQ0osQ0FBQztZQUVELElBQ0UsYUFBYSxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxFQUM5RCxDQUFDO2dCQUNELGVBQWUsQ0FBQyxJQUFJLENBQ2xCLGdHQUFnRyxDQUNqRyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUE3TUQsOENBNk1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhyZXNob2xkRXZhbHVhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVGhyZXNob2xkQ29uZmlnLCBUaHJlc2hvbGRMZXZlbHMgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnO1xuaW1wb3J0IHsgUmVzb3VyY2VDb3N0LCBNb2RpZmllZFJlc291cmNlQ29zdCB9IGZyb20gJy4uL3ByaWNpbmcvdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVGhyZXNob2xkRW5mb3JjZXIge1xuICAvKipcbiAgICogRXZhbHVhdGUgY29zdCBkZWx0YSBhZ2FpbnN0IGNvbmZpZ3VyZWQgdGhyZXNob2xkc1xuICAgKi9cbiAgZXZhbHVhdGVUaHJlc2hvbGQoXG4gICAgY29zdERlbHRhOiBudW1iZXIsXG4gICAgYWRkZWRSZXNvdXJjZXM6IFJlc291cmNlQ29zdFtdLFxuICAgIG1vZGlmaWVkUmVzb3VyY2VzOiBNb2RpZmllZFJlc291cmNlQ29zdFtdLFxuICAgIGNvbmZpZz86IFRocmVzaG9sZENvbmZpZyxcbiAgICBlbnZpcm9ubWVudD86IHN0cmluZyxcbiAgKTogVGhyZXNob2xkRXZhbHVhdGlvbiB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhc3NlZDogdHJ1ZSxcbiAgICAgICAgbGV2ZWw6ICdub25lJyxcbiAgICAgICAgZGVsdGE6IGNvc3REZWx0YSxcbiAgICAgICAgbWVzc2FnZTogJ05vIHRocmVzaG9sZHMgY29uZmlndXJlZCcsXG4gICAgICAgIHJlY29tbWVuZGF0aW9uczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRocmVzaG9sZHMgPSB0aGlzLnNlbGVjdFRocmVzaG9sZHMoY29uZmlnLCBlbnZpcm9ubWVudCk7XG5cbiAgICBpZiAoIXRocmVzaG9sZHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhc3NlZDogdHJ1ZSxcbiAgICAgICAgbGV2ZWw6ICdub25lJyxcbiAgICAgICAgZGVsdGE6IGNvc3REZWx0YSxcbiAgICAgICAgbWVzc2FnZTogJ05vIHRocmVzaG9sZHMgY29uZmlndXJlZCcsXG4gICAgICAgIHJlY29tbWVuZGF0aW9uczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGVycm9yIHRocmVzaG9sZCBmaXJzdFxuICAgIGlmICh0aHJlc2hvbGRzLmVycm9yICE9PSB1bmRlZmluZWQgJiYgY29zdERlbHRhID4gdGhyZXNob2xkcy5lcnJvcikge1xuICAgICAgY29uc3QgdG9wQ29udHJpYnV0b3JzID0gdGhpcy5nZXRUb3BDb250cmlidXRvcnMoXG4gICAgICAgIGFkZGVkUmVzb3VyY2VzLFxuICAgICAgICBtb2RpZmllZFJlc291cmNlcyxcbiAgICAgICAgNSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhc3NlZDogZmFsc2UsXG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICB0aHJlc2hvbGQ6IHRocmVzaG9sZHMuZXJyb3IsXG4gICAgICAgIGRlbHRhOiBjb3N0RGVsdGEsXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuZm9ybWF0RXJyb3JNZXNzYWdlKGNvc3REZWx0YSwgdGhyZXNob2xkcy5lcnJvciksXG4gICAgICAgIHJlY29tbWVuZGF0aW9uczogdGhpcy5nZXRSZWNvbW1lbmRhdGlvbnMoJ2Vycm9yJywgdG9wQ29udHJpYnV0b3JzKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgd2FybmluZyB0aHJlc2hvbGRcbiAgICBpZiAodGhyZXNob2xkcy53YXJuaW5nICE9PSB1bmRlZmluZWQgJiYgY29zdERlbHRhID4gdGhyZXNob2xkcy53YXJuaW5nKSB7XG4gICAgICBjb25zdCB0b3BDb250cmlidXRvcnMgPSB0aGlzLmdldFRvcENvbnRyaWJ1dG9ycyhcbiAgICAgICAgYWRkZWRSZXNvdXJjZXMsXG4gICAgICAgIG1vZGlmaWVkUmVzb3VyY2VzLFxuICAgICAgICA1LFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFzc2VkOiB0cnVlLFxuICAgICAgICBsZXZlbDogJ3dhcm5pbmcnLFxuICAgICAgICB0aHJlc2hvbGQ6IHRocmVzaG9sZHMud2FybmluZyxcbiAgICAgICAgZGVsdGE6IGNvc3REZWx0YSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5mb3JtYXRXYXJuaW5nTWVzc2FnZShjb3N0RGVsdGEsIHRocmVzaG9sZHMud2FybmluZyksXG4gICAgICAgIHJlY29tbWVuZGF0aW9uczogdGhpcy5nZXRSZWNvbW1lbmRhdGlvbnMoJ3dhcm5pbmcnLCB0b3BDb250cmlidXRvcnMpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFzc2VkOiB0cnVlLFxuICAgICAgbGV2ZWw6ICdub25lJyxcbiAgICAgIGRlbHRhOiBjb3N0RGVsdGEsXG4gICAgICBtZXNzYWdlOiBgQ29zdCBkZWx0YSAkJHtjb3N0RGVsdGEudG9GaXhlZCgyKX0vbW9udGggaXMgd2l0aGluIHRocmVzaG9sZHNgLFxuICAgICAgcmVjb21tZW5kYXRpb25zOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhcHByb3ByaWF0ZSB0aHJlc2hvbGQgYmFzZWQgb24gZW52aXJvbm1lbnRcbiAgICovXG4gIHByaXZhdGUgc2VsZWN0VGhyZXNob2xkcyhcbiAgICBjb25maWc6IFRocmVzaG9sZENvbmZpZyxcbiAgICBlbnZpcm9ubWVudD86IHN0cmluZyxcbiAgKTogVGhyZXNob2xkTGV2ZWxzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZW52aXJvbm1lbnQgJiYgY29uZmlnLmVudmlyb25tZW50cz8uW2Vudmlyb25tZW50XSkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lbnZpcm9ubWVudHNbZW52aXJvbm1lbnRdO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnLmRlZmF1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRvcCBjb3N0IGNvbnRyaWJ1dG9ycyBzb3J0ZWQgYnkgaW1wYWN0XG4gICAqL1xuICBwcml2YXRlIGdldFRvcENvbnRyaWJ1dG9ycyhcbiAgICBhZGRlZFJlc291cmNlczogUmVzb3VyY2VDb3N0W10sXG4gICAgbW9kaWZpZWRSZXNvdXJjZXM6IE1vZGlmaWVkUmVzb3VyY2VDb3N0W10sXG4gICAgbGltaXQ6IG51bWJlcixcbiAgKTogUmVzb3VyY2VDb3N0W10ge1xuICAgIGNvbnN0IGFsbENvbnRyaWJ1dG9yczogUmVzb3VyY2VDb3N0W10gPSBbXG4gICAgICAuLi5hZGRlZFJlc291cmNlcyxcbiAgICAgIC4uLm1vZGlmaWVkUmVzb3VyY2VzLm1hcCgocikgPT4gKHtcbiAgICAgICAgbG9naWNhbElkOiByLmxvZ2ljYWxJZCxcbiAgICAgICAgdHlwZTogci50eXBlLFxuICAgICAgICBtb250aGx5Q29zdDoge1xuICAgICAgICAgIGFtb3VudDogci5jb3N0RGVsdGEsXG4gICAgICAgICAgY3VycmVuY3k6IHIubmV3TW9udGhseUNvc3QuY3VycmVuY3ksXG4gICAgICAgICAgY29uZmlkZW5jZTogci5uZXdNb250aGx5Q29zdC5jb25maWRlbmNlLFxuICAgICAgICAgIGFzc3VtcHRpb25zOiByLm5ld01vbnRobHlDb3N0LmFzc3VtcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfSkpLFxuICAgIF07XG5cbiAgICByZXR1cm4gYWxsQ29udHJpYnV0b3JzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5tb250aGx5Q29zdC5hbW91bnQgLSBhLm1vbnRobHlDb3N0LmFtb3VudClcbiAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGVycm9yIHRocmVzaG9sZCBtZXNzYWdlXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEVycm9yTWVzc2FnZShkZWx0YTogbnVtYmVyLCB0aHJlc2hvbGQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZXhjZWVkZWRCeSA9IGRlbHRhIC0gdGhyZXNob2xkO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAoKGV4Y2VlZGVkQnkgLyB0aHJlc2hvbGQpICogMTAwKS50b0ZpeGVkKDEpO1xuXG4gICAgcmV0dXJuIGBDb3N0IGluY3JlYXNlIG9mICQke2RlbHRhLnRvRml4ZWQoMil9L21vbnRoIGV4Y2VlZHMgZXJyb3IgdGhyZXNob2xkIG9mICQke3RocmVzaG9sZC50b0ZpeGVkKDIpfS9tb250aCBieSAkJHtleGNlZWRlZEJ5LnRvRml4ZWQoMil9ICgke3BlcmNlbnRhZ2V9JSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB3YXJuaW5nIHRocmVzaG9sZCBtZXNzYWdlXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFdhcm5pbmdNZXNzYWdlKGRlbHRhOiBudW1iZXIsIHRocmVzaG9sZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBleGNlZWRlZEJ5ID0gZGVsdGEgLSB0aHJlc2hvbGQ7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9ICgoZXhjZWVkZWRCeSAvIHRocmVzaG9sZCkgKiAxMDApLnRvRml4ZWQoMSk7XG5cbiAgICByZXR1cm4gYENvc3QgaW5jcmVhc2Ugb2YgJCR7ZGVsdGEudG9GaXhlZCgyKX0vbW9udGggZXhjZWVkcyB3YXJuaW5nIHRocmVzaG9sZCBvZiAkJHt0aHJlc2hvbGQudG9GaXhlZCgyKX0vbW9udGggYnkgJCR7ZXhjZWVkZWRCeS50b0ZpeGVkKDIpfSAoJHtwZXJjZW50YWdlfSUpYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVjb21tZW5kYXRpb25zIGJhc2VkIG9uIHRocmVzaG9sZCBsZXZlbCBhbmQgY29udHJpYnV0b3JzXG4gICAqL1xuICBwcml2YXRlIGdldFJlY29tbWVuZGF0aW9ucyhcbiAgICBsZXZlbDogJ3dhcm5pbmcnIHwgJ2Vycm9yJyxcbiAgICB0b3BDb250cmlidXRvcnM6IFJlc291cmNlQ29zdFtdLFxuICApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGxldmVsID09PSAnZXJyb3InKSB7XG4gICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgJ1RoaXMgY2hhbmdlIGNhbm5vdCBiZSBtZXJnZWQgd2l0aG91dCBhcHByb3ZhbCBkdWUgdG8gY29zdCBpbXBhY3QuJyxcbiAgICAgICk7XG4gICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgJ1JldmlldyB0aGUgY29zdCBicmVha2Rvd24gYW5kIGNvbnNpZGVyIG9wdGltaXphdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuJyxcbiAgICAgICk7XG4gICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgJ0NvbnRhY3QgeW91ciBGaW5PcHMgdGVhbSBmb3IgdGhyZXNob2xkIG92ZXJyaWRlIGFwcHJvdmFsIGlmIHRoaXMgY29zdCBpbmNyZWFzZSBpcyBuZWNlc3NhcnkuJyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29tbWVuZGF0aW9ucy5wdXNoKFxuICAgICAgICAnUmV2aWV3IHRoaXMgY29zdCBpbmNyZWFzZSB3aXRoIHlvdXIgdGVhbSBiZWZvcmUgbWVyZ2luZy4nLFxuICAgICAgKTtcbiAgICAgIHJlY29tbWVuZGF0aW9ucy5wdXNoKFxuICAgICAgICAnQ29uc2lkZXIgd2hldGhlciBhbGwgcmVzb3VyY2VzIGluIHRoaXMgY2hhbmdlIGFyZSBuZWNlc3NhcnkuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRvcENvbnRyaWJ1dG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgYFRvcCBjb3N0IGNvbnRyaWJ1dG9yczogJHt0b3BDb250cmlidXRvcnNcbiAgICAgICAgICAubWFwKChyKSA9PiBgJHtyLnR5cGV9ICgke3IubG9naWNhbElkfSk6ICQke3IubW9udGhseUNvc3QuYW1vdW50LnRvRml4ZWQoMil9L21vbnRoYClcbiAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgKTtcblxuICAgICAgLy8gU3BlY2lmaWMgcmVjb21tZW5kYXRpb25zIGJhc2VkIG9uIHJlc291cmNlIHR5cGVzXG4gICAgICBjb25zdCByZXNvdXJjZVR5cGVzID0gbmV3IFNldCh0b3BDb250cmlidXRvcnMubWFwKChyKSA9PiByLnR5cGUpKTtcblxuICAgICAgaWYgKHJlc291cmNlVHlwZXMuaGFzKCdBV1M6OlJEUzo6REJJbnN0YW5jZScpKSB7XG4gICAgICAgIHJlY29tbWVuZGF0aW9ucy5wdXNoKFxuICAgICAgICAgICdDb25zaWRlciB1c2luZyBzbWFsbGVyIFJEUyBpbnN0YW5jZSB0eXBlcyBvciBBdXJvcmEgU2VydmVybGVzcyBmb3IgbG93ZXIgY29zdHMuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlVHlwZXMuaGFzKCdBV1M6OkVDMjo6SW5zdGFuY2UnKSkge1xuICAgICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgc21hbGxlciBFQzIgaW5zdGFuY2UgdHlwZXMsIFNwb3QgaW5zdGFuY2VzLCBvciBTYXZpbmdzIFBsYW5zLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZVR5cGVzLmhhcygnQVdTOjpFQzI6Ok5hdEdhdGV3YXknKSkge1xuICAgICAgICByZWNvbW1lbmRhdGlvbnMucHVzaChcbiAgICAgICAgICAnTkFUIEdhdGV3YXlzIGhhdmUgaGlnaCBkYXRhIHByb2Nlc3NpbmcgY29zdHMuIENvbnNpZGVyIHVzaW5nIFZQQyBlbmRwb2ludHMgb3IgY29uc29saWRhdGluZyBOQVQgR2F0ZXdheXMuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICByZXNvdXJjZVR5cGVzLmhhcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXInKVxuICAgICAgKSB7XG4gICAgICAgIHJlY29tbWVuZGF0aW9ucy5wdXNoKFxuICAgICAgICAgICdMb2FkIEJhbGFuY2VycyBoYXZlIGhvdXJseSBjb3N0cy4gQ29uc2lkZXIgc2hhcmluZyBsb2FkIGJhbGFuY2VycyBhY3Jvc3Mgc2VydmljZXMgaWYgcG9zc2libGUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ThresholdEnforcer"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZXNob2xkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsMENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9UaHJlc2hvbGRFbmZvcmNlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ResourceCost } from '../pricing/types';
|
|
2
|
+
export interface ThresholdEvaluation {
|
|
3
|
+
passed: boolean;
|
|
4
|
+
level: 'none' | 'warning' | 'error';
|
|
5
|
+
threshold?: number;
|
|
6
|
+
delta: number;
|
|
7
|
+
message: string;
|
|
8
|
+
recommendations: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare class ThresholdExceededError extends Error {
|
|
11
|
+
threshold: number;
|
|
12
|
+
actualDelta: number;
|
|
13
|
+
topContributors: ResourceCost[];
|
|
14
|
+
constructor(message: string, threshold: number, actualDelta: number, topContributors: ResourceCost[]);
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThresholdExceededError = void 0;
|
|
4
|
+
class ThresholdExceededError extends Error {
|
|
5
|
+
threshold;
|
|
6
|
+
actualDelta;
|
|
7
|
+
topContributors;
|
|
8
|
+
constructor(message, threshold, actualDelta, topContributors) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.threshold = threshold;
|
|
11
|
+
this.actualDelta = actualDelta;
|
|
12
|
+
this.topContributors = topContributors;
|
|
13
|
+
this.name = 'ThresholdExceededError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.ThresholdExceededError = ThresholdExceededError;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZXNob2xkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLE1BQWEsc0JBQXVCLFNBQVEsS0FBSztJQUd0QztJQUNBO0lBQ0E7SUFKVCxZQUNFLE9BQWUsRUFDUixTQUFpQixFQUNqQixXQUFtQixFQUNuQixlQUErQjtRQUV0QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFKUixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUd0QyxJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQVZELHdEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VDb3N0IH0gZnJvbSAnLi4vcHJpY2luZy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZXNob2xkRXZhbHVhdGlvbiB7XG4gIHBhc3NlZDogYm9vbGVhbjtcbiAgbGV2ZWw6ICdub25lJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgZGVsdGE6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICByZWNvbW1lbmRhdGlvbnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgVGhyZXNob2xkRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyB0aHJlc2hvbGQ6IG51bWJlcixcbiAgICBwdWJsaWMgYWN0dWFsRGVsdGE6IG51bWJlcixcbiAgICBwdWJsaWMgdG9wQ29udHJpYnV0b3JzOiBSZXNvdXJjZUNvc3RbXSxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1RocmVzaG9sZEV4Y2VlZGVkRXJyb3InO1xuICB9XG59XG4iXX0=
|