cdk-cost-analyzer 0.1.5 → 0.1.7

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.
@@ -2,11 +2,11 @@
2
2
  "entries": {
3
3
  "AmazonS3:EU (Frankfurt):storageClass:General Purpose|volumeType:Standard": {
4
4
  "price": 0.023,
5
- "timestamp": 1768916986645
5
+ "timestamp": 1768922090044
6
6
  },
7
7
  "AmazonS3:invalid-region-123:storageClass:General Purpose|volumeType:Standard": {
8
8
  "price": 0.023,
9
- "timestamp": 1768916986682
9
+ "timestamp": 1768922090078
10
10
  }
11
11
  }
12
12
  }
package/SECURITY.md CHANGED
@@ -111,7 +111,7 @@ We follow coordinated vulnerability disclosure:
111
111
 
112
112
  Security updates are released as patch versions and announced through:
113
113
  - GitHub Security Advisories
114
- - Release notes in CHANGELOG.md
114
+ - Release notes on [GitHub Releases](https://github.com/buildinginthecloud/cdk-cost-analyzer/releases)
115
115
  - NPM package updates
116
116
 
117
117
  Subscribe to repository notifications to stay informed about security updates.
@@ -28,12 +28,12 @@ class NatGatewayCalculator {
28
28
  region: (0, RegionMapper_1.normalizeRegion)(region),
29
29
  filters: [
30
30
  { field: 'productFamily', value: 'NAT Gateway' },
31
- { field: 'usagetype', value: `${regionPrefix}-NatGateway-Hours` },
31
+ { field: 'usagetype', value: `${regionPrefix}-RegionalNatGateway-Hours` },
32
32
  ],
33
33
  });
34
34
  Logger_1.Logger.debug('NAT Gateway hourly rate retrieved', {
35
35
  hourlyRate,
36
- usageType: `${regionPrefix}-NatGateway-Hours`,
36
+ usageType: `${regionPrefix}-RegionalNatGateway-Hours`,
37
37
  });
38
38
  // Get data processing rate
39
39
  const dataProcessingRate = await pricingClient.getPrice({
@@ -41,12 +41,12 @@ class NatGatewayCalculator {
41
41
  region: (0, RegionMapper_1.normalizeRegion)(region),
42
42
  filters: [
43
43
  { field: 'productFamily', value: 'NAT Gateway' },
44
- { field: 'usagetype', value: `${regionPrefix}-NatGateway-Bytes` },
44
+ { field: 'usagetype', value: `${regionPrefix}-RegionalNatGateway-Bytes` },
45
45
  ],
46
46
  });
47
47
  Logger_1.Logger.debug('NAT Gateway data processing rate retrieved', {
48
48
  dataProcessingRate,
49
- usageType: `${regionPrefix}-NatGateway-Bytes`,
49
+ usageType: `${regionPrefix}-RegionalNatGateway-Bytes`,
50
50
  });
51
51
  if (hourlyRate === null || dataProcessingRate === null) {
52
52
  const dataProcessedGB = this.customDataProcessedGB || this.DEFAULT_DATA_PROCESSED_GB;
@@ -109,7 +109,7 @@ class NatGatewayCalculator {
109
109
  }
110
110
  getRegionPrefix(region) {
111
111
  // AWS uses region prefixes in usage types for NAT Gateway
112
- // Format: {PREFIX}-NatGateway-Hours or {PREFIX}-NatGateway-Bytes
112
+ // Format: {PREFIX}NatGateway-Hours or {PREFIX}NatGateway-Bytes
113
113
  // Reference: https://cur.vantage.sh/aws/nat-gateways/
114
114
  const prefixMap = {
115
115
  // US Regions
@@ -159,4 +159,4 @@ class NatGatewayCalculator {
159
159
  }
160
160
  }
161
161
  exports.NatGatewayCalculator = NatGatewayCalculator;
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmF0R2F0ZXdheUNhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpY2luZy9jYWxjdWxhdG9ycy9OYXRHYXRld2F5Q2FsY3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrREFBa0Q7QUFDbEQsK0NBQTRDO0FBRTVDLE1BQWEsb0JBQW9CO0lBSVg7SUFISCx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDaEMsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUV2QyxZQUFvQixxQkFBOEI7UUFBOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFTO0lBQUcsQ0FBQztJQUV0RCxRQUFRLENBQUMsWUFBb0I7UUFDM0IsT0FBTyxZQUFZLEtBQUssc0JBQXNCLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQ2pCLFNBQXlCLEVBQ3pCLE1BQWMsRUFDZCxhQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWxELGVBQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUU7Z0JBQ3RELE1BQU07Z0JBQ04sWUFBWTtnQkFDWixnQkFBZ0IsRUFBRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDO2dCQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyx5QkFBeUI7YUFDOUUsQ0FBQyxDQUFDO1lBRUgsa0JBQWtCO1lBQ2xCLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7b0JBQ2hELEVBQUUsS0FBSyxFQUFF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TTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsaUJBQWlCO1lBQ2pCLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLHdCQUF3QjtZQUN4QixXQUFXLEVBQUUsTUFBTTtZQUNuQixzQkFBc0I7WUFDdEIsWUFBWSxFQUFFLE1BQU07WUFDcEIsY0FBYyxFQUFFLE1BQU07WUFDdEIsaUJBQWlCO1lBQ2pCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGlCQUFpQjtZQUNqQixjQUFjLEVBQUUsTUFBTTtZQUN0QixnQkFBZ0I7WUFDaEIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLGVBQWUsRUFBRSxNQUFNO1NBQ3hCLENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBN0tELG9EQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlV2l0aElkIH0gZnJvbSAnLi4vLi4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yLCBNb250aGx5Q29zdCwgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVJlZ2lvbiB9IGZyb20gJy4uL1JlZ2lvbk1hcHBlcic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXInO1xuXG5leHBvcnQgY2xhc3MgTmF0R2F0ZXdheUNhbGN1bGF0b3IgaW1wbGVtZW50cyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFfUFJPQ0VTU0VEX0dCID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEhPVVJTX1BFUl9NT05USCA9IDczMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN1c3RvbURhdGFQcm9jZXNzZWRHQj86IG51bWJlcikge31cblxuICBzdXBwb3J0cyhyZXNvdXJjZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNvdXJjZVR5cGUgPT09ICdBV1M6OkVDMjo6TmF0R2F0ZXdheSc7XG4gIH1cblxuICBhc3luYyBjYWxjdWxhdGVDb3N0KFxuICAgIF9yZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcHJpY2luZ0NsaWVudDogUHJpY2luZ0NsaWVudCxcbiAgKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWdpb25QcmVmaXggPSB0aGlzLmdldFJlZ2lvblByZWZpeChyZWdpb24pO1xuICAgICAgXG4gICAgICBMb2dnZXIuZGVidWcoJ05BVCBHYXRld2F5IHByaWNpbmcgY2FsY3VsYXRpb24gc3RhcnRlZCcsIHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICByZWdpb25QcmVmaXgsXG4gICAgICAgIG5vcm1hbGl6ZWRSZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBkYXRhUHJvY2Vzc2VkR0I6IHRoaXMuY3VzdG9tRGF0YVByb2Nlc3NlZEdCIHx8IHRoaXMuREVGQVVMVF9EQVRBX1BST0NFU1NFRF9HQixcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBHZXQgaG91cmx5IHJhdGVcbiAgICAgIGNvbnN0IGhvdXJseVJhdGUgPSBhd2FpdCBwcmljaW5nQ2xpZW50LmdldFByaWNlKHtcbiAgICAgICAgc2VydmljZUNvZGU6ICdBbWF6b25FQzInLFxuICAgICAgICByZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgeyBmaWVsZDogJ3Byb2R1Y3RGYW1pbHknLCB2YWx1ZTogJ05BVCBHYXRld2F5JyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd1c2FnZXR5cGUnLCB2YWx1ZTogYCR7cmVnaW9uUHJlZml4fS1OYXRHYXRld2F5LUhvdXJzYCB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgaG91cmx5IHJhdGUgcmV0cmlldmVkJywge1xuICAgICAgICBob3VybHlSYXRlLFxuICAgICAgICB1c2FnZVR5cGU6IGAke3JlZ2lvblByZWZpeH0tTmF0R2F0ZXdheS1Ib3Vyc2AsXG4gICAgICB9KTtcblxuICAgICAgLy8gR2V0IGRhdGEgcHJvY2Vzc2luZyByYXRlXG4gICAgICBjb25zdCBkYXRhUHJvY2Vzc2luZ1JhdGUgPSBhd2FpdCBwcmljaW5nQ2xpZW50LmdldFByaWNlKHtcbiAgICAgICAgc2VydmljZUNvZGU6ICdBbWF6b25FQzInLFxuICAgICAgICByZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgeyBmaWVsZDogJ3Byb2R1Y3RGYW1pbHknLCB2YWx1ZTogJ05BVCBHYXRld2F5JyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd1c2FnZXR5cGUnLCB2YWx1ZTogYCR7cmVnaW9uUHJlZml4fS1OYXRHYXRld2F5LUJ5dGVzYCB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgZGF0YSBwcm9jZXNzaW5nIHJhdGUgcmV0cmlldmVkJywge1xuICAgICAgICBkYXRhUHJvY2Vzc2luZ1JhdGUsXG4gICAgICAgIHVzYWdlVHlwZTogYCR7cmVnaW9uUHJlZml4fS1OYXRHYXRld2F5LUJ5dGVzYCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaG91cmx5UmF0ZSA9PT0gbnVsbCB8fCBkYXRhUHJvY2Vzc2luZ1JhdGUgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGF0YVByb2Nlc3NlZEdCID0gdGhpcy5jdXN0b21EYXRhUHJvY2Vzc2VkR0IgfHwgdGhpcy5ERUZBVUxUX0RBVEFfUFJPQ0VTU0VEX0dCO1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9ucyA9IFtcbiAgICAgICAgICBgUHJpY2luZyBkYXRhIG5vdCBhdmFpbGFibGUgZm9yIE5BVCBHYXRld2F5IGluIHJlZ2lvbiAke3JlZ2lvbn1gLFxuICAgICAgICAgIGBXb3VsZCBhc3N1bWUgJHtkYXRhUHJvY2Vzc2VkR0J9IEdCIG9mIGRhdGEgcHJvY2Vzc2luZyBwZXIgbW9udGhgLFxuICAgICAgICAgIGBXb3VsZCBhc3N1bWUgJHt0aGlzLkhPVVJTX1BFUl9NT05USH0gaG91cnMgcGVyIG1vbnRoYCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5jdXN0b21EYXRhUHJvY2Vzc2VkR0IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc3VtcHRpb25zLnB1c2goJ1VzaW5nIGN1c3RvbSBkYXRhIHByb2Nlc3NpbmcgYXNzdW1wdGlvbiBmcm9tIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgcHJpY2luZyBub3QgYXZhaWxhYmxlJywge1xuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICByZWdpb25QcmVmaXgsXG4gICAgICAgICAgaG91cmx5UmF0ZUF2YWlsYWJsZTogaG91cmx5UmF0ZSAhPT0gbnVsbCxcbiAgICAgICAgICBkYXRhUHJvY2Vzc2luZ1JhdGVBdmFpbGFibGU6IGRhdGFQcm9jZXNzaW5nUmF0ZSAhPT0gbnVsbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgIGNvbmZpZGVuY2U6ICd1bmtub3duJyxcbiAgICAgICAgICBhc3N1bXB0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YVByb2Nlc3NlZEdCID0gdGhpcy5jdXN0b21EYXRhUHJvY2Vzc2VkR0IgfHwgdGhpcy5ERUZBVUxUX0RBVEFfUFJPQ0VTU0VEX0dCO1xuICAgICAgY29uc3QgaG91cmx5Q29zdCA9IGhvdXJseVJhdGUgKiB0aGlzLkhPVVJTX1BFUl9NT05USDtcbiAgICAgIGNvbnN0IGRhdGFQcm9jZXNzaW5nQ29zdCA9IGRhdGFQcm9jZXNzaW5nUmF0ZSAqIGRhdGFQcm9jZXNzZWRHQjtcbiAgICAgIGNvbnN0IHRvdGFsQ29zdCA9IGhvdXJseUNvc3QgKyBkYXRhUHJvY2Vzc2luZ0Nvc3Q7XG5cbiAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgY29zdCBjYWxjdWxhdGVkJywge1xuICAgICAgICBob3VybHlSYXRlLFxuICAgICAgICBkYXRhUHJvY2Vzc2luZ1JhdGUsXG4gICAgICAgIGRhdGFQcm9jZXNzZWRHQixcbiAgICAgICAgaG91cmx5Q29zdCxcbiAgICAgICAgZGF0YVByb2Nlc3NpbmdDb3N0LFxuICAgICAgICB0b3RhbENvc3QsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiB0b3RhbENvc3QsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ21lZGl1bScsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbXG4gICAgICAgICAgYEhvdXJseSByYXRlOiAkJHtob3VybHlSYXRlLnRvRml4ZWQoNCl9L2hvdXIgw5cgJHt0aGlzLkhPVVJTX1BFUl9NT05USH0gaG91cnMgPSAkJHtob3VybHlDb3N0LnRvRml4ZWQoMil9L21vbnRoYCxcbiAgICAgICAgICBgRGF0YSBwcm9jZXNzaW5nOiAkJHtkYXRhUHJvY2Vzc2luZ1JhdGUudG9GaXhlZCg0KX0vR0Igw5cgJHtkYXRhUHJvY2Vzc2VkR0J9IEdCID0gJCR7ZGF0YVByb2Nlc3NpbmdDb3N0LnRvRml4ZWQoMil9L21vbnRoYCxcbiAgICAgICAgICBgVG90YWw6ICQke3RvdGFsQ29zdC50b0ZpeGVkKDIpfS9tb250aGAsXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBMb2dnZXIuZGVidWcoJ05BVCBHYXRld2F5IHByaWNpbmcgY2FsY3VsYXRpb24gZmFpbGVkJywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWdpb24sXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIGNvbmZpZGVuY2U6ICd1bmtub3duJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtgRmFpbGVkIHRvIGZldGNoIHByaWNpbmc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgZ2V0UmVnaW9uUHJlZml4KHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBBV1MgdXNlcyByZWdpb24gcHJlZml4ZXMgaW4gdXNhZ2UgdHlwZXMgZm9yIE5BVCBHYXRld2F5XG4gICAgLy8gRm9ybWF0OiB7UFJFRklYfS1OYXRHYXRld2F5LUhvdXJzIG9yIHtQUkVGSVh9LU5hdEdhdGV3YXktQnl0ZXNcbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vY3VyLnZhbnRhZ2Uuc2gvYXdzL25hdC1nYXRld2F5cy9cbiAgICBjb25zdCBwcmVmaXhNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBVUyBSZWdpb25zXG4gICAgICAndXMtZWFzdC0xJzogJ1VTRTEnLFxuICAgICAgJ3VzLWVhc3QtMic6ICdVU0UyJyxcbiAgICAgICd1cy13ZXN0LTEnOiAnVVNXMScsXG4gICAgICAndXMtd2VzdC0yJzogJ1VTVzInLFxuICAgICAgLy8gRVUgUmVnaW9uc1xuICAgICAgJ2V1LXdlc3QtMSc6ICdFVVcxJyxcbiAgICAgICdldS13ZXN0LTInOiAnRVVXMicsXG4gICAgICAnZXUtd2VzdC0zJzogJ0VVVzMnLFxuICAgICAgJ2V1LWNlbnRyYWwtMSc6ICdFVUMxJyxcbiAgICAgICdldS1jZW50cmFsLTInOiAnRVVDMicsXG4gICAgICAnZXUtbm9ydGgtMSc6ICdFVU4xJyxcbiAgICAgICdldS1zb3V0aC0xJzogJ0VVUzEnLFxuICAgICAgJ2V1LXNvdXRoLTInOiAnRVVTMicsXG4gICAgICAvLyBBc2lhIFBhY2lmaWMgUmVnaW9uc1xuICAgICAgJ2FwLXNvdXRoLTEnOiAnQVBTMScsXG4gICAgICAnYXAtc291dGgtMic6ICdBUFMyJyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMSc6ICdBUFMzJyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMic6ICdBUFM0JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMyc6ICdBUFM1JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtNCc6ICdBUFM2JyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMSc6ICdBUE4xJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMic6ICdBUE4yJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMyc6ICdBUE4zJyxcbiAgICAgICdhcC1lYXN0LTEnOiAnQVBFMScsXG4gICAgICAvLyBDYW5hZGEgUmVnaW9uc1xuICAgICAgJ2NhLWNlbnRyYWwtMSc6ICdDQU4xJyxcbiAgICAgICdjYS13ZXN0LTEnOiAnQ0FXMScsXG4gICAgICAvLyBTb3V0aCBBbWVyaWNhIFJlZ2lvbnNcbiAgICAgICdzYS1lYXN0LTEnOiAnU0FFMScsXG4gICAgICAvLyBNaWRkbGUgRWFzdCBSZWdpb25zXG4gICAgICAnbWUtc291dGgtMSc6ICdNRVMxJyxcbiAgICAgICdtZS1jZW50cmFsLTEnOiAnTUVDMScsXG4gICAgICAvLyBBZnJpY2EgUmVnaW9uc1xuICAgICAgJ2FmLXNvdXRoLTEnOiAnQUZTMScsXG4gICAgICAvLyBJc3JhZWwgUmVnaW9uc1xuICAgICAgJ2lsLWNlbnRyYWwtMSc6ICdJTEMxJyxcbiAgICAgIC8vIE90aGVyIFJlZ2lvbnNcbiAgICAgICdhcC1zb3V0aGVhc3QtNSc6ICdBUFM3JyxcbiAgICAgICdldS1pc29lLXdlc3QtMSc6ICdFSVcxJyxcbiAgICAgICd1cy1nb3Ytd2VzdC0xJzogJ1VHVzEnLFxuICAgICAgJ3VzLWdvdi1lYXN0LTEnOiAnVUdFMScsXG4gICAgfTtcblxuICAgIHJldHVybiBwcmVmaXhNYXBbcmVnaW9uXSB8fCAnJztcbiAgfVxufVxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmF0R2F0ZXdheUNhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpY2luZy9jYWxjdWxhdG9ycy9OYXRHYXRld2F5Q2FsY3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrREFBa0Q7QUFDbEQsK0NBQTRDO0FBRTVDLE1BQWEsb0JBQW9CO0lBSVg7SUFISCx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDaEMsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUV2QyxZQUFvQixxQkFBOEI7UUFBOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFTO0lBQUcsQ0FBQztJQUV0RCxRQUFRLENBQUMsWUFBb0I7UUFDM0IsT0FBTyxZQUFZLEtBQUssc0JBQXNCLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQ2pCLFNBQXlCLEVBQ3pCLE1BQWMsRUFDZCxhQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWxELGVBQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUU7Z0JBQ3RELE1BQU07Z0JBQ04sWUFBWTtnQkFDWixnQkFBZ0IsRUFBRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDO2dCQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyx5QkFBeUI7YUFDOUUsQ0FBQyxDQUFDO1lBRUgsa0JBQWtCO1lBQ2xCLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7b0JBQ2hELEVBQUUsS0FBSyxFQUFF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TTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsaUJBQWlCO1lBQ2pCLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLHdCQUF3QjtZQUN4QixXQUFXLEVBQUUsTUFBTTtZQUNuQixzQkFBc0I7WUFDdEIsWUFBWSxFQUFFLE1BQU07WUFDcEIsY0FBYyxFQUFFLE1BQU07WUFDdEIsaUJBQWlCO1lBQ2pCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGlCQUFpQjtZQUNqQixjQUFjLEVBQUUsTUFBTTtZQUN0QixnQkFBZ0I7WUFDaEIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLGVBQWUsRUFBRSxNQUFNO1NBQ3hCLENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBN0tELG9EQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlV2l0aElkIH0gZnJvbSAnLi4vLi4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yLCBNb250aGx5Q29zdCwgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVJlZ2lvbiB9IGZyb20gJy4uL1JlZ2lvbk1hcHBlcic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXInO1xuXG5leHBvcnQgY2xhc3MgTmF0R2F0ZXdheUNhbGN1bGF0b3IgaW1wbGVtZW50cyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFfUFJPQ0VTU0VEX0dCID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEhPVVJTX1BFUl9NT05USCA9IDczMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN1c3RvbURhdGFQcm9jZXNzZWRHQj86IG51bWJlcikge31cblxuICBzdXBwb3J0cyhyZXNvdXJjZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNvdXJjZVR5cGUgPT09ICdBV1M6OkVDMjo6TmF0R2F0ZXdheSc7XG4gIH1cblxuICBhc3luYyBjYWxjdWxhdGVDb3N0KFxuICAgIF9yZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcHJpY2luZ0NsaWVudDogUHJpY2luZ0NsaWVudCxcbiAgKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWdpb25QcmVmaXggPSB0aGlzLmdldFJlZ2lvblByZWZpeChyZWdpb24pO1xuICAgICAgXG4gICAgICBMb2dnZXIuZGVidWcoJ05BVCBHYXRld2F5IHByaWNpbmcgY2FsY3VsYXRpb24gc3RhcnRlZCcsIHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICByZWdpb25QcmVmaXgsXG4gICAgICAgIG5vcm1hbGl6ZWRSZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBkYXRhUHJvY2Vzc2VkR0I6IHRoaXMuY3VzdG9tRGF0YVByb2Nlc3NlZEdCIHx8IHRoaXMuREVGQVVMVF9EQVRBX1BST0NFU1NFRF9HQixcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBHZXQgaG91cmx5IHJhdGVcbiAgICAgIGNvbnN0IGhvdXJseVJhdGUgPSBhd2FpdCBwcmljaW5nQ2xpZW50LmdldFByaWNlKHtcbiAgICAgICAgc2VydmljZUNvZGU6ICdBbWF6b25FQzInLFxuICAgICAgICByZWdpb246IG5vcm1hbGl6ZVJlZ2lvbihyZWdpb24pLFxuICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgeyBmaWVsZDogJ3Byb2R1Y3RGYW1pbHknLCB2YWx1ZTogJ05BVCBHYXRld2F5JyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd1c2FnZXR5cGUnLCB2YWx1ZTogYCR7cmVnaW9uUHJlZml4fS1SZWdpb25hbE5hdEdhdGV3YXktSG91cnNgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgTG9nZ2VyLmRlYnVnKCdOQVQgR2F0ZXdheSBob3VybHkgcmF0ZSByZXRyaWV2ZWQnLCB7XG4gICAgICAgIGhvdXJseVJhdGUsXG4gICAgICAgIHVzYWdlVHlwZTogYCR7cmVnaW9uUHJlZml4fS1SZWdpb25hbE5hdEdhdGV3YXktSG91cnNgLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIHByb2Nlc3NpbmcgcmF0ZVxuICAgICAgY29uc3QgZGF0YVByb2Nlc3NpbmdSYXRlID0gYXdhaXQgcHJpY2luZ0NsaWVudC5nZXRQcmljZSh7XG4gICAgICAgIHNlcnZpY2VDb2RlOiAnQW1hem9uRUMyJyxcbiAgICAgICAgcmVnaW9uOiBub3JtYWxpemVSZWdpb24ocmVnaW9uKSxcbiAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgIHsgZmllbGQ6ICdwcm9kdWN0RmFtaWx5JywgdmFsdWU6ICdOQVQgR2F0ZXdheScgfSxcbiAgICAgICAgICB7IGZpZWxkOiAndXNhZ2V0eXBlJywgdmFsdWU6IGAke3JlZ2lvblByZWZpeH0tUmVnaW9uYWxOYXRHYXRld2F5LUJ5dGVzYCB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgZGF0YSBwcm9jZXNzaW5nIHJhdGUgcmV0cmlldmVkJywge1xuICAgICAgICBkYXRhUHJvY2Vzc2luZ1JhdGUsXG4gICAgICAgIHVzYWdlVHlwZTogYCR7cmVnaW9uUHJlZml4fS1SZWdpb25hbE5hdEdhdGV3YXktQnl0ZXNgLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChob3VybHlSYXRlID09PSBudWxsIHx8IGRhdGFQcm9jZXNzaW5nUmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkYXRhUHJvY2Vzc2VkR0IgPSB0aGlzLmN1c3RvbURhdGFQcm9jZXNzZWRHQiB8fCB0aGlzLkRFRkFVTFRfREFUQV9QUk9DRVNTRURfR0I7XG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW1xuICAgICAgICAgIGBQcmljaW5nIGRhdGEgbm90IGF2YWlsYWJsZSBmb3IgTkFUIEdhdGV3YXkgaW4gcmVnaW9uICR7cmVnaW9ufWAsXG4gICAgICAgICAgYFdvdWxkIGFzc3VtZSAke2RhdGFQcm9jZXNzZWRHQn0gR0Igb2YgZGF0YSBwcm9jZXNzaW5nIHBlciBtb250aGAsXG4gICAgICAgICAgYFdvdWxkIGFzc3VtZSAke3RoaXMuSE9VUlNfUEVSX01PTlRIfSBob3VycyBwZXIgbW9udGhgLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbURhdGFQcm9jZXNzZWRHQiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzdW1wdGlvbnMucHVzaCgnVXNpbmcgY3VzdG9tIGRhdGEgcHJvY2Vzc2luZyBhc3N1bXB0aW9uIGZyb20gY29uZmlndXJhdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nZ2VyLmRlYnVnKCdOQVQgR2F0ZXdheSBwcmljaW5nIG5vdCBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIHJlZ2lvblByZWZpeCxcbiAgICAgICAgICBob3VybHlSYXRlQXZhaWxhYmxlOiBob3VybHlSYXRlICE9PSBudWxsLFxuICAgICAgICAgIGRhdGFQcm9jZXNzaW5nUmF0ZUF2YWlsYWJsZTogZGF0YVByb2Nlc3NpbmdSYXRlICE9PSBudWxsLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICAgIGFzc3VtcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhUHJvY2Vzc2VkR0IgPSB0aGlzLmN1c3RvbURhdGFQcm9jZXNzZWRHQiB8fCB0aGlzLkRFRkFVTFRfREFUQV9QUk9DRVNTRURfR0I7XG4gICAgICBjb25zdCBob3VybHlDb3N0ID0gaG91cmx5UmF0ZSAqIHRoaXMuSE9VUlNfUEVSX01PTlRIO1xuICAgICAgY29uc3QgZGF0YVByb2Nlc3NpbmdDb3N0ID0gZGF0YVByb2Nlc3NpbmdSYXRlICogZGF0YVByb2Nlc3NlZEdCO1xuICAgICAgY29uc3QgdG90YWxDb3N0ID0gaG91cmx5Q29zdCArIGRhdGFQcm9jZXNzaW5nQ29zdDtcblxuICAgICAgTG9nZ2VyLmRlYnVnKCdOQVQgR2F0ZXdheSBjb3N0IGNhbGN1bGF0ZWQnLCB7XG4gICAgICAgIGhvdXJseVJhdGUsXG4gICAgICAgIGRhdGFQcm9jZXNzaW5nUmF0ZSxcbiAgICAgICAgZGF0YVByb2Nlc3NlZEdCLFxuICAgICAgICBob3VybHlDb3N0LFxuICAgICAgICBkYXRhUHJvY2Vzc2luZ0Nvc3QsXG4gICAgICAgIHRvdGFsQ29zdCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IHRvdGFsQ29zdCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAnbWVkaXVtJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtcbiAgICAgICAgICBgSG91cmx5IHJhdGU6ICQke2hvdXJseVJhdGUudG9GaXhlZCg0KX0vaG91ciDDlyAke3RoaXMuSE9VUlNfUEVSX01PTlRIfSBob3VycyA9ICQke2hvdXJseUNvc3QudG9GaXhlZCgyKX0vbW9udGhgLFxuICAgICAgICAgIGBEYXRhIHByb2Nlc3Npbmc6ICQke2RhdGFQcm9jZXNzaW5nUmF0ZS50b0ZpeGVkKDQpfS9HQiDDlyAke2RhdGFQcm9jZXNzZWRHQn0gR0IgPSAkJHtkYXRhUHJvY2Vzc2luZ0Nvc3QudG9GaXhlZCgyKX0vbW9udGhgLFxuICAgICAgICAgIGBUb3RhbDogJCR7dG90YWxDb3N0LnRvRml4ZWQoMil9L21vbnRoYCxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIExvZ2dlci5kZWJ1ZygnTkFUIEdhdGV3YXkgcHJpY2luZyBjYWxjdWxhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BGYWlsZWQgdG8gZmV0Y2ggcHJpY2luZzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBnZXRSZWdpb25QcmVmaXgocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEFXUyB1c2VzIHJlZ2lvbiBwcmVmaXhlcyBpbiB1c2FnZSB0eXBlcyBmb3IgTkFUIEdhdGV3YXlcbiAgICAvLyBGb3JtYXQ6IHtQUkVGSVh9TmF0R2F0ZXdheS1Ib3VycyBvciB7UFJFRklYfU5hdEdhdGV3YXktQnl0ZXNcbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vY3VyLnZhbnRhZ2Uuc2gvYXdzL25hdC1nYXRld2F5cy9cbiAgICBjb25zdCBwcmVmaXhNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBVUyBSZWdpb25zXG4gICAgICAndXMtZWFzdC0xJzogJ1VTRTEnLFxuICAgICAgJ3VzLWVhc3QtMic6ICdVU0UyJyxcbiAgICAgICd1cy13ZXN0LTEnOiAnVVNXMScsXG4gICAgICAndXMtd2VzdC0yJzogJ1VTVzInLFxuICAgICAgLy8gRVUgUmVnaW9uc1xuICAgICAgJ2V1LXdlc3QtMSc6ICdFVVcxJyxcbiAgICAgICdldS13ZXN0LTInOiAnRVVXMicsXG4gICAgICAnZXUtd2VzdC0zJzogJ0VVVzMnLFxuICAgICAgJ2V1LWNlbnRyYWwtMSc6ICdFVUMxJyxcbiAgICAgICdldS1jZW50cmFsLTInOiAnRVVDMicsXG4gICAgICAnZXUtbm9ydGgtMSc6ICdFVU4xJyxcbiAgICAgICdldS1zb3V0aC0xJzogJ0VVUzEnLFxuICAgICAgJ2V1LXNvdXRoLTInOiAnRVVTMicsXG4gICAgICAvLyBBc2lhIFBhY2lmaWMgUmVnaW9uc1xuICAgICAgJ2FwLXNvdXRoLTEnOiAnQVBTMScsXG4gICAgICAnYXAtc291dGgtMic6ICdBUFMyJyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMSc6ICdBUFMzJyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMic6ICdBUFM0JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMyc6ICdBUFM1JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtNCc6ICdBUFM2JyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMSc6ICdBUE4xJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMic6ICdBUE4yJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMyc6ICdBUE4zJyxcbiAgICAgICdhcC1lYXN0LTEnOiAnQVBFMScsXG4gICAgICAvLyBDYW5hZGEgUmVnaW9uc1xuICAgICAgJ2NhLWNlbnRyYWwtMSc6ICdDQU4xJyxcbiAgICAgICdjYS13ZXN0LTEnOiAnQ0FXMScsXG4gICAgICAvLyBTb3V0aCBBbWVyaWNhIFJlZ2lvbnNcbiAgICAgICdzYS1lYXN0LTEnOiAnU0FFMScsXG4gICAgICAvLyBNaWRkbGUgRWFzdCBSZWdpb25zXG4gICAgICAnbWUtc291dGgtMSc6ICdNRVMxJyxcbiAgICAgICdtZS1jZW50cmFsLTEnOiAnTUVDMScsXG4gICAgICAvLyBBZnJpY2EgUmVnaW9uc1xuICAgICAgJ2FmLXNvdXRoLTEnOiAnQUZTMScsXG4gICAgICAvLyBJc3JhZWwgUmVnaW9uc1xuICAgICAgJ2lsLWNlbnRyYWwtMSc6ICdJTEMxJyxcbiAgICAgIC8vIE90aGVyIFJlZ2lvbnNcbiAgICAgICdhcC1zb3V0aGVhc3QtNSc6ICdBUFM3JyxcbiAgICAgICdldS1pc29lLXdlc3QtMSc6ICdFSVcxJyxcbiAgICAgICd1cy1nb3Ytd2VzdC0xJzogJ1VHVzEnLFxuICAgICAgJ3VzLWdvdi1lYXN0LTEnOiAnVUdFMScsXG4gICAgfTtcblxuICAgIHJldHVybiBwcmVmaXhNYXBbcmVnaW9uXSB8fCAnJztcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- v0.1.5
1
+ v0.1.7
package/docs/RELEASE.md CHANGED
@@ -65,7 +65,7 @@ The GitHub Actions release workflow automatically:
65
65
  - `feat!:` or `BREAKING CHANGE:` → Major version (1.0.0 → 2.0.0)
66
66
  - `feat:` → Minor version (1.0.0 → 1.1.0)
67
67
  - `fix:` → Patch version (1.0.0 → 1.0.1)
68
- 3. **Updates CHANGELOG.md** with categorized changes:
68
+ 3. **Generates changelog** with categorized changes:
69
69
  - Features
70
70
  - Bug Fixes
71
71
  - Documentation
@@ -89,7 +89,7 @@ gh run list --workflow=release
89
89
 
90
90
  ## Changelog Management
91
91
 
92
- The CHANGELOG.md is automatically updated by the release workflow using conventional commits.
92
+ The changelog is automatically generated during releases and published to [GitHub Releases](https://github.com/buildinginthecloud/cdk-cost-analyzer/releases).
93
93
 
94
94
  ### Commit Type Mapping
95
95
 
@@ -102,13 +102,15 @@ Commits are categorized in the changelog as follows:
102
102
  - `perf:` → **Performance Improvements** section
103
103
  - `chore:`, `style:`, `test:` → Hidden (not in changelog)
104
104
 
105
- ### Manual Changelog Updates
105
+ ### Viewing Changelog
106
106
 
107
- For special cases, you can manually update CHANGELOG.md:
107
+ View the complete changelog at: https://github.com/buildinginthecloud/cdk-cost-analyzer/releases
108
108
 
109
- 1. Add entries under the `[Unreleased]` section
110
- 2. Commit with `docs: update changelog`
111
- 3. The release workflow will preserve manual entries
109
+ Each release includes:
110
+ - Version number and release date
111
+ - Categorized list of changes
112
+ - Links to commits and pull requests
113
+ - Breaking changes (if any)
112
114
 
113
115
  ## Manual Release Process
114
116
 
@@ -132,7 +134,7 @@ npm publish --access public
132
134
  1. Verify the package is available on NPM: https://www.npmjs.com/package/cdk-cost-analyzer
133
135
  2. Verify the GitHub release was created: https://github.com/buildinginthecloud/cdk-cost-analyzer/releases
134
136
  3. Test installation: `npm install -g cdk-cost-analyzer@X.Y.Z`
135
- 4. Verify CHANGELOG.md was updated correctly
137
+ 4. Verify changelog was published to GitHub Releases
136
138
  5. Announce the release in relevant channels
137
139
 
138
140
  ## Rollback
@@ -169,11 +171,12 @@ If a release has critical issues:
169
171
  - Verify package name is not already taken
170
172
  - Check for version conflicts
171
173
 
172
- ### CHANGELOG Not Updated
174
+ ### Changelog Not Published
173
175
 
174
- - Verify `.versionrc.json` configuration exists
175
- - Check conventional commit format is correct
176
+ - Verify release workflow completed successfully
177
+ - Check GitHub Releases page for the version
176
178
  - Review release workflow logs for errors
179
+ - Ensure conventional commit format is correct
177
180
 
178
181
  ## Configuration
179
182
 
@@ -226,7 +229,7 @@ The `.versionrc.json` file configures how commits are categorized:
226
229
  - [ ] Commits follow conventional commit format
227
230
  - [ ] PR merged to main branch
228
231
  - [ ] Release workflow completed successfully
229
- - [ ] CHANGELOG.md automatically updated
232
+ - [ ] Changelog published to GitHub Releases
230
233
  - [ ] Package published to NPM
231
234
  - [ ] GitHub release created
232
235
  - [ ] Installation tested: `npm install -g cdk-cost-analyzer@latest`
package/package.json CHANGED
@@ -21,7 +21,6 @@
21
21
  "lint": "npx projen lint",
22
22
  "package": "npx projen package",
23
23
  "post-compile": "npx projen post-compile",
24
- "post-release": "npx projen post-release",
25
24
  "post-upgrade": "npx projen post-upgrade",
26
25
  "pre-compile": "npx projen pre-compile",
27
26
  "prepare": "npx projen prepare",
@@ -83,7 +82,7 @@
83
82
  "publishConfig": {
84
83
  "access": "public"
85
84
  },
86
- "version": "0.1.5",
85
+ "version": "0.1.7",
87
86
  "bugs": {
88
87
  "url": "https://github.com/buildinginthecloud/cdk-cost-analyzer/issues"
89
88
  },
package/CHANGELOG.md DELETED
@@ -1,109 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ### Features
11
- - Add demo CDK project with ECS Fargate, bastion hosts, and serverless API
12
- - Add integration test for NAT Gateway pricing with real AWS API calls
13
- - Add discovery tool for exploring AWS Pricing API NAT Gateway responses
14
-
15
- ### Bug Fixes
16
- - Fix NAT Gateway calculator region prefix format for AWS Pricing API queries
17
- - Changed usageType format from `{PREFIX}NatGateway-Hours` to `{PREFIX}-NatGateway-Hours`
18
- - Changed usageType format from `{PREFIX}NatGateway-Bytes` to `{PREFIX}-NatGateway-Bytes`
19
- - Fixes pricing detection for eu-central-1 and other regions
20
- - NAT Gateway costs now show correct monthly estimates (~$37/month for eu-central-1 with 100GB data)
21
- - Fix locale formatting in CustomAssumptions property test
22
-
23
- ### Changed
24
- - Expand NAT Gateway region prefix mappings to include all AWS commercial and government regions
25
- - Add comprehensive debug logging to NAT Gateway calculator for pricing queries and calculations
26
-
27
- ### Documentation
28
- - Add GitHub CLI best practices steering document
29
- - Add NAT Gateway testing and debugging guide
30
- - Add NAT Gateway pricing example with debug logging
31
-
32
- ### Security
33
- - Improved command execution security in CDK synthesis by using `shell: false` to prevent command injection vulnerabilities
34
-
35
- ## [0.1.2] - 2025-01-20
36
-
37
- ### Features
38
- - Add debug logging for pricing API calls with `--debug` flag
39
- - Add Logger utility class for consistent debug output
40
- - Add region normalization logging
41
- - Add cache status logging (memory/persistent)
42
- - Add comprehensive debug logging documentation
43
-
44
- ### Changed
45
- - Upgrade dependencies to latest versions
46
-
47
- ## [0.1.1] - 2024-12-11
48
-
49
- ### Features
50
- - Enable npm release workflow
51
- - Add GitHub Actions workflow validation with act pre-commit hook
52
- - Migrate from Vitest to Jest and improve projen configuration
53
- - Add dedicated test workflow for GitHub Actions status checks
54
-
55
- ### Bug Fixes
56
- - Update package name to unscoped cdk-cost-analyzer
57
- - Increase property test timeouts for CDK synthesis from 15s to 30s
58
- - Enforce npm version consistency in CI workflow
59
- - Pin Node.js version to 20.18.1 in GitHub Actions workflows
60
- - Ensure npm ci is used consistently in GitHub Actions
61
- - Add example project dependencies installation to build workflow
62
-
63
- ### Changed
64
- - Clean up temporary CDK output files and artifacts
65
- - Remove temporary log files
66
- - Exclude CDK output directories from version control
67
-
68
- ### Security
69
- - Fix security vulnerability in CDK synthesis process
70
-
71
- ## [0.1.0] - 2024-12-10
72
-
73
- ### Added
74
- - Initial public release with core cost analysis functionality
75
- - CONTRIBUTING.md with contribution guidelines
76
- - SECURITY.md with security policy and vulnerability reporting
77
- - GitHub issue templates for bug reports and feature requests
78
- - Pull request template for standardized contributions
79
- - Enhanced package metadata (homepage, bug tracker URLs)
80
- - Support for multiple AWS resource types
81
- - CloudFormation template parsing and comparison
82
- - Cost estimation using AWS Pricing API
83
- - CLI interface for local and CI/CD usage
84
- - GitLab integration for merge request comments
85
- - Configuration file support
86
- - Threshold enforcement
87
- - Multi-stack CDK application support
88
- - Automatic CDK synthesis
89
- - Pricing data caching
90
- - Property-based testing for core components
91
-
92
- ### Supported Resources
93
- - AWS::Lambda::Function
94
- - AWS::S3::Bucket
95
- - AWS::DynamoDB::Table
96
- - AWS::RDS::DBInstance
97
- - AWS::EC2::Instance
98
- - AWS::ECS::Service
99
- - AWS::ApiGateway::RestApi
100
- - AWS::EC2::NatGateway
101
- - AWS::ElasticLoadBalancingV2::LoadBalancer (ALB/NLB)
102
- - AWS::CloudFront::Distribution
103
- - AWS::ElastiCache::CacheCluster
104
- - AWS::EC2::VPCEndpoint
105
-
106
- [Unreleased]: https://github.com/buildinginthecloud/cdk-cost-analyzer/compare/v0.1.2...HEAD
107
- [0.1.2]: https://github.com/buildinginthecloud/cdk-cost-analyzer/compare/v0.1.1...v0.1.2
108
- [0.1.1]: https://github.com/buildinginthecloud/cdk-cost-analyzer/compare/v0.1.0...v0.1.1
109
- [0.1.0]: https://github.com/buildinginthecloud/cdk-cost-analyzer/releases/tag/v0.1.0