@aws-solutions-constructs/aws-lambda-elasticachememcached 2.43.1 → 2.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -8,8 +8,8 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "@aws-solutions-constructs/core": "2.43.1",
12
- "aws-cdk-lib": "^2.82.0",
11
+ "@aws-solutions-constructs/core": "2.45.0",
12
+ "aws-cdk-lib": "^2.99.1",
13
13
  "constructs": "^10.0.0"
14
14
  },
15
15
  "dependencyClosure": {
@@ -65,29 +65,29 @@
65
65
  }
66
66
  }
67
67
  },
68
- "@aws-cdk/asset-node-proxy-agent-v5": {
68
+ "@aws-cdk/asset-node-proxy-agent-v6": {
69
69
  "targets": {
70
70
  "dotnet": {
71
- "namespace": "Amazon.CDK.Asset.NodeProxyAgentV5",
72
- "packageId": "Amazon.CDK.Asset.NodeProxyAgentV5"
71
+ "namespace": "Amazon.CDK.Asset.NodeProxyAgentV6",
72
+ "packageId": "Amazon.CDK.Asset.NodeProxyAgentV6"
73
73
  },
74
74
  "go": {
75
75
  "moduleName": "github.com/cdklabs/awscdk-asset-node-proxy-agent-go",
76
- "packageName": "nodeproxyagentv5"
76
+ "packageName": "nodeproxyagentv6"
77
77
  },
78
78
  "java": {
79
79
  "maven": {
80
- "artifactId": "cdk-asset-node-proxy-agent-v5",
80
+ "artifactId": "cdk-asset-node-proxy-agent-v6",
81
81
  "groupId": "software.amazon.awscdk"
82
82
  },
83
- "package": "software.amazon.awscdk.cdk.asset.node.proxy.agent.v5"
83
+ "package": "software.amazon.awscdk.cdk.asset.node.proxy.agent.v6"
84
84
  },
85
85
  "js": {
86
- "npm": "@aws-cdk/asset-node-proxy-agent-v5"
86
+ "npm": "@aws-cdk/asset-node-proxy-agent-v6"
87
87
  },
88
88
  "python": {
89
- "distName": "aws-cdk.asset-node-proxy-agent-v5",
90
- "module": "aws_cdk.asset_node_proxy_agent_v5"
89
+ "distName": "aws-cdk.asset-node-proxy-agent-v6",
90
+ "module": "aws_cdk.asset_node_proxy_agent_v6"
91
91
  }
92
92
  }
93
93
  },
@@ -572,6 +572,19 @@
572
572
  }
573
573
  }
574
574
  },
575
+ "aws-cdk-lib.aws_cleanrooms": {
576
+ "targets": {
577
+ "dotnet": {
578
+ "package": "Amazon.CDK.AWS.CleanRooms"
579
+ },
580
+ "java": {
581
+ "package": "services.cleanrooms"
582
+ },
583
+ "python": {
584
+ "module": "aws_cdk.aws_cleanrooms"
585
+ }
586
+ }
587
+ },
575
588
  "aws-cdk-lib.aws_cloud9": {
576
589
  "targets": {
577
590
  "dotnet": {
@@ -1301,6 +1314,19 @@
1301
1314
  }
1302
1315
  }
1303
1316
  },
1317
+ "aws-cdk-lib.aws_entityresolution": {
1318
+ "targets": {
1319
+ "dotnet": {
1320
+ "package": "Amazon.CDK.AWS.EntityResolution"
1321
+ },
1322
+ "java": {
1323
+ "package": "services.entityresolution"
1324
+ },
1325
+ "python": {
1326
+ "module": "aws_cdk.aws_entityresolution"
1327
+ }
1328
+ }
1329
+ },
1304
1330
  "aws-cdk-lib.aws_events": {
1305
1331
  "targets": {
1306
1332
  "dotnet": {
@@ -1548,6 +1574,19 @@
1548
1574
  }
1549
1575
  }
1550
1576
  },
1577
+ "aws-cdk-lib.aws_healthimaging": {
1578
+ "targets": {
1579
+ "dotnet": {
1580
+ "package": "Amazon.CDK.AWS.HealthImaging"
1581
+ },
1582
+ "java": {
1583
+ "package": "services.healthimaging"
1584
+ },
1585
+ "python": {
1586
+ "module": "aws_cdk.aws_healthimaging"
1587
+ }
1588
+ }
1589
+ },
1551
1590
  "aws-cdk-lib.aws_healthlake": {
1552
1591
  "targets": {
1553
1592
  "dotnet": {
@@ -2198,6 +2237,19 @@
2198
2237
  }
2199
2238
  }
2200
2239
  },
2240
+ "aws-cdk-lib.aws_mediapackagev2": {
2241
+ "targets": {
2242
+ "dotnet": {
2243
+ "package": "Amazon.CDK.AWS.MediaPackageV2"
2244
+ },
2245
+ "java": {
2246
+ "package": "services.mediapackagev2"
2247
+ },
2248
+ "python": {
2249
+ "module": "aws_cdk.aws_mediapackagev2"
2250
+ }
2251
+ }
2252
+ },
2201
2253
  "aws-cdk-lib.aws_mediastore": {
2202
2254
  "targets": {
2203
2255
  "dotnet": {
@@ -2432,6 +2484,19 @@
2432
2484
  }
2433
2485
  }
2434
2486
  },
2487
+ "aws-cdk-lib.aws_pcaconnectorad": {
2488
+ "targets": {
2489
+ "dotnet": {
2490
+ "package": "Amazon.CDK.AWS.PCAConnectorAD"
2491
+ },
2492
+ "java": {
2493
+ "package": "services.pcaconnectorad"
2494
+ },
2495
+ "python": {
2496
+ "module": "aws_cdk.aws_pcaconnectorad"
2497
+ }
2498
+ }
2499
+ },
2435
2500
  "aws-cdk-lib.aws_personalize": {
2436
2501
  "targets": {
2437
2502
  "dotnet": {
@@ -3199,6 +3264,19 @@
3199
3264
  }
3200
3265
  }
3201
3266
  },
3267
+ "aws-cdk-lib.aws_verifiedpermissions": {
3268
+ "targets": {
3269
+ "dotnet": {
3270
+ "package": "Amazon.CDK.AWS.VerifiedPermissions"
3271
+ },
3272
+ "java": {
3273
+ "package": "services.verifiedpermissions"
3274
+ },
3275
+ "python": {
3276
+ "module": "aws_cdk.aws_verifiedpermissions"
3277
+ }
3278
+ }
3279
+ },
3202
3280
  "aws-cdk-lib.aws_voiceid": {
3203
3281
  "targets": {
3204
3282
  "dotnet": {
@@ -3290,6 +3368,19 @@
3290
3368
  }
3291
3369
  }
3292
3370
  },
3371
+ "aws-cdk-lib.aws_workspacesweb": {
3372
+ "targets": {
3373
+ "dotnet": {
3374
+ "package": "Amazon.CDK.AWS.WorkSpacesWeb"
3375
+ },
3376
+ "java": {
3377
+ "package": "services.workspacesweb"
3378
+ },
3379
+ "python": {
3380
+ "module": "aws_cdk.aws_workspacesweb"
3381
+ }
3382
+ }
3383
+ },
3293
3384
  "aws-cdk-lib.aws_xray": {
3294
3385
  "targets": {
3295
3386
  "dotnet": {
@@ -3488,7 +3579,7 @@
3488
3579
  },
3489
3580
  "description": "CDK constructs for defining an interaction between an AWS Lambda function and an Amazon Elasticache memcached cache.",
3490
3581
  "homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
3491
- "jsiiVersion": "1.88.0 (build eaabd08)",
3582
+ "jsiiVersion": "1.90.0 (build d6bdb4d)",
3492
3583
  "keywords": [
3493
3584
  "aws",
3494
3585
  "cdk",
@@ -3507,7 +3598,7 @@
3507
3598
  },
3508
3599
  "name": "@aws-solutions-constructs/aws-lambda-elasticachememcached",
3509
3600
  "readme": {
3510
- "markdown": "# aws-lambda-elasticachememcached module\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![Stability: Experimental](https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge)\n\n---\n<!--END STABILITY BANNER-->\n\n| **Reference Documentation**:| <span style=\"font-weight: normal\">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|\n|:-------------|:-------------|\n<div style=\"height:8px\"></div>\n\n| **Language** | **Package** |\n|:-------------|-----------------|\n|![Python Logo](https://docs.aws.amazon.com/cdk/api/latest/img/python32.png) Python|`aws_solutions_constructs.aws_lambda_elasticachememcached`|\n|![Typescript Logo](https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png) Typescript|`@aws-solutions-constructs/aws-lambda-elasticachememcached`|\n|![Java Logo](https://docs.aws.amazon.com/cdk/api/latest/img/java32.png) Java|`software.amazon.awsconstructs.services.lambdaelasticachememcached`|\n\n## Overview\nThis AWS Solutions Construct implements an AWS Lambda function connected to an Amazon Elasticache Memcached cluster.\n\nHere is a minimal deployable pattern definition :\n\nTypescript\n``` typescript\nimport { Construct } from 'constructs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { LambdaToElasticachememcached } from '@aws-solutions-constructs/aws-lambda-elasticachememcached';\nimport * as lambda from 'aws-cdk-lib/aws-lambda';\n\nnew LambdaToElasticachememcached(this, 'LambdaToElasticachememcachedPattern', {\n lambdaFunctionProps: {\n runtime: lambda.Runtime.NODEJS_16_X,\n handler: 'index.handler',\n code: lambda.Code.fromAsset(`lambda`)\n }\n});\n```\n\nPython\n```python\nfrom aws_solutions_constructs.aws_lambda_elasticachememcached import LambdaToElasticachememcached\nfrom aws_cdk import (\n aws_lambda as _lambda,\n Stack\n)\nfrom constructs import Construct\n\nLambdaToElasticachememcached(self, 'LambdaToCachePattern',\n lambda_function_props=_lambda.FunctionProps(\n code=_lambda.Code.from_asset('lambda'),\n runtime=_lambda.Runtime.PYTHON_3_9,\n handler='index.handler'\n )\n )\n```\n\nJava\n``` java\nimport software.constructs.Construct;\n\nimport software.amazon.awscdk.Stack;\nimport software.amazon.awscdk.StackProps;\nimport software.amazon.awscdk.services.lambda.*;\nimport software.amazon.awscdk.services.lambda.Runtime;\nimport software.amazon.awsconstructs.services.lambdaelasticachememcached.*;\n\nnew LambdaToElasticachememcached(this, \"LambdaToCachePattern\", new LambdaToElasticachememcachedProps.Builder()\n .lambdaFunctionProps(new FunctionProps.Builder()\n .runtime(Runtime.NODEJS_16_X)\n .code(Code.fromAsset(\"lambda\"))\n .handler(\"index.handler\")\n .build())\n .build());\n```\n\n## Pattern Construct Props\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|existingLambdaObj?|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of Lambda Function object, providing both this and `lambdaFunctionProps` will cause an error.|\n|lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|Optional user provided props to override the default props for the Lambda function.|\n|existingVpc?|[`ec2.IVpc`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html)|An optional, existing VPC into which this pattern should be deployed. When deployed in a VPC, the Lambda function will use ENIs in the VPC to access network resources and an Interface Endpoint will be created in the VPC for Amazon Elasticache. If an existing VPC is provided, the `deployVpc` property cannot be `true`. This uses `ec2.IVpc` to allow clients to supply VPCs that exist outside the stack using the [`ec2.Vpc.fromLookup()`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html#static-fromwbrlookupscope-id-options) method.|\n|vpcProps?|[`ec2.VpcProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.VpcProps.html)|Optional user provided properties to override the default properties for the new VPC. `subnetConfiguration` is set by the pattern, so any values for those properties supplied here will be overrriden. |\n| cacheEndpointEnvironmentVariableName?| string | Optional Name for the Lambda function environment variable set to the cache endpoint. Default: CACHE_ENDPOINT |\n| cacheProps? | [`cache.CfnCacheClusterProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheClusterProps.html) | Optional user provided props to override the default props for the Elasticache Cluster. Providing both this and `existingCache` will cause an error. |\n| existingCache? | [`cache.CfnCacheCluster`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#attrconfigurationendpointport) | Existing instance of Elasticache Cluster object, providing both this and `cacheProps` will cause an error. If you provide this, you must provide the associated VPC in existingVpc. |\n\n## Pattern Properties\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|lambdaFunction|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Returns an instance of the Lambda function used by the pattern.|\n|vpc |[`ec2.IVpc`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html)|Returns an interface on the VPC used by the pattern. This may be a VPC created by the pattern or the VPC supplied to the pattern constructor.|\n| cache | [`cache.CfnCacheCluster`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#attrconfigurationendpointport) | The Elasticache Memcached cluster used by the construct. |\n\n## Default settings\n\nOut of the box implementation of the Construct without any override will set the following defaults:\n\n### AWS Lambda Function\n* Configure limited privilege access IAM role for Lambda function\n* Enable reusing connections with Keep-Alive for NodeJs Lambda function\n* Enable X-Ray Tracing\n* Attached to self referencing security group to grant access to cache\n* Set Environment Variables\n * (default) CACHE_ENDPOINT\n * AWS_NODEJS_CONNECTION_REUSE_ENABLED (for Node 10.x and higher functions)\n\n### Amazon Elasticache Memcached Cluster\n* Creates multi node, cross-az cluster by default\n * 2 cache nodes, type: cache.t3.medium\n* Self referencing security group attached to cluster endpoint\n\n## Architecture\n![Architecture Diagram](architecture.png)\n\n***\n&copy; Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
3601
+ "markdown": "# aws-lambda-elasticachememcached module\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![Stability: Experimental](https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge)\n\n---\n<!--END STABILITY BANNER-->\n\n| **Reference Documentation**:| <span style=\"font-weight: normal\">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|\n|:-------------|:-------------|\n<div style=\"height:8px\"></div>\n\n| **Language** | **Package** |\n|:-------------|-----------------|\n|![Python Logo](https://docs.aws.amazon.com/cdk/api/latest/img/python32.png) Python|`aws_solutions_constructs.aws_lambda_elasticachememcached`|\n|![Typescript Logo](https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png) Typescript|`@aws-solutions-constructs/aws-lambda-elasticachememcached`|\n|![Java Logo](https://docs.aws.amazon.com/cdk/api/latest/img/java32.png) Java|`software.amazon.awsconstructs.services.lambdaelasticachememcached`|\n\n## Overview\nThis AWS Solutions Construct implements an AWS Lambda function connected to an Amazon Elasticache Memcached cluster.\n\nHere is a minimal deployable pattern definition :\n\nTypescript\n``` typescript\nimport { Construct } from 'constructs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { LambdaToElasticachememcached } from '@aws-solutions-constructs/aws-lambda-elasticachememcached';\nimport * as lambda from 'aws-cdk-lib/aws-lambda';\n\nnew LambdaToElasticachememcached(this, 'LambdaToElasticachememcachedPattern', {\n lambdaFunctionProps: {\n runtime: lambda.Runtime.NODEJS_16_X,\n handler: 'index.handler',\n code: lambda.Code.fromAsset(`lambda`)\n }\n});\n```\n\nPython\n```python\nfrom aws_solutions_constructs.aws_lambda_elasticachememcached import LambdaToElasticachememcached\nfrom aws_cdk import (\n aws_lambda as _lambda,\n Stack\n)\nfrom constructs import Construct\n\nLambdaToElasticachememcached(self, 'LambdaToCachePattern',\n lambda_function_props=_lambda.FunctionProps(\n code=_lambda.Code.from_asset('lambda'),\n runtime=_lambda.Runtime.PYTHON_3_9,\n handler='index.handler'\n )\n )\n```\n\nJava\n``` java\nimport software.constructs.Construct;\n\nimport software.amazon.awscdk.Stack;\nimport software.amazon.awscdk.StackProps;\nimport software.amazon.awscdk.services.lambda.*;\nimport software.amazon.awscdk.services.lambda.Runtime;\nimport software.amazon.awsconstructs.services.lambdaelasticachememcached.*;\n\nnew LambdaToElasticachememcached(this, \"LambdaToCachePattern\", new LambdaToElasticachememcachedProps.Builder()\n .lambdaFunctionProps(new FunctionProps.Builder()\n .runtime(Runtime.NODEJS_16_X)\n .code(Code.fromAsset(\"lambda\"))\n .handler(\"index.handler\")\n .build())\n .build());\n```\n\n## Pattern Construct Props\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|existingLambdaObj?|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of Lambda Function object, providing both this and `lambdaFunctionProps` will cause an error.|\n|lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|Optional user provided props to override the default props for the Lambda function.|\n|existingVpc?|[`ec2.IVpc`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html)|An optional, existing VPC into which this pattern should be deployed. When deployed in a VPC, the Lambda function will use ENIs in the VPC to access network resources and an Interface Endpoint will be created in the VPC for Amazon Elasticache. If an existing VPC is provided, the `deployVpc` property cannot be `true`. This uses `ec2.IVpc` to allow clients to supply VPCs that exist outside the stack using the [`ec2.Vpc.fromLookup()`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html#static-fromwbrlookupscope-id-options) method.|\n|vpcProps?|[`ec2.VpcProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.VpcProps.html)|Optional user provided properties to override the default properties for the new VPC. `subnetConfiguration` is set by the pattern, so any values for those properties supplied here will be overridden. |\n| cacheEndpointEnvironmentVariableName?| string | Optional Name for the Lambda function environment variable set to the cache endpoint. Default: CACHE_ENDPOINT |\n| cacheProps? | [`cache.CfnCacheClusterProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheClusterProps.html) | Optional user provided props to override the default props for the Elasticache Cluster. Providing both this and `existingCache` will cause an error. |\n| existingCache? | [`cache.CfnCacheCluster`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#attrconfigurationendpointport) | Existing instance of Elasticache Cluster object, providing both this and `cacheProps` will cause an error. If you provide this, you must provide the associated VPC in existingVpc. |\n\n## Pattern Properties\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|lambdaFunction|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Returns an instance of the Lambda function used by the pattern.|\n|vpc |[`ec2.IVpc`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html)|Returns an interface on the VPC used by the pattern. This may be a VPC created by the pattern or the VPC supplied to the pattern constructor.|\n| cache | [`cache.CfnCacheCluster`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#attrconfigurationendpointport) | The Elasticache Memcached cluster used by the construct. |\n\n## Default settings\n\nOut of the box implementation of the Construct without any override will set the following defaults:\n\n### AWS Lambda Function\n* Configure limited privilege access IAM role for Lambda function\n* Enable reusing connections with Keep-Alive for NodeJs Lambda function\n* Enable X-Ray Tracing\n* Attached to self referencing security group to grant access to cache\n* Set Environment Variables\n * (default) CACHE_ENDPOINT\n * AWS_NODEJS_CONNECTION_REUSE_ENABLED (for Node 10.x and higher functions)\n\n### Amazon Elasticache Memcached Cluster\n* Creates multi node, cross-az cluster by default\n * 2 cache nodes, type: cache.t3.medium\n* Self referencing security group attached to cluster endpoint\n\n## Architecture\n![Architecture Diagram](architecture.png)\n\n***\n&copy; Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
3511
3602
  },
3512
3603
  "repository": {
3513
3604
  "directory": "source/patterns/@aws-solutions-constructs/aws-lambda-elasticachememcached",
@@ -3771,6 +3862,6 @@
3771
3862
  "symbolId": "lib/index:LambdaToElasticachememcachedProps"
3772
3863
  }
3773
3864
  },
3774
- "version": "2.43.1",
3775
- "fingerprint": "p/rwp1zoKJ8pmaVWqTfFemjZYHV7OEnJGmwEmWjQCog="
3865
+ "version": "2.45.0",
3866
+ "fingerprint": "cww6dDG6NTU82nVJEjUfkAM2HSGRcy5ZFmMNHyp2uwE="
3776
3867
  }
package/README.md CHANGED
@@ -83,7 +83,7 @@ new LambdaToElasticachememcached(this, "LambdaToCachePattern", new LambdaToElast
83
83
  |existingLambdaObj?|[`lambda.Function`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)|Existing instance of Lambda Function object, providing both this and `lambdaFunctionProps` will cause an error.|
84
84
  |lambdaFunctionProps?|[`lambda.FunctionProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionProps.html)|Optional user provided props to override the default props for the Lambda function.|
85
85
  |existingVpc?|[`ec2.IVpc`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html)|An optional, existing VPC into which this pattern should be deployed. When deployed in a VPC, the Lambda function will use ENIs in the VPC to access network resources and an Interface Endpoint will be created in the VPC for Amazon Elasticache. If an existing VPC is provided, the `deployVpc` property cannot be `true`. This uses `ec2.IVpc` to allow clients to supply VPCs that exist outside the stack using the [`ec2.Vpc.fromLookup()`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html#static-fromwbrlookupscope-id-options) method.|
86
- |vpcProps?|[`ec2.VpcProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.VpcProps.html)|Optional user provided properties to override the default properties for the new VPC. `subnetConfiguration` is set by the pattern, so any values for those properties supplied here will be overrriden. |
86
+ |vpcProps?|[`ec2.VpcProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.VpcProps.html)|Optional user provided properties to override the default properties for the new VPC. `subnetConfiguration` is set by the pattern, so any values for those properties supplied here will be overridden. |
87
87
  | cacheEndpointEnvironmentVariableName?| string | Optional Name for the Lambda function environment variable set to the cache endpoint. Default: CACHE_ENDPOINT |
88
88
  | cacheProps? | [`cache.CfnCacheClusterProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheClusterProps.html) | Optional user provided props to override the default props for the Elasticache Cluster. Providing both this and `existingCache` will cause an error. |
89
89
  | existingCache? | [`cache.CfnCacheCluster`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#attrconfigurationendpointport) | Existing instance of Elasticache Cluster object, providing both this and `cacheProps` will cause an error. If you provide this, you must provide the associated VPC in existingVpc. |
package/lib/index.js CHANGED
@@ -20,7 +20,8 @@ class LambdaToElasticachememcached extends constructs_1.Construct {
20
20
  */
21
21
  constructor(scope, id, props) {
22
22
  super(scope, id);
23
- defaults.CheckProps(props);
23
+ defaults.CheckVpcProps(props);
24
+ defaults.CheckLambdaProps(props);
24
25
  if ((props.existingCache || props.existingLambdaObj) && (!props.existingVpc)) {
25
26
  throw Error('If providing an existing Cache or Lambda Function, you must also supply the associated existingVpc');
26
27
  }
@@ -59,9 +60,9 @@ class LambdaToElasticachememcached extends constructs_1.Construct {
59
60
  }
60
61
  exports.LambdaToElasticachememcached = LambdaToElasticachememcached;
61
62
  _a = JSII_RTTI_SYMBOL_1;
62
- LambdaToElasticachememcached[_a] = { fqn: "@aws-solutions-constructs/aws-lambda-elasticachememcached.LambdaToElasticachememcached", version: "2.43.1" };
63
+ LambdaToElasticachememcached[_a] = { fqn: "@aws-solutions-constructs/aws-lambda-elasticachememcached.LambdaToElasticachememcached", version: "2.45.0" };
63
64
  function AddLambdaEnvironmentVariable(targetFunction, value, defaultName, clientName) {
64
65
  const variableName = clientName || defaultName;
65
66
  targetFunction.addEnvironment(variableName, value);
66
67
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSx1Q0FBdUM7QUFDdkMsMkNBQXVDO0FBQ3ZDLHFDQUFzRztBQUV0RyxNQUFNLDhCQUE4QixHQUFHLGdCQUFnQixDQUFDO0FBb0R4RDs7R0FFRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFLekQ7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBd0M7UUFFeEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUUsTUFBTSxLQUFLLENBQUMsb0dBQW9HLENBQUMsQ0FBQztTQUNuSDtRQUVELElBQ0UsS0FBSyxDQUFDLFVBQVU7WUFDaEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQ3ZCLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFDdkM7WUFDQSxNQUFNLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDM0MsTUFBTSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUM1RDtRQUVELE1BQU0sU0FBUyxHQUFHLG1CQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNsQyxlQUFlLEVBQUUsUUFBUSxDQUFDLHVCQUF1QixFQUFFO1lBQ25ELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSwwQkFBMEIsR0FBRyx5Q0FBa0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckcsSUFBSSxDQUFDLEtBQUssR0FBRyw2QkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQzVDLG9CQUFvQixFQUFHLDBCQUEwQixDQUFDLGVBQWU7WUFDakUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLE1BQU0sbUJBQW1CLEdBQXlCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDekUsRUFBRSxFQUNGLEtBQUssQ0FBQyxtQkFBbUIsRUFDekIsRUFBRSxjQUFjLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQ2hELElBQUksQ0FDTCxDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRTtZQUN2RCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQzFDLG1CQUFtQjtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFFSCw0QkFBNEIsQ0FDMUIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFDNUYsOEJBQThCLEVBQzlCLEtBQUssQ0FBQyxvQ0FBb0MsQ0FDM0MsQ0FBQztJQUNKLENBQUM7O0FBMUVILG9FQTJFQzs7O0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxjQUErQixFQUFFLEtBQWEsRUFBRSxXQUFtQixFQUFFLFVBQW1CO0lBQzVILE1BQU0sWUFBWSxHQUFHLFVBQVUsSUFBSSxXQUFXLENBQUM7SUFDL0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNhY2hlXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi4vLi4vY29yZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IG9idGFpbk1lbWNhY2hlZENsdXN0ZXIsIGdldENhY2hlUG9ydCwgQ3JlYXRlU2VsZlJlZmVyZW5jaW5nU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi8uLi9jb3JlXCI7XG5cbmNvbnN0IGRlZmF1bHRFbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9IFwiQ0FDSEVfRU5EUE9JTlRcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZFByb3BzIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIExhbWJkYSBGdW5jdGlvbiBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIGBsYW1iZGFGdW5jdGlvblByb3BzYCB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nTGFtYmRhT2JqPzogbGFtYmRhLkZ1bmN0aW9uO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BlcnRpZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvblByb3BzPzogbGFtYmRhLkZ1bmN0aW9uUHJvcHM7XG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyBWUEMgZm9yIHRoZSBjb25zdHJ1Y3QgdG8gdXNlIChjb25zdHJ1Y3Qgd2lsbCBOT1QgY3JlYXRlIGEgbmV3IFZQQyBpbiB0aGlzIGNhc2UpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdWcGM/OiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGlmIGRlcGxveVZwYyBpcyB0cnVlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMoKSBpbiB2cGMtZGVmYXVsdHMudHNcbiAgICovXG4gIHJlYWRvbmx5IHZwY1Byb3BzPzogZWMyLlZwY1Byb3BzO1xuICAvKipcbiAgICogT3B0aW9uYWwgTmFtZSBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgdG8gdGhlIGNhY2hlIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENBQ0hFX0VORFBPSU5UXG4gICAqL1xuICByZWFkb25seSBjYWNoZUVuZHBvaW50RW52aXJvbm1lbnRWYXJpYWJsZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgRWxhc3RpY2FjaGUgY2FjaGUuXG4gICAqIFByb3ZpZGluZyBib3RoIHRoaXMgYW5kIGBleGlzdGluZ0NhY2hlYCB3aWxsIGNhdXNlIGFuIGVycm9yLiAgSWYgeW91IHByb3ZpZGUgdGhpcyxcbiAgICogeW91IG11c3QgcHJvdmlkZSB0aGUgYXNzb2NpYXRlZCBWUEMgaW4gZXhpc3RpbmdWcGMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB1c2VkIChjb3JlL2xpYi9lbGFzdGljYWNhaGUtZGVmYXVsdHMudHMpXG4gICAqL1xuICByZWFkb25seSBjYWNoZVByb3BzPzogY2FjaGUuQ2ZuQ2FjaGVDbHVzdGVyUHJvcHMgfCBhbnk7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBFbGFzdGljYWNoZSBDbHVzdGVyIG9iamVjdCwgcHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgYGNhY2hlUHJvcHNgIHdpbGwgY2F1c2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdDYWNoZT86IGNhY2hlLkNmbkNhY2hlQ2x1c3Rlcjtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZCBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5GdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHB1YmxpYyByZWFkb25seSBjYWNoZTogY2FjaGUuQ2ZuQ2FjaGVDbHVzdGVyO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkIGNsYXNzLlxuICAgKiBAcGFyYW0ge2Nkay5BcHB9IHNjb3BlIC0gcmVwcmVzZW50cyB0aGUgc2NvcGUgZm9yIGFsbCB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSB0aGlzIGlzIGEgYSBzY29wZS11bmlxdWUgaWQuXG4gICAqIEBwYXJhbSB7TGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZFByb3BzfSBwcm9wcyAtIHVzZXIgcHJvdmlkZWQgcHJvcHMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBhY2Nlc3MgcHVibGljXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWRQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGRlZmF1bHRzLkNoZWNrUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKChwcm9wcy5leGlzdGluZ0NhY2hlIHx8IHByb3BzLmV4aXN0aW5nTGFtYmRhT2JqKSAmJiAoIXByb3BzLmV4aXN0aW5nVnBjKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0lmIHByb3ZpZGluZyBhbiBleGlzdGluZyBDYWNoZSBvciBMYW1iZGEgRnVuY3Rpb24sIHlvdSBtdXN0IGFsc28gc3VwcGx5IHRoZSBhc3NvY2lhdGVkIGV4aXN0aW5nVnBjJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuY2FjaGVQcm9wcyAmJlxuICAgICAgcHJvcHMuY2FjaGVQcm9wcy5lbmdpbmUgJiZcbiAgICAgIHByb3BzLmNhY2hlUHJvcHMuZW5naW5lICE9PSBcIm1lbWNhY2hlZFwiXG4gICAgKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIlRoaXMgY29uc3RydWN0IGNhbiBvbmx5IGxhdW5jaCBtZW1jYWNoZWQgY2x1c3RlcnNcIik7XG4gICAgfVxuICAgIGlmIChwcm9wcy5jYWNoZVByb3BzICYmIHByb3BzLmV4aXN0aW5nQ2FjaGUpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IHNwZWNpZnkgZXhpc3RpbmdDYWNoZSBhbmQgY2FjaGVQcm9wc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZVBvcnQgPSBnZXRDYWNoZVBvcnQocHJvcHMuY2FjaGVQcm9wcywgcHJvcHMuZXhpc3RpbmdDYWNoZSk7XG5cbiAgICB0aGlzLnZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHNjb3BlLCB7XG4gICAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRJc29sYXRlZFZwY1Byb3BzKCksXG4gICAgICBleGlzdGluZ1ZwYzogcHJvcHMuZXhpc3RpbmdWcGMsXG4gICAgICB1c2VyVnBjUHJvcHM6IHByb3BzLnZwY1Byb3BzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGFtYmRhVG9DYWNoZVNlY3VyaXR5R3JvdXAgPSBDcmVhdGVTZWxmUmVmZXJlbmNpbmdTZWN1cml0eUdyb3VwKHRoaXMsIGlkLCB0aGlzLnZwYywgY2FjaGVQb3J0KTtcblxuICAgIHRoaXMuY2FjaGUgPSBvYnRhaW5NZW1jYWNoZWRDbHVzdGVyKHRoaXMsIGlkLCB7XG4gICAgICBjYWNoZVNlY3VyaXR5R3JvdXBJZCA6IGxhbWJkYVRvQ2FjaGVTZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgIGNhY2hlUHJvcHM6IHByb3BzLmNhY2hlUHJvcHMsXG4gICAgICBleGlzdGluZ0NhY2hlOiBwcm9wcy5leGlzdGluZ0NhY2hlLFxuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGNhY2hlUG9ydCxcbiAgICB9KTtcblxuICAgIC8vIEFkZCB0aGUgc2VsZi1yZWZlcmVuY2luZyBzZWN1cml0eSBncm91cCB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uIHByb3BzXG4gICAgY29uc3QgbGFtYmRhRnVuY3Rpb25Qcm9wczogbGFtYmRhLkZ1bmN0aW9uUHJvcHMgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKFxuICAgICAge30sXG4gICAgICBwcm9wcy5sYW1iZGFGdW5jdGlvblByb3BzLFxuICAgICAgeyBzZWN1cml0eUdyb3VwczogW2xhbWJkYVRvQ2FjaGVTZWN1cml0eUdyb3VwXSB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICAvLyBTZXR1cCB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbiA9IGRlZmF1bHRzLmJ1aWxkTGFtYmRhRnVuY3Rpb24odGhpcywge1xuICAgICAgZXhpc3RpbmdMYW1iZGFPYmo6IHByb3BzLmV4aXN0aW5nTGFtYmRhT2JqLFxuICAgICAgbGFtYmRhRnVuY3Rpb25Qcm9wcyxcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgfSk7XG5cbiAgICBBZGRMYW1iZGFFbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgICAgdGhpcy5sYW1iZGFGdW5jdGlvbixcbiAgICAgIGAke3RoaXMuY2FjaGUuYXR0ckNvbmZpZ3VyYXRpb25FbmRwb2ludEFkZHJlc3N9OiR7dGhpcy5jYWNoZS5hdHRyQ29uZmlndXJhdGlvbkVuZHBvaW50UG9ydH1gLFxuICAgICAgZGVmYXVsdEVudmlyb25tZW50VmFyaWFibGVOYW1lLFxuICAgICAgcHJvcHMuY2FjaGVFbmRwb2ludEVudmlyb25tZW50VmFyaWFibGVOYW1lXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBBZGRMYW1iZGFFbnZpcm9ubWVudFZhcmlhYmxlKHRhcmdldEZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb24sIHZhbHVlOiBzdHJpbmcsIGRlZmF1bHROYW1lOiBzdHJpbmcsIGNsaWVudE5hbWU/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gY2xpZW50TmFtZSB8fCBkZWZhdWx0TmFtZTtcbiAgdGFyZ2V0RnVuY3Rpb24uYWRkRW52aXJvbm1lbnQodmFyaWFibGVOYW1lLCB2YWx1ZSk7XG59XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSx1Q0FBdUM7QUFDdkMsMkNBQXVDO0FBQ3ZDLHFDQUFzRztBQUV0RyxNQUFNLDhCQUE4QixHQUFHLGdCQUFnQixDQUFDO0FBb0R4RDs7R0FFRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFLekQ7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBd0M7UUFFeEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzVFLE1BQU0sS0FBSyxDQUFDLG9HQUFvRyxDQUFDLENBQUM7U0FDbkg7UUFFRCxJQUNFLEtBQUssQ0FBQyxVQUFVO1lBQ2hCLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUN2QixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQ3ZDO1lBQ0EsTUFBTSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUNsRTtRQUNELElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzNDLE1BQU0sS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxNQUFNLFNBQVMsR0FBRyxtQkFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDbEMsZUFBZSxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtZQUNuRCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQzdCLENBQUMsQ0FBQztRQUVILE1BQU0sMEJBQTBCLEdBQUcseUNBQWtDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXJHLElBQUksQ0FBQyxLQUFLLEdBQUcsNkJBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxvQkFBb0IsRUFBRywwQkFBMEIsQ0FBQyxlQUFlO1lBQ2pFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsU0FBUztTQUNWLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxNQUFNLG1CQUFtQixHQUF5QixRQUFRLENBQUMsZ0JBQWdCLENBQ3pFLEVBQUUsRUFDRixLQUFLLENBQUMsbUJBQW1CLEVBQ3pCLEVBQUUsY0FBYyxFQUFFLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUNoRCxJQUFJLENBQ0wsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxtQkFBbUI7WUFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsNEJBQTRCLENBQzFCLElBQUksQ0FBQyxjQUFjLEVBQ25CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQzVGLDhCQUE4QixFQUM5QixLQUFLLENBQUMsb0NBQW9DLENBQzNDLENBQUM7SUFDSixDQUFDOztBQTNFSCxvRUE0RUM7OztBQUVELFNBQVMsNEJBQTRCLENBQUMsY0FBK0IsRUFBRSxLQUFhLEVBQUUsV0FBbUIsRUFBRSxVQUFtQjtJQUM1SCxNQUFNLFlBQVksR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDO0lBQy9DLGNBQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgY2FjaGUgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljYWNoZVwiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIi4uLy4uL2NvcmVcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBvYnRhaW5NZW1jYWNoZWRDbHVzdGVyLCBnZXRDYWNoZVBvcnQsIENyZWF0ZVNlbGZSZWZlcmVuY2luZ1NlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vLi4vY29yZVwiO1xuXG5jb25zdCBkZWZhdWx0RW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSBcIkNBQ0hFX0VORFBPSU5UXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWRQcm9wcyB7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBMYW1iZGEgRnVuY3Rpb24gb2JqZWN0LCBwcm92aWRpbmcgYm90aCB0aGlzIGFuZCBgbGFtYmRhRnVuY3Rpb25Qcm9wc2Agd2lsbCBjYXVzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ0xhbWJkYU9iaj86IGxhbWJkYS5GdW5jdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb25Qcm9wcz86IGxhbWJkYS5GdW5jdGlvblByb3BzO1xuICAvKipcbiAgICogQW4gZXhpc3RpbmcgVlBDIGZvciB0aGUgY29uc3RydWN0IHRvIHVzZSAoY29uc3RydWN0IHdpbGwgTk9UIGNyZWF0ZSBhIG5ldyBWUEMgaW4gdGhpcyBjYXNlKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nVnBjPzogZWMyLklWcGM7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIGRlZmF1bHQgcHJvcGVydGllcyBpZiBkZXBsb3lWcGMgaXMgdHJ1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRJc29sYXRlZFZwY1Byb3BzKCkgaW4gdnBjLWRlZmF1bHRzLnRzXG4gICAqL1xuICByZWFkb25seSB2cGNQcm9wcz86IGVjMi5WcGNQcm9wcztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE5hbWUgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHRoZSBjYWNoZSBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDQUNIRV9FTkRQT0lOVFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVFbmRwb2ludEVudmlyb25tZW50VmFyaWFibGVOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIEVsYXN0aWNhY2hlIGNhY2hlLlxuICAgKiBQcm92aWRpbmcgYm90aCB0aGlzIGFuZCBgZXhpc3RpbmdDYWNoZWAgd2lsbCBjYXVzZSBhbiBlcnJvci4gIElmIHlvdSBwcm92aWRlIHRoaXMsXG4gICAqIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGFzc29jaWF0ZWQgVlBDIGluIGV4aXN0aW5nVnBjLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcGVydGllcyBhcmUgdXNlZCAoY29yZS9saWIvZWxhc3RpY2FjYWhlLWRlZmF1bHRzLnRzKVxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQcm9wcz86IGNhY2hlLkNmbkNhY2hlQ2x1c3RlclByb3BzIHwgYW55O1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgRWxhc3RpY2FjaGUgQ2x1c3RlciBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIGBjYWNoZVByb3BzYCB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nQ2FjaGU/OiBjYWNoZS5DZm5DYWNoZUNsdXN0ZXI7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FjaGU6IGNhY2hlLkNmbkNhY2hlQ2x1c3RlcjtcblxuICAvKipcbiAgICogQHN1bW1hcnkgQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZCBjbGFzcy5cbiAgICogQHBhcmFtIHtjZGsuQXBwfSBzY29wZSAtIHJlcHJlc2VudHMgdGhlIHNjb3BlIGZvciBhbGwgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gdGhpcyBpcyBhIGEgc2NvcGUtdW5pcXVlIGlkLlxuICAgKiBAcGFyYW0ge0xhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWRQcm9wc30gcHJvcHMgLSB1c2VyIHByb3ZpZGVkIHByb3BzIGZvciB0aGUgY29uc3RydWN0LlxuICAgKiBAYWNjZXNzIHB1YmxpY1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBkZWZhdWx0cy5DaGVja1ZwY1Byb3BzKHByb3BzKTtcbiAgICBkZWZhdWx0cy5DaGVja0xhbWJkYVByb3BzKHByb3BzKTtcblxuICAgIGlmICgocHJvcHMuZXhpc3RpbmdDYWNoZSB8fCBwcm9wcy5leGlzdGluZ0xhbWJkYU9iaikgJiYgKCFwcm9wcy5leGlzdGluZ1ZwYykpIHtcbiAgICAgIHRocm93IEVycm9yKCdJZiBwcm92aWRpbmcgYW4gZXhpc3RpbmcgQ2FjaGUgb3IgTGFtYmRhIEZ1bmN0aW9uLCB5b3UgbXVzdCBhbHNvIHN1cHBseSB0aGUgYXNzb2NpYXRlZCBleGlzdGluZ1ZwYycpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmNhY2hlUHJvcHMgJiZcbiAgICAgIHByb3BzLmNhY2hlUHJvcHMuZW5naW5lICYmXG4gICAgICBwcm9wcy5jYWNoZVByb3BzLmVuZ2luZSAhPT0gXCJtZW1jYWNoZWRcIlxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUaGlzIGNvbnN0cnVjdCBjYW4gb25seSBsYXVuY2ggbWVtY2FjaGVkIGNsdXN0ZXJzXCIpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuY2FjaGVQcm9wcyAmJiBwcm9wcy5leGlzdGluZ0NhY2hlKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGV4aXN0aW5nQ2FjaGUgYW5kIGNhY2hlUHJvcHNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVQb3J0ID0gZ2V0Q2FjaGVQb3J0KHByb3BzLmNhY2hlUHJvcHMsIHByb3BzLmV4aXN0aW5nQ2FjaGUpO1xuXG4gICAgdGhpcy52cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzY29wZSwge1xuICAgICAgZGVmYXVsdFZwY1Byb3BzOiBkZWZhdWx0cy5EZWZhdWx0SXNvbGF0ZWRWcGNQcm9wcygpLFxuICAgICAgZXhpc3RpbmdWcGM6IHByb3BzLmV4aXN0aW5nVnBjLFxuICAgICAgdXNlclZwY1Byb3BzOiBwcm9wcy52cGNQcm9wcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxhbWJkYVRvQ2FjaGVTZWN1cml0eUdyb3VwID0gQ3JlYXRlU2VsZlJlZmVyZW5jaW5nU2VjdXJpdHlHcm91cCh0aGlzLCBpZCwgdGhpcy52cGMsIGNhY2hlUG9ydCk7XG5cbiAgICB0aGlzLmNhY2hlID0gb2J0YWluTWVtY2FjaGVkQ2x1c3Rlcih0aGlzLCBpZCwge1xuICAgICAgY2FjaGVTZWN1cml0eUdyb3VwSWQgOiBsYW1iZGFUb0NhY2hlU2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQsXG4gICAgICBjYWNoZVByb3BzOiBwcm9wcy5jYWNoZVByb3BzLFxuICAgICAgZXhpc3RpbmdDYWNoZTogcHJvcHMuZXhpc3RpbmdDYWNoZSxcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBjYWNoZVBvcnQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHNlbGYtcmVmZXJlbmNpbmcgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIExhbWJkYSBmdW5jdGlvbiBwcm9wc1xuICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9uUHJvcHM6IGxhbWJkYS5GdW5jdGlvblByb3BzID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhcbiAgICAgIHt9LFxuICAgICAgcHJvcHMubGFtYmRhRnVuY3Rpb25Qcm9wcyxcbiAgICAgIHsgc2VjdXJpdHlHcm91cHM6IFtsYW1iZGFUb0NhY2hlU2VjdXJpdHlHcm91cF0gfSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgLy8gU2V0dXAgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBkZWZhdWx0cy5idWlsZExhbWJkYUZ1bmN0aW9uKHRoaXMsIHtcbiAgICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBwcm9wcy5leGlzdGluZ0xhbWJkYU9iaixcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHMsXG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgIH0pO1xuXG4gICAgQWRkTGFtYmRhRW52aXJvbm1lbnRWYXJpYWJsZShcbiAgICAgIHRoaXMubGFtYmRhRnVuY3Rpb24sXG4gICAgICBgJHt0aGlzLmNhY2hlLmF0dHJDb25maWd1cmF0aW9uRW5kcG9pbnRBZGRyZXNzfToke3RoaXMuY2FjaGUuYXR0ckNvbmZpZ3VyYXRpb25FbmRwb2ludFBvcnR9YCxcbiAgICAgIGRlZmF1bHRFbnZpcm9ubWVudFZhcmlhYmxlTmFtZSxcbiAgICAgIHByb3BzLmNhY2hlRW5kcG9pbnRFbnZpcm9ubWVudFZhcmlhYmxlTmFtZVxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gQWRkTGFtYmRhRW52aXJvbm1lbnRWYXJpYWJsZSh0YXJnZXRGdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uLCB2YWx1ZTogc3RyaW5nLCBkZWZhdWx0TmFtZTogc3RyaW5nLCBjbGllbnROYW1lPzogc3RyaW5nKSB7XG4gIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGNsaWVudE5hbWUgfHwgZGVmYXVsdE5hbWU7XG4gIHRhcmdldEZ1bmN0aW9uLmFkZEVudmlyb25tZW50KHZhcmlhYmxlTmFtZSwgdmFsdWUpO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/aws-lambda-elasticachememcached",
3
- "version": "2.43.1",
3
+ "version": "2.45.0",
4
4
  "description": "CDK constructs for defining an interaction between an AWS Lambda function and an Amazon Elasticache memcached cache.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -53,12 +53,12 @@
53
53
  }
54
54
  },
55
55
  "dependencies": {
56
- "@aws-solutions-constructs/core": "2.43.1"
56
+ "@aws-solutions-constructs/core": "2.45.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/jest": "^27.4.0",
60
60
  "@types/node": "^10.3.0",
61
- "aws-cdk-lib": "2.82.0",
61
+ "aws-cdk-lib": "2.99.1",
62
62
  "constructs": "^10.0.0"
63
63
  },
64
64
  "jest": {
@@ -76,8 +76,8 @@
76
76
  ]
77
77
  },
78
78
  "peerDependencies": {
79
- "@aws-solutions-constructs/core": "2.43.1",
80
- "aws-cdk-lib": "^2.82.0",
79
+ "@aws-solutions-constructs/core": "2.45.0",
80
+ "aws-cdk-lib": "^2.99.1",
81
81
  "constructs": "^10.0.0"
82
82
  },
83
83
  "keywords": [
@@ -19,9 +19,6 @@
19
19
  "VpcisolatedSubnet1SubnetE62B1B9B": {
20
20
  "Type": "AWS::EC2::Subnet",
21
21
  "Properties": {
22
- "VpcId": {
23
- "Ref": "Vpc8378EB38"
24
- },
25
22
  "AvailabilityZone": "test-region-1a",
26
23
  "CidrBlock": "172.168.0.0/18",
27
24
  "MapPublicIpOnLaunch": false,
@@ -38,21 +35,24 @@
38
35
  "Key": "Name",
39
36
  "Value": "existingResources/Vpc/isolatedSubnet1"
40
37
  }
41
- ]
38
+ ],
39
+ "VpcId": {
40
+ "Ref": "Vpc8378EB38"
41
+ }
42
42
  }
43
43
  },
44
44
  "VpcisolatedSubnet1RouteTableE442650B": {
45
45
  "Type": "AWS::EC2::RouteTable",
46
46
  "Properties": {
47
- "VpcId": {
48
- "Ref": "Vpc8378EB38"
49
- },
50
47
  "Tags": [
51
48
  {
52
49
  "Key": "Name",
53
50
  "Value": "existingResources/Vpc/isolatedSubnet1"
54
51
  }
55
- ]
52
+ ],
53
+ "VpcId": {
54
+ "Ref": "Vpc8378EB38"
55
+ }
56
56
  }
57
57
  },
58
58
  "VpcisolatedSubnet1RouteTableAssociationD259E31A": {
@@ -69,9 +69,6 @@
69
69
  "VpcisolatedSubnet2Subnet39217055": {
70
70
  "Type": "AWS::EC2::Subnet",
71
71
  "Properties": {
72
- "VpcId": {
73
- "Ref": "Vpc8378EB38"
74
- },
75
72
  "AvailabilityZone": "test-region-1b",
76
73
  "CidrBlock": "172.168.64.0/18",
77
74
  "MapPublicIpOnLaunch": false,
@@ -88,21 +85,24 @@
88
85
  "Key": "Name",
89
86
  "Value": "existingResources/Vpc/isolatedSubnet2"
90
87
  }
91
- ]
88
+ ],
89
+ "VpcId": {
90
+ "Ref": "Vpc8378EB38"
91
+ }
92
92
  }
93
93
  },
94
94
  "VpcisolatedSubnet2RouteTable334F9764": {
95
95
  "Type": "AWS::EC2::RouteTable",
96
96
  "Properties": {
97
- "VpcId": {
98
- "Ref": "Vpc8378EB38"
99
- },
100
97
  "Tags": [
101
98
  {
102
99
  "Key": "Name",
103
100
  "Value": "existingResources/Vpc/isolatedSubnet2"
104
101
  }
105
- ]
102
+ ],
103
+ "VpcId": {
104
+ "Ref": "Vpc8378EB38"
105
+ }
106
106
  }
107
107
  },
108
108
  "VpcisolatedSubnet2RouteTableAssociation25A4716F": {
@@ -119,9 +119,6 @@
119
119
  "VpcisolatedSubnet3Subnet44F2537D": {
120
120
  "Type": "AWS::EC2::Subnet",
121
121
  "Properties": {
122
- "VpcId": {
123
- "Ref": "Vpc8378EB38"
124
- },
125
122
  "AvailabilityZone": "test-region-1c",
126
123
  "CidrBlock": "172.168.128.0/18",
127
124
  "MapPublicIpOnLaunch": false,
@@ -138,21 +135,24 @@
138
135
  "Key": "Name",
139
136
  "Value": "existingResources/Vpc/isolatedSubnet3"
140
137
  }
141
- ]
138
+ ],
139
+ "VpcId": {
140
+ "Ref": "Vpc8378EB38"
141
+ }
142
142
  }
143
143
  },
144
144
  "VpcisolatedSubnet3RouteTableA2F6BBC0": {
145
145
  "Type": "AWS::EC2::RouteTable",
146
146
  "Properties": {
147
- "VpcId": {
148
- "Ref": "Vpc8378EB38"
149
- },
150
147
  "Tags": [
151
148
  {
152
149
  "Key": "Name",
153
150
  "Value": "existingResources/Vpc/isolatedSubnet3"
154
151
  }
155
- ]
152
+ ],
153
+ "VpcId": {
154
+ "Ref": "Vpc8378EB38"
155
+ }
156
156
  }
157
157
  },
158
158
  "VpcisolatedSubnet3RouteTableAssociationDC010BEB": {
@@ -184,7 +184,7 @@
184
184
  "Tags": [
185
185
  {
186
186
  "Key": "Name",
187
- "Value": "existingResources/Vpc"
187
+ "Value": "existingResources/Vpc/FlowLog"
188
188
  }
189
189
  ]
190
190
  }
@@ -236,7 +236,7 @@
236
236
  "Tags": [
237
237
  {
238
238
  "Key": "Name",
239
- "Value": "existingResources/Vpc"
239
+ "Value": "existingResources/Vpc/FlowLog"
240
240
  }
241
241
  ]
242
242
  },
@@ -256,11 +256,6 @@
256
256
  "VpcFlowLog8FF33A73": {
257
257
  "Type": "AWS::EC2::FlowLog",
258
258
  "Properties": {
259
- "ResourceId": {
260
- "Ref": "Vpc8378EB38"
261
- },
262
- "ResourceType": "VPC",
263
- "TrafficType": "ALL",
264
259
  "DeliverLogsPermissionArn": {
265
260
  "Fn::GetAtt": [
266
261
  "VpcFlowLogIAMRole6A475D41",
@@ -271,12 +266,17 @@
271
266
  "LogGroupName": {
272
267
  "Ref": "VpcFlowLogLogGroup7B5C56B9"
273
268
  },
269
+ "ResourceId": {
270
+ "Ref": "Vpc8378EB38"
271
+ },
272
+ "ResourceType": "VPC",
274
273
  "Tags": [
275
274
  {
276
275
  "Key": "Name",
277
- "Value": "existingResources/Vpc"
276
+ "Value": "existingResources/Vpc/FlowLog"
278
277
  }
279
- ]
278
+ ],
279
+ "TrafficType": "ALL"
280
280
  }
281
281
  },
282
282
  "testsgsecuritygroup89DCF621": {
@@ -366,12 +366,6 @@
366
366
  },
367
367
  "S3Key": "c1b23d6af38c04acb744bda25a3dc7f4394daea942c67eaff40911a707a3c37a.zip"
368
368
  },
369
- "Role": {
370
- "Fn::GetAtt": [
371
- "testfunctionServiceRoleFB85AD63",
372
- "Arn"
373
- ]
374
- },
375
369
  "Environment": {
376
370
  "Variables": {
377
371
  "CACHE_ENDPOINT": {
@@ -397,6 +391,12 @@
397
391
  }
398
392
  },
399
393
  "Handler": "index.handler",
394
+ "Role": {
395
+ "Fn::GetAtt": [
396
+ "testfunctionServiceRoleFB85AD63",
397
+ "Arn"
398
+ ]
399
+ },
400
400
  "Runtime": "nodejs16.x",
401
401
  "VpcConfig": {
402
402
  "SecurityGroupIds": [
@@ -450,6 +450,7 @@
450
450
  "ecsubnetgrouptestcache": {
451
451
  "Type": "AWS::ElastiCache::SubnetGroup",
452
452
  "Properties": {
453
+ "CacheSubnetGroupName": "test-cache-subnet-group",
453
454
  "Description": "Solutions Constructs generated Cache Subnet Group",
454
455
  "SubnetIds": [
455
456
  {
@@ -461,8 +462,7 @@
461
462
  {
462
463
  "Ref": "VpcisolatedSubnet3Subnet44F2537D"
463
464
  }
464
- ],
465
- "CacheSubnetGroupName": "test-cache-subnet-group"
465
+ ]
466
466
  }
467
467
  },
468
468
  "testcachecachesg7265880E": {
@@ -502,12 +502,12 @@
502
502
  "testcachecluster": {
503
503
  "Type": "AWS::ElastiCache::CacheCluster",
504
504
  "Properties": {
505
- "CacheNodeType": "cache.t3.medium",
506
- "Engine": "memcached",
507
- "NumCacheNodes": 2,
508
505
  "AZMode": "cross-az",
506
+ "CacheNodeType": "cache.t3.medium",
509
507
  "CacheSubnetGroupName": "test-cache-subnet-group",
510
508
  "ClusterName": "test-cache-cdk-cluster",
509
+ "Engine": "memcached",
510
+ "NumCacheNodes": 2,
511
511
  "Port": 11222,
512
512
  "VpcSecurityGroupIds": [
513
513
  {
@@ -561,7 +561,6 @@
561
561
  "testtestingress291C0179": {
562
562
  "Type": "AWS::EC2::SecurityGroupIngress",
563
563
  "Properties": {
564
- "IpProtocol": "TCP",
565
564
  "Description": "Self referencing rule to control access to Elasticache memcached cluster",
566
565
  "FromPort": {
567
566
  "Fn::GetAtt": [
@@ -575,6 +574,7 @@
575
574
  "GroupId"
576
575
  ]
577
576
  },
577
+ "IpProtocol": "TCP",
578
578
  "SourceSecurityGroupId": {
579
579
  "Fn::GetAtt": [
580
580
  "testtestcachesg9F6CF9E2",
@@ -34,7 +34,6 @@
34
34
  "testtestingress291C0179": {
35
35
  "Type": "AWS::EC2::SecurityGroupIngress",
36
36
  "Properties": {
37
- "IpProtocol": "TCP",
38
37
  "Description": "Self referencing rule to control access to Elasticache memcached cluster",
39
38
  "FromPort": 11222,
40
39
  "GroupId": {
@@ -43,6 +42,7 @@
43
42
  "GroupId"
44
43
  ]
45
44
  },
45
+ "IpProtocol": "TCP",
46
46
  "SourceSecurityGroupId": {
47
47
  "Fn::GetAtt": [
48
48
  "testtestcachesg9F6CF9E2",
@@ -58,6 +58,7 @@
58
58
  "testecsubnetgrouptest868C53AE": {
59
59
  "Type": "AWS::ElastiCache::SubnetGroup",
60
60
  "Properties": {
61
+ "CacheSubnetGroupName": "test-subnet-group",
61
62
  "Description": "Solutions Constructs generated Cache Subnet Group",
62
63
  "SubnetIds": [
63
64
  {
@@ -69,19 +70,18 @@
69
70
  {
70
71
  "Ref": "VpcisolatedSubnet3Subnet44F2537D"
71
72
  }
72
- ],
73
- "CacheSubnetGroupName": "test-subnet-group"
73
+ ]
74
74
  }
75
75
  },
76
76
  "testtestcluster57FB8D14": {
77
77
  "Type": "AWS::ElastiCache::CacheCluster",
78
78
  "Properties": {
79
- "CacheNodeType": "cache.t3.medium",
80
- "Engine": "memcached",
81
- "NumCacheNodes": 2,
82
79
  "AZMode": "cross-az",
80
+ "CacheNodeType": "cache.t3.medium",
83
81
  "CacheSubnetGroupName": "test-subnet-group",
84
82
  "ClusterName": "test-cdk-cluster",
83
+ "Engine": "memcached",
84
+ "NumCacheNodes": 2,
85
85
  "Port": 11222,
86
86
  "VpcSecurityGroupIds": [
87
87
  {
@@ -235,12 +235,6 @@
235
235
  },
236
236
  "S3Key": "c1b23d6af38c04acb744bda25a3dc7f4394daea942c67eaff40911a707a3c37a.zip"
237
237
  },
238
- "Role": {
239
- "Fn::GetAtt": [
240
- "testLambdaFunctionServiceRoleA03EDA2B",
241
- "Arn"
242
- ]
243
- },
244
238
  "Environment": {
245
239
  "Variables": {
246
240
  "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1",
@@ -267,6 +261,12 @@
267
261
  }
268
262
  },
269
263
  "Handler": "index.handler",
264
+ "Role": {
265
+ "Fn::GetAtt": [
266
+ "testLambdaFunctionServiceRoleA03EDA2B",
267
+ "Arn"
268
+ ]
269
+ },
270
270
  "Runtime": "nodejs16.x",
271
271
  "TracingConfig": {
272
272
  "Mode": "Active"
@@ -343,9 +343,6 @@
343
343
  "VpcisolatedSubnet1SubnetE62B1B9B": {
344
344
  "Type": "AWS::EC2::Subnet",
345
345
  "Properties": {
346
- "VpcId": {
347
- "Ref": "Vpc8378EB38"
348
- },
349
346
  "AvailabilityZone": "test-region-1a",
350
347
  "CidrBlock": "10.0.0.0/18",
351
348
  "MapPublicIpOnLaunch": false,
@@ -362,21 +359,24 @@
362
359
  "Key": "Name",
363
360
  "Value": "newResources/Vpc/isolatedSubnet1"
364
361
  }
365
- ]
362
+ ],
363
+ "VpcId": {
364
+ "Ref": "Vpc8378EB38"
365
+ }
366
366
  }
367
367
  },
368
368
  "VpcisolatedSubnet1RouteTableE442650B": {
369
369
  "Type": "AWS::EC2::RouteTable",
370
370
  "Properties": {
371
- "VpcId": {
372
- "Ref": "Vpc8378EB38"
373
- },
374
371
  "Tags": [
375
372
  {
376
373
  "Key": "Name",
377
374
  "Value": "newResources/Vpc/isolatedSubnet1"
378
375
  }
379
- ]
376
+ ],
377
+ "VpcId": {
378
+ "Ref": "Vpc8378EB38"
379
+ }
380
380
  }
381
381
  },
382
382
  "VpcisolatedSubnet1RouteTableAssociationD259E31A": {
@@ -393,9 +393,6 @@
393
393
  "VpcisolatedSubnet2Subnet39217055": {
394
394
  "Type": "AWS::EC2::Subnet",
395
395
  "Properties": {
396
- "VpcId": {
397
- "Ref": "Vpc8378EB38"
398
- },
399
396
  "AvailabilityZone": "test-region-1b",
400
397
  "CidrBlock": "10.0.64.0/18",
401
398
  "MapPublicIpOnLaunch": false,
@@ -412,21 +409,24 @@
412
409
  "Key": "Name",
413
410
  "Value": "newResources/Vpc/isolatedSubnet2"
414
411
  }
415
- ]
412
+ ],
413
+ "VpcId": {
414
+ "Ref": "Vpc8378EB38"
415
+ }
416
416
  }
417
417
  },
418
418
  "VpcisolatedSubnet2RouteTable334F9764": {
419
419
  "Type": "AWS::EC2::RouteTable",
420
420
  "Properties": {
421
- "VpcId": {
422
- "Ref": "Vpc8378EB38"
423
- },
424
421
  "Tags": [
425
422
  {
426
423
  "Key": "Name",
427
424
  "Value": "newResources/Vpc/isolatedSubnet2"
428
425
  }
429
- ]
426
+ ],
427
+ "VpcId": {
428
+ "Ref": "Vpc8378EB38"
429
+ }
430
430
  }
431
431
  },
432
432
  "VpcisolatedSubnet2RouteTableAssociation25A4716F": {
@@ -443,9 +443,6 @@
443
443
  "VpcisolatedSubnet3Subnet44F2537D": {
444
444
  "Type": "AWS::EC2::Subnet",
445
445
  "Properties": {
446
- "VpcId": {
447
- "Ref": "Vpc8378EB38"
448
- },
449
446
  "AvailabilityZone": "test-region-1c",
450
447
  "CidrBlock": "10.0.128.0/18",
451
448
  "MapPublicIpOnLaunch": false,
@@ -462,21 +459,24 @@
462
459
  "Key": "Name",
463
460
  "Value": "newResources/Vpc/isolatedSubnet3"
464
461
  }
465
- ]
462
+ ],
463
+ "VpcId": {
464
+ "Ref": "Vpc8378EB38"
465
+ }
466
466
  }
467
467
  },
468
468
  "VpcisolatedSubnet3RouteTableA2F6BBC0": {
469
469
  "Type": "AWS::EC2::RouteTable",
470
470
  "Properties": {
471
- "VpcId": {
472
- "Ref": "Vpc8378EB38"
473
- },
474
471
  "Tags": [
475
472
  {
476
473
  "Key": "Name",
477
474
  "Value": "newResources/Vpc/isolatedSubnet3"
478
475
  }
479
- ]
476
+ ],
477
+ "VpcId": {
478
+ "Ref": "Vpc8378EB38"
479
+ }
480
480
  }
481
481
  },
482
482
  "VpcisolatedSubnet3RouteTableAssociationDC010BEB": {
@@ -508,7 +508,7 @@
508
508
  "Tags": [
509
509
  {
510
510
  "Key": "Name",
511
- "Value": "newResources/Vpc"
511
+ "Value": "newResources/Vpc/FlowLog"
512
512
  }
513
513
  ]
514
514
  }
@@ -560,7 +560,7 @@
560
560
  "Tags": [
561
561
  {
562
562
  "Key": "Name",
563
- "Value": "newResources/Vpc"
563
+ "Value": "newResources/Vpc/FlowLog"
564
564
  }
565
565
  ]
566
566
  },
@@ -580,11 +580,6 @@
580
580
  "VpcFlowLog8FF33A73": {
581
581
  "Type": "AWS::EC2::FlowLog",
582
582
  "Properties": {
583
- "ResourceId": {
584
- "Ref": "Vpc8378EB38"
585
- },
586
- "ResourceType": "VPC",
587
- "TrafficType": "ALL",
588
583
  "DeliverLogsPermissionArn": {
589
584
  "Fn::GetAtt": [
590
585
  "VpcFlowLogIAMRole6A475D41",
@@ -595,12 +590,17 @@
595
590
  "LogGroupName": {
596
591
  "Ref": "VpcFlowLogLogGroup7B5C56B9"
597
592
  },
593
+ "ResourceId": {
594
+ "Ref": "Vpc8378EB38"
595
+ },
596
+ "ResourceType": "VPC",
598
597
  "Tags": [
599
598
  {
600
599
  "Key": "Name",
601
- "Value": "newResources/Vpc"
600
+ "Value": "newResources/Vpc/FlowLog"
602
601
  }
603
- ]
602
+ ],
603
+ "TrafficType": "ALL"
604
604
  }
605
605
  }
606
606
  },
@@ -34,7 +34,6 @@
34
34
  "testtestingress291C0179": {
35
35
  "Type": "AWS::EC2::SecurityGroupIngress",
36
36
  "Properties": {
37
- "IpProtocol": "TCP",
38
37
  "Description": "Self referencing rule to control access to Elasticache memcached cluster",
39
38
  "FromPort": 11222,
40
39
  "GroupId": {
@@ -43,6 +42,7 @@
43
42
  "GroupId"
44
43
  ]
45
44
  },
45
+ "IpProtocol": "TCP",
46
46
  "SourceSecurityGroupId": {
47
47
  "Fn::GetAtt": [
48
48
  "testtestcachesg9F6CF9E2",
@@ -58,6 +58,7 @@
58
58
  "testecsubnetgrouptest868C53AE": {
59
59
  "Type": "AWS::ElastiCache::SubnetGroup",
60
60
  "Properties": {
61
+ "CacheSubnetGroupName": "test-subnet-group",
61
62
  "Description": "Solutions Constructs generated Cache Subnet Group",
62
63
  "SubnetIds": [
63
64
  {
@@ -69,19 +70,18 @@
69
70
  {
70
71
  "Ref": "VpcisolatedSubnet3Subnet44F2537D"
71
72
  }
72
- ],
73
- "CacheSubnetGroupName": "test-subnet-group"
73
+ ]
74
74
  }
75
75
  },
76
76
  "testtestcluster57FB8D14": {
77
77
  "Type": "AWS::ElastiCache::CacheCluster",
78
78
  "Properties": {
79
- "CacheNodeType": "cache.t3.medium",
80
- "Engine": "memcached",
81
- "NumCacheNodes": 2,
82
79
  "AZMode": "single-az",
80
+ "CacheNodeType": "cache.t3.medium",
83
81
  "CacheSubnetGroupName": "test-subnet-group",
84
82
  "ClusterName": "test-cdk-cluster",
83
+ "Engine": "memcached",
84
+ "NumCacheNodes": 2,
85
85
  "Port": 11222,
86
86
  "VpcSecurityGroupIds": [
87
87
  {
@@ -235,12 +235,6 @@
235
235
  },
236
236
  "S3Key": "c1b23d6af38c04acb744bda25a3dc7f4394daea942c67eaff40911a707a3c37a.zip"
237
237
  },
238
- "Role": {
239
- "Fn::GetAtt": [
240
- "testLambdaFunctionServiceRoleA03EDA2B",
241
- "Arn"
242
- ]
243
- },
244
238
  "Environment": {
245
239
  "Variables": {
246
240
  "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1",
@@ -267,6 +261,12 @@
267
261
  }
268
262
  },
269
263
  "Handler": "index.handler",
264
+ "Role": {
265
+ "Fn::GetAtt": [
266
+ "testLambdaFunctionServiceRoleA03EDA2B",
267
+ "Arn"
268
+ ]
269
+ },
270
270
  "Runtime": "nodejs16.x",
271
271
  "TracingConfig": {
272
272
  "Mode": "Active"
@@ -343,9 +343,6 @@
343
343
  "VpcisolatedSubnet1SubnetE62B1B9B": {
344
344
  "Type": "AWS::EC2::Subnet",
345
345
  "Properties": {
346
- "VpcId": {
347
- "Ref": "Vpc8378EB38"
348
- },
349
346
  "AvailabilityZone": "test-region-1a",
350
347
  "CidrBlock": "192.68.0.0/18",
351
348
  "MapPublicIpOnLaunch": false,
@@ -362,21 +359,24 @@
362
359
  "Key": "Name",
363
360
  "Value": "withClientProps/Vpc/isolatedSubnet1"
364
361
  }
365
- ]
362
+ ],
363
+ "VpcId": {
364
+ "Ref": "Vpc8378EB38"
365
+ }
366
366
  }
367
367
  },
368
368
  "VpcisolatedSubnet1RouteTableE442650B": {
369
369
  "Type": "AWS::EC2::RouteTable",
370
370
  "Properties": {
371
- "VpcId": {
372
- "Ref": "Vpc8378EB38"
373
- },
374
371
  "Tags": [
375
372
  {
376
373
  "Key": "Name",
377
374
  "Value": "withClientProps/Vpc/isolatedSubnet1"
378
375
  }
379
- ]
376
+ ],
377
+ "VpcId": {
378
+ "Ref": "Vpc8378EB38"
379
+ }
380
380
  }
381
381
  },
382
382
  "VpcisolatedSubnet1RouteTableAssociationD259E31A": {
@@ -393,9 +393,6 @@
393
393
  "VpcisolatedSubnet2Subnet39217055": {
394
394
  "Type": "AWS::EC2::Subnet",
395
395
  "Properties": {
396
- "VpcId": {
397
- "Ref": "Vpc8378EB38"
398
- },
399
396
  "AvailabilityZone": "test-region-1b",
400
397
  "CidrBlock": "192.68.64.0/18",
401
398
  "MapPublicIpOnLaunch": false,
@@ -412,21 +409,24 @@
412
409
  "Key": "Name",
413
410
  "Value": "withClientProps/Vpc/isolatedSubnet2"
414
411
  }
415
- ]
412
+ ],
413
+ "VpcId": {
414
+ "Ref": "Vpc8378EB38"
415
+ }
416
416
  }
417
417
  },
418
418
  "VpcisolatedSubnet2RouteTable334F9764": {
419
419
  "Type": "AWS::EC2::RouteTable",
420
420
  "Properties": {
421
- "VpcId": {
422
- "Ref": "Vpc8378EB38"
423
- },
424
421
  "Tags": [
425
422
  {
426
423
  "Key": "Name",
427
424
  "Value": "withClientProps/Vpc/isolatedSubnet2"
428
425
  }
429
- ]
426
+ ],
427
+ "VpcId": {
428
+ "Ref": "Vpc8378EB38"
429
+ }
430
430
  }
431
431
  },
432
432
  "VpcisolatedSubnet2RouteTableAssociation25A4716F": {
@@ -443,9 +443,6 @@
443
443
  "VpcisolatedSubnet3Subnet44F2537D": {
444
444
  "Type": "AWS::EC2::Subnet",
445
445
  "Properties": {
446
- "VpcId": {
447
- "Ref": "Vpc8378EB38"
448
- },
449
446
  "AvailabilityZone": "test-region-1c",
450
447
  "CidrBlock": "192.68.128.0/18",
451
448
  "MapPublicIpOnLaunch": false,
@@ -462,21 +459,24 @@
462
459
  "Key": "Name",
463
460
  "Value": "withClientProps/Vpc/isolatedSubnet3"
464
461
  }
465
- ]
462
+ ],
463
+ "VpcId": {
464
+ "Ref": "Vpc8378EB38"
465
+ }
466
466
  }
467
467
  },
468
468
  "VpcisolatedSubnet3RouteTableA2F6BBC0": {
469
469
  "Type": "AWS::EC2::RouteTable",
470
470
  "Properties": {
471
- "VpcId": {
472
- "Ref": "Vpc8378EB38"
473
- },
474
471
  "Tags": [
475
472
  {
476
473
  "Key": "Name",
477
474
  "Value": "withClientProps/Vpc/isolatedSubnet3"
478
475
  }
479
- ]
476
+ ],
477
+ "VpcId": {
478
+ "Ref": "Vpc8378EB38"
479
+ }
480
480
  }
481
481
  },
482
482
  "VpcisolatedSubnet3RouteTableAssociationDC010BEB": {
@@ -508,7 +508,7 @@
508
508
  "Tags": [
509
509
  {
510
510
  "Key": "Name",
511
- "Value": "withClientProps/Vpc"
511
+ "Value": "withClientProps/Vpc/FlowLog"
512
512
  }
513
513
  ]
514
514
  }
@@ -560,7 +560,7 @@
560
560
  "Tags": [
561
561
  {
562
562
  "Key": "Name",
563
- "Value": "withClientProps/Vpc"
563
+ "Value": "withClientProps/Vpc/FlowLog"
564
564
  }
565
565
  ]
566
566
  },
@@ -580,11 +580,6 @@
580
580
  "VpcFlowLog8FF33A73": {
581
581
  "Type": "AWS::EC2::FlowLog",
582
582
  "Properties": {
583
- "ResourceId": {
584
- "Ref": "Vpc8378EB38"
585
- },
586
- "ResourceType": "VPC",
587
- "TrafficType": "ALL",
588
583
  "DeliverLogsPermissionArn": {
589
584
  "Fn::GetAtt": [
590
585
  "VpcFlowLogIAMRole6A475D41",
@@ -595,12 +590,17 @@
595
590
  "LogGroupName": {
596
591
  "Ref": "VpcFlowLogLogGroup7B5C56B9"
597
592
  },
593
+ "ResourceId": {
594
+ "Ref": "Vpc8378EB38"
595
+ },
596
+ "ResourceType": "VPC",
598
597
  "Tags": [
599
598
  {
600
599
  "Key": "Name",
601
- "Value": "withClientProps/Vpc"
600
+ "Value": "withClientProps/Vpc/FlowLog"
602
601
  }
603
- ]
602
+ ],
603
+ "TrafficType": "ALL"
604
604
  }
605
605
  }
606
606
  },
@@ -251,7 +251,6 @@ test('Test for the proper self referencing security group', () => {
251
251
  },
252
252
  });
253
253
  });
254
- // test('', () => {});
255
254
  test("Test error from existingCache and no VPC", () => {
256
255
  const stack = new cdk.Stack();
257
256
  const existingVpc = defaults.getTestVpc(stack);
@@ -321,4 +320,45 @@ test("Test error from trying to launch Redis", () => {
321
320
  };
322
321
  expect(app).toThrowError("This construct can only launch memcached clusters");
323
322
  });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWVsYXN0aWNhY2hlbWVtY2FjaGVkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsYW1iZGEtZWxhc3RpY2FjaGVtZW1jYWNoZWQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsVUFBVTtBQUNWLDJEQUEyRDtBQUMzRCxtQ0FBbUM7QUFDbkMsaURBQWlEO0FBQ2pELGdDQUFzRDtBQUN0RCwyQ0FBMkM7QUFDM0MsdURBQWtEO0FBRWxELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN2QixNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDO0FBRXpDLElBQUksQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7SUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFOUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxJQUFJLGtDQUE0QixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDbkQsV0FBVztRQUNYLG1CQUFtQixFQUFFO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO1lBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLFVBQVU7U0FDcEI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUU7SUFDMUUsTUFBTSxLQUFL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Q0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO0lBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRTtRQUNmLElBQUksa0NBQTRCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtZQUNuRCxVQUFVLEVBQUU7Z0JBQ1YsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO2dCQUNsRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUNuQyxPQUFPLEVBQUUsVUFBVTthQUNwQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsbURBQW1ELENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmVcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZCB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2Fzc2VydGlvbnNcIjtcblxuY29uc3QgdGVzdFBvcnQgPSAxMjMyMTtcbmNvbnN0IHRlc3RGdW5jdGlvbk5hbWUgPSBcInNvbWV0aGluZy11bmlxdWVcIjtcbmNvbnN0IHRlc3RDbHVzdGVyTmFtZSA9IFwic29tZXRoaW5nLWVsc2VcIjtcblxudGVzdChcIldoZW4gcHJvdmlkZWQgYSBWUEMsIGRvZXMgbm90IGNyZWF0ZSBhIHNlY29uZCBWUENcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1ZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0U3RhY2tcIiwge1xuICAgIGV4aXN0aW5nVnBjLFxuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkVDMjo6VlBDXCIsIDEpO1xufSk7XG5cbnRlc3QoXCJXaGVuIHByb3ZpZGVkIGFuIGV4aXN0aW5nQ2FjaGUsIGRvZXMgbm90IGNyZWF0ZSBhIHNlY29uZCBjYWNoZVwiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGNvbnN0IGV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IGV4aXN0aW5nQ2FjaGUgPSBkZWZhdWx0cy5DcmVhdGVUZXN0Q2FjaGUoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCBleGlzdGluZ1ZwYywgdGVzdFBvcnQpO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgZXhpc3RpbmdWcGMsXG4gICAgZXhpc3RpbmdDYWNoZSxcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpFbGFzdGlDYWNoZTo6Q2FjaGVDbHVzdGVyXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkVsYXN0aUNhY2hlOjpDYWNoZUNsdXN0ZXJcIiwge1xuICAgIFBvcnQ6IHRlc3RQb3J0LFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiV2hlbiBwcm92aWRlZCBhbiBleGlzdGluZ0Z1bmN0aW9uLCBkb2VzIG5vdCBjcmVhdGUgYSBzZWNvbmQgZnVuY3Rpb25cIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1ZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCBleGlzdGluZ0Z1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgXCJ0ZXN0LWZ1bmN0aW9uXCIsIHtcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgdnBjOiBleGlzdGluZ1ZwYyxcbiAgICBmdW5jdGlvbk5hbWU6IHRlc3RGdW5jdGlvbk5hbWUsXG4gIH0pO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgZXhpc3RpbmdWcGMsXG4gICAgZXhpc3RpbmdMYW1iZGFPYmo6IGV4aXN0aW5nRnVuY3Rpb24sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIiwge1xuICAgIEZ1bmN0aW9uTmFtZTogdGVzdEZ1bmN0aW9uTmFtZSxcbiAgfSk7XG59KTtcblxudGVzdChcIlRlc3QgY3VzdG9tIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCB0ZXN0RW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSBcIkNVU1RPTV9DTFVTVEVSX05BTUVcIjtcblxuICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0LWNvbnN0cnVjdFwiLCB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB9LFxuICAgIGNhY2hlRW5kcG9pbnRFbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogdGVzdEVudmlyb25tZW50VmFyaWFibGVOYW1lLFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiLCB7XG4gICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogXCIxXCIsXG4gICAgICAgIENVU1RPTV9DTFVTVEVSX05BTUU6IHtcbiAgICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICAgICAgICAgICAgXCJ0ZXN0Y29uc3RydWN0dGVzdGNvbnN0cnVjdGNsdXN0ZXJDRjlERjQ4QVwiLFxuICAgICAgICAgICAgICAgICAgXCJDb25maWd1cmF0aW9uRW5kcG9pbnQuQWRkcmVzc1wiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiOlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwidGVzdGNvbnN0cnVjdHRlc3Rjb25zdHJ1Y3RjbHVzdGVyQ0Y5REY0OEFcIixcbiAgICAgICAgICAgICAgICAgIFwiQ29uZmlndXJhdGlvbkVuZHBvaW50LlBvcnRcIixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBzZXR0aW5nIGN1c3RvbSBmdW5jdGlvbiBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICAgIGZ1bmN0aW9uTmFtZTogdGVzdEZ1bmN0aW9uTmFtZSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiLCB7XG4gICAgRnVuY3Rpb25OYW1lOiB0ZXN0RnVuY3Rpb25OYW1lLFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBzZXR0aW5nIGN1c3RvbSBjYWNoZSBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB9LFxuICAgIGNhY2hlUHJvcHM6IHtcbiAgICAgIGNsdXN0ZXJOYW1lOiB0ZXN0Q2x1c3Rlck5hbWUsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkVsYXN0aUNhY2hlOjpDYWNoZUNsdXN0ZXJcIiwge1xuICAgIENsdXN0ZXJOYW1lOiB0ZXN0Q2x1c3Rlck5hbWUsXG4gIH0pO1xufSk7XG50ZXN0KFwiVGVzdCBzZXR0aW5nIGN1c3RvbSBWUEMgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICBjb25zdCB0ZXN0Q2lkckJsb2NrID0gXCIxOTIuMTY4LjAuMC8xNlwiO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgICB2cGNQcm9wczoge1xuICAgICAgaXBBZGRyZXNzZXM6IGVjMi5JcEFkZHJlc3Nlcy5jaWRyKHRlc3RDaWRyQmxvY2spLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpFQzI6OlZQQ1wiLCB7XG4gICAgQ2lkckJsb2NrOiB0ZXN0Q2lkckJsb2NrLFxuICB9KTtcbn0pO1xudGVzdChcIlRlc3QgYWxsIGRlZmF1bHQgdmFsdWVzXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiLCAxKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpFbGFzdGlDYWNoZTo6Q2FjaGVDbHVzdGVyXCIsIDEpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkVDMjo6VlBDXCIsIDEpO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiLCB7XG4gICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogXCIxXCIsXG4gICAgICAgIENBQ0hFX0VORFBPSU5UOiB7XG4gICAgICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwidGVzdGNhY2hldGVzdGNhY2hlY2x1c3RlcjI3RDA4RkFEXCIsXG4gICAgICAgICAgICAgICAgICBcIkNvbmZpZ3VyYXRpb25FbmRwb2ludC5BZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICAgICAgICAgICAgXCJ0ZXN0Y2FjaGV0ZXN0Y2FjaGVjbHVzdGVyMjdEMDhGQURcIixcbiAgICAgICAgICAgICAgICAgIFwiQ29uZmlndXJhdGlvbkVuZHBvaW50LlBvcnRcIixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIEhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICBSdW50aW1lOiBcIm5vZGVqczE2LnhcIixcbiAgfSk7XG5cbiAgLy8gQWxsIHZhbHVlcyB0YWtlbiBmcm9tIGVsYXN0aWNhY2hlLWRlZmF1bHRzLnRzXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6RWxhc3RpQ2FjaGU6OkNhY2hlQ2x1c3RlclwiLCB7XG4gICAgQ2FjaGVOb2RlVHlwZTogXCJjYWNoZS50My5tZWRpdW1cIixcbiAgICBFbmdpbmU6IFwibWVtY2FjaGVkXCIsXG4gICAgTnVtQ2FjaGVOb2RlczogMixcbiAgICBQb3J0OiAxMTIyMixcbiAgICBBWk1vZGU6IFwiY3Jvc3MtYXpcIixcbiAgfSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpFQzI6OlZQQ1wiLCB7XG4gICAgRW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgIEVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZm9yIHRoZSBwcm9wZXIgc2VsZiByZWZlcmVuY2luZyBzZWN1cml0eSBncm91cCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB9LFxuICAgIGNhY2hlUHJvcHM6IHtcbiAgICAgIHBvcnQ6IDIyMjIzXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLCB7XG4gICAgSXBQcm90b2NvbDogXCJUQ1BcIixcbiAgICBGcm9tUG9ydDogMjIyMjMsXG4gICAgVG9Qb3J0OiAyMjIyMyxcbiAgICBHcm91cElkOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICBcInRlc3RjYWNoZXRlc3RjYWNoZWNhY2hlc2c3NEEwM0RBNFwiLFxuICAgICAgICBcIkdyb3VwSWRcIlxuICAgICAgXVxuICAgIH0sXG4gICAgU291cmNlU2VjdXJpdHlHcm91cElkOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICBcInRlc3RjYWNoZXRlc3RjYWNoZWNhY2hlc2c3NEEwM0RBNFwiLFxuICAgICAgICBcIkdyb3VwSWRcIlxuICAgICAgXVxuICAgIH0sXG4gIH0pO1xufSk7XG4vLyB0ZXN0KCcnLCAoKSA9PiB7fSk7XG50ZXN0KFwiVGVzdCBlcnJvciBmcm9tIGV4aXN0aW5nQ2FjaGUgYW5kIG5vIFZQQ1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGNvbnN0IGV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IGV4aXN0aW5nQ2FjaGUgPSBkZWZhdWx0cy5DcmVhdGVUZXN0Q2FjaGUoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCBleGlzdGluZ1ZwYyk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgICBleGlzdGluZ0NhY2hlLFxuICAgICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFxuICAgIFwiSWYgcHJvdmlkaW5nIGFuIGV4aXN0aW5nIENhY2hlIG9yIExhbWJkYSBGdW5jdGlvbiwgeW91IG11c3QgYWxzbyBzdXBwbHkgdGhlIGFzc29jaWF0ZWQgZXhpc3RpbmdWcGNcIlxuICApO1xufSk7XG5cbnRlc3QoXCJUZXN0IGVycm9yIGZyb20gZXhpc3RpbmcgZnVuY3Rpb24gYW5kIG5vIFZQQ1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGNvbnN0IGV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IGV4aXN0aW5nRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCBcInRlc3QtZnVuY3Rpb25cIiwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB2cGM6IGV4aXN0aW5nVnBjLFxuICB9KTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdFN0YWNrXCIsIHtcbiAgICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBleGlzdGluZ0Z1bmN0aW9uLFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcbiAgICBcIklmIHByb3ZpZGluZyBhbiBleGlzdGluZyBDYWNoZSBvciBMYW1iZGEgRnVuY3Rpb24sIHlvdSBtdXN0IGFsc28gc3VwcGx5IHRoZSBhc3NvY2lhdGVkIGV4aXN0aW5nVnBjXCJcbiAgKTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBlcnJvciBmcm9tIGV4aXN0aW5nQ2FjaGUgYW5kIGNhY2hlUHJvcHNcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1ZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCBleGlzdGluZ0NhY2hlID0gZGVmYXVsdHMuQ3JlYXRlVGVzdENhY2hlKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwgZXhpc3RpbmdWcGMpO1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0U3RhY2tcIiwge1xuICAgICAgZXhpc3RpbmdDYWNoZSxcbiAgICAgIGV4aXN0aW5nVnBjLFxuICAgICAgY2FjaGVQcm9wczoge1xuICAgICAgICBudW1DYWNoZU5vZGVzOiA0LFxuICAgICAgfSxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGV4aXN0aW5nQ2FjaGUgYW5kIGNhY2hlUHJvcHNcIik7XG59KTtcblxudGVzdChcIlRlc3QgZXJyb3IgZnJvbSB0cnlpbmcgdG8gbGF1bmNoIFJlZGlzXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgICBjYWNoZVByb3BzOiB7XG4gICAgICAgIG51bUNhY2hlTm9kZXM6IDQsXG4gICAgICAgIGVuZ2luZTogXCJyZWRpc1wiLFxuICAgICAgfSxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIlRoaXMgY29uc3RydWN0IGNhbiBvbmx5IGxhdW5jaCBtZW1jYWNoZWQgY2x1c3RlcnNcIik7XG59KTtcbiJdfQ==
323
+ test("Test error from existingCache and no VPC", () => {
324
+ const stack = new cdk.Stack();
325
+ const vpc = defaults.getTestVpc(stack);
326
+ const app = () => {
327
+ new lib_1.LambdaToElasticachememcached(stack, "testStack", {
328
+ lambdaFunctionProps: {
329
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
330
+ runtime: lambda.Runtime.NODEJS_16_X,
331
+ handler: ".handler",
332
+ },
333
+ vpcProps: {},
334
+ existingVpc: vpc
335
+ });
336
+ };
337
+ expect(app).toThrowError('Error - Either provide an existingVpc or some combination of deployVpc and vpcProps, but not both.\n');
338
+ });
339
+ test('Confirm call to CheckLambdaProps', () => {
340
+ // Initial Setup
341
+ const stack = new cdk.Stack();
342
+ const testVpc = defaults.getTestVpc(stack);
343
+ const lambdaFunction = new lambda.Function(stack, 'a-function', {
344
+ runtime: lambda.Runtime.NODEJS_16_X,
345
+ handler: 'index.handler',
346
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
347
+ vpc: testVpc,
348
+ });
349
+ const props = {
350
+ existingVpc: testVpc,
351
+ lambdaFunctionProps: {
352
+ runtime: lambda.Runtime.NODEJS_16_X,
353
+ handler: 'index.handler',
354
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
355
+ },
356
+ existingLambdaObj: lambdaFunction,
357
+ };
358
+ const app = () => {
359
+ new lib_1.LambdaToElasticachememcached(stack, 'test-construct', props);
360
+ };
361
+ // Assertion
362
+ expect(app).toThrowError('Error - Either provide lambdaFunctionProps or existingLambdaObj, but not both.\n');
363
+ });
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWVsYXN0aWNhY2hlbWVtY2FjaGVkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsYW1iZGEtZWxhc3RpY2FjaGVtZW1jYWNoZWQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsVUFBVTtBQUNWLDJEQUEyRDtBQUMzRCxtQ0FBbUM7QUFDbkMsaURBQWlEO0FBQ2pELGdDQUF5RjtBQUN6RiwyQ0FBMkM7QUFDM0MsdURBQWtEO0FBRWxELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN2QixNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDO0FBRXpDLElBQUksQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7SUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFOUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxJQUFJLGtDQUE0QixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDbkQsV0FBVztRQUNYLG1CQUFtQixFQUFFO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO1lBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLFVBQVU7U0FDcEI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUU7SUFDMUUsTUFBTSxLQUFL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Qy9HLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkLCBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkUHJvcHMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5cbmNvbnN0IHRlc3RQb3J0ID0gMTIzMjE7XG5jb25zdCB0ZXN0RnVuY3Rpb25OYW1lID0gXCJzb21ldGhpbmctdW5pcXVlXCI7XG5jb25zdCB0ZXN0Q2x1c3Rlck5hbWUgPSBcInNvbWV0aGluZy1lbHNlXCI7XG5cbnRlc3QoXCJXaGVuIHByb3ZpZGVkIGEgVlBDLCBkb2VzIG5vdCBjcmVhdGUgYSBzZWNvbmQgVlBDXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgZXhpc3RpbmdWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdFN0YWNrXCIsIHtcbiAgICBleGlzdGluZ1ZwYyxcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpFQzI6OlZQQ1wiLCAxKTtcbn0pO1xuXG50ZXN0KFwiV2hlbiBwcm92aWRlZCBhbiBleGlzdGluZ0NhY2hlLCBkb2VzIG5vdCBjcmVhdGUgYSBzZWNvbmQgY2FjaGVcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1ZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCBleGlzdGluZ0NhY2hlID0gZGVmYXVsdHMuQ3JlYXRlVGVzdENhY2hlKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwgZXhpc3RpbmdWcGMsIHRlc3RQb3J0KTtcblxuICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0U3RhY2tcIiwge1xuICAgIGV4aXN0aW5nVnBjLFxuICAgIGV4aXN0aW5nQ2FjaGUsXG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6RWxhc3RpQ2FjaGU6OkNhY2hlQ2x1c3RlclwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpFbGFzdGlDYWNoZTo6Q2FjaGVDbHVzdGVyXCIsIHtcbiAgICBQb3J0OiB0ZXN0UG9ydCxcbiAgfSk7XG59KTtcblxudGVzdChcIldoZW4gcHJvdmlkZWQgYW4gZXhpc3RpbmdGdW5jdGlvbiwgZG9lcyBub3QgY3JlYXRlIGEgc2Vjb25kIGZ1bmN0aW9uXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgZXhpc3RpbmdWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgZXhpc3RpbmdGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssIFwidGVzdC1mdW5jdGlvblwiLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICAgIHZwYzogZXhpc3RpbmdWcGMsXG4gICAgZnVuY3Rpb25OYW1lOiB0ZXN0RnVuY3Rpb25OYW1lLFxuICB9KTtcblxuICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0U3RhY2tcIiwge1xuICAgIGV4aXN0aW5nVnBjLFxuICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBleGlzdGluZ0Z1bmN0aW9uLFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCIsIHtcbiAgICBGdW5jdGlvbk5hbWU6IHRlc3RGdW5jdGlvbk5hbWUsXG4gIH0pO1xufSk7XG5cbnRlc3QoXCJUZXN0IGN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgdGVzdEVudmlyb25tZW50VmFyaWFibGVOYW1lID0gXCJDVVNUT01fQ0xVU1RFUl9OQU1FXCI7XG5cbiAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdC1jb25zdHJ1Y3RcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgICBjYWNoZUVuZHBvaW50RW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHRlc3RFbnZpcm9ubWVudFZhcmlhYmxlTmFtZSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIiwge1xuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6IFwiMVwiLFxuICAgICAgICBDVVNUT01fQ0xVU1RFUl9OQU1FOiB7XG4gICAgICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwidGVzdGNvbnN0cnVjdHRlc3Rjb25zdHJ1Y3RjbHVzdGVyQ0Y5REY0OEFcIixcbiAgICAgICAgICAgICAgICAgIFwiQ29uZmlndXJhdGlvbkVuZHBvaW50LkFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIjpcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbXG4gICAgICAgICAgICAgICAgICBcInRlc3Rjb25zdHJ1Y3R0ZXN0Y29uc3RydWN0Y2x1c3RlckNGOURGNDhBXCIsXG4gICAgICAgICAgICAgICAgICBcIkNvbmZpZ3VyYXRpb25FbmRwb2ludC5Qb3J0XCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59KTtcblxudGVzdChcIlRlc3Qgc2V0dGluZyBjdXN0b20gZnVuY3Rpb24gcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICBmdW5jdGlvbk5hbWU6IHRlc3RGdW5jdGlvbk5hbWUsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIiwge1xuICAgIEZ1bmN0aW9uTmFtZTogdGVzdEZ1bmN0aW9uTmFtZSxcbiAgfSk7XG59KTtcblxudGVzdChcIlRlc3Qgc2V0dGluZyBjdXN0b20gY2FjaGUgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgICBjYWNoZVByb3BzOiB7XG4gICAgICBjbHVzdGVyTmFtZTogdGVzdENsdXN0ZXJOYW1lLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpFbGFzdGlDYWNoZTo6Q2FjaGVDbHVzdGVyXCIsIHtcbiAgICBDbHVzdGVyTmFtZTogdGVzdENsdXN0ZXJOYW1lLFxuICB9KTtcbn0pO1xudGVzdChcIlRlc3Qgc2V0dGluZyBjdXN0b20gVlBDIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgY29uc3QgdGVzdENpZHJCbG9jayA9IFwiMTkyLjE2OC4wLjAvMTZcIjtcblxuICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0LWNhY2hlXCIsIHtcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICAgIH0sXG4gICAgdnBjUHJvcHM6IHtcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcih0ZXN0Q2lkckJsb2NrKSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6RUMyOjpWUENcIiwge1xuICAgIENpZHJCbG9jazogdGVzdENpZHJCbG9jayxcbiAgfSk7XG59KTtcbnRlc3QoXCJUZXN0IGFsbCBkZWZhdWx0IHZhbHVlc1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIiwgMSk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6RWxhc3RpQ2FjaGU6OkNhY2hlQ2x1c3RlclwiLCAxKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpFQzI6OlZQQ1wiLCAxKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIiwge1xuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6IFwiMVwiLFxuICAgICAgICBDQUNIRV9FTkRQT0lOVDoge1xuICAgICAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbXG4gICAgICAgICAgICAgICAgICBcInRlc3RjYWNoZXRlc3RjYWNoZWNsdXN0ZXIyN0QwOEZBRFwiLFxuICAgICAgICAgICAgICAgICAgXCJDb25maWd1cmF0aW9uRW5kcG9pbnQuQWRkcmVzc1wiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiOlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwidGVzdGNhY2hldGVzdGNhY2hlY2x1c3RlcjI3RDA4RkFEXCIsXG4gICAgICAgICAgICAgICAgICBcIkNvbmZpZ3VyYXRpb25FbmRwb2ludC5Qb3J0XCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBIYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgUnVudGltZTogXCJub2RlanMxNi54XCIsXG4gIH0pO1xuXG4gIC8vIEFsbCB2YWx1ZXMgdGFrZW4gZnJvbSBlbGFzdGljYWNoZS1kZWZhdWx0cy50c1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkVsYXN0aUNhY2hlOjpDYWNoZUNsdXN0ZXJcIiwge1xuICAgIENhY2hlTm9kZVR5cGU6IFwiY2FjaGUudDMubWVkaXVtXCIsXG4gICAgRW5naW5lOiBcIm1lbWNhY2hlZFwiLFxuICAgIE51bUNhY2hlTm9kZXM6IDIsXG4gICAgUG9ydDogMTEyMjIsXG4gICAgQVpNb2RlOiBcImNyb3NzLWF6XCIsXG4gIH0pO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6RUMyOjpWUENcIiwge1xuICAgIEVuYWJsZURuc0hvc3RuYW1lczogdHJ1ZSxcbiAgICBFbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGZvciB0aGUgcHJvcGVyIHNlbGYgcmVmZXJlbmNpbmcgc2VjdXJpdHkgZ3JvdXAnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgfSxcbiAgICBjYWNoZVByb3BzOiB7XG4gICAgICBwb3J0OiAyMjIyM1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIiwge1xuICAgIElwUHJvdG9jb2w6IFwiVENQXCIsXG4gICAgRnJvbVBvcnQ6IDIyMjIzLFxuICAgIFRvUG9ydDogMjIyMjMsXG4gICAgR3JvdXBJZDoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgXCJ0ZXN0Y2FjaGV0ZXN0Y2FjaGVjYWNoZXNnNzRBMDNEQTRcIixcbiAgICAgICAgXCJHcm91cElkXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIFNvdXJjZVNlY3VyaXR5R3JvdXBJZDoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgXCJ0ZXN0Y2FjaGV0ZXN0Y2FjaGVjYWNoZXNnNzRBMDNEQTRcIixcbiAgICAgICAgXCJHcm91cElkXCJcbiAgICAgIF1cbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBlcnJvciBmcm9tIGV4aXN0aW5nQ2FjaGUgYW5kIG5vIFZQQ1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGNvbnN0IGV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IGV4aXN0aW5nQ2FjaGUgPSBkZWZhdWx0cy5DcmVhdGVUZXN0Q2FjaGUoc3RhY2ssIFwidGVzdC1jYWNoZVwiLCBleGlzdGluZ1ZwYyk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgICBleGlzdGluZ0NhY2hlLFxuICAgICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFxuICAgIFwiSWYgcHJvdmlkaW5nIGFuIGV4aXN0aW5nIENhY2hlIG9yIExhbWJkYSBGdW5jdGlvbiwgeW91IG11c3QgYWxzbyBzdXBwbHkgdGhlIGFzc29jaWF0ZWQgZXhpc3RpbmdWcGNcIlxuICApO1xufSk7XG5cbnRlc3QoXCJUZXN0IGVycm9yIGZyb20gZXhpc3RpbmcgZnVuY3Rpb24gYW5kIG5vIFZQQ1wiLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGNvbnN0IGV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IGV4aXN0aW5nRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCBcInRlc3QtZnVuY3Rpb25cIiwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgICB2cGM6IGV4aXN0aW5nVnBjLFxuICB9KTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdFN0YWNrXCIsIHtcbiAgICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBleGlzdGluZ0Z1bmN0aW9uLFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcbiAgICBcIklmIHByb3ZpZGluZyBhbiBleGlzdGluZyBDYWNoZSBvciBMYW1iZGEgRnVuY3Rpb24sIHlvdSBtdXN0IGFsc28gc3VwcGx5IHRoZSBhc3NvY2lhdGVkIGV4aXN0aW5nVnBjXCJcbiAgKTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBlcnJvciBmcm9tIGV4aXN0aW5nQ2FjaGUgYW5kIGNhY2hlUHJvcHNcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1ZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCBleGlzdGluZ0NhY2hlID0gZGVmYXVsdHMuQ3JlYXRlVGVzdENhY2hlKHN0YWNrLCBcInRlc3QtY2FjaGVcIiwgZXhpc3RpbmdWcGMpO1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgXCJ0ZXN0U3RhY2tcIiwge1xuICAgICAgZXhpc3RpbmdDYWNoZSxcbiAgICAgIGV4aXN0aW5nVnBjLFxuICAgICAgY2FjaGVQcm9wczoge1xuICAgICAgICBudW1DYWNoZU5vZGVzOiA0LFxuICAgICAgfSxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGV4aXN0aW5nQ2FjaGUgYW5kIGNhY2hlUHJvcHNcIik7XG59KTtcblxudGVzdChcIlRlc3QgZXJyb3IgZnJvbSB0cnlpbmcgdG8gbGF1bmNoIFJlZGlzXCIsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIG5ldyBMYW1iZGFUb0VsYXN0aWNhY2hlbWVtY2FjaGVkKHN0YWNrLCBcInRlc3RTdGFja1wiLCB7XG4gICAgICBjYWNoZVByb3BzOiB7XG4gICAgICAgIG51bUNhY2hlTm9kZXM6IDQsXG4gICAgICAgIGVuZ2luZTogXCJyZWRpc1wiLFxuICAgICAgfSxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIlRoaXMgY29uc3RydWN0IGNhbiBvbmx5IGxhdW5jaCBtZW1jYWNoZWQgY2x1c3RlcnNcIik7XG59KTtcblxudGVzdChcIlRlc3QgZXJyb3IgZnJvbSBleGlzdGluZ0NhY2hlIGFuZCBubyBWUENcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgbmV3IExhbWJkYVRvRWxhc3RpY2FjaGVtZW1jYWNoZWQoc3RhY2ssIFwidGVzdFN0YWNrXCIsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgICAgdnBjUHJvcHM6IHt9LFxuICAgICAgZXhpc3RpbmdWcGM6IHZwY1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcbiAgICAnRXJyb3IgLSBFaXRoZXIgcHJvdmlkZSBhbiBleGlzdGluZ1ZwYyBvciBzb21lIGNvbWJpbmF0aW9uIG9mIGRlcGxveVZwYyBhbmQgdnBjUHJvcHMsIGJ1dCBub3QgYm90aC5cXG4nXG4gICk7XG59KTtcblxudGVzdCgnQ29uZmlybSBjYWxsIHRvIENoZWNrTGFtYmRhUHJvcHMnLCAoKSA9PiB7XG4gIC8vIEluaXRpYWwgU2V0dXBcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnYS1mdW5jdGlvbicsIHtcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgdnBjOiB0ZXN0VnBjLFxuICB9KTtcblxuICBjb25zdCBwcm9wczogTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZFByb3BzID0ge1xuICAgIGV4aXN0aW5nVnBjOiB0ZXN0VnBjLFxuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgfSxcbiAgICBleGlzdGluZ0xhbWJkYU9iajogbGFtYmRhRnVuY3Rpb24sXG4gIH07XG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBuZXcgTGFtYmRhVG9FbGFzdGljYWNoZW1lbWNhY2hlZChzdGFjaywgJ3Rlc3QtY29uc3RydWN0JywgcHJvcHMpO1xuICB9O1xuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdFcnJvciAtIEVpdGhlciBwcm92aWRlIGxhbWJkYUZ1bmN0aW9uUHJvcHMgb3IgZXhpc3RpbmdMYW1iZGFPYmosIGJ1dCBub3QgYm90aC5cXG4nKTtcbn0pO1xuIl19