@aws-mdaa/dataops-job-l3-construct 1.3.0 → 1.5.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 +114 -389
- package/lib/dataops-job-l3-construct.d.ts +30 -240
- package/lib/dataops-job-l3-construct.js +25 -25
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/.npmignore +34 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/jest.config.js +5 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.js +1 -1
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.ts +241 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/package.json +16 -18
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.js +200 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.ts +215 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.json +40 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/typedoc.json +7 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/.npmignore +34 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/jest.config.js +5 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +2 -20
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +2 -11
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.ts +241 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +15 -17
- package/node_modules/@aws-mdaa/s3-inventory-helper/test/TODO +0 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.json +40 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/typedoc.json +7 -0
- package/node_modules/lodash/README.md +2 -2
- package/node_modules/lodash/_baseUnset.js +47 -2
- package/node_modules/lodash/core.js +1 -1
- package/node_modules/lodash/core.min.js +1 -1
- package/node_modules/lodash/lodash.js +43 -4
- package/node_modules/lodash/lodash.min.js +57 -57
- package/node_modules/lodash/package.json +1 -1
- package/package.json +33 -47
- package/node_modules/lodash/flake.lock +0 -40
- package/node_modules/lodash/flake.nix +0 -20
- package/node_modules/lodash/release.md +0 -48
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Don't include original .ts files when doing `npm pack`
|
|
2
|
+
*.ts
|
|
3
|
+
*.tsbuildinfo
|
|
4
|
+
.eslintrc.js
|
|
5
|
+
tsconfig.json
|
|
6
|
+
typedoc.json
|
|
7
|
+
|
|
8
|
+
# dev-related files
|
|
9
|
+
coverage
|
|
10
|
+
test/
|
|
11
|
+
|
|
12
|
+
# pack output
|
|
13
|
+
*.tgz
|
|
14
|
+
|
|
15
|
+
dist
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#Exclude coverage reports for bundled deps
|
|
19
|
+
node_modules/**/coverage/*
|
|
20
|
+
# Exclude typescript source and config
|
|
21
|
+
#*.ts
|
|
22
|
+
#tsconfig.json
|
|
23
|
+
|
|
24
|
+
# Include javascript files and typescript declarations
|
|
25
|
+
!*.js
|
|
26
|
+
!*.d.ts
|
|
27
|
+
|
|
28
|
+
# Exclude jsii outdir
|
|
29
|
+
jsii-dist
|
|
30
|
+
|
|
31
|
+
# Include .jsii and .jsii.gz
|
|
32
|
+
!.jsii
|
|
33
|
+
!.jsii.gz
|
|
34
|
+
jest.config.js
|
|
@@ -8,27 +8,9 @@ import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
|
8
8
|
import { IBucket, Inventory } from 'aws-cdk-lib/aws-s3';
|
|
9
9
|
import { Construct } from 'constructs';
|
|
10
10
|
export interface BucketInventory {
|
|
11
|
-
/**
|
|
12
|
-
* Q-ENHANCED-PROPERTY
|
|
13
|
-
* Name of the S3 bucket for which inventory data has been generated. Identifies the source bucket in inventory data organization and enables bucket-specific inventory querying through Glue table partitions.
|
|
14
|
-
*
|
|
15
|
-
* Use cases: Source bucket identification; Inventory data organization; Multi-bucket inventory management
|
|
16
|
-
*
|
|
17
|
-
* AWS: AWS S3 bucket name for inventory source identification in Glue table partitions
|
|
18
|
-
*
|
|
19
|
-
* Validation: Must be valid S3 bucket name (3-63 characters, lowercase, no underscores)
|
|
20
|
-
**/
|
|
11
|
+
/** Name of the S3 bucket for which inventory data has been generated */
|
|
21
12
|
readonly bucketName: string;
|
|
22
|
-
/**
|
|
23
|
-
* Q-ENHANCED-PROPERTY
|
|
24
|
-
* Name of the S3 inventory configuration that generated the inventory data for the specified bucket. Enables multiple inventory configurations per bucket and organized inventory data management.
|
|
25
|
-
*
|
|
26
|
-
* Use cases: Inventory configuration identification; Multiple inventories per bucket; Inventory data organization
|
|
27
|
-
*
|
|
28
|
-
* AWS: AWS S3 inventory configuration name for inventory data identification in Glue table partitions
|
|
29
|
-
*
|
|
30
|
-
* Validation: Must be valid S3 inventory configuration name matching the inventory ID used in S3 inventory setup
|
|
31
|
-
**/
|
|
13
|
+
/** Name of the S3 inventory configuration that generated the inventory data for the specified bucket */
|
|
32
14
|
readonly inventoryName: string;
|
|
33
15
|
}
|
|
34
16
|
/** Helper class for creating S3 Inventories and associated Glue/Athena resources for querying these inventories. */
|
|
@@ -24,16 +24,7 @@ class InventoryHelper {
|
|
|
24
24
|
return {
|
|
25
25
|
destination: {
|
|
26
26
|
bucket: destinationBucket,
|
|
27
|
-
/**
|
|
28
|
-
* Q-ENHANCED-PROPERTY
|
|
29
|
-
* Required S3 prefix for inventory report destination organization enabling systematic inventory file organization and management. Provides the S3 key prefix for inventory report storage enabling organized inventory data management and efficient retrieval of inventory reports.
|
|
30
|
-
*
|
|
31
|
-
* Use cases: Inventory organization; Report storage; Data management; Systematic file organization
|
|
32
|
-
*
|
|
33
|
-
* AWS: S3 inventory configuration destination prefix for inventory report organization and storage
|
|
34
|
-
*
|
|
35
|
-
* Validation: Must be valid S3 prefix string; required for inventory report destination organization
|
|
36
|
-
*/
|
|
27
|
+
/** S3 prefix for inventory report destination organization enabling systematic inventory file */
|
|
37
28
|
prefix: s3_constructs_1.MdaaBucket.formatS3Prefix(destinationPrefix),
|
|
38
29
|
bucketOwner: bucketOwner,
|
|
39
30
|
},
|
|
@@ -219,4 +210,4 @@ class InventoryHelper {
|
|
|
219
210
|
}
|
|
220
211
|
}
|
|
221
212
|
exports.InventoryHelper = InventoryHelper;
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCwyREFBcUQ7QUFFckQsbURBQStEO0FBQy9ELGlEQUE4RDtBQUM5RCwrQ0FBcUg7QUE0QnJILG9IQUFvSDtBQUNwSCxNQUFhLGVBQWU7SUFDMUI7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQzNCLGlCQUEwQixFQUMxQixXQUFtQixFQUNuQixhQUFzQixFQUN0QixpQkFBMEIsRUFDMUIsa0JBQTJCO1FBRTNCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3RGLE9BQU87WUFDTCxXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekI7Ozs7Ozs7OzttQkFTRztnQkFDSCxNQUFNLEVBQUUsMEJBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BELFdBQVcsRUFBRSxXQUFXO2FBQ3pCO1lBQ0QsTUFBTSxFQUFFLHdCQUFlLENBQUMsT0FBTztZQUMvQixTQUFTLEVBQUUsMkJBQWtCLENBQUMsS0FBSztZQUNuQyxxQkFBcUIsRUFBRSwrQkFBc0IsQ0FBQyxHQUFHO1lBQ2pELFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGFBQWEsRUFBRSwwQkFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztZQUNwRSxjQUFjLEVBQUU7Z0JBQ2QsTUFBTTtnQkFDTixrQkFBa0I7Z0JBQ2xCLGNBQWM7Z0JBQ2QsTUFBTTtnQkFDTixxQkFBcUI7Z0JBQ3JCLG1CQUFtQjtnQkFDbkIsa0JBQWtCO2dCQUNsQiwyQkFBMkI7Z0JBQzNCLGdCQUFnQjtnQkFDaEIsMkJBQTJCO2dCQUMzQiw4QkFBOEI7YUFDL0I7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVE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U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxlQUFlLEVBQUU7WUFDbkIsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsZUFBZSxFQUFFLGVBQWU7YUFDakMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBck9ELDBDQXFPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhYmFzZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhJztcbmltcG9ydCB7IENmblRhYmxlLCBDZm5UYWJsZVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQsIEludmVudG9yeSwgSW52ZW50b3J5Rm9ybWF0LCBJbnZlbnRvcnlGcmVxdWVuY3ksIEludmVudG9yeU9iamVjdFZlcnNpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0SW52ZW50b3J5IHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogTmFtZSBvZiB0aGUgUzMgYnVja2V0IGZvciB3aGljaCBpbnZlbnRvcnkgZGF0YSBoYXMgYmVlbiBnZW5lcmF0ZWQuIElkZW50aWZpZXMgdGhlIHNvdXJjZSBidWNrZXQgaW4gaW52ZW50b3J5IGRhdGEgb3JnYW5pemF0aW9uIGFuZCBlbmFibGVzIGJ1Y2tldC1zcGVjaWZpYyBpbnZlbnRvcnkgcXVlcnlpbmcgdGhyb3VnaCBHbHVlIHRhYmxlIHBhcnRpdGlvbnMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU291cmNlIGJ1Y2tldCBpZGVudGlmaWNhdGlvbjsgSW52ZW50b3J5IGRhdGEgb3JnYW5pemF0aW9uOyBNdWx0aS1idWNrZXQgaW52ZW50b3J5IG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBV1MgUzMgYnVja2V0IG5hbWUgZm9yIGludmVudG9yeSBzb3VyY2UgaWRlbnRpZmljYXRpb24gaW4gR2x1ZSB0YWJsZSBwYXJ0aXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgUzMgYnVja2V0IG5hbWUgKDMtNjMgY2hhcmFjdGVycywgbG93ZXJjYXNlLCBubyB1bmRlcnNjb3JlcylcbiAgICoqL1xuICByZWFkb25seSBidWNrZXROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE5hbWUgb2YgdGhlIFMzIGludmVudG9yeSBjb25maWd1cmF0aW9uIHRoYXQgZ2VuZXJhdGVkIHRoZSBpbnZlbnRvcnkgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBidWNrZXQuIEVuYWJsZXMgbXVsdGlwbGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb25zIHBlciBidWNrZXQgYW5kIG9yZ2FuaXplZCBpbnZlbnRvcnkgZGF0YSBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEludmVudG9yeSBjb25maWd1cmF0aW9uIGlkZW50aWZpY2F0aW9uOyBNdWx0aXBsZSBpbnZlbnRvcmllcyBwZXIgYnVja2V0OyBJbnZlbnRvcnkgZGF0YSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQVdTOiBBV1MgUzMgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gbmFtZSBmb3IgaW52ZW50b3J5IGRhdGEgaWRlbnRpZmljYXRpb24gaW4gR2x1ZSB0YWJsZSBwYXJ0aXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgUzMgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gbmFtZSBtYXRjaGluZyB0aGUgaW52ZW50b3J5IElEIHVzZWQgaW4gUzMgaW52ZW50b3J5IHNldHVwXG4gICAqKi9cbiAgcmVhZG9ubHkgaW52ZW50b3J5TmFtZTogc3RyaW5nO1xufVxuXG4vKiogSGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBTMyBJbnZlbnRvcmllcyBhbmQgYXNzb2NpYXRlZCBHbHVlL0F0aGVuYSByZXNvdXJjZXMgZm9yIHF1ZXJ5aW5nIHRoZXNlIGludmVudG9yaWVzLiAqL1xuZXhwb3J0IGNsYXNzIEludmVudG9yeUhlbHBlciB7XG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBTMyBpbnZlbnRvcnkuXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbkJ1Y2tldCBUaGUgYnVja2V0IHdoZXJlIFMzIGludmVudG9yeSBkYXRhIHdpbGwgYmUgd3JpdHRlblxuICAgKiBAcGFyYW0gaW52ZW50b3J5SWQgVGhlIFMzIGludmVudG9yeSBJRFxuICAgKiBAcGFyYW0gb2JqZWN0c1ByZWZpeCBUaGUgb2JqZWN0IHByZWZpeCBmcm9tIHdoaWNoIGludmVudG9yeSB3aWxsIGJlIHByb2R1Y2VkIChvbiB0aGUgYnVja2V0IHRvIHdoaWNoIHRoZSBpbnZlbnRvcnkgY29uZmlnIGlzIGFwcGxpZWQpXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvblByZWZpeCBUaGUgb2JqZWN0IHByZWZpeCB1bmRlciB3aGljaCBpbnZlbnRvcnkgd2lsbCBiZSB3cml0dGVuIG9uIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuXG4gICAqIEByZXR1cm5zIEFuIFMzIEludmVudG9yeSBDb25maWcgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYSBidWNrZXQgaW4gb3JkZXIgdG8gcHJvZHVjZSBwZXJpb2RpYyBpbnZlbnRvcnkgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW52Q29uZmlnKFxuICAgIGRlc3RpbmF0aW9uQnVja2V0OiBJQnVja2V0LFxuICAgIGludmVudG9yeUlkOiBzdHJpbmcsXG4gICAgb2JqZWN0c1ByZWZpeD86IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvblByZWZpeD86IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbkFjY291bnQ/OiBzdHJpbmcsXG4gICk6IEludmVudG9yeSB7XG4gICAgY29uc3QgYnVja2V0T3duZXIgPSBkZXN0aW5hdGlvbkFjY291bnQgPyBgJHtkZXN0aW5hdGlvbkFjY291bnR9YCA6IGRlc3RpbmF0aW9uQWNjb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgYnVja2V0OiBkZXN0aW5hdGlvbkJ1Y2tldCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICAgICAgICogUmVxdWlyZWQgUzMgcHJlZml4IGZvciBpbnZlbnRvcnkgcmVwb3J0IGRlc3RpbmF0aW9uIG9yZ2FuaXphdGlvbiBlbmFibGluZyBzeXN0ZW1hdGljIGludmVudG9yeSBmaWxlIG9yZ2FuaXphdGlvbiBhbmQgbWFuYWdlbWVudC4gUHJvdmlkZXMgdGhlIFMzIGtleSBwcmVmaXggZm9yIGludmVudG9yeSByZXBvcnQgc3RvcmFnZSBlbmFibGluZyBvcmdhbml6ZWQgaW52ZW50b3J5IGRhdGEgbWFuYWdlbWVudCBhbmQgZWZmaWNpZW50IHJldHJpZXZhbCBvZiBpbnZlbnRvcnkgcmVwb3J0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIGNhc2VzOiBJbnZlbnRvcnkgb3JnYW5pemF0aW9uOyBSZXBvcnQgc3RvcmFnZTsgRGF0YSBtYW5hZ2VtZW50OyBTeXN0ZW1hdGljIGZpbGUgb3JnYW5pemF0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEFXUzogUzMgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZGVzdGluYXRpb24gcHJlZml4IGZvciBpbnZlbnRvcnkgcmVwb3J0IG9yZ2FuaXphdGlvbiBhbmQgc3RvcmFnZVxuICAgICAgICAgKlxuICAgICAgICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFMzIHByZWZpeCBzdHJpbmc7IHJlcXVpcmVkIGZvciBpbnZlbnRvcnkgcmVwb3J0IGRlc3RpbmF0aW9uIG9yZ2FuaXphdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcHJlZml4OiBNZGFhQnVja2V0LmZvcm1hdFMzUHJlZml4KGRlc3RpbmF0aW9uUHJlZml4KSxcbiAgICAgICAgYnVja2V0T3duZXI6IGJ1Y2tldE93bmVyLFxuICAgICAgfSxcbiAgICAgIGZvcm1hdDogSW52ZW50b3J5Rm9ybWF0LlBBUlFVRVQsXG4gICAgICBmcmVxdWVuY3k6IEludmVudG9yeUZyZXF1ZW5jeS5EQUlMWSxcbiAgICAgIGluY2x1ZGVPYmplY3RWZXJzaW9uczogSW52ZW50b3J5T2JqZWN0VmVyc2lvbi5BTEwsXG4gICAgICBpbnZlbnRvcnlJZDogaW52ZW50b3J5SWQsXG4gICAgICBvYmplY3RzUHJlZml4OiBNZGFhQnVja2V0LmZvcm1hdFMzUHJlZml4KG9iamVjdHNQcmVmaXgsIGZhbHNlLCB0cnVlKSxcbiAgICAgIG9wdGlvbmFsRmllbGRzOiBbXG4gICAgICAgICdTaXplJyxcbiAgICAgICAgJ0xhc3RNb2RpZmllZERhdGUnLFxuICAgICAgICAnU3RvcmFnZUNsYXNzJyxcbiAgICAgICAgJ0VUYWcnLFxuICAgICAgICAnSXNNdWx0aXBhcnRVcGxvYWRlZCcsXG4gICAgICAgICdSZXBsaWNhdGlvblN0YXR1cycsXG4gICAgICAgICdFbmNyeXB0aW9uU3RhdHVzJyxcbiAgICAgICAgJ09iamVjdExvY2tSZXRhaW5VbnRpbERhdGUnLFxuICAgICAgICAnT2JqZWN0TG9ja01vZGUnLFxuICAgICAgICAnT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1cycsXG4gICAgICAgICdJbnRlbGxpZ2VudFRpZXJpbmdBY2Nlc3NUaWVyJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIEdsdWUgdGFibGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcXVlcnkgaW52ZW50b3J5IGRhdGEgZ2VuZXJhdGVkIGJ5IGFuIFMzIEludmVudG9yeSBjb25maWdcbiAgICogQHBhcmFtIHNjb3BlIFN0YWNrIGluIHdoaWNoIHRoZSB0YWJsZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIHRhYmxlTmFtZVByZWZpeCBXaWxsIGJlIHVzZWQgdG8gcHJlZml4IHRoZSB0YWJsZSBuYW1lLlxuICAgKiBAcGFyYW0gbG9jYXRpb25CdWNrZXROYW1lIFRoZSBidWNrZXQgd2hlcmUgdGhlIGludmVudG9yeSBkYXRhIGlzIHN0b3JlZC5cbiAgICogQHBhcmFtIGludmVudG9yeUJ1Y2tldCBUaGUgYnVja2V0IGZvciB3aGljaCBpbnZlbnRvcnkgZGF0YSBoYXMgYmVlbiBnZW5lcmF0ZWRcbiAgICogQHBhcmFtIGRhdGFiYXNlIFRoZSBHbHVlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSB0YWJsZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIGludmVudG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIFMzIEludmVudG9yeSBjb25maWdcbiAgICogQHBhcmFtIGxvY2F0aW9uUHJlZml4IFRoZSBTMyBQcmVmaXggb24gdGhlIGxvY2F0aW9uIGJ1Y2tldCB3aGVyZSB0aGUgaW52ZW50b3J5IGlzIHN0b3JlZC5cbiAgICogQHJldHVybnMgQSBHbHVlIHRhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IFMzIGludmVudG9yeSBkYXRhIGluIGFuIFMzIGJ1Y2tldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlR2x1ZUludlRhYmxlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgY2F0YWxvZ0lkOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lUHJlZml4OiBzdHJpbmcsXG4gICAgZGF0YWJhc2U6IERhdGFiYXNlLFxuICAgIGxvY2F0aW9uQnVja2V0TmFtZTogc3RyaW5nLFxuICAgIGJ1Y2tldEludmVudG9yaWVzOiBCdWNrZXRJbnZlbnRvcnlbXSxcbiAgICBsb2NhdGlvblByZWZpeD86IHN0cmluZyxcbiAgKTogQ2ZuVGFibGUge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25QcmVmaXhcbiAgICAgID8gYHMzOi8vJHtsb2NhdGlvbkJ1Y2tldE5hbWV9LyR7TWRhYUJ1Y2tldC5mb3JtYXRTM1ByZWZpeChsb2NhdGlvblByZWZpeCl9L2BcbiAgICAgIDogYHMzOi8vJHtsb2NhdGlvbkJ1Y2tldE5hbWV9L2A7XG4gICAgY29uc3QgdGFibGVJbnB1dCA9IHtcbiAgICAgIG5hbWU6IGAke3RhYmxlTmFtZVByZWZpeH1faW52YC5yZXBsYWNlKC8tL2dpLCAnXycpLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBFWFRFUk5BTDogJ1RSVUUnLFxuICAgICAgICAncHJvamVjdGlvbi5lbmFibGVkJzogJ3RydWUnLFxuICAgICAgICAncHJvamVjdGlvbi5kdC50eXBlJzogJ2RhdGUnLFxuICAgICAgICAncHJvamVjdGlvbi5kdC5yYW5nZSc6ICcyMDIyLTAxLTAxLTAwLTAwLE5PVycsXG4gICAgICAgICdwcm9qZWN0aW9uLmR0LmZvcm1hdCc6ICd5eXl5LU1NLWRkLUhILW1tJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZHQuaW50ZXJ2YWwnOiAnMScsXG4gICAgICAgICdwcm9qZWN0aW9uLmR0LmludGVydmFsLnVuaXQnOiAnSE9VUlMnLFxuICAgICAgICAncHJvamVjdGlvbi5idWNrZXRfaW52ZW50b3J5LnR5cGUnOiAnZW51bScsXG4gICAgICAgICdwcm9qZWN0aW9uLmJ1Y2tldF9pbnZlbnRvcnkudmFsdWVzJzogYnVja2V0SW52ZW50b3JpZXNcbiAgICAgICAgICAubWFwKHggPT4gYCR7eC5idWNrZXROYW1lfS8ke3guaW52ZW50b3J5TmFtZX1gKVxuICAgICAgICAgIC5qb2luKCcsJyksXG4gICAgICAgICdzdG9yYWdlLmxvY2F0aW9uLnRlbXBsYXRlJzogbG9jYXRpb24gKyAnJHtidWNrZXRfaW52ZW50b3J5fS9oaXZlL2R0PSR7ZHR9JyxcbiAgICAgIH0sXG4gICAgICB0YWJsZVR5cGU6ICdFWFRFUk5BTF9UQUJMRScsXG4gICAgICBwYXJ0aXRpb25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYnVja2V0X2ludmVudG9yeScsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZHQnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0b3JhZ2VEZXNjcmlwdG9yOiB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICd2ZXJzaW9uX2lkJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2lzX2xhdGVzdCcsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaXNfZGVsZXRlX21hcmtlcicsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAgICAgICAgICB0eXBlOiAnYmlnaW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdsYXN0X21vZGlmaWVkX2RhdGUnLFxuICAgICAgICAgICAgdHlwZTogJ3RpbWVzdGFtcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnZV90YWcnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc3RvcmFnZV9jbGFzcycsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpc19tdWx0aXBhcnRfdXBsb2FkZWQnLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3JlcGxpY2F0aW9uX3N0YXR1cycsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdlbmNyeXB0aW9uX3N0YXR1cycsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpbnRlbGxpZ2VudF90aWVyaW5nX3RpZXInLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyAsXG4gICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBcIm9iamVjdF9sb2NrX3JldGFpbl91bnRpbF9kYXRlXCIsXG4gICAgICAgICAgLy8gICAgIHR5cGU6IFwidGltZXN0YW1wXCJcbiAgICAgICAgICAvLyB9LFxuICAgICAgICAgIC8vIHtcbiAgICAgICAgICAvLyAgICAgbmFtZTogXCJvYmplY3RfbG9ja19tb2RlXCIsXG4gICAgICAgICAgLy8gICAgIHR5cGU6IFwic3RyaW5nXCJcbiAgICAgICAgICAvLyB9LFxuICAgICAgICAgIC8vIHtcbiAgICAgICAgICAvLyAgICAgbmFtZTogXCJvYmplY3RfbG9ja19sZWdhbF9ob2xkX3N0YXR1c1wiLFxuICAgICAgICAgIC8vICAgICB0eXBlOiBcInN0cmluZ1wiXG4gICAgICAgICAgLy8gfVxuICAgICAgICBdLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIGlucHV0Rm9ybWF0OiAnb3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5pby5TeW1saW5rVGV4dElucHV0Rm9ybWF0JyxcbiAgICAgICAgb3V0cHV0Rm9ybWF0OiAnb3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5pby5IaXZlSWdub3JlS2V5VGV4dE91dHB1dEZvcm1hdCcsXG4gICAgICAgIGNvbXByZXNzZWQ6IGZhbHNlLFxuICAgICAgICBudW1iZXJPZkJ1Y2tldHM6IC0xLFxuICAgICAgICBzZXJkZUluZm86IHtcbiAgICAgICAgICBzZXJpYWxpemF0aW9uTGlicmFyeTogJ29yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaW8ucGFycXVldC5zZXJkZS5QYXJxdWV0SGl2ZVNlckRlJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAnc2VyaWFsaXphdGlvbi5mb3JtYXQnOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRhYmxlUHJvcHM6IENmblRhYmxlUHJvcHMgPSB7XG4gICAgICBjYXRhbG9nSWQ6IGNhdGFsb2dJZCxcbiAgICAgIGRhdGFiYXNlTmFtZTogZGF0YWJhc2UuZGF0YWJhc2VOYW1lLFxuICAgICAgdGFibGVJbnB1dDogdGFibGVJbnB1dCxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgQ2ZuVGFibGUoc2NvcGUsIGBpbnYtdGFibGUtJHt0YWJsZU5hbWVQcmVmaXh9YCwgdGFibGVQcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBnZW5lcmF0ZSBhbiBTMyBCdWNrZXQgUG9saWN5IFN0YXRlbWVudCBhbGxvd2luZyBTMyBzZXJ2aWNlIHRvIHdyaXRlIGludmVudG9yaWVzIHRvIGEgYnVja2V0LlxuICAgKiBAcGFyYW0gc291cmNlQnVja2V0QXJuIFRoZSBidWNrZXQgYXJuIGZvciB3aGljaCBpbnZlbnRvcnkgZGF0YSBpcyBiZWluZyBwcm9kdWNlZFxuICAgKiBAcGFyYW0gYnVja2V0QXJuICBUaGUgYnVja2V0IGFybiB3aGVyZSBpbnZlbnRvcnkgd2lsbCBiZSBzdG9yZWRcbiAgICogQHBhcmFtIHNyY0FjY291bnQgVGhlIGFjY291bnQgd2hpY2ggb3ducyB0aGUgc291cmNlIGJ1Y2tldCBmcm9tIHdoaWNoIGludmVudG9yeSBpcyBiZWluZyBwcm9kdWNlZC5cbiAgICogQHBhcmFtIGludmVudG9yeVByZWZpeCBUaGUgcHJlZml4IG9uIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQgd2hlcmUgaW52ZW50b3J5IGRhdGEgd2lsbCBiZSBzdG9yZWQuXG4gICAqIEByZXR1cm5zIEEgcG9saWN5IHN0YXRlbWVudCB3aGljaCBwZXJtaXRzIHRoZSBTMyBzZXJ2aWNlIHByaW5jaXBhbCB0byB3cml0ZSBpbnZlbnRvcnkgZm9yIHRoZSBzb3VyY2UgYnVja2V0L2FjY291bnQgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW52ZW50b3J5QnVja2V0UG9saWN5U3RhdGVtZW50KFxuICAgIGJ1Y2tldEFybjogc3RyaW5nLFxuICAgIHNyY0FjY291bnQ6IHN0cmluZyxcbiAgICBzb3VyY2VCdWNrZXRBcm4/OiBzdHJpbmcsXG4gICAgaW52ZW50b3J5UHJlZml4Pzogc3RyaW5nLFxuICApOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHJlc291cmNlID0gaW52ZW50b3J5UHJlZml4XG4gICAgICA/IGAke2J1Y2tldEFybn0vJHtNZGFhQnVja2V0LmZvcm1hdFMzUHJlZml4KGludmVudG9yeVByZWZpeCl9LypgXG4gICAgICA6IGAke2J1Y2tldEFybn0vKmA7XG4gICAgY29uc3QgYWxsb3dTM0ludmVudG9yeSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnQWxsb3dTM0ludmVudG9yeScsXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3Jlc291cmNlXSxcbiAgICAgIGFjdGlvbnM6IFsnczM6UHV0T2JqZWN0J10sXG4gICAgfSk7XG4gICAgYWxsb3dTM0ludmVudG9yeS5hZGRDb25kaXRpb24oJ1N0cmluZ0VxdWFscycsIHtcbiAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IHNyY0FjY291bnQsXG4gICAgICAnczM6eC1hbXotYWNsJzogJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnLFxuICAgIH0pO1xuICAgIGlmIChzb3VyY2VCdWNrZXRBcm4pIHtcbiAgICAgIGFsbG93UzNJbnZlbnRvcnkuYWRkQ29uZGl0aW9uKCdBcm5MaWtlJywge1xuICAgICAgICAnYXdzOlNvdXJjZUFybic6IHNvdXJjZUJ1Y2tldEFybixcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhbGxvd1MzSW52ZW50b3J5LmFkZFNlcnZpY2VQcmluY2lwYWwoJ3MzLmFtYXpvbmF3cy5jb20nKTtcbiAgICByZXR1cm4gYWxsb3dTM0ludmVudG9yeTtcbiAgfVxufVxuIl19
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCwyREFBcUQ7QUFFckQsbURBQStEO0FBQy9ELGlEQUE4RDtBQUM5RCwrQ0FBcUg7QUFVckgsb0hBQW9IO0FBQ3BILE1BQWEsZUFBZTtJQUMxQjs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FDM0IsaUJBQTBCLEVBQzFCLFdBQW1CLEVBQ25CLGFBQXNCLEVBQ3RCLGlCQUEwQixFQUMxQixrQkFBMkI7UUFFM0IsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDdEYsT0FBTztZQUNMLFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixpR0FBaUc7Z0JBQ2pHLE1BQU0sRUFBRSwwQkFBVSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEQsV0FBVyxFQUFFLFdBQVc7YUFDekI7WUFDRCxNQUFNLEVBQUUsd0JBQWUsQ0FBQyxPQUFPO1lBQy9CLFNBQVMsRUFBRSwyQkFBa0IsQ0FBQyxLQUFLO1lBQ25DLHFCQUFxQixFQUFFLCtCQUFzQixDQUFDLEdBQUc7WUFDakQsV0FBVyxFQUFFLFdBQVc7WUFDeEIsYUFBYSxFQUFFLDBCQUFVLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ3BFLGNBQWMsRUFBRTtnQkFDZCxNQUFNO2dCQUNOLGtCQUFrQjtnQkFDbEIsY0FBYztnQkFDZCxNQUFNO2dCQUNOLHFCQUFxQjtnQkFDckIsbUJBQW1CO2dCQUNuQixrQkFBa0I7Z0JBQ2xCLDJCQUEyQjtnQkFDM0IsZ0JBQWdCO2dCQUNoQiwyQkFBMkI7Z0JBQzNCLDhCQUE4QjthQUMvQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7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QUFDLENBQUM7UUFDSCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLGVBQWUsRUFBRSxlQUFlO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBNU5ELDBDQTROQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhYmFzZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhJztcbmltcG9ydCB7IENmblRhYmxlLCBDZm5UYWJsZVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQsIEludmVudG9yeSwgSW52ZW50b3J5Rm9ybWF0LCBJbnZlbnRvcnlGcmVxdWVuY3ksIEludmVudG9yeU9iamVjdFZlcnNpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0SW52ZW50b3J5IHtcbiAgLyoqIE5hbWUgb2YgdGhlIFMzIGJ1Y2tldCBmb3Igd2hpY2ggaW52ZW50b3J5IGRhdGEgaGFzIGJlZW4gZ2VuZXJhdGVkICovXG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIFMzIGludmVudG9yeSBjb25maWd1cmF0aW9uIHRoYXQgZ2VuZXJhdGVkIHRoZSBpbnZlbnRvcnkgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBidWNrZXQgKi9cbiAgcmVhZG9ubHkgaW52ZW50b3J5TmFtZTogc3RyaW5nO1xufVxuXG4vKiogSGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBTMyBJbnZlbnRvcmllcyBhbmQgYXNzb2NpYXRlZCBHbHVlL0F0aGVuYSByZXNvdXJjZXMgZm9yIHF1ZXJ5aW5nIHRoZXNlIGludmVudG9yaWVzLiAqL1xuZXhwb3J0IGNsYXNzIEludmVudG9yeUhlbHBlciB7XG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBTMyBpbnZlbnRvcnkuXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbkJ1Y2tldCBUaGUgYnVja2V0IHdoZXJlIFMzIGludmVudG9yeSBkYXRhIHdpbGwgYmUgd3JpdHRlblxuICAgKiBAcGFyYW0gaW52ZW50b3J5SWQgVGhlIFMzIGludmVudG9yeSBJRFxuICAgKiBAcGFyYW0gb2JqZWN0c1ByZWZpeCBUaGUgb2JqZWN0IHByZWZpeCBmcm9tIHdoaWNoIGludmVudG9yeSB3aWxsIGJlIHByb2R1Y2VkIChvbiB0aGUgYnVja2V0IHRvIHdoaWNoIHRoZSBpbnZlbnRvcnkgY29uZmlnIGlzIGFwcGxpZWQpXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvblByZWZpeCBUaGUgb2JqZWN0IHByZWZpeCB1bmRlciB3aGljaCBpbnZlbnRvcnkgd2lsbCBiZSB3cml0dGVuIG9uIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuXG4gICAqIEByZXR1cm5zIEFuIFMzIEludmVudG9yeSBDb25maWcgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYSBidWNrZXQgaW4gb3JkZXIgdG8gcHJvZHVjZSBwZXJpb2RpYyBpbnZlbnRvcnkgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW52Q29uZmlnKFxuICAgIGRlc3RpbmF0aW9uQnVja2V0OiBJQnVja2V0LFxuICAgIGludmVudG9yeUlkOiBzdHJpbmcsXG4gICAgb2JqZWN0c1ByZWZpeD86IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvblByZWZpeD86IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbkFjY291bnQ/OiBzdHJpbmcsXG4gICk6IEludmVudG9yeSB7XG4gICAgY29uc3QgYnVja2V0T3duZXIgPSBkZXN0aW5hdGlvbkFjY291bnQgPyBgJHtkZXN0aW5hdGlvbkFjY291bnR9YCA6IGRlc3RpbmF0aW9uQWNjb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgYnVja2V0OiBkZXN0aW5hdGlvbkJ1Y2tldCxcbiAgICAgICAgLyoqIFMzIHByZWZpeCBmb3IgaW52ZW50b3J5IHJlcG9ydCBkZXN0aW5hdGlvbiBvcmdhbml6YXRpb24gZW5hYmxpbmcgc3lzdGVtYXRpYyBpbnZlbnRvcnkgZmlsZSAqL1xuICAgICAgICBwcmVmaXg6IE1kYWFCdWNrZXQuZm9ybWF0UzNQcmVmaXgoZGVzdGluYXRpb25QcmVmaXgpLFxuICAgICAgICBidWNrZXRPd25lcjogYnVja2V0T3duZXIsXG4gICAgICB9LFxuICAgICAgZm9ybWF0OiBJbnZlbnRvcnlGb3JtYXQuUEFSUVVFVCxcbiAgICAgIGZyZXF1ZW5jeTogSW52ZW50b3J5RnJlcXVlbmN5LkRBSUxZLFxuICAgICAgaW5jbHVkZU9iamVjdFZlcnNpb25zOiBJbnZlbnRvcnlPYmplY3RWZXJzaW9uLkFMTCxcbiAgICAgIGludmVudG9yeUlkOiBpbnZlbnRvcnlJZCxcbiAgICAgIG9iamVjdHNQcmVmaXg6IE1kYWFCdWNrZXQuZm9ybWF0UzNQcmVmaXgob2JqZWN0c1ByZWZpeCwgZmFsc2UsIHRydWUpLFxuICAgICAgb3B0aW9uYWxGaWVsZHM6IFtcbiAgICAgICAgJ1NpemUnLFxuICAgICAgICAnTGFzdE1vZGlmaWVkRGF0ZScsXG4gICAgICAgICdTdG9yYWdlQ2xhc3MnLFxuICAgICAgICAnRVRhZycsXG4gICAgICAgICdJc011bHRpcGFydFVwbG9hZGVkJyxcbiAgICAgICAgJ1JlcGxpY2F0aW9uU3RhdHVzJyxcbiAgICAgICAgJ0VuY3J5cHRpb25TdGF0dXMnLFxuICAgICAgICAnT2JqZWN0TG9ja1JldGFpblVudGlsRGF0ZScsXG4gICAgICAgICdPYmplY3RMb2NrTW9kZScsXG4gICAgICAgICdPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzJyxcbiAgICAgICAgJ0ludGVsbGlnZW50VGllcmluZ0FjY2Vzc1RpZXInLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgR2x1ZSB0YWJsZSB3aGljaCBjYW4gYmUgdXNlZCB0byBxdWVyeSBpbnZlbnRvcnkgZGF0YSBnZW5lcmF0ZWQgYnkgYW4gUzMgSW52ZW50b3J5IGNvbmZpZ1xuICAgKiBAcGFyYW0gc2NvcGUgU3RhY2sgaW4gd2hpY2ggdGhlIHRhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKiBAcGFyYW0gdGFibGVOYW1lUHJlZml4IFdpbGwgYmUgdXNlZCB0byBwcmVmaXggdGhlIHRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSBsb2NhdGlvbkJ1Y2tldE5hbWUgVGhlIGJ1Y2tldCB3aGVyZSB0aGUgaW52ZW50b3J5IGRhdGEgaXMgc3RvcmVkLlxuICAgKiBAcGFyYW0gaW52ZW50b3J5QnVja2V0IFRoZSBidWNrZXQgZm9yIHdoaWNoIGludmVudG9yeSBkYXRhIGhhcyBiZWVuIGdlbmVyYXRlZFxuICAgKiBAcGFyYW0gZGF0YWJhc2UgVGhlIEdsdWUgZGF0YWJhc2UgaW4gd2hpY2ggdGhlIHRhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKiBAcGFyYW0gaW52ZW50b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgUzMgSW52ZW50b3J5IGNvbmZpZ1xuICAgKiBAcGFyYW0gbG9jYXRpb25QcmVmaXggVGhlIFMzIFByZWZpeCBvbiB0aGUgbG9jYXRpb24gYnVja2V0IHdoZXJlIHRoZSBpbnZlbnRvcnkgaXMgc3RvcmVkLlxuICAgKiBAcmV0dXJucyBBIEdsdWUgdGFibGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcXVlcnkgUzMgaW52ZW50b3J5IGRhdGEgaW4gYW4gUzMgYnVja2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVHbHVlSW52VGFibGUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBjYXRhbG9nSWQ6IHN0cmluZyxcbiAgICB0YWJsZU5hbWVQcmVmaXg6IHN0cmluZyxcbiAgICBkYXRhYmFzZTogRGF0YWJhc2UsXG4gICAgbG9jYXRpb25CdWNrZXROYW1lOiBzdHJpbmcsXG4gICAgYnVja2V0SW52ZW50b3JpZXM6IEJ1Y2tldEludmVudG9yeVtdLFxuICAgIGxvY2F0aW9uUHJlZml4Pzogc3RyaW5nLFxuICApOiBDZm5UYWJsZSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvblByZWZpeFxuICAgICAgPyBgczM6Ly8ke2xvY2F0aW9uQnVja2V0TmFtZX0vJHtNZGFhQnVja2V0LmZvcm1hdFMzUHJlZml4KGxvY2F0aW9uUHJlZml4KX0vYFxuICAgICAgOiBgczM6Ly8ke2xvY2F0aW9uQnVja2V0TmFtZX0vYDtcbiAgICBjb25zdCB0YWJsZUlucHV0ID0ge1xuICAgICAgbmFtZTogYCR7dGFibGVOYW1lUHJlZml4fV9pbnZgLnJlcGxhY2UoLy0vZ2ksICdfJyksXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEVYVEVSTkFMOiAnVFJVRScsXG4gICAgICAgICdwcm9qZWN0aW9uLmVuYWJsZWQnOiAndHJ1ZScsXG4gICAgICAgICdwcm9qZWN0aW9uLmR0LnR5cGUnOiAnZGF0ZScsXG4gICAgICAgICdwcm9qZWN0aW9uLmR0LnJhbmdlJzogJzIwMjItMDEtMDEtMDAtMDAsTk9XJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZHQuZm9ybWF0JzogJ3l5eXktTU0tZGQtSEgtbW0nLFxuICAgICAgICAncHJvamVjdGlvbi5kdC5pbnRlcnZhbCc6ICcxJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZHQuaW50ZXJ2YWwudW5pdCc6ICdIT1VSUycsXG4gICAgICAgICdwcm9qZWN0aW9uLmJ1Y2tldF9pbnZlbnRvcnkudHlwZSc6ICdlbnVtJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uYnVja2V0X2ludmVudG9yeS52YWx1ZXMnOiBidWNrZXRJbnZlbnRvcmllc1xuICAgICAgICAgIC5tYXAoeCA9PiBgJHt4LmJ1Y2tldE5hbWV9LyR7eC5pbnZlbnRvcnlOYW1lfWApXG4gICAgICAgICAgLmpvaW4oJywnKSxcbiAgICAgICAgJ3N0b3JhZ2UubG9jYXRpb24udGVtcGxhdGUnOiBsb2NhdGlvbiArICcke2J1Y2tldF9pbnZlbnRvcnl9L2hpdmUvZHQ9JHtkdH0nLFxuICAgICAgfSxcbiAgICAgIHRhYmxlVHlwZTogJ0VYVEVSTkFMX1RBQkxFJyxcbiAgICAgIHBhcnRpdGlvbktleXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdidWNrZXRfaW52ZW50b3J5JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3ZlcnNpb25faWQnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaXNfbGF0ZXN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpc19kZWxldGVfbWFya2VyJyxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzaXplJyxcbiAgICAgICAgICAgIHR5cGU6ICdiaWdpbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2xhc3RfbW9kaWZpZWRfZGF0ZScsXG4gICAgICAgICAgICB0eXBlOiAndGltZXN0YW1wJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdlX3RhZycsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzdG9yYWdlX2NsYXNzJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2lzX211bHRpcGFydF91cGxvYWRlZCcsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAncmVwbGljYXRpb25fc3RhdHVzJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2VuY3J5cHRpb25fc3RhdHVzJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2ludGVsbGlnZW50X3RpZXJpbmdfdGllcicsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vICxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICAgIG5hbWU6IFwib2JqZWN0X2xvY2tfcmV0YWluX3VudGlsX2RhdGVcIixcbiAgICAgICAgICAvLyAgICAgdHlwZTogXCJ0aW1lc3RhbXBcIlxuICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBcIm9iamVjdF9sb2NrX21vZGVcIixcbiAgICAgICAgICAvLyAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBcIm9iamVjdF9sb2NrX2xlZ2FsX2hvbGRfc3RhdHVzXCIsXG4gICAgICAgICAgLy8gICAgIHR5cGU6IFwic3RyaW5nXCJcbiAgICAgICAgICAvLyB9XG4gICAgICAgIF0sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgaW5wdXRGb3JtYXQ6ICdvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmlvLlN5bWxpbmtUZXh0SW5wdXRGb3JtYXQnLFxuICAgICAgICBvdXRwdXRGb3JtYXQ6ICdvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmlvLkhpdmVJZ25vcmVLZXlUZXh0T3V0cHV0Rm9ybWF0JyxcbiAgICAgICAgY29tcHJlc3NlZDogZmFsc2UsXG4gICAgICAgIG51bWJlck9mQnVja2V0czogLTEsXG4gICAgICAgIHNlcmRlSW5mbzoge1xuICAgICAgICAgIHNlcmlhbGl6YXRpb25MaWJyYXJ5OiAnb3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5pby5wYXJxdWV0LnNlcmRlLlBhcnF1ZXRIaXZlU2VyRGUnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICdzZXJpYWxpemF0aW9uLmZvcm1hdCc6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFibGVQcm9wczogQ2ZuVGFibGVQcm9wcyA9IHtcbiAgICAgIGNhdGFsb2dJZDogY2F0YWxvZ0lkLFxuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZS5kYXRhYmFzZU5hbWUsXG4gICAgICB0YWJsZUlucHV0OiB0YWJsZUlucHV0LFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBDZm5UYWJsZShzY29wZSwgYGludi10YWJsZS0ke3RhYmxlTmFtZVByZWZpeH1gLCB0YWJsZVByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdlbmVyYXRlIGFuIFMzIEJ1Y2tldCBQb2xpY3kgU3RhdGVtZW50IGFsbG93aW5nIFMzIHNlcnZpY2UgdG8gd3JpdGUgaW52ZW50b3JpZXMgdG8gYSBidWNrZXQuXG4gICAqIEBwYXJhbSBzb3VyY2VCdWNrZXRBcm4gVGhlIGJ1Y2tldCBhcm4gZm9yIHdoaWNoIGludmVudG9yeSBkYXRhIGlzIGJlaW5nIHByb2R1Y2VkXG4gICAqIEBwYXJhbSBidWNrZXRBcm4gIFRoZSBidWNrZXQgYXJuIHdoZXJlIGludmVudG9yeSB3aWxsIGJlIHN0b3JlZFxuICAgKiBAcGFyYW0gc3JjQWNjb3VudCBUaGUgYWNjb3VudCB3aGljaCBvd25zIHRoZSBzb3VyY2UgYnVja2V0IGZyb20gd2hpY2ggaW52ZW50b3J5IGlzIGJlaW5nIHByb2R1Y2VkLlxuICAgKiBAcGFyYW0gaW52ZW50b3J5UHJlZml4IFRoZSBwcmVmaXggb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldCB3aGVyZSBpbnZlbnRvcnkgZGF0YSB3aWxsIGJlIHN0b3JlZC5cbiAgICogQHJldHVybnMgQSBwb2xpY3kgc3RhdGVtZW50IHdoaWNoIHBlcm1pdHMgdGhlIFMzIHNlcnZpY2UgcHJpbmNpcGFsIHRvIHdyaXRlIGludmVudG9yeSBmb3IgdGhlIHNvdXJjZSBidWNrZXQvYWNjb3VudCB0byB0aGUgZGVzdGluYXRpb24gYnVja2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVJbnZlbnRvcnlCdWNrZXRQb2xpY3lTdGF0ZW1lbnQoXG4gICAgYnVja2V0QXJuOiBzdHJpbmcsXG4gICAgc3JjQWNjb3VudDogc3RyaW5nLFxuICAgIHNvdXJjZUJ1Y2tldEFybj86IHN0cmluZyxcbiAgICBpbnZlbnRvcnlQcmVmaXg/OiBzdHJpbmcsXG4gICk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBpbnZlbnRvcnlQcmVmaXhcbiAgICAgID8gYCR7YnVja2V0QXJufS8ke01kYWFCdWNrZXQuZm9ybWF0UzNQcmVmaXgoaW52ZW50b3J5UHJlZml4KX0vKmBcbiAgICAgIDogYCR7YnVja2V0QXJufS8qYDtcbiAgICBjb25zdCBhbGxvd1MzSW52ZW50b3J5ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdBbGxvd1MzSW52ZW50b3J5JyxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgcmVzb3VyY2VzOiBbcmVzb3VyY2VdLFxuICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICB9KTtcbiAgICBhbGxvd1MzSW52ZW50b3J5LmFkZENvbmRpdGlvbignU3RyaW5nRXF1YWxzJywge1xuICAgICAgJ2F3czpTb3VyY2VBY2NvdW50Jzogc3JjQWNjb3VudCxcbiAgICAgICdzMzp4LWFtei1hY2wnOiAnYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCcsXG4gICAgfSk7XG4gICAgaWYgKHNvdXJjZUJ1Y2tldEFybikge1xuICAgICAgYWxsb3dTM0ludmVudG9yeS5hZGRDb25kaXRpb24oJ0Fybkxpa2UnLCB7XG4gICAgICAgICdhd3M6U291cmNlQXJuJzogc291cmNlQnVja2V0QXJuLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGFsbG93UzNJbnZlbnRvcnkuYWRkU2VydmljZVByaW5jaXBhbCgnczMuYW1hem9uYXdzLmNvbScpO1xuICAgIHJldHVybiBhbGxvd1MzSW52ZW50b3J5O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { MdaaBucket } from '@aws-mdaa/s3-constructs';
|
|
7
|
+
import { Database } from '@aws-cdk/aws-glue-alpha';
|
|
8
|
+
import { CfnTable, CfnTableProps } from 'aws-cdk-lib/aws-glue';
|
|
9
|
+
import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
10
|
+
import { IBucket, Inventory, InventoryFormat, InventoryFrequency, InventoryObjectVersion } from 'aws-cdk-lib/aws-s3';
|
|
11
|
+
import { Construct } from 'constructs';
|
|
12
|
+
|
|
13
|
+
export interface BucketInventory {
|
|
14
|
+
/** Name of the S3 bucket for which inventory data has been generated */
|
|
15
|
+
readonly bucketName: string;
|
|
16
|
+
/** Name of the S3 inventory configuration that generated the inventory data for the specified bucket */
|
|
17
|
+
readonly inventoryName: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Helper class for creating S3 Inventories and associated Glue/Athena resources for querying these inventories. */
|
|
21
|
+
export class InventoryHelper {
|
|
22
|
+
/**
|
|
23
|
+
* Helper method for creating an S3 inventory.
|
|
24
|
+
* @param destinationBucket The bucket where S3 inventory data will be written
|
|
25
|
+
* @param inventoryId The S3 inventory ID
|
|
26
|
+
* @param objectsPrefix The object prefix from which inventory will be produced (on the bucket to which the inventory config is applied)
|
|
27
|
+
* @param destinationPrefix The object prefix under which inventory will be written on the destination bucket.
|
|
28
|
+
* @returns An S3 Inventory Config which can be applied to a bucket in order to produce periodic inventory data.
|
|
29
|
+
*/
|
|
30
|
+
public static createInvConfig(
|
|
31
|
+
destinationBucket: IBucket,
|
|
32
|
+
inventoryId: string,
|
|
33
|
+
objectsPrefix?: string,
|
|
34
|
+
destinationPrefix?: string,
|
|
35
|
+
destinationAccount?: string,
|
|
36
|
+
): Inventory {
|
|
37
|
+
const bucketOwner = destinationAccount ? `${destinationAccount}` : destinationAccount;
|
|
38
|
+
return {
|
|
39
|
+
destination: {
|
|
40
|
+
bucket: destinationBucket,
|
|
41
|
+
/** S3 prefix for inventory report destination organization enabling systematic inventory file */
|
|
42
|
+
prefix: MdaaBucket.formatS3Prefix(destinationPrefix),
|
|
43
|
+
bucketOwner: bucketOwner,
|
|
44
|
+
},
|
|
45
|
+
format: InventoryFormat.PARQUET,
|
|
46
|
+
frequency: InventoryFrequency.DAILY,
|
|
47
|
+
includeObjectVersions: InventoryObjectVersion.ALL,
|
|
48
|
+
inventoryId: inventoryId,
|
|
49
|
+
objectsPrefix: MdaaBucket.formatS3Prefix(objectsPrefix, false, true),
|
|
50
|
+
optionalFields: [
|
|
51
|
+
'Size',
|
|
52
|
+
'LastModifiedDate',
|
|
53
|
+
'StorageClass',
|
|
54
|
+
'ETag',
|
|
55
|
+
'IsMultipartUploaded',
|
|
56
|
+
'ReplicationStatus',
|
|
57
|
+
'EncryptionStatus',
|
|
58
|
+
'ObjectLockRetainUntilDate',
|
|
59
|
+
'ObjectLockMode',
|
|
60
|
+
'ObjectLockLegalHoldStatus',
|
|
61
|
+
'IntelligentTieringAccessTier',
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Helper method for creating a Glue table which can be used to query inventory data generated by an S3 Inventory config
|
|
68
|
+
* @param scope Stack in which the table will be created
|
|
69
|
+
* @param tableNamePrefix Will be used to prefix the table name.
|
|
70
|
+
* @param locationBucketName The bucket where the inventory data is stored.
|
|
71
|
+
* @param inventoryBucket The bucket for which inventory data has been generated
|
|
72
|
+
* @param database The Glue database in which the table will be created
|
|
73
|
+
* @param inventoryName The name of the S3 Inventory config
|
|
74
|
+
* @param locationPrefix The S3 Prefix on the location bucket where the inventory is stored.
|
|
75
|
+
* @returns A Glue table which can be used to query S3 inventory data in an S3 bucket.
|
|
76
|
+
*/
|
|
77
|
+
public static createGlueInvTable(
|
|
78
|
+
scope: Construct,
|
|
79
|
+
catalogId: string,
|
|
80
|
+
tableNamePrefix: string,
|
|
81
|
+
database: Database,
|
|
82
|
+
locationBucketName: string,
|
|
83
|
+
bucketInventories: BucketInventory[],
|
|
84
|
+
locationPrefix?: string,
|
|
85
|
+
): CfnTable {
|
|
86
|
+
const location = locationPrefix
|
|
87
|
+
? `s3://${locationBucketName}/${MdaaBucket.formatS3Prefix(locationPrefix)}/`
|
|
88
|
+
: `s3://${locationBucketName}/`;
|
|
89
|
+
const tableInput = {
|
|
90
|
+
name: `${tableNamePrefix}_inv`.replace(/-/gi, '_'),
|
|
91
|
+
parameters: {
|
|
92
|
+
EXTERNAL: 'TRUE',
|
|
93
|
+
'projection.enabled': 'true',
|
|
94
|
+
'projection.dt.type': 'date',
|
|
95
|
+
'projection.dt.range': '2022-01-01-00-00,NOW',
|
|
96
|
+
'projection.dt.format': 'yyyy-MM-dd-HH-mm',
|
|
97
|
+
'projection.dt.interval': '1',
|
|
98
|
+
'projection.dt.interval.unit': 'HOURS',
|
|
99
|
+
'projection.bucket_inventory.type': 'enum',
|
|
100
|
+
'projection.bucket_inventory.values': bucketInventories
|
|
101
|
+
.map(x => `${x.bucketName}/${x.inventoryName}`)
|
|
102
|
+
.join(','),
|
|
103
|
+
'storage.location.template': location + '${bucket_inventory}/hive/dt=${dt}',
|
|
104
|
+
},
|
|
105
|
+
tableType: 'EXTERNAL_TABLE',
|
|
106
|
+
partitionKeys: [
|
|
107
|
+
{
|
|
108
|
+
name: 'bucket_inventory',
|
|
109
|
+
type: 'string',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'dt',
|
|
113
|
+
type: 'string',
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
storageDescriptor: {
|
|
117
|
+
columns: [
|
|
118
|
+
{
|
|
119
|
+
name: 'bucket',
|
|
120
|
+
type: 'string',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'key',
|
|
124
|
+
type: 'string',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'version_id',
|
|
128
|
+
type: 'string',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'is_latest',
|
|
132
|
+
type: 'boolean',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'is_delete_marker',
|
|
136
|
+
type: 'boolean',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'size',
|
|
140
|
+
type: 'bigint',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'last_modified_date',
|
|
144
|
+
type: 'timestamp',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'e_tag',
|
|
148
|
+
type: 'string',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'storage_class',
|
|
152
|
+
type: 'string',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'is_multipart_uploaded',
|
|
156
|
+
type: 'boolean',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'replication_status',
|
|
160
|
+
type: 'string',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'encryption_status',
|
|
164
|
+
type: 'string',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'intelligent_tiering_tier',
|
|
168
|
+
type: 'string',
|
|
169
|
+
},
|
|
170
|
+
// ,
|
|
171
|
+
// {
|
|
172
|
+
// name: "object_lock_retain_until_date",
|
|
173
|
+
// type: "timestamp"
|
|
174
|
+
// },
|
|
175
|
+
// {
|
|
176
|
+
// name: "object_lock_mode",
|
|
177
|
+
// type: "string"
|
|
178
|
+
// },
|
|
179
|
+
// {
|
|
180
|
+
// name: "object_lock_legal_hold_status",
|
|
181
|
+
// type: "string"
|
|
182
|
+
// }
|
|
183
|
+
],
|
|
184
|
+
location: location,
|
|
185
|
+
inputFormat: 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat',
|
|
186
|
+
outputFormat: 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat',
|
|
187
|
+
compressed: false,
|
|
188
|
+
numberOfBuckets: -1,
|
|
189
|
+
serdeInfo: {
|
|
190
|
+
serializationLibrary: 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe',
|
|
191
|
+
parameters: {
|
|
192
|
+
'serialization.format': '1',
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
const tableProps: CfnTableProps = {
|
|
199
|
+
catalogId: catalogId,
|
|
200
|
+
databaseName: database.databaseName,
|
|
201
|
+
tableInput: tableInput,
|
|
202
|
+
};
|
|
203
|
+
return new CfnTable(scope, `inv-table-${tableNamePrefix}`, tableProps);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Helper method to generate an S3 Bucket Policy Statement allowing S3 service to write inventories to a bucket.
|
|
208
|
+
* @param sourceBucketArn The bucket arn for which inventory data is being produced
|
|
209
|
+
* @param bucketArn The bucket arn where inventory will be stored
|
|
210
|
+
* @param srcAccount The account which owns the source bucket from which inventory is being produced.
|
|
211
|
+
* @param inventoryPrefix The prefix on the destination bucket where inventory data will be stored.
|
|
212
|
+
* @returns A policy statement which permits the S3 service principal to write inventory for the source bucket/account to the destination bucket.
|
|
213
|
+
*/
|
|
214
|
+
public static createInventoryBucketPolicyStatement(
|
|
215
|
+
bucketArn: string,
|
|
216
|
+
srcAccount: string,
|
|
217
|
+
sourceBucketArn?: string,
|
|
218
|
+
inventoryPrefix?: string,
|
|
219
|
+
): PolicyStatement {
|
|
220
|
+
const resource = inventoryPrefix
|
|
221
|
+
? `${bucketArn}/${MdaaBucket.formatS3Prefix(inventoryPrefix)}/*`
|
|
222
|
+
: `${bucketArn}/*`;
|
|
223
|
+
const allowS3Inventory = new PolicyStatement({
|
|
224
|
+
sid: 'AllowS3Inventory',
|
|
225
|
+
effect: Effect.ALLOW,
|
|
226
|
+
resources: [resource],
|
|
227
|
+
actions: ['s3:PutObject'],
|
|
228
|
+
});
|
|
229
|
+
allowS3Inventory.addCondition('StringEquals', {
|
|
230
|
+
'aws:SourceAccount': srcAccount,
|
|
231
|
+
's3:x-amz-acl': 'bucket-owner-full-control',
|
|
232
|
+
});
|
|
233
|
+
if (sourceBucketArn) {
|
|
234
|
+
allowS3Inventory.addCondition('ArnLike', {
|
|
235
|
+
'aws:SourceArn': sourceBucketArn,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
allowS3Inventory.addServicePrincipal('s3.amazonaws.com');
|
|
239
|
+
return allowS3Inventory;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -5,35 +5,33 @@
|
|
|
5
5
|
"name": "Amazon Web Services",
|
|
6
6
|
"url": "https://aws.amazon.com/solutions"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.5.0",
|
|
9
9
|
"main": "lib/index.js",
|
|
10
10
|
"types": "lib/index.d.ts",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"watch": "tsc -w",
|
|
15
|
-
"test": "jest --passWithNoTests --
|
|
16
|
-
"lint": "eslint --max-warnings 0 -c
|
|
17
|
-
"test
|
|
15
|
+
"test": "jest --passWithNoTests --testPathIgnorePatterns='.*\\.snapshot\\.test\\.ts'",
|
|
16
|
+
"lint": "eslint --max-warnings 0 -c ../../../eslint.config.mjs",
|
|
17
|
+
"test:coverage": "jest --passWithNoTests --coverage --testPathIgnorePatterns='.*\\.snapshot\\.test\\.ts'",
|
|
18
|
+
"test:snapshots": "jest --passWithNoTests --testPathPattern='.*\\.snapshot\\.test\\.ts'",
|
|
19
|
+
"test:snapshots:update": "jest --passWithNoTests --testPathPattern='.*\\.snapshot\\.test\\.ts' --updateSnapshot"
|
|
18
20
|
},
|
|
19
21
|
"devDependencies": {
|
|
20
|
-
"@types/jest": "29.5.
|
|
21
|
-
"@types/node": "
|
|
22
|
+
"@types/jest": "29.5.14",
|
|
23
|
+
"@types/node": "22.9.0",
|
|
22
24
|
"@types/prettier": "2.6.0",
|
|
23
|
-
"jest": "29.
|
|
24
|
-
"ts-jest": "29.
|
|
25
|
-
"ts-node": "10.9.
|
|
26
|
-
"typescript": "
|
|
27
|
-
"typescript-json-schema": "0.
|
|
28
|
-
},
|
|
29
|
-
"overrides": {
|
|
30
|
-
"aws-cdk-lib": "2.220.0",
|
|
31
|
-
"@types/babel__traverse": "7.18.2"
|
|
25
|
+
"jest": "29.7.0",
|
|
26
|
+
"ts-jest": "29.4.6",
|
|
27
|
+
"ts-node": "10.9.2",
|
|
28
|
+
"typescript": "5.9.3",
|
|
29
|
+
"typescript-json-schema": "0.67.1"
|
|
32
30
|
},
|
|
33
31
|
"dependencies": {
|
|
34
32
|
"@aws-cdk/aws-glue-alpha": "2.220.0-alpha.0",
|
|
35
|
-
"@aws-mdaa/naming": "1.
|
|
36
|
-
"@aws-mdaa/s3-constructs": "1.
|
|
33
|
+
"@aws-mdaa/naming": "1.5.0",
|
|
34
|
+
"@aws-mdaa/s3-constructs": "1.5.0",
|
|
37
35
|
"aws-cdk-lib": "2.220.0",
|
|
38
36
|
"cdk-nag": "2.37.55",
|
|
39
37
|
"constructs": "10.0.96"
|
|
File without changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"declarationMap": false,
|
|
4
|
+
"inlineSourceMap": true,
|
|
5
|
+
"inlineSources": true,
|
|
6
|
+
"alwaysStrict": true,
|
|
7
|
+
"removeComments": false,
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"experimentalDecorators": true,
|
|
10
|
+
"incremental": true,
|
|
11
|
+
"lib": [
|
|
12
|
+
"es2020"
|
|
13
|
+
],
|
|
14
|
+
"module": "CommonJS",
|
|
15
|
+
"newLine": "lf",
|
|
16
|
+
"noEmitOnError": true,
|
|
17
|
+
"noFallthroughCasesInSwitch": true,
|
|
18
|
+
"noImplicitAny": true,
|
|
19
|
+
"noImplicitReturns": true,
|
|
20
|
+
"noImplicitThis": true,
|
|
21
|
+
"noUnusedLocals": true,
|
|
22
|
+
"noUnusedParameters": true,
|
|
23
|
+
"resolveJsonModule": true,
|
|
24
|
+
"skipLibCheck": true,
|
|
25
|
+
"strict": true,
|
|
26
|
+
"strictNullChecks": true,
|
|
27
|
+
"strictPropertyInitialization": true,
|
|
28
|
+
"stripInternal": false,
|
|
29
|
+
"target": "ES2020",
|
|
30
|
+
"composite": true,
|
|
31
|
+
"tsBuildInfoFile": "tsconfig.tsbuildinfo"
|
|
32
|
+
},
|
|
33
|
+
"include": [
|
|
34
|
+
"**/*.ts"
|
|
35
|
+
],
|
|
36
|
+
"exclude": [
|
|
37
|
+
"node_modules"
|
|
38
|
+
],
|
|
39
|
+
"_generated_by_jsii_": "Generated by jsii - safe to delete, and ideally should be in .gitignore"
|
|
40
|
+
}
|