cdk-cost-analyzer 0.1.39 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/.cdk-cost-analyzer-cache/metadata.json +8 -8
  2. package/.husky/pre-commit +6 -0
  3. package/dist/action/136.index.js +1 -1
  4. package/dist/action/762.index.js +1 -1
  5. package/dist/action/998.index.js +1 -1
  6. package/dist/action/config/types.d.ts +50 -0
  7. package/dist/action/index.js +3 -3
  8. package/dist/action/pricing/calculators/AuroraServerlessCalculator.d.ts +20 -0
  9. package/dist/action/pricing/calculators/EKSCalculator.d.ts +8 -0
  10. package/dist/action/pricing/calculators/KinesisCalculator.d.ts +27 -0
  11. package/dist/action/pricing/calculators/Route53Calculator.d.ts +18 -0
  12. package/dist/action/pricing/calculators/TransitGatewayCalculator.d.ts +16 -0
  13. package/dist/action/reporter/index.d.ts +1 -0
  14. package/dist/action/reporter/markdownUtils.d.ts +30 -0
  15. package/dist/config/types.d.ts +50 -0
  16. package/dist/config/types.js +1 -1
  17. package/dist/pricing/PricingService.js +11 -1
  18. package/dist/pricing/calculators/AuroraServerlessCalculator.d.ts +20 -0
  19. package/dist/pricing/calculators/AuroraServerlessCalculator.js +92 -0
  20. package/dist/pricing/calculators/EKSCalculator.d.ts +8 -0
  21. package/dist/pricing/calculators/EKSCalculator.js +46 -0
  22. package/dist/pricing/calculators/KinesisCalculator.d.ts +27 -0
  23. package/dist/pricing/calculators/KinesisCalculator.js +140 -0
  24. package/dist/pricing/calculators/Route53Calculator.d.ts +18 -0
  25. package/dist/pricing/calculators/Route53Calculator.js +99 -0
  26. package/dist/pricing/calculators/TransitGatewayCalculator.d.ts +16 -0
  27. package/dist/pricing/calculators/TransitGatewayCalculator.js +97 -0
  28. package/dist/releasetag.txt +1 -1
  29. package/dist/reporter/Reporter.js +94 -56
  30. package/dist/reporter/SingleTemplateReporter.js +49 -21
  31. package/dist/reporter/index.d.ts +1 -0
  32. package/dist/reporter/index.js +8 -2
  33. package/dist/reporter/markdownUtils.d.ts +30 -0
  34. package/dist/reporter/markdownUtils.js +93 -0
  35. package/package.json +2 -2
@@ -0,0 +1,20 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class AuroraServerlessCalculator implements ResourceCostCalculator {
4
+ private readonly customMinACU?;
5
+ private readonly customMaxACU?;
6
+ private readonly customStorageGB?;
7
+ private readonly HOURS_PER_MONTH;
8
+ private readonly DEFAULT_MIN_ACU;
9
+ private readonly DEFAULT_MAX_ACU;
10
+ private readonly DEFAULT_STORAGE_GB;
11
+ private readonly DEFAULT_MONTHLY_IO_REQUESTS;
12
+ private readonly FALLBACK_ACU_PRICE_V2;
13
+ private readonly FALLBACK_ACU_PRICE_V1;
14
+ private readonly STORAGE_PRICE_PER_GB;
15
+ private readonly IO_PRICE_PER_MILLION;
16
+ constructor(customMinACU?: number | undefined, customMaxACU?: number | undefined, customStorageGB?: number | undefined);
17
+ supports(resourceType: string): boolean;
18
+ canCalculate(resource: ResourceWithId): boolean;
19
+ calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
20
+ }
@@ -0,0 +1,8 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class EKSCalculator implements ResourceCostCalculator {
4
+ private readonly HOURS_PER_MONTH;
5
+ private readonly FALLBACK_CONTROL_PLANE_HOURLY;
6
+ supports(resourceType: string): boolean;
7
+ calculateCost(_resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
8
+ }
@@ -0,0 +1,27 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class KinesisCalculator implements ResourceCostCalculator {
4
+ private readonly customShardCount?;
5
+ private readonly customIngestionGB?;
6
+ private readonly customRetrievalGB?;
7
+ private readonly customFirehoseGB?;
8
+ private readonly customKPUs?;
9
+ private readonly HOURS_PER_MONTH;
10
+ private readonly DEFAULT_SHARD_COUNT;
11
+ private readonly FALLBACK_SHARD_PRICE;
12
+ private readonly DEFAULT_INGESTION_GB;
13
+ private readonly DEFAULT_RETRIEVAL_GB;
14
+ private readonly FALLBACK_INGESTION_PRICE;
15
+ private readonly FALLBACK_RETRIEVAL_PRICE;
16
+ private readonly DEFAULT_FIREHOSE_GB;
17
+ private readonly FALLBACK_FIREHOSE_PRICE;
18
+ private readonly DEFAULT_KPUS;
19
+ private readonly FALLBACK_KPU_PRICE;
20
+ constructor(customShardCount?: number | undefined, customIngestionGB?: number | undefined, customRetrievalGB?: number | undefined, customFirehoseGB?: number | undefined, customKPUs?: number | undefined);
21
+ supports(resourceType: string): boolean;
22
+ calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
23
+ private calculateDataStreamCost;
24
+ private calculateOnDemandStreamCost;
25
+ private calculateFirehoseCost;
26
+ private calculateAnalyticsCost;
27
+ }
@@ -0,0 +1,18 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class Route53Calculator implements ResourceCostCalculator {
4
+ private readonly customMonthlyQueries?;
5
+ private readonly HOSTED_ZONE_PRICE;
6
+ private readonly BASIC_HEALTH_CHECK_PRICE;
7
+ private readonly HTTPS_HEALTH_CHECK_PRICE;
8
+ private readonly STANDARD_QUERY_PRICE_PER_MILLION;
9
+ private readonly LATENCY_QUERY_PRICE_PER_MILLION;
10
+ private readonly GEO_QUERY_PRICE_PER_MILLION;
11
+ private readonly DEFAULT_MONTHLY_QUERIES;
12
+ constructor(customMonthlyQueries?: number | undefined);
13
+ supports(resourceType: string): boolean;
14
+ calculateCost(resource: ResourceWithId, _region: string, _pricingClient: PricingClient): Promise<MonthlyCost>;
15
+ private calculateHostedZoneCost;
16
+ private calculateHealthCheckCost;
17
+ private calculateRecordSetCost;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class TransitGatewayCalculator implements ResourceCostCalculator {
4
+ private readonly customAttachments?;
5
+ private readonly customMonthlyDataGB?;
6
+ private readonly HOURS_PER_MONTH;
7
+ private readonly DEFAULT_ATTACHMENTS;
8
+ private readonly DEFAULT_MONTHLY_DATA_GB;
9
+ private readonly FALLBACK_ATTACHMENT_PRICE;
10
+ private readonly FALLBACK_DATA_PRICE;
11
+ constructor(customAttachments?: number | undefined, customMonthlyDataGB?: number | undefined);
12
+ supports(resourceType: string): boolean;
13
+ calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
14
+ private calculateAttachmentCost;
15
+ private calculateTransitGatewayCost;
16
+ }
@@ -1,4 +1,5 @@
1
1
  export { Reporter } from './Reporter';
2
2
  export { SingleTemplateReporter } from './SingleTemplateReporter';
3
3
  export { GitHubActionReporter } from './GitHubActionReporter';
4
+ export { ServiceBreakdown, getTrendIndicator, getPercentageChange, extractServiceName, groupCostsByService, calculateTotalCosts, } from './markdownUtils';
4
5
  export * from './types';
@@ -0,0 +1,30 @@
1
+ import { CostDelta } from '../pricing/types';
2
+ /** Service breakdown entry for cost grouping */
3
+ export interface ServiceBreakdown {
4
+ service: string;
5
+ totalCost: number;
6
+ resourceCount: number;
7
+ }
8
+ /**
9
+ * Get trend indicator emoji based on cost change direction
10
+ */
11
+ export declare function getTrendIndicator(amount: number): string;
12
+ /**
13
+ * Calculate percentage change between old and new amounts
14
+ */
15
+ export declare function getPercentageChange(oldAmount: number, newAmount: number): string;
16
+ /**
17
+ * Extract AWS service name from resource type (e.g., AWS::EC2::Instance -> EC2)
18
+ */
19
+ export declare function extractServiceName(resourceType: string): string;
20
+ /**
21
+ * Group costs by AWS service (e.g., EC2, S3, Lambda)
22
+ */
23
+ export declare function groupCostsByService(costDelta: CostDelta): ServiceBreakdown[];
24
+ /**
25
+ * Calculate total costs before and after changes
26
+ */
27
+ export declare function calculateTotalCosts(costDelta: CostDelta): {
28
+ before: number;
29
+ after: number;
30
+ };
@@ -127,6 +127,56 @@ export interface UsageAssumptionsConfig {
127
127
  /** Number of API calls per month (default: 10,000) */
128
128
  monthlyApiCalls?: number;
129
129
  };
130
+ /**
131
+ * Aurora Serverless usage assumptions for cost estimation.
132
+ *
133
+ * @see https://aws.amazon.com/rds/aurora/pricing/
134
+ */
135
+ auroraServerless?: {
136
+ /** Minimum ACU capacity (default: 0.5) */
137
+ minACU?: number;
138
+ /** Maximum ACU capacity (default: 16) */
139
+ maxACU?: number;
140
+ /** Storage size in GB (default: 100) */
141
+ storageGB?: number;
142
+ };
143
+ /**
144
+ * Transit Gateway usage assumptions for cost estimation.
145
+ *
146
+ * @see https://aws.amazon.com/transit-gateway/pricing/
147
+ */
148
+ transitGateway?: {
149
+ /** Number of VPC/VPN attachments (default: 3) */
150
+ attachments?: number;
151
+ /** Monthly data processed in GB (default: 1000) */
152
+ monthlyDataGB?: number;
153
+ };
154
+ /**
155
+ * Route 53 usage assumptions for cost estimation.
156
+ *
157
+ * @see https://aws.amazon.com/route53/pricing/
158
+ */
159
+ route53?: {
160
+ /** Monthly DNS queries (default: 1,000,000) */
161
+ monthlyQueries?: number;
162
+ };
163
+ /**
164
+ * Kinesis usage assumptions for cost estimation.
165
+ *
166
+ * @see https://aws.amazon.com/kinesis/pricing/
167
+ */
168
+ kinesis?: {
169
+ /** Number of shards for provisioned streams (default: 2) */
170
+ shardCount?: number;
171
+ /** Monthly data ingestion in GB for on-demand streams (default: 1000) */
172
+ ingestionGB?: number;
173
+ /** Monthly data retrieval in GB for on-demand streams (default: 2000) */
174
+ retrievalGB?: number;
175
+ /** Monthly data ingestion in GB for Firehose (default: 1000) */
176
+ firehoseGB?: number;
177
+ /** Number of Kinesis Processing Units for Analytics (default: 2) */
178
+ kpus?: number;
179
+ };
130
180
  }
131
181
  export interface SynthesisConfig {
132
182
  appPath?: string;
@@ -12,4 +12,4 @@ class ConfigurationError extends Error {
12
12
  }
13
13
  }
14
14
  exports.ConfigurationError = ConfigurationError;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRKQSxNQUFhLGtCQUFtQixTQUFRLEtBQUs7SUFHbEM7SUFDQTtJQUhULFlBQ0UsT0FBZSxFQUNSLFVBQWtCLEVBQ2xCLGdCQUEwQjtRQUVqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIUixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBVTtRQUdqQyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQVRELGdEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDb3N0QW5hbHl6ZXJDb25maWcge1xuICB0aHJlc2hvbGRzPzogVGhyZXNob2xkQ29uZmlnO1xuICB1c2FnZUFzc3VtcHRpb25zPzogVXNhZ2VBc3N1bXB0aW9uc0NvbmZpZztcbiAgc3ludGhlc2lzPzogU3ludGhlc2lzQ29uZmlnO1xuICBleGNsdXNpb25zPzogRXhjbHVzaW9uc0NvbmZpZztcbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHJlc2hvbGRDb25maWcge1xuICBkZWZhdWx0PzogVGhyZXNob2xkTGV2ZWxzO1xuICBlbnZpcm9ubWVudHM/OiBSZWNvcmQ8c3RyaW5nLCBUaHJlc2hvbGRMZXZlbHM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRocmVzaG9sZExldmVscyB7XG4gIHdhcm5pbmc/OiBudW1iZXI7XG4gIGVycm9yPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlQXNzdW1wdGlvbnNDb25maWcge1xuICBzMz86IHtcbiAgICBzdG9yYWdlR0I/OiBudW1iZXI7XG4gICAgZ2V0UmVxdWVzdHM/OiBudW1iZXI7XG4gICAgcHV0UmVxdWVzdHM/OiBudW1iZXI7XG4gIH07XG4gIGxhbWJkYT86IHtcbiAgICBpbnZvY2F0aW9uc1Blck1vbnRoPzogbnVtYmVyO1xuICAgIGF2ZXJhZ2VEdXJhdGlvbk1zPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogRHluYW1vREIgdXNhZ2UgYXNzdW1wdGlvbnMgZm9yIG9uLWRlbWFuZCAocGF5LXBlci1yZXF1ZXN0KSBiaWxsaW5nIG1vZGUuXG4gICAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBlc3RpbWF0ZSBtb250aGx5IGNvc3RzIGZvciBEeW5hbW9EQiB0YWJsZXNcbiAgICogY29uZmlndXJlZCB3aXRoIEJpbGxpbmdNb2RlOiBQQVlfUEVSX1JFUVVFU1QuXG4gICAqXG4gICAqIEZvciBwcm92aXNpb25lZCBiaWxsaW5nIG1vZGUsIGNvc3RzIGFyZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZVxuICAgKiBSZWFkQ2FwYWNpdHlVbml0cyBhbmQgV3JpdGVDYXBhY2l0eVVuaXRzIHNwZWNpZmllZCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9keW5hbW9kYi9wcmljaW5nL1xuICAgKi9cbiAgZHluYW1vZGI/OiB7XG4gICAgLyoqIE51bWJlciBvZiByZWFkIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMTAsMDAwLDAwMCkgKi9cbiAgICByZWFkUmVxdWVzdHNQZXJNb250aD86IG51bWJlcjtcbiAgICAvKiogTnVtYmVyIG9mIHdyaXRlIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMSwwMDAsMDAwKSAqL1xuICAgIHdyaXRlUmVxdWVzdHNQZXJNb250aD86IG51bWJlcjtcbiAgfTtcbiAgbmF0R2F0ZXdheT86IHtcbiAgICBkYXRhUHJvY2Vzc2VkR0I/OiBudW1iZXI7XG4gIH07XG4gIGFsYj86IHtcbiAgICBuZXdDb25uZWN0aW9uc1BlclNlY29uZD86IG51bWJlcjtcbiAgICBhY3RpdmVDb25uZWN0aW9uc1Blck1pbnV0ZT86IG51bWJlcjtcbiAgICBwcm9jZXNzZWRCeXRlc0dCPzogbnVtYmVyO1xuICB9O1xuICBubGI/OiB7XG4gICAgbmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQ/OiBudW1iZXI7XG4gICAgYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGU/OiBudW1iZXI7XG4gICAgcHJvY2Vzc2VkQnl0ZXNHQj86IG51bWJlcjtcbiAgfTtcbiAgY2xvdWRmcm9udD86IHtcbiAgICBkYXRhVHJhbnNmZXJHQj86IG51bWJlcjtcbiAgICByZXF1ZXN0cz86IG51bWJlcjtcbiAgfTtcbiAgYXBpR2F0ZXdheT86IHtcbiAgICByZXF1ZXN0c1Blck1vbnRoPzogbnVtYmVyO1xuICB9O1xuICB2cGNFbmRwb2ludD86IHtcbiAgICBkYXRhUHJvY2Vzc2VkR0I/OiBudW1iZXI7XG4gIH07XG4gIC8qKlxuICAgKiBFRlMgKEVsYXN0aWMgRmlsZSBTeXN0ZW0pIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBlc3RpbWF0ZSBtb250aGx5IGNvc3RzIGZvciBFRlMgZmlsZSBzeXN0ZW1zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vZWZzL3ByaWNpbmcvXG4gICAqL1xuICBlZnM/OiB7XG4gICAgLyoqIFRvdGFsIHN0b3JhZ2Ugc2l6ZSBpbiBHQiAoZGVmYXVsdDogMTAwKSAqL1xuICAgIHN0b3JhZ2VTaXplR2I/OiBudW1iZXI7XG4gICAgLyoqIFBlcmNlbnRhZ2Ugb2Ygc3RvcmFnZSBpbiBJbmZyZXF1ZW50IEFjY2VzcyBjbGFzcyAoZGVmYXVsdDogMCwgcmFuZ2U6IDAtMTAwKSAqL1xuICAgIGluZnJlcXVlbnRBY2Nlc3NQZXJjZW50YWdlPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogU05TIChTaW1wbGUgTm90aWZpY2F0aW9uIFNlcnZpY2UpIHVzYWdlIGFzc3VtcHRpb25zLlxuICAgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZXN0aW1hdGUgbW9udGhseSBjb3N0cyBmb3IgU05TIHRvcGljcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL3Nucy9wcmljaW5nL1xuICAgKi9cbiAgc25zPzoge1xuICAgIC8qKiBOdW1iZXIgb2YgcHVibGlzaCByZXF1ZXN0cyBwZXIgbW9udGggKGRlZmF1bHQ6IDEsMDAwLDAwMCkgKi9cbiAgICBtb250aGx5UHVibGlzaGVzPzogbnVtYmVyO1xuICAgIC8qKiBOdW1iZXIgb2YgSFRUUC9TIGRlbGl2ZXJpZXMgcGVyIG1vbnRoIChkZWZhdWx0OiAxLDAwMCwwMDApICovXG4gICAgaHR0cERlbGl2ZXJpZXM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBlbWFpbCBkZWxpdmVyaWVzIHBlciBtb250aCAoZGVmYXVsdDogMCkgKi9cbiAgICBlbWFpbERlbGl2ZXJpZXM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBTTVMgZGVsaXZlcmllcyBwZXIgbW9udGggKGRlZmF1bHQ6IDApICovXG4gICAgc21zRGVsaXZlcmllcz86IG51bWJlcjtcbiAgICAvKiogTnVtYmVyIG9mIG1vYmlsZSBwdXNoIGRlbGl2ZXJpZXMgcGVyIG1vbnRoIChkZWZhdWx0OiAwKSAqL1xuICAgIG1vYmlsZVB1c2hEZWxpdmVyaWVzPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogU1FTIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqIEFwcGxpZXMgdG8gYm90aCBTdGFuZGFyZCBhbmQgRklGTyBxdWV1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9zcXMvcHJpY2luZy9cbiAgICovXG4gIHNxcz86IHtcbiAgICAvKiogTnVtYmVyIG9mIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMSwwMDAsMDAwKSAqL1xuICAgIG1vbnRobHlSZXF1ZXN0cz86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFN0ZXAgRnVuY3Rpb25zIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqXG4gICAqIFN0YW5kYXJkIHdvcmtmbG93cyBhcmUgY2hhcmdlZCBwZXIgc3RhdGUgdHJhbnNpdGlvbi5cbiAgICogRXhwcmVzcyB3b3JrZmxvd3MgYXJlIGNoYXJnZWQgcGVyIHJlcXVlc3QgYW5kIHBlciBHQi1zZWNvbmQgb2YgZHVyYXRpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9wcmljaW5nL1xuICAgKi9cbiAgc3RlcEZ1bmN0aW9ucz86IHtcbiAgICAvKiogTnVtYmVyIG9mIHdvcmtmbG93IGV4ZWN1dGlvbnMgcGVyIG1vbnRoIChkZWZhdWx0OiAxMCwwMDApICovXG4gICAgbW9udGhseUV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBzdGF0ZSB0cmFuc2l0aW9ucyBwZXIgZXhlY3V0aW9uIChkZWZhdWx0OiAxMCwgZm9yIFN0YW5kYXJkIHdvcmtmbG93cykgKi9cbiAgICBzdGF0ZVRyYW5zaXRpb25zUGVyRXhlY3V0aW9uPzogbnVtYmVyO1xuICAgIC8qKiBBdmVyYWdlIGV4ZWN1dGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDEwMDAsIGZvciBFeHByZXNzIHdvcmtmbG93cykgKi9cbiAgICBhdmVyYWdlRHVyYXRpb25Ncz86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFNlY3JldHMgTWFuYWdlciB1c2FnZSBhc3N1bXB0aW9ucyBmb3IgY29zdCBlc3RpbWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vc2VjcmV0cy1tYW5hZ2VyL3ByaWNpbmcvXG4gICAqL1xuICBzZWNyZXRzTWFuYWdlcj86IHtcbiAgICAvKiogTnVtYmVyIG9mIEFQSSBjYWxscyBwZXIgbW9udGggKGRlZmF1bHQ6IDEwLDAwMCkgKi9cbiAgICBtb250aGx5QXBpQ2FsbHM/OiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhlc2lzQ29uZmlnIHtcbiAgYXBwUGF0aD86IHN0cmluZztcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgY3VzdG9tQ29tbWFuZD86IHN0cmluZztcbiAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVzaW9uc0NvbmZpZyB7XG4gIHJlc291cmNlVHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUNvbmZpZyB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICBkdXJhdGlvbkhvdXJzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGNvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICBwdWJsaWMgdmFsaWRhdGlvbkVycm9yczogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdDb25maWd1cmF0aW9uRXJyb3InO1xuICB9XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThNQSxNQUFhLGtCQUFtQixTQUFRLEtBQUs7SUFHbEM7SUFDQTtJQUhULFlBQ0UsT0FBZSxFQUNSLFVBQWtCLEVBQ2xCLGdCQUEwQjtRQUVqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIUixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBVTtRQUdqQyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQVRELGdEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDb3N0QW5hbHl6ZXJDb25maWcge1xuICB0aHJlc2hvbGRzPzogVGhyZXNob2xkQ29uZmlnO1xuICB1c2FnZUFzc3VtcHRpb25zPzogVXNhZ2VBc3N1bXB0aW9uc0NvbmZpZztcbiAgc3ludGhlc2lzPzogU3ludGhlc2lzQ29uZmlnO1xuICBleGNsdXNpb25zPzogRXhjbHVzaW9uc0NvbmZpZztcbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHJlc2hvbGRDb25maWcge1xuICBkZWZhdWx0PzogVGhyZXNob2xkTGV2ZWxzO1xuICBlbnZpcm9ubWVudHM/OiBSZWNvcmQ8c3RyaW5nLCBUaHJlc2hvbGRMZXZlbHM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRocmVzaG9sZExldmVscyB7XG4gIHdhcm5pbmc/OiBudW1iZXI7XG4gIGVycm9yPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlQXNzdW1wdGlvbnNDb25maWcge1xuICBzMz86IHtcbiAgICBzdG9yYWdlR0I/OiBudW1iZXI7XG4gICAgZ2V0UmVxdWVzdHM/OiBudW1iZXI7XG4gICAgcHV0UmVxdWVzdHM/OiBudW1iZXI7XG4gIH07XG4gIGxhbWJkYT86IHtcbiAgICBpbnZvY2F0aW9uc1Blck1vbnRoPzogbnVtYmVyO1xuICAgIGF2ZXJhZ2VEdXJhdGlvbk1zPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogRHluYW1vREIgdXNhZ2UgYXNzdW1wdGlvbnMgZm9yIG9uLWRlbWFuZCAocGF5LXBlci1yZXF1ZXN0KSBiaWxsaW5nIG1vZGUuXG4gICAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBlc3RpbWF0ZSBtb250aGx5IGNvc3RzIGZvciBEeW5hbW9EQiB0YWJsZXNcbiAgICogY29uZmlndXJlZCB3aXRoIEJpbGxpbmdNb2RlOiBQQVlfUEVSX1JFUVVFU1QuXG4gICAqXG4gICAqIEZvciBwcm92aXNpb25lZCBiaWxsaW5nIG1vZGUsIGNvc3RzIGFyZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZVxuICAgKiBSZWFkQ2FwYWNpdHlVbml0cyBhbmQgV3JpdGVDYXBhY2l0eVVuaXRzIHNwZWNpZmllZCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9keW5hbW9kYi9wcmljaW5nL1xuICAgKi9cbiAgZHluYW1vZGI/OiB7XG4gICAgLyoqIE51bWJlciBvZiByZWFkIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMTAsMDAwLDAwMCkgKi9cbiAgICByZWFkUmVxdWVzdHNQZXJNb250aD86IG51bWJlcjtcbiAgICAvKiogTnVtYmVyIG9mIHdyaXRlIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMSwwMDAsMDAwKSAqL1xuICAgIHdyaXRlUmVxdWVzdHNQZXJNb250aD86IG51bWJlcjtcbiAgfTtcbiAgbmF0R2F0ZXdheT86IHtcbiAgICBkYXRhUHJvY2Vzc2VkR0I/OiBudW1iZXI7XG4gIH07XG4gIGFsYj86IHtcbiAgICBuZXdDb25uZWN0aW9uc1BlclNlY29uZD86IG51bWJlcjtcbiAgICBhY3RpdmVDb25uZWN0aW9uc1Blck1pbnV0ZT86IG51bWJlcjtcbiAgICBwcm9jZXNzZWRCeXRlc0dCPzogbnVtYmVyO1xuICB9O1xuICBubGI/OiB7XG4gICAgbmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQ/OiBudW1iZXI7XG4gICAgYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGU/OiBudW1iZXI7XG4gICAgcHJvY2Vzc2VkQnl0ZXNHQj86IG51bWJlcjtcbiAgfTtcbiAgY2xvdWRmcm9udD86IHtcbiAgICBkYXRhVHJhbnNmZXJHQj86IG51bWJlcjtcbiAgICByZXF1ZXN0cz86IG51bWJlcjtcbiAgfTtcbiAgYXBpR2F0ZXdheT86IHtcbiAgICByZXF1ZXN0c1Blck1vbnRoPzogbnVtYmVyO1xuICB9O1xuICB2cGNFbmRwb2ludD86IHtcbiAgICBkYXRhUHJvY2Vzc2VkR0I/OiBudW1iZXI7XG4gIH07XG4gIC8qKlxuICAgKiBFRlMgKEVsYXN0aWMgRmlsZSBTeXN0ZW0pIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBlc3RpbWF0ZSBtb250aGx5IGNvc3RzIGZvciBFRlMgZmlsZSBzeXN0ZW1zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vZWZzL3ByaWNpbmcvXG4gICAqL1xuICBlZnM/OiB7XG4gICAgLyoqIFRvdGFsIHN0b3JhZ2Ugc2l6ZSBpbiBHQiAoZGVmYXVsdDogMTAwKSAqL1xuICAgIHN0b3JhZ2VTaXplR2I/OiBudW1iZXI7XG4gICAgLyoqIFBlcmNlbnRhZ2Ugb2Ygc3RvcmFnZSBpbiBJbmZyZXF1ZW50IEFjY2VzcyBjbGFzcyAoZGVmYXVsdDogMCwgcmFuZ2U6IDAtMTAwKSAqL1xuICAgIGluZnJlcXVlbnRBY2Nlc3NQZXJjZW50YWdlPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogU05TIChTaW1wbGUgTm90aWZpY2F0aW9uIFNlcnZpY2UpIHVzYWdlIGFzc3VtcHRpb25zLlxuICAgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZXN0aW1hdGUgbW9udGhseSBjb3N0cyBmb3IgU05TIHRvcGljcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL3Nucy9wcmljaW5nL1xuICAgKi9cbiAgc25zPzoge1xuICAgIC8qKiBOdW1iZXIgb2YgcHVibGlzaCByZXF1ZXN0cyBwZXIgbW9udGggKGRlZmF1bHQ6IDEsMDAwLDAwMCkgKi9cbiAgICBtb250aGx5UHVibGlzaGVzPzogbnVtYmVyO1xuICAgIC8qKiBOdW1iZXIgb2YgSFRUUC9TIGRlbGl2ZXJpZXMgcGVyIG1vbnRoIChkZWZhdWx0OiAxLDAwMCwwMDApICovXG4gICAgaHR0cERlbGl2ZXJpZXM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBlbWFpbCBkZWxpdmVyaWVzIHBlciBtb250aCAoZGVmYXVsdDogMCkgKi9cbiAgICBlbWFpbERlbGl2ZXJpZXM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBTTVMgZGVsaXZlcmllcyBwZXIgbW9udGggKGRlZmF1bHQ6IDApICovXG4gICAgc21zRGVsaXZlcmllcz86IG51bWJlcjtcbiAgICAvKiogTnVtYmVyIG9mIG1vYmlsZSBwdXNoIGRlbGl2ZXJpZXMgcGVyIG1vbnRoIChkZWZhdWx0OiAwKSAqL1xuICAgIG1vYmlsZVB1c2hEZWxpdmVyaWVzPzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogU1FTIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqIEFwcGxpZXMgdG8gYm90aCBTdGFuZGFyZCBhbmQgRklGTyBxdWV1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9zcXMvcHJpY2luZy9cbiAgICovXG4gIHNxcz86IHtcbiAgICAvKiogTnVtYmVyIG9mIHJlcXVlc3RzIHBlciBtb250aCAoZGVmYXVsdDogMSwwMDAsMDAwKSAqL1xuICAgIG1vbnRobHlSZXF1ZXN0cz86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFN0ZXAgRnVuY3Rpb25zIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqXG4gICAqIFN0YW5kYXJkIHdvcmtmbG93cyBhcmUgY2hhcmdlZCBwZXIgc3RhdGUgdHJhbnNpdGlvbi5cbiAgICogRXhwcmVzcyB3b3JrZmxvd3MgYXJlIGNoYXJnZWQgcGVyIHJlcXVlc3QgYW5kIHBlciBHQi1zZWNvbmQgb2YgZHVyYXRpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9wcmljaW5nL1xuICAgKi9cbiAgc3RlcEZ1bmN0aW9ucz86IHtcbiAgICAvKiogTnVtYmVyIG9mIHdvcmtmbG93IGV4ZWN1dGlvbnMgcGVyIG1vbnRoIChkZWZhdWx0OiAxMCwwMDApICovXG4gICAgbW9udGhseUV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiBzdGF0ZSB0cmFuc2l0aW9ucyBwZXIgZXhlY3V0aW9uIChkZWZhdWx0OiAxMCwgZm9yIFN0YW5kYXJkIHdvcmtmbG93cykgKi9cbiAgICBzdGF0ZVRyYW5zaXRpb25zUGVyRXhlY3V0aW9uPzogbnVtYmVyO1xuICAgIC8qKiBBdmVyYWdlIGV4ZWN1dGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDEwMDAsIGZvciBFeHByZXNzIHdvcmtmbG93cykgKi9cbiAgICBhdmVyYWdlRHVyYXRpb25Ncz86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFNlY3JldHMgTWFuYWdlciB1c2FnZSBhc3N1bXB0aW9ucyBmb3IgY29zdCBlc3RpbWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vc2VjcmV0cy1tYW5hZ2VyL3ByaWNpbmcvXG4gICAqL1xuICBzZWNyZXRzTWFuYWdlcj86IHtcbiAgICAvKiogTnVtYmVyIG9mIEFQSSBjYWxscyBwZXIgbW9udGggKGRlZmF1bHQ6IDEwLDAwMCkgKi9cbiAgICBtb250aGx5QXBpQ2FsbHM/OiBudW1iZXI7XG4gIH07XG4gIC8qKlxuICAgKiBBdXJvcmEgU2VydmVybGVzcyB1c2FnZSBhc3N1bXB0aW9ucyBmb3IgY29zdCBlc3RpbWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcmRzL2F1cm9yYS9wcmljaW5nL1xuICAgKi9cbiAgYXVyb3JhU2VydmVybGVzcz86IHtcbiAgICAvKiogTWluaW11bSBBQ1UgY2FwYWNpdHkgKGRlZmF1bHQ6IDAuNSkgKi9cbiAgICBtaW5BQ1U/OiBudW1iZXI7XG4gICAgLyoqIE1heGltdW0gQUNVIGNhcGFjaXR5IChkZWZhdWx0OiAxNikgKi9cbiAgICBtYXhBQ1U/OiBudW1iZXI7XG4gICAgLyoqIFN0b3JhZ2Ugc2l6ZSBpbiBHQiAoZGVmYXVsdDogMTAwKSAqL1xuICAgIHN0b3JhZ2VHQj86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFRyYW5zaXQgR2F0ZXdheSB1c2FnZSBhc3N1bXB0aW9ucyBmb3IgY29zdCBlc3RpbWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vdHJhbnNpdC1nYXRld2F5L3ByaWNpbmcvXG4gICAqL1xuICB0cmFuc2l0R2F0ZXdheT86IHtcbiAgICAvKiogTnVtYmVyIG9mIFZQQy9WUE4gYXR0YWNobWVudHMgKGRlZmF1bHQ6IDMpICovXG4gICAgYXR0YWNobWVudHM/OiBudW1iZXI7XG4gICAgLyoqIE1vbnRobHkgZGF0YSBwcm9jZXNzZWQgaW4gR0IgKGRlZmF1bHQ6IDEwMDApICovXG4gICAgbW9udGhseURhdGFHQj86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFJvdXRlIDUzIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9yb3V0ZTUzL3ByaWNpbmcvXG4gICAqL1xuICByb3V0ZTUzPzoge1xuICAgIC8qKiBNb250aGx5IEROUyBxdWVyaWVzIChkZWZhdWx0OiAxLDAwMCwwMDApICovXG4gICAgbW9udGhseVF1ZXJpZXM/OiBudW1iZXI7XG4gIH07XG4gIC8qKlxuICAgKiBLaW5lc2lzIHVzYWdlIGFzc3VtcHRpb25zIGZvciBjb3N0IGVzdGltYXRpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9raW5lc2lzL3ByaWNpbmcvXG4gICAqL1xuICBraW5lc2lzPzoge1xuICAgIC8qKiBOdW1iZXIgb2Ygc2hhcmRzIGZvciBwcm92aXNpb25lZCBzdHJlYW1zIChkZWZhdWx0OiAyKSAqL1xuICAgIHNoYXJkQ291bnQ/OiBudW1iZXI7XG4gICAgLyoqIE1vbnRobHkgZGF0YSBpbmdlc3Rpb24gaW4gR0IgZm9yIG9uLWRlbWFuZCBzdHJlYW1zIChkZWZhdWx0OiAxMDAwKSAqL1xuICAgIGluZ2VzdGlvbkdCPzogbnVtYmVyO1xuICAgIC8qKiBNb250aGx5IGRhdGEgcmV0cmlldmFsIGluIEdCIGZvciBvbi1kZW1hbmQgc3RyZWFtcyAoZGVmYXVsdDogMjAwMCkgKi9cbiAgICByZXRyaWV2YWxHQj86IG51bWJlcjtcbiAgICAvKiogTW9udGhseSBkYXRhIGluZ2VzdGlvbiBpbiBHQiBmb3IgRmlyZWhvc2UgKGRlZmF1bHQ6IDEwMDApICovXG4gICAgZmlyZWhvc2VHQj86IG51bWJlcjtcbiAgICAvKiogTnVtYmVyIG9mIEtpbmVzaXMgUHJvY2Vzc2luZyBVbml0cyBmb3IgQW5hbHl0aWNzIChkZWZhdWx0OiAyKSAqL1xuICAgIGtwdXM/OiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhlc2lzQ29uZmlnIHtcbiAgYXBwUGF0aD86IHN0cmluZztcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgY3VzdG9tQ29tbWFuZD86IHN0cmluZztcbiAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVzaW9uc0NvbmZpZyB7XG4gIHJlc291cmNlVHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUNvbmZpZyB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICBkdXJhdGlvbkhvdXJzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGNvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICBwdWJsaWMgdmFsaWRhdGlvbkVycm9yczogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdDb25maWd1cmF0aW9uRXJyb3InO1xuICB9XG59XG4iXX0=
@@ -22,6 +22,11 @@ const SNSCalculator_1 = require("./calculators/SNSCalculator");
22
22
  const SQSCalculator_1 = require("./calculators/SQSCalculator");
23
23
  const StepFunctionsCalculator_1 = require("./calculators/StepFunctionsCalculator");
24
24
  const VPCEndpointCalculator_1 = require("./calculators/VPCEndpointCalculator");
25
+ const EKSCalculator_1 = require("./calculators/EKSCalculator");
26
+ const AuroraServerlessCalculator_1 = require("./calculators/AuroraServerlessCalculator");
27
+ const TransitGatewayCalculator_1 = require("./calculators/TransitGatewayCalculator");
28
+ const Route53Calculator_1 = require("./calculators/Route53Calculator");
29
+ const KinesisCalculator_1 = require("./calculators/KinesisCalculator");
25
30
  const PricingClient_1 = require("./PricingClient");
26
31
  class PricingService {
27
32
  calculators;
@@ -65,6 +70,11 @@ class PricingService {
65
70
  new SQSCalculator_1.SQSCalculator(config),
66
71
  new StepFunctionsCalculator_1.StepFunctionsCalculator(usageAssumptions?.stepFunctions?.monthlyExecutions, usageAssumptions?.stepFunctions?.stateTransitionsPerExecution, usageAssumptions?.stepFunctions?.averageDurationMs),
67
72
  new SecretsManagerCalculator_1.SecretsManagerCalculator(usageAssumptions?.secretsManager?.monthlyApiCalls),
73
+ new EKSCalculator_1.EKSCalculator(),
74
+ new AuroraServerlessCalculator_1.AuroraServerlessCalculator(usageAssumptions?.auroraServerless?.minACU, usageAssumptions?.auroraServerless?.maxACU, usageAssumptions?.auroraServerless?.storageGB),
75
+ new TransitGatewayCalculator_1.TransitGatewayCalculator(usageAssumptions?.transitGateway?.attachments, usageAssumptions?.transitGateway?.monthlyDataGB),
76
+ new Route53Calculator_1.Route53Calculator(usageAssumptions?.route53?.monthlyQueries),
77
+ new KinesisCalculator_1.KinesisCalculator(usageAssumptions?.kinesis?.shardCount, usageAssumptions?.kinesis?.ingestionGB, usageAssumptions?.kinesis?.retrievalGB, usageAssumptions?.kinesis?.firehoseGB, usageAssumptions?.kinesis?.kpus),
68
78
  ];
69
79
  }
70
80
  async getResourceCost(resource, region, templateResources) {
@@ -178,4 +188,4 @@ class PricingService {
178
188
  }
179
189
  }
180
190
  exports.PricingService = PricingService;
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpY2luZ1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy9QcmljaW5nU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBOEM7QUFDOUMsK0RBQTREO0FBQzVELDZFQUEwRTtBQUMxRSx5RkFBc0Y7QUFDdEYsNkVBQTBFO0FBQzFFLHlFQUFzRTtBQUN0RSwrREFBNEQ7QUFDNUQsK0RBQTREO0FBQzVELCtEQUE0RDtBQUM1RCwrRUFBNEU7QUFDNUUscUVBQWtFO0FBQ2xFLHFGQUFrRjtBQUNsRiw2RUFBMEU7QUFDMUUsK0RBQTREO0FBQzVELCtEQUE0RDtBQUM1RCw2REFBMEQ7QUFDMUQscUZBQWtGO0FBQ2xGLCtEQUE0RDtBQUM1RCwrREFBNEQ7QUFDNUQsbUZBQWdGO0FBQ2hGLCtFQUE0RTtBQUM1RSxtREFBZ0Q7QUFVaEQsTUFBYSxjQUFjO0lBQ2pCLFdBQVcsQ0FBMkI7SUFDdEMsYUFBYSxDQUFnQjtJQUM3QixxQkFBcUIsQ0FBYztJQUUzQyxZQUNFLFNBQWlCLFdBQVcsRUFDNUIsZ0JBQXlDLEVBQ3pDLHFCQUFnQyxFQUNoQyxXQUF5QixFQUN6QixhQUE2QjtRQUU3QixrREFBa0Q7UUFDbEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLGlEQUFpRDtZQUNqRCxJQUFJLFlBQXNDLENBQUM7WUFDM0MsSUFBSSxXQUFXLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxNQUFNLGFBQWEsR0FBRyxXQUFXLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDdkQsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQywwQkFBMEIsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsTUFB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TCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDbkIsV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZCxTQUFTO2FBQ1YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RixNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsRixNQUFNLFVBQVUsR0FBRyxjQUFjLEdBQUcsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7UUFFMUUsT0FBTztZQUNMLFVBQVU7WUFDVixRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVU7WUFDVixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFuTkQsd0NBbU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FjaGVNYW5hZ2VyIH0gZnJvbSAnLi9DYWNoZU1hbmFnZXInO1xuaW1wb3J0IHsgQUxCQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQUxCQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBBUElHYXRld2F5Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQVBJR2F0ZXdheUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0F1dG9TY2FsaW5nR3JvdXBDYWxjdWxhdG9yJztcbmltcG9ydCB7IENsb3VkRnJvbnRDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9DbG91ZEZyb250Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBEeW5hbW9EQkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0R5bmFtb0RCQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBFQzJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FQzJDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVDU0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0VDU0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgRUZTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRUZTQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBFbGFzdGlDYWNoZUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0VsYXN0aUNhY2hlQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBMYW1iZGFDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9MYW1iZGFDYWxjdWxhdG9yJztcbmltcG9ydCB7IExhdW5jaFRlbXBsYXRlQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yJztcbmltcG9ydCB7IE5hdEdhdGV3YXlDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9OYXRHYXRld2F5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBOTEJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9OTEJDYWxjdWxhdG9yJztcbmltcG9ydCB7IFJEU0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1JEU0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgUzNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9TM0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgU2VjcmV0c01hbmFnZXJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9TZWNyZXRzTWFuYWdlckNhbGN1bGF0b3InO1xuaW1wb3J0IHsgU05TQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvU05TQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTUVNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9TUVNDYWxjdWxhdG9yJztcbmltcG9ydCB7IFN0ZXBGdW5jdGlvbnNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9TdGVwRnVuY3Rpb25zQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBWUENFbmRwb2ludENhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1ZQQ0VuZHBvaW50Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBQcmljaW5nQ2xpZW50IH0gZnJvbSAnLi9QcmljaW5nQ2xpZW50JztcbmltcG9ydCB7XG4gIFByaWNpbmdTZXJ2aWNlIGFzIElQcmljaW5nU2VydmljZSxcbiAgTW9udGhseUNvc3QsXG4gIENvc3REZWx0YSxcbiAgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLCBDYWNoZUNvbmZpZywgQ29zdEFuYWx5emVyQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJztcbmltcG9ydCB7IFJlc291cmNlV2l0aElkLCBSZXNvdXJjZURpZmYgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFByaWNpbmdTZXJ2aWNlIGltcGxlbWVudHMgSVByaWNpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWxjdWxhdG9yczogUmVzb3VyY2VDb3N0Q2FsY3VsYXRvcltdO1xuICBwcml2YXRlIHByaWNpbmdDbGllbnQ6IFByaWNpbmdDbGllbnQ7XG4gIHByaXZhdGUgZXhjbHVkZWRSZXNvdXJjZVR5cGVzOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWdpb246IHN0cmluZyA9ICd1cy1lYXN0LTEnLFxuICAgIHVzYWdlQXNzdW1wdGlvbnM/OiBVc2FnZUFzc3VtcHRpb25zQ29uZmlnLFxuICAgIGV4Y2x1ZGVkUmVzb3VyY2VUeXBlcz86IHN0cmluZ1tdLFxuICAgIGNhY2hlQ29uZmlnPzogQ2FjaGVDb25maWcsXG4gICAgcHJpY2luZ0NsaWVudD86IFByaWNpbmdDbGllbnQsXG4gICkge1xuICAgIC8vIFVzZSBwcm92aWRlZCBwcmljaW5nIGNsaWVudCBvciBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKHByaWNpbmdDbGllbnQpIHtcbiAgICAgIHRoaXMucHJpY2luZ0NsaWVudCA9IHByaWNpbmdDbGllbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRpYWxpemUgY2FjaGUgbWFuYWdlciBpZiBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICAgIGxldCBjYWNoZU1hbmFnZXI6IENhY2hlTWFuYWdlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjYWNoZUNvbmZpZz8uZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY2FjaGVEdXJhdGlvbiA9IGNhY2hlQ29uZmlnPy5kdXJhdGlvbkhvdXJzID8/IDI0O1xuICAgICAgICBjYWNoZU1hbmFnZXIgPSBuZXcgQ2FjaGVNYW5hZ2VyKCcuY2RrLWNvc3QtYW5hbHl6ZXItY2FjaGUnLCBjYWNoZUR1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmljaW5nQ2xpZW50ID0gbmV3IFByaWNpbmdDbGllbnQocmVnaW9uLCBjYWNoZU1hbmFnZXIpO1xuICAgIH1cbiAgICB0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcyA9IG5ldyBTZXQoZXhjbHVkZWRSZXNvdXJjZVR5cGVzIHx8IFtdKTtcbiAgICBcbiAgICAvLyBCdWlsZCBjb25maWcgb2JqZWN0IGZvciBjYWxjdWxhdG9ycyB0aGF0IG5lZWQgaXRcbiAgICBjb25zdCBjb25maWc6IENvc3RBbmFseXplckNvbmZpZyB8IHVuZGVmaW5lZCA9IHVzYWdlQXNzdW1wdGlvbnMgPyB7IHVzYWdlQXNzdW1wdGlvbnMgfSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gW1xuICAgICAgbmV3IEVDMkNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBTM0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBMYW1iZGFDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5sYW1iZGE/Lmludm9jYXRpb25zUGVyTW9udGgsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmxhbWJkYT8uYXZlcmFnZUR1cmF0aW9uTXMsXG4gICAgICApLFxuICAgICAgbmV3IFJEU0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBEeW5hbW9EQkNhbGN1bGF0b3IoY29uZmlnKSxcbiAgICAgIG5ldyBFQ1NDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgQVBJR2F0ZXdheUNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBOYXRHYXRld2F5Q2FsY3VsYXRvcih1c2FnZUFzc3VtcHRpb25zPy5uYXRHYXRld2F5Py5kYXRhUHJvY2Vzc2VkR0IpLFxuICAgICAgbmV3IEFMQkNhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ubmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8uYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGUsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmFsYj8ucHJvY2Vzc2VkQnl0ZXNHQixcbiAgICAgICksXG4gICAgICBuZXcgTkxCQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5uZXdDb25uZWN0aW9uc1BlclNlY29uZCxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5hY3RpdmVDb25uZWN0aW9uc1Blck1pbnV0ZSxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubmxiPy5wcm9jZXNzZWRCeXRlc0dCLFxuICAgICAgKSxcbiAgICAgIG5ldyBWUENFbmRwb2ludENhbGN1bGF0b3IodXNhZ2VBc3N1bXB0aW9ucz8udnBjRW5kcG9pbnQ/LmRhdGFQcm9jZXNzZWRHQiksXG4gICAgICBuZXcgQ2xvdWRGcm9udENhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmNsb3VkZnJvbnQ/LmRhdGFUcmFuc2ZlckdCLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5jbG91ZGZyb250Py5yZXF1ZXN0cyxcbiAgICAgICksXG4gICAgICBuZXcgRWxhc3RpQ2FjaGVDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBMYXVuY2hUZW1wbGF0ZUNhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBFRlNDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5lZnM/LnN0b3JhZ2VTaXplR2IsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmVmcz8uaW5mcmVxdWVudEFjY2Vzc1BlcmNlbnRhZ2UsXG4gICAgICApLFxuICAgICAgbmV3IFNOU0NhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNucz8ubW9udGhseVB1Ymxpc2hlcyxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc25zPy5odHRwRGVsaXZlcmllcyxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc25zPy5lbWFpbERlbGl2ZXJpZXMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNucz8uc21zRGVsaXZlcmllcyxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc25zPy5tb2JpbGVQdXNoRGVsaXZlcmllcyxcbiAgICAgICksXG4gICAgICBuZXcgU1FTQ2FsY3VsYXRvcihjb25maWcpLFxuICAgICAgbmV3IFN0ZXBGdW5jdGlvbnNDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5zdGVwRnVuY3Rpb25zPy5tb250aGx5RXhlY3V0aW9ucyxcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc3RlcEZ1bmN0aW9ucz8uc3RhdGVUcmFuc2l0aW9uc1BlckV4ZWN1dGlvbixcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc3RlcEZ1bmN0aW9ucz8uYXZlcmFnZUR1cmF0aW9uTXMsXG4gICAgICApLFxuICAgICAgbmV3IFNlY3JldHNNYW5hZ2VyQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc2VjcmV0c01hbmFnZXI/Lm1vbnRobHlBcGlDYWxscyxcbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc291cmNlQ29zdChyZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsIHJlZ2lvbjogc3RyaW5nLCB0ZW1wbGF0ZVJlc291cmNlcz86IFJlc291cmNlV2l0aElkW10pOiBQcm9taXNlPE1vbnRobHlDb3N0PiB7XG4gICAgLy8gQ2hlY2sgaWYgcmVzb3VyY2UgdHlwZSBpcyBleGNsdWRlZFxuICAgIGlmICh0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMocmVzb3VyY2UudHlwZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAnaGlnaCcsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYFJlc291cmNlIHR5cGUgJHtyZXNvdXJjZS50eXBlfSBpcyBleGNsdWRlZCBmcm9tIGNvc3QgYW5hbHlzaXNgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmluZCBjYWxjdWxhdG9yIHVzaW5nIGNhbkNhbGN1bGF0ZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gc3VwcG9ydHNcbiAgICBjb25zdCBjYWxjdWxhdG9yID0gdGhpcy5jYWxjdWxhdG9ycy5maW5kKGNhbGMgPT4ge1xuICAgICAgaWYgKGNhbGMuY2FuQ2FsY3VsYXRlKSB7XG4gICAgICAgIHJldHVybiBjYWxjLmNhbkNhbGN1bGF0ZShyZXNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsYy5zdXBwb3J0cyhyZXNvdXJjZS50eXBlKTtcbiAgICB9KTtcblxuICAgIGlmICghY2FsY3VsYXRvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIGNvbmZpZGVuY2U6ICd1bmtub3duJyxcbiAgICAgICAgYXNzdW1wdGlvbnM6IFtgUmVzb3VyY2UgdHlwZSAke3Jlc291cmNlLnR5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxjdWxhdG9yLmNhbGN1bGF0ZUNvc3QocmVzb3VyY2UsIHJlZ2lvbiwgdGhpcy5wcmljaW5nQ2xpZW50LCB0ZW1wbGF0ZVJlc291cmNlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYEZhaWxlZCB0byBjYWxjdWxhdGUgY29zdDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvc3REZWx0YShkaWZmOiBSZXNvdXJjZURpZmYsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxDb3N0RGVsdGE+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IGV4Y2x1ZGVkIHJlc291cmNlcyBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgIGNvbnN0IGZpbHRlcmVkQWRkZWQgPSBkaWZmLmFkZGVkLmZpbHRlcihyID0+ICF0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMoci50eXBlKSk7XG4gICAgY29uc3QgZmlsdGVyZWRSZW1vdmVkID0gZGlmZi5yZW1vdmVkLmZpbHRlcihyID0+ICF0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMoci50eXBlKSk7XG4gICAgY29uc3QgZmlsdGVyZWRNb2RpZmllZCA9IGRpZmYubW9kaWZpZWQuZmlsdGVyKHIgPT4gIXRoaXMuZXhjbHVkZWRSZXNvdXJjZVR5cGVzLmhhcyhyLnR5cGUpKTtcblxuICAgIC8vIEJ1aWxkIHRlbXBsYXRlIHJlc291cmNlIGNvbnRleHQgZnJvbSBhbGwgcmVzb3VyY2VzIGluIHRoZSBkaWZmXG4gICAgY29uc3QgYWxsUmVzb3VyY2VzOiBSZXNvdXJjZVdpdGhJZFtdID0gW1xuICAgICAgLi4uZGlmZi5hZGRlZCxcbiAgICAgIC4uLmRpZmYucmVtb3ZlZCxcbiAgICAgIC4uLmRpZmYubW9kaWZpZWQubWFwKHIgPT4gKHtcbiAgICAgICAgbG9naWNhbElkOiByLmxvZ2ljYWxJZCxcbiAgICAgICAgdHlwZTogci50eXBlLFxuICAgICAgICBwcm9wZXJ0aWVzOiByLm5ld1Byb3BlcnRpZXMsXG4gICAgICB9KSksXG4gICAgXTtcblxuICAgIGNvbnN0IGFkZGVkQ29zdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkQWRkZWQubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBjb25zdCBtb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlLCByZWdpb24sIGFsbFJlc291cmNlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCByZW1vdmVkQ29zdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkUmVtb3ZlZC5tYXAoYXN5bmMgKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlDb3N0ID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZUNvc3QocmVzb3VyY2UsIHJlZ2lvbiwgYWxsUmVzb3VyY2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIG1vbnRobHlDb3N0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IG1vZGlmaWVkQ29zdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkTW9kaWZpZWQubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBjb25zdCBvbGRSZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQgPSB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiByZXNvdXJjZS5vbGRQcm9wZXJ0aWVzLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXdSZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQgPSB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiByZXNvdXJjZS5uZXdQcm9wZXJ0aWVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9sZE1vbnRobHlDb3N0ID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZUNvc3Qob2xkUmVzb3VyY2UsIHJlZ2lvbiwgYWxsUmVzb3VyY2VzKTtcbiAgICAgICAgY29uc3QgbmV3TW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChuZXdSZXNvdXJjZSwgcmVnaW9uLCBhbGxSZXNvdXJjZXMpO1xuICAgICAgICBjb25zdCBjb3N0RGVsdGEgPSBuZXdNb250aGx5Q29zdC5hbW91bnQgLSBvbGRNb250aGx5Q29zdC5hbW91bnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2dpY2FsSWQ6IHJlc291cmNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICB0eXBlOiByZXNvdXJjZS50eXBlLFxuICAgICAgICAgIG1vbnRobHlDb3N0OiBuZXdNb250aGx5Q29zdCxcbiAgICAgICAgICBvbGRNb250aGx5Q29zdCxcbiAgICAgICAgICBuZXdNb250aGx5Q29zdCxcbiAgICAgICAgICBjb3N0RGVsdGEsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxBZGRlZENvc3QgPSBhZGRlZENvc3RzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLm1vbnRobHlDb3N0LmFtb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxSZW1vdmVkQ29zdCA9IHJlbW92ZWRDb3N0cy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5tb250aGx5Q29zdC5hbW91bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsTW9kaWZpZWREZWx0YSA9IG1vZGlmaWVkQ29zdHMucmVkdWNlKChzdW0sIHIpID0+IHN1bSArIHIuY29zdERlbHRhLCAwKTtcblxuICAgIGNvbnN0IHRvdGFsRGVsdGEgPSB0b3RhbEFkZGVkQ29zdCAtIHRvdGFsUmVtb3ZlZENvc3QgKyB0b3RhbE1vZGlmaWVkRGVsdGE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxEZWx0YSxcbiAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgIGFkZGVkQ29zdHMsXG4gICAgICByZW1vdmVkQ29zdHMsXG4gICAgICBtb2RpZmllZENvc3RzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBjb25uZWN0aW9uc1xuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnByaWNpbmdDbGllbnQuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpY2luZ1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpY2luZy9QcmljaW5nU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBOEM7QUFDOUMsK0RBQTREO0FBQzVELDZFQUEwRTtBQUMxRSx5RkFBc0Y7QUFDdEYsNkVBQTBFO0FBQzFFLHlFQUFzRTtBQUN0RSwrREFBNEQ7QUFDNUQsK0RBQTREO0FBQzVELCtEQUE0RDtBQUM1RCwrRUFBNEU7QUFDNUUscUVBQWtFO0FBQ2xFLHFGQUFrRjtBQUNsRiw2RUFBMEU7QUFDMUUsK0RBQTREO0FBQzVELCtEQUE0RDtBQUM1RCw2REFBMEQ7QUFDMUQscUZBQWtGO0FBQ2xGLCtEQUE0RDtBQUM1RCwrREFBNEQ7QUFDNUQsbUZBQWdGO0FBQ2hGLCtFQUE0RTtBQUM1RSwrREFBNEQ7QUFDNUQseUZBQXNGO0FBQ3RGLHFGQUFrRjtBQUNsRix1RUFBb0U7QUFDcEUsdUVBQW9FO0FBQ3BFLG1EQUFnRDtBQVVoRCxNQUFhLGNBQWM7SUFDakIsV0FBVyxDQUEyQjtJQUN0QyxhQUFhLENBQWdCO0lBQzdCLHFCQUFxQixDQUFjO0lBRTNDLFlBQ0UsU0FBaUIsV0FBVyxFQUM1QixnQkFBeUMsRUFDekMscUJBQWdDLEVBQ2hDLFdBQXlCLEVBQ3pCLGFBQTZCO1FBRTdCLGtEQUFrRDtRQUNsRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELElBQUksWUFBc0MsQ0FBQztZQUMzQyxJQUFJLFdBQVcsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sYUFBYSxHQUFHLFdBQVcsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO2dCQUN2RCxZQUFZLEdBQUcsSUFBSSwyQkFBWSxDQUFDLDBCQUEwQixFQUFFLGFBQWEs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LENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxGLE1BQU0sVUFBVSxHQUFHLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztRQUUxRSxPQUFPO1lBQ0wsVUFBVTtZQUNWLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVTtZQUNWLFlBQVk7WUFDWixhQUFhO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQXZPRCx3Q0F1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYWNoZU1hbmFnZXIgfSBmcm9tICcuL0NhY2hlTWFuYWdlcic7XG5pbXBvcnQgeyBBTEJDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9BTEJDYWxjdWxhdG9yJztcbmltcG9ydCB7IEFQSUdhdGV3YXlDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9BUElHYXRld2F5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBBdXRvU2NhbGluZ0dyb3VwQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvQXV0b1NjYWxpbmdHcm91cENhbGN1bGF0b3InO1xuaW1wb3J0IHsgQ2xvdWRGcm9udENhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0Nsb3VkRnJvbnRDYWxjdWxhdG9yJztcbmltcG9ydCB7IER5bmFtb0RCQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRHluYW1vREJDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVDMkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0VDMkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgRUNTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRUNTQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBFRlNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9FRlNDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVsYXN0aUNhY2hlQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvRWxhc3RpQ2FjaGVDYWxjdWxhdG9yJztcbmltcG9ydCB7IExhbWJkYUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0xhbWJkYUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9MYXVuY2hUZW1wbGF0ZUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgTmF0R2F0ZXdheUNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05hdEdhdGV3YXlDYWxjdWxhdG9yJztcbmltcG9ydCB7IE5MQkNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL05MQkNhbGN1bGF0b3InO1xuaW1wb3J0IHsgUkRTQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvUkRTQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTM0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1MzQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTZWNyZXRzTWFuYWdlckNhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1NlY3JldHNNYW5hZ2VyQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTTlNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9TTlNDYWxjdWxhdG9yJztcbmltcG9ydCB7IFNRU0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1NRU0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgU3RlcEZ1bmN0aW9uc0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL1N0ZXBGdW5jdGlvbnNDYWxjdWxhdG9yJztcbmltcG9ydCB7IFZQQ0VuZHBvaW50Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvVlBDRW5kcG9pbnRDYWxjdWxhdG9yJztcbmltcG9ydCB7IEVLU0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0VLU0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgQXVyb3JhU2VydmVybGVzc0NhbGN1bGF0b3IgfSBmcm9tICcuL2NhbGN1bGF0b3JzL0F1cm9yYVNlcnZlcmxlc3NDYWxjdWxhdG9yJztcbmltcG9ydCB7IFRyYW5zaXRHYXRld2F5Q2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvVHJhbnNpdEdhdGV3YXlDYWxjdWxhdG9yJztcbmltcG9ydCB7IFJvdXRlNTNDYWxjdWxhdG9yIH0gZnJvbSAnLi9jYWxjdWxhdG9ycy9Sb3V0ZTUzQ2FsY3VsYXRvcic7XG5pbXBvcnQgeyBLaW5lc2lzQ2FsY3VsYXRvciB9IGZyb20gJy4vY2FsY3VsYXRvcnMvS2luZXNpc0NhbGN1bGF0b3InO1xuaW1wb3J0IHsgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4vUHJpY2luZ0NsaWVudCc7XG5pbXBvcnQge1xuICBQcmljaW5nU2VydmljZSBhcyBJUHJpY2luZ1NlcnZpY2UsXG4gIE1vbnRobHlDb3N0LFxuICBDb3N0RGVsdGEsXG4gIFJlc291cmNlQ29zdENhbGN1bGF0b3IsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVXNhZ2VBc3N1bXB0aW9uc0NvbmZpZywgQ2FjaGVDb25maWcsIENvc3RBbmFseXplckNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZVdpdGhJZCwgUmVzb3VyY2VEaWZmIH0gZnJvbSAnLi4vZGlmZi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBQcmljaW5nU2VydmljZSBpbXBsZW1lbnRzIElQcmljaW5nU2VydmljZSB7XG4gIHByaXZhdGUgY2FsY3VsYXRvcnM6IFJlc291cmNlQ29zdENhbGN1bGF0b3JbXTtcbiAgcHJpdmF0ZSBwcmljaW5nQ2xpZW50OiBQcmljaW5nQ2xpZW50O1xuICBwcml2YXRlIGV4Y2x1ZGVkUmVzb3VyY2VUeXBlczogU2V0PHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVnaW9uOiBzdHJpbmcgPSAndXMtZWFzdC0xJyxcbiAgICB1c2FnZUFzc3VtcHRpb25zPzogVXNhZ2VBc3N1bXB0aW9uc0NvbmZpZyxcbiAgICBleGNsdWRlZFJlc291cmNlVHlwZXM/OiBzdHJpbmdbXSxcbiAgICBjYWNoZUNvbmZpZz86IENhY2hlQ29uZmlnLFxuICAgIHByaWNpbmdDbGllbnQ/OiBQcmljaW5nQ2xpZW50LFxuICApIHtcbiAgICAvLyBVc2UgcHJvdmlkZWQgcHJpY2luZyBjbGllbnQgb3IgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmIChwcmljaW5nQ2xpZW50KSB7XG4gICAgICB0aGlzLnByaWNpbmdDbGllbnQgPSBwcmljaW5nQ2xpZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbml0aWFsaXplIGNhY2hlIG1hbmFnZXIgaWYgY2FjaGluZyBpcyBlbmFibGVkXG4gICAgICBsZXQgY2FjaGVNYW5hZ2VyOiBDYWNoZU1hbmFnZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoY2FjaGVDb25maWc/LmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlRHVyYXRpb24gPSBjYWNoZUNvbmZpZz8uZHVyYXRpb25Ib3VycyA/PyAyNDtcbiAgICAgICAgY2FjaGVNYW5hZ2VyID0gbmV3IENhY2hlTWFuYWdlcignLmNkay1jb3N0LWFuYWx5emVyLWNhY2hlJywgY2FjaGVEdXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJpY2luZ0NsaWVudCA9IG5ldyBQcmljaW5nQ2xpZW50KHJlZ2lvbiwgY2FjaGVNYW5hZ2VyKTtcbiAgICB9XG4gICAgdGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMgPSBuZXcgU2V0KGV4Y2x1ZGVkUmVzb3VyY2VUeXBlcyB8fCBbXSk7XG4gICAgXG4gICAgLy8gQnVpbGQgY29uZmlnIG9iamVjdCBmb3IgY2FsY3VsYXRvcnMgdGhhdCBuZWVkIGl0XG4gICAgY29uc3QgY29uZmlnOiBDb3N0QW5hbHl6ZXJDb25maWcgfCB1bmRlZmluZWQgPSB1c2FnZUFzc3VtcHRpb25zID8geyB1c2FnZUFzc3VtcHRpb25zIH0gOiB1bmRlZmluZWQ7XG4gICAgXG4gICAgdGhpcy5jYWxjdWxhdG9ycyA9IFtcbiAgICAgIG5ldyBFQzJDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgUzNDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgTGFtYmRhQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ubGFtYmRhPy5pbnZvY2F0aW9uc1Blck1vbnRoLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5sYW1iZGE/LmF2ZXJhZ2VEdXJhdGlvbk1zLFxuICAgICAgKSxcbiAgICAgIG5ldyBSRFNDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgRHluYW1vREJDYWxjdWxhdG9yKGNvbmZpZyksXG4gICAgICBuZXcgRUNTQ2FsY3VsYXRvcigpLFxuICAgICAgbmV3IEFQSUdhdGV3YXlDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgTmF0R2F0ZXdheUNhbGN1bGF0b3IodXNhZ2VBc3N1bXB0aW9ucz8ubmF0R2F0ZXdheT8uZGF0YVByb2Nlc3NlZEdCKSxcbiAgICAgIG5ldyBBTEJDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5hbGI/Lm5ld0Nvbm5lY3Rpb25zUGVyU2Vjb25kLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5hbGI/LmFjdGl2ZUNvbm5lY3Rpb25zUGVyTWludXRlLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5hbGI/LnByb2Nlc3NlZEJ5dGVzR0IsXG4gICAgICApLFxuICAgICAgbmV3IE5MQkNhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/Lm5sYj8ubmV3Q29ubmVjdGlvbnNQZXJTZWNvbmQsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/Lm5sYj8uYWN0aXZlQ29ubmVjdGlvbnNQZXJNaW51dGUsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/Lm5sYj8ucHJvY2Vzc2VkQnl0ZXNHQixcbiAgICAgICksXG4gICAgICBuZXcgVlBDRW5kcG9pbnRDYWxjdWxhdG9yKHVzYWdlQXNzdW1wdGlvbnM/LnZwY0VuZHBvaW50Py5kYXRhUHJvY2Vzc2VkR0IpLFxuICAgICAgbmV3IENsb3VkRnJvbnRDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5jbG91ZGZyb250Py5kYXRhVHJhbnNmZXJHQixcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uY2xvdWRmcm9udD8ucmVxdWVzdHMsXG4gICAgICApLFxuICAgICAgbmV3IEVsYXN0aUNhY2hlQ2FsY3VsYXRvcigpLFxuICAgICAgbmV3IEF1dG9TY2FsaW5nR3JvdXBDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgTGF1bmNoVGVtcGxhdGVDYWxjdWxhdG9yKCksXG4gICAgICBuZXcgRUZTQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uZWZzPy5zdG9yYWdlU2l6ZUdiLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5lZnM/LmluZnJlcXVlbnRBY2Nlc3NQZXJjZW50YWdlLFxuICAgICAgKSxcbiAgICAgIG5ldyBTTlNDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5zbnM/Lm1vbnRobHlQdWJsaXNoZXMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNucz8uaHR0cERlbGl2ZXJpZXMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNucz8uZW1haWxEZWxpdmVyaWVzLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5zbnM/LnNtc0RlbGl2ZXJpZXMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNucz8ubW9iaWxlUHVzaERlbGl2ZXJpZXMsXG4gICAgICApLFxuICAgICAgbmV3IFNRU0NhbGN1bGF0b3IoY29uZmlnKSxcbiAgICAgIG5ldyBTdGVwRnVuY3Rpb25zQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uc3RlcEZ1bmN0aW9ucz8ubW9udGhseUV4ZWN1dGlvbnMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnN0ZXBGdW5jdGlvbnM/LnN0YXRlVHJhbnNpdGlvbnNQZXJFeGVjdXRpb24sXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnN0ZXBGdW5jdGlvbnM/LmF2ZXJhZ2VEdXJhdGlvbk1zLFxuICAgICAgKSxcbiAgICAgIG5ldyBTZWNyZXRzTWFuYWdlckNhbGN1bGF0b3IoXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnNlY3JldHNNYW5hZ2VyPy5tb250aGx5QXBpQ2FsbHMsXG4gICAgICApLFxuICAgICAgbmV3IEVLU0NhbGN1bGF0b3IoKSxcbiAgICAgIG5ldyBBdXJvcmFTZXJ2ZXJsZXNzQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8uYXVyb3JhU2VydmVybGVzcz8ubWluQUNVLFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5hdXJvcmFTZXJ2ZXJsZXNzPy5tYXhBQ1UsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmF1cm9yYVNlcnZlcmxlc3M/LnN0b3JhZ2VHQixcbiAgICAgICksXG4gICAgICBuZXcgVHJhbnNpdEdhdGV3YXlDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy50cmFuc2l0R2F0ZXdheT8uYXR0YWNobWVudHMsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LnRyYW5zaXRHYXRld2F5Py5tb250aGx5RGF0YUdCLFxuICAgICAgKSxcbiAgICAgIG5ldyBSb3V0ZTUzQ2FsY3VsYXRvcihcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ucm91dGU1Mz8ubW9udGhseVF1ZXJpZXMsXG4gICAgICApLFxuICAgICAgbmV3IEtpbmVzaXNDYWxjdWxhdG9yKFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5raW5lc2lzPy5zaGFyZENvdW50LFxuICAgICAgICB1c2FnZUFzc3VtcHRpb25zPy5raW5lc2lzPy5pbmdlc3Rpb25HQixcbiAgICAgICAgdXNhZ2VBc3N1bXB0aW9ucz8ua2luZXNpcz8ucmV0cmlldmFsR0IsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmtpbmVzaXM/LmZpcmVob3NlR0IsXG4gICAgICAgIHVzYWdlQXNzdW1wdGlvbnM/LmtpbmVzaXM/LmtwdXMsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRSZXNvdXJjZUNvc3QocmVzb3VyY2U6IFJlc291cmNlV2l0aElkLCByZWdpb246IHN0cmluZywgdGVtcGxhdGVSZXNvdXJjZXM/OiBSZXNvdXJjZVdpdGhJZFtdKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIC8vIENoZWNrIGlmIHJlc291cmNlIHR5cGUgaXMgZXhjbHVkZWRcbiAgICBpZiAodGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMuaGFzKHJlc291cmNlLnR5cGUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ2hpZ2gnLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BSZXNvdXJjZSB0eXBlICR7cmVzb3VyY2UudHlwZX0gaXMgZXhjbHVkZWQgZnJvbSBjb3N0IGFuYWx5c2lzYF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgY2FsY3VsYXRvciB1c2luZyBjYW5DYWxjdWxhdGUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIHN1cHBvcnRzXG4gICAgY29uc3QgY2FsY3VsYXRvciA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZChjYWxjID0+IHtcbiAgICAgIGlmIChjYWxjLmNhbkNhbGN1bGF0ZSkge1xuICAgICAgICByZXR1cm4gY2FsYy5jYW5DYWxjdWxhdGUocmVzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGMuc3VwcG9ydHMocmVzb3VyY2UudHlwZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWNhbGN1bGF0b3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYFJlc291cmNlIHR5cGUgJHtyZXNvdXJjZS50eXBlfSBpcyBub3Qgc3VwcG9ydGVkYF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsY3VsYXRvci5jYWxjdWxhdGVDb3N0KHJlc291cmNlLCByZWdpb24sIHRoaXMucHJpY2luZ0NsaWVudCwgdGVtcGxhdGVSZXNvdXJjZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BGYWlsZWQgdG8gY2FsY3VsYXRlIGNvc3Q6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb3N0RGVsdGEoZGlmZjogUmVzb3VyY2VEaWZmLCByZWdpb246IHN0cmluZyk6IFByb21pc2U8Q29zdERlbHRhPiB7XG4gICAgLy8gRmlsdGVyIG91dCBleGNsdWRlZCByZXNvdXJjZXMgYmVmb3JlIHByb2Nlc3NpbmdcbiAgICBjb25zdCBmaWx0ZXJlZEFkZGVkID0gZGlmZi5hZGRlZC5maWx0ZXIociA9PiAhdGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMuaGFzKHIudHlwZSkpO1xuICAgIGNvbnN0IGZpbHRlcmVkUmVtb3ZlZCA9IGRpZmYucmVtb3ZlZC5maWx0ZXIociA9PiAhdGhpcy5leGNsdWRlZFJlc291cmNlVHlwZXMuaGFzKHIudHlwZSkpO1xuICAgIGNvbnN0IGZpbHRlcmVkTW9kaWZpZWQgPSBkaWZmLm1vZGlmaWVkLmZpbHRlcihyID0+ICF0aGlzLmV4Y2x1ZGVkUmVzb3VyY2VUeXBlcy5oYXMoci50eXBlKSk7XG5cbiAgICAvLyBCdWlsZCB0ZW1wbGF0ZSByZXNvdXJjZSBjb250ZXh0IGZyb20gYWxsIHJlc291cmNlcyBpbiB0aGUgZGlmZlxuICAgIGNvbnN0IGFsbFJlc291cmNlczogUmVzb3VyY2VXaXRoSWRbXSA9IFtcbiAgICAgIC4uLmRpZmYuYWRkZWQsXG4gICAgICAuLi5kaWZmLnJlbW92ZWQsXG4gICAgICAuLi5kaWZmLm1vZGlmaWVkLm1hcChyID0+ICh7XG4gICAgICAgIGxvZ2ljYWxJZDogci5sb2dpY2FsSWQsXG4gICAgICAgIHR5cGU6IHIudHlwZSxcbiAgICAgICAgcHJvcGVydGllczogci5uZXdQcm9wZXJ0aWVzLFxuICAgICAgfSkpLFxuICAgIF07XG5cbiAgICBjb25zdCBhZGRlZENvc3RzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZEFkZGVkLm1hcChhc3luYyAocmVzb3VyY2UpID0+IHtcbiAgICAgICAgY29uc3QgbW9udGhseUNvc3QgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlQ29zdChyZXNvdXJjZSwgcmVnaW9uLCBhbGxSZXNvdXJjZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgbW9udGhseUNvc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVtb3ZlZENvc3RzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZFJlbW92ZWQubWFwKGFzeW5jIChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBjb25zdCBtb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KHJlc291cmNlLCByZWdpb24sIGFsbFJlc291cmNlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBtb2RpZmllZENvc3RzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWx0ZXJlZE1vZGlmaWVkLm1hcChhc3luYyAocmVzb3VyY2UpID0+IHtcbiAgICAgICAgY29uc3Qgb2xkUmVzb3VyY2U6IFJlc291cmNlV2l0aElkID0ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgcHJvcGVydGllczogcmVzb3VyY2Uub2xkUHJvcGVydGllcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV3UmVzb3VyY2U6IFJlc291cmNlV2l0aElkID0ge1xuICAgICAgICAgIGxvZ2ljYWxJZDogcmVzb3VyY2UubG9naWNhbElkLFxuICAgICAgICAgIHR5cGU6IHJlc291cmNlLnR5cGUsXG4gICAgICAgICAgcHJvcGVydGllczogcmVzb3VyY2UubmV3UHJvcGVydGllcyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbGRNb250aGx5Q29zdCA9IGF3YWl0IHRoaXMuZ2V0UmVzb3VyY2VDb3N0KG9sZFJlc291cmNlLCByZWdpb24sIGFsbFJlc291cmNlcyk7XG4gICAgICAgIGNvbnN0IG5ld01vbnRobHlDb3N0ID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZUNvc3QobmV3UmVzb3VyY2UsIHJlZ2lvbiwgYWxsUmVzb3VyY2VzKTtcbiAgICAgICAgY29uc3QgY29zdERlbHRhID0gbmV3TW9udGhseUNvc3QuYW1vdW50IC0gb2xkTW9udGhseUNvc3QuYW1vdW50O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbG9naWNhbElkOiByZXNvdXJjZS5sb2dpY2FsSWQsXG4gICAgICAgICAgdHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgICBtb250aGx5Q29zdDogbmV3TW9udGhseUNvc3QsXG4gICAgICAgICAgb2xkTW9udGhseUNvc3QsXG4gICAgICAgICAgbmV3TW9udGhseUNvc3QsXG4gICAgICAgICAgY29zdERlbHRhLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsQWRkZWRDb3N0ID0gYWRkZWRDb3N0cy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgci5tb250aGx5Q29zdC5hbW91bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsUmVtb3ZlZENvc3QgPSByZW1vdmVkQ29zdHMucmVkdWNlKChzdW0sIHIpID0+IHN1bSArIHIubW9udGhseUNvc3QuYW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbE1vZGlmaWVkRGVsdGEgPSBtb2RpZmllZENvc3RzLnJlZHVjZSgoc3VtLCByKSA9PiBzdW0gKyByLmNvc3REZWx0YSwgMCk7XG5cbiAgICBjb25zdCB0b3RhbERlbHRhID0gdG90YWxBZGRlZENvc3QgLSB0b3RhbFJlbW92ZWRDb3N0ICsgdG90YWxNb2RpZmllZERlbHRhO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsRGVsdGEsXG4gICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICBhZGRlZENvc3RzLFxuICAgICAgcmVtb3ZlZENvc3RzLFxuICAgICAgbW9kaWZpZWRDb3N0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHJlc291cmNlcyBhbmQgY29ubmVjdGlvbnNcbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wcmljaW5nQ2xpZW50LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class AuroraServerlessCalculator implements ResourceCostCalculator {
4
+ private readonly customMinACU?;
5
+ private readonly customMaxACU?;
6
+ private readonly customStorageGB?;
7
+ private readonly HOURS_PER_MONTH;
8
+ private readonly DEFAULT_MIN_ACU;
9
+ private readonly DEFAULT_MAX_ACU;
10
+ private readonly DEFAULT_STORAGE_GB;
11
+ private readonly DEFAULT_MONTHLY_IO_REQUESTS;
12
+ private readonly FALLBACK_ACU_PRICE_V2;
13
+ private readonly FALLBACK_ACU_PRICE_V1;
14
+ private readonly STORAGE_PRICE_PER_GB;
15
+ private readonly IO_PRICE_PER_MILLION;
16
+ constructor(customMinACU?: number | undefined, customMaxACU?: number | undefined, customStorageGB?: number | undefined);
17
+ supports(resourceType: string): boolean;
18
+ canCalculate(resource: ResourceWithId): boolean;
19
+ calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
20
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuroraServerlessCalculator = void 0;
4
+ const RegionMapper_1 = require("../RegionMapper");
5
+ class AuroraServerlessCalculator {
6
+ customMinACU;
7
+ customMaxACU;
8
+ customStorageGB;
9
+ HOURS_PER_MONTH = 730;
10
+ DEFAULT_MIN_ACU = 0.5;
11
+ DEFAULT_MAX_ACU = 16;
12
+ DEFAULT_STORAGE_GB = 100;
13
+ DEFAULT_MONTHLY_IO_REQUESTS = 100_000_000;
14
+ FALLBACK_ACU_PRICE_V2 = 0.12;
15
+ FALLBACK_ACU_PRICE_V1 = 0.06;
16
+ STORAGE_PRICE_PER_GB = 0.10;
17
+ IO_PRICE_PER_MILLION = 0.20;
18
+ constructor(customMinACU, customMaxACU, customStorageGB) {
19
+ this.customMinACU = customMinACU;
20
+ this.customMaxACU = customMaxACU;
21
+ this.customStorageGB = customStorageGB;
22
+ }
23
+ supports(resourceType) {
24
+ return resourceType === 'AWS::RDS::DBCluster';
25
+ }
26
+ canCalculate(resource) {
27
+ const props = resource.properties || {};
28
+ return (props.EngineMode === 'serverless' ||
29
+ props.ServerlessV2ScalingConfiguration !== undefined);
30
+ }
31
+ async calculateCost(resource, region, pricingClient) {
32
+ try {
33
+ const props = resource.properties || {};
34
+ const scalingConfig = props.ServerlessV2ScalingConfiguration;
35
+ const isV2 = scalingConfig !== undefined;
36
+ const minACU = this.customMinACU
37
+ ?? scalingConfig?.MinCapacity
38
+ ?? this.DEFAULT_MIN_ACU;
39
+ const maxACU = this.customMaxACU
40
+ ?? scalingConfig?.MaxCapacity
41
+ ?? this.DEFAULT_MAX_ACU;
42
+ const avgACU = (minACU + maxACU) / 2;
43
+ const fallbackPrice = isV2 ? this.FALLBACK_ACU_PRICE_V2 : this.FALLBACK_ACU_PRICE_V1;
44
+ const acuPrice = await pricingClient.getPrice({
45
+ serviceCode: 'AmazonRDS',
46
+ region: (0, RegionMapper_1.normalizeRegion)(region),
47
+ filters: [
48
+ { field: 'databaseEngine', value: 'Aurora' },
49
+ { field: 'productFamily', value: 'ServerlessV2' },
50
+ ],
51
+ });
52
+ const rate = acuPrice ?? fallbackPrice;
53
+ const usedFallback = acuPrice === null;
54
+ const computeCost = avgACU * this.HOURS_PER_MONTH * rate;
55
+ const storageGB = this.customStorageGB ?? this.DEFAULT_STORAGE_GB;
56
+ const storageCost = storageGB * this.STORAGE_PRICE_PER_GB;
57
+ let ioCost = 0;
58
+ if (isV2) {
59
+ ioCost = (this.DEFAULT_MONTHLY_IO_REQUESTS / 1_000_000) * this.IO_PRICE_PER_MILLION;
60
+ }
61
+ const totalCost = computeCost + storageCost + ioCost;
62
+ const version = isV2 ? 'v2' : 'v1';
63
+ const assumptions = [
64
+ `Aurora Serverless ${version}: ${avgACU} avg ACUs × $${rate.toFixed(2)}/ACU-hour × ${this.HOURS_PER_MONTH}h = $${computeCost.toFixed(2)}/month`,
65
+ `Storage: ${storageGB} GB × $${this.STORAGE_PRICE_PER_GB}/GB = $${storageCost.toFixed(2)}/month`,
66
+ ];
67
+ if (isV2) {
68
+ assumptions.push(`I/O: ${this.DEFAULT_MONTHLY_IO_REQUESTS / 1_000_000}M requests × $${this.IO_PRICE_PER_MILLION}/M = $${ioCost.toFixed(2)}/month`);
69
+ }
70
+ if (usedFallback) {
71
+ assumptions.push(`Using fallback pricing (API data not available for region ${region})`);
72
+ }
73
+ assumptions.push(`ACU range: ${minACU}–${maxACU} (estimated average: ${avgACU})`);
74
+ return {
75
+ amount: totalCost,
76
+ currency: 'USD',
77
+ confidence: usedFallback ? 'medium' : 'medium',
78
+ assumptions,
79
+ };
80
+ }
81
+ catch (error) {
82
+ return {
83
+ amount: 0,
84
+ currency: 'USD',
85
+ confidence: 'unknown',
86
+ assumptions: [`Failed to fetch pricing: ${error instanceof Error ? error.message : String(error)}`],
87
+ };
88
+ }
89
+ }
90
+ }
91
+ exports.AuroraServerlessCalculator = AuroraServerlessCalculator;
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVyb3JhU2VydmVybGVzc0NhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpY2luZy9jYWxjdWxhdG9ycy9BdXJvcmFTZXJ2ZXJsZXNzQ2FsY3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrREFBa0Q7QUFFbEQsTUFBYSwwQkFBMEI7SUFZbEI7SUFDQTtJQUNBO0lBYkYsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUN0QixlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDckIsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0lBQ3pCLDJCQUEyQixHQUFHLFdBQVcsQ0FBQztJQUMxQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDN0IscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQzdCLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUM1QixvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFFN0MsWUFDbUIsWUFBcUIsRUFDckIsWUFBcUIsRUFDckIsZUFBd0I7UUFGeEIsaUJBQVksR0FBWixZQUFZLENBQVM7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVM7UUFDckIsb0JBQWUsR0FBZixlQUFlLENBQVM7SUFDeEMsQ0FBQztJQUVKLFFBQVEsQ0FBQyxZQUFvQjtRQUMzQixPQUFPLFlBQVksS0FBSyxxQkFBcUIsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQXdCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FDSixLQUFLLENBQUMsVUFBcUIsS0FBSyxZQUFZO1lBQzdDLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxTQUFTLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsUUFBd0IsRUFDeEIsTUFBYyxFQUNkLGFBQTRCO1FBRTVCLElBQUksQ0FBQztZ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QUFDLENBQUM7WUFFbEYsT0FBTztnQkFDTCxNQUFNLEVBQUUsU0FBUztnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRO2dCQUM5QyxXQUFXO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxRQUFRLEVBQUUsS0FBSztnQkFDZixVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLENBQUMsNEJBQTRCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ3BHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdkdELGdFQXVHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlV2l0aElkIH0gZnJvbSAnLi4vLi4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yLCBNb250aGx5Q29zdCwgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVJlZ2lvbiB9IGZyb20gJy4uL1JlZ2lvbk1hcHBlcic7XG5cbmV4cG9ydCBjbGFzcyBBdXJvcmFTZXJ2ZXJsZXNzQ2FsY3VsYXRvciBpbXBsZW1lbnRzIFJlc291cmNlQ29zdENhbGN1bGF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IEhPVVJTX1BFUl9NT05USCA9IDczMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01JTl9BQ1UgPSAwLjU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfQUNVID0gMTY7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TVE9SQUdFX0dCID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTU9OVEhMWV9JT19SRVFVRVNUUyA9IDEwMF8wMDBfMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZBTExCQUNLX0FDVV9QUklDRV9WMiA9IDAuMTI7XG4gIHByaXZhdGUgcmVhZG9ubHkgRkFMTEJBQ0tfQUNVX1BSSUNFX1YxID0gMC4wNjtcbiAgcHJpdmF0ZSByZWFkb25seSBTVE9SQUdFX1BSSUNFX1BFUl9HQiA9IDAuMTA7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU9fUFJJQ0VfUEVSX01JTExJT04gPSAwLjIwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tTWluQUNVPzogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tTWF4QUNVPzogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tU3RvcmFnZUdCPzogbnVtYmVyLFxuICApIHt9XG5cbiAgc3VwcG9ydHMocmVzb3VyY2VUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVzb3VyY2VUeXBlID09PSAnQVdTOjpSRFM6OkRCQ2x1c3Rlcic7XG4gIH1cblxuICBjYW5DYWxjdWxhdGUocmVzb3VyY2U6IFJlc291cmNlV2l0aElkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHMgPSByZXNvdXJjZS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHJldHVybiAoXG4gICAgICAocHJvcHMuRW5naW5lTW9kZSBhcyBzdHJpbmcpID09PSAnc2VydmVybGVzcycgfHxcbiAgICAgIHByb3BzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY2FsY3VsYXRlQ29zdChcbiAgICByZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcHJpY2luZ0NsaWVudDogUHJpY2luZ0NsaWVudCxcbiAgKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm9wcyA9IHJlc291cmNlLnByb3BlcnRpZXMgfHwge307XG4gICAgICBjb25zdCBzY2FsaW5nQ29uZmlnID0gcHJvcHMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpc1YyID0gc2NhbGluZ0NvbmZpZyAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBtaW5BQ1UgPSB0aGlzLmN1c3RvbU1pbkFDVVxuICAgICAgICA/PyAoc2NhbGluZ0NvbmZpZz8uTWluQ2FwYWNpdHkgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKVxuICAgICAgICA/PyB0aGlzLkRFRkFVTFRfTUlOX0FDVTtcbiAgICAgIGNvbnN0IG1heEFDVSA9IHRoaXMuY3VzdG9tTWF4QUNVXG4gICAgICAgID8/IChzY2FsaW5nQ29uZmlnPy5NYXhDYXBhY2l0eSBhcyBudW1iZXIgfCB1bmRlZmluZWQpXG4gICAgICAgID8/IHRoaXMuREVGQVVMVF9NQVhfQUNVO1xuICAgICAgY29uc3QgYXZnQUNVID0gKG1pbkFDVSArIG1heEFDVSkgLyAyO1xuXG4gICAgICBjb25zdCBmYWxsYmFja1ByaWNlID0gaXNWMiA/IHRoaXMuRkFMTEJBQ0tfQUNVX1BSSUNFX1YyIDogdGhpcy5GQUxMQkFDS19BQ1VfUFJJQ0VfVjE7XG5cbiAgICAgIGNvbnN0IGFjdVByaWNlID0gYXdhaXQgcHJpY2luZ0NsaWVudC5nZXRQcmljZSh7XG4gICAgICAgIHNlcnZpY2VDb2RlOiAnQW1hem9uUkRTJyxcbiAgICAgICAgcmVnaW9uOiBub3JtYWxpemVSZWdpb24ocmVnaW9uKSxcbiAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgIHsgZmllbGQ6ICdkYXRhYmFzZUVuZ2luZScsIHZhbHVlOiAnQXVyb3JhJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdwcm9kdWN0RmFtaWx5JywgdmFsdWU6ICdTZXJ2ZXJsZXNzVjInIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmF0ZSA9IGFjdVByaWNlID8/IGZhbGxiYWNrUHJpY2U7XG4gICAgICBjb25zdCB1c2VkRmFsbGJhY2sgPSBhY3VQcmljZSA9PT0gbnVsbDtcbiAgICAgIGNvbnN0IGNvbXB1dGVDb3N0ID0gYXZnQUNVICogdGhpcy5IT1VSU19QRVJfTU9OVEggKiByYXRlO1xuXG4gICAgICBjb25zdCBzdG9yYWdlR0IgPSB0aGlzLmN1c3RvbVN0b3JhZ2VHQiA/PyB0aGlzLkRFRkFVTFRfU1RPUkFHRV9HQjtcbiAgICAgIGNvbnN0IHN0b3JhZ2VDb3N0ID0gc3RvcmFnZUdCICogdGhpcy5TVE9SQUdFX1BSSUNFX1BFUl9HQjtcblxuICAgICAgbGV0IGlvQ29zdCA9IDA7XG4gICAgICBpZiAoaXNWMikge1xuICAgICAgICBpb0Nvc3QgPSAodGhpcy5ERUZBVUxUX01PTlRITFlfSU9fUkVRVUVTVFMgLyAxXzAwMF8wMDApICogdGhpcy5JT19QUklDRV9QRVJfTUlMTElPTjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG90YWxDb3N0ID0gY29tcHV0ZUNvc3QgKyBzdG9yYWdlQ29zdCArIGlvQ29zdDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpc1YyID8gJ3YyJyA6ICd2MSc7XG5cbiAgICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW1xuICAgICAgICBgQXVyb3JhIFNlcnZlcmxlc3MgJHt2ZXJzaW9ufTogJHthdmdBQ1V9IGF2ZyBBQ1VzIMOXICQke3JhdGUudG9GaXhlZCgyKX0vQUNVLWhvdXIgw5cgJHt0aGlzLkhPVVJTX1BFUl9NT05USH1oID0gJCR7Y29tcHV0ZUNvc3QudG9GaXhlZCgyKX0vbW9udGhgLFxuICAgICAgICBgU3RvcmFnZTogJHtzdG9yYWdlR0J9IEdCIMOXICQke3RoaXMuU1RPUkFHRV9QUklDRV9QRVJfR0J9L0dCID0gJCR7c3RvcmFnZUNvc3QudG9GaXhlZCgyKX0vbW9udGhgLFxuICAgICAgXTtcblxuICAgICAgaWYgKGlzVjIpIHtcbiAgICAgICAgYXNzdW1wdGlvbnMucHVzaChgSS9POiAke3RoaXMuREVGQVVMVF9NT05USExZX0lPX1JFUVVFU1RTIC8gMV8wMDBfMDAwfU0gcmVxdWVzdHMgw5cgJCR7dGhpcy5JT19QUklDRV9QRVJfTUlMTElPTn0vTSA9ICQke2lvQ29zdC50b0ZpeGVkKDIpfS9tb250aGApO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlZEZhbGxiYWNrKSB7XG4gICAgICAgIGFzc3VtcHRpb25zLnB1c2goYFVzaW5nIGZhbGxiYWNrIHByaWNpbmcgKEFQSSBkYXRhIG5vdCBhdmFpbGFibGUgZm9yIHJlZ2lvbiAke3JlZ2lvbn0pYCk7XG4gICAgICB9XG5cbiAgICAgIGFzc3VtcHRpb25zLnB1c2goYEFDVSByYW5nZTogJHttaW5BQ1V94oCTJHttYXhBQ1V9IChlc3RpbWF0ZWQgYXZlcmFnZTogJHthdmdBQ1V9KWApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IHRvdGFsQ29zdCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiB1c2VkRmFsbGJhY2sgPyAnbWVkaXVtJyA6ICdtZWRpdW0nLFxuICAgICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBjb25maWRlbmNlOiAndW5rbm93bicsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbYEZhaWxlZCB0byBmZXRjaCBwcmljaW5nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class EKSCalculator implements ResourceCostCalculator {
4
+ private readonly HOURS_PER_MONTH;
5
+ private readonly FALLBACK_CONTROL_PLANE_HOURLY;
6
+ supports(resourceType: string): boolean;
7
+ calculateCost(_resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
8
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EKSCalculator = void 0;
4
+ const RegionMapper_1 = require("../RegionMapper");
5
+ class EKSCalculator {
6
+ HOURS_PER_MONTH = 730;
7
+ FALLBACK_CONTROL_PLANE_HOURLY = 0.10;
8
+ supports(resourceType) {
9
+ return resourceType === 'AWS::EKS::Cluster';
10
+ }
11
+ async calculateCost(_resource, region, pricingClient) {
12
+ try {
13
+ const hourlyRate = await pricingClient.getPrice({
14
+ serviceCode: 'AmazonEKS',
15
+ region: (0, RegionMapper_1.normalizeRegion)(region),
16
+ filters: [
17
+ { field: 'productFamily', value: 'Compute' },
18
+ { field: 'usagetype', value: 'AmazonEKS-Hours:perCluster' },
19
+ ],
20
+ });
21
+ const rate = hourlyRate ?? this.FALLBACK_CONTROL_PLANE_HOURLY;
22
+ const monthlyCost = rate * this.HOURS_PER_MONTH;
23
+ const usedFallback = hourlyRate === null;
24
+ return {
25
+ amount: monthlyCost,
26
+ currency: 'USD',
27
+ confidence: usedFallback ? 'medium' : 'high',
28
+ assumptions: [
29
+ `EKS control plane: $${rate.toFixed(2)}/hour × ${this.HOURS_PER_MONTH} hours = $${monthlyCost.toFixed(2)}/month`,
30
+ ...(usedFallback ? [`Using fallback pricing (API data not available for region ${region})`] : []),
31
+ 'Worker nodes (EC2/Fargate) are calculated separately',
32
+ ],
33
+ };
34
+ }
35
+ catch (error) {
36
+ return {
37
+ amount: 0,
38
+ currency: 'USD',
39
+ confidence: 'unknown',
40
+ assumptions: [`Failed to fetch pricing: ${error instanceof Error ? error.message : String(error)}`],
41
+ };
42
+ }
43
+ }
44
+ }
45
+ exports.EKSCalculator = EKSCalculator;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRUtTQ2FsY3VsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcmljaW5nL2NhbGN1bGF0b3JzL0VLU0NhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsa0RBQWtEO0FBRWxELE1BQWEsYUFBYTtJQUNQLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDdEIsNkJBQTZCLEdBQUcsSUFBSSxDQUFDO0lBRXRELFFBQVEsQ0FBQyxZQUFvQjtRQUMzQixPQUFPLFlBQVksS0FBSyxtQkFBbUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsU0FBeUIsRUFDekIsTUFBYyxFQUNkLGFBQTRCO1FBRTVCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7b0JBQzVDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUU7aUJBQzVEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztZQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxVQUFVLEtBQUssSUFBSSxDQUFDO1lBRXpDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDNUMsV0FBVyxFQUFFO29CQUNYLHVCQUF1QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxlQUFlLGFBQWEsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtvQkFDaEgsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyw2REFBNkQsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNqRyxzREFBc0Q7aUJBQ3ZEO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxRQUFRLEVBQUUsS0FBSztnQkFDZixVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLENBQUMsNEJBQTRCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ3BHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOUNELHNDQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlV2l0aElkIH0gZnJvbSAnLi4vLi4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZUNvc3RDYWxjdWxhdG9yLCBNb250aGx5Q29zdCwgUHJpY2luZ0NsaWVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVJlZ2lvbiB9IGZyb20gJy4uL1JlZ2lvbk1hcHBlcic7XG5cbmV4cG9ydCBjbGFzcyBFS1NDYWxjdWxhdG9yIGltcGxlbWVudHMgUmVzb3VyY2VDb3N0Q2FsY3VsYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgSE9VUlNfUEVSX01PTlRIID0gNzMwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZBTExCQUNLX0NPTlRST0xfUExBTkVfSE9VUkxZID0gMC4xMDtcblxuICBzdXBwb3J0cyhyZXNvdXJjZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNvdXJjZVR5cGUgPT09ICdBV1M6OkVLUzo6Q2x1c3Rlcic7XG4gIH1cblxuICBhc3luYyBjYWxjdWxhdGVDb3N0KFxuICAgIF9yZXNvdXJjZTogUmVzb3VyY2VXaXRoSWQsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcHJpY2luZ0NsaWVudDogUHJpY2luZ0NsaWVudCxcbiAgKTogUHJvbWlzZTxNb250aGx5Q29zdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3VybHlSYXRlID0gYXdhaXQgcHJpY2luZ0NsaWVudC5nZXRQcmljZSh7XG4gICAgICAgIHNlcnZpY2VDb2RlOiAnQW1hem9uRUtTJyxcbiAgICAgICAgcmVnaW9uOiBub3JtYWxpemVSZWdpb24ocmVnaW9uKSxcbiAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgIHsgZmllbGQ6ICdwcm9kdWN0RmFtaWx5JywgdmFsdWU6ICdDb21wdXRlJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd1c2FnZXR5cGUnLCB2YWx1ZTogJ0FtYXpvbkVLUy1Ib3VyczpwZXJDbHVzdGVyJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJhdGUgPSBob3VybHlSYXRlID8/IHRoaXMuRkFMTEJBQ0tfQ09OVFJPTF9QTEFORV9IT1VSTFk7XG4gICAgICBjb25zdCBtb250aGx5Q29zdCA9IHJhdGUgKiB0aGlzLkhPVVJTX1BFUl9NT05USDtcbiAgICAgIGNvbnN0IHVzZWRGYWxsYmFjayA9IGhvdXJseVJhdGUgPT09IG51bGw7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogbW9udGhseUNvc3QsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogdXNlZEZhbGxiYWNrID8gJ21lZGl1bScgOiAnaGlnaCcsXG4gICAgICAgIGFzc3VtcHRpb25zOiBbXG4gICAgICAgICAgYEVLUyBjb250cm9sIHBsYW5lOiAkJHtyYXRlLnRvRml4ZWQoMil9L2hvdXIgw5cgJHt0aGlzLkhPVVJTX1BFUl9NT05USH0gaG91cnMgPSAkJHttb250aGx5Q29zdC50b0ZpeGVkKDIpfS9tb250aGAsXG4gICAgICAgICAgLi4uKHVzZWRGYWxsYmFjayA/IFtgVXNpbmcgZmFsbGJhY2sgcHJpY2luZyAoQVBJIGRhdGEgbm90IGF2YWlsYWJsZSBmb3IgcmVnaW9uICR7cmVnaW9ufSlgXSA6IFtdKSxcbiAgICAgICAgICAnV29ya2VyIG5vZGVzIChFQzIvRmFyZ2F0ZSkgYXJlIGNhbGN1bGF0ZWQgc2VwYXJhdGVseScsXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgY29uZmlkZW5jZTogJ3Vua25vd24nLFxuICAgICAgICBhc3N1bXB0aW9uczogW2BGYWlsZWQgdG8gZmV0Y2ggcHJpY2luZzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { ResourceWithId } from '../../diff/types';
2
+ import { ResourceCostCalculator, MonthlyCost, PricingClient } from '../types';
3
+ export declare class KinesisCalculator implements ResourceCostCalculator {
4
+ private readonly customShardCount?;
5
+ private readonly customIngestionGB?;
6
+ private readonly customRetrievalGB?;
7
+ private readonly customFirehoseGB?;
8
+ private readonly customKPUs?;
9
+ private readonly HOURS_PER_MONTH;
10
+ private readonly DEFAULT_SHARD_COUNT;
11
+ private readonly FALLBACK_SHARD_PRICE;
12
+ private readonly DEFAULT_INGESTION_GB;
13
+ private readonly DEFAULT_RETRIEVAL_GB;
14
+ private readonly FALLBACK_INGESTION_PRICE;
15
+ private readonly FALLBACK_RETRIEVAL_PRICE;
16
+ private readonly DEFAULT_FIREHOSE_GB;
17
+ private readonly FALLBACK_FIREHOSE_PRICE;
18
+ private readonly DEFAULT_KPUS;
19
+ private readonly FALLBACK_KPU_PRICE;
20
+ constructor(customShardCount?: number | undefined, customIngestionGB?: number | undefined, customRetrievalGB?: number | undefined, customFirehoseGB?: number | undefined, customKPUs?: number | undefined);
21
+ supports(resourceType: string): boolean;
22
+ calculateCost(resource: ResourceWithId, region: string, pricingClient: PricingClient): Promise<MonthlyCost>;
23
+ private calculateDataStreamCost;
24
+ private calculateOnDemandStreamCost;
25
+ private calculateFirehoseCost;
26
+ private calculateAnalyticsCost;
27
+ }