@aws-cdk/aws-glue-alpha 2.237.1-alpha.0 → 2.239.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.
Files changed (54) hide show
  1. package/.jsii +1011 -338
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +39 -1
  4. package/README.md +180 -0
  5. package/lib/code.d.ts +3 -3
  6. package/lib/code.js +4 -4
  7. package/lib/connection.d.ts +2 -2
  8. package/lib/connection.js +3 -3
  9. package/lib/data-format.js +5 -5
  10. package/lib/data-quality-ruleset.d.ts +3 -2
  11. package/lib/data-quality-ruleset.js +3 -3
  12. package/lib/database.d.ts +3 -2
  13. package/lib/database.js +2 -2
  14. package/lib/external-table.d.ts +5 -4
  15. package/lib/external-table.js +2 -2
  16. package/lib/index.d.ts +1 -0
  17. package/lib/index.js +2 -1
  18. package/lib/jobs/job.d.ts +7 -6
  19. package/lib/jobs/job.js +3 -3
  20. package/lib/jobs/pyspark-etl-job.d.ts +4 -3
  21. package/lib/jobs/pyspark-etl-job.js +2 -2
  22. package/lib/jobs/pyspark-flex-etl-job.d.ts +5 -4
  23. package/lib/jobs/pyspark-flex-etl-job.js +2 -2
  24. package/lib/jobs/pyspark-streaming-job.d.ts +4 -3
  25. package/lib/jobs/pyspark-streaming-job.js +2 -2
  26. package/lib/jobs/python-shell-job.d.ts +4 -3
  27. package/lib/jobs/python-shell-job.js +2 -2
  28. package/lib/jobs/ray-job.d.ts +4 -3
  29. package/lib/jobs/ray-job.js +2 -2
  30. package/lib/jobs/scala-spark-etl-job.d.ts +4 -3
  31. package/lib/jobs/scala-spark-etl-job.js +2 -2
  32. package/lib/jobs/scala-spark-flex-etl-job.d.ts +5 -4
  33. package/lib/jobs/scala-spark-flex-etl-job.js +2 -2
  34. package/lib/jobs/scala-spark-streaming-job.d.ts +4 -3
  35. package/lib/jobs/scala-spark-streaming-job.js +2 -2
  36. package/lib/jobs/spark-job.d.ts +5 -4
  37. package/lib/jobs/spark-job.js +2 -2
  38. package/lib/partition-projection.d.ts +243 -0
  39. package/lib/partition-projection.js +339 -0
  40. package/lib/s3-table.d.ts +4 -3
  41. package/lib/s3-table.js +2 -2
  42. package/lib/schema.js +1 -1
  43. package/lib/security-configuration.d.ts +1 -1
  44. package/lib/security-configuration.js +2 -2
  45. package/lib/storage-parameter.js +1 -1
  46. package/lib/table-base.d.ts +28 -7
  47. package/lib/table-base.js +47 -2
  48. package/lib/table-deprecated.d.ts +2 -1
  49. package/lib/table-deprecated.js +2 -2
  50. package/lib/triggers/trigger-options.d.ts +5 -5
  51. package/lib/triggers/trigger-options.js +2 -2
  52. package/lib/triggers/workflow.d.ts +2 -2
  53. package/lib/triggers/workflow.js +3 -3
  54. package/package.json +9 -9
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Partition projection type.
3
+ *
4
+ * Determines how Athena projects partition values.
5
+ *
6
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html
7
+ */
8
+ export declare enum PartitionProjectionType {
9
+ /**
10
+ * Project partition values as integers within a range.
11
+ */
12
+ INTEGER = "integer",
13
+ /**
14
+ * Project partition values as dates within a range.
15
+ */
16
+ DATE = "date",
17
+ /**
18
+ * Project partition values from an explicit list of values.
19
+ */
20
+ ENUM = "enum",
21
+ /**
22
+ * Project partition values that are injected at query time.
23
+ */
24
+ INJECTED = "injected"
25
+ }
26
+ /**
27
+ * Date interval unit for partition projection.
28
+ *
29
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html#partition-projection-date-type
30
+ */
31
+ export declare enum DateIntervalUnit {
32
+ /**
33
+ * Year interval.
34
+ */
35
+ YEARS = "YEARS",
36
+ /**
37
+ * Month interval.
38
+ */
39
+ MONTHS = "MONTHS",
40
+ /**
41
+ * Week interval.
42
+ */
43
+ WEEKS = "WEEKS",
44
+ /**
45
+ * Day interval (default).
46
+ */
47
+ DAYS = "DAYS",
48
+ /**
49
+ * Hour interval.
50
+ */
51
+ HOURS = "HOURS",
52
+ /**
53
+ * Minute interval.
54
+ */
55
+ MINUTES = "MINUTES",
56
+ /**
57
+ * Second interval.
58
+ */
59
+ SECONDS = "SECONDS"
60
+ }
61
+ /**
62
+ * Properties for INTEGER partition projection configuration.
63
+ */
64
+ export interface IntegerPartitionProjectionConfigurationProps {
65
+ /**
66
+ * Minimum value for the integer partition range (inclusive).
67
+ */
68
+ readonly min: number;
69
+ /**
70
+ * Maximum value for the integer partition range (inclusive).
71
+ */
72
+ readonly max: number;
73
+ /**
74
+ * Interval between partition values.
75
+ *
76
+ * @default 1
77
+ */
78
+ readonly interval?: number;
79
+ /**
80
+ * Number of digits to pad the partition value with leading zeros.
81
+ *
82
+ * With digits: 4, partition values: 0001, 0002, ..., 0100
83
+ *
84
+ * @default - no static number of digits and no leading zeroes
85
+ */
86
+ readonly digits?: number;
87
+ }
88
+ /**
89
+ * Properties for DATE partition projection configuration.
90
+ */
91
+ export interface DatePartitionProjectionConfigurationProps {
92
+ /**
93
+ * Start date for the partition range (inclusive).
94
+ *
95
+ * Can be either:
96
+ * - Fixed date in the format specified by `format` property
97
+ * (e.g., '2020-01-01' for format 'yyyy-MM-dd')
98
+ * - Relative date using NOW syntax
99
+ * (e.g., 'NOW', 'NOW-3YEARS', 'NOW+1MONTH')
100
+ *
101
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html#partition-projection-date-type
102
+ */
103
+ readonly min: string;
104
+ /**
105
+ * End date for the partition range (inclusive).
106
+ *
107
+ * Can be either:
108
+ * - Fixed date in the format specified by `format` property
109
+ * - Relative date using NOW syntax
110
+ *
111
+ * Same format constraints as `min`.
112
+ */
113
+ readonly max: string;
114
+ /**
115
+ * Date format for partition values.
116
+ *
117
+ * Uses Java SimpleDateFormat patterns.
118
+ *
119
+ * @see https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
120
+ */
121
+ readonly format: string;
122
+ /**
123
+ * Interval between partition values.
124
+ *
125
+ * When the provided dates are at single-day or single-month precision,
126
+ * the interval is optional and defaults to 1 day or 1 month, respectively.
127
+ * Otherwise, interval is required.
128
+ *
129
+ * @default - 1 for single-day or single-month precision, otherwise required
130
+ */
131
+ readonly interval?: number;
132
+ /**
133
+ * Unit for the interval.
134
+ *
135
+ * When the provided dates are at single-day or single-month precision,
136
+ * the intervalUnit is optional and defaults to 1 day or 1 month, respectively.
137
+ * Otherwise, the intervalUnit is required.
138
+ *
139
+ * @default - DAYS for single-day precision, MONTHS for single-month precision, otherwise required
140
+ */
141
+ readonly intervalUnit?: DateIntervalUnit;
142
+ }
143
+ /**
144
+ * Properties for ENUM partition projection configuration.
145
+ */
146
+ export interface EnumPartitionProjectionConfigurationProps {
147
+ /**
148
+ * Explicit list of partition values.
149
+ *
150
+ * @example ['us-east-1', 'us-west-2', 'eu-west-1']
151
+ */
152
+ readonly values: string[];
153
+ }
154
+ /**
155
+ * Factory class for creating partition projection configurations.
156
+ */
157
+ export declare class PartitionProjectionConfiguration {
158
+ /**
159
+ * Create an INTEGER partition projection configuration.
160
+ */
161
+ static integer(props: IntegerPartitionProjectionConfigurationProps): PartitionProjectionConfiguration;
162
+ /**
163
+ * Create a DATE partition projection configuration.
164
+ */
165
+ static date(props: DatePartitionProjectionConfigurationProps): PartitionProjectionConfiguration;
166
+ /**
167
+ * Create an ENUM partition projection configuration.
168
+ */
169
+ static enum(props: EnumPartitionProjectionConfigurationProps): PartitionProjectionConfiguration;
170
+ /**
171
+ * Create an INJECTED partition projection configuration.
172
+ *
173
+ * Partition values are injected at query time through the query statement.
174
+ *
175
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html#partition-projection-injected-type
176
+ */
177
+ static injected(): PartitionProjectionConfiguration;
178
+ /**
179
+ * The type of partition projection.
180
+ */
181
+ readonly type: PartitionProjectionType;
182
+ /**
183
+ * Range of partition values for INTEGER type.
184
+ *
185
+ * Array of [min, max] as numbers.
186
+ */
187
+ readonly integerRange?: number[];
188
+ /**
189
+ * Range of partition values for DATE type.
190
+ *
191
+ * Array of [start, end] as date strings.
192
+ */
193
+ readonly dateRange?: string[];
194
+ /**
195
+ * Interval between partition values.
196
+ */
197
+ readonly interval?: number;
198
+ /**
199
+ * Number of digits to pad INTEGER partition values.
200
+ */
201
+ readonly digits?: number;
202
+ /**
203
+ * Date format for DATE partition values (Java SimpleDateFormat).
204
+ */
205
+ readonly format?: string;
206
+ /**
207
+ * Unit for DATE partition interval.
208
+ */
209
+ readonly intervalUnit?: DateIntervalUnit;
210
+ /**
211
+ * Explicit list of values for ENUM partitions.
212
+ */
213
+ readonly values?: string[];
214
+ private constructor();
215
+ /**
216
+ * Renders CloudFormation parameters for this partition projection configuration.
217
+ *
218
+ * @param columnName - The partition column name
219
+ * @internal
220
+ */
221
+ _renderParameters(columnName: string): {
222
+ [key: string]: string;
223
+ };
224
+ }
225
+ /**
226
+ * Partition projection configuration for a table.
227
+ *
228
+ * Maps partition column names to their projection configurations.
229
+ * The key is the partition column name, the value is the partition configuration.
230
+ */
231
+ export type PartitionProjection = {
232
+ [columnName: string]: PartitionProjectionConfiguration;
233
+ };
234
+ /**
235
+ * Generates CloudFormation parameters for partition projection configuration.
236
+ *
237
+ * @param columnName - The partition column name
238
+ * @param config - The partition configuration
239
+ * @returns CloudFormation parameters
240
+ */
241
+ export declare function generatePartitionProjectionParameters(columnName: string, config: PartitionProjectionConfiguration): {
242
+ [key: string]: string;
243
+ };
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PartitionProjectionConfiguration = exports.DateIntervalUnit = exports.PartitionProjectionType = void 0;
4
+ exports.generatePartitionProjectionParameters = generatePartitionProjectionParameters;
5
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ /**
9
+ * Partition projection type.
10
+ *
11
+ * Determines how Athena projects partition values.
12
+ *
13
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html
14
+ */
15
+ var PartitionProjectionType;
16
+ (function (PartitionProjectionType) {
17
+ /**
18
+ * Project partition values as integers within a range.
19
+ */
20
+ PartitionProjectionType["INTEGER"] = "integer";
21
+ /**
22
+ * Project partition values as dates within a range.
23
+ */
24
+ PartitionProjectionType["DATE"] = "date";
25
+ /**
26
+ * Project partition values from an explicit list of values.
27
+ */
28
+ PartitionProjectionType["ENUM"] = "enum";
29
+ /**
30
+ * Project partition values that are injected at query time.
31
+ */
32
+ PartitionProjectionType["INJECTED"] = "injected";
33
+ })(PartitionProjectionType || (exports.PartitionProjectionType = PartitionProjectionType = {}));
34
+ /**
35
+ * Date interval unit for partition projection.
36
+ *
37
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html#partition-projection-date-type
38
+ */
39
+ var DateIntervalUnit;
40
+ (function (DateIntervalUnit) {
41
+ /**
42
+ * Year interval.
43
+ */
44
+ DateIntervalUnit["YEARS"] = "YEARS";
45
+ /**
46
+ * Month interval.
47
+ */
48
+ DateIntervalUnit["MONTHS"] = "MONTHS";
49
+ /**
50
+ * Week interval.
51
+ */
52
+ DateIntervalUnit["WEEKS"] = "WEEKS";
53
+ /**
54
+ * Day interval (default).
55
+ */
56
+ DateIntervalUnit["DAYS"] = "DAYS";
57
+ /**
58
+ * Hour interval.
59
+ */
60
+ DateIntervalUnit["HOURS"] = "HOURS";
61
+ /**
62
+ * Minute interval.
63
+ */
64
+ DateIntervalUnit["MINUTES"] = "MINUTES";
65
+ /**
66
+ * Second interval.
67
+ */
68
+ DateIntervalUnit["SECONDS"] = "SECONDS";
69
+ })(DateIntervalUnit || (exports.DateIntervalUnit = DateIntervalUnit = {}));
70
+ /**
71
+ * Factory class for creating partition projection configurations.
72
+ */
73
+ class PartitionProjectionConfiguration {
74
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.PartitionProjectionConfiguration", version: "2.239.0-alpha.0" };
75
+ /**
76
+ * Create an INTEGER partition projection configuration.
77
+ */
78
+ static integer(props) {
79
+ try {
80
+ jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_IntegerPartitionProjectionConfigurationProps(props);
81
+ }
82
+ catch (error) {
83
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
84
+ Error.captureStackTrace(error, this.integer);
85
+ }
86
+ throw error;
87
+ }
88
+ // Validate min/max are integers
89
+ if (!aws_cdk_lib_1.Token.isUnresolved(props.min) && !aws_cdk_lib_1.Token.isUnresolved(props.max)) {
90
+ if (!Number.isInteger(props.min) || !Number.isInteger(props.max)) {
91
+ throw new aws_cdk_lib_1.UnscopedValidationError(`INTEGER partition projection range must contain integers, but got [${props.min}, ${props.max}]`);
92
+ }
93
+ // Validate min <= max
94
+ if (props.min > props.max) {
95
+ throw new aws_cdk_lib_1.UnscopedValidationError(`INTEGER partition projection range must be [min, max] where min <= max, but got [${props.min}, ${props.max}]`);
96
+ }
97
+ }
98
+ // Validate interval
99
+ if (props.interval !== undefined &&
100
+ !aws_cdk_lib_1.Token.isUnresolved(props.interval) &&
101
+ (!Number.isInteger(props.interval) || props.interval <= 0)) {
102
+ throw new aws_cdk_lib_1.UnscopedValidationError(`INTEGER partition projection interval must be a positive integer, but got ${props.interval}`);
103
+ }
104
+ // Validate digits
105
+ if (props.digits !== undefined &&
106
+ !aws_cdk_lib_1.Token.isUnresolved(props.digits) &&
107
+ (!Number.isInteger(props.digits) || props.digits < 1)) {
108
+ throw new aws_cdk_lib_1.UnscopedValidationError(`INTEGER partition projection digits must be an integer >= 1, but got ${props.digits}`);
109
+ }
110
+ return new PartitionProjectionConfiguration({
111
+ type: PartitionProjectionType.INTEGER,
112
+ integerRange: [props.min, props.max],
113
+ interval: props.interval,
114
+ digits: props.digits,
115
+ });
116
+ }
117
+ /**
118
+ * Create a DATE partition projection configuration.
119
+ */
120
+ static date(props) {
121
+ try {
122
+ jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_DatePartitionProjectionConfigurationProps(props);
123
+ }
124
+ catch (error) {
125
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
126
+ Error.captureStackTrace(error, this.date);
127
+ }
128
+ throw error;
129
+ }
130
+ // Validate min/max are not empty
131
+ if (!aws_cdk_lib_1.Token.isUnresolved(props.min) &&
132
+ !aws_cdk_lib_1.Token.isUnresolved(props.max) &&
133
+ (props.min.trim() === '' || props.max.trim() === '')) {
134
+ throw new aws_cdk_lib_1.UnscopedValidationError('DATE partition projection range must not contain empty strings');
135
+ }
136
+ // Validate format
137
+ if (!aws_cdk_lib_1.Token.isUnresolved(props.format)) {
138
+ // Validate format is not empty
139
+ if (props.format.trim() === '') {
140
+ throw new aws_cdk_lib_1.UnscopedValidationError('DATE partition projection format must be a non-empty string');
141
+ }
142
+ // Validate format pattern characters (Java 8 DateTimeFormatter)
143
+ const validPatternLetters = 'GyuYDMLdQqwWEecFahKkHmsSAnNVzOXxZp';
144
+ const format = props.format;
145
+ let inQuote = false;
146
+ const invalidChars = [];
147
+ for (let i = 0; i < format.length; i++) {
148
+ const ch = format[i];
149
+ if (ch === "'") {
150
+ if (i + 1 < format.length && format[i + 1] === "'") {
151
+ // '' is an escaped single quote literal, skip both
152
+ i++;
153
+ }
154
+ else {
155
+ inQuote = !inQuote;
156
+ }
157
+ }
158
+ else if (!inQuote && /[a-zA-Z]/.test(ch)) {
159
+ if (!validPatternLetters.includes(ch)) {
160
+ invalidChars.push(ch);
161
+ }
162
+ }
163
+ }
164
+ if (inQuote) {
165
+ throw new aws_cdk_lib_1.UnscopedValidationError(`DATE partition projection format has an unclosed single quote: '${format}'`);
166
+ }
167
+ if (invalidChars.length > 0) {
168
+ const unique = [...new Set(invalidChars)];
169
+ throw new aws_cdk_lib_1.UnscopedValidationError(`DATE partition projection format contains invalid pattern characters: ${unique.join(', ')}. Must use Java DateTimeFormatter valid pattern letters.`);
170
+ }
171
+ }
172
+ // Validate interval
173
+ if (props.interval !== undefined &&
174
+ !aws_cdk_lib_1.Token.isUnresolved(props.interval) &&
175
+ (!Number.isInteger(props.interval) || props.interval <= 0)) {
176
+ throw new aws_cdk_lib_1.UnscopedValidationError(`DATE partition projection interval must be a positive integer, but got ${props.interval}`);
177
+ }
178
+ return new PartitionProjectionConfiguration({
179
+ type: PartitionProjectionType.DATE,
180
+ dateRange: [props.min, props.max],
181
+ interval: props.interval,
182
+ format: props.format,
183
+ intervalUnit: props.intervalUnit,
184
+ });
185
+ }
186
+ /**
187
+ * Create an ENUM partition projection configuration.
188
+ */
189
+ static enum(props) {
190
+ try {
191
+ jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_EnumPartitionProjectionConfigurationProps(props);
192
+ }
193
+ catch (error) {
194
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
195
+ Error.captureStackTrace(error, this.enum);
196
+ }
197
+ throw error;
198
+ }
199
+ // Validate values is not empty
200
+ if (props.values.length === 0) {
201
+ throw new aws_cdk_lib_1.UnscopedValidationError('ENUM partition projection values must be a non-empty array');
202
+ }
203
+ for (let i = 0; i < props.values.length; i++) {
204
+ const value = props.values[i];
205
+ if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
206
+ if (value.trim() === '') {
207
+ throw new aws_cdk_lib_1.UnscopedValidationError('ENUM partition projection values must not contain empty strings');
208
+ }
209
+ if (value.includes(',')) {
210
+ throw new aws_cdk_lib_1.UnscopedValidationError(`ENUM partition projection values must not contain commas because the values are serialized as a comma-separated list, got: '${value}'`);
211
+ }
212
+ }
213
+ }
214
+ return new PartitionProjectionConfiguration({
215
+ type: PartitionProjectionType.ENUM,
216
+ values: props.values,
217
+ });
218
+ }
219
+ /**
220
+ * Create an INJECTED partition projection configuration.
221
+ *
222
+ * Partition values are injected at query time through the query statement.
223
+ *
224
+ * @see https://docs.aws.amazon.com/athena/latest/ug/partition-projection-supported-types.html#partition-projection-injected-type
225
+ */
226
+ static injected() {
227
+ return new PartitionProjectionConfiguration({
228
+ type: PartitionProjectionType.INJECTED,
229
+ });
230
+ }
231
+ /**
232
+ * The type of partition projection.
233
+ */
234
+ type;
235
+ /**
236
+ * Range of partition values for INTEGER type.
237
+ *
238
+ * Array of [min, max] as numbers.
239
+ */
240
+ integerRange;
241
+ /**
242
+ * Range of partition values for DATE type.
243
+ *
244
+ * Array of [start, end] as date strings.
245
+ */
246
+ dateRange;
247
+ /**
248
+ * Interval between partition values.
249
+ */
250
+ interval;
251
+ /**
252
+ * Number of digits to pad INTEGER partition values.
253
+ */
254
+ digits;
255
+ /**
256
+ * Date format for DATE partition values (Java SimpleDateFormat).
257
+ */
258
+ format;
259
+ /**
260
+ * Unit for DATE partition interval.
261
+ */
262
+ intervalUnit;
263
+ /**
264
+ * Explicit list of values for ENUM partitions.
265
+ */
266
+ values;
267
+ constructor(props) {
268
+ this.type = props.type;
269
+ this.integerRange = props.integerRange;
270
+ this.dateRange = props.dateRange;
271
+ this.interval = props.interval;
272
+ this.digits = props.digits;
273
+ this.format = props.format;
274
+ this.intervalUnit = props.intervalUnit;
275
+ this.values = props.values;
276
+ }
277
+ /**
278
+ * Renders CloudFormation parameters for this partition projection configuration.
279
+ *
280
+ * @param columnName - The partition column name
281
+ * @internal
282
+ */
283
+ _renderParameters(columnName) {
284
+ const params = {
285
+ [`projection.${columnName}.type`]: this.type,
286
+ };
287
+ switch (this.type) {
288
+ case PartitionProjectionType.INTEGER: {
289
+ const [min, max] = this.integerRange;
290
+ params[`projection.${columnName}.range`] = `${min},${max}`;
291
+ if (this.interval !== undefined) {
292
+ params[`projection.${columnName}.interval`] = this.interval.toString();
293
+ }
294
+ if (this.digits !== undefined) {
295
+ params[`projection.${columnName}.digits`] = this.digits.toString();
296
+ }
297
+ break;
298
+ }
299
+ case PartitionProjectionType.DATE: {
300
+ const [start, end] = this.dateRange;
301
+ params[`projection.${columnName}.range`] = `${start},${end}`;
302
+ params[`projection.${columnName}.format`] = this.format;
303
+ if (this.interval !== undefined) {
304
+ params[`projection.${columnName}.interval`] = this.interval.toString();
305
+ }
306
+ if (this.intervalUnit !== undefined) {
307
+ params[`projection.${columnName}.interval.unit`] = this.intervalUnit;
308
+ }
309
+ break;
310
+ }
311
+ case PartitionProjectionType.ENUM: {
312
+ params[`projection.${columnName}.values`] = this.values.join(',');
313
+ break;
314
+ }
315
+ case PartitionProjectionType.INJECTED: {
316
+ // INJECTED has no additional parameters
317
+ break;
318
+ }
319
+ default: {
320
+ // TypeScript exhaustiveness check
321
+ const exhaustiveCheck = this.type;
322
+ throw new aws_cdk_lib_1.UnscopedValidationError(`Unknown partition projection type for "${columnName}": ${exhaustiveCheck}`);
323
+ }
324
+ }
325
+ return params;
326
+ }
327
+ }
328
+ exports.PartitionProjectionConfiguration = PartitionProjectionConfiguration;
329
+ /**
330
+ * Generates CloudFormation parameters for partition projection configuration.
331
+ *
332
+ * @param columnName - The partition column name
333
+ * @param config - The partition configuration
334
+ * @returns CloudFormation parameters
335
+ */
336
+ function generatePartitionProjectionParameters(columnName, config) {
337
+ return config._renderParameters(columnName);
338
+ }
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGl0aW9uLXByb2plY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJ0aXRpb24tcHJvamVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxaEJBLHNGQUtDOzs7QUExaEJELDZDQUE2RDtBQUU3RDs7Ozs7O0dBTUc7QUFDSCxJQUFZLHVCQW9CWDtBQXBCRCxXQUFZLHVCQUF1QjtJQUNqQzs7T0FFRztJQUNILDhDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsd0NBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsd0NBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsZ0RBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQXBCVyx1QkFBdUIsdUNBQXZCLHVCQUF1QixRQW9CbEM7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxnQkFtQ1g7QUFuQ0QsV0FBWSxnQkFBZ0I7SUFDMUI7O09BRUc7SUFDSCxtQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCxxQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILG1DQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILGlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILG1DQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILHVDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsdUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQW5DVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQW1DM0I7QUEwSkQ7O0dBRUc7QUFDSCxNQUFhLGdDQUFnQzs7SUFDM0M7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQW1EOzs7Ozs7Ozs7O1FBQ3ZFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMs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Z0IscUNBQXFDLENBQ25ELFVBQWtCLEVBQ2xCLE1BQXdDO0lBRXhDLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogUGFydGl0aW9uIHByb2plY3Rpb24gdHlwZS5cbiAqXG4gKiBEZXRlcm1pbmVzIGhvdyBBdGhlbmEgcHJvamVjdHMgcGFydGl0aW9uIHZhbHVlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL3BhcnRpdGlvbi1wcm9qZWN0aW9uLXN1cHBvcnRlZC10eXBlcy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFBhcnRpdGlvblByb2plY3Rpb25UeXBlIHtcbiAgLyoqXG4gICAqIFByb2plY3QgcGFydGl0aW9uIHZhbHVlcyBhcyBpbnRlZ2VycyB3aXRoaW4gYSByYW5nZS5cbiAgICovXG4gIElOVEVHRVIgPSAnaW50ZWdlcicsXG5cbiAgLyoqXG4gICAqIFByb2plY3QgcGFydGl0aW9uIHZhbHVlcyBhcyBkYXRlcyB3aXRoaW4gYSByYW5nZS5cbiAgICovXG4gIERBVEUgPSAnZGF0ZScsXG5cbiAgLyoqXG4gICAqIFByb2plY3QgcGFydGl0aW9uIHZhbHVlcyBmcm9tIGFuIGV4cGxpY2l0IGxpc3Qgb2YgdmFsdWVzLlxuICAgKi9cbiAgRU5VTSA9ICdlbnVtJyxcblxuICAvKipcbiAgICogUHJvamVjdCBwYXJ0aXRpb24gdmFsdWVzIHRoYXQgYXJlIGluamVjdGVkIGF0IHF1ZXJ5IHRpbWUuXG4gICAqL1xuICBJTkpFQ1RFRCA9ICdpbmplY3RlZCcsXG59XG5cbi8qKlxuICogRGF0ZSBpbnRlcnZhbCB1bml0IGZvciBwYXJ0aXRpb24gcHJvamVjdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL3BhcnRpdGlvbi1wcm9qZWN0aW9uLXN1cHBvcnRlZC10eXBlcy5odG1sI3BhcnRpdGlvbi1wcm9qZWN0aW9uLWRhdGUtdHlwZVxuICovXG5leHBvcnQgZW51bSBEYXRlSW50ZXJ2YWxVbml0IHtcbiAgLyoqXG4gICAqIFllYXIgaW50ZXJ2YWwuXG4gICAqL1xuICBZRUFSUyA9ICdZRUFSUycsXG5cbiAgLyoqXG4gICAqIE1vbnRoIGludGVydmFsLlxuICAgKi9cbiAgTU9OVEhTID0gJ01PTlRIUycsXG5cbiAgLyoqXG4gICAqIFdlZWsgaW50ZXJ2YWwuXG4gICAqL1xuICBXRUVLUyA9ICdXRUVLUycsXG5cbiAgLyoqXG4gICAqIERheSBpbnRlcnZhbCAoZGVmYXVsdCkuXG4gICAqL1xuICBEQVlTID0gJ0RBWVMnLFxuXG4gIC8qKlxuICAgKiBIb3VyIGludGVydmFsLlxuICAgKi9cbiAgSE9VUlMgPSAnSE9VUlMnLFxuXG4gIC8qKlxuICAgKiBNaW51dGUgaW50ZXJ2YWwuXG4gICAqL1xuICBNSU5VVEVTID0gJ01JTlVURVMnLFxuXG4gIC8qKlxuICAgKiBTZWNvbmQgaW50ZXJ2YWwuXG4gICAqL1xuICBTRUNPTkRTID0gJ1NFQ09ORFMnLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIElOVEVHRVIgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ2VyUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIGZvciB0aGUgaW50ZWdlciBwYXJ0aXRpb24gcmFuZ2UgKGluY2x1c2l2ZSkuXG4gICAqL1xuICByZWFkb25seSBtaW46IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSB2YWx1ZSBmb3IgdGhlIGludGVnZXIgcGFydGl0aW9uIHJhbmdlIChpbmNsdXNpdmUpLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEludGVydmFsIGJldHdlZW4gcGFydGl0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkaWdpdHMgdG8gcGFkIHRoZSBwYXJ0aXRpb24gdmFsdWUgd2l0aCBsZWFkaW5nIHplcm9zLlxuICAgKlxuICAgKiBXaXRoIGRpZ2l0czogNCwgcGFydGl0aW9uIHZhbHVlczogMDAwMSwgMDAwMiwgLi4uLCAwMTAwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3RhdGljIG51bWJlciBvZiBkaWdpdHMgYW5kIG5vIGxlYWRpbmcgemVyb2VzXG4gICAqL1xuICByZWFkb25seSBkaWdpdHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgREFURSBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFN0YXJ0IGRhdGUgZm9yIHRoZSBwYXJ0aXRpb24gcmFuZ2UgKGluY2x1c2l2ZSkuXG4gICAqXG4gICAqIENhbiBiZSBlaXRoZXI6XG4gICAqIC0gRml4ZWQgZGF0ZSBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBieSBgZm9ybWF0YCBwcm9wZXJ0eVxuICAgKiAgIChlLmcuLCAnMjAyMC0wMS0wMScgZm9yIGZvcm1hdCAneXl5eS1NTS1kZCcpXG4gICAqIC0gUmVsYXRpdmUgZGF0ZSB1c2luZyBOT1cgc3ludGF4XG4gICAqICAgKGUuZy4sICdOT1cnLCAnTk9XLTNZRUFSUycsICdOT1crMU1PTlRIJylcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9wYXJ0aXRpb24tcHJvamVjdGlvbi1zdXBwb3J0ZWQtdHlwZXMuaHRtbCNwYXJ0aXRpb24tcHJvamVjdGlvbi1kYXRlLXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IG1pbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmQgZGF0ZSBmb3IgdGhlIHBhcnRpdGlvbiByYW5nZSAoaW5jbHVzaXZlKS5cbiAgICpcbiAgICogQ2FuIGJlIGVpdGhlcjpcbiAgICogLSBGaXhlZCBkYXRlIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IGBmb3JtYXRgIHByb3BlcnR5XG4gICAqIC0gUmVsYXRpdmUgZGF0ZSB1c2luZyBOT1cgc3ludGF4XG4gICAqXG4gICAqIFNhbWUgZm9ybWF0IGNvbnN0cmFpbnRzIGFzIGBtaW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGUgZm9ybWF0IGZvciBwYXJ0aXRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBVc2VzIEphdmEgU2ltcGxlRGF0ZUZvcm1hdCBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvOC9kb2NzL2FwaS9qYXZhL3RleHQvU2ltcGxlRGF0ZUZvcm1hdC5odG1sXG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW50ZXJ2YWwgYmV0d2VlbiBwYXJ0aXRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBXaGVuIHRoZSBwcm92aWRlZCBkYXRlcyBhcmUgYXQgc2luZ2xlLWRheSBvciBzaW5nbGUtbW9udGggcHJlY2lzaW9uLFxuICAgKiB0aGUgaW50ZXJ2YWwgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIDEgZGF5IG9yIDEgbW9udGgsIHJlc3BlY3RpdmVseS5cbiAgICogT3RoZXJ3aXNlLCBpbnRlcnZhbCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAxIGZvciBzaW5nbGUtZGF5IG9yIHNpbmdsZS1tb250aCBwcmVjaXNpb24sIG90aGVyd2lzZSByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuaXQgZm9yIHRoZSBpbnRlcnZhbC5cbiAgICpcbiAgICogV2hlbiB0aGUgcHJvdmlkZWQgZGF0ZXMgYXJlIGF0IHNpbmdsZS1kYXkgb3Igc2luZ2xlLW1vbnRoIHByZWNpc2lvbixcbiAgICogdGhlIGludGVydmFsVW5pdCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gMSBkYXkgb3IgMSBtb250aCwgcmVzcGVjdGl2ZWx5LlxuICAgKiBPdGhlcndpc2UsIHRoZSBpbnRlcnZhbFVuaXQgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gREFZUyBmb3Igc2luZ2xlLWRheSBwcmVjaXNpb24sIE1PTlRIUyBmb3Igc2luZ2xlLW1vbnRoIHByZWNpc2lvbiwgb3RoZXJ3aXNlIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBpbnRlcnZhbFVuaXQ/OiBEYXRlSW50ZXJ2YWxVbml0O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEVOVU0gcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBsaXN0IG9mIHBhcnRpdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlIFsndXMtZWFzdC0xJywgJ3VzLXdlc3QtMicsICdldS13ZXN0LTEnXVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBwcm9wZXJ0aWVzIGZvciBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbi5cbiAqL1xuaW50ZXJmYWNlIFBhcnRpdGlvblByb2plY3Rpb25Db25maWd1cmF0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcGFydGl0aW9uIHByb2plY3Rpb24uXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBQYXJ0aXRpb25Qcm9qZWN0aW9uVHlwZTtcblxuICAvKipcbiAgICogUmFuZ2Ugb2YgcGFydGl0aW9uIHZhbHVlcyBmb3IgSU5URUdFUiB0eXBlLlxuICAgKlxuICAgKiBBcnJheSBvZiBbbWluLCBtYXhdIGFzIG51bWJlcnMuXG4gICAqL1xuICByZWFkb25seSBpbnRlZ2VyUmFuZ2U/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogUmFuZ2Ugb2YgcGFydGl0aW9uIHZhbHVlcyBmb3IgREFURSB0eXBlLlxuICAgKlxuICAgKiBBcnJheSBvZiBbc3RhcnQsIGVuZF0gYXMgZGF0ZSBzdHJpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludGVydmFsIGJldHdlZW4gcGFydGl0aW9uIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IGludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGlnaXRzIHRvIHBhZCBJTlRFR0VSIHBhcnRpdGlvbiB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBkaWdpdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERhdGUgZm9ybWF0IGZvciBEQVRFIHBhcnRpdGlvbiB2YWx1ZXMgKEphdmEgU2ltcGxlRGF0ZUZvcm1hdCkuXG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXQgZm9yIERBVEUgcGFydGl0aW9uIGludGVydmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxVbml0PzogRGF0ZUludGVydmFsVW5pdDtcblxuICAvKipcbiAgICogRXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMgZm9yIEVOVU0gcGFydGl0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIElOVEVHRVIgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW50ZWdlcihwcm9wczogSW50ZWdlclBhcnRpdGlvblByb2plY3Rpb25Db25maWd1cmF0aW9uUHJvcHMpOiBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgLy8gVmFsaWRhdGUgbWluL21heCBhcmUgaW50ZWdlcnNcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5taW4pICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMubWF4KSkge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLm1pbikgfHwgIU51bWJlci5pc0ludGVnZXIocHJvcHMubWF4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYElOVEVHRVIgcGFydGl0aW9uIHByb2plY3Rpb24gcmFuZ2UgbXVzdCBjb250YWluIGludGVnZXJzLCBidXQgZ290IFske3Byb3BzLm1pbn0sICR7cHJvcHMubWF4fV1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBtaW4gPD0gbWF4XG4gICAgICBpZiAocHJvcHMubWluID4gcHJvcHMubWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgSU5URUdFUiBwYXJ0aXRpb24gcHJvamVjdGlvbiByYW5nZSBtdXN0IGJlIFttaW4sIG1heF0gd2hlcmUgbWluIDw9IG1heCwgYnV0IGdvdCBbJHtwcm9wcy5taW59LCAke3Byb3BzLm1heH1dYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbnRlcnZhbFxuICAgIGlmIChcbiAgICAgIHByb3BzLmludGVydmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaW50ZXJ2YWwpICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMuaW50ZXJ2YWwpIHx8IHByb3BzLmludGVydmFsIDw9IDApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJTlRFR0VSIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGludGVydmFsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBidXQgZ290ICR7cHJvcHMuaW50ZXJ2YWx9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGlnaXRzXG4gICAgaWYgKFxuICAgICAgcHJvcHMuZGlnaXRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZGlnaXRzKSAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLmRpZ2l0cykgfHwgcHJvcHMuZGlnaXRzIDwgMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYElOVEVHRVIgcGFydGl0aW9uIHByb2plY3Rpb24gZGlnaXRzIG11c3QgYmUgYW4gaW50ZWdlciA+PSAxLCBidXQgZ290ICR7cHJvcHMuZGlnaXRzfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgdHlwZTogUGFydGl0aW9uUHJvamVjdGlvblR5cGUuSU5URUdFUixcbiAgICAgIGludGVnZXJSYW5nZTogW3Byb3BzLm1pbiwgcHJvcHMubWF4XSxcbiAgICAgIGludGVydmFsOiBwcm9wcy5pbnRlcnZhbCxcbiAgICAgIGRpZ2l0czogcHJvcHMuZGlnaXRzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERBVEUgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZShwcm9wczogRGF0ZVBhcnRpdGlvblByb2plY3Rpb25Db25maWd1cmF0aW9uUHJvcHMpOiBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgLy8gVmFsaWRhdGUgbWluL21heCBhcmUgbm90IGVtcHR5XG4gICAgaWYgKFxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5taW4pICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLm1heCkgJiZcbiAgICAgIChwcm9wcy5taW4udHJpbSgpID09PSAnJyB8fCBwcm9wcy5tYXgudHJpbSgpID09PSAnJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0RBVEUgcGFydGl0aW9uIHByb2plY3Rpb24gcmFuZ2UgbXVzdCBub3QgY29udGFpbiBlbXB0eSBzdHJpbmdzJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZm9ybWF0XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZm9ybWF0KSkge1xuICAgICAgLy8gVmFsaWRhdGUgZm9ybWF0IGlzIG5vdCBlbXB0eVxuICAgICAgaWYgKHByb3BzLmZvcm1hdC50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAnREFURSBwYXJ0aXRpb24gcHJvamVjdGlvbiBmb3JtYXQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBmb3JtYXQgcGF0dGVybiBjaGFyYWN0ZXJzIChKYXZhIDggRGF0ZVRpbWVGb3JtYXR0ZXIpXG4gICAgICBjb25zdCB2YWxpZFBhdHRlcm5MZXR0ZXJzID0gJ0d5dVlETUxkUXF3V0VlY0ZhaEtrSG1zU0FuTlZ6T1h4WnAnO1xuICAgICAgY29uc3QgZm9ybWF0ID0gcHJvcHMuZm9ybWF0O1xuICAgICAgbGV0IGluUXVvdGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGludmFsaWRDaGFyczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2ggPSBmb3JtYXRbaV07XG4gICAgICAgIGlmIChjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgICBpZiAoaSArIDEgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdFtpICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAvLyAnJyBpcyBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZSBsaXRlcmFsLCBza2lwIGJvdGhcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5RdW90ZSA9ICFpblF1b3RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaW5RdW90ZSAmJiAvW2EtekEtWl0vLnRlc3QoY2gpKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZFBhdHRlcm5MZXR0ZXJzLmluY2x1ZGVzKGNoKSkge1xuICAgICAgICAgICAgaW52YWxpZENoYXJzLnB1c2goY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5RdW90ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYERBVEUgcGFydGl0aW9uIHByb2plY3Rpb24gZm9ybWF0IGhhcyBhbiB1bmNsb3NlZCBzaW5nbGUgcXVvdGU6ICcke2Zvcm1hdH0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGludmFsaWRDaGFycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGludmFsaWRDaGFycyldO1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYERBVEUgcGFydGl0aW9uIHByb2plY3Rpb24gZm9ybWF0IGNvbnRhaW5zIGludmFsaWQgcGF0dGVybiBjaGFyYWN0ZXJzOiAke3VuaXF1ZS5qb2luKCcsICcpfS4gTXVzdCB1c2UgSmF2YSBEYXRlVGltZUZvcm1hdHRlciB2YWxpZCBwYXR0ZXJuIGxldHRlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbnRlcnZhbFxuICAgIGlmIChcbiAgICAgIHByb3BzLmludGVydmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaW50ZXJ2YWwpICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMuaW50ZXJ2YWwpIHx8IHByb3BzLmludGVydmFsIDw9IDApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBEQVRFIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGludGVydmFsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBidXQgZ290ICR7cHJvcHMuaW50ZXJ2YWx9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbih7XG4gICAgICB0eXBlOiBQYXJ0aXRpb25Qcm9qZWN0aW9uVHlwZS5EQVRFLFxuICAgICAgZGF0ZVJhbmdlOiBbcHJvcHMubWluLCBwcm9wcy5tYXhdLFxuICAgICAgaW50ZXJ2YWw6IHByb3BzLmludGVydmFsLFxuICAgICAgZm9ybWF0OiBwcm9wcy5mb3JtYXQsXG4gICAgICBpbnRlcnZhbFVuaXQ6IHByb3BzLmludGVydmFsVW5pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gRU5VTSBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlbnVtKHByb3BzOiBFbnVtUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyk6IFBhcnRpdGlvblByb2plY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgICAvLyBWYWxpZGF0ZSB2YWx1ZXMgaXMgbm90IGVtcHR5XG4gICAgaWYgKHByb3BzLnZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0VOVU0gcGFydGl0aW9uIHByb2plY3Rpb24gdmFsdWVzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBwcm9wcy52YWx1ZXNbaV07XG4gICAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICAnRU5VTSBwYXJ0aXRpb24gcHJvamVjdGlvbiB2YWx1ZXMgbXVzdCBub3QgY29udGFpbiBlbXB0eSBzdHJpbmdzJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYEVOVU0gcGFydGl0aW9uIHByb2plY3Rpb24gdmFsdWVzIG11c3Qgbm90IGNvbnRhaW4gY29tbWFzIGJlY2F1c2UgdGhlIHZhbHVlcyBhcmUgc2VyaWFsaXplZCBhcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBnb3Q6ICcke3ZhbHVlfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFBhcnRpdGlvblByb2plY3Rpb25Db25maWd1cmF0aW9uKHtcbiAgICAgIHR5cGU6IFBhcnRpdGlvblByb2plY3Rpb25UeXBlLkVOVU0sXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSU5KRUNURUQgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogUGFydGl0aW9uIHZhbHVlcyBhcmUgaW5qZWN0ZWQgYXQgcXVlcnkgdGltZSB0aHJvdWdoIHRoZSBxdWVyeSBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvcGFydGl0aW9uLXByb2plY3Rpb24tc3VwcG9ydGVkLXR5cGVzLmh0bWwjcGFydGl0aW9uLXByb2plY3Rpb24taW5qZWN0ZWQtdHlwZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmplY3RlZCgpOiBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbih7XG4gICAgICB0eXBlOiBQYXJ0aXRpb25Qcm9qZWN0aW9uVHlwZS5JTkpFQ1RFRCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwYXJ0aXRpb24gcHJvamVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBQYXJ0aXRpb25Qcm9qZWN0aW9uVHlwZTtcblxuICAvKipcbiAgICogUmFuZ2Ugb2YgcGFydGl0aW9uIHZhbHVlcyBmb3IgSU5URUdFUiB0eXBlLlxuICAgKlxuICAgKiBBcnJheSBvZiBbbWluLCBtYXhdIGFzIG51bWJlcnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZWdlclJhbmdlPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJhbmdlIG9mIHBhcnRpdGlvbiB2YWx1ZXMgZm9yIERBVEUgdHlwZS5cbiAgICpcbiAgICogQXJyYXkgb2YgW3N0YXJ0LCBlbmRdIGFzIGRhdGUgc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRlUmFuZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW50ZXJ2YWwgYmV0d2VlbiBwYXJ0aXRpb24gdmFsdWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGlnaXRzIHRvIHBhZCBJTlRFR0VSIHBhcnRpdGlvbiB2YWx1ZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlnaXRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEYXRlIGZvcm1hdCBmb3IgREFURSBwYXJ0aXRpb24gdmFsdWVzIChKYXZhIFNpbXBsZURhdGVGb3JtYXQpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pdCBmb3IgREFURSBwYXJ0aXRpb24gaW50ZXJ2YWwuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJ2YWxVbml0PzogRGF0ZUludGVydmFsVW5pdDtcblxuICAvKipcbiAgICogRXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMgZm9yIEVOVU0gcGFydGl0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZXM/OiBzdHJpbmdbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3BzOiBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvblByb3BzKSB7XG4gICAgdGhpcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICB0aGlzLmludGVnZXJSYW5nZSA9IHByb3BzLmludGVnZXJSYW5nZTtcbiAgICB0aGlzLmRhdGVSYW5nZSA9IHByb3BzLmRhdGVSYW5nZTtcbiAgICB0aGlzLmludGVydmFsID0gcHJvcHMuaW50ZXJ2YWw7XG4gICAgdGhpcy5kaWdpdHMgPSBwcm9wcy5kaWdpdHM7XG4gICAgdGhpcy5mb3JtYXQgPSBwcm9wcy5mb3JtYXQ7XG4gICAgdGhpcy5pbnRlcnZhbFVuaXQgPSBwcm9wcy5pbnRlcnZhbFVuaXQ7XG4gICAgdGhpcy52YWx1ZXMgPSBwcm9wcy52YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGlzIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lIC0gVGhlIHBhcnRpdGlvbiBjb2x1bW4gbmFtZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcmVuZGVyUGFyYW1ldGVycyhjb2x1bW5OYW1lOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBbYHByb2plY3Rpb24uJHtjb2x1bW5OYW1lfS50eXBlYF06IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgUGFydGl0aW9uUHJvamVjdGlvblR5cGUuSU5URUdFUjoge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5pbnRlZ2VyUmFuZ2UhO1xuICAgICAgICBwYXJhbXNbYHByb2plY3Rpb24uJHtjb2x1bW5OYW1lfS5yYW5nZWBdID0gYCR7bWlufSwke21heH1gO1xuICAgICAgICBpZiAodGhpcy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyYW1zW2Bwcm9qZWN0aW9uLiR7Y29sdW1uTmFtZX0uaW50ZXJ2YWxgXSA9IHRoaXMuaW50ZXJ2YWwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaWdpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtc1tgcHJvamVjdGlvbi4ke2NvbHVtbk5hbWV9LmRpZ2l0c2BdID0gdGhpcy5kaWdpdHMudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUGFydGl0aW9uUHJvamVjdGlvblR5cGUuREFURToge1xuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLmRhdGVSYW5nZSE7XG4gICAgICAgIHBhcmFtc1tgcHJvamVjdGlvbi4ke2NvbHVtbk5hbWV9LnJhbmdlYF0gPSBgJHtzdGFydH0sJHtlbmR9YDtcbiAgICAgICAgcGFyYW1zW2Bwcm9qZWN0aW9uLiR7Y29sdW1uTmFtZX0uZm9ybWF0YF0gPSB0aGlzLmZvcm1hdCE7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJhbXNbYHByb2plY3Rpb24uJHtjb2x1bW5OYW1lfS5pbnRlcnZhbGBdID0gdGhpcy5pbnRlcnZhbC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsVW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyYW1zW2Bwcm9qZWN0aW9uLiR7Y29sdW1uTmFtZX0uaW50ZXJ2YWwudW5pdGBdID0gdGhpcy5pbnRlcnZhbFVuaXQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBhcnRpdGlvblByb2plY3Rpb25UeXBlLkVOVU06IHtcbiAgICAgICAgcGFyYW1zW2Bwcm9qZWN0aW9uLiR7Y29sdW1uTmFtZX0udmFsdWVzYF0gPSB0aGlzLnZhbHVlcyEuam9pbignLCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUGFydGl0aW9uUHJvamVjdGlvblR5cGUuSU5KRUNURUQ6IHtcbiAgICAgICAgLy8gSU5KRUNURUQgaGFzIG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gVHlwZVNjcmlwdCBleGhhdXN0aXZlbmVzcyBjaGVja1xuICAgICAgICBjb25zdCBleGhhdXN0aXZlQ2hlY2s6IG5ldmVyID0gdGhpcy50eXBlO1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYFVua25vd24gcGFydGl0aW9uIHByb2plY3Rpb24gdHlwZSBmb3IgXCIke2NvbHVtbk5hbWV9XCI6ICR7ZXhoYXVzdGl2ZUNoZWNrfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKipcbiAqIFBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgdGFibGUuXG4gKlxuICogTWFwcyBwYXJ0aXRpb24gY29sdW1uIG5hbWVzIHRvIHRoZWlyIHByb2plY3Rpb24gY29uZmlndXJhdGlvbnMuXG4gKiBUaGUga2V5IGlzIHRoZSBwYXJ0aXRpb24gY29sdW1uIG5hbWUsIHRoZSB2YWx1ZSBpcyB0aGUgcGFydGl0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRpdGlvblByb2plY3Rpb24gPSB7XG4gIFtjb2x1bW5OYW1lOiBzdHJpbmddOiBQYXJ0aXRpb25Qcm9qZWN0aW9uQ29uZmlndXJhdGlvbjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlcnMgZm9yIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIGNvbHVtbk5hbWUgLSBUaGUgcGFydGl0aW9uIGNvbHVtbiBuYW1lXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIHBhcnRpdGlvbiBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb25QYXJhbWV0ZXJzKFxuICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gIGNvbmZpZzogUGFydGl0aW9uUHJvamVjdGlvbkNvbmZpZ3VyYXRpb24sXG4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgcmV0dXJuIGNvbmZpZy5fcmVuZGVyUGFyYW1ldGVycyhjb2x1bW5OYW1lKTtcbn1cbiJdfQ==
package/lib/s3-table.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { CfnTable } from 'aws-cdk-lib/aws-glue';
2
- import * as iam from 'aws-cdk-lib/aws-iam';
2
+ import type * as iam from 'aws-cdk-lib/aws-iam';
3
3
  import * as kms from 'aws-cdk-lib/aws-kms';
4
4
  import * as s3 from 'aws-cdk-lib/aws-s3';
5
- import { Construct } from 'constructs';
6
- import { PartitionIndex, TableBase, TableBaseProps } from './table-base';
5
+ import type { Construct } from 'constructs';
6
+ import type { PartitionIndex, TableBaseProps } from './table-base';
7
+ import { TableBase } from './table-base';
7
8
  /**
8
9
  * Encryption options for a Table.
9
10
  *