@aws-cdk/aws-s3tables-alpha 2.190.0-alpha.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 +5110 -0
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +83 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +76 -0
- package/awslint.json +10 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +23 -0
- package/lib/permissions.d.ts +3 -0
- package/lib/permissions.js +24 -0
- package/lib/table-bucket-policy.d.ts +41 -0
- package/lib/table-bucket-policy.js +45 -0
- package/lib/table-bucket.d.ts +287 -0
- package/lib/table-bucket.js +269 -0
- package/lib/util.d.ts +17 -0
- package/lib/util.js +84 -0
- package/package.json +109 -0
- package/rosetta/_generated.ts-fixture +6 -0
- package/rosetta/default.ts-fixture +15 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { TableBucketPolicy } from './table-bucket-policy';
|
|
3
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { Resource, IResource, RemovalPolicy } from 'aws-cdk-lib/core';
|
|
5
|
+
/**
|
|
6
|
+
* Interface definition for S3 Table Buckets
|
|
7
|
+
*/
|
|
8
|
+
export interface ITableBucket extends IResource {
|
|
9
|
+
/**
|
|
10
|
+
* The ARN of the table bucket.
|
|
11
|
+
* @attribute
|
|
12
|
+
*/
|
|
13
|
+
readonly tableBucketArn: string;
|
|
14
|
+
/**
|
|
15
|
+
* The name of the table bucket.
|
|
16
|
+
* @attribute
|
|
17
|
+
*/
|
|
18
|
+
readonly tableBucketName: string;
|
|
19
|
+
/**
|
|
20
|
+
* The accountId containing the table bucket.
|
|
21
|
+
* @attribute
|
|
22
|
+
*/
|
|
23
|
+
readonly account?: string;
|
|
24
|
+
/**
|
|
25
|
+
* The region containing the table bucket.
|
|
26
|
+
* @attribute
|
|
27
|
+
*/
|
|
28
|
+
readonly region?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Adds a statement to the resource policy for a principal (i.e.
|
|
31
|
+
* account/role/service) to perform actions on this table bucket and/or its
|
|
32
|
+
* contents. Use `tableBucketArn` and `arnForObjects(keys)` to obtain ARNs for
|
|
33
|
+
* this bucket or objects.
|
|
34
|
+
*
|
|
35
|
+
* Note that the policy statement may or may not be added to the policy.
|
|
36
|
+
* For example, when an `ITableBucket` is created from an existing table bucket,
|
|
37
|
+
* it's not possible to tell whether the bucket already has a policy
|
|
38
|
+
* attached, let alone to re-use that policy to add more statements to it.
|
|
39
|
+
* So it's safest to do nothing in these cases.
|
|
40
|
+
*
|
|
41
|
+
* @param statement the policy statement to be added to the bucket's
|
|
42
|
+
* policy.
|
|
43
|
+
* @returns metadata about the execution of this method. If the policy
|
|
44
|
+
* was not added, the value of `statementAdded` will be `false`. You
|
|
45
|
+
* should always check this value to make sure that the operation was
|
|
46
|
+
* actually carried out. Otherwise, synthesis and deploy will terminate
|
|
47
|
+
* silently, which may be confusing.
|
|
48
|
+
*/
|
|
49
|
+
addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
|
|
50
|
+
/**
|
|
51
|
+
* Grant read permissions for this table bucket and its tables
|
|
52
|
+
* to an IAM principal (Role/Group/User).
|
|
53
|
+
*
|
|
54
|
+
* @param identity The principal to allow read permissions to
|
|
55
|
+
* @param tableId Allow the permissions to all tables using '*' or to single table by its unique ID.
|
|
56
|
+
*/
|
|
57
|
+
grantRead(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
58
|
+
/**
|
|
59
|
+
* Grant write permissions for this table bucket and its tables
|
|
60
|
+
* to an IAM principal (Role/Group/User).
|
|
61
|
+
*
|
|
62
|
+
* @param identity The principal to allow write permissions to
|
|
63
|
+
* @param tableId Allow the permissions to all tables using '*' or to single table by its unique ID.
|
|
64
|
+
*/
|
|
65
|
+
grantWrite(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
66
|
+
/**
|
|
67
|
+
* Grant read and write permissions for this table bucket and its tables
|
|
68
|
+
* to an IAM principal (Role/Group/User).
|
|
69
|
+
*
|
|
70
|
+
* @param identity The principal to allow read and write permissions to
|
|
71
|
+
* @param tableId Allow the permissions to all tables using '*' or to single table by its unique ID.
|
|
72
|
+
*/
|
|
73
|
+
grantReadWrite(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Unreferenced file removal settings for the this table bucket.
|
|
77
|
+
*/
|
|
78
|
+
export interface UnreferencedFileRemoval {
|
|
79
|
+
/**
|
|
80
|
+
* Duration after which noncurrent files should be removed. Should be at least one day.
|
|
81
|
+
* @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html
|
|
82
|
+
*
|
|
83
|
+
* @default - See S3 Tables User Guide
|
|
84
|
+
*/
|
|
85
|
+
readonly noncurrentDays?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Status of unreferenced file removal. Can be Enabled or Disabled.
|
|
88
|
+
* @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html
|
|
89
|
+
*
|
|
90
|
+
* @default - See S3 Tables User Guide
|
|
91
|
+
*/
|
|
92
|
+
readonly status?: UnreferencedFileRemovalStatus;
|
|
93
|
+
/**
|
|
94
|
+
* Duration after which unreferenced files should be removed. Should be at least one day.
|
|
95
|
+
* @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html
|
|
96
|
+
*
|
|
97
|
+
* @default - See S3 Tables User Guide
|
|
98
|
+
*/
|
|
99
|
+
readonly unreferencedDays?: number;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Controls whether unreferenced file removal is enabled or disabled.
|
|
103
|
+
*/
|
|
104
|
+
export declare enum UnreferencedFileRemovalStatus {
|
|
105
|
+
/**
|
|
106
|
+
* Enable unreferenced file removal.
|
|
107
|
+
*/
|
|
108
|
+
ENABLED = "Enabled",
|
|
109
|
+
/**
|
|
110
|
+
* Disable unreferenced file removal.
|
|
111
|
+
*/
|
|
112
|
+
DISABLED = "Disabled"
|
|
113
|
+
}
|
|
114
|
+
declare abstract class TableBucketBase extends Resource implements ITableBucket {
|
|
115
|
+
abstract readonly tableBucketArn: string;
|
|
116
|
+
abstract readonly tableBucketName: string;
|
|
117
|
+
/**
|
|
118
|
+
* The resource policy associated with this table bucket.
|
|
119
|
+
*
|
|
120
|
+
* If `autoCreatePolicy` is true, a `TableBucketPolicy` will be created upon the
|
|
121
|
+
* first call to addToResourcePolicy(s).
|
|
122
|
+
*/
|
|
123
|
+
abstract tableBucketPolicy?: TableBucketPolicy;
|
|
124
|
+
/**
|
|
125
|
+
* Indicates if a table bucket resource policy should automatically created upon
|
|
126
|
+
* the first call to `addToResourcePolicy`.
|
|
127
|
+
*/
|
|
128
|
+
protected abstract autoCreatePolicy: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Adds a statement to the resource policy for a principal (i.e.
|
|
131
|
+
* account/role/service) to perform actions on this table bucket and/or its
|
|
132
|
+
* contents. Use `tableBucketArn` and `arnForObjects(keys)` to obtain ARNs for
|
|
133
|
+
* this bucket or objects.
|
|
134
|
+
*
|
|
135
|
+
* Note that the policy statement may or may not be added to the policy.
|
|
136
|
+
* For example, when an `ITableBucket` is created from an existing table bucket,
|
|
137
|
+
* it's not possible to tell whether the bucket already has a policy
|
|
138
|
+
* attached, let alone to re-use that policy to add more statements to it.
|
|
139
|
+
* So it's safest to do nothing in these cases.
|
|
140
|
+
*
|
|
141
|
+
* @param statement the policy statement to be added to the bucket's
|
|
142
|
+
* policy.
|
|
143
|
+
* @returns metadata about the execution of this method. If the policy
|
|
144
|
+
* was not added, the value of `statementAdded` will be `false`. You
|
|
145
|
+
* should always check this value to make sure that the operation was
|
|
146
|
+
* actually carried out. Otherwise, synthesis and deploy will terminate
|
|
147
|
+
* silently, which may be confusing.
|
|
148
|
+
*/
|
|
149
|
+
addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
|
|
150
|
+
grantRead(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
151
|
+
grantWrite(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
152
|
+
grantReadWrite(identity: iam.IGrantable, tableId: string): iam.Grant;
|
|
153
|
+
/**
|
|
154
|
+
* Grants the given s3tables permissions to the provided principal
|
|
155
|
+
* @returns Grant object
|
|
156
|
+
*/
|
|
157
|
+
private grant;
|
|
158
|
+
private getTableArn;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Parameters for constructing a TableBucket
|
|
162
|
+
*/
|
|
163
|
+
export interface TableBucketProps {
|
|
164
|
+
/**
|
|
165
|
+
* Name of the S3 TableBucket.
|
|
166
|
+
* @link https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html#table-buckets-naming-rules
|
|
167
|
+
*/
|
|
168
|
+
readonly tableBucketName: string;
|
|
169
|
+
/**
|
|
170
|
+
* Unreferenced file removal settings for the S3 TableBucket.
|
|
171
|
+
* @link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-tablebucket-unreferencedfileremoval.html
|
|
172
|
+
* @default Enabled with default values
|
|
173
|
+
* @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html
|
|
174
|
+
*/
|
|
175
|
+
readonly unreferencedFileRemoval?: UnreferencedFileRemoval;
|
|
176
|
+
/**
|
|
177
|
+
* AWS region that the table bucket exists in.
|
|
178
|
+
*
|
|
179
|
+
* @default - it's assumed the bucket is in the same region as the scope it's being imported into
|
|
180
|
+
*/
|
|
181
|
+
readonly region?: string;
|
|
182
|
+
/**
|
|
183
|
+
* AWS Account ID of the table bucket owner.
|
|
184
|
+
*
|
|
185
|
+
* @default - it's assumed the bucket belongs to the same account as the scope it's being imported into
|
|
186
|
+
*/
|
|
187
|
+
readonly account?: string;
|
|
188
|
+
/**
|
|
189
|
+
* Controls what happens to this table bucket it it stoped being managed by cloudformation.
|
|
190
|
+
*
|
|
191
|
+
* @default RETAIN
|
|
192
|
+
*/
|
|
193
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Everything needed to reference a specific table bucket.
|
|
197
|
+
* The tableBucketName, region, and account can be provided explicitly
|
|
198
|
+
* or will be inferred from the tableBucketArn
|
|
199
|
+
*/
|
|
200
|
+
export interface TableBucketAttributes {
|
|
201
|
+
/**
|
|
202
|
+
* AWS region this table bucket exists in
|
|
203
|
+
* @default region inferred from scope
|
|
204
|
+
*/
|
|
205
|
+
readonly region?: string;
|
|
206
|
+
/**
|
|
207
|
+
* The accountId containing this table bucket
|
|
208
|
+
* @default account inferred from scope
|
|
209
|
+
*/
|
|
210
|
+
readonly account?: string;
|
|
211
|
+
/**
|
|
212
|
+
* The table bucket name, unique per region
|
|
213
|
+
* @default tableBucketName inferred from arn
|
|
214
|
+
*/
|
|
215
|
+
readonly tableBucketName?: string;
|
|
216
|
+
/**
|
|
217
|
+
* The table bucket's ARN.
|
|
218
|
+
* @default tableBucketArn constructed from region, account and tableBucketName are provided
|
|
219
|
+
*/
|
|
220
|
+
readonly tableBucketArn?: string;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* An S3 table bucket with helpers for associated resource policies
|
|
224
|
+
*
|
|
225
|
+
* This bucket may not yet have all features that exposed by the underlying CfnTableBucket.
|
|
226
|
+
*
|
|
227
|
+
* @stateful
|
|
228
|
+
* @example
|
|
229
|
+
* const sampleTableBucket = new TableBucket(scope, 'ExampleTableBucket', {
|
|
230
|
+
* tableBucketName: 'example-bucket',
|
|
231
|
+
* // Optional fields:
|
|
232
|
+
* unreferencedFileRemoval: {
|
|
233
|
+
* noncurrentDays: 123,
|
|
234
|
+
* status: UnreferencedFileRemovalStatus.ENABLED,
|
|
235
|
+
* unreferencedDays: 123,
|
|
236
|
+
* },
|
|
237
|
+
* });
|
|
238
|
+
*/
|
|
239
|
+
export declare class TableBucket extends TableBucketBase {
|
|
240
|
+
/**
|
|
241
|
+
* Defines a TableBucket construct from an external table bucket ARN.
|
|
242
|
+
*
|
|
243
|
+
* @param scope The parent creating construct (usually `this`).
|
|
244
|
+
* @param id The construct's name.
|
|
245
|
+
* @param tableBucketArn Amazon Resource Name (arn) of the table bucket
|
|
246
|
+
*/
|
|
247
|
+
static fromTableBucketArn(scope: Construct, id: string, tableBucketArn: string): ITableBucket;
|
|
248
|
+
/**
|
|
249
|
+
* Defines a TableBucket construct that represents an external table bucket.
|
|
250
|
+
*
|
|
251
|
+
* @param scope The parent creating construct (usually `this`).
|
|
252
|
+
* @param id The construct's name.
|
|
253
|
+
* @param attrs A `TableBucketAttributes` object. Can be manually created.
|
|
254
|
+
*/
|
|
255
|
+
static fromTableBucketAttributes(scope: Construct, id: string, attrs: TableBucketAttributes): ITableBucket;
|
|
256
|
+
/**
|
|
257
|
+
* Throws an exception if the given table bucket name is not valid.
|
|
258
|
+
*
|
|
259
|
+
* @param bucketName name of the bucket.
|
|
260
|
+
*/
|
|
261
|
+
static validateTableBucketName(bucketName: string | undefined): void;
|
|
262
|
+
/**
|
|
263
|
+
* Throws an exception if the given unreferencedFileRemovalProperty is not valid.
|
|
264
|
+
* @param unreferencedFileRemoval configuration for the table bucket
|
|
265
|
+
*/
|
|
266
|
+
static validateUnreferencedFileRemoval(unreferencedFileRemoval?: UnreferencedFileRemoval): void;
|
|
267
|
+
/**
|
|
268
|
+
* The underlying CfnTableBucket L1 resource
|
|
269
|
+
* @internal
|
|
270
|
+
*/
|
|
271
|
+
private readonly _resource;
|
|
272
|
+
/**
|
|
273
|
+
* The resource policy for this tableBucket.
|
|
274
|
+
*/
|
|
275
|
+
readonly tableBucketPolicy?: TableBucketPolicy;
|
|
276
|
+
/**
|
|
277
|
+
* The unique Amazon Resource Name (arn) of this table bucket
|
|
278
|
+
*/
|
|
279
|
+
readonly tableBucketArn: string;
|
|
280
|
+
/**
|
|
281
|
+
* The name of this table bucket
|
|
282
|
+
*/
|
|
283
|
+
readonly tableBucketName: string;
|
|
284
|
+
protected autoCreatePolicy: boolean;
|
|
285
|
+
constructor(scope: Construct, id: string, props: TableBucketProps);
|
|
286
|
+
}
|
|
287
|
+
export {};
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TableBucket = exports.UnreferencedFileRemovalStatus = void 0;
|
|
5
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
6
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
|
+
const os_1 = require("os");
|
|
8
|
+
const s3tables = require("aws-cdk-lib/aws-s3tables");
|
|
9
|
+
const table_bucket_policy_1 = require("./table-bucket-policy");
|
|
10
|
+
const perms = require("./permissions");
|
|
11
|
+
const util_1 = require("./util");
|
|
12
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
13
|
+
const core_1 = require("aws-cdk-lib/core");
|
|
14
|
+
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
15
|
+
/**
|
|
16
|
+
* Controls whether unreferenced file removal is enabled or disabled.
|
|
17
|
+
*/
|
|
18
|
+
var UnreferencedFileRemovalStatus;
|
|
19
|
+
(function (UnreferencedFileRemovalStatus) {
|
|
20
|
+
/**
|
|
21
|
+
* Enable unreferenced file removal.
|
|
22
|
+
*/
|
|
23
|
+
UnreferencedFileRemovalStatus["ENABLED"] = "Enabled";
|
|
24
|
+
/**
|
|
25
|
+
* Disable unreferenced file removal.
|
|
26
|
+
*/
|
|
27
|
+
UnreferencedFileRemovalStatus["DISABLED"] = "Disabled";
|
|
28
|
+
})(UnreferencedFileRemovalStatus || (exports.UnreferencedFileRemovalStatus = UnreferencedFileRemovalStatus = {}));
|
|
29
|
+
class TableBucketBase extends core_1.Resource {
|
|
30
|
+
/**
|
|
31
|
+
* Adds a statement to the resource policy for a principal (i.e.
|
|
32
|
+
* account/role/service) to perform actions on this table bucket and/or its
|
|
33
|
+
* contents. Use `tableBucketArn` and `arnForObjects(keys)` to obtain ARNs for
|
|
34
|
+
* this bucket or objects.
|
|
35
|
+
*
|
|
36
|
+
* Note that the policy statement may or may not be added to the policy.
|
|
37
|
+
* For example, when an `ITableBucket` is created from an existing table bucket,
|
|
38
|
+
* it's not possible to tell whether the bucket already has a policy
|
|
39
|
+
* attached, let alone to re-use that policy to add more statements to it.
|
|
40
|
+
* So it's safest to do nothing in these cases.
|
|
41
|
+
*
|
|
42
|
+
* @param statement the policy statement to be added to the bucket's
|
|
43
|
+
* policy.
|
|
44
|
+
* @returns metadata about the execution of this method. If the policy
|
|
45
|
+
* was not added, the value of `statementAdded` will be `false`. You
|
|
46
|
+
* should always check this value to make sure that the operation was
|
|
47
|
+
* actually carried out. Otherwise, synthesis and deploy will terminate
|
|
48
|
+
* silently, which may be confusing.
|
|
49
|
+
*/
|
|
50
|
+
addToResourcePolicy(statement) {
|
|
51
|
+
if (!this.tableBucketPolicy && this.autoCreatePolicy) {
|
|
52
|
+
this.tableBucketPolicy = new table_bucket_policy_1.TableBucketPolicy(this, 'DefaultPolicy', {
|
|
53
|
+
tableBucket: this,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (this.tableBucketPolicy) {
|
|
57
|
+
this.tableBucketPolicy.document.addStatements(statement);
|
|
58
|
+
return { statementAdded: true, policyDependable: this.tableBucketPolicy };
|
|
59
|
+
}
|
|
60
|
+
return { statementAdded: false };
|
|
61
|
+
}
|
|
62
|
+
grantRead(identity, tableId) {
|
|
63
|
+
return this.grant(identity, perms.TABLE_BUCKET_READ_ACCESS, this.tableBucketArn, this.getTableArn(tableId));
|
|
64
|
+
}
|
|
65
|
+
grantWrite(identity, tableId) {
|
|
66
|
+
return this.grant(identity, perms.TABLE_BUCKET_WRITE_ACCESS, this.tableBucketArn, this.getTableArn(tableId));
|
|
67
|
+
}
|
|
68
|
+
grantReadWrite(identity, tableId) {
|
|
69
|
+
return this.grant(identity, perms.TABLE_BUCKET_READ_WRITE_ACCESS, this.tableBucketArn, this.getTableArn(tableId));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Grants the given s3tables permissions to the provided principal
|
|
73
|
+
* @returns Grant object
|
|
74
|
+
*/
|
|
75
|
+
grant(grantee, tableBucketActions, resourceArn, ...otherResourceArns) {
|
|
76
|
+
const resources = [resourceArn, ...otherResourceArns].filter(arn => arn != undefined);
|
|
77
|
+
return iam.Grant.addToPrincipalOrResource({
|
|
78
|
+
grantee,
|
|
79
|
+
actions: tableBucketActions,
|
|
80
|
+
resourceArns: resources,
|
|
81
|
+
resource: this,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
getTableArn(tableId) {
|
|
85
|
+
return tableId ? `${this.tableBucketArn}/table/${tableId}` : undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* An S3 table bucket with helpers for associated resource policies
|
|
90
|
+
*
|
|
91
|
+
* This bucket may not yet have all features that exposed by the underlying CfnTableBucket.
|
|
92
|
+
*
|
|
93
|
+
* @stateful
|
|
94
|
+
* @example
|
|
95
|
+
* const sampleTableBucket = new TableBucket(scope, 'ExampleTableBucket', {
|
|
96
|
+
* tableBucketName: 'example-bucket',
|
|
97
|
+
* // Optional fields:
|
|
98
|
+
* unreferencedFileRemoval: {
|
|
99
|
+
* noncurrentDays: 123,
|
|
100
|
+
* status: UnreferencedFileRemovalStatus.ENABLED,
|
|
101
|
+
* unreferencedDays: 123,
|
|
102
|
+
* },
|
|
103
|
+
* });
|
|
104
|
+
*/
|
|
105
|
+
class TableBucket extends TableBucketBase {
|
|
106
|
+
/**
|
|
107
|
+
* Defines a TableBucket construct from an external table bucket ARN.
|
|
108
|
+
*
|
|
109
|
+
* @param scope The parent creating construct (usually `this`).
|
|
110
|
+
* @param id The construct's name.
|
|
111
|
+
* @param tableBucketArn Amazon Resource Name (arn) of the table bucket
|
|
112
|
+
*/
|
|
113
|
+
static fromTableBucketArn(scope, id, tableBucketArn) {
|
|
114
|
+
return TableBucket.fromTableBucketAttributes(scope, id, { tableBucketArn });
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Defines a TableBucket construct that represents an external table bucket.
|
|
118
|
+
*
|
|
119
|
+
* @param scope The parent creating construct (usually `this`).
|
|
120
|
+
* @param id The construct's name.
|
|
121
|
+
* @param attrs A `TableBucketAttributes` object. Can be manually created.
|
|
122
|
+
*/
|
|
123
|
+
static fromTableBucketAttributes(scope, id, attrs) {
|
|
124
|
+
try {
|
|
125
|
+
jsiiDeprecationWarnings._aws_cdk_aws_s3tables_alpha_TableBucketAttributes(attrs);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
129
|
+
Error.captureStackTrace(error, this.fromTableBucketAttributes);
|
|
130
|
+
}
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
const { tableBucketName, region, account, tableBucketArn } = (0, util_1.validateTableBucketAttributes)(scope, attrs);
|
|
134
|
+
TableBucket.validateTableBucketName(tableBucketName);
|
|
135
|
+
class Import extends TableBucketBase {
|
|
136
|
+
constructor() {
|
|
137
|
+
super(...arguments);
|
|
138
|
+
this.tableBucketName = tableBucketName;
|
|
139
|
+
this.tableBucketArn = tableBucketArn;
|
|
140
|
+
this.region = region;
|
|
141
|
+
this.account = account;
|
|
142
|
+
this.autoCreatePolicy = false;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Exports this bucket from the stack.
|
|
146
|
+
*/
|
|
147
|
+
export() {
|
|
148
|
+
return attrs;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return new Import(scope, id, {
|
|
152
|
+
account,
|
|
153
|
+
region,
|
|
154
|
+
physicalName: tableBucketName,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Throws an exception if the given table bucket name is not valid.
|
|
159
|
+
*
|
|
160
|
+
* @param bucketName name of the bucket.
|
|
161
|
+
*/
|
|
162
|
+
static validateTableBucketName(bucketName) {
|
|
163
|
+
if (bucketName == undefined || core_1.Token.isUnresolved(bucketName)) {
|
|
164
|
+
// the name is a late-bound value, not a defined string, so skip validation
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const errors = [];
|
|
168
|
+
// Length validation
|
|
169
|
+
if (bucketName.length < 3 || bucketName.length > 63) {
|
|
170
|
+
errors.push('Bucket name must be at least 3 and no more than 63 characters');
|
|
171
|
+
}
|
|
172
|
+
// Character set validation
|
|
173
|
+
const illegalCharsetRegEx = /[^a-z0-9-]/;
|
|
174
|
+
const allowedEdgeCharsetRegEx = /[a-z0-9]/;
|
|
175
|
+
const illegalCharMatch = bucketName.match(illegalCharsetRegEx);
|
|
176
|
+
if (illegalCharMatch) {
|
|
177
|
+
errors.push('Bucket name must only contain lowercase characters, numbers, and hyphens (-)' +
|
|
178
|
+
` (offset: ${illegalCharMatch.index})`);
|
|
179
|
+
}
|
|
180
|
+
// Edge character validation
|
|
181
|
+
if (!allowedEdgeCharsetRegEx.test(bucketName.charAt(0))) {
|
|
182
|
+
errors.push('Bucket name must start with a lowercase letter or number (offset: 0)');
|
|
183
|
+
}
|
|
184
|
+
if (!allowedEdgeCharsetRegEx.test(bucketName.charAt(bucketName.length - 1))) {
|
|
185
|
+
errors.push(`Bucket name must end with a lowercase letter or number (offset: ${bucketName.length - 1})`);
|
|
186
|
+
}
|
|
187
|
+
if (errors.length > 0) {
|
|
188
|
+
throw new core_1.UnscopedValidationError(`Invalid S3 table bucket name (value: ${bucketName})${os_1.EOL}${errors.join(os_1.EOL)}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Throws an exception if the given unreferencedFileRemovalProperty is not valid.
|
|
193
|
+
* @param unreferencedFileRemoval configuration for the table bucket
|
|
194
|
+
*/
|
|
195
|
+
static validateUnreferencedFileRemoval(unreferencedFileRemoval) {
|
|
196
|
+
try {
|
|
197
|
+
jsiiDeprecationWarnings._aws_cdk_aws_s3tables_alpha_UnreferencedFileRemoval(unreferencedFileRemoval);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
201
|
+
Error.captureStackTrace(error, this.validateUnreferencedFileRemoval);
|
|
202
|
+
}
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
// Skip validation if property is not defined
|
|
206
|
+
if (!unreferencedFileRemoval) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const { noncurrentDays, status, unreferencedDays } = unreferencedFileRemoval;
|
|
210
|
+
const errors = [];
|
|
211
|
+
if (noncurrentDays != undefined) {
|
|
212
|
+
if (noncurrentDays < 1) {
|
|
213
|
+
errors.push('noncurrentDays must be at least 1 day');
|
|
214
|
+
}
|
|
215
|
+
if (!Number.isInteger(noncurrentDays)) {
|
|
216
|
+
errors.push('noncurrentDays must be a whole number');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (unreferencedDays != undefined) {
|
|
220
|
+
if (unreferencedDays < 1) {
|
|
221
|
+
errors.push('unreferencedDays must be at least 1 day');
|
|
222
|
+
}
|
|
223
|
+
if (!Number.isInteger(noncurrentDays)) {
|
|
224
|
+
errors.push('unreferencedDays must be a whole number');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const allowedStatus = ['Enabled', 'Disabled'];
|
|
228
|
+
if (status != undefined && !allowedStatus.includes(status)) {
|
|
229
|
+
errors.push('status must be one of \'Enabled\' or \'Disabled\'');
|
|
230
|
+
}
|
|
231
|
+
if (errors.length > 0) {
|
|
232
|
+
throw new core_1.UnscopedValidationError(`Invalid UnreferencedFileRemovalProperty})${os_1.EOL}${errors.join(os_1.EOL)}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
constructor(scope, id, props) {
|
|
236
|
+
super(scope, id, {
|
|
237
|
+
physicalName: props.tableBucketName,
|
|
238
|
+
});
|
|
239
|
+
this.autoCreatePolicy = true;
|
|
240
|
+
try {
|
|
241
|
+
jsiiDeprecationWarnings._aws_cdk_aws_s3tables_alpha_TableBucketProps(props);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
245
|
+
Error.captureStackTrace(error, TableBucket);
|
|
246
|
+
}
|
|
247
|
+
throw error;
|
|
248
|
+
}
|
|
249
|
+
// Enhanced CDK Analytics Telemetry
|
|
250
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
251
|
+
TableBucket.validateTableBucketName(props.tableBucketName);
|
|
252
|
+
TableBucket.validateUnreferencedFileRemoval(props.unreferencedFileRemoval);
|
|
253
|
+
this._resource = new s3tables.CfnTableBucket(this, id, {
|
|
254
|
+
tableBucketName: props.tableBucketName,
|
|
255
|
+
unreferencedFileRemoval: {
|
|
256
|
+
...props.unreferencedFileRemoval,
|
|
257
|
+
noncurrentDays: props.unreferencedFileRemoval?.noncurrentDays,
|
|
258
|
+
unreferencedDays: props.unreferencedFileRemoval?.unreferencedDays,
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
this.tableBucketName = this.getResourceNameAttribute(this._resource.ref);
|
|
262
|
+
this.tableBucketArn = this._resource.attrTableBucketArn;
|
|
263
|
+
this._resource.applyRemovalPolicy(props.removalPolicy);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.TableBucket = TableBucket;
|
|
267
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
268
|
+
TableBucket[_a] = { fqn: "@aws-cdk/aws-s3tables-alpha.TableBucket", version: "2.190.0-alpha.0" };
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFibGUtYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJCQUF5QjtBQUV6QixxREFBcUQ7QUFDckQsK0RBQTBEO0FBQzFELHVDQUF1QztBQUN2QyxpQ0FBdUQ7QUFDdkQsMkNBQTJDO0FBQzNDLDJDQUFzRztBQUN0Ryw4RUFBOEU7QUE2RzlFOztHQUVHO0FBQ0gsSUFBWSw2QkFVWDtBQVZELFdBQVksNkJBQTZCO0lBQ3ZDOztPQUVHO0lBQ0gsb0RBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCxzREFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVlcsNkJBQTZCLDZDQUE3Qiw2QkFBNkIsUUFVeEM7QUFFRCxNQUFlLGVBQWdCLFNBQVEsZUFBUTtJQWtCN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxtQkFBbUIsQ0FDeEIsU0FBOEI7UUFFOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO2dCQUNwRSxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUNsQztJQUVNLFNBQVMsQ0FBQyxRQUF3QixFQUFFLE9BQWU7UUFDeEQsT0FBTyxJQUFJ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QUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUN4RDs7QUF0TUgsa0NBdU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBzM3RhYmxlcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczN0YWJsZXMnO1xuaW1wb3J0IHsgVGFibGVCdWNrZXRQb2xpY3kgfSBmcm9tICcuL3RhYmxlLWJ1Y2tldC1wb2xpY3knO1xuaW1wb3J0ICogYXMgcGVybXMgZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVRhYmxlQnVja2V0QXR0cmlidXRlcyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSZXNvdXJjZSwgSVJlc291cmNlLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciwgUmVtb3ZhbFBvbGljeSwgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuXG4vKipcbiAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBTMyBUYWJsZSBCdWNrZXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlQnVja2V0IGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHRhYmxlIGJ1Y2tldC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVCdWNrZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGJ1Y2tldC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVCdWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50SWQgY29udGFpbmluZyB0aGUgdGFibGUgYnVja2V0LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhlIHRhYmxlIGJ1Y2tldC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIGEgcHJpbmNpcGFsIChpLmUuXG4gICAqIGFjY291bnQvcm9sZS9zZXJ2aWNlKSB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyB0YWJsZSBidWNrZXQgYW5kL29yIGl0c1xuICAgKiBjb250ZW50cy4gVXNlIGB0YWJsZUJ1Y2tldEFybmAgYW5kIGBhcm5Gb3JPYmplY3RzKGtleXMpYCB0byBvYnRhaW4gQVJOcyBmb3JcbiAgICogdGhpcyBidWNrZXQgb3Igb2JqZWN0cy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBwb2xpY3kgc3RhdGVtZW50IG1heSBvciBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kuXG4gICAqIEZvciBleGFtcGxlLCB3aGVuIGFuIGBJVGFibGVCdWNrZXRgIGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyB0YWJsZSBidWNrZXQsXG4gICAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHRlbGwgd2hldGhlciB0aGUgYnVja2V0IGFscmVhZHkgaGFzIGEgcG9saWN5XG4gICAqIGF0dGFjaGVkLCBsZXQgYWxvbmUgdG8gcmUtdXNlIHRoYXQgcG9saWN5IHRvIGFkZCBtb3JlIHN0YXRlbWVudHMgdG8gaXQuXG4gICAqIFNvIGl0J3Mgc2FmZXN0IHRvIGRvIG5vdGhpbmcgaW4gdGhlc2UgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZW1lbnQgdGhlIHBvbGljeSBzdGF0ZW1lbnQgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1Y2tldCdzXG4gICAqIHBvbGljeS5cbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZC4gSWYgdGhlIHBvbGljeVxuICAgKiB3YXMgbm90IGFkZGVkLCB0aGUgdmFsdWUgb2YgYHN0YXRlbWVudEFkZGVkYCB3aWxsIGJlIGBmYWxzZWAuIFlvdVxuICAgKiBzaG91bGQgYWx3YXlzIGNoZWNrIHRoaXMgdmFsdWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiB3YXNcbiAgICogYWN0dWFsbHkgY2FycmllZCBvdXQuIE90aGVyd2lzZSwgc3ludGhlc2lzIGFuZCBkZXBsb3kgd2lsbCB0ZXJtaW5hdGVcbiAgICogc2lsZW50bHksIHdoaWNoIG1heSBiZSBjb25mdXNpbmcuXG4gICAqL1xuICBhZGRUb1Jlc291cmNlUG9saWN5KHN0YXRlbWVudDogaWFtLlBvbGljeVN0YXRlbWVudCk6IGlhbS5BZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIGZvciB0aGlzIHRhYmxlIGJ1Y2tldCBhbmQgaXRzIHRhYmxlc1xuICAgKiB0byBhbiBJQU0gcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBAcGFyYW0gaWRlbnRpdHkgVGhlIHByaW5jaXBhbCB0byBhbGxvdyByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSB0YWJsZUlkIEFsbG93IHRoZSBwZXJtaXNzaW9ucyB0byBhbGwgdGFibGVzIHVzaW5nICcqJyBvciB0byBzaW5nbGUgdGFibGUgYnkgaXRzIHVuaXF1ZSBJRC5cbiAgICovXG4gIGdyYW50UmVhZChpZGVudGl0eTogaWFtLklHcmFudGFibGUsIHRhYmxlSWQ6IHN0cmluZyk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoaXMgdGFibGUgYnVja2V0IGFuZCBpdHMgdGFibGVzXG4gICAqIHRvIGFuIElBTSBwcmluY2lwYWwgKFJvbGUvR3JvdXAvVXNlcikuXG4gICAqXG4gICAqIEBwYXJhbSBpZGVudGl0eSBUaGUgcHJpbmNpcGFsIHRvIGFsbG93IHdyaXRlIHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSB0YWJsZUlkIEFsbG93IHRoZSBwZXJtaXNzaW9ucyB0byBhbGwgdGFibGVzIHVzaW5nICcqJyBvciB0byBzaW5nbGUgdGFibGUgYnkgaXRzIHVuaXF1ZSBJRC5cbiAgICovXG4gIGdyYW50V3JpdGUoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlLCB0YWJsZUlkOiBzdHJpbmcpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGlzIHRhYmxlIGJ1Y2tldCBhbmQgaXRzIHRhYmxlc1xuICAgKiB0byBhbiBJQU0gcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBAcGFyYW0gaWRlbnRpdHkgVGhlIHByaW5jaXBhbCB0byBhbGxvdyByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gdGFibGVJZCBBbGxvdyB0aGUgcGVybWlzc2lvbnMgdG8gYWxsIHRhYmxlcyB1c2luZyAnKicgb3IgdG8gc2luZ2xlIHRhYmxlIGJ5IGl0cyB1bmlxdWUgSUQuXG4gICAqL1xuICBncmFudFJlYWRXcml0ZShpZGVudGl0eTogaWFtLklHcmFudGFibGUsIHRhYmxlSWQ6IHN0cmluZyk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBVbnJlZmVyZW5jZWQgZmlsZSByZW1vdmFsIHNldHRpbmdzIGZvciB0aGUgdGhpcyB0YWJsZSBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5yZWZlcmVuY2VkRmlsZVJlbW92YWwge1xuICAvKipcbiAgICogRHVyYXRpb24gYWZ0ZXIgd2hpY2ggbm9uY3VycmVudCBmaWxlcyBzaG91bGQgYmUgcmVtb3ZlZC4gU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBkYXkuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGUtYnVja2V0cy1tYWludGVuYW5jZS5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VlIFMzIFRhYmxlcyBVc2VyIEd1aWRlXG4gICAqL1xuICByZWFkb25seSBub25jdXJyZW50RGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogU3RhdHVzIG9mIHVucmVmZXJlbmNlZCBmaWxlIHJlbW92YWwuIENhbiBiZSBFbmFibGVkIG9yIERpc2FibGVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3MzLXRhYmxlLWJ1Y2tldHMtbWFpbnRlbmFuY2UuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNlZSBTMyBUYWJsZXMgVXNlciBHdWlkZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogVW5yZWZlcmVuY2VkRmlsZVJlbW92YWxTdGF0dXM7XG5cbiAgLyoqXG4gICAqIER1cmF0aW9uIGFmdGVyIHdoaWNoIHVucmVmZXJlbmNlZCBmaWxlcyBzaG91bGQgYmUgcmVtb3ZlZC4gU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBkYXkuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGUtYnVja2V0cy1tYWludGVuYW5jZS5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VlIFMzIFRhYmxlcyBVc2VyIEd1aWRlXG4gICAqL1xuICByZWFkb25seSB1bnJlZmVyZW5jZWREYXlzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnRyb2xzIHdoZXRoZXIgdW5yZWZlcmVuY2VkIGZpbGUgcmVtb3ZhbCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLlxuICovXG5leHBvcnQgZW51bSBVbnJlZmVyZW5jZWRGaWxlUmVtb3ZhbFN0YXR1cyB7XG4gIC8qKlxuICAgKiBFbmFibGUgdW5yZWZlcmVuY2VkIGZpbGUgcmVtb3ZhbC5cbiAgICovXG4gIEVOQUJMRUQgPSAnRW5hYmxlZCcsXG5cbiAgLyoqXG4gICAqIERpc2FibGUgdW5yZWZlcmVuY2VkIGZpbGUgcmVtb3ZhbC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0Rpc2FibGVkJyxcbn1cblxuYWJzdHJhY3QgY2xhc3MgVGFibGVCdWNrZXRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVGFibGVCdWNrZXQge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVCdWNrZXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlQnVja2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlIGJ1Y2tldC5cbiAgICpcbiAgICogSWYgYGF1dG9DcmVhdGVQb2xpY3lgIGlzIHRydWUsIGEgYFRhYmxlQnVja2V0UG9saWN5YCB3aWxsIGJlIGNyZWF0ZWQgdXBvbiB0aGVcbiAgICogZmlyc3QgY2FsbCB0byBhZGRUb1Jlc291cmNlUG9saWN5KHMpLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHRhYmxlQnVja2V0UG9saWN5PzogVGFibGVCdWNrZXRQb2xpY3k7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHRhYmxlIGJ1Y2tldCByZXNvdXJjZSBwb2xpY3kgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB1cG9uXG4gICAqIHRoZSBmaXJzdCBjYWxsIHRvIGBhZGRUb1Jlc291cmNlUG9saWN5YC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhdXRvQ3JlYXRlUG9saWN5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIGEgcHJpbmNpcGFsIChpLmUuXG4gICAqIGFjY291bnQvcm9sZS9zZXJ2aWNlKSB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyB0YWJsZSBidWNrZXQgYW5kL29yIGl0c1xuICAgKiBjb250ZW50cy4gVXNlIGB0YWJsZUJ1Y2tldEFybmAgYW5kIGBhcm5Gb3JPYmplY3RzKGtleXMpYCB0byBvYnRhaW4gQVJOcyBmb3JcbiAgICogdGhpcyBidWNrZXQgb3Igb2JqZWN0cy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBwb2xpY3kgc3RhdGVtZW50IG1heSBvciBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kuXG4gICAqIEZvciBleGFtcGxlLCB3aGVuIGFuIGBJVGFibGVCdWNrZXRgIGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyB0YWJsZSBidWNrZXQsXG4gICAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHRlbGwgd2hldGhlciB0aGUgYnVja2V0IGFscmVhZHkgaGFzIGEgcG9saWN5XG4gICAqIGF0dGFjaGVkLCBsZXQgYWxvbmUgdG8gcmUtdXNlIHRoYXQgcG9saWN5IHRvIGFkZCBtb3JlIHN0YXRlbWVudHMgdG8gaXQuXG4gICAqIFNvIGl0J3Mgc2FmZXN0IHRvIGRvIG5vdGhpbmcgaW4gdGhlc2UgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZW1lbnQgdGhlIHBvbGljeSBzdGF0ZW1lbnQgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1Y2tldCdzXG4gICAqIHBvbGljeS5cbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZC4gSWYgdGhlIHBvbGljeVxuICAgKiB3YXMgbm90IGFkZGVkLCB0aGUgdmFsdWUgb2YgYHN0YXRlbWVudEFkZGVkYCB3aWxsIGJlIGBmYWxzZWAuIFlvdVxuICAgKiBzaG91bGQgYWx3YXlzIGNoZWNrIHRoaXMgdmFsdWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiB3YXNcbiAgICogYWN0dWFsbHkgY2FycmllZCBvdXQuIE90aGVyd2lzZSwgc3ludGhlc2lzIGFuZCBkZXBsb3kgd2lsbCB0ZXJtaW5hdGVcbiAgICogc2lsZW50bHksIHdoaWNoIG1heSBiZSBjb25mdXNpbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICBzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQsXG4gICk6IGlhbS5BZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0IHtcbiAgICBpZiAoIXRoaXMudGFibGVCdWNrZXRQb2xpY3kgJiYgdGhpcy5hdXRvQ3JlYXRlUG9saWN5KSB7XG4gICAgICB0aGlzLnRhYmxlQnVja2V0UG9saWN5ID0gbmV3IFRhYmxlQnVja2V0UG9saWN5KHRoaXMsICdEZWZhdWx0UG9saWN5Jywge1xuICAgICAgICB0YWJsZUJ1Y2tldDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlQnVja2V0UG9saWN5KSB7XG4gICAgICB0aGlzLnRhYmxlQnVja2V0UG9saWN5LmRvY3VtZW50LmFkZFN0YXRlbWVudHMoc3RhdGVtZW50KTtcbiAgICAgIHJldHVybiB7IHN0YXRlbWVudEFkZGVkOiB0cnVlLCBwb2xpY3lEZXBlbmRhYmxlOiB0aGlzLnRhYmxlQnVja2V0UG9saWN5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IGZhbHNlIH07XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRSZWFkKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSwgdGFibGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoaWRlbnRpdHksIHBlcm1zLlRBQkxFX0JVQ0tFVF9SRUFEX0FDQ0VTUywgdGhpcy50YWJsZUJ1Y2tldEFybiwgdGhpcy5nZXRUYWJsZUFybih0YWJsZUlkKSk7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRXcml0ZShpZGVudGl0eTogaWFtLklHcmFudGFibGUsIHRhYmxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGlkZW50aXR5LCBwZXJtcy5UQUJMRV9CVUNLRVRfV1JJVEVfQUNDRVNTLCB0aGlzLnRhYmxlQnVja2V0QXJuLCB0aGlzLmdldFRhYmxlQXJuKHRhYmxlSWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZShpZGVudGl0eTogaWFtLklHcmFudGFibGUsIHRhYmxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGlkZW50aXR5LCBwZXJtcy5UQUJMRV9CVUNLRVRfUkVBRF9XUklURV9BQ0NFU1MsIHRoaXMudGFibGVCdWNrZXRBcm4sIHRoaXMuZ2V0VGFibGVBcm4odGFibGVJZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZ2l2ZW4gczN0YWJsZXMgcGVybWlzc2lvbnMgdG8gdGhlIHByb3ZpZGVkIHByaW5jaXBhbFxuICAgKiBAcmV0dXJucyBHcmFudCBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ3JhbnQoXG4gICAgZ3JhbnRlZTogaWFtLklHcmFudGFibGUsXG4gICAgdGFibGVCdWNrZXRBY3Rpb25zOiBzdHJpbmdbXSxcbiAgICByZXNvdXJjZUFybjogc3RyaW5nLFxuICAgIC4uLm90aGVyUmVzb3VyY2VBcm5zOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKSB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gW3Jlc291cmNlQXJuLCAuLi5vdGhlclJlc291cmNlQXJuc10uZmlsdGVyKGFybiA9PiBhcm4gIT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsT3JSZXNvdXJjZSh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogdGFibGVCdWNrZXRBY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiByZXNvdXJjZXMsXG4gICAgICByZXNvdXJjZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFibGVBcm4odGFibGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRhYmxlSWQgPyBgJHt0aGlzLnRhYmxlQnVja2V0QXJufS90YWJsZS8ke3RhYmxlSWR9YCA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIFRhYmxlQnVja2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVCdWNrZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBTMyBUYWJsZUJ1Y2tldC5cbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGVzLWJ1Y2tldHMtbmFtaW5nLmh0bWwjdGFibGUtYnVja2V0cy1uYW1pbmctcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQnVja2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbnJlZmVyZW5jZWQgZmlsZSByZW1vdmFsIHNldHRpbmdzIGZvciB0aGUgUzMgVGFibGVCdWNrZXQuXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXMzdGFibGVzLXRhYmxlYnVja2V0LXVucmVmZXJlbmNlZGZpbGVyZW1vdmFsLmh0bWxcbiAgICogQGRlZmF1bHQgRW5hYmxlZCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGUtYnVja2V0cy1tYWludGVuYW5jZS5odG1sXG4gICAqL1xuICByZWFkb25seSB1bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbD86IFVucmVmZXJlbmNlZEZpbGVSZW1vdmFsO1xuXG4gIC8qKlxuICAgKiBBV1MgcmVnaW9uIHRoYXQgdGhlIHRhYmxlIGJ1Y2tldCBleGlzdHMgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaXQncyBhc3N1bWVkIHRoZSBidWNrZXQgaXMgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBzY29wZSBpdCdzIGJlaW5nIGltcG9ydGVkIGludG9cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIEFjY291bnQgSUQgb2YgdGhlIHRhYmxlIGJ1Y2tldCBvd25lci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpdCdzIGFzc3VtZWQgdGhlIGJ1Y2tldCBiZWxvbmdzIHRvIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNjb3BlIGl0J3MgYmVpbmcgaW1wb3J0ZWQgaW50b1xuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hhdCBoYXBwZW5zIHRvIHRoaXMgdGFibGUgYnVja2V0IGl0IGl0IHN0b3BlZCBiZWluZyBtYW5hZ2VkIGJ5IGNsb3VkZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSRVRBSU5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlZmVyZW5jZSBhIHNwZWNpZmljIHRhYmxlIGJ1Y2tldC5cbiAqIFRoZSB0YWJsZUJ1Y2tldE5hbWUsIHJlZ2lvbiwgYW5kIGFjY291bnQgY2FuIGJlIHByb3ZpZGVkIGV4cGxpY2l0bHlcbiAqIG9yIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgdGFibGVCdWNrZXRBcm5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogQVdTIHJlZ2lvbiB0aGlzIHRhYmxlIGJ1Y2tldCBleGlzdHMgaW5cbiAgICogQGRlZmF1bHQgcmVnaW9uIGluZmVycmVkIGZyb20gc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50SWQgY29udGFpbmluZyB0aGlzIHRhYmxlIGJ1Y2tldFxuICAgKiBAZGVmYXVsdCBhY2NvdW50IGluZmVycmVkIGZyb20gc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUgYnVja2V0IG5hbWUsIHVuaXF1ZSBwZXIgcmVnaW9uXG4gICAqIEBkZWZhdWx0IHRhYmxlQnVja2V0TmFtZSBpbmZlcnJlZCBmcm9tIGFyblxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVCdWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRhYmxlIGJ1Y2tldCdzIEFSTi5cbiAgICogQGRlZmF1bHQgdGFibGVCdWNrZXRBcm4gY29uc3RydWN0ZWQgZnJvbSByZWdpb24sIGFjY291bnQgYW5kIHRhYmxlQnVja2V0TmFtZSBhcmUgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQnVja2V0QXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIFMzIHRhYmxlIGJ1Y2tldCB3aXRoIGhlbHBlcnMgZm9yIGFzc29jaWF0ZWQgcmVzb3VyY2UgcG9saWNpZXNcbiAqXG4gKiBUaGlzIGJ1Y2tldCBtYXkgbm90IHlldCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0IGV4cG9zZWQgYnkgdGhlIHVuZGVybHlpbmcgQ2ZuVGFibGVCdWNrZXQuXG4gKlxuICogQHN0YXRlZnVsXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2FtcGxlVGFibGVCdWNrZXQgPSBuZXcgVGFibGVCdWNrZXQoc2NvcGUsICdFeGFtcGxlVGFibGVCdWNrZXQnLCB7XG4gKiAgIHRhYmxlQnVja2V0TmFtZTogJ2V4YW1wbGUtYnVja2V0JyxcbiAqICAgLy8gT3B0aW9uYWwgZmllbGRzOlxuICogICB1bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbDoge1xuICogICAgIG5vbmN1cnJlbnREYXlzOiAxMjMsXG4gKiAgICAgc3RhdHVzOiBVbnJlZmVyZW5jZWRGaWxlUmVtb3ZhbFN0YXR1cy5FTkFCTEVELFxuICogICAgIHVucmVmZXJlbmNlZERheXM6IDEyMyxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgVGFibGVCdWNrZXQgZXh0ZW5kcyBUYWJsZUJ1Y2tldEJhc2Uge1xuICAvKipcbiAgICogRGVmaW5lcyBhIFRhYmxlQnVja2V0IGNvbnN0cnVjdCBmcm9tIGFuIGV4dGVybmFsIHRhYmxlIGJ1Y2tldCBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIG5hbWUuXG4gICAqIEBwYXJhbSB0YWJsZUJ1Y2tldEFybiBBbWF6b24gUmVzb3VyY2UgTmFtZSAoYXJuKSBvZiB0aGUgdGFibGUgYnVja2V0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21UYWJsZUJ1Y2tldEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB0YWJsZUJ1Y2tldEFybjogc3RyaW5nKTogSVRhYmxlQnVja2V0IHtcbiAgICByZXR1cm4gVGFibGVCdWNrZXQuZnJvbVRhYmxlQnVja2V0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgdGFibGVCdWNrZXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFRhYmxlQnVja2V0IGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgdGFibGUgYnVja2V0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBgVGFibGVCdWNrZXRBdHRyaWJ1dGVzYCBvYmplY3QuIENhbiBiZSBtYW51YWxseSBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVCdWNrZXRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVGFibGVCdWNrZXRBdHRyaWJ1dGVzLFxuICApOiBJVGFibGVCdWNrZXQge1xuICAgIGNvbnN0IHsgdGFibGVCdWNrZXROYW1lLCByZWdpb24sIGFjY291bnQsIHRhYmxlQnVja2V0QXJuIH0gPSB2YWxpZGF0ZVRhYmxlQnVja2V0QXR0cmlidXRlcyhzY29wZSwgYXR0cnMpO1xuICAgIFRhYmxlQnVja2V0LnZhbGlkYXRlVGFibGVCdWNrZXROYW1lKHRhYmxlQnVja2V0TmFtZSk7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgVGFibGVCdWNrZXRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZUJ1Y2tldE5hbWUgPSB0YWJsZUJ1Y2tldE5hbWUhO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlQnVja2V0QXJuID0gdGFibGVCdWNrZXRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVCdWNrZXRQb2xpY3k/OiBUYWJsZUJ1Y2tldFBvbGljeTtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb24gPSByZWdpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudCA9IGFjY291bnQ7XG4gICAgICBwcm90ZWN0ZWQgYXV0b0NyZWF0ZVBvbGljeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAvKipcbiAgICAgICAqIEV4cG9ydHMgdGhpcyBidWNrZXQgZnJvbSB0aGUgc3RhY2suXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgICAgIHJldHVybiBhdHRycztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQsIHtcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBwaHlzaWNhbE5hbWU6IHRhYmxlQnVja2V0TmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBnaXZlbiB0YWJsZSBidWNrZXQgbmFtZSBpcyBub3QgdmFsaWQuXG4gICAqXG4gICAqIEBwYXJhbSBidWNrZXROYW1lIG5hbWUgb2YgdGhlIGJ1Y2tldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVUYWJsZUJ1Y2tldE5hbWUoXG4gICAgYnVja2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICBpZiAoYnVja2V0TmFtZSA9PSB1bmRlZmluZWQgfHwgVG9rZW4uaXNVbnJlc29sdmVkKGJ1Y2tldE5hbWUpKSB7XG4gICAgICAvLyB0aGUgbmFtZSBpcyBhIGxhdGUtYm91bmQgdmFsdWUsIG5vdCBhIGRlZmluZWQgc3RyaW5nLCBzbyBza2lwIHZhbGlkYXRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBMZW5ndGggdmFsaWRhdGlvblxuICAgIGlmIChidWNrZXROYW1lLmxlbmd0aCA8IDMgfHwgYnVja2V0TmFtZS5sZW5ndGggPiA2Mykge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdCdWNrZXQgbmFtZSBtdXN0IGJlIGF0IGxlYXN0IDMgYW5kIG5vIG1vcmUgdGhhbiA2MyBjaGFyYWN0ZXJzJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2hhcmFjdGVyIHNldCB2YWxpZGF0aW9uXG4gICAgY29uc3QgaWxsZWdhbENoYXJzZXRSZWdFeCA9IC9bXmEtejAtOS1dLztcbiAgICBjb25zdCBhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeCA9IC9bYS16MC05XS87XG5cbiAgICBjb25zdCBpbGxlZ2FsQ2hhck1hdGNoID0gYnVja2V0TmFtZS5tYXRjaChpbGxlZ2FsQ2hhcnNldFJlZ0V4KTtcbiAgICBpZiAoaWxsZWdhbENoYXJNYXRjaCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdCdWNrZXQgbmFtZSBtdXN0IG9ubHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMgKC0pJyArXG4gICAgICAgICAgYCAob2Zmc2V0OiAke2lsbGVnYWxDaGFyTWF0Y2guaW5kZXh9KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVkZ2UgY2hhcmFjdGVyIHZhbGlkYXRpb25cbiAgICBpZiAoIWFsbG93ZWRFZGdlQ2hhcnNldFJlZ0V4LnRlc3QoYnVja2V0TmFtZS5jaGFyQXQoMCkpKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ0J1Y2tldCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgb3IgbnVtYmVyIChvZmZzZXQ6IDApJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeC50ZXN0KGJ1Y2tldE5hbWUuY2hhckF0KGJ1Y2tldE5hbWUubGVuZ3RoIC0gMSkpXG4gICAgKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYEJ1Y2tldCBuYW1lIG11c3QgZW5kIHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyIG9yIG51bWJlciAob2Zmc2V0OiAke1xuICAgICAgICAgIGJ1Y2tldE5hbWUubGVuZ3RoIC0gMVxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBTMyB0YWJsZSBidWNrZXQgbmFtZSAodmFsdWU6ICR7YnVja2V0TmFtZX0pJHtFT0x9JHtlcnJvcnMuam9pbihFT0wpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBnaXZlbiB1bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbFByb3BlcnR5IGlzIG5vdCB2YWxpZC5cbiAgICogQHBhcmFtIHVucmVmZXJlbmNlZEZpbGVSZW1vdmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YWJsZSBidWNrZXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVVbnJlZmVyZW5jZWRGaWxlUmVtb3ZhbChcbiAgICB1bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbD86IFVucmVmZXJlbmNlZEZpbGVSZW1vdmFsLFxuICApOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgcHJvcGVydHkgaXMgbm90IGRlZmluZWRcbiAgICBpZiAoIXVucmVmZXJlbmNlZEZpbGVSZW1vdmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBub25jdXJyZW50RGF5cywgc3RhdHVzLCB1bnJlZmVyZW5jZWREYXlzIH0gPSB1bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbDtcblxuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChub25jdXJyZW50RGF5cyAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub25jdXJyZW50RGF5cyA8IDEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ25vbmN1cnJlbnREYXlzIG11c3QgYmUgYXQgbGVhc3QgMSBkYXknKTtcbiAgICAgIH1cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihub25jdXJyZW50RGF5cykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ25vbmN1cnJlbnREYXlzIG11c3QgYmUgYSB3aG9sZSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodW5yZWZlcmVuY2VkRGF5cyAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh1bnJlZmVyZW5jZWREYXlzIDwgMSkge1xuICAgICAgICBlcnJvcnMucHVzaCgndW5yZWZlcmVuY2VkRGF5cyBtdXN0IGJlIGF0IGxlYXN0IDEgZGF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobm9uY3VycmVudERheXMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCd1bnJlZmVyZW5jZWREYXlzIG11c3QgYmUgYSB3aG9sZSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkU3RhdHVzID0gWydFbmFibGVkJywgJ0Rpc2FibGVkJ107XG4gICAgaWYgKHN0YXR1cyAhPSB1bmRlZmluZWQgJiYgIWFsbG93ZWRTdGF0dXMuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ3N0YXR1cyBtdXN0IGJlIG9uZSBvZiBcXCdFbmFibGVkXFwnIG9yIFxcJ0Rpc2FibGVkXFwnJyk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIFVucmVmZXJlbmNlZEZpbGVSZW1vdmFsUHJvcGVydHl9KSR7RU9MfSR7ZXJyb3JzLmpvaW4oRU9MKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgQ2ZuVGFibGVCdWNrZXQgTDEgcmVzb3VyY2VcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZTogczN0YWJsZXMuQ2ZuVGFibGVCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIHRoaXMgdGFibGVCdWNrZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVCdWNrZXRQb2xpY3k/OiBUYWJsZUJ1Y2tldFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoYXJuKSBvZiB0aGlzIHRhYmxlIGJ1Y2tldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlQnVja2V0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgdGFibGUgYnVja2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVCdWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGF1dG9DcmVhdGVQb2xpY3k6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUYWJsZUJ1Y2tldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnRhYmxlQnVja2V0TmFtZSxcbiAgICB9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgVGFibGVCdWNrZXQudmFsaWRhdGVUYWJsZUJ1Y2tldE5hbWUocHJvcHMudGFibGVCdWNrZXROYW1lKTtcbiAgICBUYWJsZUJ1Y2tldC52YWxpZGF0ZVVucmVmZXJlbmNlZEZpbGVSZW1vdmFsKHByb3BzLnVucmVmZXJlbmNlZEZpbGVSZW1vdmFsKTtcblxuICAgIHRoaXMuX3Jlc291cmNlID0gbmV3IHMzdGFibGVzLkNmblRhYmxlQnVja2V0KHRoaXMsIGlkLCB7XG4gICAgICB0YWJsZUJ1Y2tldE5hbWU6IHByb3BzLnRhYmxlQnVja2V0TmFtZSxcbiAgICAgIHVucmVmZXJlbmNlZEZpbGVSZW1vdmFsOiB7XG4gICAgICAgIC4uLnByb3BzLnVucmVmZXJlbmNlZEZpbGVSZW1vdmFsLFxuICAgICAgICBub25jdXJyZW50RGF5czogcHJvcHMudW5yZWZlcmVuY2VkRmlsZVJlbW92YWw/Lm5vbmN1cnJlbnREYXlzLFxuICAgICAgICB1bnJlZmVyZW5jZWREYXlzOiBwcm9wcy51bnJlZmVyZW5jZWRGaWxlUmVtb3ZhbD8udW5yZWZlcmVuY2VkRGF5cyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYmxlQnVja2V0TmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMuX3Jlc291cmNlLnJlZik7XG4gICAgdGhpcy50YWJsZUJ1Y2tldEFybiA9IHRoaXMuX3Jlc291cmNlLmF0dHJUYWJsZUJ1Y2tldEFybjtcbiAgICB0aGlzLl9yZXNvdXJjZS5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSk7XG4gIH1cbn1cblxuIl19
|
package/lib/util.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IConstruct } from 'constructs';
|
|
2
|
+
import { TableBucketAttributes } from './table-bucket';
|
|
3
|
+
export declare const S3_TABLES_SERVICE = "s3tables";
|
|
4
|
+
export declare function parseTableBucketArn(construct: IConstruct, props: TableBucketAttributes): string;
|
|
5
|
+
export declare function parseTableBucketName(construct: IConstruct, props: TableBucketAttributes): string;
|
|
6
|
+
export declare function parseTableBucketRegion(construct: IConstruct, props: TableBucketAttributes): string | undefined;
|
|
7
|
+
export declare function parseTableBucketAccount(construct: IConstruct, props: TableBucketAttributes): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* @returns populated attributes from given scope and attributes
|
|
10
|
+
* @throws ValidationError if any of the required attribures are missing
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateTableBucketAttributes(construct: IConstruct, props: TableBucketAttributes): {
|
|
13
|
+
tableBucketName: string;
|
|
14
|
+
account: string | undefined;
|
|
15
|
+
region: string | undefined;
|
|
16
|
+
tableBucketArn: string;
|
|
17
|
+
};
|