@aws-cdk/aws-s3tables-alpha 2.208.0-alpha.0 → 2.209.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/lib/table.d.ts ADDED
@@ -0,0 +1,246 @@
1
+ import { Resource, IResource, RemovalPolicy } from 'aws-cdk-lib/core';
2
+ import { INamespace } from './namespace';
3
+ import { Construct } from 'constructs';
4
+ /**
5
+ * Represents an S3 Table.
6
+ */
7
+ export interface ITable extends IResource {
8
+ /**
9
+ * The ARN of this table.
10
+ * @attribute
11
+ */
12
+ readonly tableArn: string;
13
+ /**
14
+ * The name of this table.
15
+ * @attribute
16
+ */
17
+ readonly tableName: string;
18
+ /**
19
+ * The accountId containing this table.
20
+ * @attribute
21
+ */
22
+ readonly account?: string;
23
+ /**
24
+ * The region containing this table.
25
+ * @attribute
26
+ */
27
+ readonly region?: string;
28
+ }
29
+ /**
30
+ * Base class for Table implementations.
31
+ */
32
+ declare abstract class TableBase extends Resource implements ITable {
33
+ abstract readonly tableName: string;
34
+ abstract readonly tableArn: string;
35
+ }
36
+ /**
37
+ * Properties for creating a new S3 Table.
38
+ */
39
+ export interface TableProps {
40
+ /**
41
+ * Name of this table, unique within the namespace
42
+ */
43
+ readonly tableName: string;
44
+ /**
45
+ * The namespace under which this table is created
46
+ */
47
+ readonly namespace: INamespace;
48
+ /**
49
+ * Format of this table. Currently, the only supported value is OpenTableFormat.ICEBERG.
50
+ */
51
+ readonly openTableFormat: OpenTableFormat;
52
+ /**
53
+ * Settings governing the Compaction maintenance action.
54
+ * @default Amazon S3 selects the best compaction strategy based on your table sort order.
55
+ * @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html
56
+ */
57
+ readonly compaction?: CompactionProperty;
58
+ /**
59
+ * Contains details about the metadata for an Iceberg table.
60
+ * @default table is created without any metadata
61
+ */
62
+ readonly icebergMetadata?: IcebergMetadataProperty;
63
+ /**
64
+ * Contains details about the snapshot management settings for an Iceberg table.
65
+ * @default enabled: MinimumSnapshots is 1 by default and MaximumSnapshotAge is 120 hours by default.
66
+ */
67
+ readonly snapshotManagement?: SnapshotManagementProperty;
68
+ /**
69
+ * Controls what happens to this table it it stoped being managed by cloudformation.
70
+ *
71
+ * @default RETAIN
72
+ */
73
+ readonly removalPolicy?: RemovalPolicy;
74
+ /**
75
+ * If true, indicates that you don't want to specify a schema for the table.
76
+ *
77
+ * This property is mutually exclusive to 'IcebergMetadata'.
78
+ *
79
+ * @default false
80
+ */
81
+ readonly withoutMetadata?: boolean;
82
+ }
83
+ /**
84
+ * Supported open table formats.
85
+ */
86
+ export declare enum OpenTableFormat {
87
+ /**
88
+ * Apache Iceberg table format.
89
+ */
90
+ ICEBERG = "ICEBERG"
91
+ }
92
+ /**
93
+ * Settings governing the Compaction maintenance action.
94
+ *
95
+ * @default - No compaction settings
96
+ */
97
+ export interface CompactionProperty {
98
+ /**
99
+ * Status of the compaction maintenance action.
100
+ */
101
+ readonly status: Status;
102
+ /**
103
+ * Target file size in megabytes for compaction.
104
+ */
105
+ readonly targetFileSizeMb: number;
106
+ }
107
+ /**
108
+ * Status values for maintenance actions.
109
+ */
110
+ export declare enum Status {
111
+ /**
112
+ * Enable the maintenance action.
113
+ */
114
+ ENABLED = "enabled",
115
+ /**
116
+ * Disable the maintenance action.
117
+ */
118
+ DISABLED = "disabled"
119
+ }
120
+ /**
121
+ * Contains details about the metadata for an Iceberg table.
122
+ * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergmetadata.html
123
+ */
124
+ export interface IcebergMetadataProperty {
125
+ /**
126
+ * Contains details about the schema for an Iceberg table.
127
+ *
128
+ * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergmetadata.html#cfn-s3tables-table-icebergmetadata-icebergschema
129
+ */
130
+ readonly icebergSchema: IcebergSchemaProperty;
131
+ }
132
+ /**
133
+ * Contains details about the schema for an Iceberg table.
134
+ */
135
+ export interface IcebergSchemaProperty {
136
+ /**
137
+ * Contains details about the schema for an Iceberg table.
138
+ */
139
+ readonly schemaFieldList: SchemaFieldProperty[];
140
+ }
141
+ /**
142
+ * Contains details about a schema field.
143
+ */
144
+ export interface SchemaFieldProperty {
145
+ /**
146
+ * The name of the field.
147
+ */
148
+ readonly name: string;
149
+ /**
150
+ * A Boolean value that specifies whether values are required for each row in this field.
151
+ *
152
+ * By default, this is `false` and null values are allowed in the field. If this is `true`, the field does not allow null values.
153
+ *
154
+ * @default false
155
+ */
156
+ readonly required?: boolean;
157
+ /**
158
+ * The field type.
159
+ *
160
+ * S3 Tables supports all Apache Iceberg primitive types. For more information, see the [Apache Iceberg documentation](https://docs.aws.amazon.com/https://iceberg.apache.org/spec/#primitive-types).
161
+ */
162
+ readonly type: string;
163
+ }
164
+ /**
165
+ * Contains details about the snapshot management settings for an Iceberg table.
166
+ *
167
+ * A snapshot is expired when it exceeds MinSnapshotsToKeep and MaxSnapshotAgeHours.
168
+ *
169
+ * @default - No snapshot management settings
170
+ */
171
+ export interface SnapshotManagementProperty {
172
+ /**
173
+ * The maximum age of a snapshot before it can be expired.
174
+ *
175
+ * @default - No maximum age
176
+ */
177
+ readonly maxSnapshotAgeHours?: number;
178
+ /**
179
+ * The minimum number of snapshots to keep.
180
+ *
181
+ * @default - No minimum number
182
+ */
183
+ readonly minSnapshotsToKeep?: number;
184
+ /**
185
+ * Indicates whether the SnapshotManagement maintenance action is enabled.
186
+ *
187
+ * @default - Not specified
188
+ */
189
+ readonly status?: Status;
190
+ }
191
+ /**
192
+ * A reference to a table outside this stack
193
+ *
194
+ * The tableName, region, and account can be provided explicitly
195
+ * or will be inferred from the tableArn
196
+ */
197
+ export interface TableAttributes {
198
+ /**
199
+ * Name of this table
200
+ */
201
+ readonly tableName: string;
202
+ /**
203
+ * The table's ARN.
204
+ */
205
+ readonly tableArn: string;
206
+ }
207
+ /**
208
+ * An S3 Table with helpers.
209
+ */
210
+ export declare class Table extends TableBase {
211
+ /** Uniquely identifies this class. */
212
+ static readonly PROPERTY_INJECTION_ID: string;
213
+ /**
214
+ * Defines a Table construct that represents an external table.
215
+ *
216
+ * @param scope The parent creating construct (usually `this`).
217
+ * @param id The construct's name.
218
+ * @param attrs A `TableAttributes` object containing the table name and ARN.
219
+ */
220
+ static fromTableAttributes(scope: Construct, id: string, attrs: TableAttributes): ITable;
221
+ /**
222
+ * See https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html
223
+ * @param tableName Name of the table
224
+ * @throws UnscopedValidationError if any naming errors are detected
225
+ */
226
+ static validateTableName(tableName: string): void;
227
+ /**
228
+ * The unique Amazon Resource Name (arn) of this table
229
+ */
230
+ readonly tableArn: string;
231
+ /**
232
+ * The underlying CfnTable L1 resource
233
+ * @internal
234
+ */
235
+ private readonly _resource;
236
+ /**
237
+ * The name of this table
238
+ */
239
+ readonly tableName: string;
240
+ /**
241
+ * The namespace containing this table
242
+ */
243
+ readonly namespace: INamespace;
244
+ constructor(scope: Construct, id: string, props: TableProps);
245
+ }
246
+ export {};
package/lib/table.js ADDED
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var _a;
9
+ var Table_1;
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.Table = exports.Status = exports.OpenTableFormat = void 0;
12
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
13
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
14
+ const core_1 = require("aws-cdk-lib/core");
15
+ const aws_s3tables_1 = require("aws-cdk-lib/aws-s3tables");
16
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
17
+ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
18
+ const os_1 = require("os");
19
+ /**
20
+ * Base class for Table implementations.
21
+ */
22
+ class TableBase extends core_1.Resource {
23
+ }
24
+ /**
25
+ * Supported open table formats.
26
+ */
27
+ var OpenTableFormat;
28
+ (function (OpenTableFormat) {
29
+ /**
30
+ * Apache Iceberg table format.
31
+ */
32
+ OpenTableFormat["ICEBERG"] = "ICEBERG";
33
+ })(OpenTableFormat || (exports.OpenTableFormat = OpenTableFormat = {}));
34
+ /**
35
+ * Status values for maintenance actions.
36
+ */
37
+ var Status;
38
+ (function (Status) {
39
+ /**
40
+ * Enable the maintenance action.
41
+ */
42
+ Status["ENABLED"] = "enabled";
43
+ /**
44
+ * Disable the maintenance action.
45
+ */
46
+ Status["DISABLED"] = "disabled";
47
+ })(Status || (exports.Status = Status = {}));
48
+ /**
49
+ * An S3 Table with helpers.
50
+ */
51
+ let Table = Table_1 = class Table extends TableBase {
52
+ /**
53
+ * Defines a Table construct that represents an external table.
54
+ *
55
+ * @param scope The parent creating construct (usually `this`).
56
+ * @param id The construct's name.
57
+ * @param attrs A `TableAttributes` object containing the table name and ARN.
58
+ */
59
+ static fromTableAttributes(scope, id, attrs) {
60
+ try {
61
+ jsiiDeprecationWarnings._aws_cdk_aws_s3tables_alpha_TableAttributes(attrs);
62
+ }
63
+ catch (error) {
64
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
65
+ Error.captureStackTrace(error, this.fromTableAttributes);
66
+ }
67
+ throw error;
68
+ }
69
+ const tableArn = attrs.tableArn;
70
+ Table_1.validateTableName(attrs.tableName);
71
+ class Import extends TableBase {
72
+ constructor() {
73
+ super(...arguments);
74
+ this.tableName = attrs.tableName;
75
+ this.tableArn = tableArn;
76
+ this.autoCreatePolicy = false;
77
+ }
78
+ /**
79
+ * Exports this from the stack.
80
+ */
81
+ export() {
82
+ return attrs;
83
+ }
84
+ }
85
+ return new Import(scope, id, {
86
+ environmentFromArn: tableArn,
87
+ physicalName: tableArn,
88
+ });
89
+ }
90
+ /**
91
+ * See https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html
92
+ * @param tableName Name of the table
93
+ * @throws UnscopedValidationError if any naming errors are detected
94
+ */
95
+ static validateTableName(tableName) {
96
+ if (tableName == undefined || core_1.Token.isUnresolved(tableName)) {
97
+ // the name is a late-bound value, not a defined string, so skip validation
98
+ return;
99
+ }
100
+ const errors = [];
101
+ // Length validation
102
+ if (tableName.length < 1 || tableName.length > 255) {
103
+ errors.push('Table name must be at least 1 and no more than 255 characters');
104
+ }
105
+ // Character set validation
106
+ const illegalCharsetRegEx = /[^a-z0-9_]/;
107
+ const allowedEdgeCharsetRegEx = /[a-z0-9]/;
108
+ const illegalCharMatch = tableName.match(illegalCharsetRegEx);
109
+ if (illegalCharMatch) {
110
+ errors.push('Table name must only contain lowercase characters, numbers, and underscores (_)' +
111
+ ` (offset: ${illegalCharMatch.index})`);
112
+ }
113
+ // Edge character validation
114
+ if (!allowedEdgeCharsetRegEx.test(tableName.charAt(0))) {
115
+ errors.push('Table name must start with a lowercase letter or number (offset: 0)');
116
+ }
117
+ if (!allowedEdgeCharsetRegEx.test(tableName.charAt(tableName.length - 1))) {
118
+ errors.push(`Table name must end with a lowercase letter or number (offset: ${tableName.length - 1})`);
119
+ }
120
+ if (errors.length > 0) {
121
+ throw new core_1.UnscopedValidationError(`Invalid S3 table name (value: ${tableName})${os_1.EOL}${errors.join(os_1.EOL)}`);
122
+ }
123
+ }
124
+ constructor(scope, id, props) {
125
+ super(scope, id, {});
126
+ try {
127
+ jsiiDeprecationWarnings._aws_cdk_aws_s3tables_alpha_TableProps(props);
128
+ }
129
+ catch (error) {
130
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
131
+ Error.captureStackTrace(error, Table);
132
+ }
133
+ throw error;
134
+ }
135
+ // Enhanced CDK Analytics Telemetry
136
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
137
+ Table_1.validateTableName(props.tableName);
138
+ this._resource = new aws_s3tables_1.CfnTable(this, id, {
139
+ tableName: props.tableName,
140
+ openTableFormat: props.openTableFormat,
141
+ tableBucketArn: props.namespace.tableBucket.tableBucketArn,
142
+ namespace: props.namespace.namespaceName,
143
+ compaction: props.compaction,
144
+ icebergMetadata: props.icebergMetadata,
145
+ snapshotManagement: props.snapshotManagement,
146
+ withoutMetadata: props.withoutMetadata ? 'Yes' : undefined,
147
+ });
148
+ this.namespace = props.namespace;
149
+ this.tableName = props.tableName;
150
+ this.tableArn = this._resource.attrTableArn;
151
+ this._resource.applyRemovalPolicy(props.removalPolicy);
152
+ this.node.addDependency(this.namespace);
153
+ }
154
+ };
155
+ exports.Table = Table;
156
+ _a = JSII_RTTI_SYMBOL_1;
157
+ Table[_a] = { fqn: "@aws-cdk/aws-s3tables-alpha.Table", version: "2.209.0-alpha.0" };
158
+ /** Uniquely identifies this class. */
159
+ Table.PROPERTY_INJECTION_ID = '@aws-cdk.aws-s3tables-alpha.Table';
160
+ exports.Table = Table = Table_1 = __decorate([
161
+ prop_injectable_1.propertyInjectable
162
+ ], Table);
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsMkNBTTBCO0FBRTFCLDJEQUFvRDtBQUNwRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLDJCQUF5QjtBQStCekI7O0dBRUc7QUFDSCxNQUFlLFNBQVUsU0FBUSxlQUFRO0NBR3hDO0FBa0REOztHQUVHO0FBQ0gsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsc0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLGVBQWUsK0JBQWYsZUFBZSxRQUsxQjtBQWtCRDs7R0FFRztBQUNILElBQVksTUFTWDtBQVRELFdBQVksTUFBTTtJQUNoQjs7T0FFRztJQUNILDZCQUFtQixDQUFBO0lBQ25COztPQUVHO0lBQ0gsK0JBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVRXLE1BQU0sc0JBQU4sTUFBTSxRQVNqQjtBQW1HRDs7R0FFRztBQUVJLElBQU0sS0FBSyxhQUFYLE1BQU0sS0FBTSxTQUFRLFNBQVM7SUFJbEM7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBc0I7Ozs7Ozs7Ozs7UUFFdEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNoQyxPQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sTUFBTyxTQUFRLFNBQVM7WUFBOUI7O2dCQUNrQixjQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsYUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1lBUTlDLENBQUM7WUFOQzs7ZUFFRztZQUNJLE1BQU07Z0JBQ1gsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0Y7UUFFRCxPQUFPLElBQUksTUFB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QUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN6Qzs7QUF4SVUsc0JBQUs7OztBQUNoQixzQ0FBc0M7QUFDZiwyQkFBcUIsR0FBVyxtQ0FBbUMsQUFBOUMsQ0FBK0M7Z0JBRmhGLEtBQUs7SUFEakIsb0NBQWtCO0dBQ04sS0FBSyxDQXlJakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBSZXNvdXJjZSxcbiAgSVJlc291cmNlLFxuICBSZW1vdmFsUG9saWN5LFxuICBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcixcbiAgVG9rZW4sXG59IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgSU5hbWVzcGFjZSB9IGZyb20gJy4vbmFtZXNwYWNlJztcbmltcG9ydCB7IENmblRhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzdGFibGVzJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gUzMgVGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50SWQgY29udGFpbmluZyB0aGlzIHRhYmxlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFRhYmxlIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgVGFibGVCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVGFibGUge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgbmV3IFMzIFRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHRhYmxlLCB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSB1bmRlciB3aGljaCB0aGlzIHRhYmxlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogSU5hbWVzcGFjZTtcbiAgLyoqXG4gICAqIEZvcm1hdCBvZiB0aGlzIHRhYmxlLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZSBpcyBPcGVuVGFibGVGb3JtYXQuSUNFQkVSRy5cbiAgICovXG4gIHJlYWRvbmx5IG9wZW5UYWJsZUZvcm1hdDogT3BlblRhYmxlRm9ybWF0O1xuICAvKipcbiAgICogU2V0dGluZ3MgZ292ZXJuaW5nIHRoZSBDb21wYWN0aW9uIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICogQGRlZmF1bHQgQW1hem9uIFMzIHNlbGVjdHMgdGhlIGJlc3QgY29tcGFjdGlvbiBzdHJhdGVneSBiYXNlZCBvbiB5b3VyIHRhYmxlIHNvcnQgb3JkZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGVzLW1haW50ZW5hbmNlLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBhY3Rpb24/OiBDb21wYWN0aW9uUHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBtZXRhZGF0YSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAgICogQGRlZmF1bHQgdGFibGUgaXMgY3JlYXRlZCB3aXRob3V0IGFueSBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgaWNlYmVyZ01ldGFkYXRhPzogSWNlYmVyZ01ldGFkYXRhUHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzbmFwc2hvdCBtYW5hZ2VtZW50IHNldHRpbmdzIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICAgKiBAZGVmYXVsdCBlbmFibGVkOiBNaW5pbXVtU25hcHNob3RzIGlzIDEgYnkgZGVmYXVsdCBhbmQgTWF4aW11bVNuYXBzaG90QWdlIGlzIDEyMCBob3VycyBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RNYW5hZ2VtZW50PzogU25hcHNob3RNYW5hZ2VtZW50UHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGF0IGhhcHBlbnMgdG8gdGhpcyB0YWJsZSBpdCBpdCBzdG9wZWQgYmVpbmcgbWFuYWdlZCBieSBjbG91ZGZvcm1hdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgUkVUQUlOXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbiAgLyoqXG4gICAqIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHNwZWNpZnkgYSBzY2hlbWEgZm9yIHRoZSB0YWJsZS5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBtdXR1YWxseSBleGNsdXNpdmUgdG8gJ0ljZWJlcmdNZXRhZGF0YScuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3aXRob3V0TWV0YWRhdGE/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBvcGVuIHRhYmxlIGZvcm1hdHMuXG4gKi9cbmV4cG9ydCBlbnVtIE9wZW5UYWJsZUZvcm1hdCB7XG4gIC8qKlxuICAgKiBBcGFjaGUgSWNlYmVyZyB0YWJsZSBmb3JtYXQuXG4gICAqL1xuICBJQ0VCRVJHID0gJ0lDRUJFUkcnLFxufVxuXG4vKipcbiAqIFNldHRpbmdzIGdvdmVybmluZyB0aGUgQ29tcGFjdGlvbiBtYWludGVuYW5jZSBhY3Rpb24uXG4gKlxuICogQGRlZmF1bHQgLSBObyBjb21wYWN0aW9uIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFjdGlvblByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB0aGUgY29tcGFjdGlvbiBtYWludGVuYW5jZSBhY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IFN0YXR1cztcbiAgLyoqXG4gICAqIFRhcmdldCBmaWxlIHNpemUgaW4gbWVnYWJ5dGVzIGZvciBjb21wYWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RmlsZVNpemVNYjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0YXR1cyB2YWx1ZXMgZm9yIG1haW50ZW5hbmNlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICovXG4gIEVOQUJMRUQgPSAnZW5hYmxlZCcsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBtYWludGVuYW5jZSBhY3Rpb24uXG4gICAqL1xuICBESVNBQkxFRCA9ICdkaXNhYmxlZCcsXG59XG5cbi8qKlxuICogQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgbWV0YWRhdGEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnTWV0YWRhdGFQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zM3RhYmxlcy10YWJsZS1pY2ViZXJnbWV0YWRhdGEuaHRtbCNjZm4tczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLWljZWJlcmdzY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IGljZWJlcmdTY2hlbWE6IEljZWJlcmdTY2hlbWFQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWNlYmVyZ1NjaGVtYVByb3BlcnR5IHtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNjaGVtYSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYUZpZWxkTGlzdDogU2NoZW1hRmllbGRQcm9wZXJ0eVtdO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgYSBzY2hlbWEgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRmllbGRQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHZhbHVlcyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggcm93IGluIHRoaXMgZmllbGQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYGZhbHNlYCBhbmQgbnVsbCB2YWx1ZXMgYXJlIGFsbG93ZWQgaW4gdGhlIGZpZWxkLiBJZiB0aGlzIGlzIGB0cnVlYCwgdGhlIGZpZWxkIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZmllbGQgdHlwZS5cbiAgICpcbiAgICogUzMgVGFibGVzIHN1cHBvcnRzIGFsbCBBcGFjaGUgSWNlYmVyZyBwcmltaXRpdmUgdHlwZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtBcGFjaGUgSWNlYmVyZyBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9pY2ViZXJnLmFwYWNoZS5vcmcvc3BlYy8jcHJpbWl0aXZlLXR5cGVzKS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzbmFwc2hvdCBtYW5hZ2VtZW50IHNldHRpbmdzIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICpcbiAqIEEgc25hcHNob3QgaXMgZXhwaXJlZCB3aGVuIGl0IGV4Y2VlZHMgTWluU25hcHNob3RzVG9LZWVwIGFuZCBNYXhTbmFwc2hvdEFnZUhvdXJzLlxuICpcbiAqIEBkZWZhdWx0IC0gTm8gc25hcHNob3QgbWFuYWdlbWVudCBzZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBzaG90TWFuYWdlbWVudFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFnZSBvZiBhIHNuYXBzaG90IGJlZm9yZSBpdCBjYW4gYmUgZXhwaXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtYXhpbXVtIGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U25hcHNob3RBZ2VIb3Vycz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHNuYXBzaG90cyB0byBrZWVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1pbmltdW0gbnVtYmVyXG4gICAqL1xuICByZWFkb25seSBtaW5TbmFwc2hvdHNUb0tlZXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBTbmFwc2hvdE1hbmFnZW1lbnQgbWFpbnRlbmFuY2UgYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogU3RhdHVzO1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgdGFibGUgb3V0c2lkZSB0aGlzIHN0YWNrXG4gKlxuICogVGhlIHRhYmxlTmFtZSwgcmVnaW9uLCBhbmQgYWNjb3VudCBjYW4gYmUgcHJvdmlkZWQgZXhwbGljaXRseVxuICogb3Igd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0YWJsZUFyblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUncyBBUk4uXG4gICAqL1xuICByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIFMzIFRhYmxlIHdpdGggaGVscGVycy5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFRhYmxlIGV4dGVuZHMgVGFibGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtczN0YWJsZXMtYWxwaGEuVGFibGUnO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgVGFibGUgY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIGF0dHJzIEEgYFRhYmxlQXR0cmlidXRlc2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRhYmxlIG5hbWUgYW5kIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRhYmxlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IFRhYmxlQXR0cmlidXRlcyxcbiAgKTogSVRhYmxlIHtcbiAgICBjb25zdCB0YWJsZUFybiA9IGF0dHJzLnRhYmxlQXJuO1xuICAgIFRhYmxlLnZhbGlkYXRlVGFibGVOYW1lKGF0dHJzLnRhYmxlTmFtZSk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBUYWJsZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlTmFtZSA9IGF0dHJzLnRhYmxlTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZUFybiA9IHRhYmxlQXJuO1xuICAgICAgcHJvdGVjdGVkIGF1dG9DcmVhdGVQb2xpY3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBFeHBvcnRzIHRoaXMgIGZyb20gdGhlIHN0YWNrLlxuICAgICAgICovXG4gICAgICBwdWJsaWMgZXhwb3J0KCkge1xuICAgICAgICByZXR1cm4gYXR0cnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkLCB7XG4gICAgICBlbnZpcm9ubWVudEZyb21Bcm46IHRhYmxlQXJuLFxuICAgICAgcGh5c2ljYWxOYW1lOiB0YWJsZUFybixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGVzLWJ1Y2tldHMtbmFtaW5nLmh0bWxcbiAgICogQHBhcmFtIHRhYmxlTmFtZSBOYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAdGhyb3dzIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIGlmIGFueSBuYW1pbmcgZXJyb3JzIGFyZSBkZXRlY3RlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZVRhYmxlTmFtZSh0YWJsZU5hbWU6IHN0cmluZykge1xuICAgIGlmICh0YWJsZU5hbWUgPT0gdW5kZWZpbmVkIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh0YWJsZU5hbWUpKSB7XG4gICAgICAvLyB0aGUgbmFtZSBpcyBhIGxhdGUtYm91bmQgdmFsdWUsIG5vdCBhIGRlZmluZWQgc3RyaW5nLCBzbyBza2lwIHZhbGlkYXRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBMZW5ndGggdmFsaWRhdGlvblxuICAgIGlmICh0YWJsZU5hbWUubGVuZ3RoIDwgMSB8fCB0YWJsZU5hbWUubGVuZ3RoID4gMjU1KSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ1RhYmxlIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAxIGFuZCBubyBtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGFyYWN0ZXIgc2V0IHZhbGlkYXRpb25cbiAgICBjb25zdCBpbGxlZ2FsQ2hhcnNldFJlZ0V4ID0gL1teYS16MC05X10vO1xuICAgIGNvbnN0IGFsbG93ZWRFZGdlQ2hhcnNldFJlZ0V4ID0gL1thLXowLTldLztcblxuICAgIGNvbnN0IGlsbGVnYWxDaGFyTWF0Y2ggPSB0YWJsZU5hbWUubWF0Y2goaWxsZWdhbENoYXJzZXRSZWdFeCk7XG4gICAgaWYgKGlsbGVnYWxDaGFyTWF0Y2gpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAnVGFibGUgbmFtZSBtdXN0IG9ubHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzIChfKScgK1xuICAgICAgICAgIGAgKG9mZnNldDogJHtpbGxlZ2FsQ2hhck1hdGNoLmluZGV4fSlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFZGdlIGNoYXJhY3RlciB2YWxpZGF0aW9uXG4gICAgaWYgKCFhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeC50ZXN0KHRhYmxlTmFtZS5jaGFyQXQoMCkpKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ1RhYmxlIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlciBvciBudW1iZXIgKG9mZnNldDogMCknLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeC50ZXN0KHRhYmxlTmFtZS5jaGFyQXQodGFibGVOYW1lLmxlbmd0aCAtIDEpKSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIGBUYWJsZSBuYW1lIG11c3QgZW5kIHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyIG9yIG51bWJlciAob2Zmc2V0OiAke1xuICAgICAgICAgIHRhYmxlTmFtZS5sZW5ndGggLSAxXG4gICAgICAgIH0pYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIFMzIHRhYmxlIG5hbWUgKHZhbHVlOiAke3RhYmxlTmFtZX0pJHtFT0x9JHtlcnJvcnMuam9pbihFT0wpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChhcm4pIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBDZm5UYWJsZSBMMSByZXNvdXJjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB0YWJsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIGNvbnRhaW5pbmcgdGhpcyB0YWJsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWVzcGFjZTogSU5hbWVzcGFjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge30pO1xuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBUYWJsZS52YWxpZGF0ZVRhYmxlTmFtZShwcm9wcy50YWJsZU5hbWUpO1xuXG4gICAgdGhpcy5fcmVzb3VyY2UgPSBuZXcgQ2ZuVGFibGUodGhpcywgaWQsIHtcbiAgICAgIHRhYmxlTmFtZTogcHJvcHMudGFibGVOYW1lLFxuICAgICAgb3BlblRhYmxlRm9ybWF0OiBwcm9wcy5vcGVuVGFibGVGb3JtYXQsXG4gICAgICB0YWJsZUJ1Y2tldEFybjogcHJvcHMubmFtZXNwYWNlLnRhYmxlQnVja2V0LnRhYmxlQnVja2V0QXJuLFxuICAgICAgbmFtZXNwYWNlOiBwcm9wcy5uYW1lc3BhY2UubmFtZXNwYWNlTmFtZSxcbiAgICAgIGNvbXBhY3Rpb246IHByb3BzLmNvbXBhY3Rpb24sXG4gICAgICBpY2ViZXJnTWV0YWRhdGE6IHByb3BzLmljZWJlcmdNZXRhZGF0YSxcbiAgICAgIHNuYXBzaG90TWFuYWdlbWVudDogcHJvcHMuc25hcHNob3RNYW5hZ2VtZW50LFxuICAgICAgd2l0aG91dE1ldGFkYXRhOiBwcm9wcy53aXRob3V0TWV0YWRhdGEgPyAnWWVzJyA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlO1xuICAgIHRoaXMudGFibGVOYW1lID0gcHJvcHMudGFibGVOYW1lO1xuICAgIHRoaXMudGFibGVBcm4gPSB0aGlzLl9yZXNvdXJjZS5hdHRyVGFibGVBcm47XG4gICAgdGhpcy5fcmVzb3VyY2UuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLnJlbW92YWxQb2xpY3kpO1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMubmFtZXNwYWNlKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk/aws-s3tables-alpha",
3
3
  "private": false,
4
- "version": "2.208.0-alpha.0",
4
+ "version": "2.209.0-alpha.0",
5
5
  "description": "CDK Constructs for S3 Tables",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -76,22 +76,22 @@
76
76
  },
77
77
  "license": "Apache-2.0",
78
78
  "devDependencies": {
79
- "aws-cdk-lib": "2.208.0",
80
- "@aws-cdk/cdk-build-tools": "2.208.0-alpha.0",
81
- "@aws-cdk/pkglint": "2.208.0-alpha.0",
79
+ "aws-cdk-lib": "2.209.0",
80
+ "@aws-cdk/cdk-build-tools": "2.209.0-alpha.0",
81
+ "@aws-cdk/pkglint": "2.209.0-alpha.0",
82
82
  "@types/jest": "^29.5.14",
83
83
  "constructs": "^10.0.0",
84
84
  "jest": "^29.7.0",
85
- "@aws-cdk/integ-tests-alpha": "2.208.0-alpha.0"
85
+ "@aws-cdk/integ-tests-alpha": "2.209.0-alpha.0"
86
86
  },
87
87
  "homepage": "https://github.com/aws/aws-cdk",
88
88
  "peerDependencies": {
89
- "aws-cdk-lib": "^2.208.0",
89
+ "aws-cdk-lib": "^2.209.0",
90
90
  "constructs": "^10.0.0"
91
91
  },
92
92
  "separate-module": false,
93
93
  "engines": {
94
- "node": ">= 14.15.0"
94
+ "node": ">= 18.0.0"
95
95
  },
96
96
  "stability": "experimental",
97
97
  "maturity": "experimental",
@@ -1,6 +1,6 @@
1
1
  import { Construct } from 'constructs';
2
2
  import { Stack } from 'aws-cdk-lib';
3
- import { TableBucket, UnreferencedFileRemovalStatus, TableBucketEncryption } from '@aws-cdk/aws-s3tables-alpha';
3
+ import { TableBucket, UnreferencedFileRemovalStatus, TableBucketEncryption, Namespace, Table, Status, OpenTableFormat } from '@aws-cdk/aws-s3tables-alpha';
4
4
  import * as iam from 'aws-cdk-lib/aws-iam';
5
5
  import * as kms from 'aws-cdk-lib/aws-kms';
6
6
 
@@ -10,6 +10,10 @@ class Fixture extends Stack {
10
10
  const tableBucket = new TableBucket(scope, 'ExampleTableBucket', {
11
11
  tableBucketName: 'example-bucket-1'
12
12
  });
13
+ const namespace = new Namespace(scope, 'ExampleNamespace', {
14
+ tableBucket: tableBucket,
15
+ namespaceName: 'example-namespace-1',
16
+ });
13
17
  const stack = this;
14
18
  /// here
15
19
  }