aws-secure-bucket 3.0.13 → 3.1.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
@@ -3973,7 +3973,7 @@
3973
3973
  },
3974
3974
  "name": "aws-secure-bucket",
3975
3975
  "readme": {
3976
- "markdown": "# AWS Secure Bucket\n\n[![GitHub](https://img.shields.io/github/license/gammarers-aws-cdk-resources/aws-secure-bucket?style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/blob/main/LICENSE)\n[![npm version](https://img.shields.io/npm/v/aws-secure-bucket?style=flat-square)](https://www.npmjs.com/package/aws-secure-bucket)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers-aws-cdk-resources/aws-secure-bucket/build.yml?branch=main&label=build&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/build.yml)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers-aws-cdk-resources/aws-secure-bucket/release.yml?branch=main&label=release&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/release.yml)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/gammarers-aws-cdk-resources/aws-secure-bucket?sort=semver&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/releases)\n\nAn [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.\n\n**Default behavior:**\n\n- Bucket Access Control is Private\n- Public Read Access is false\n- Enforce SSL\n- All Block public access\n- Require encryption\n- Versioned (default: true)\n- Object ownership: BucketOwnerEnforced\n\n## Constructor Options\n\nThe `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 Bucket options such as `bucketName` and `versioned`.\n\n### SecureBucket-specific options\n\n| **Property** | **Type** | **Default** | **Description** |\n| --- | --- | --- | --- |\n| bucketType | SecureBucketType | SecureBucketType.DEFAULT_BUCKET | The bucket type. Determines encryption and resource policy behavior. |\n\n**SecureBucketType values:**\n\n| **Constant** | **Use case** |\n| --- | --- |\n| `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom Qualifier |\n| `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom Qualifier) |\n| `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |\n\nSee [API.md](./API.md) for the full API reference.\n\n## Install\n\n### TypeScript\n\n**npm:**\n\n```shell\nnpm install aws-secure-bucket\n```\n\n**yarn:**\n\n```shell\nyarn add aws-secure-bucket\n```\n\n## Example\n\n```typescript\nimport { SecureBucket } from 'aws-secure-bucket';\n\nconst bucket = new SecureBucket(stack, 'SecureBucket', {\n bucketName: 'example-secure-bucket',\n});\n\n```\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n"
3976
+ "markdown": "# AWS Secure Bucket\n\n[![GitHub](https://img.shields.io/github/license/gammarers-aws-cdk-resources/aws-secure-bucket?style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/blob/main/LICENSE)\n[![npm version](https://img.shields.io/npm/v/aws-secure-bucket?style=flat-square)](https://www.npmjs.com/package/aws-secure-bucket)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers-aws-cdk-resources/aws-secure-bucket/build.yml?branch=main&label=build&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/build.yml)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers-aws-cdk-resources/aws-secure-bucket/release.yml?branch=main&label=release&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/release.yml)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/gammarers-aws-cdk-resources/aws-secure-bucket?sort=semver&style=flat-square)](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/releases)\n\nAn [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.\n\n## Features\n\n- Security-focused defaults for S3 buckets (private, block public access, enforce SSL)\n- Encryption enabled by default\n- Versioning enabled by default\n- Object ownership enforced by default (`BucketOwnerEnforced`)\n- `RemovalPolicy.RETAIN` by default (prevent accidental deletion)\n- Bucket-type presets via `bucketType` for common production use cases\n - `DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET`: CDK pipeline artifact buckets with custom qualifier support\n - `CLOUDFRONT_ORIGIN_BUCKET`: CloudFront origin buckets using S3-managed encryption\n - `ACCESS_LOG_BUCKET`: Centralized access log buckets with minimal log-delivery permissions\n\n## Installation\n\n**npm**\n\n```shell\nnpm install aws-secure-bucket\n```\n\n**yarn**\n\n```shell\nyarn add aws-secure-bucket\n```\n\n## Usage\n\n### Default secure bucket\n\n```typescript\nimport { SecureBucket } from 'aws-secure-bucket';\n\nconst bucket = new SecureBucket(stack, 'SecureBucket', {\n bucketName: 'example-secure-bucket',\n});\n```\n\n### Centralized access log bucket (ALB / CloudFront / S3)\n\n```typescript\nimport { SecureBucket, SecureBucketType } from 'aws-secure-bucket';\n\nconst accessLogBucket = new SecureBucket(stack, 'AccessLogBucket', {\n bucketType: SecureBucketType.ACCESS_LOG_BUCKET,\n});\n```\n\n## Options\n\nThe `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 bucket options such as `bucketName`, `versioned`, and `encryption`.\n\n### SecureBucket-specific options\n\n| Property | Type | Default | Description |\n| --- | --- | --- | --- |\n| `bucketType` | `SecureBucketType` | `SecureBucketType.DEFAULT_BUCKET` | Determines encryption and resource policy behavior. |\n\n### SecureBucketType values\n\n| Constant | Use case |\n| --- | --- |\n| `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom qualifier |\n| `SecureBucketType.ACCESS_LOG_BUCKET` | Centralized access log bucket for ALB / CloudFront / S3 (RETAIN + minimal log-delivery permissions) |\n| `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom qualifier) |\n| `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |\n\nSee [API.md](./API.md) for the full API reference.\n\n## Requirements\n\n- Node.js >= 20\n- AWS CDK v2 (`aws-cdk-lib`)\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n"
3977
3977
  },
3978
3978
  "repository": {
3979
3979
  "type": "git",
@@ -4000,7 +4000,7 @@
4000
4000
  },
4001
4001
  "locationInModule": {
4002
4002
  "filename": "src/index.ts",
4003
- "line": 44
4003
+ "line": 49
4004
4004
  },
4005
4005
  "parameters": [
4006
4006
  {
@@ -4027,7 +4027,7 @@
4027
4027
  "kind": "class",
4028
4028
  "locationInModule": {
4029
4029
  "filename": "src/index.ts",
4030
- "line": 43
4030
+ "line": 48
4031
4031
  },
4032
4032
  "name": "SecureBucket",
4033
4033
  "symbolId": "src/index:SecureBucket"
@@ -4047,7 +4047,7 @@
4047
4047
  "kind": "interface",
4048
4048
  "locationInModule": {
4049
4049
  "filename": "src/index.ts",
4050
- "line": 31
4050
+ "line": 36
4051
4051
  },
4052
4052
  "name": "SecureBucketProps",
4053
4053
  "properties": [
@@ -4062,7 +4062,7 @@
4062
4062
  "immutable": true,
4063
4063
  "locationInModule": {
4064
4064
  "filename": "src/index.ts",
4065
- "line": 37
4065
+ "line": 42
4066
4066
  },
4067
4067
  "name": "bucketType",
4068
4068
  "optional": true,
@@ -4074,6 +4074,6 @@
4074
4074
  "symbolId": "src/index:SecureBucketProps"
4075
4075
  }
4076
4076
  },
4077
- "version": "3.0.13",
4078
- "fingerprint": "h5sZ1eZw5kLueVOBVQYg9E7Nz8roCYmJmHrSwBWq8CM="
4077
+ "version": "3.1.0",
4078
+ "fingerprint": "p4ZW6ZBZByQgG7QHuoKolvQ/ZcX/xy8HzUZZmM+Bl/s="
4079
4079
  }
package/README.md CHANGED
@@ -8,53 +8,35 @@
8
8
 
9
9
  An [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.
10
10
 
11
- **Default behavior:**
11
+ ## Features
12
12
 
13
- - Bucket Access Control is Private
14
- - Public Read Access is false
15
- - Enforce SSL
16
- - All Block public access
17
- - Require encryption
18
- - Versioned (default: true)
19
- - Object ownership: BucketOwnerEnforced
13
+ - Security-focused defaults for S3 buckets (private, block public access, enforce SSL)
14
+ - Encryption enabled by default
15
+ - Versioning enabled by default
16
+ - Object ownership enforced by default (`BucketOwnerEnforced`)
17
+ - `RemovalPolicy.RETAIN` by default (prevent accidental deletion)
18
+ - Bucket-type presets via `bucketType` for common production use cases
19
+ - `DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET`: CDK pipeline artifact buckets with custom qualifier support
20
+ - `CLOUDFRONT_ORIGIN_BUCKET`: CloudFront origin buckets using S3-managed encryption
21
+ - `ACCESS_LOG_BUCKET`: Centralized access log buckets with minimal log-delivery permissions
20
22
 
21
- ## Constructor Options
23
+ ## Installation
22
24
 
23
- The `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 Bucket options such as `bucketName` and `versioned`.
24
-
25
- ### SecureBucket-specific options
26
-
27
- | **Property** | **Type** | **Default** | **Description** |
28
- | --- | --- | --- | --- |
29
- | bucketType | SecureBucketType | SecureBucketType.DEFAULT_BUCKET | The bucket type. Determines encryption and resource policy behavior. |
30
-
31
- **SecureBucketType values:**
32
-
33
- | **Constant** | **Use case** |
34
- | --- | --- |
35
- | `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom Qualifier |
36
- | `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom Qualifier) |
37
- | `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |
38
-
39
- See [API.md](./API.md) for the full API reference.
40
-
41
- ## Install
42
-
43
- ### TypeScript
44
-
45
- **npm:**
25
+ **npm**
46
26
 
47
27
  ```shell
48
28
  npm install aws-secure-bucket
49
29
  ```
50
30
 
51
- **yarn:**
31
+ **yarn**
52
32
 
53
33
  ```shell
54
34
  yarn add aws-secure-bucket
55
35
  ```
56
36
 
57
- ## Example
37
+ ## Usage
38
+
39
+ ### Default secure bucket
58
40
 
59
41
  ```typescript
60
42
  import { SecureBucket } from 'aws-secure-bucket';
@@ -62,9 +44,44 @@ import { SecureBucket } from 'aws-secure-bucket';
62
44
  const bucket = new SecureBucket(stack, 'SecureBucket', {
63
45
  bucketName: 'example-secure-bucket',
64
46
  });
47
+ ```
65
48
 
49
+ ### Centralized access log bucket (ALB / CloudFront / S3)
50
+
51
+ ```typescript
52
+ import { SecureBucket, SecureBucketType } from 'aws-secure-bucket';
53
+
54
+ const accessLogBucket = new SecureBucket(stack, 'AccessLogBucket', {
55
+ bucketType: SecureBucketType.ACCESS_LOG_BUCKET,
56
+ });
66
57
  ```
67
58
 
59
+ ## Options
60
+
61
+ The `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 bucket options such as `bucketName`, `versioned`, and `encryption`.
62
+
63
+ ### SecureBucket-specific options
64
+
65
+ | Property | Type | Default | Description |
66
+ | --- | --- | --- | --- |
67
+ | `bucketType` | `SecureBucketType` | `SecureBucketType.DEFAULT_BUCKET` | Determines encryption and resource policy behavior. |
68
+
69
+ ### SecureBucketType values
70
+
71
+ | Constant | Use case |
72
+ | --- | --- |
73
+ | `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom qualifier |
74
+ | `SecureBucketType.ACCESS_LOG_BUCKET` | Centralized access log bucket for ALB / CloudFront / S3 (RETAIN + minimal log-delivery permissions) |
75
+ | `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom qualifier) |
76
+ | `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |
77
+
78
+ See [API.md](./API.md) for the full API reference.
79
+
80
+ ## Requirements
81
+
82
+ - Node.js >= 20
83
+ - AWS CDK v2 (`aws-cdk-lib`)
84
+
68
85
  ## License
69
86
 
70
87
  This project is licensed under the Apache-2.0 License.
package/lib/index.d.ts CHANGED
@@ -17,6 +17,11 @@ export declare const SecureBucketType: {
17
17
  * Select for the default bucket when not using a custom Qualifier.
18
18
  */
19
19
  readonly DEFAULT_BUCKET: "DefaultBucket";
20
+ /**
21
+ * Select when using this bucket as a centralized access log bucket
22
+ * for ALB, CloudFront, S3 server access logging, and similar producers.
23
+ */
24
+ readonly ACCESS_LOG_BUCKET: "AccessLogBucket";
20
25
  };
21
26
  /** Bucket type: one of the {@link SecureBucketType} constant values. */
22
27
  export type SecureBucketType = typeof SecureBucketType[keyof typeof SecureBucketType];
package/lib/index.js CHANGED
@@ -23,6 +23,11 @@ exports.SecureBucketType = {
23
23
  * Select for the default bucket when not using a custom Qualifier.
24
24
  */
25
25
  DEFAULT_BUCKET: 'DefaultBucket',
26
+ /**
27
+ * Select when using this bucket as a centralized access log bucket
28
+ * for ALB, CloudFront, S3 server access logging, and similar producers.
29
+ */
30
+ ACCESS_LOG_BUCKET: 'AccessLogBucket',
26
31
  };
27
32
  /**
28
33
  * An S3 bucket with secure defaults: private access, SSL enforced, public access blocked, and encryption required.
@@ -34,7 +39,7 @@ class SecureBucket extends s3.Bucket {
34
39
  ...props,
35
40
  removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
36
41
  encryption: (() => {
37
- if (bucketType === exports.SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET) {
42
+ if (bucketType === exports.SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET || bucketType === exports.SecureBucketType.ACCESS_LOG_BUCKET) {
38
43
  return s3.BucketEncryption.S3_MANAGED;
39
44
  }
40
45
  return props?.encryption || s3.BucketEncryption.KMS_MANAGED;
@@ -80,9 +85,50 @@ class SecureBucket extends s3.Bucket {
80
85
  }));
81
86
  }
82
87
  }
88
+ if (bucketType === exports.SecureBucketType.ACCESS_LOG_BUCKET) {
89
+ // Allow ALB / NLB log delivery to put objects (no read or list)
90
+ this.addToResourcePolicy(new iam.PolicyStatement({
91
+ effect: iam.Effect.ALLOW,
92
+ principals: [
93
+ new iam.ServicePrincipal('logdelivery.elasticloadbalancing.amazonaws.com'),
94
+ ],
95
+ actions: [
96
+ 's3:PutObject',
97
+ ],
98
+ resources: [
99
+ `${this.bucketArn}/AWSLogs/${account}/*`,
100
+ ],
101
+ }));
102
+ // Allow CloudFront standard logging (v2) to write logs
103
+ this.addToResourcePolicy(new iam.PolicyStatement({
104
+ effect: iam.Effect.ALLOW,
105
+ principals: [
106
+ new iam.ServicePrincipal('delivery.logs.amazonaws.com'),
107
+ ],
108
+ actions: [
109
+ 's3:PutObject',
110
+ ],
111
+ resources: [
112
+ `${this.bucketArn}/AWSLogs/${account}/*`,
113
+ ],
114
+ }));
115
+ // Allow S3 server access logging to write logs when required by configuration
116
+ this.addToResourcePolicy(new iam.PolicyStatement({
117
+ effect: iam.Effect.ALLOW,
118
+ principals: [
119
+ new iam.ServicePrincipal('logging.s3.amazonaws.com'),
120
+ ],
121
+ actions: [
122
+ 's3:PutObject',
123
+ ],
124
+ resources: [
125
+ `${this.bucketArn}/AWSLogs/${account}/*`,
126
+ ],
127
+ }));
128
+ }
83
129
  }
84
130
  }
85
131
  exports.SecureBucket = SecureBucket;
86
132
  _a = JSII_RTTI_SYMBOL_1;
87
- SecureBucket[_a] = { fqn: "aws-secure-bucket.SecureBucket", version: "3.0.13" };
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEU7QUFDNUUsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUd6Qzs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUI7OztPQUdHO0lBQ0gsbUNBQW1DLEVBQUUsa0NBQWtDO0lBQ3ZFOztPQUVHO0lBQ0gsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQWlCWDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSx3QkFBZ0IsQ0FBQyxjQUFjLENBQUM7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO1lBQ25DLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDaEIsSUFBSSxVQUFVLEtBQUssd0JBQWdCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztvQkFDN0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELE9BQU8sS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQzlELENBQUMsQ0FBQyxFQUFFO1lBQ0osYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxFQUFFO1lBQ0osa0JBQWtCLEVBQUUsU0FBUztZQUM3QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1lBQ2pELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNsRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO29CQUMzQixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xELENBQUMsQ0FBQyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUE0QixDQUFDO1FBQ3pELElBQUksS0FBSyxFQUFFLGtCQUFrQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyx1RUFBdUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVyQyxJQUFJLFVBQVUsS0FBSyx3QkFBZ0IsQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1lBRXhFLE1BQU0sU0FBUyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUVoRSxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsSUFBSSxxQ0FBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNO3FCQUNQO29CQUNELFNBQVMsRUFBRTt3QkFDVCxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQ25CLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSTtxQkFDdEI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsT0FBTyxhQUFhLFNBQVMsZ0JBQWdCLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztxQkFDdkc7aUJBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBMURILG9DQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRTdGFja1N5bnRoZXNpemVyLCBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBCdWNrZXQgdHlwZSBjb25zdGFudHMuIFVzZSB0aGVzZSB2YWx1ZXMgZm9yIHRoZSB7QGxpbmsgU2VjdXJlQnVja2V0UHJvcHMuYnVja2V0VHlwZX0gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBTZWN1cmVCdWNrZXRUeXBlID0ge1xuICAvKipcbiAgICogU2VsZWN0IHdoZW4gdXNpbmcgdGhpcyBidWNrZXQgYXMgdGhlIENESyBwaXBlbGluZSBhcnRpZmFjdCBidWNrZXQgd2l0aCBhIGN1c3RvbSBRdWFsaWZpZXJcbiAgICogKHNpbmdsZS1yZWdpb24gb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnQpLlxuICAgKi9cbiAgREVQTE9ZTUVOVF9QSVBFTElORV9BUlRJRkFDVF9CVUNLRVQ6ICdEZXBsb3ltZW50UGlwZWxpbmVBcnRpZmFjdEJ1Y2tldCcsXG4gIC8qKlxuICAgKiBTZWxlY3Qgd2hlbiB1c2luZyB0aGlzIGJ1Y2tldCBhcyB0aGUgQ2xvdWRGcm9udCBvcmlnaW4uXG4gICAqL1xuICBDTE9VREZST05UX09SSUdJTl9CVUNLRVQ6ICdDbG91ZEZyb250T3JpZ2luQnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCBmb3IgdGhlIGRlZmF1bHQgYnVja2V0IHdoZW4gbm90IHVzaW5nIGEgY3VzdG9tIFF1YWxpZmllci5cbiAgICovXG4gIERFRkFVTFRfQlVDS0VUOiAnRGVmYXVsdEJ1Y2tldCcsXG59IGFzIGNvbnN0O1xuXG4vKiogQnVja2V0IHR5cGU6IG9uZSBvZiB0aGUge0BsaW5rIFNlY3VyZUJ1Y2tldFR5cGV9IGNvbnN0YW50IHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIFNlY3VyZUJ1Y2tldFR5cGUgPSB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZVtrZXlvZiB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZV07XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBTZWN1cmVCdWNrZXR9LiBFeHRlbmRzIGBzMy5CdWNrZXRQcm9wc2Agd2l0aCBhIGJ1Y2tldCB0eXBlIGZvciBzZWN1cmUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlQnVja2V0UHJvcHMgZXh0ZW5kcyBzMy5CdWNrZXRQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidWNrZXQuIERldGVybWluZXMgZW5jcnlwdGlvbiBhbmQgcmVzb3VyY2UgcG9saWN5IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTZWN1cmVCdWNrZXRUeXBlLkRFRkFVTFRfQlVDS0VUXG4gICAqL1xuICByZWFkb25seSBidWNrZXRUeXBlPzogU2VjdXJlQnVja2V0VHlwZTtcbn1cblxuLyoqXG4gKiBBbiBTMyBidWNrZXQgd2l0aCBzZWN1cmUgZGVmYXVsdHM6IHByaXZhdGUgYWNjZXNzLCBTU0wgZW5mb3JjZWQsIHB1YmxpYyBhY2Nlc3MgYmxvY2tlZCwgYW5kIGVuY3J5cHRpb24gcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cmVCdWNrZXQgZXh0ZW5kcyBzMy5CdWNrZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNlY3VyZUJ1Y2tldFByb3BzKSB7XG4gICAgY29uc3QgYnVja2V0VHlwZSA9IHByb3BzPy5idWNrZXRUeXBlIHx8IFNlY3VyZUJ1Y2tldFR5cGUuREVGQVVMVF9CVUNLRVQ7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZW5jcnlwdGlvbjogKCgpID0+IHtcbiAgICAgICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQ0xPVURGUk9OVF9PUklHSU5fQlVDS0VUKSB7XG4gICAgICAgICAgcmV0dXJuIHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM/LmVuY3J5cHRpb24gfHwgczMuQnVja2V0RW5jcnlwdGlvbi5LTVNfTUFOQUdFRDtcbiAgICAgIH0pKCksXG4gICAgICBhY2Nlc3NDb250cm9sOiAoKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzPy5hY2Nlc3NDb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuIHMzLkJ1Y2tldEFjY2Vzc0NvbnRyb2wuUFJJVkFURTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHMuYWNjZXNzQ29udHJvbDtcbiAgICAgIH0pKCksXG4gICAgICBldmVudEJyaWRnZUVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IGZhbHNlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzPy52ZXJzaW9uZWQgIT09IHVuZGVmaW5lZCA/IHByb3BzLnZlcnNpb25lZCA6IHRydWUsXG4gICAgICBvYmplY3RPd25lcnNoaXA6ICgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcz8ub2JqZWN0T3duZXJzaGlwKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLm9iamVjdE93bmVyc2hpcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gczMuT2JqZWN0T3duZXJzaGlwLkJVQ0tFVF9PV05FUl9FTkZPUkNFRDtcbiAgICAgIH0pKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZm5CdWNrZXQgPSB0aGlzLm5vZGUuZGVmYXVsdENoaWxkIGFzIHMzLkNmbkJ1Y2tldDtcbiAgICBpZiAocHJvcHM/LmV2ZW50QnJpZGdlRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY2ZuQnVja2V0LmFkZFByb3BlcnR5T3ZlcnJpZGUoJ05vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uRXZlbnRCcmlkZ2VDb25maWd1cmF0aW9uLkV2ZW50QnJpZGdlRW5hYmxlZCcsIHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcblxuICAgIGlmIChidWNrZXRUeXBlID09PSBTZWN1cmVCdWNrZXRUeXBlLkRFUExPWU1FTlRfUElQRUxJTkVfQVJUSUZBQ1RfQlVDS0VUKSB7XG5cbiAgICAgIGNvbnN0IHF1YWxpZmllciA9IFN0YWNrLm9mKHRoaXMpLnN5bnRoZXNpemVyLmJvb3RzdHJhcFF1YWxpZmllcjtcblxuICAgICAgaWYgKHF1YWxpZmllciAmJiAocXVhbGlmaWVyICE9IERlZmF1bHRTdGFja1N5bnRoZXNpemVyLkRFRkFVTFRfUVVBTElGSUVSKSkge1xuICAgICAgICB0aGlzLmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdzMzoqJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59YCxcbiAgICAgICAgICAgIGAke3RoaXMuYnVja2V0QXJufS8qYCxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uQXJuUHJpbmNpcGFsKGBhcm46YXdzOmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay0ke3F1YWxpZmllcn0tZGVwbG95LXJvbGUtJHthY2NvdW50fS0ke3JlZ2lvbn1gKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il19
133
+ SecureBucket[_a] = { fqn: "aws-secure-bucket.SecureBucket", version: "3.1.0" };
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEU7QUFDNUUsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUd6Qzs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUI7OztPQUdHO0lBQ0gsbUNBQW1DLEVBQUUsa0NBQWtDO0lBQ3ZFOztPQUVHO0lBQ0gsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLGVBQWU7SUFDL0I7OztPQUdHO0lBQ0gsaUJBQWlCLEVBQUUsaUJBQWlCO0NBQzVCLENBQUM7QUFpQlg7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxFQUFFLENBQUMsTUFBTTtJQUN6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksd0JBQWdCLENBQUMsY0FBYyxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtZQUNuQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hCLElBQUksVUFBVSxLQUFLLHdCQUFnQixDQUFDLHdCQUF3QixJQUFJLFVBQVUsS0FBSyx3QkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNsSCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDOUQsQ0FBQyxDQUFDLEVBQUU7WUFDSixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQzFCLE9BQU8s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QWdCLENBQUMsNkJBQTZCLENBQUM7aUJBQ3hEO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxjQUFjO2lCQUNmO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxHQUFHLElBQUksQ0FBQyxTQUFTLFlBQVksT0FBTyxJQUFJO2lCQUN6QzthQUNGLENBQUMsQ0FBQyxDQUFDO1lBRUosOEVBQThFO1lBQzlFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQy9DLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztpQkFDckQ7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLGNBQWM7aUJBQ2Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULEdBQUcsSUFBSSxDQUFDLFNBQVMsWUFBWSxPQUFPLElBQUk7aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQzs7QUF0R0gsb0NBdUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEJ1Y2tldCB0eXBlIGNvbnN0YW50cy4gVXNlIHRoZXNlIHZhbHVlcyBmb3IgdGhlIHtAbGluayBTZWN1cmVCdWNrZXRQcm9wcy5idWNrZXRUeXBlfSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlY3VyZUJ1Y2tldFR5cGUgPSB7XG4gIC8qKlxuICAgKiBTZWxlY3Qgd2hlbiB1c2luZyB0aGlzIGJ1Y2tldCBhcyB0aGUgQ0RLIHBpcGVsaW5lIGFydGlmYWN0IGJ1Y2tldCB3aXRoIGEgY3VzdG9tIFF1YWxpZmllclxuICAgKiAoc2luZ2xlLXJlZ2lvbiBvciBtdWx0aS1yZWdpb24gZGVwbG95bWVudCkuXG4gICAqL1xuICBERVBMT1lNRU5UX1BJUEVMSU5FX0FSVElGQUNUX0JVQ0tFVDogJ0RlcGxveW1lbnRQaXBlbGluZUFydGlmYWN0QnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCB3aGVuIHVzaW5nIHRoaXMgYnVja2V0IGFzIHRoZSBDbG91ZEZyb250IG9yaWdpbi5cbiAgICovXG4gIENMT1VERlJPTlRfT1JJR0lOX0JVQ0tFVDogJ0Nsb3VkRnJvbnRPcmlnaW5CdWNrZXQnLFxuICAvKipcbiAgICogU2VsZWN0IGZvciB0aGUgZGVmYXVsdCBidWNrZXQgd2hlbiBub3QgdXNpbmcgYSBjdXN0b20gUXVhbGlmaWVyLlxuICAgKi9cbiAgREVGQVVMVF9CVUNLRVQ6ICdEZWZhdWx0QnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCB3aGVuIHVzaW5nIHRoaXMgYnVja2V0IGFzIGEgY2VudHJhbGl6ZWQgYWNjZXNzIGxvZyBidWNrZXRcbiAgICogZm9yIEFMQiwgQ2xvdWRGcm9udCwgUzMgc2VydmVyIGFjY2VzcyBsb2dnaW5nLCBhbmQgc2ltaWxhciBwcm9kdWNlcnMuXG4gICAqL1xuICBBQ0NFU1NfTE9HX0JVQ0tFVDogJ0FjY2Vzc0xvZ0J1Y2tldCcsXG59IGFzIGNvbnN0O1xuXG4vKiogQnVja2V0IHR5cGU6IG9uZSBvZiB0aGUge0BsaW5rIFNlY3VyZUJ1Y2tldFR5cGV9IGNvbnN0YW50IHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIFNlY3VyZUJ1Y2tldFR5cGUgPSB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZVtrZXlvZiB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZV07XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBTZWN1cmVCdWNrZXR9LiBFeHRlbmRzIGBzMy5CdWNrZXRQcm9wc2Agd2l0aCBhIGJ1Y2tldCB0eXBlIGZvciBzZWN1cmUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlQnVja2V0UHJvcHMgZXh0ZW5kcyBzMy5CdWNrZXRQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidWNrZXQuIERldGVybWluZXMgZW5jcnlwdGlvbiBhbmQgcmVzb3VyY2UgcG9saWN5IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTZWN1cmVCdWNrZXRUeXBlLkRFRkFVTFRfQlVDS0VUXG4gICAqL1xuICByZWFkb25seSBidWNrZXRUeXBlPzogU2VjdXJlQnVja2V0VHlwZTtcbn1cblxuLyoqXG4gKiBBbiBTMyBidWNrZXQgd2l0aCBzZWN1cmUgZGVmYXVsdHM6IHByaXZhdGUgYWNjZXNzLCBTU0wgZW5mb3JjZWQsIHB1YmxpYyBhY2Nlc3MgYmxvY2tlZCwgYW5kIGVuY3J5cHRpb24gcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cmVCdWNrZXQgZXh0ZW5kcyBzMy5CdWNrZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNlY3VyZUJ1Y2tldFByb3BzKSB7XG4gICAgY29uc3QgYnVja2V0VHlwZSA9IHByb3BzPy5idWNrZXRUeXBlIHx8IFNlY3VyZUJ1Y2tldFR5cGUuREVGQVVMVF9CVUNLRVQ7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZW5jcnlwdGlvbjogKCgpID0+IHtcbiAgICAgICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQ0xPVURGUk9OVF9PUklHSU5fQlVDS0VUIHx8IGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQUNDRVNTX0xPR19CVUNLRVQpIHtcbiAgICAgICAgICByZXR1cm4gczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcz8uZW5jcnlwdGlvbiB8fCBzMy5CdWNrZXRFbmNyeXB0aW9uLktNU19NQU5BR0VEO1xuICAgICAgfSkoKSxcbiAgICAgIGFjY2Vzc0NvbnRyb2w6ICgoKSA9PiB7XG4gICAgICAgIGlmICghcHJvcHM/LmFjY2Vzc0NvbnRyb2wpIHtcbiAgICAgICAgICByZXR1cm4gczMuQnVja2V0QWNjZXNzQ29udHJvbC5QUklWQVRFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcy5hY2Nlc3NDb250cm9sO1xuICAgICAgfSkoKSxcbiAgICAgIGV2ZW50QnJpZGdlRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIHZlcnNpb25lZDogcHJvcHM/LnZlcnNpb25lZCAhPT0gdW5kZWZpbmVkID8gcHJvcHMudmVyc2lvbmVkIDogdHJ1ZSxcbiAgICAgIG9iamVjdE93bmVyc2hpcDogKCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzPy5vYmplY3RPd25lcnNoaXApIHtcbiAgICAgICAgICByZXR1cm4gcHJvcHMub2JqZWN0T3duZXJzaGlwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzMy5PYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX0VORk9SQ0VEO1xuICAgICAgfSkoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNmbkJ1Y2tldCA9IHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgYXMgczMuQ2ZuQnVja2V0O1xuICAgIGlmIChwcm9wcz8uZXZlbnRCcmlkZ2VFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjZm5CdWNrZXQuYWRkUHJvcGVydHlPdmVycmlkZSgnTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5FdmVudEJyaWRnZUNvbmZpZ3VyYXRpb24uRXZlbnRCcmlkZ2VFbmFibGVkJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuXG4gICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuREVQTE9ZTUVOVF9QSVBFTElORV9BUlRJRkFDVF9CVUNLRVQpIHtcblxuICAgICAgY29uc3QgcXVhbGlmaWVyID0gU3RhY2sub2YodGhpcykuc3ludGhlc2l6ZXIuYm9vdHN0cmFwUXVhbGlmaWVyO1xuXG4gICAgICBpZiAocXVhbGlmaWVyICYmIChxdWFsaWZpZXIgIT0gRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIuREVGQVVMVF9RVUFMSUZJRVIpKSB7XG4gICAgICAgIHRoaXMuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgJ3MzOionLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgJHt0aGlzLmJ1Y2tldEFybn1gLFxuICAgICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59LypgLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvY2RrLSR7cXVhbGlmaWVyfS1kZXBsb3ktcm9sZS0ke2FjY291bnR9LSR7cmVnaW9ufWApLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVja2V0VHlwZSA9PT0gU2VjdXJlQnVja2V0VHlwZS5BQ0NFU1NfTE9HX0JVQ0tFVCkge1xuICAgICAgLy8gQWxsb3cgQUxCIC8gTkxCIGxvZyBkZWxpdmVyeSB0byBwdXQgb2JqZWN0cyAobm8gcmVhZCBvciBsaXN0KVxuICAgICAgdGhpcy5hZGRUb1Jlc291cmNlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsb2dkZWxpdmVyeS5lbGFzdGljbG9hZGJhbGFuY2luZy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59L0FXU0xvZ3MvJHthY2NvdW50fS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gQWxsb3cgQ2xvdWRGcm9udCBzdGFuZGFyZCBsb2dnaW5nICh2MikgdG8gd3JpdGUgbG9nc1xuICAgICAgdGhpcy5hZGRUb1Jlc291cmNlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdkZWxpdmVyeS5sb2dzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgXSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgJHt0aGlzLmJ1Y2tldEFybn0vQVdTTG9ncy8ke2FjY291bnR9LypgLFxuICAgICAgICBdLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBBbGxvdyBTMyBzZXJ2ZXIgYWNjZXNzIGxvZ2dpbmcgdG8gd3JpdGUgbG9ncyB3aGVuIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyYXRpb25cbiAgICAgIHRoaXMuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbG9nZ2luZy5zMy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59L0FXU0xvZ3MvJHthY2NvdW50fS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn0iXX0=
package/package.json CHANGED
@@ -79,7 +79,7 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "version": "3.0.13",
82
+ "version": "3.1.0",
83
83
  "jest": {
84
84
  "coverageProvider": "v8",
85
85
  "testMatch": [