cdk-cost-analyzer 0.1.20 → 0.1.22
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 +8 -8
- package/dist/analysis/SingleTemplateAnalyzer.js +2 -2
- package/dist/pricing/PricingService.d.ts +1 -1
- package/dist/pricing/PricingService.js +21 -7
- package/dist/pricing/calculators/AutoScalingGroupCalculator.d.ts +9 -0
- package/dist/pricing/calculators/AutoScalingGroupCalculator.js +125 -0
- package/dist/pricing/calculators/LaunchTemplateCalculator.d.ts +35 -0
- package/dist/pricing/calculators/LaunchTemplateCalculator.js +161 -0
- package/dist/pricing/index.d.ts +1 -0
- package/dist/pricing/index.js +4 -2
- package/dist/pricing/types.d.ts +2 -2
- package/dist/pricing/types.js +1 -1
- package/dist/releasetag.txt +1 -1
- package/package.json +1 -1
|
@@ -2,35 +2,35 @@
|
|
|
2
2
|
"entries": {
|
|
3
3
|
"AmazonS3:US East (N. Virginia):storageClass:General Purpose|volumeType:Standard": {
|
|
4
4
|
"price": 0.023,
|
|
5
|
-
"timestamp":
|
|
5
|
+
"timestamp": 1770321836931
|
|
6
6
|
},
|
|
7
7
|
"AmazonDynamoDB:US East (N. Virginia):group:DDB-ReadUnits|productFamily:Amazon DynamoDB PayPerRequest Throughput": {
|
|
8
8
|
"price": 0.023,
|
|
9
|
-
"timestamp":
|
|
9
|
+
"timestamp": 1770321836939
|
|
10
10
|
},
|
|
11
11
|
"AmazonDynamoDB:US East (N. Virginia):group:DDB-WriteUnits|productFamily:Amazon DynamoDB PayPerRequest Throughput": {
|
|
12
12
|
"price": 0.023,
|
|
13
|
-
"timestamp":
|
|
13
|
+
"timestamp": 1770321836939
|
|
14
14
|
},
|
|
15
15
|
"AmazonEC2:US East (N. Virginia):capacitystatus:Used|instanceType:t3.micro|operatingSystem:Linux|preInstalledSw:NA|tenancy:Shared": {
|
|
16
16
|
"price": 0.023,
|
|
17
|
-
"timestamp":
|
|
17
|
+
"timestamp": 1770321836953
|
|
18
18
|
},
|
|
19
19
|
"AWSLambda:US East (N. Virginia):group:AWS-Lambda-Requests": {
|
|
20
20
|
"price": 0.023,
|
|
21
|
-
"timestamp":
|
|
21
|
+
"timestamp": 1770321836958
|
|
22
22
|
},
|
|
23
23
|
"AWSLambda:US East (N. Virginia):group:AWS-Lambda-Duration": {
|
|
24
24
|
"price": 0.023,
|
|
25
|
-
"timestamp":
|
|
25
|
+
"timestamp": 1770321836958
|
|
26
26
|
},
|
|
27
27
|
"AmazonS3:EU (Frankfurt):storageClass:General Purpose|volumeType:Standard": {
|
|
28
28
|
"price": 0.023,
|
|
29
|
-
"timestamp":
|
|
29
|
+
"timestamp": 1770321846317
|
|
30
30
|
},
|
|
31
31
|
"AmazonS3:invalid-region-123:storageClass:General Purpose|volumeType:Standard": {
|
|
32
32
|
"price": 0.023,
|
|
33
|
-
"timestamp":
|
|
33
|
+
"timestamp": 1770321846357
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -63,7 +63,7 @@ class SingleTemplateAnalyzer {
|
|
|
63
63
|
// Calculate costs for all resources
|
|
64
64
|
const analyzedAt = new Date();
|
|
65
65
|
const resourceCosts = await Promise.all(resources.map(async (resource) => {
|
|
66
|
-
const monthlyCost = await pricingService.getResourceCost(resource, region);
|
|
66
|
+
const monthlyCost = await pricingService.getResourceCost(resource, region, resources);
|
|
67
67
|
return {
|
|
68
68
|
logicalId: resource.logicalId,
|
|
69
69
|
type: resource.type,
|
|
@@ -165,4 +165,4 @@ class SingleTemplateAnalyzer {
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
exports.SingleTemplateAnalyzer = SingleTemplateAnalyzer;
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlVGVtcGxhdGVBbmFseXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbmFseXNpcy9TaW5nbGVUZW1wbGF0ZUFuYWx5emVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2REFBMEQ7QUFDMUQsOERBQTJEO0FBWTNEOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakM7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQ2hCLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxNQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFjLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLCtCQUFjLENBQ3ZDLE1BQU0sRUFDTixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IsTUFBTSxFQUFFLFdBQVcsQ0FDcEIsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILHFCQUFxQjtZQUNyQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFxQixNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUNwRixDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsU0FBUztnQkFDVCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUU7YUFDdEMsQ0FBQyxDQUNILENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGFBQWEsR0FBMkIsTUFBTSxPQUFPLENBQUMs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SyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvQyxPQUFPO1lBQ0wsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixXQUFXO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUN0QixRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBcUMsRUFDckMsVUFBZ0I7UUFFaEIsNEJBQTRCO1FBQzVCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpHLDJDQUEyQztRQUMzQyxNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ2pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM3RSxDQUFDLE1BQU0sQ0FBQztRQUNULE1BQU0sd0JBQXdCLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztRQUUvRSxPQUFPO1lBQ0wsWUFBWTtZQUNaLE1BQU07WUFDTixVQUFVO1lBQ1YsYUFBYSxFQUFFLGFBQWEsQ0FBQyxNQUFNO1lBQ25DLHNCQUFzQjtZQUN0Qix3QkFBd0I7U0FDekIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5LRCx3REFtS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IFRlbXBsYXRlUGFyc2VyIH0gZnJvbSAnLi4vcGFyc2VyL1RlbXBsYXRlUGFyc2VyJztcbmltcG9ydCB7IFByaWNpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcHJpY2luZy9QcmljaW5nU2VydmljZSc7XG5pbXBvcnQgeyBSZXNvdXJjZVdpdGhJZCB9IGZyb20gJy4uL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQW5hbHlzaXNDb25maWcsXG4gIFNpbmdsZVRlbXBsYXRlQ29zdFJlc3VsdCxcbiAgQ29zdEJyZWFrZG93bixcbiAgUmVzb3VyY2VUeXBlQ29zdCxcbiAgQ29uZmlkZW5jZUxldmVsQ29zdCxcbiAgRW5oYW5jZWRSZXNvdXJjZUNvc3QsXG4gIEFuYWx5c2lzTWV0YWRhdGEsXG59IGZyb20gJy4uL2FwaS9zaW5nbGUtdGVtcGxhdGUtdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGFuYWx5emluZyBjb3N0cyBpbiBhIHNpbmdsZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlVGVtcGxhdGVBbmFseXplciB7XG4gIC8qKlxuICAgKiBBbmFseXplIGNvc3RzIGZvciBhbGwgcmVzb3VyY2VzIGluIGEgc2luZ2xlIHRlbXBsYXRlXG4gICAqIFxuICAgKiBAcGFyYW0gdGVtcGxhdGUgLSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBjb250ZW50IChKU09OIG9yIFlBTUwpXG4gICAqIEBwYXJhbSByZWdpb24gLSBBV1MgcmVnaW9uIGZvciBwcmljaW5nIGNhbGN1bGF0aW9uc1xuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgYW5hbHlzaXNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZGV0YWlsZWQgY29zdCBhbmFseXNpcyByZXN1bHRcbiAgICovXG4gIGFzeW5jIGFuYWx5emVDb3N0cyhcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIGNvbmZpZz86IEFuYWx5c2lzQ29uZmlnLFxuICApOiBQcm9taXNlPFNpbmdsZVRlbXBsYXRlQ29zdFJlc3VsdD4ge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBUZW1wbGF0ZVBhcnNlcigpO1xuICAgIGNvbnN0IHByaWNpbmdTZXJ2aWNlID0gbmV3IFByaWNpbmdTZXJ2aWNlKFxuICAgICAgcmVnaW9uLFxuICAgICAgY29uZmlnPy51c2FnZUFzc3VtcHRpb25zLFxuICAgICAgY29uZmlnPy5leGNsdWRlZFJlc291cmNlVHlwZXMsXG4gICAgICBjb25maWc/LmNhY2hlQ29uZmlnLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUGFyc2UgdGhlIHRlbXBsYXRlXG4gICAgICBjb25zdCBwYXJzZWRUZW1wbGF0ZSA9IHBhcnNlci5wYXJzZSh0ZW1wbGF0ZSk7XG4gICAgICBjb25zdCByZXNvdXJjZXM6IFJlc291cmNlV2l0aElkW10gPSBPYmplY3QuZW50cmllcyhwYXJzZWRUZW1wbGF0ZS5SZXNvdXJjZXMgfHwge30pLm1hcChcbiAgICAgICAgKFtsb2dpY2FsSWQsIHJlc291cmNlXTogW3N0cmluZywgYW55XSkgPT4gKHtcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UuVHlwZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiByZXNvdXJjZS5Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBjb3N0cyBmb3IgYWxsIHJlc291cmNlc1xuICAgICAgY29uc3QgYW5hbHl6ZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCByZXNvdXJjZUNvc3RzOiBFbmhhbmNlZFJlc291cmNlQ29zdFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlc291cmNlcy5tYXAoYXN5bmMgKHJlc291cmNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9udGhseUNvc3QgPSBhd2FpdCBwcmljaW5nU2VydmljZS5nZXRSZXNvdXJjZUNvc3QocmVzb3VyY2UsIHJlZ2lvbik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICAgIG1vbnRobHlDb3N0LFxuICAgICAgICAgICAgcHJvcGVydGllczogcmVzb3VyY2UucHJvcGVydGllcyxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgIGNhbGN1bGF0ZWRBdDogYW5hbHl6ZWRBdCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBjb3N0XG4gICAgICBjb25zdCB0b3RhbE1vbnRobHlDb3N0ID0gcmVzb3VyY2VDb3N0cy5yZWR1Y2UoXG4gICAgICAgIChzdW0sIHJjKSA9PiBzdW0gKyByYy5tb250aGx5Q29zdC5hbW91bnQsXG4gICAgICAgIDAsXG4gICAgICApO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBjb3N0IGJyZWFrZG93blxuICAgICAgY29uc3QgY29zdEJyZWFrZG93biA9IHRoaXMuZ2VuZXJhdGVDb3N0QnJlYWtkb3duKHJlc291cmNlQ29zdHMpO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmdlbmVyYXRlTWV0YWRhdGEodGVtcGxhdGUsIHJlZ2lvbiwgcmVzb3VyY2VDb3N0cywgYW5hbHl6ZWRBdCk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHN1bW1hcnkgKHBsYWNlaG9sZGVyIC0gd2lsbCBiZSByZXBsYWNlZCBieSByZXBvcnRlcilcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBgVG90YWwgbW9udGhseSBjb3N0OiAkJHt0b3RhbE1vbnRobHlDb3N0LnRvRml4ZWQoMil9IFVTRGA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsTW9udGhseUNvc3QsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgcmVzb3VyY2VDb3N0cyxcbiAgICAgICAgY29zdEJyZWFrZG93bixcbiAgICAgICAgc3VtbWFyeSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cCBwcmljaW5nIHNlcnZpY2UgcmVzb3VyY2VzXG4gICAgICBwcmljaW5nU2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGNvc3QgYnJlYWtkb3duIGdyb3VwZWQgYnkgcmVzb3VyY2UgdHlwZSBhbmQgY29uZmlkZW5jZSBsZXZlbFxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvc3RCcmVha2Rvd24ocmVzb3VyY2VDb3N0czogRW5oYW5jZWRSZXNvdXJjZUNvc3RbXSk6IENvc3RCcmVha2Rvd24ge1xuICAgIC8vIEdyb3VwIGJ5IHJlc291cmNlIHR5cGVcbiAgICBjb25zdCBieVR5cGVNYXAgPSBuZXcgTWFwPHN0cmluZywgRW5oYW5jZWRSZXNvdXJjZUNvc3RbXT4oKTtcbiAgICBmb3IgKGNvbnN0IHJjIG9mIHJlc291cmNlQ29zdHMpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYnlUeXBlTWFwLmdldChyYy50eXBlKSB8fCBbXTtcbiAgICAgIGV4aXN0aW5nLnB1c2gocmMpO1xuICAgICAgYnlUeXBlTWFwLnNldChyYy50eXBlLCBleGlzdGluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYnlSZXNvdXJjZVR5cGU6IFJlc291cmNlVHlwZUNvc3RbXSA9IEFycmF5LmZyb20oYnlUeXBlTWFwLmVudHJpZXMoKSlcbiAgICAgIC5tYXAoKFtyZXNvdXJjZVR5cGUsIHJlc291cmNlc10pID0+ICh7XG4gICAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgICAgY291bnQ6IHJlc291cmNlcy5sZW5ndGgsXG4gICAgICAgIHRvdGFsQ29zdDogcmVzb3VyY2VzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLm1vbnRobHlDb3N0LmFtb3VudCwgMCksXG4gICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHIubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHIudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdDogci5tb250aGx5Q29zdCxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi50b3RhbENvc3QgLSBhLnRvdGFsQ29zdCk7IC8vIFNvcnQgYnkgY29zdCBkZXNjZW5kaW5nXG5cbiAgICAvLyBHcm91cCBieSBjb25maWRlbmNlIGxldmVsXG4gICAgY29uc3QgYnlDb25maWRlbmNlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVuaGFuY2VkUmVzb3VyY2VDb3N0W10+KCk7XG4gICAgZm9yIChjb25zdCByYyBvZiByZXNvdXJjZUNvc3RzKSB7XG4gICAgICBjb25zdCBjb25maWRlbmNlID0gcmMubW9udGhseUNvc3QuY29uZmlkZW5jZTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYnlDb25maWRlbmNlTWFwLmdldChjb25maWRlbmNlKSB8fCBbXTtcbiAgICAgIGV4aXN0aW5nLnB1c2gocmMpO1xuICAgICAgYnlDb25maWRlbmNlTWFwLnNldChjb25maWRlbmNlLCBleGlzdGluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYnlDb25maWRlbmNlTGV2ZWw6IENvbmZpZGVuY2VMZXZlbENvc3RbXSA9IEFycmF5LmZyb20oYnlDb25maWRlbmNlTWFwLmVudHJpZXMoKSkubWFwKFxuICAgICAgKFtjb25maWRlbmNlLCByZXNvdXJjZXNdKSA9PiAoe1xuICAgICAgICBjb25maWRlbmNlOiBjb25maWRlbmNlIGFzICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCAndW5rbm93bicsXG4gICAgICAgIGNvdW50OiByZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgICB0b3RhbENvc3Q6IHJlc291cmNlcy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5tb250aGx5Q29zdC5hbW91bnQsIDApLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENvbGxlY3QgYWxsIHVuaXF1ZSBhc3N1bXB0aW9uc1xuICAgIGNvbnN0IGFzc3VtcHRpb25zU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByYyBvZiByZXNvdXJjZUNvc3RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGFzc3VtcHRpb24gb2YgcmMubW9udGhseUNvc3QuYXNzdW1wdGlvbnMpIHtcbiAgICAgICAgYXNzdW1wdGlvbnNTZXQuYWRkKGFzc3VtcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IEFycmF5LmZyb20oYXNzdW1wdGlvbnNTZXQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ5UmVzb3VyY2VUeXBlLFxuICAgICAgYnlDb25maWRlbmNlTGV2ZWwsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1ldGFkYXRhIGFib3V0IHRoZSBhbmFseXNpc1xuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU1ldGFkYXRhKFxuICAgIHRlbXBsYXRlOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcmVzb3VyY2VDb3N0czogRW5oYW5jZWRSZXNvdXJjZUNvc3RbXSxcbiAgICBhbmFseXplZEF0OiBEYXRlLFxuICApOiBBbmFseXNpc01ldGFkYXRhIHtcbiAgICAvLyBHZW5lcmF0ZSBoYXNoIG9mIHRlbXBsYXRlXG4gICAgY29uc3QgdGVtcGxhdGVIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0ZW1wbGF0ZSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuXG4gICAgLy8gQ291bnQgc3VwcG9ydGVkIHZzIHVuc3VwcG9ydGVkIHJlc291cmNlc1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlc291cmNlQ291bnQgPSByZXNvdXJjZUNvc3RzLmZpbHRlcihcbiAgICAgIChyYykgPT4gcmMubW9udGhseUNvc3QuY29uZmlkZW5jZSAhPT0gJ3Vua25vd24nIHx8IHJjLm1vbnRobHlDb3N0LmFtb3VudCA+IDAsXG4gICAgKS5sZW5ndGg7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRSZXNvdXJjZUNvdW50ID0gcmVzb3VyY2VDb3N0cy5sZW5ndGggLSBzdXBwb3J0ZWRSZXNvdXJjZUNvdW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbXBsYXRlSGFzaCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFuYWx5emVkQXQsXG4gICAgICByZXNvdXJjZUNvdW50OiByZXNvdXJjZUNvc3RzLmxlbmd0aCxcbiAgICAgIHN1cHBvcnRlZFJlc291cmNlQ291bnQsXG4gICAgICB1bnN1cHBvcnRlZFJlc291cmNlQ291bnQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlVGVtcGxhdGVBbmFseXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbmFseXNpcy9TaW5nbGVUZW1wbGF0ZUFuYWx5emVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2REFBMEQ7QUFDMUQsOERBQTJEO0FBWTNEOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakM7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQ2hCLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxNQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFjLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLCtCQUFjLENBQ3ZDLE1BQU0sRUFDTixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IsTUFBTSxFQUFFLFdBQVcsQ0FDcEIsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILHFCQUFxQjtZQUNyQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFxQixNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUNwRixDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsU0FBUztnQkFDVCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUU7YUFDdEMsQ0FBQyxDQUNILENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGFBQWEsR0FBMkIsTUFBTSxPQUFPLENBQUMs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VyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFL0MsT0FBTztZQUNMLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsV0FBVztTQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FDdEIsUUFBZ0IsRUFDaEIsTUFBYyxFQUNkLGFBQXFDLEVBQ3JDLFVBQWdCO1FBRWhCLDRCQUE0QjtRQUM1QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqRywyQ0FBMkM7UUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNqRCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDN0UsQ0FBQyxNQUFNLENBQUM7UUFDVCxNQUFNLHdCQUF3QixHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7UUFFL0UsT0FBTztZQUNMLFlBQVk7WUFDWixNQUFNO1lBQ04sVUFBVTtZQUNWLGFBQWEsRUFBRSxhQUFhLENBQUMsTUFBTTtZQUNuQyxzQkFBc0I7WUFDdEIsd0JBQXdCO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuS0Qsd0RBbUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBhcnNlciB9IGZyb20gJy4uL3BhcnNlci9UZW1wbGF0ZVBhcnNlcic7XG5pbXBvcnQgeyBQcmljaW5nU2VydmljZSB9IGZyb20gJy4uL3ByaWNpbmcvUHJpY2luZ1NlcnZpY2UnO1xuaW1wb3J0IHsgUmVzb3VyY2VXaXRoSWQgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7XG4gIEFuYWx5c2lzQ29uZmlnLFxuICBTaW5nbGVUZW1wbGF0ZUNvc3RSZXN1bHQsXG4gIENvc3RCcmVha2Rvd24sXG4gIFJlc291cmNlVHlwZUNvc3QsXG4gIENvbmZpZGVuY2VMZXZlbENvc3QsXG4gIEVuaGFuY2VkUmVzb3VyY2VDb3N0LFxuICBBbmFseXNpc01ldGFkYXRhLFxufSBmcm9tICcuLi9hcGkvc2luZ2xlLXRlbXBsYXRlLXR5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBhbmFseXppbmcgY29zdHMgaW4gYSBzaW5nbGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbmdsZVRlbXBsYXRlQW5hbHl6ZXIge1xuICAvKipcbiAgICogQW5hbHl6ZSBjb3N0cyBmb3IgYWxsIHJlc291cmNlcyBpbiBhIHNpbmdsZSB0ZW1wbGF0ZVxuICAgKiBcbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgY29udGVudCAoSlNPTiBvciBZQU1MKVxuICAgKiBAcGFyYW0gcmVnaW9uIC0gQVdTIHJlZ2lvbiBmb3IgcHJpY2luZyBjYWxjdWxhdGlvbnNcbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGFuYWx5c2lzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRldGFpbGVkIGNvc3QgYW5hbHlzaXMgcmVzdWx0XG4gICAqL1xuICBhc3luYyBhbmFseXplQ29zdHMoXG4gICAgdGVtcGxhdGU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBjb25maWc/OiBBbmFseXNpc0NvbmZpZyxcbiAgKTogUHJvbWlzZTxTaW5nbGVUZW1wbGF0ZUNvc3RSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgVGVtcGxhdGVQYXJzZXIoKTtcbiAgICBjb25zdCBwcmljaW5nU2VydmljZSA9IG5ldyBQcmljaW5nU2VydmljZShcbiAgICAgIHJlZ2lvbixcbiAgICAgIGNvbmZpZz8udXNhZ2VBc3N1bXB0aW9ucyxcbiAgICAgIGNvbmZpZz8uZXhjbHVkZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgY29uZmlnPy5jYWNoZUNvbmZpZyxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhcnNlIHRoZSB0ZW1wbGF0ZVxuICAgICAgY29uc3QgcGFyc2VkVGVtcGxhdGUgPSBwYXJzZXIucGFyc2UodGVtcGxhdGUpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzOiBSZXNvdXJjZVdpdGhJZFtdID0gT2JqZWN0LmVudHJpZXMocGFyc2VkVGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbG9naWNhbElkLCByZXNvdXJjZV06IFtzdHJpbmcsIGFueV0pID0+ICh7XG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLlR5cGUsXG4gICAgICAgICAgcHJvcGVydGllczogcmVzb3VyY2UuUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgY29zdHMgZm9yIGFsbCByZXNvdXJjZXNcbiAgICAgIGNvbnN0IGFuYWx5emVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgcmVzb3VyY2VDb3N0czogRW5oYW5jZWRSZXNvdXJjZUNvc3RbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICByZXNvdXJjZXMubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1vbnRobHlDb3N0ID0gYXdhaXQgcHJpY2luZ1NlcnZpY2UuZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlLCByZWdpb24sIHJlc291cmNlcyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICAgIG1vbnRobHlDb3N0LFxuICAgICAgICAgICAgcHJvcGVydGllczogcmVzb3VyY2UucHJvcGVydGllcyxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgIGNhbGN1bGF0ZWRBdDogYW5hbHl6ZWRBdCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBjb3N0XG4gICAgICBjb25zdCB0b3RhbE1vbnRobHlDb3N0ID0gcmVzb3VyY2VDb3N0cy5yZWR1Y2UoXG4gICAgICAgIChzdW0sIHJjKSA9PiBzdW0gKyByYy5tb250aGx5Q29zdC5hbW91bnQsXG4gICAgICAgIDAsXG4gICAgICApO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBjb3N0IGJyZWFrZG93blxuICAgICAgY29uc3QgY29zdEJyZWFrZG93biA9IHRoaXMuZ2VuZXJhdGVDb3N0QnJlYWtkb3duKHJlc291cmNlQ29zdHMpO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmdlbmVyYXRlTWV0YWRhdGEodGVtcGxhdGUsIHJlZ2lvbiwgcmVzb3VyY2VDb3N0cywgYW5hbHl6ZWRBdCk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHN1bW1hcnkgKHBsYWNlaG9sZGVyIC0gd2lsbCBiZSByZXBsYWNlZCBieSByZXBvcnRlcilcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBgVG90YWwgbW9udGhseSBjb3N0OiAkJHt0b3RhbE1vbnRobHlDb3N0LnRvRml4ZWQoMil9IFVTRGA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsTW9udGhseUNvc3QsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgcmVzb3VyY2VDb3N0cyxcbiAgICAgICAgY29zdEJyZWFrZG93bixcbiAgICAgICAgc3VtbWFyeSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cCBwcmljaW5nIHNlcnZpY2UgcmVzb3VyY2VzXG4gICAgICBwcmljaW5nU2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGNvc3QgYnJlYWtkb3duIGdyb3VwZWQgYnkgcmVzb3VyY2UgdHlwZSBhbmQgY29uZmlkZW5jZSBsZXZlbFxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvc3RCcmVha2Rvd24ocmVzb3VyY2VDb3N0czogRW5oYW5jZWRSZXNvdXJjZUNvc3RbXSk6IENvc3RCcmVha2Rvd24ge1xuICAgIC8vIEdyb3VwIGJ5IHJlc291cmNlIHR5cGVcbiAgICBjb25zdCBieVR5cGVNYXAgPSBuZXcgTWFwPHN0cmluZywgRW5oYW5jZWRSZXNvdXJjZUNvc3RbXT4oKTtcbiAgICBmb3IgKGNvbnN0IHJjIG9mIHJlc291cmNlQ29zdHMpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYnlUeXBlTWFwLmdldChyYy50eXBlKSB8fCBbXTtcbiAgICAgIGV4aXN0aW5nLnB1c2gocmMpO1xuICAgICAgYnlUeXBlTWFwLnNldChyYy50eXBlLCBleGlzdGluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYnlSZXNvdXJjZVR5cGU6IFJlc291cmNlVHlwZUNvc3RbXSA9IEFycmF5LmZyb20oYnlUeXBlTWFwLmVudHJpZXMoKSlcbiAgICAgIC5tYXAoKFtyZXNvdXJjZVR5cGUsIHJlc291cmNlc10pID0+ICh7XG4gICAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgICAgY291bnQ6IHJlc291cmNlcy5sZW5ndGgsXG4gICAgICAgIHRvdGFsQ29zdDogcmVzb3VyY2VzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLm1vbnRobHlDb3N0LmFtb3VudCwgMCksXG4gICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHIubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHIudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdDogci5tb250aGx5Q29zdCxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi50b3RhbENvc3QgLSBhLnRvdGFsQ29zdCk7IC8vIFNvcnQgYnkgY29zdCBkZXNjZW5kaW5nXG5cbiAgICAvLyBHcm91cCBieSBjb25maWRlbmNlIGxldmVsXG4gICAgY29uc3QgYnlDb25maWRlbmNlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVuaGFuY2VkUmVzb3VyY2VDb3N0W10+KCk7XG4gICAgZm9yIChjb25zdCByYyBvZiByZXNvdXJjZUNvc3RzKSB7XG4gICAgICBjb25zdCBjb25maWRlbmNlID0gcmMubW9udGhseUNvc3QuY29uZmlkZW5jZTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYnlDb25maWRlbmNlTWFwLmdldChjb25maWRlbmNlKSB8fCBbXTtcbiAgICAgIGV4aXN0aW5nLnB1c2gocmMpO1xuICAgICAgYnlDb25maWRlbmNlTWFwLnNldChjb25maWRlbmNlLCBleGlzdGluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYnlDb25maWRlbmNlTGV2ZWw6IENvbmZpZGVuY2VMZXZlbENvc3RbXSA9IEFycmF5LmZyb20oYnlDb25maWRlbmNlTWFwLmVudHJpZXMoKSkubWFwKFxuICAgICAgKFtjb25maWRlbmNlLCByZXNvdXJjZXNdKSA9PiAoe1xuICAgICAgICBjb25maWRlbmNlOiBjb25maWRlbmNlIGFzICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCAndW5rbm93bicsXG4gICAgICAgIGNvdW50OiByZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgICB0b3RhbENvc3Q6IHJlc291cmNlcy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5tb250aGx5Q29zdC5hbW91bnQsIDApLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENvbGxlY3QgYWxsIHVuaXF1ZSBhc3N1bXB0aW9uc1xuICAgIGNvbnN0IGFzc3VtcHRpb25zU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByYyBvZiByZXNvdXJjZUNvc3RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGFzc3VtcHRpb24gb2YgcmMubW9udGhseUNvc3QuYXNzdW1wdGlvbnMpIHtcbiAgICAgICAgYXNzdW1wdGlvbnNTZXQuYWRkKGFzc3VtcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IEFycmF5LmZyb20oYXNzdW1wdGlvbnNTZXQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ5UmVzb3VyY2VUeXBlLFxuICAgICAgYnlDb25maWRlbmNlTGV2ZWwsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1ldGFkYXRhIGFib3V0IHRoZSBhbmFseXNpc1xuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU1ldGFkYXRhKFxuICAgIHRlbXBsYXRlOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcmVzb3VyY2VDb3N0czogRW5oYW5jZWRSZXNvdXJjZUNvc3RbXSxcbiAgICBhbmFseXplZEF0OiBEYXRlLFxuICApOiBBbmFseXNpc01ldGFkYXRhIHtcbiAgICAvLyBHZW5lcmF0ZSBoYXNoIG9mIHRlbXBsYXRlXG4gICAgY29uc3QgdGVtcGxhdGVIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0ZW1wbGF0ZSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuXG4gICAgLy8gQ291bnQgc3VwcG9ydGVkIHZzIHVuc3VwcG9ydGVkIHJlc291cmNlc1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlc291cmNlQ291bnQgPSByZXNvdXJjZUNvc3RzLmZpbHRlcihcbiAgICAgIChyYykgPT4gcmMubW9udGhseUNvc3QuY29uZmlkZW5jZSAhPT0gJ3Vua25vd24nIHx8IHJjLm1vbnRobHlDb3N0LmFtb3VudCA+IDAsXG4gICAgKS5sZW5ndGg7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRSZXNvdXJjZUNvdW50ID0gcmVzb3VyY2VDb3N0cy5sZW5ndGggLSBzdXBwb3J0ZWRSZXNvdXJjZUNvdW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbXBsYXRlSGFzaCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFuYWx5emVkQXQsXG4gICAgICByZXNvdXJjZUNvdW50OiByZXNvdXJjZUNvc3RzLmxlbmd0aCxcbiAgICAgIHN1cHBvcnRlZFJlc291cmNlQ291bnQsXG4gICAgICB1bnN1cHBvcnRlZFJlc291cmNlQ291bnQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -7,7 +7,7 @@ export declare class PricingService implements IPricingService {
|
|
|
7
7
|
private pricingClient;
|
|
8
8
|
private excludedResourceTypes;
|
|
9
9
|
constructor(region?: string, usageAssumptions?: UsageAssumptionsConfig, excludedResourceTypes?: string[], cacheConfig?: CacheConfig, pricingClient?: PricingClient);
|
|
10
|
-
getResourceCost(resource: ResourceWithId, region: string): Promise<MonthlyCost>;
|
|
10
|
+
getResourceCost(resource: ResourceWithId, region: string, templateResources?: ResourceWithId[]): Promise<MonthlyCost>;
|
|
11
11
|
getCostDelta(diff: ResourceDiff, region: string): Promise<CostDelta>;
|
|
12
12
|
/**
|
|
13
13
|
* Clean up resources and connections
|
|
@@ -4,12 +4,14 @@ exports.PricingService = void 0;
|
|
|
4
4
|
const CacheManager_1 = require("./CacheManager");
|
|
5
5
|
const ALBCalculator_1 = require("./calculators/ALBCalculator");
|
|
6
6
|
const APIGatewayCalculator_1 = require("./calculators/APIGatewayCalculator");
|
|
7
|
+
const AutoScalingGroupCalculator_1 = require("./calculators/AutoScalingGroupCalculator");
|
|
7
8
|
const CloudFrontCalculator_1 = require("./calculators/CloudFrontCalculator");
|
|
8
9
|
const DynamoDBCalculator_1 = require("./calculators/DynamoDBCalculator");
|
|
9
10
|
const EC2Calculator_1 = require("./calculators/EC2Calculator");
|
|
10
11
|
const ECSCalculator_1 = require("./calculators/ECSCalculator");
|
|
11
12
|
const ElastiCacheCalculator_1 = require("./calculators/ElastiCacheCalculator");
|
|
12
13
|
const LambdaCalculator_1 = require("./calculators/LambdaCalculator");
|
|
14
|
+
const LaunchTemplateCalculator_1 = require("./calculators/LaunchTemplateCalculator");
|
|
13
15
|
const NatGatewayCalculator_1 = require("./calculators/NatGatewayCalculator");
|
|
14
16
|
const NLBCalculator_1 = require("./calculators/NLBCalculator");
|
|
15
17
|
const RDSCalculator_1 = require("./calculators/RDSCalculator");
|
|
@@ -51,9 +53,11 @@ class PricingService {
|
|
|
51
53
|
new VPCEndpointCalculator_1.VPCEndpointCalculator(usageAssumptions?.vpcEndpoint?.dataProcessedGB),
|
|
52
54
|
new CloudFrontCalculator_1.CloudFrontCalculator(usageAssumptions?.cloudfront?.dataTransferGB, usageAssumptions?.cloudfront?.requests),
|
|
53
55
|
new ElastiCacheCalculator_1.ElastiCacheCalculator(),
|
|
56
|
+
new AutoScalingGroupCalculator_1.AutoScalingGroupCalculator(),
|
|
57
|
+
new LaunchTemplateCalculator_1.LaunchTemplateCalculator(),
|
|
54
58
|
];
|
|
55
59
|
}
|
|
56
|
-
async getResourceCost(resource, region) {
|
|
60
|
+
async getResourceCost(resource, region, templateResources) {
|
|
57
61
|
// Check if resource type is excluded
|
|
58
62
|
if (this.excludedResourceTypes.has(resource.type)) {
|
|
59
63
|
return {
|
|
@@ -79,7 +83,7 @@ class PricingService {
|
|
|
79
83
|
};
|
|
80
84
|
}
|
|
81
85
|
try {
|
|
82
|
-
return await calculator.calculateCost(resource, region, this.pricingClient);
|
|
86
|
+
return await calculator.calculateCost(resource, region, this.pricingClient, templateResources);
|
|
83
87
|
}
|
|
84
88
|
catch (error) {
|
|
85
89
|
return {
|
|
@@ -95,8 +99,18 @@ class PricingService {
|
|
|
95
99
|
const filteredAdded = diff.added.filter(r => !this.excludedResourceTypes.has(r.type));
|
|
96
100
|
const filteredRemoved = diff.removed.filter(r => !this.excludedResourceTypes.has(r.type));
|
|
97
101
|
const filteredModified = diff.modified.filter(r => !this.excludedResourceTypes.has(r.type));
|
|
102
|
+
// Build template resource context from all resources in the diff
|
|
103
|
+
const allResources = [
|
|
104
|
+
...diff.added,
|
|
105
|
+
...diff.removed,
|
|
106
|
+
...diff.modified.map(r => ({
|
|
107
|
+
logicalId: r.logicalId,
|
|
108
|
+
type: r.type,
|
|
109
|
+
properties: r.newProperties,
|
|
110
|
+
})),
|
|
111
|
+
];
|
|
98
112
|
const addedCosts = await Promise.all(filteredAdded.map(async (resource) => {
|
|
99
|
-
const monthlyCost = await this.getResourceCost(resource, region);
|
|
113
|
+
const monthlyCost = await this.getResourceCost(resource, region, allResources);
|
|
100
114
|
return {
|
|
101
115
|
logicalId: resource.logicalId,
|
|
102
116
|
type: resource.type,
|
|
@@ -104,7 +118,7 @@ class PricingService {
|
|
|
104
118
|
};
|
|
105
119
|
}));
|
|
106
120
|
const removedCosts = await Promise.all(filteredRemoved.map(async (resource) => {
|
|
107
|
-
const monthlyCost = await this.getResourceCost(resource, region);
|
|
121
|
+
const monthlyCost = await this.getResourceCost(resource, region, allResources);
|
|
108
122
|
return {
|
|
109
123
|
logicalId: resource.logicalId,
|
|
110
124
|
type: resource.type,
|
|
@@ -122,8 +136,8 @@ class PricingService {
|
|
|
122
136
|
type: resource.type,
|
|
123
137
|
properties: resource.newProperties,
|
|
124
138
|
};
|
|
125
|
-
const oldMonthlyCost = await this.getResourceCost(oldResource, region);
|
|
126
|
-
const newMonthlyCost = await this.getResourceCost(newResource, region);
|
|
139
|
+
const oldMonthlyCost = await this.getResourceCost(oldResource, region, allResources);
|
|
140
|
+
const newMonthlyCost = await this.getResourceCost(newResource, region, allResources);
|
|
127
141
|
const costDelta = newMonthlyCost.amount - oldMonthlyCost.amount;
|
|
128
142
|
return {
|
|
129
143
|
logicalId: resource.logicalId,
|
|
@@ -154,4 +168,4 @@ class PricingService {
|
|
|
154
168
|
}
|
|
155
169
|
}
|
|
156
170
|
exports.PricingService = PricingService;
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpY2luZ1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy9QcmljaW5nU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBOEM7QUFDOUMsK0RBQTREO0FBQzVELDZFQUEwRTtBQUMxRSw2RUFBMEU7QUFDMUUseUVBQXNFO0FBQ3RFLCtEQUE0RDtBQUM1RCwrREFBNEQ7QUFDNUQsK0VBQTRFO0FBQzVFLHFFQUFrRTtBQUNsRSw2RUFBMEU7QUFDMUUsK0RBQTREO0FBQzVELCtEQUE0RDtBQUM1RCw2REFBMEQ7QUFDMUQsK0VBQTRFO0FBQzVFLG1EQUFnRDtBQVVoRCxNQUFhLGNBQWM7SUFDakIsV0FBVyxDQUEyQjtJQUN0QyxhQUFhLENBQWdCO0lBQzdCLHFCQUFxQixDQUFjO0lBRTNDLFlBQ0UsU0FBaUIsV0FBVyxFQUM1QixnQkFBeUMsRUFDekMscUJBQWdDLEVBQ2hDLFdBQXlCLEVBQ3pCLGFBQTZCO1FBRTdCLGtEQUFrRDtRQUNsRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELElBQUksWUFBc0MsQ0FBQztZQUMzQyxJQUFJLFdBQVcsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sYUFBYSxHQUFHLFdBQVcsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO2dCQUN2RCxZQUFZLEdBQUcsSUFBSSwyQkFBWSxDQUFDLDBCQUEwQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksNkJBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVsRSxtREFBbUQ7UUFDbkQsTUFBTSxNQUFNLEdBQW1DLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVuRyxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLElBQUksNkJBQWEsRUFBRTtZQUNuQixJQUFJLDJCQUFZLEVBQUU7WUFDbEIsSUFBSSxtQ0FBZ0IsQ0FDbEIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUM3QyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQzVDO1lBQ0QsSUFBSSw2QkFBYSxFQUFFO1lBQ25CLElBQUksdUNBQWtCLENBQUMsTUFBTSxDQUFDO1lBQzlCLElBQUksNkJBQWEsRUFBRTtZQUNuQixJQUFJLDJDQUFvQixFQUFFO1lBQzFCLElBQUksMkNBQW9CLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQztZQUN2RSxJQUFJLDZCQUFhLENBQ2YsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsMEJBQTBCLEVBQ2pELGdCQUFnQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FDeEM7WUFDRCxJQUFJLDZCQUFhLENBQ2YsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsMEJBQTBCLEVBQ2pELGdCQUFnQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FDeEM7WUFDRCxJQUFJLDZDQUFxQixDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUM7WUFDekUsSUFBSSwyQ0FBb0IsQ0FDdEIsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFDNUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FDdkM7WUFDRCxJQUFJLDZDQUFxQixFQUFFO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUF3QixFQUFFLE1BQWM7UUFDNUQscUNBQXFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsRUFBRSxLQUFLO2dCQUNmLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsUUFBUSxDQUFDLElBQUksaUNBQWlDLENBQUM7YUFDL0UsQ0FBQztRQUNKLENBQUM7UUFFRCxtRkFBbUY7UUFDbkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNMLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsRUFBRSxLQUFLO2dCQUNmLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUM7YUFDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxDQUFDLDZCQUE2QixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNyRyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLElBQWtCLEVBQUUsTUFBYztRQUNuRCxrREFBa0Q7UUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU1RixNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2xDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ25DLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakUsT0FBTztnQkFDTCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDbkIsV0FBVzthQUNaLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNwQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFdBQVc7YUFDWixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDckMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN0QyxNQUFNLFdBQVcsR0FBbUI7Z0JBQ2xDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWE7YUFDbkMsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFtQjtnQkFDbEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxRQUFRLENBQUMsYUFBYTthQUNuQyxDQUFDO1lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUVoRSxPQUFPO2dCQUNMLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixXQUFXLEVBQUUsY0FBYztnQkFDM0IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLFNBQVM7YUFDVixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxGLE1BQU0sVUFBVSxHQUFHLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztRQUUxRSxPQUFPO1lBQ0wsVUFBVTtZQUNWLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVTtZQUNWLFlBQVk7WUFDWixhQUFhO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQWxMRCx3Q0FrTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYWNoZU1hbmFnZXIgfSBmcm9tICcuL0NhY2hlTWFuYWdlcic7XG5pbXBvcnQgeyBBTEJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9BTEJDYWxjdWxhdG9yJztcbmltcG9ydCB7IEFQSUdhdGV3YXlDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9BUElHYXRld2F5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBDbG91ZEZyb250Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQ2xvdWRGcm9udENhbGN1bGF0b3InO1xuaW1wb3J0IHsgRHluYW1vREJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9EeW5hbW9EQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgRUMyQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRUMyQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBFQ1NDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FQ1NDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVsYXN0aUNhY2hlQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRWxhc3RpQ2FjaGVDYWxjdWxhdG9yJztcbmltcG9ydCB7IExhbWJkYUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0xhbWJkYUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgTmF0R2F0ZXdheUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05hdEdhdGV3YXlDYWxjdWxhdG9yJztcbmltcG9ydCB7IE5MQkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05MQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgUkRTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvUkRTQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTM0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1MzQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBWUENFbmRwb2ludENhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1ZQQ0VuZHBvaW50Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBQcmljaW5nQ2xpZW50IH0gZnJvbSAnLi9QcmljaW5nQ2xpZW50JztcbmltcG9ydCB7XG4gIFByaWNpbmdTZXJ2aWNlIGFzIElQcmljaW5nU2VydmljZSxcbiAgTW9udGhseUNvc3QsXG4gIENvc3REZWx0YSxcbiAgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLCBDYWNoZUNvbmZpZywgQ29zdEFuYWx5emVyQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJztcbmltcG9ydCB7IFJlc291cmNlV2l0aElkLCBSZXNvdXJjZURpZmYgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFByaWNpbmdTZXJ2aWNlIGltcGxlbWVudHMgSVByaWNpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWxjdWxhdG9yczogUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcltdO1xuICBwcml2YXRlIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQ7XG4gIHByaXZhdGUgZXhjbHVkZWRSZXNvdXJjZVR5cGVzOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWdpb246IHN0cmluZyA9ICd1cy1lYXN0LTEnLFxuICAgIHVzYWdlQXNzdW1wdGlvbnM/OiBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLFxuICAgIGV4Y2x1ZGVkUmVzb3VyY2VUeXBlcz86IHN0cmluZ1tdLFxuICAgIGNhY2hlQ29uZmlnPzogQ2FjaGVDb25maWcsXG4gICAgcHJpY2luZ0NsaWVudD86IFByaWNpbmdDbGllbnQsXG4gICkge1xuICAgIC8vIFVzZSBwcm92aWRlZCBwcmljaW5nIGNsaWVudCBvciBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKHByaWNpbmdDbGllbnQpIHtcbiAgICAgIHRoaXMucHJpY2luZ0NsaWVudCA9IHByaWNpbmdDbGllbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRpYWxpemUgY2FjaGUgbWFuYWdlciBpZiBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICAgIGxldCBjYWNoZU1hbmFnZXI6IENhY2hlTWFuYWdlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjYWNoZUNvbmZpZz8uZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY2FjaGVEdXJhdGlvbiA9IGNhY2hlQ29uZmlnPy5kdXJhdGlvbkhvdXJzID8/IDI0O1xuICAgICAgICBjYWNoZU1hbmFnZXIgPSBuZXcgQ2FjaGVNYW5hZ2VyKCcuY2RrLWNvc3QtYW5hbHl6ZXItY2FjaGUnLCBjYWNoZUR1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmljaW5nQ2xpZW50ID0gbmV3IFByaWNpbmdDbGllbnQocmVnaW9uLCBjYWNoZU1hbmFnZXIpO1xuICAgIH1cbiAgICB0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcyA9IG5ldyBTZXQoZXhjbHVkZWRSZXNvdXJjZVR5cGVzIHx8IFtdKTtcbiAgICBcbiAgICAvLyBCdWlsZCBjb25maWcgb2JqZWN0IGZvciBjYWxjdWxhdG9ycyB0aGF0IG5lZWQgaXRcbiAgICBjb25zdCBjb25maWc6IENvc3RBbmFseXplckNvbmZpZyB8IHVuZGVmaW5lZCA9IHVzYWdlQXNzdW1wdGlvbnMgPyB7IHVzYWdlQXNzdW1wdGlvbnMgfSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gW1xuICAgICAgbmV3IEVDMkNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBTM0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBMYW1iZGFDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5sYW1iZGE/Lmludm9jYXRpb25zUGVyTW9udGgsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmxhbWJkYT8uYXZlcmFnZUR1cmF0aW9uTXMsXG4gICAgICApLFxuICAgICAgbmV3IFJEU0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBEeW5hbW9EQkNhbGN1bGF0b3IoY29uZmlnKSxcbiAgICAgIG5ldyBFQ1NDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgQVBJR2F0ZXdheUNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBOYXRHYXRld2F5Q2FsY3VsYXRvcih1c2FnZUFzc3VtcHRpb25zPy5uYXRHYXRld2F5Py5kYXRhUHJvY2Vzc2VkR0IpLFxuICAgICAgbmV3IEFMQkNhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ubmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8uYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGUsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ucHJvY2Vzc2VkQnl0ZXNHQixcbiAgICAgICksXG4gICAgICBuZXcgTkxCQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5uZXdDb25uZWN0aW9uc1BlclNlY29uZCxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5hY3RpdmVDb25uZWN0aW9uc1Blck1pbnV0ZSxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5wcm9jZXNzZWRCeXRlc0dCLFxuICAgICAgKSxcbiAgICAgIG5ldyBWUENFbmRwb2ludENhbGN1bGF0b3IodXNhZ2VBc3N1bXB0aW9ucz8udnBjRW5kcG9pbnQ/LmRhdGFQcm9jZXNzZWRHQiksXG4gICAgICBuZXcgQ2xvdWRGcm9udENhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmNsb3VkZnJvbnQ/LmRhdGFUcmFuc2ZlckdCLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5jbG91ZGZyb250Py5yZXF1ZXN0cyxcbiAgICAgICksXG4gICAgICBuZXcgRWxhc3RpQ2FjaGVDYWxjdWxhdG9yKCksXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc291cmNlQ29zdChyZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIC8vIENoZWNrIGlmIHJlc291cmNlIHR5cGUgaXMgZXhjbHVkZWRcbiAgICBpZiAodGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMuaGFzKHJlc291cmNlLnR5cGUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ2hpZ2gnLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BSZXNvdXJjZSB0eXBlICR7cmVzb3VyY2UudHlwZX0gaXMgZXhjbHVkZWQgZnJvbSBjb3N0IGFuYWx5c2lzYF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgY2FsY3VsYXRvciB1c2luZyBjYW5DYWxjdWxhdGUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIHN1cHBvcnRzXG4gICAgY29uc3QgY2FsY3VsYXRvciA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZChjYWxjID0+IHtcbiAgICAgIGlmIChjYWxjLmNhbkNhbGN1bGF0ZSkge1xuICAgICAgICByZXR1cm4gY2FsYy5jYW5DYWxjdWxhdGUocmVzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGMuc3VwcG9ydHMocmVzb3VyY2UudHlwZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWNhbGN1bGF0b3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYFJlc291cmNlIHR5cGUgJHtyZXNvdXJjZS50eXBlfSBpcyBub3Qgc3VwcG9ydGVkYF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsY3VsYXRvci5jYWxjdWxhdGVDb3N0KHJlc291cmNlLCByZWdpb24sIHRoaXMucHJpY2luZ0NsaWVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYEZhaWxlZCB0byBjYWxjdWxhdGUgY29zdDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvc3REZWx0YShkaWZmOiBSZXNvdXJjZURpZmYsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxDb3N0RGVsdGE+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IGV4Y2x1ZGVkIHJlc291cmNlcyBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgIGNvbnN0IGZpbHRlcmVkQWRkZWQgPSBkaWZmLmFkZGVkLmZpbHRlcihyID0+ICF0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMoci50eXBlKSk7XG4gICAgY29uc3QgZmlsdGVyZWRSZW1vdmVkID0gZGlmZi5yZW1vdmVkLmZpbHRlcihyID0+ICF0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMoci50eXBlKSk7XG4gICAgY29uc3QgZmlsdGVyZWRNb2RpZmllZCA9IGRpZmYubW9kaWZpZWQuZmlsdGVyKHIgPT4gIXRoaXMuZXhjbHVkZWRSZXNvdXJjZVR5cGVzLmhhcyhyLnR5cGUpKTtcblxuICAgIGNvbnN0IGFkZGVkQ29zdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkQWRkZWQubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBjb25zdCBtb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlLCByZWdpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgbW9udGhseUNvc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVtb3ZlZENvc3RzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZFJlbW92ZWQubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBjb25zdCBtb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlLCByZWdpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgbW9udGhseUNvc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgbW9kaWZpZWRDb3N0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRNb2RpZmllZC5tYXAoYXN5bmMgKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZFJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCA9IHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlLm9sZFByb3BlcnRpZXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5ld1Jlc291cmNlOiBSZXNvdXJjZVdpdGhJZCA9IHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlLm5ld1Byb3BlcnRpZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb2xkTW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChvbGRSZXNvdXJjZSwgcmVnaW9uKTtcbiAgICAgICAgY29uc3QgbmV3TW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChuZXdSZXNvdXJjZSwgcmVnaW9uKTtcbiAgICAgICAgY29uc3QgY29zdERlbHRhID0gbmV3TW9udGhseUNvc3QuYW1vdW50IC0gb2xkTW9udGhseUNvc3QuYW1vdW50O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdDogbmV3TW9udGhseUNvc3QsXG4gICAgICAgICAgb2xkTW9udGhseUNvc3QsXG4gICAgICAgICAgbmV3TW9udGhseUNvc3QsXG4gICAgICAgICAgY29zdERlbHRhLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsQWRkZWRDb3N0ID0gYWRkZWRDb3N0cy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5tb250aGx5Q29zdC5hbW91bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsUmVtb3ZlZENvc3QgPSByZW1vdmVkQ29zdHMucmVkdWNlKChzdW0sIHIpID0+IHN1bSArIHIubW9udGhseUNvc3QuYW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbE1vZGlmaWVkRGVsdGEgPSBtb2RpZmllZENvc3RzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLmNvc3REZWx0YSwgMCk7XG5cbiAgICBjb25zdCB0b3RhbERlbHRhID0gdG90YWxBZGRlZENvc3QgLSB0b3RhbFJlbW92ZWRDb3N0ICsgdG90YWxNb2RpZmllZERlbHRhO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsRGVsdGEsXG4gICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICBhZGRlZENvc3RzLFxuICAgICAgcmVtb3ZlZENvc3RzLFxuICAgICAgbW9kaWZpZWRDb3N0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHJlc291cmNlcyBhbmQgY29ubmVjdGlvbnNcbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wcmljaW5nQ2xpZW50LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpY2luZ1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy9QcmljaW5nU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBOEM7QUFDOUMsK0RBQTREO0FBQzVELDZFQUEwRTtBQUMxRSx5RkFBc0Y7QUFDdEYsNkVBQTBFO0FBQzFFLHlFQUFzRTtBQUN0RSwrREFBNEQ7QUFDNUQsK0RBQTREO0FBQzVELCtFQUE0RTtBQUM1RSxxRUFBa0U7QUFDbEUscUZBQWtGO0FBQ2xGLDZFQUEwRTtBQUMxRSwrREFBNEQ7QUFDNUQsK0RBQTREO0FBQzVELDZEQUEwRDtBQUMxRCwrRUFBNEU7QUFDNUUsbURBQWdEO0FBVWhELE1BQWEsY0FBYztJQUNqQixXQUFXLENBQTJCO0lBQ3RDLGFBQWEsQ0FBZ0I7SUFDN0IscUJBQXFCLENBQWM7SUFFM0MsWUFDRSxTQUFpQixXQUFXLEVBQzVCLGdCQUF5QyxFQUN6QyxxQkFBZ0MsRUFDaEMsV0FBeUIsRUFDekIsYUFBNkI7UUFFN0Isa0RBQWtEO1FBQ2xELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixpREFBaUQ7WUFDakQsSUFBSSxZQUFzQyxDQUFDO1lBQzNDLElBQUksV0FBVyxFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxhQUFhLEdBQUcsV0FBVyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZELFlBQVksR0FBRyxJQUFJLDJCQUFZLENBQUMsMEJBQTBCLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw2QkFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUks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YyxHQUFHLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO1FBRTFFLE9BQU87WUFDTCxVQUFVO1lBQ1YsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVO1lBQ1YsWUFBWTtZQUNaLGFBQWE7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBL0xELHdDQStMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhY2hlTWFuYWdlciB9IGZyb20gJy4vQ2FjaGVNYW5hZ2VyJztcbmltcG9ydCB7IEFMQkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0FMQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgQVBJR2F0ZXdheUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0FQSUdhdGV3YXlDYWxjdWxhdG9yJztcbmltcG9ydCB7IEF1dG9TY2FsaW5nR3JvdXBDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9BdXRvU2NhbGluZ0dyb3VwQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBDbG91ZEZyb250Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQ2xvdWRGcm9udENhbGN1bGF0b3InO1xuaW1wb3J0IHsgRHluYW1vREJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9EeW5hbW9EQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgRUMyQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRUMyQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBFQ1NDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FQ1NDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVsYXN0aUNhY2hlQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRWxhc3RpQ2FjaGVDYWxjdWxhdG9yJztcbmltcG9ydCB7IExhbWJkYUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0xhbWJkYUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9MYXVuY2hUZW1wbGF0ZUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgTmF0R2F0ZXdheUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05hdEdhdGV3YXlDYWxjdWxhdG9yJztcbmltcG9ydCB7IE5MQkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05MQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgUkRTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvUkRTQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTM0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1MzQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBWUENFbmRwb2ludENhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1ZQQ0VuZHBvaW50Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBQcmljaW5nQ2xpZW50IH0gZnJvbSAnLi9QcmljaW5nQ2xpZW50JztcbmltcG9ydCB7XG4gIFByaWNpbmdTZXJ2aWNlIGFzIElQcmljaW5nU2VydmljZSxcbiAgTW9udGhseUNvc3QsXG4gIENvc3REZWx0YSxcbiAgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLCBDYWNoZUNvbmZpZywgQ29zdEFuYWx5emVyQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJztcbmltcG9ydCB7IFJlc291cmNlV2l0aElkLCBSZXNvdXJjZURpZmYgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFByaWNpbmdTZXJ2aWNlIGltcGxlbWVudHMgSVByaWNpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWxjdWxhdG9yczogUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcltdO1xuICBwcml2YXRlIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQ7XG4gIHByaXZhdGUgZXhjbHVkZWRSZXNvdXJjZVR5cGVzOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWdpb246IHN0cmluZyA9ICd1cy1lYXN0LTEnLFxuICAgIHVzYWdlQXNzdW1wdGlvbnM/OiBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLFxuICAgIGV4Y2x1ZGVkUmVzb3VyY2VUeXBlcz86IHN0cmluZ1tdLFxuICAgIGNhY2hlQ29uZmlnPzogQ2FjaGVDb25maWcsXG4gICAgcHJpY2luZ0NsaWVudD86IFByaWNpbmdDbGllbnQsXG4gICkge1xuICAgIC8vIFVzZSBwcm92aWRlZCBwcmljaW5nIGNsaWVudCBvciBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKHByaWNpbmdDbGllbnQpIHtcbiAgICAgIHRoaXMucHJpY2luZ0NsaWVudCA9IHByaWNpbmdDbGllbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRpYWxpemUgY2FjaGUgbWFuYWdlciBpZiBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICAgIGxldCBjYWNoZU1hbmFnZXI6IENhY2hlTWFuYWdlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjYWNoZUNvbmZpZz8uZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY2FjaGVEdXJhdGlvbiA9IGNhY2hlQ29uZmlnPy5kdXJhdGlvbkhvdXJzID8/IDI0O1xuICAgICAgICBjYWNoZU1hbmFnZXIgPSBuZXcgQ2FjaGVNYW5hZ2VyKCcuY2RrLWNvc3QtYW5hbHl6ZXItY2FjaGUnLCBjYWNoZUR1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmljaW5nQ2xpZW50ID0gbmV3IFByaWNpbmdDbGllbnQocmVnaW9uLCBjYWNoZU1hbmFnZXIpO1xuICAgIH1cbiAgICB0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcyA9IG5ldyBTZXQoZXhjbHVkZWRSZXNvdXJjZVR5cGVzIHx8IFtdKTtcbiAgICBcbiAgICAvLyBCdWlsZCBjb25maWcgb2JqZWN0IGZvciBjYWxjdWxhdG9ycyB0aGF0IG5lZWQgaXRcbiAgICBjb25zdCBjb25maWc6IENvc3RBbmFseXplckNvbmZpZyB8IHVuZGVmaW5lZCA9IHVzYWdlQXNzdW1wdGlvbnMgPyB7IHVzYWdlQXNzdW1wdGlvbnMgfSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gW1xuICAgICAgbmV3IEVDMkNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBTM0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBMYW1iZGFDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5sYW1iZGE/Lmludm9jYXRpb25zUGVyTW9udGgsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmxhbWJkYT8uYXZlcmFnZUR1cmF0aW9uTXMsXG4gICAgICApLFxuICAgICAgbmV3IFJEU0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBEeW5hbW9EQkNhbGN1bGF0b3IoY29uZmlnKSxcbiAgICAgIG5ldyBFQ1NDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgQVBJR2F0ZXdheUNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBOYXRHYXRld2F5Q2FsY3VsYXRvcih1c2FnZUFzc3VtcHRpb25zPy5uYXRHYXRld2F5Py5kYXRhUHJvY2Vzc2VkR0IpLFxuICAgICAgbmV3IEFMQkNhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ubmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8uYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGUsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ucHJvY2Vzc2VkQnl0ZXNHQixcbiAgICAgICksXG4gICAgICBuZXcgTkxCQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5uZXdDb25uZWN0aW9uc1BlclNlY29uZCxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5hY3RpdmVDb25uZWN0aW9uc1Blck1pbnV0ZSxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5wcm9jZXNzZWRCeXRlc0dCLFxuICAgICAgKSxcbiAgICAgIG5ldyBWUENFbmRwb2ludENhbGN1bGF0b3IodXNhZ2VBc3N1bXB0aW9ucz8udnBjRW5kcG9pbnQ/LmRhdGFQcm9jZXNzZWRHQiksXG4gICAgICBuZXcgQ2xvdWRGcm9udENhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmNsb3VkZnJvbnQ/LmRhdGFUcmFuc2ZlckdCLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5jbG91ZGZyb250Py5yZXF1ZXN0cyxcbiAgICAgICksXG4gICAgICBuZXcgRWxhc3RpQ2FjaGVDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBMYXVuY2hUZW1wbGF0ZUNhbGN1bGF0b3IoKSxcbiAgICBdO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCwgcmVnaW9uOiBzdHJpbmcsIHRlbXBsYXRlUmVzb3VyY2VzPzogUmVzb3VyY2VXaXRoSWRbXSk6IFByb21pc2U8TW9udGhseUNvc3Q+IHtcbiAgICAvLyBDaGVjayBpZiByZXNvdXJjZSB0eXBlIGlzIGV4Y2x1ZGVkXG4gICAgaWYgKHRoaXMuZXhjbHVkZWRSZXNvdXJjZVR5cGVzLmhhcyhyZXNvdXJjZS50eXBlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIGNvbmZpZGVuY2U6ICdoaWdoJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtgUmVzb3VyY2UgdHlwZSAke3Jlc291cmNlLnR5cGV9IGlzIGV4Y2x1ZGVkIGZyb20gY29zdCBhbmFseXNpc2BdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGNhbGN1bGF0b3IgdXNpbmcgY2FuQ2FsY3VsYXRlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBzdXBwb3J0c1xuICAgIGNvbnN0IGNhbGN1bGF0b3IgPSB0aGlzLmNhbGN1bGF0b3JzLmZpbmQoY2FsYyA9PiB7XG4gICAgICBpZiAoY2FsYy5jYW5DYWxjdWxhdGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGMuY2FuQ2FsY3VsYXRlKHJlc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxjLnN1cHBvcnRzKHJlc291cmNlLnR5cGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFjYWxjdWxhdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BSZXNvdXJjZSB0eXBlICR7cmVzb3VyY2UudHlwZX0gaXMgbm90IHN1cHBvcnRlZGBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNhbGN1bGF0b3IuY2FsY3VsYXRlQ29zdChyZXNvdXJjZSwgcmVnaW9uLCB0aGlzLnByaWNpbmdDbGllbnQsIHRlbXBsYXRlUmVzb3VyY2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIGNvbmZpZGVuY2U6ICd1bmtub3duJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtgRmFpbGVkIHRvIGNhbGN1bGF0ZSBjb3N0OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29zdERlbHRhKGRpZmY6IFJlc291cmNlRGlmZiwgcmVnaW9uOiBzdHJpbmcpOiBQcm9taXNlPENvc3REZWx0YT4ge1xuICAgIC8vIEZpbHRlciBvdXQgZXhjbHVkZWQgcmVzb3VyY2VzIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgY29uc3QgZmlsdGVyZWRBZGRlZCA9IGRpZmYuYWRkZWQuZmlsdGVyKHIgPT4gIXRoaXMuZXhjbHVkZWRSZXNvdXJjZVR5cGVzLmhhcyhyLnR5cGUpKTtcbiAgICBjb25zdCBmaWx0ZXJlZFJlbW92ZWQgPSBkaWZmLnJlbW92ZWQuZmlsdGVyKHIgPT4gIXRoaXMuZXhjbHVkZWRSZXNvdXJjZVR5cGVzLmhhcyhyLnR5cGUpKTtcbiAgICBjb25zdCBmaWx0ZXJlZE1vZGlmaWVkID0gZGlmZi5tb2RpZmllZC5maWx0ZXIociA9PiAhdGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMuaGFzKHIudHlwZSkpO1xuXG4gICAgLy8gQnVpbGQgdGVtcGxhdGUgcmVzb3VyY2UgY29udGV4dCBmcm9tIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRpZmZcbiAgICBjb25zdCBhbGxSZXNvdXJjZXM6IFJlc291cmNlV2l0aElkW10gPSBbXG4gICAgICAuLi5kaWZmLmFkZGVkLFxuICAgICAgLi4uZGlmZi5yZW1vdmVkLFxuICAgICAgLi4uZGlmZi5tb2RpZmllZC5tYXAociA9PiAoe1xuICAgICAgICBsb2dpY2FsSWQ6IHIubG9naWNhbElkLFxuICAgICAgICB0eXBlOiByLnR5cGUsXG4gICAgICAgIHByb3BlcnRpZXM6IHIubmV3UHJvcGVydGllcyxcbiAgICAgIH0pKSxcbiAgICBdO1xuXG4gICAgY29uc3QgYWRkZWRDb3N0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRBZGRlZC5tYXAoYXN5bmMgKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlDb3N0ID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZUNvc3QocmVzb3VyY2UsIHJlZ2lvbiwgYWxsUmVzb3VyY2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIG1vbnRobHlDb3N0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlbW92ZWRDb3N0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRSZW1vdmVkLm1hcChhc3luYyAocmVzb3VyY2UpID0+IHtcbiAgICAgICAgY29uc3QgbW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChyZXNvdXJjZSwgcmVnaW9uLCBhbGxSZXNvdXJjZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgbW9udGhseUNvc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgbW9kaWZpZWRDb3N0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRNb2RpZmllZC5tYXAoYXN5bmMgKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZFJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCA9IHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlLm9sZFByb3BlcnRpZXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5ld1Jlc291cmNlOiBSZXNvdXJjZVdpdGhJZCA9IHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlLm5ld1Byb3BlcnRpZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb2xkTW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChvbGRSZXNvdXJjZSwgcmVnaW9uLCBhbGxSZXNvdXJjZXMpO1xuICAgICAgICBjb25zdCBuZXdNb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KG5ld1Jlc291cmNlLCByZWdpb24sIGFsbFJlc291cmNlcyk7XG4gICAgICAgIGNvbnN0IGNvc3REZWx0YSA9IG5ld01vbnRobHlDb3N0LmFtb3VudCAtIG9sZE1vbnRobHlDb3N0LmFtb3VudDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgbW9udGhseUNvc3Q6IG5ld01vbnRobHlDb3N0LFxuICAgICAgICAgIG9sZE1vbnRobHlDb3N0LFxuICAgICAgICAgIG5ld01vbnRobHlDb3N0LFxuICAgICAgICAgIGNvc3REZWx0YSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCB0b3RhbEFkZGVkQ29zdCA9IGFkZGVkQ29zdHMucmVkdWNlKChzdW0sIHIpID0+IHN1bSArIHIubW9udGhseUNvc3QuYW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFJlbW92ZWRDb3N0ID0gcmVtb3ZlZENvc3RzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLm1vbnRobHlDb3N0LmFtb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxNb2RpZmllZERlbHRhID0gbW9kaWZpZWRDb3N0cy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5jb3N0RGVsdGEsIDApO1xuXG4gICAgY29uc3QgdG90YWxEZWx0YSA9IHRvdGFsQWRkZWRDb3N0IC0gdG90YWxSZW1vdmVkQ29zdCArIHRvdGFsTW9kaWZpZWREZWx0YTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbERlbHRhLFxuICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgYWRkZWRDb3N0cyxcbiAgICAgIHJlbW92ZWRDb3N0cyxcbiAgICAgIG1vZGlmaWVkQ29zdHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXNvdXJjZXMgYW5kIGNvbm5lY3Rpb25zXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucHJpY2luZ0NsaWVudC5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ResourceWithId } from '../../diff/types';
|
|
2
|
+
import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
|
|
3
|
+
export declare class AutoScalingGroupCalculator implements ResourceCostCalculator {
|
|
4
|
+
supports(resourceType: string): boolean;
|
|
5
|
+
calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient, templateResources?: ResourceWithId[]): Promise<MonthlyCost>;
|
|
6
|
+
private resolveInstanceType;
|
|
7
|
+
private resolveInstanceTypeFromLaunchTemplate;
|
|
8
|
+
private resolveReference;
|
|
9
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AutoScalingGroupCalculator = void 0;
|
|
4
|
+
const RegionMapper_1 = require("../RegionMapper");
|
|
5
|
+
class AutoScalingGroupCalculator {
|
|
6
|
+
supports(resourceType) {
|
|
7
|
+
return resourceType === 'AWS::AutoScaling::AutoScalingGroup';
|
|
8
|
+
}
|
|
9
|
+
async calculateCost(resource, region, pricingClient, templateResources) {
|
|
10
|
+
const desiredCapacity = Number(resource.properties.DesiredCapacity) || 1;
|
|
11
|
+
const instanceType = this.resolveInstanceType(resource, templateResources);
|
|
12
|
+
if (!instanceType) {
|
|
13
|
+
return {
|
|
14
|
+
amount: 0,
|
|
15
|
+
currency: 'USD',
|
|
16
|
+
confidence: 'unknown',
|
|
17
|
+
assumptions: ['Could not determine instance type from LaunchConfiguration or LaunchTemplate'],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const hourlyRate = await pricingClient.getPrice({
|
|
22
|
+
serviceCode: 'AmazonEC2',
|
|
23
|
+
region: (0, RegionMapper_1.normalizeRegion)(region),
|
|
24
|
+
filters: [
|
|
25
|
+
{ field: 'instanceType', value: instanceType },
|
|
26
|
+
{ field: 'operatingSystem', value: 'Linux' },
|
|
27
|
+
{ field: 'tenancy', value: 'Shared' },
|
|
28
|
+
{ field: 'preInstalledSw', value: 'NA' },
|
|
29
|
+
{ field: 'capacitystatus', value: 'Used' },
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
if (hourlyRate === null) {
|
|
33
|
+
return {
|
|
34
|
+
amount: 0,
|
|
35
|
+
currency: 'USD',
|
|
36
|
+
confidence: 'unknown',
|
|
37
|
+
assumptions: [`Pricing data not available for instance type ${instanceType} in region ${region}`],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const monthlyHours = 730;
|
|
41
|
+
const monthlyCost = hourlyRate * monthlyHours * desiredCapacity;
|
|
42
|
+
return {
|
|
43
|
+
amount: monthlyCost,
|
|
44
|
+
currency: 'USD',
|
|
45
|
+
confidence: 'medium',
|
|
46
|
+
assumptions: [
|
|
47
|
+
`${desiredCapacity} instance(s) of type ${instanceType}`,
|
|
48
|
+
`Assumes ${monthlyHours} hours per month (24/7 operation)`,
|
|
49
|
+
'Assumes Linux OS, shared tenancy, on-demand pricing',
|
|
50
|
+
'Does not include EBS volumes or data transfer costs',
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return {
|
|
56
|
+
amount: 0,
|
|
57
|
+
currency: 'USD',
|
|
58
|
+
confidence: 'unknown',
|
|
59
|
+
assumptions: [`Failed to fetch pricing: ${error instanceof Error ? error.message : String(error)}`],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
resolveInstanceType(resource, templateResources) {
|
|
64
|
+
// Try LaunchConfigurationName
|
|
65
|
+
const launchConfigRef = resource.properties.LaunchConfigurationName;
|
|
66
|
+
if (launchConfigRef) {
|
|
67
|
+
const resolved = this.resolveReference(launchConfigRef, templateResources);
|
|
68
|
+
if (resolved && resolved.type === 'AWS::AutoScaling::LaunchConfiguration') {
|
|
69
|
+
const instanceType = resolved.properties.InstanceType;
|
|
70
|
+
if (instanceType)
|
|
71
|
+
return instanceType;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Try LaunchTemplate
|
|
75
|
+
const launchTemplate = resource.properties.LaunchTemplate;
|
|
76
|
+
if (launchTemplate) {
|
|
77
|
+
const instanceType = this.resolveInstanceTypeFromLaunchTemplate(launchTemplate, templateResources);
|
|
78
|
+
if (instanceType)
|
|
79
|
+
return instanceType;
|
|
80
|
+
}
|
|
81
|
+
// Try MixedInstancesPolicy
|
|
82
|
+
const mixedPolicy = resource.properties.MixedInstancesPolicy;
|
|
83
|
+
if (mixedPolicy) {
|
|
84
|
+
const launchTemplateSpec = mixedPolicy.LaunchTemplate;
|
|
85
|
+
if (launchTemplateSpec) {
|
|
86
|
+
const ltSpec = launchTemplateSpec.LaunchTemplateSpecification;
|
|
87
|
+
if (ltSpec) {
|
|
88
|
+
const instanceType = this.resolveInstanceTypeFromLaunchTemplate(ltSpec, templateResources);
|
|
89
|
+
if (instanceType)
|
|
90
|
+
return instanceType;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
resolveInstanceTypeFromLaunchTemplate(launchTemplateRef, templateResources) {
|
|
97
|
+
const ref = launchTemplateRef.LaunchTemplateId || launchTemplateRef.LaunchTemplateName;
|
|
98
|
+
if (!ref)
|
|
99
|
+
return null;
|
|
100
|
+
const resolved = this.resolveReference(ref, templateResources);
|
|
101
|
+
if (resolved && resolved.type === 'AWS::EC2::LaunchTemplate') {
|
|
102
|
+
const launchTemplateData = resolved.properties.LaunchTemplateData;
|
|
103
|
+
if (launchTemplateData) {
|
|
104
|
+
return launchTemplateData.InstanceType || null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
resolveReference(ref, templateResources) {
|
|
110
|
+
if (!templateResources)
|
|
111
|
+
return null;
|
|
112
|
+
// Handle { Ref: 'LogicalId' }
|
|
113
|
+
if (typeof ref === 'object' && ref !== null && 'Ref' in ref) {
|
|
114
|
+
const logicalId = ref.Ref;
|
|
115
|
+
return templateResources.find(r => r.logicalId === logicalId) || null;
|
|
116
|
+
}
|
|
117
|
+
// Handle string logical ID
|
|
118
|
+
if (typeof ref === 'string') {
|
|
119
|
+
return templateResources.find(r => r.logicalId === ref) || null;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.AutoScalingGroupCalculator = AutoScalingGroupCalculator;
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpY2luZy9jYWxjdWxhdG9ycy9BdXRvU2NhbGluZ0dyb3VwQ2FsY3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrREFBa0Q7QUFFbEQsTUFBYSwwQkFBMEI7SUFDckMsUUFBUSxDQUFDLFlBQW9CO1FBQzNCLE9BQU8sWUFBWSxLQUFLLG9DQUFvQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUNqQixRQUF3QixFQUN4QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsaUJBQW9DO1FBRXBDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxDQUFDLDhFQUE4RSxDQUFDO2FBQzlGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsV0FBVztnQkFDeEIsTUFBTSxFQUFFLElBQUEsOEJBQWUsRUFBQyxNQUFNLENBQUM7Z0JBQy9CLE9BQU8sRUFBRTtvQkFDUCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtvQkFDOUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDNUMsRUFBRSxL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QztZQUM1QixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2xFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQTlJRCxnRUE4SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZVdpdGhJZCB9IGZyb20gJy4uLy4uL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvciwgTW9udGhseUNvc3QsIFByaWNpbmdDbGllbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVSZWdpb24gfSBmcm9tICcuLi9SZWdpb25NYXBwZXInO1xuXG5leHBvcnQgY2xhc3MgQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IgaW1wbGVtZW50cyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yIHtcbiAgc3VwcG9ydHMocmVzb3VyY2VUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVzb3VyY2VUeXBlID09PSAnQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cCc7XG4gIH1cblxuICBhc3luYyBjYWxjdWxhdGVDb3N0KFxuICAgIHJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBwcmljaW5nQ2xpZW50OiBQcmljaW5nQ2xpZW50LFxuICAgIHRlbXBsYXRlUmVzb3VyY2VzPzogUmVzb3VyY2VXaXRoSWRbXSxcbiAgKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIGNvbnN0IGRlc2lyZWRDYXBhY2l0eSA9IE51bWJlcihyZXNvdXJjZS5wcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eSkgfHwgMTtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPSB0aGlzLnJlc29sdmVJbnN0YW5jZVR5cGUocmVzb3VyY2UsIHRlbXBsYXRlUmVzb3VyY2VzKTtcblxuICAgIGlmICghaW5zdGFuY2VUeXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogWydDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbmNlIHR5cGUgZnJvbSBMYXVuY2hDb25maWd1cmF0aW9uIG9yIExhdW5jaFRlbXBsYXRlJ10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3VybHlSYXRlID0gYXdhaXQgcHJpY2luZ0NsaWVudC5nZXRQcmljZSh7XG4gICAgICAgIHNlcnZpY2VDb2RlOiAnQW1hem9uRUMyJyxcbiAgICAgICAgcmVnaW9uOiBub3JtYWxpemVSZWdpb24ocmVnaW9uKSxcbiAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgIHsgZmllbGQ6ICdpbnN0YW5jZVR5cGUnLCB2YWx1ZTogaW5zdGFuY2VUeXBlIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ29wZXJhdGluZ1N5c3RlbScsIHZhbHVlOiAnTGludXgnIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ3RlbmFuY3knLCB2YWx1ZTogJ1NoYXJlZCcgfSxcbiAgICAgICAgICB7IGZpZWxkOiAncHJlSW5zdGFsbGVkU3cnLCB2YWx1ZTogJ05BJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdjYXBhY2l0eXN0YXR1cycsIHZhbHVlOiAnVXNlZCcgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaG91cmx5UmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICAgIGFzc3VtcHRpb25zOiBbYFByaWNpbmcgZGF0YSBub3QgYXZhaWxhYmxlIGZvciBpbnN0YW5jZSB0eXBlICR7aW5zdGFuY2VUeXBlfSBpbiByZWdpb24gJHtyZWdpb259YF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vbnRobHlIb3VycyA9IDczMDtcbiAgICAgIGNvbnN0IG1vbnRobHlDb3N0ID0gaG91cmx5UmF0ZSAqIG1vbnRobHlIb3VycyAqIGRlc2lyZWRDYXBhY2l0eTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiBtb250aGx5Q29zdCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAnbWVkaXVtJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtcbiAgICAgICAgICBgJHtkZXNpcmVkQ2FwYWNpdHl9IGluc3RhbmNlKHMpIG9mIHR5cGUgJHtpbnN0YW5jZVR5cGV9YCxcbiAgICAgICAgICBgQXNzdW1lcyAke21vbnRobHlIb3Vyc30gaG91cnMgcGVyIG1vbnRoICgyNC83IG9wZXJhdGlvbilgLFxuICAgICAgICAgICdBc3N1bWVzIExpbnV4IE9TLCBzaGFyZWQgdGVuYW5jeSwgb24tZGVtYW5kIHByaWNpbmcnLFxuICAgICAgICAgICdEb2VzIG5vdCBpbmNsdWRlIEVCUyB2b2x1bWVzIG9yIGRhdGEgdHJhbnNmZXIgY29zdHMnLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIGNvbmZpZGVuY2U6ICd1bmtub3duJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtgRmFpbGVkIHRvIGZldGNoIHByaWNpbmc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbnN0YW5jZVR5cGUoXG4gICAgcmVzb3VyY2U6IFJlc291cmNlV2l0aElkLFxuICAgIHRlbXBsYXRlUmVzb3VyY2VzPzogUmVzb3VyY2VXaXRoSWRbXSxcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gVHJ5IExhdW5jaENvbmZpZ3VyYXRpb25OYW1lXG4gICAgY29uc3QgbGF1bmNoQ29uZmlnUmVmID0gcmVzb3VyY2UucHJvcGVydGllcy5MYXVuY2hDb25maWd1cmF0aW9uTmFtZTtcbiAgICBpZiAobGF1bmNoQ29uZmlnUmVmKSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShsYXVuY2hDb25maWdSZWYsIHRlbXBsYXRlUmVzb3VyY2VzKTtcbiAgICAgIGlmIChyZXNvbHZlZCAmJiByZXNvbHZlZC50eXBlID09PSAnQVdTOjpBdXRvU2NhbGluZzo6TGF1bmNoQ29uZmlndXJhdGlvbicpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VUeXBlID0gcmVzb2x2ZWQucHJvcGVydGllcy5JbnN0YW5jZVR5cGUgYXMgc3RyaW5nO1xuICAgICAgICBpZiAoaW5zdGFuY2VUeXBlKSByZXR1cm4gaW5zdGFuY2VUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyeSBMYXVuY2hUZW1wbGF0ZVxuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gcmVzb3VyY2UucHJvcGVydGllcy5MYXVuY2hUZW1wbGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAobGF1bmNoVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMucmVzb2x2ZUluc3RhbmNlVHlwZUZyb21MYXVuY2hUZW1wbGF0ZShsYXVuY2hUZW1wbGF0ZSwgdGVtcGxhdGVSZXNvdXJjZXMpO1xuICAgICAgaWYgKGluc3RhbmNlVHlwZSkgcmV0dXJuIGluc3RhbmNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgTWl4ZWRJbnN0YW5jZXNQb2xpY3lcbiAgICBjb25zdCBtaXhlZFBvbGljeSA9IHJlc291cmNlLnByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKG1peGVkUG9saWN5KSB7XG4gICAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZVNwZWMgPSBtaXhlZFBvbGljeS5MYXVuY2hUZW1wbGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChsYXVuY2hUZW1wbGF0ZVNwZWMpIHtcbiAgICAgICAgY29uc3QgbHRTcGVjID0gbGF1bmNoVGVtcGxhdGVTcGVjLkxhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGx0U3BlYykge1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMucmVzb2x2ZUluc3RhbmNlVHlwZUZyb21MYXVuY2hUZW1wbGF0ZShsdFNwZWMsIHRlbXBsYXRlUmVzb3VyY2VzKTtcbiAgICAgICAgICBpZiAoaW5zdGFuY2VUeXBlKSByZXR1cm4gaW5zdGFuY2VUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbnN0YW5jZVR5cGVGcm9tTGF1bmNoVGVtcGxhdGUoXG4gICAgbGF1bmNoVGVtcGxhdGVSZWY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHRlbXBsYXRlUmVzb3VyY2VzPzogUmVzb3VyY2VXaXRoSWRbXSxcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcmVmID0gbGF1bmNoVGVtcGxhdGVSZWYuTGF1bmNoVGVtcGxhdGVJZCB8fCBsYXVuY2hUZW1wbGF0ZVJlZi5MYXVuY2hUZW1wbGF0ZU5hbWU7XG4gICAgaWYgKCFyZWYpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVSZWZlcmVuY2UocmVmLCB0ZW1wbGF0ZVJlc291cmNlcyk7XG4gICAgaWYgKHJlc29sdmVkICYmIHJlc29sdmVkLnR5cGUgPT09ICdBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGUnKSB7XG4gICAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZURhdGEgPSByZXNvbHZlZC5wcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChsYXVuY2hUZW1wbGF0ZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIChsYXVuY2hUZW1wbGF0ZURhdGEuSW5zdGFuY2VUeXBlIGFzIHN0cmluZykgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVSZWZlcmVuY2UoXG4gICAgcmVmOiB1bmtub3duLFxuICAgIHRlbXBsYXRlUmVzb3VyY2VzPzogUmVzb3VyY2VXaXRoSWRbXSxcbiAgKTogUmVzb3VyY2VXaXRoSWQgfCBudWxsIHtcbiAgICBpZiAoIXRlbXBsYXRlUmVzb3VyY2VzKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEhhbmRsZSB7IFJlZjogJ0xvZ2ljYWxJZCcgfVxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnb2JqZWN0JyAmJiByZWYgIT09IG51bGwgJiYgJ1JlZicgaW4gcmVmKSB7XG4gICAgICBjb25zdCBsb2dpY2FsSWQgPSAocmVmIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5SZWYgYXMgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlUmVzb3VyY2VzLmZpbmQociA9PiByLmxvZ2ljYWxJZCA9PT0gbG9naWNhbElkKSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdHJpbmcgbG9naWNhbCBJRFxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlUmVzb3VyY2VzLmZpbmQociA9PiByLmxvZ2ljYWxJZCA9PT0gcmVmKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ResourceWithId } from '../../diff/types';
|
|
2
|
+
import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration extracted from a LaunchTemplate's LaunchTemplateData.
|
|
5
|
+
* This interface can be used by other calculators (e.g., AutoScalingGroupCalculator)
|
|
6
|
+
* to reference instance configuration.
|
|
7
|
+
*/
|
|
8
|
+
export interface LaunchTemplateConfig {
|
|
9
|
+
instanceType: string | null;
|
|
10
|
+
imageId: string | null;
|
|
11
|
+
ebsVolumes: EbsVolumeConfig[];
|
|
12
|
+
}
|
|
13
|
+
export interface EbsVolumeConfig {
|
|
14
|
+
deviceName: string;
|
|
15
|
+
volumeType: string;
|
|
16
|
+
volumeSizeGB: number;
|
|
17
|
+
iops?: number;
|
|
18
|
+
throughput?: number;
|
|
19
|
+
deleteOnTermination: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class LaunchTemplateCalculator implements ResourceCostCalculator {
|
|
22
|
+
private static readonly DEFAULT_VOLUME_SIZE_GB;
|
|
23
|
+
private static readonly DEFAULT_VOLUME_TYPE;
|
|
24
|
+
private static readonly MONTHLY_HOURS;
|
|
25
|
+
supports(resourceType: string): boolean;
|
|
26
|
+
calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
|
|
27
|
+
/**
|
|
28
|
+
* Extract configuration from a LaunchTemplate resource.
|
|
29
|
+
* This method is public to allow other calculators to use it.
|
|
30
|
+
*/
|
|
31
|
+
extractConfig(resource: ResourceWithId): LaunchTemplateConfig;
|
|
32
|
+
private extractEbsVolumes;
|
|
33
|
+
private calculateInstanceCost;
|
|
34
|
+
private calculateStorageCost;
|
|
35
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LaunchTemplateCalculator = void 0;
|
|
4
|
+
const RegionMapper_1 = require("../RegionMapper");
|
|
5
|
+
class LaunchTemplateCalculator {
|
|
6
|
+
static DEFAULT_VOLUME_SIZE_GB = 8;
|
|
7
|
+
static DEFAULT_VOLUME_TYPE = 'gp3';
|
|
8
|
+
static MONTHLY_HOURS = 730;
|
|
9
|
+
supports(resourceType) {
|
|
10
|
+
return resourceType === 'AWS::EC2::LaunchTemplate';
|
|
11
|
+
}
|
|
12
|
+
async calculateCost(resource, region, pricingClient) {
|
|
13
|
+
const config = this.extractConfig(resource);
|
|
14
|
+
if (!config.instanceType) {
|
|
15
|
+
return {
|
|
16
|
+
amount: 0,
|
|
17
|
+
currency: 'USD',
|
|
18
|
+
confidence: 'unknown',
|
|
19
|
+
assumptions: [
|
|
20
|
+
'LaunchTemplate does not specify an instance type',
|
|
21
|
+
'LaunchTemplates have no direct cost; costs are incurred when instances are launched',
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
// Calculate the cost for a single instance using this template
|
|
27
|
+
const instanceCost = await this.calculateInstanceCost(config.instanceType, region, pricingClient);
|
|
28
|
+
if (instanceCost === 0) {
|
|
29
|
+
return {
|
|
30
|
+
amount: 0,
|
|
31
|
+
currency: 'USD',
|
|
32
|
+
confidence: 'unknown',
|
|
33
|
+
assumptions: [
|
|
34
|
+
`Pricing data not available for instance type ${config.instanceType} in region ${region}`,
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const storageCost = await this.calculateStorageCost(config.ebsVolumes, region, pricingClient);
|
|
39
|
+
const totalPerInstanceCost = instanceCost + storageCost;
|
|
40
|
+
const assumptions = [
|
|
41
|
+
'LaunchTemplates have no direct cost; this represents per-instance cost when used',
|
|
42
|
+
`Instance type: ${config.instanceType}`,
|
|
43
|
+
`Assumes ${LaunchTemplateCalculator.MONTHLY_HOURS} hours per month (24/7 operation)`,
|
|
44
|
+
'Assumes Linux OS, shared tenancy, on-demand pricing',
|
|
45
|
+
];
|
|
46
|
+
if (config.ebsVolumes.length > 0) {
|
|
47
|
+
const volumeDescriptions = config.ebsVolumes.map((v) => `${v.deviceName}: ${v.volumeSizeGB}GB ${v.volumeType}`);
|
|
48
|
+
assumptions.push(`EBS volumes: ${volumeDescriptions.join(', ')}`);
|
|
49
|
+
}
|
|
50
|
+
const hasProvisionedIops = config.ebsVolumes.some((v) => (v.volumeType === 'io1' || v.volumeType === 'io2') && v.iops);
|
|
51
|
+
if (hasProvisionedIops) {
|
|
52
|
+
assumptions.push('Provisioned IOPS costs for io1/io2 volumes are not included');
|
|
53
|
+
}
|
|
54
|
+
const hasThroughput = config.ebsVolumes.some((v) => v.volumeType === 'gp3' && v.throughput && v.throughput > 125);
|
|
55
|
+
if (hasThroughput) {
|
|
56
|
+
assumptions.push('Additional throughput costs for gp3 volumes are not included');
|
|
57
|
+
}
|
|
58
|
+
if (config.imageId) {
|
|
59
|
+
assumptions.push(`AMI: ${config.imageId}`);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
amount: totalPerInstanceCost,
|
|
63
|
+
currency: 'USD',
|
|
64
|
+
confidence: 'low',
|
|
65
|
+
assumptions,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
amount: 0,
|
|
71
|
+
currency: 'USD',
|
|
72
|
+
confidence: 'unknown',
|
|
73
|
+
assumptions: [
|
|
74
|
+
`Failed to fetch pricing: ${error instanceof Error ? error.message : String(error)}`,
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract configuration from a LaunchTemplate resource.
|
|
81
|
+
* This method is public to allow other calculators to use it.
|
|
82
|
+
*/
|
|
83
|
+
extractConfig(resource) {
|
|
84
|
+
const launchTemplateData = resource.properties.LaunchTemplateData;
|
|
85
|
+
if (!launchTemplateData) {
|
|
86
|
+
return {
|
|
87
|
+
instanceType: null,
|
|
88
|
+
imageId: null,
|
|
89
|
+
ebsVolumes: [],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const instanceType = launchTemplateData.InstanceType || null;
|
|
93
|
+
const imageId = launchTemplateData.ImageId || null;
|
|
94
|
+
const ebsVolumes = this.extractEbsVolumes(launchTemplateData);
|
|
95
|
+
return {
|
|
96
|
+
instanceType,
|
|
97
|
+
imageId,
|
|
98
|
+
ebsVolumes,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
extractEbsVolumes(launchTemplateData) {
|
|
102
|
+
const blockDeviceMappings = launchTemplateData.BlockDeviceMappings;
|
|
103
|
+
if (!blockDeviceMappings || !Array.isArray(blockDeviceMappings)) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
return blockDeviceMappings
|
|
107
|
+
.filter((mapping) => mapping.Ebs !== undefined)
|
|
108
|
+
.map((mapping) => {
|
|
109
|
+
const ebs = mapping.Ebs;
|
|
110
|
+
return {
|
|
111
|
+
deviceName: mapping.DeviceName || '/dev/xvda',
|
|
112
|
+
volumeType: ebs.VolumeType ||
|
|
113
|
+
LaunchTemplateCalculator.DEFAULT_VOLUME_TYPE,
|
|
114
|
+
volumeSizeGB: ebs.VolumeSize ||
|
|
115
|
+
LaunchTemplateCalculator.DEFAULT_VOLUME_SIZE_GB,
|
|
116
|
+
iops: ebs.Iops,
|
|
117
|
+
throughput: ebs.Throughput,
|
|
118
|
+
deleteOnTermination: ebs.DeleteOnTermination ?? true,
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async calculateInstanceCost(instanceType, region, pricingClient) {
|
|
123
|
+
const hourlyRate = await pricingClient.getPrice({
|
|
124
|
+
serviceCode: 'AmazonEC2',
|
|
125
|
+
region: (0, RegionMapper_1.normalizeRegion)(region),
|
|
126
|
+
filters: [
|
|
127
|
+
{ field: 'instanceType', value: instanceType },
|
|
128
|
+
{ field: 'operatingSystem', value: 'Linux' },
|
|
129
|
+
{ field: 'tenancy', value: 'Shared' },
|
|
130
|
+
{ field: 'preInstalledSw', value: 'NA' },
|
|
131
|
+
{ field: 'capacitystatus', value: 'Used' },
|
|
132
|
+
],
|
|
133
|
+
});
|
|
134
|
+
if (hourlyRate === null) {
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
return hourlyRate * LaunchTemplateCalculator.MONTHLY_HOURS;
|
|
138
|
+
}
|
|
139
|
+
async calculateStorageCost(ebsVolumes, region, pricingClient) {
|
|
140
|
+
if (ebsVolumes.length === 0) {
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
let totalStorageCost = 0;
|
|
144
|
+
for (const volume of ebsVolumes) {
|
|
145
|
+
const pricePerGBMonth = await pricingClient.getPrice({
|
|
146
|
+
serviceCode: 'AmazonEC2',
|
|
147
|
+
region: (0, RegionMapper_1.normalizeRegion)(region),
|
|
148
|
+
filters: [
|
|
149
|
+
{ field: 'productFamily', value: 'Storage' },
|
|
150
|
+
{ field: 'volumeApiName', value: volume.volumeType.toLowerCase() },
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
if (pricePerGBMonth !== null) {
|
|
154
|
+
totalStorageCost += pricePerGBMonth * volume.volumeSizeGB;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return totalStorageCost;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.LaunchTemplateCalculator = LaunchTemplateCalculator;
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaWNpbmcvY2FsY3VsYXRvcnMvTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGtEQUFrRDtBQXNCbEQsTUFBYSx3QkFBd0I7SUFDM0IsTUFBTSxDQUFVLHNCQUFzQixHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQVUsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVDLE1BQU0sQ0FBVSxhQUFhLEdBQUcsR0FBRyxDQUFDO0lBRTVDLFFBQVEsQ0FBQyxZQUFvQjtRQUMzQixPQUFPLFlBQVksS0FBSywwQkFBMEIsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsUUFBd0IsRUFDeEIsTUFBYyxFQUNkLGFBQTRCO1FBRTVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixPQUFPO2dCQUNMLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsRUFBRSxLQUFLO2dCQUNmLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUU7b0JBQ1gsa0RBQWtEO29CQUNsRCxxRkFBcUY7aUJBQ3RGO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwrREFBK0Q7WUFDL0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQ25ELE1BQU0sQ0FBQyxZQUFZLEVBQ25CLE1BQU0sRUFDTixhQUFhLENBQ2QsQ0FBQztZQUVGLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPO29CQUNMLE1BQU0sRUFBRSxDQUFDO29CQUNULFFBQVEsRUFBRSxLQUFLO29CQUNmLFVBQVUsRUFBRSxT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TUFBTSxFQUFFLElBQUEsOEJBQWUsRUFBQyxNQUFNLENBQUM7Z0JBQy9CLE9BQU8sRUFBRTtvQkFDUCxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtvQkFDNUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFO2lCQUNuRTthQUNGLENBQUMsQ0FBQztZQUVILElBQUksZUFBZSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM3QixnQkFBZ0IsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQzs7QUF0TkgsNERBd05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VXaXRoSWQgfSBmcm9tICcuLi8uLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IFJlc291cmNlQ29zdENhbGN1bGF0b3IsIE1vbnRobHlDb3N0LCBQcmljaW5nQ2xpZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUmVnaW9uIH0gZnJvbSAnLi4vUmVnaW9uTWFwcGVyJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGV4dHJhY3RlZCBmcm9tIGEgTGF1bmNoVGVtcGxhdGUncyBMYXVuY2hUZW1wbGF0ZURhdGEuXG4gKiBUaGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCBieSBvdGhlciBjYWxjdWxhdG9ycyAoZS5nLiwgQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IpXG4gKiB0byByZWZlcmVuY2UgaW5zdGFuY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZUNvbmZpZyB7XG4gIGluc3RhbmNlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgZWJzVm9sdW1lczogRWJzVm9sdW1lQ29uZmlnW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWJzVm9sdW1lQ29uZmlnIHtcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICB2b2x1bWVUeXBlOiBzdHJpbmc7XG4gIHZvbHVtZVNpemVHQjogbnVtYmVyO1xuICBpb3BzPzogbnVtYmVyO1xuICB0aHJvdWdocHV0PzogbnVtYmVyO1xuICBkZWxldGVPblRlcm1pbmF0aW9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yIGltcGxlbWVudHMgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVk9MVU1FX1NJWkVfR0IgPSA4O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1ZPTFVNRV9UWVBFID0gJ2dwMyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1PTlRITFlfSE9VUlMgPSA3MzA7XG5cbiAgc3VwcG9ydHMocmVzb3VyY2VUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVzb3VyY2VUeXBlID09PSAnQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlJztcbiAgfVxuXG4gIGFzeW5jIGNhbGN1bGF0ZUNvc3QoXG4gICAgcmVzb3VyY2U6IFJlc291cmNlV2l0aElkLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQsXG4gICk6IFByb21pc2U8TW9udGhseUNvc3Q+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmV4dHJhY3RDb25maWcocmVzb3VyY2UpO1xuXG4gICAgaWYgKCFjb25maWcuaW5zdGFuY2VUeXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW1xuICAgICAgICAgICdMYXVuY2hUZW1wbGF0ZSBkb2VzIG5vdCBzcGVjaWZ5IGFuIGluc3RhbmNlIHR5cGUnLFxuICAgICAgICAgICdMYXVuY2hUZW1wbGF0ZXMgaGF2ZSBubyBkaXJlY3QgY29zdDsgY29zdHMgYXJlIGluY3VycmVkIHdoZW4gaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCcsXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvc3QgZm9yIGEgc2luZ2xlIGluc3RhbmNlIHVzaW5nIHRoaXMgdGVtcGxhdGVcbiAgICAgIGNvbnN0IGluc3RhbmNlQ29zdCA9IGF3YWl0IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VDb3N0KFxuICAgICAgICBjb25maWcuaW5zdGFuY2VUeXBlLFxuICAgICAgICByZWdpb24sXG4gICAgICAgIHByaWNpbmdDbGllbnQsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5zdGFuY2VDb3N0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgICAgYXNzdW1wdGlvbnM6IFtcbiAgICAgICAgICAgIGBQcmljaW5nIGRhdGEgbm90IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgdHlwZSAke2NvbmZpZy5pbnN0YW5jZVR5cGV9IGluIHJlZ2lvbiAke3JlZ2lvbn1gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2VDb3N0ID0gYXdhaXQgdGhpcy5jYWxjdWxhdGVTdG9yYWdlQ29zdChcbiAgICAgICAgY29uZmlnLmVic1ZvbHVtZXMsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJpY2luZ0NsaWVudCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRvdGFsUGVySW5zdGFuY2VDb3N0ID0gaW5zdGFuY2VDb3N0ICsgc3RvcmFnZUNvc3Q7XG5cbiAgICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW1xuICAgICAgICAnTGF1bmNoVGVtcGxhdGVzIGhhdmUgbm8gZGlyZWN0IGNvc3Q7IHRoaXMgcmVwcmVzZW50cyBwZXItaW5zdGFuY2UgY29zdCB3aGVuIHVzZWQnLFxuICAgICAgICBgSW5zdGFuY2UgdHlwZTogJHtjb25maWcuaW5zdGFuY2VUeXBlfWAsXG4gICAgICAgIGBBc3N1bWVzICR7TGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yLk1PTlRITFlfSE9VUlN9IGhvdXJzIHBlciBtb250aCAoMjQvNyBvcGVyYXRpb24pYCxcbiAgICAgICAgJ0Fzc3VtZXMgTGludXggT1MsIHNoYXJlZCB0ZW5hbmN5LCBvbi1kZW1hbmQgcHJpY2luZycsXG4gICAgICBdO1xuXG4gICAgICBpZiAoY29uZmlnLmVic1ZvbHVtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2b2x1bWVEZXNjcmlwdGlvbnMgPSBjb25maWcuZWJzVm9sdW1lcy5tYXAoXG4gICAgICAgICAgKHYpID0+IGAke3YuZGV2aWNlTmFtZX06ICR7di52b2x1bWVTaXplR0J9R0IgJHt2LnZvbHVtZVR5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYXNzdW1wdGlvbnMucHVzaChgRUJTIHZvbHVtZXM6ICR7dm9sdW1lRGVzY3JpcHRpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc1Byb3Zpc2lvbmVkSW9wcyA9IGNvbmZpZy5lYnNWb2x1bWVzLnNvbWUoXG4gICAgICAgICh2KSA9PiAodi52b2x1bWVUeXBlID09PSAnaW8xJyB8fCB2LnZvbHVtZVR5cGUgPT09ICdpbzInKSAmJiB2LmlvcHMsXG4gICAgICApO1xuICAgICAgaWYgKGhhc1Byb3Zpc2lvbmVkSW9wcykge1xuICAgICAgICBhc3N1bXB0aW9ucy5wdXNoKCdQcm92aXNpb25lZCBJT1BTIGNvc3RzIGZvciBpbzEvaW8yIHZvbHVtZXMgYXJlIG5vdCBpbmNsdWRlZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNUaHJvdWdocHV0ID0gY29uZmlnLmVic1ZvbHVtZXMuc29tZShcbiAgICAgICAgKHYpID0+IHYudm9sdW1lVHlwZSA9PT0gJ2dwMycgJiYgdi50aHJvdWdocHV0ICYmIHYudGhyb3VnaHB1dCA+IDEyNSxcbiAgICAgICk7XG4gICAgICBpZiAoaGFzVGhyb3VnaHB1dCkge1xuICAgICAgICBhc3N1bXB0aW9ucy5wdXNoKCdBZGRpdGlvbmFsIHRocm91Z2hwdXQgY29zdHMgZm9yIGdwMyB2b2x1bWVzIGFyZSBub3QgaW5jbHVkZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5pbWFnZUlkKSB7XG4gICAgICAgIGFzc3VtcHRpb25zLnB1c2goYEFNSTogJHtjb25maWcuaW1hZ2VJZH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiB0b3RhbFBlckluc3RhbmNlQ29zdCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAnbG93JyxcbiAgICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW1xuICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggcHJpY2luZzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgY29uZmlndXJhdGlvbiBmcm9tIGEgTGF1bmNoVGVtcGxhdGUgcmVzb3VyY2UuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHB1YmxpYyB0byBhbGxvdyBvdGhlciBjYWxjdWxhdG9ycyB0byB1c2UgaXQuXG4gICAqL1xuICBleHRyYWN0Q29uZmlnKHJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCk6IExhdW5jaFRlbXBsYXRlQ29uZmlnIHtcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZURhdGEgPSByZXNvdXJjZS5wcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YSBhc1xuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWxhdW5jaFRlbXBsYXRlRGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBudWxsLFxuICAgICAgICBpbWFnZUlkOiBudWxsLFxuICAgICAgICBlYnNWb2x1bWVzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID0gKGxhdW5jaFRlbXBsYXRlRGF0YS5JbnN0YW5jZVR5cGUgYXMgc3RyaW5nKSB8fCBudWxsO1xuICAgIGNvbnN0IGltYWdlSWQgPSAobGF1bmNoVGVtcGxhdGVEYXRhLkltYWdlSWQgYXMgc3RyaW5nKSB8fCBudWxsO1xuICAgIGNvbnN0IGVic1ZvbHVtZXMgPSB0aGlzLmV4dHJhY3RFYnNWb2x1bWVzKGxhdW5jaFRlbXBsYXRlRGF0YSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIGVic1ZvbHVtZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEVic1ZvbHVtZXMoXG4gICAgbGF1bmNoVGVtcGxhdGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogRWJzVm9sdW1lQ29uZmlnW10ge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlTWFwcGluZ3MgPSBsYXVuY2hUZW1wbGF0ZURhdGEuQmxvY2tEZXZpY2VNYXBwaW5ncyBhc1xuICAgICAgfCBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFibG9ja0RldmljZU1hcHBpbmdzIHx8ICFBcnJheS5pc0FycmF5KGJsb2NrRGV2aWNlTWFwcGluZ3MpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrRGV2aWNlTWFwcGluZ3NcbiAgICAgIC5maWx0ZXIoKG1hcHBpbmcpID0+IG1hcHBpbmcuRWJzICE9PSB1bmRlZmluZWQpXG4gICAgICAubWFwKChtYXBwaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGVicyA9IG1hcHBpbmcuRWJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRldmljZU5hbWU6IChtYXBwaW5nLkRldmljZU5hbWUgYXMgc3RyaW5nKSB8fCAnL2Rldi94dmRhJyxcbiAgICAgICAgICB2b2x1bWVUeXBlOlxuICAgICAgICAgICAgKGVicy5Wb2x1bWVUeXBlIGFzIHN0cmluZykgfHxcbiAgICAgICAgICAgIExhdW5jaFRlbXBsYXRlQ2FsY3VsYXRvci5ERUZBVUxUX1ZPTFVNRV9UWVBFLFxuICAgICAgICAgIHZvbHVtZVNpemVHQjpcbiAgICAgICAgICAgIChlYnMuVm9sdW1lU2l6ZSBhcyBudW1iZXIpIHx8XG4gICAgICAgICAgICBMYXVuY2hUZW1wbGF0ZUNhbGN1bGF0b3IuREVGQVVMVF9WT0xVTUVfU0laRV9HQixcbiAgICAgICAgICBpb3BzOiBlYnMuSW9wcyBhcyBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgICAgdGhyb3VnaHB1dDogZWJzLlRocm91Z2hwdXQgYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGRlbGV0ZU9uVGVybWluYXRpb246IChlYnMuRGVsZXRlT25UZXJtaW5hdGlvbiBhcyBib29sZWFuKSA/PyB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZUluc3RhbmNlQ29zdChcbiAgICBpbnN0YW5jZVR5cGU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBwcmljaW5nQ2xpZW50OiBQcmljaW5nQ2xpZW50LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGhvdXJseVJhdGUgPSBhd2FpdCBwcmljaW5nQ2xpZW50LmdldFByaWNlKHtcbiAgICAgIHNlcnZpY2VDb2RlOiAnQW1hem9uRUMyJyxcbiAgICAgIHJlZ2lvbjogbm9ybWFsaXplUmVnaW9uKHJlZ2lvbiksXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHsgZmllbGQ6ICdpbnN0YW5jZVR5cGUnLCB2YWx1ZTogaW5zdGFuY2VUeXBlIH0sXG4gICAgICAgIHsgZmllbGQ6ICdvcGVyYXRpbmdTeXN0ZW0nLCB2YWx1ZTogJ0xpbnV4JyB9LFxuICAgICAgICB7IGZpZWxkOiAndGVuYW5jeScsIHZhbHVlOiAnU2hhcmVkJyB9LFxuICAgICAgICB7IGZpZWxkOiAncHJlSW5zdGFsbGVkU3cnLCB2YWx1ZTogJ05BJyB9LFxuICAgICAgICB7IGZpZWxkOiAnY2FwYWNpdHlzdGF0dXMnLCB2YWx1ZTogJ1VzZWQnIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaWYgKGhvdXJseVJhdGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBob3VybHlSYXRlICogTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yLk1PTlRITFlfSE9VUlM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZVN0b3JhZ2VDb3N0KFxuICAgIGVic1ZvbHVtZXM6IEVic1ZvbHVtZUNvbmZpZ1tdLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQsXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKGVic1ZvbHVtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxTdG9yYWdlQ29zdCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiBlYnNWb2x1bWVzKSB7XG4gICAgICBjb25zdCBwcmljZVBlckdCTW9udGggPSBhd2FpdCBwcmljaW5nQ2xpZW50LmdldFByaWNlKHtcbiAgICAgICAgc2VydmljZUNvZGU6ICdBbWF6b25FQzInLFxuICAgICAgICByZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgeyBmaWVsZDogJ3Byb2R1Y3RGYW1pbHknLCB2YWx1ZTogJ1N0b3JhZ2UnIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ3ZvbHVtZUFwaU5hbWUnLCB2YWx1ZTogdm9sdW1lLnZvbHVtZVR5cGUudG9Mb3dlckNhc2UoKSB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcmljZVBlckdCTW9udGggIT09IG51bGwpIHtcbiAgICAgICAgdG90YWxTdG9yYWdlQ29zdCArPSBwcmljZVBlckdCTW9udGggKiB2b2x1bWUudm9sdW1lU2l6ZUdCO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b3RhbFN0b3JhZ2VDb3N0O1xuICB9XG5cbn1cbiJdfQ==
|
package/dist/pricing/index.d.ts
CHANGED
|
@@ -7,4 +7,5 @@ export { LambdaCalculator } from './calculators/LambdaCalculator';
|
|
|
7
7
|
export { RDSCalculator } from './calculators/RDSCalculator';
|
|
8
8
|
export { CloudFrontCalculator } from './calculators/CloudFrontCalculator';
|
|
9
9
|
export { ElastiCacheCalculator } from './calculators/ElastiCacheCalculator';
|
|
10
|
+
export { LaunchTemplateCalculator, LaunchTemplateConfig, EbsVolumeConfig, } from './calculators/LaunchTemplateCalculator';
|
|
10
11
|
export * from './types';
|
package/dist/pricing/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.ElastiCacheCalculator = exports.CloudFrontCalculator = exports.RDSCalculator = exports.LambdaCalculator = exports.S3Calculator = exports.EC2Calculator = exports.CacheManager = exports.PricingClient = exports.PricingService = void 0;
|
|
17
|
+
exports.LaunchTemplateCalculator = exports.ElastiCacheCalculator = exports.CloudFrontCalculator = exports.RDSCalculator = exports.LambdaCalculator = exports.S3Calculator = exports.EC2Calculator = exports.CacheManager = exports.PricingClient = exports.PricingService = void 0;
|
|
18
18
|
var PricingService_1 = require("./PricingService");
|
|
19
19
|
Object.defineProperty(exports, "PricingService", { enumerable: true, get: function () { return PricingService_1.PricingService; } });
|
|
20
20
|
var PricingClient_1 = require("./PricingClient");
|
|
@@ -33,5 +33,7 @@ var CloudFrontCalculator_1 = require("./calculators/CloudFrontCalculator");
|
|
|
33
33
|
Object.defineProperty(exports, "CloudFrontCalculator", { enumerable: true, get: function () { return CloudFrontCalculator_1.CloudFrontCalculator; } });
|
|
34
34
|
var ElastiCacheCalculator_1 = require("./calculators/ElastiCacheCalculator");
|
|
35
35
|
Object.defineProperty(exports, "ElastiCacheCalculator", { enumerable: true, get: function () { return ElastiCacheCalculator_1.ElastiCacheCalculator; } });
|
|
36
|
+
var LaunchTemplateCalculator_1 = require("./calculators/LaunchTemplateCalculator");
|
|
37
|
+
Object.defineProperty(exports, "LaunchTemplateCalculator", { enumerable: true, get: function () { return LaunchTemplateCalculator_1.LaunchTemplateCalculator; } });
|
|
36
38
|
__exportStar(require("./types"), exports);
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFrRDtBQUF6QyxnSEFBQSxjQUFjLE9BQUE7QUFDdkIsaURBQWdEO0FBQXZDLDhHQUFBLGFBQWEsT0FBQTtBQUN0QiwrQ0FBOEM7QUFBckMsNEdBQUEsWUFBWSxPQUFBO0FBQ3JCLDZEQUE0RDtBQUFuRCw4R0FBQSxhQUFhLE9BQUE7QUFDdEIsMkRBQTBEO0FBQWpELDRHQUFBLFlBQVksT0FBQTtBQUNyQixtRUFBa0U7QUFBekQsb0hBQUEsZ0JBQWdCLE9BQUE7QUFDekIsNkRBQTREO0FBQW5ELDhHQUFBLGFBQWEsT0FBQTtBQUN0QiwyRUFBMEU7QUFBakUsNEhBQUEsb0JBQW9CLE9BQUE7QUFDN0IsNkVBQTRFO0FBQW5FLDhIQUFBLHFCQUFxQixPQUFBO0FBQzlCLG1GQUlnRDtBQUg5QyxvSUFBQSx3QkFBd0IsT0FBQTtBQUkxQiwwQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBQcmljaW5nU2VydmljZSB9IGZyb20gJy4vUHJpY2luZ1NlcnZpY2UnO1xuZXhwb3J0IHsgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4vUHJpY2luZ0NsaWVudCc7XG5leHBvcnQgeyBDYWNoZU1hbmFnZXIgfSBmcm9tICcuL0NhY2hlTWFuYWdlcic7XG5leHBvcnQgeyBFQzJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FQzJDYWxjdWxhdG9yJztcbmV4cG9ydCB7IFMzQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvUzNDYWxjdWxhdG9yJztcbmV4cG9ydCB7IExhbWJkYUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0xhbWJkYUNhbGN1bGF0b3InO1xuZXhwb3J0IHsgUkRTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvUkRTQ2FsY3VsYXRvcic7XG5leHBvcnQgeyBDbG91ZEZyb250Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQ2xvdWRGcm9udENhbGN1bGF0b3InO1xuZXhwb3J0IHsgRWxhc3RpQ2FjaGVDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FbGFzdGlDYWNoZUNhbGN1bGF0b3InO1xuZXhwb3J0IHtcbiAgTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yLFxuICBMYXVuY2hUZW1wbGF0ZUNvbmZpZyxcbiAgRWJzVm9sdW1lQ29uZmlnLFxufSBmcm9tICcuL2NhbGN1bGF0b3JzL0xhdW5jaFRlbXBsYXRlQ2FsY3VsYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
|
package/dist/pricing/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ResourceWithId, ResourceDiff } from '../diff/types';
|
|
2
2
|
export interface PricingService {
|
|
3
|
-
getResourceCost(resource: ResourceWithId, region: string): Promise<MonthlyCost>;
|
|
3
|
+
getResourceCost(resource: ResourceWithId, region: string, templateResources?: ResourceWithId[]): Promise<MonthlyCost>;
|
|
4
4
|
getCostDelta(diff: ResourceDiff, region: string): Promise<CostDelta>;
|
|
5
5
|
}
|
|
6
6
|
export interface MonthlyCost {
|
|
@@ -29,7 +29,7 @@ export interface ModifiedResourceCost extends ResourceCost {
|
|
|
29
29
|
export interface ResourceCostCalculator {
|
|
30
30
|
supports(resourceType: string): boolean;
|
|
31
31
|
canCalculate?(resource: ResourceWithId): boolean;
|
|
32
|
-
calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
|
|
32
|
+
calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient, templateResources?: ResourceWithId[]): Promise<MonthlyCost>;
|
|
33
33
|
}
|
|
34
34
|
export interface PricingClient {
|
|
35
35
|
getPrice(params: PriceQueryParams): Promise<number | null>;
|
package/dist/pricing/types.js
CHANGED
|
@@ -19,4 +19,4 @@ class UnsupportedResourceError extends Error {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.UnsupportedResourceError = UnsupportedResourceError;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2REEsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDSjtJQUFwQyxZQUFZLE9BQWUsRUFBUyxZQUFxQixJQUFJO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURtQixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUUzRCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBRUQsTUFBYSx3QkFBeUIsU0FBUSxLQUFLO0lBQzlCO0lBQW5CLFlBQW1CLFlBQW9CO1FBQ3JDLEtBQUssQ0FBQyxpQkFBaUIsWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO1FBRHZDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBRXJDLElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBTEQsNERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZVdpdGhJZCwgUmVzb3VyY2VEaWZmIH0gZnJvbSAnLi4vZGlmZi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2luZ1NlcnZpY2Uge1xuICBnZXRSZXNvdXJjZUNvc3QocmVzb3VyY2U6IFJlc291cmNlV2l0aElkLCByZWdpb246IHN0cmluZywgdGVtcGxhdGVSZXNvdXJjZXM/OiBSZXNvdXJjZVdpdGhJZFtdKTogUHJvbWlzZTxNb250aGx5Q29zdD47XG4gIGdldENvc3REZWx0YShkaWZmOiBSZXNvdXJjZURpZmYsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxDb3N0RGVsdGE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRobHlDb3N0IHtcbiAgYW1vdW50OiBudW1iZXI7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCAndW5rbm93bic7XG4gIGFzc3VtcHRpb25zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3N0RGVsdGEge1xuICB0b3RhbERlbHRhOiBudW1iZXI7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGFkZGVkQ29zdHM6IFJlc291cmNlQ29zdFtdO1xuICByZW1vdmVkQ29zdHM6IFJlc291cmNlQ29zdFtdO1xuICBtb2RpZmllZENvc3RzOiBNb2RpZmllZFJlc291cmNlQ29zdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ29zdCB7XG4gIGxvZ2ljYWxJZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIG1vbnRobHlDb3N0OiBNb250aGx5Q29zdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllZFJlc291cmNlQ29zdCBleHRlbmRzIFJlc291cmNlQ29zdCB7XG4gIG9sZE1vbnRobHlDb3N0OiBNb250aGx5Q29zdDtcbiAgbmV3TW9udGhseUNvc3Q6IE1vbnRobHlDb3N0O1xuICBjb3N0RGVsdGE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yIHtcbiAgc3VwcG9ydHMocmVzb3VyY2VUeXBlOiBzdHJpbmcpOiBib29sZWFuO1xuICBjYW5DYWxjdWxhdGU/KHJlc291cmNlOiBSZXNvdXJjZVdpdGhJZCk6IGJvb2xlYW47XG4gIGNhbGN1bGF0ZUNvc3QoXG4gICAgcmVzb3VyY2U6IFJlc291cmNlV2l0aElkLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQsXG4gICAgdGVtcGxhdGVSZXNvdXJjZXM/OiBSZXNvdXJjZVdpdGhJZFtdLFxuICApOiBQcm9taXNlPE1vbnRobHlDb3N0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nQ2xpZW50IHtcbiAgZ2V0UHJpY2UocGFyYW1zOiBQcmljZVF1ZXJ5UGFyYW1zKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljZVF1ZXJ5UGFyYW1zIHtcbiAgc2VydmljZUNvZGU6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGZpbHRlcnM6IFByaWNlRmlsdGVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2VGaWx0ZXIge1xuICBmaWVsZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICB0eXBlPzogJ1RFUk1fTUFUQ0gnO1xufVxuXG5leHBvcnQgY2xhc3MgUHJpY2luZ0FQSUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZXRyeWFibGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1ByaWNpbmdBUElFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3VwcG9ydGVkUmVzb3VyY2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc291cmNlVHlwZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFJlc291cmNlIHR5cGUgJHtyZXNvdXJjZVR5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB0aGlzLm5hbWUgPSAnVW5zdXBwb3J0ZWRSZXNvdXJjZUVycm9yJztcbiAgfVxufVxuIl19
|
package/dist/releasetag.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v0.1.
|
|
1
|
+
v0.1.22
|