@aws-mdaa/dataops-job-l3-construct 1.5.0 → 1.6.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 +38 -28
- package/README.md +5 -0
- package/lib/dataops-job-l3-construct.d.ts +8 -1
- package/lib/dataops-job-l3-construct.js +40 -13
- package/node_modules/@aws-mdaa/config/README.md +3 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.d.ts +20 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.js +70 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.ts +88 -0
- package/node_modules/@aws-mdaa/config/lib/config.d.ts +87 -0
- package/node_modules/@aws-mdaa/config/lib/config.js +7 -0
- package/node_modules/@aws-mdaa/config/lib/config.ts +92 -0
- package/node_modules/@aws-mdaa/config/lib/index.d.ts +11 -0
- package/node_modules/@aws-mdaa/config/lib/index.js +28 -0
- package/node_modules/@aws-mdaa/config/lib/index.ts +12 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.d.ts +49 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.js +160 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.ts +159 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.d.ts +10 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.js +30 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.ts +27 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.d.ts +44 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.js +243 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.ts +302 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.d.ts +8 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.js +22 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.ts +21 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.d.ts +35 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.js +66 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.ts +74 -0
- package/node_modules/@aws-mdaa/config/package.json +42 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.js +224 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.ts +259 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.js +129 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.ts +163 -0
- package/node_modules/@aws-mdaa/config/test/config.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config.test.js +409 -0
- package/node_modules/@aws-mdaa/config/test/config.test.ts +517 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.js +216 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.ts +234 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.js +59 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.ts +68 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.js +254 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.ts +304 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.js +66 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.ts +79 -0
- package/node_modules/@aws-mdaa/config/tsconfig.tsbuildinfo +1 -0
- package/node_modules/lodash/README.md +2 -2
- package/node_modules/lodash/_baseOrderBy.js +1 -1
- package/node_modules/lodash/_baseUnset.js +7 -20
- package/node_modules/lodash/_setCacheHas.js +1 -1
- package/node_modules/lodash/compact.js +1 -1
- package/node_modules/lodash/core.js +3 -3
- package/node_modules/lodash/core.min.js +26 -25
- package/node_modules/lodash/fromPairs.js +3 -1
- package/node_modules/lodash/lodash.js +38 -27
- package/node_modules/lodash/lodash.min.js +125 -129
- package/node_modules/lodash/package.json +4 -2
- package/node_modules/lodash/random.js +9 -0
- package/node_modules/lodash/template.js +16 -4
- package/node_modules/lodash/templateSettings.js +4 -0
- package/package.json +27 -32
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/README.md +0 -185
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.d.ts +0 -57
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.js +0 -198
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.ts +0 -241
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/package.json +0 -44
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.js +0 -200
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.ts +0 -215
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.tsbuildinfo +0 -1
- package/node_modules/@aws-mdaa/s3-inventory-helper/.npmignore +0 -34
- package/node_modules/@aws-mdaa/s3-inventory-helper/README.md +0 -3
- package/node_modules/@aws-mdaa/s3-inventory-helper/jest.config.js +0 -5
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +0 -48
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +0 -213
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.ts +0 -241
- package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +0 -44
- package/node_modules/@aws-mdaa/s3-inventory-helper/test/TODO +0 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.json +0 -40
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.tsbuildinfo +0 -1
- package/node_modules/@aws-mdaa/s3-inventory-helper/typedoc.json +0 -7
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/.npmignore +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/jest.config.js +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper/test/bucketpolicy-helper.test.d.ts → config/test/blueprint-value-transformer.test.d.ts} +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/tsconfig.json +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/typedoc.json +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { CfnParameter } from 'aws-cdk-lib';
|
|
7
|
+
import { Construct } from 'constructs';
|
|
8
|
+
// nosemgrep
|
|
9
|
+
import { IMdaaResourceNaming } from '@aws-mdaa/naming';
|
|
10
|
+
import * as XRegExp from 'xregexp';
|
|
11
|
+
import { IMdaaConfigValueTransformer, TransformResult } from './transformer';
|
|
12
|
+
|
|
13
|
+
export interface MdaaConfigBlueprintRefValueTransformerProps {
|
|
14
|
+
readonly naming: IMdaaResourceNaming;
|
|
15
|
+
readonly scope: Construct;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class MdaaConfigBlueprintRefValueTransformer implements IMdaaConfigValueTransformer {
|
|
19
|
+
protected props: MdaaConfigBlueprintRefValueTransformerProps;
|
|
20
|
+
|
|
21
|
+
constructor(props: MdaaConfigBlueprintRefValueTransformerProps) {
|
|
22
|
+
this.props = props;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public transformValue(value: string): TransformResult {
|
|
26
|
+
const refMatch = XRegExp.matchRecursive(value, '{{', '}}', 'g', {
|
|
27
|
+
unbalanced: 'skip',
|
|
28
|
+
});
|
|
29
|
+
if (refMatch.length > 0) {
|
|
30
|
+
return this.parseBlueprintRef(value, refMatch) as TransformResult;
|
|
31
|
+
} else {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected parseBlueprintRef(value: string, refMatch: string[]): string | number | object {
|
|
37
|
+
// Substitute all references in the string
|
|
38
|
+
return this.substituteBlueprintReferences(value, refMatch);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private substituteBlueprintReferences(value: string, refMatch: string[]): string {
|
|
42
|
+
return refMatch.reduce((result, ref) => {
|
|
43
|
+
const refInner = this.transformValue(ref).toString();
|
|
44
|
+
const resolvedValue = this.resolveBlueprintReference(refInner);
|
|
45
|
+
|
|
46
|
+
if (resolvedValue === undefined) {
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const stringValue = this.convertToString(resolvedValue);
|
|
51
|
+
return result.replace(`{{${ref}}}`, stringValue);
|
|
52
|
+
}, value);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private convertToString(value: unknown): string {
|
|
56
|
+
if (typeof value === 'string') {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
60
|
+
return String(value);
|
|
61
|
+
}
|
|
62
|
+
// For objects, use JSON.stringify as a safe fallback
|
|
63
|
+
return JSON.stringify(value);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private resolveBlueprintReference(refInner: string) {
|
|
67
|
+
if (refInner.startsWith('blueprint:')) {
|
|
68
|
+
if (!this.props.scope) {
|
|
69
|
+
throw new Error('Unable to resolve blueprint params outside of a Construct');
|
|
70
|
+
}
|
|
71
|
+
if (!this.props.naming) {
|
|
72
|
+
throw new Error('Unable to resolve blueprint params without a naming implementation');
|
|
73
|
+
}
|
|
74
|
+
const blueprintPath = refInner.replace(/^blueprint:/, '');
|
|
75
|
+
const ssmOrgPath = this.props.naming?.ssmOrgPath('', false);
|
|
76
|
+
const existingDzProjectParam = this.props.scope?.node.tryFindChild(
|
|
77
|
+
'datazoneEnvironmentProjectId',
|
|
78
|
+
) as CfnParameter;
|
|
79
|
+
const dzProjectParam =
|
|
80
|
+
existingDzProjectParam ?? new CfnParameter(this.props.scope, 'datazoneEnvironmentProjectId');
|
|
81
|
+
const ssmPath = `{{resolve:ssm:${ssmOrgPath}${dzProjectParam.valueAsString}${blueprintPath}}}`;
|
|
82
|
+
console.log(`Resolving blueprint path: ${ssmPath}`);
|
|
83
|
+
return ssmPath;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { CfnParameterProps } from 'aws-cdk-lib';
|
|
6
|
+
export type ConfigurationElement = {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
export type TagElement = {
|
|
10
|
+
[key: string]: string;
|
|
11
|
+
};
|
|
12
|
+
export type Workspace = {
|
|
13
|
+
name: string;
|
|
14
|
+
location: string;
|
|
15
|
+
};
|
|
16
|
+
export interface MdaaCustomAspect {
|
|
17
|
+
/** Module path or package name containing the custom CDK aspect implementation */
|
|
18
|
+
readonly aspect_module: string;
|
|
19
|
+
/** Class name of the custom CDK aspect implementation within the specified module */
|
|
20
|
+
readonly aspect_class: string;
|
|
21
|
+
/** Configuration properties passed to the custom aspect constructor for aspect-specific behavior customization */
|
|
22
|
+
readonly aspect_props?: ConfigurationElement;
|
|
23
|
+
}
|
|
24
|
+
export interface MdaaCustomNaming {
|
|
25
|
+
/** Module path or package name containing the custom MDAA naming implementation */
|
|
26
|
+
readonly naming_module: string;
|
|
27
|
+
/** Class name of the custom MDAA naming implementation within the specified module */
|
|
28
|
+
readonly naming_class: string;
|
|
29
|
+
/** Configuration properties passed to the custom naming implementation constructor for naming */
|
|
30
|
+
readonly naming_props?: ConfigurationElement;
|
|
31
|
+
}
|
|
32
|
+
export interface MdaaNagSuppressionConfigs {
|
|
33
|
+
/** Array of CDK Nag suppressions organized by CloudFormation resource path, enabling targeted */
|
|
34
|
+
readonly by_path: MdaaNagSuppressionByPath[];
|
|
35
|
+
}
|
|
36
|
+
export interface MdaaNagSuppressionByPath {
|
|
37
|
+
/** CloudFormation resource path identifying the specific resource for which CDK Nag rules should be suppressed */
|
|
38
|
+
readonly path: string;
|
|
39
|
+
/** Array of specific CDK Nag rule suppressions with rule IDs and mandatory justifications for audit compliance */
|
|
40
|
+
readonly suppressions: {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly reason: string;
|
|
43
|
+
}[];
|
|
44
|
+
}
|
|
45
|
+
export interface MdaaServiceCatalogConstraintRuleAssertionConfig {
|
|
46
|
+
/** Constraint assertion expression that defines the validation logic for Service Catalog product parameters */
|
|
47
|
+
readonly assert: string;
|
|
48
|
+
/** Human-readable description explaining the purpose and requirements of the constraint assertion */
|
|
49
|
+
readonly description: string;
|
|
50
|
+
}
|
|
51
|
+
export interface MdaaServiceCatalogConstraintRuleCondititionConfig {
|
|
52
|
+
}
|
|
53
|
+
export interface MdaaServiceCatalogConstraintRuleConfig {
|
|
54
|
+
/** Condition configuration that determines when the constraint rule assertions should be evaluated */
|
|
55
|
+
readonly condition: MdaaServiceCatalogConstraintRuleCondititionConfig;
|
|
56
|
+
/** Array of constraint assertions that define the validation logic to be applied when the condition is met */
|
|
57
|
+
readonly assertions: MdaaServiceCatalogConstraintRuleAssertionConfig[];
|
|
58
|
+
}
|
|
59
|
+
export interface MdaaServiceCatalogConstraintConfig {
|
|
60
|
+
/** Human-readable description explaining the purpose and scope of the Service Catalog constraint */
|
|
61
|
+
readonly description: string;
|
|
62
|
+
/** Object containing named constraint rules that define the validation logic for Service Catalog product parameters */
|
|
63
|
+
readonly rules: {
|
|
64
|
+
[key: string]: MdaaServiceCatalogConstraintRuleConfig;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface MdaaServiceCatalogParameterConfig {
|
|
68
|
+
/** CloudFormation parameter properties that define the parameter characteristics including type, */
|
|
69
|
+
readonly props: CfnParameterProps;
|
|
70
|
+
/** Constraint configuration that defines additional validation rules for the Service Catalog product parameter */
|
|
71
|
+
readonly constraints?: MdaaServiceCatalogConstraintConfig;
|
|
72
|
+
}
|
|
73
|
+
export interface MdaaServiceCatalogProductConfig {
|
|
74
|
+
/** ARN of the AWS Service Catalog portfolio where the product will be associated */
|
|
75
|
+
readonly portfolio_arn: string;
|
|
76
|
+
/** Owner identifier for the Service Catalog product, typically representing the team or organization */
|
|
77
|
+
readonly owner: string;
|
|
78
|
+
/** Display name for the Service Catalog product that will be visible to end users in the Service Catalog console */
|
|
79
|
+
readonly name: string;
|
|
80
|
+
/** IAM role name that will be used to launch the Service Catalog product */
|
|
81
|
+
readonly launch_role_name?: string;
|
|
82
|
+
/** Object containing named parameter configurations for the Service Catalog product */
|
|
83
|
+
readonly parameters?: {
|
|
84
|
+
[key: string]: MdaaServiceCatalogParameterConfig;
|
|
85
|
+
};
|
|
86
|
+
readonly portfolio_bucket_name: string;
|
|
87
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBDZm5QYXJhbWV0ZXJQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuZXhwb3J0IHR5cGUgQ29uZmlndXJhdGlvbkVsZW1lbnQgPSB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbmV4cG9ydCB0eXBlIFRhZ0VsZW1lbnQgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxvY2F0aW9uOiBzdHJpbmc7XG59O1xuZXhwb3J0IGludGVyZmFjZSBNZGFhQ3VzdG9tQXNwZWN0IHtcbiAgLyoqIE1vZHVsZSBwYXRoIG9yIHBhY2thZ2UgbmFtZSBjb250YWluaW5nIHRoZSBjdXN0b20gQ0RLIGFzcGVjdCBpbXBsZW1lbnRhdGlvbiAqL1xuICByZWFkb25seSBhc3BlY3RfbW9kdWxlOiBzdHJpbmc7XG4gIC8qKiBDbGFzcyBuYW1lIG9mIHRoZSBjdXN0b20gQ0RLIGFzcGVjdCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgKi9cbiAgcmVhZG9ubHkgYXNwZWN0X2NsYXNzOiBzdHJpbmc7XG4gIC8qKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgcGFzc2VkIHRvIHRoZSBjdXN0b20gYXNwZWN0IGNvbnN0cnVjdG9yIGZvciBhc3BlY3Qtc3BlY2lmaWMgYmVoYXZpb3IgY3VzdG9taXphdGlvbiAqL1xuICByZWFkb25seSBhc3BlY3RfcHJvcHM/OiBDb25maWd1cmF0aW9uRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZGFhQ3VzdG9tTmFtaW5nIHtcbiAgLyoqIE1vZHVsZSBwYXRoIG9yIHBhY2thZ2UgbmFtZSBjb250YWluaW5nIHRoZSBjdXN0b20gTURBQSBuYW1pbmcgaW1wbGVtZW50YXRpb24gKi9cbiAgcmVhZG9ubHkgbmFtaW5nX21vZHVsZTogc3RyaW5nO1xuICAvKiogQ2xhc3MgbmFtZSBvZiB0aGUgY3VzdG9tIE1EQUEgbmFtaW5nIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSAqL1xuICByZWFkb25seSBuYW1pbmdfY2xhc3M6IHN0cmluZztcbiAgLyoqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIGN1c3RvbSBuYW1pbmcgaW1wbGVtZW50YXRpb24gY29uc3RydWN0b3IgZm9yIG5hbWluZyAqL1xuICByZWFkb25seSBuYW1pbmdfcHJvcHM/OiBDb25maWd1cmF0aW9uRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZGFhTmFnU3VwcHJlc3Npb25Db25maWdzIHtcbiAgLyoqIEFycmF5IG9mIENESyBOYWcgc3VwcHJlc3Npb25zIG9yZ2FuaXplZCBieSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBwYXRoLCBlbmFibGluZyB0YXJnZXRlZCAqL1xuICByZWFkb25seSBieV9wYXRoOiBNZGFhTmFnU3VwcHJlc3Npb25CeVBhdGhbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZGFhTmFnU3VwcHJlc3Npb25CeVBhdGgge1xuICAvKiogQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcGF0aCBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgcmVzb3VyY2UgZm9yIHdoaWNoIENESyBOYWcgcnVsZXMgc2hvdWxkIGJlIHN1cHByZXNzZWQgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICAvKiogQXJyYXkgb2Ygc3BlY2lmaWMgQ0RLIE5hZyBydWxlIHN1cHByZXNzaW9ucyB3aXRoIHJ1bGUgSURzIGFuZCBtYW5kYXRvcnkganVzdGlmaWNhdGlvbnMgZm9yIGF1ZGl0IGNvbXBsaWFuY2UgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3Npb25zOiB7XG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICByZWFkb25seSByZWFzb246IHN0cmluZztcbiAgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFTZXJ2aWNlQ2F0YWxvZ0NvbnN0cmFpbnRSdWxlQXNzZXJ0aW9uQ29uZmlnIHtcbiAgLyoqIENvbnN0cmFpbnQgYXNzZXJ0aW9uIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBTZXJ2aWNlIENhdGFsb2cgcHJvZHVjdCBwYXJhbWV0ZXJzICovXG4gIHJlYWRvbmx5IGFzc2VydDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gZXhwbGFpbmluZyB0aGUgcHVycG9zZSBhbmQgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb25zdHJhaW50IGFzc2VydGlvbiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vLyBJdCBzZWVtcyB3ZSBuZWVkIHRoaXMgZW1wdHkgaW50ZXJmYWNlIGluIHRoZSBzY2hlbWEgZXZlbiB0aG91Z2ggbm8gb25lIHVzZXMgaXRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgTWRhYVNlcnZpY2VDYXRhbG9nQ29uc3RyYWludFJ1bGVDb25kaXRpdGlvbkNvbmZpZyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFTZXJ2aWNlQ2F0YWxvZ0NvbnN0cmFpbnRSdWxlQ29uZmlnIHtcbiAgLyoqIENvbmRpdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBjb25zdHJhaW50IHJ1bGUgYXNzZXJ0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbjogTWRhYVNlcnZpY2VDYXRhbG9nQ29uc3RyYWludFJ1bGVDb25kaXRpdGlvbkNvbmZpZztcbiAgLyoqIEFycmF5IG9mIGNvbnN0cmFpbnQgYXNzZXJ0aW9ucyB0aGF0IGRlZmluZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyB0byBiZSBhcHBsaWVkIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBtZXQgKi9cbiAgcmVhZG9ubHkgYXNzZXJ0aW9uczogTWRhYVNlcnZpY2VDYXRhbG9nQ29uc3RyYWludFJ1bGVBc3NlcnRpb25Db25maWdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZGFhU2VydmljZUNhdGFsb2dDb25zdHJhaW50Q29uZmlnIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2UgYW5kIHNjb3BlIG9mIHRoZSBTZXJ2aWNlIENhdGFsb2cgY29uc3RyYWludCAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogT2JqZWN0IGNvbnRhaW5pbmcgbmFtZWQgY29uc3RyYWludCBydWxlcyB0aGF0IGRlZmluZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgU2VydmljZSBDYXRhbG9nIHByb2R1Y3QgcGFyYW1ldGVycyAqL1xuICByZWFkb25seSBydWxlczogeyBba2V5OiBzdHJpbmddOiBNZGFhU2VydmljZUNhdGFsb2dDb25zdHJhaW50UnVsZUNvbmZpZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFTZXJ2aWNlQ2F0YWxvZ1BhcmFtZXRlckNvbmZpZyB7XG4gIC8qKiBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXIgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgcGFyYW1ldGVyIGNoYXJhY3RlcmlzdGljcyBpbmNsdWRpbmcgdHlwZSwgKi9cbiAgcmVhZG9ubHkgcHJvcHM6IENmblBhcmFtZXRlclByb3BzO1xuICAvKiogQ29uc3RyYWludCBjb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcyBhZGRpdGlvbmFsIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoZSBTZXJ2aWNlIENhdGFsb2cgcHJvZHVjdCBwYXJhbWV0ZXIgKi9cbiAgcmVhZG9ubHkgY29uc3RyYWludHM/OiBNZGFhU2VydmljZUNhdGFsb2dDb25zdHJhaW50Q29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RDb25maWcge1xuICAvKiogQVJOIG9mIHRoZSBBV1MgU2VydmljZSBDYXRhbG9nIHBvcnRmb2xpbyB3aGVyZSB0aGUgcHJvZHVjdCB3aWxsIGJlIGFzc29jaWF0ZWQgKi9cbiAgcmVhZG9ubHkgcG9ydGZvbGlvX2Fybjogc3RyaW5nO1xuICAvKiogT3duZXIgaWRlbnRpZmllciBmb3IgdGhlIFNlcnZpY2UgQ2F0YWxvZyBwcm9kdWN0LCB0eXBpY2FsbHkgcmVwcmVzZW50aW5nIHRoZSB0ZWFtIG9yIG9yZ2FuaXphdGlvbiAqL1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGUgU2VydmljZSBDYXRhbG9nIHByb2R1Y3QgdGhhdCB3aWxsIGJlIHZpc2libGUgdG8gZW5kIHVzZXJzIGluIHRoZSBTZXJ2aWNlIENhdGFsb2cgY29uc29sZSAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGxhdW5jaCB0aGUgU2VydmljZSBDYXRhbG9nIHByb2R1Y3QgKi9cbiAgcmVhZG9ubHkgbGF1bmNoX3JvbGVfbmFtZT86IHN0cmluZztcbiAgLyoqIE9iamVjdCBjb250YWluaW5nIG5hbWVkIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFNlcnZpY2UgQ2F0YWxvZyBwcm9kdWN0ICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IE1kYWFTZXJ2aWNlQ2F0YWxvZ1BhcmFtZXRlckNvbmZpZyB9O1xuXG4gIHJlYWRvbmx5IHBvcnRmb2xpb19idWNrZXRfbmFtZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { CfnParameterProps } from 'aws-cdk-lib';
|
|
7
|
+
|
|
8
|
+
export type ConfigurationElement = { [key: string]: unknown };
|
|
9
|
+
export type TagElement = { [key: string]: string };
|
|
10
|
+
export type Workspace = {
|
|
11
|
+
name: string;
|
|
12
|
+
location: string;
|
|
13
|
+
};
|
|
14
|
+
export interface MdaaCustomAspect {
|
|
15
|
+
/** Module path or package name containing the custom CDK aspect implementation */
|
|
16
|
+
readonly aspect_module: string;
|
|
17
|
+
/** Class name of the custom CDK aspect implementation within the specified module */
|
|
18
|
+
readonly aspect_class: string;
|
|
19
|
+
/** Configuration properties passed to the custom aspect constructor for aspect-specific behavior customization */
|
|
20
|
+
readonly aspect_props?: ConfigurationElement;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface MdaaCustomNaming {
|
|
24
|
+
/** Module path or package name containing the custom MDAA naming implementation */
|
|
25
|
+
readonly naming_module: string;
|
|
26
|
+
/** Class name of the custom MDAA naming implementation within the specified module */
|
|
27
|
+
readonly naming_class: string;
|
|
28
|
+
/** Configuration properties passed to the custom naming implementation constructor for naming */
|
|
29
|
+
readonly naming_props?: ConfigurationElement;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface MdaaNagSuppressionConfigs {
|
|
33
|
+
/** Array of CDK Nag suppressions organized by CloudFormation resource path, enabling targeted */
|
|
34
|
+
readonly by_path: MdaaNagSuppressionByPath[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface MdaaNagSuppressionByPath {
|
|
38
|
+
/** CloudFormation resource path identifying the specific resource for which CDK Nag rules should be suppressed */
|
|
39
|
+
readonly path: string;
|
|
40
|
+
/** Array of specific CDK Nag rule suppressions with rule IDs and mandatory justifications for audit compliance */
|
|
41
|
+
readonly suppressions: {
|
|
42
|
+
readonly id: string;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
}[];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface MdaaServiceCatalogConstraintRuleAssertionConfig {
|
|
48
|
+
/** Constraint assertion expression that defines the validation logic for Service Catalog product parameters */
|
|
49
|
+
readonly assert: string;
|
|
50
|
+
/** Human-readable description explaining the purpose and requirements of the constraint assertion */
|
|
51
|
+
readonly description: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// It seems we need this empty interface in the schema even though no one uses it
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
56
|
+
export interface MdaaServiceCatalogConstraintRuleCondititionConfig {}
|
|
57
|
+
|
|
58
|
+
export interface MdaaServiceCatalogConstraintRuleConfig {
|
|
59
|
+
/** Condition configuration that determines when the constraint rule assertions should be evaluated */
|
|
60
|
+
readonly condition: MdaaServiceCatalogConstraintRuleCondititionConfig;
|
|
61
|
+
/** Array of constraint assertions that define the validation logic to be applied when the condition is met */
|
|
62
|
+
readonly assertions: MdaaServiceCatalogConstraintRuleAssertionConfig[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface MdaaServiceCatalogConstraintConfig {
|
|
66
|
+
/** Human-readable description explaining the purpose and scope of the Service Catalog constraint */
|
|
67
|
+
readonly description: string;
|
|
68
|
+
/** Object containing named constraint rules that define the validation logic for Service Catalog product parameters */
|
|
69
|
+
readonly rules: { [key: string]: MdaaServiceCatalogConstraintRuleConfig };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface MdaaServiceCatalogParameterConfig {
|
|
73
|
+
/** CloudFormation parameter properties that define the parameter characteristics including type, */
|
|
74
|
+
readonly props: CfnParameterProps;
|
|
75
|
+
/** Constraint configuration that defines additional validation rules for the Service Catalog product parameter */
|
|
76
|
+
readonly constraints?: MdaaServiceCatalogConstraintConfig;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface MdaaServiceCatalogProductConfig {
|
|
80
|
+
/** ARN of the AWS Service Catalog portfolio where the product will be associated */
|
|
81
|
+
readonly portfolio_arn: string;
|
|
82
|
+
/** Owner identifier for the Service Catalog product, typically representing the team or organization */
|
|
83
|
+
readonly owner: string;
|
|
84
|
+
/** Display name for the Service Catalog product that will be visible to end users in the Service Catalog console */
|
|
85
|
+
readonly name: string;
|
|
86
|
+
/** IAM role name that will be used to launch the Service Catalog product */
|
|
87
|
+
readonly launch_role_name?: string;
|
|
88
|
+
/** Object containing named parameter configurations for the Service Catalog product */
|
|
89
|
+
readonly parameters?: { [key: string]: MdaaServiceCatalogParameterConfig };
|
|
90
|
+
|
|
91
|
+
readonly portfolio_bucket_name: string;
|
|
92
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export * from './config';
|
|
6
|
+
export * from './transformer';
|
|
7
|
+
export * from './ssm-ref-transformer';
|
|
8
|
+
export * from './path-value-transformer';
|
|
9
|
+
export * from './param-transformer';
|
|
10
|
+
export * from './ref-value-transformer';
|
|
11
|
+
export * from './blueprint-value-transformer';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
__exportStar(require("./config"), exports);
|
|
22
|
+
__exportStar(require("./transformer"), exports);
|
|
23
|
+
__exportStar(require("./ssm-ref-transformer"), exports);
|
|
24
|
+
__exportStar(require("./path-value-transformer"), exports);
|
|
25
|
+
__exportStar(require("./param-transformer"), exports);
|
|
26
|
+
__exportStar(require("./ref-value-transformer"), exports);
|
|
27
|
+
__exportStar(require("./blueprint-value-transformer"), exports);
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix3REFBc0M7QUFDdEMsMkRBQXlDO0FBQ3pDLHNEQUFvQztBQUNwQywwREFBd0M7QUFDeEMsZ0VBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL3NzbS1yZWYtdHJhbnNmb3JtZXInO1xuZXhwb3J0ICogZnJvbSAnLi9wYXRoLXZhbHVlLXRyYW5zZm9ybWVyJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyYW0tdHJhbnNmb3JtZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yZWYtdmFsdWUtdHJhbnNmb3JtZXInO1xuZXhwb3J0ICogZnJvbSAnLi9ibHVlcHJpbnQtdmFsdWUtdHJhbnNmb3JtZXInO1xuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export * from './config';
|
|
7
|
+
export * from './transformer';
|
|
8
|
+
export * from './ssm-ref-transformer';
|
|
9
|
+
export * from './path-value-transformer';
|
|
10
|
+
export * from './param-transformer';
|
|
11
|
+
export * from './ref-value-transformer';
|
|
12
|
+
export * from './blueprint-value-transformer';
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { CfnParameterProps } from 'aws-cdk-lib';
|
|
6
|
+
import { MdaaConfigRefValueTransformerProps, MdaaConfigRefValueTransformer } from './ref-value-transformer';
|
|
7
|
+
export interface MdaaConfigParamRefValueTransformerProps extends MdaaConfigRefValueTransformerProps {
|
|
8
|
+
readonly paramProps: {
|
|
9
|
+
[name: string]: CfnParameterProps;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class MdaaConfigParamRefValueTransformer extends MdaaConfigRefValueTransformer {
|
|
13
|
+
private readonly paramProps;
|
|
14
|
+
constructor(props: MdaaConfigParamRefValueTransformerProps);
|
|
15
|
+
protected parseRef(value: string, refMatch: string[]): string | number;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve standalone parameters with no other content in the value.
|
|
18
|
+
* "Standalone" means it is not embedded in a string value.
|
|
19
|
+
* Important as this can be a case where a number should be returned instead of a string.
|
|
20
|
+
* @param value
|
|
21
|
+
* @param refMatch
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
private resolveStandaloneParam;
|
|
25
|
+
/**
|
|
26
|
+
* Create new or resolve existing parameter for a given parameter reference
|
|
27
|
+
* @param refInner
|
|
28
|
+
* @returns Value of CfnParameter
|
|
29
|
+
*/
|
|
30
|
+
private createParam;
|
|
31
|
+
private createParamUsingProps;
|
|
32
|
+
protected createParamUsingTypeLabels(paramBase: string, paramName: string, paramProps: CfnParameterProps | undefined): string | number;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the given parameter type is a list type
|
|
35
|
+
* Follows conventions of CfnParameter internal functions
|
|
36
|
+
*/
|
|
37
|
+
private isListType;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the given parameter type is a number type
|
|
40
|
+
* Follows conventions of CfnParameter internal functions
|
|
41
|
+
*/
|
|
42
|
+
private isNumberType;
|
|
43
|
+
/**
|
|
44
|
+
* Whether the given parameter type is a string type
|
|
45
|
+
* Follows conventions of CfnParameter internal functions
|
|
46
|
+
*/
|
|
47
|
+
private isStringType;
|
|
48
|
+
private getParamProps;
|
|
49
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MdaaConfigParamRefValueTransformer = void 0;
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const ref_value_transformer_1 = require("./ref-value-transformer");
|
|
10
|
+
class MdaaConfigParamRefValueTransformer extends ref_value_transformer_1.MdaaConfigRefValueTransformer {
|
|
11
|
+
constructor(props) {
|
|
12
|
+
super(props);
|
|
13
|
+
this.paramProps = props.paramProps;
|
|
14
|
+
}
|
|
15
|
+
parseRef(value, refMatch) {
|
|
16
|
+
/**
|
|
17
|
+
* Handle base case where we resolve and return a single naked parameter value,
|
|
18
|
+
* Important as we need to avoid building a string if we have a standalone numerical value
|
|
19
|
+
*/
|
|
20
|
+
const standaloneParam = this.resolveStandaloneParam(value, refMatch);
|
|
21
|
+
if (standaloneParam) {
|
|
22
|
+
return standaloneParam;
|
|
23
|
+
}
|
|
24
|
+
// In all other cases, return a recursively substituted string
|
|
25
|
+
let toReturn = value;
|
|
26
|
+
refMatch.forEach(ref => {
|
|
27
|
+
let resolvedValue;
|
|
28
|
+
const refInner = this.transformValue(ref).toString();
|
|
29
|
+
if (refInner.startsWith('param:') && this.props.scope instanceof aws_cdk_lib_1.Stack) {
|
|
30
|
+
resolvedValue = this.createParam(refInner).toString();
|
|
31
|
+
}
|
|
32
|
+
toReturn = resolvedValue ? toReturn.replace(`{{${ref}}}`, resolvedValue) : toReturn;
|
|
33
|
+
});
|
|
34
|
+
return toReturn;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve standalone parameters with no other content in the value.
|
|
38
|
+
* "Standalone" means it is not embedded in a string value.
|
|
39
|
+
* Important as this can be a case where a number should be returned instead of a string.
|
|
40
|
+
* @param value
|
|
41
|
+
* @param refMatch
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
resolveStandaloneParam(value, refMatch) {
|
|
45
|
+
if (refMatch.length === 1) {
|
|
46
|
+
const strippedValue = value.replace(`{{${refMatch[0]}}}`, '').trim();
|
|
47
|
+
if (strippedValue.length === 0) {
|
|
48
|
+
const refInner = this.transformValue(refMatch[0]);
|
|
49
|
+
if (typeof refInner === 'string') {
|
|
50
|
+
if (refInner.startsWith('param:') && this.props.scope instanceof aws_cdk_lib_1.Stack) {
|
|
51
|
+
return this.createParam(refInner);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create new or resolve existing parameter for a given parameter reference
|
|
60
|
+
* @param refInner
|
|
61
|
+
* @returns Value of CfnParameter
|
|
62
|
+
*/
|
|
63
|
+
createParam(refInner) {
|
|
64
|
+
if (!this.props.scope) {
|
|
65
|
+
throw new Error('Unable to create parameters outside of a Construct');
|
|
66
|
+
}
|
|
67
|
+
const stack = aws_cdk_lib_1.Stack.of(this.props.scope);
|
|
68
|
+
const paramBase = refInner.replace(/^param:/, '');
|
|
69
|
+
const paramName = paramBase
|
|
70
|
+
.replace(/^string:/, '')
|
|
71
|
+
.replace(/^number:/, '')
|
|
72
|
+
.replace(/^list:/, '');
|
|
73
|
+
const paramProps = this.getParamProps(paramName);
|
|
74
|
+
const exists = stack.node.tryFindChild(paramName);
|
|
75
|
+
// Return values for existing parameter if it already exists
|
|
76
|
+
if (exists?.type) {
|
|
77
|
+
if (this.isStringType(exists.type))
|
|
78
|
+
return exists.valueAsString;
|
|
79
|
+
else if (this.isNumberType(exists.type))
|
|
80
|
+
return exists.valueAsNumber;
|
|
81
|
+
else if (this.isListType(exists.type))
|
|
82
|
+
return exists.valueAsList.join(',');
|
|
83
|
+
}
|
|
84
|
+
// If parameter exists, but we weren't able to infer a type, return it as a string
|
|
85
|
+
if (exists) {
|
|
86
|
+
return exists.valueAsString;
|
|
87
|
+
}
|
|
88
|
+
// If parameter properties are present, use them to infer the parameter type if possible
|
|
89
|
+
if (paramProps?.type) {
|
|
90
|
+
return this.createParamUsingProps(paramName, paramProps.type, paramProps);
|
|
91
|
+
}
|
|
92
|
+
// If no paramProps type was found, create a new parameter based on type labels if present
|
|
93
|
+
return this.createParamUsingTypeLabels(paramBase, paramName, paramProps);
|
|
94
|
+
}
|
|
95
|
+
createParamUsingProps(paramName, paramType, paramProps) {
|
|
96
|
+
if (!this.props.scope) {
|
|
97
|
+
throw new Error('Unable to create params outside of a Construct');
|
|
98
|
+
}
|
|
99
|
+
if (this.isNumberType(paramType)) {
|
|
100
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, paramProps).valueAsNumber;
|
|
101
|
+
}
|
|
102
|
+
else if (this.isStringType(paramType)) {
|
|
103
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, paramProps).valueAsString;
|
|
104
|
+
}
|
|
105
|
+
else if (this.isListType(paramType)) {
|
|
106
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, paramProps).valueAsList.join(',');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new Error(`Invalid parameter type passed to paramProps: "${paramType}". Type must be one of ['String', 'Number', 'CommaDelimitedList']`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
createParamUsingTypeLabels(paramBase, paramName, paramProps) {
|
|
113
|
+
if (!this.props.scope) {
|
|
114
|
+
throw new Error('Unable to create params outside of a Construct');
|
|
115
|
+
}
|
|
116
|
+
if (paramBase.startsWith('string:')) {
|
|
117
|
+
const typedProps = { ...paramProps, type: 'String' };
|
|
118
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, typedProps).valueAsString;
|
|
119
|
+
}
|
|
120
|
+
else if (paramBase.startsWith('number')) {
|
|
121
|
+
const typedProps = { ...paramProps, type: 'Number' };
|
|
122
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, typedProps).valueAsNumber;
|
|
123
|
+
}
|
|
124
|
+
else if (paramBase.startsWith('list')) {
|
|
125
|
+
const typedProps = { ...paramProps, type: 'CommaDelimitedList' };
|
|
126
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, typedProps).valueAsList.join(',');
|
|
127
|
+
}
|
|
128
|
+
// If no type is specified in paramProps, then assume that the parameter is a string
|
|
129
|
+
return new aws_cdk_lib_1.CfnParameter(this.props.scope, paramName, paramProps).valueAsString;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Whether the given parameter type is a list type
|
|
133
|
+
* Follows conventions of CfnParameter internal functions
|
|
134
|
+
*/
|
|
135
|
+
isListType(type) {
|
|
136
|
+
return type.includes('List<') || type.includes('CommaDelimitedList');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Whether the given parameter type is a number type
|
|
140
|
+
* Follows conventions of CfnParameter internal functions
|
|
141
|
+
*/
|
|
142
|
+
isNumberType(type) {
|
|
143
|
+
return type === 'Number';
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Whether the given parameter type is a string type
|
|
147
|
+
* Follows conventions of CfnParameter internal functions
|
|
148
|
+
*/
|
|
149
|
+
isStringType(type) {
|
|
150
|
+
return !this.isListType(type) && !this.isNumberType(type);
|
|
151
|
+
}
|
|
152
|
+
getParamProps(paramName) {
|
|
153
|
+
if (this.paramProps[paramName]) {
|
|
154
|
+
return this.paramProps[paramName];
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.MdaaConfigParamRefValueTransformer = MdaaConfigParamRefValueTransformer;
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tdHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJhbS10cmFuc2Zvcm1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCw2Q0FBcUU7QUFDckUsbUVBQTRHO0FBSzVHLE1BQWEsa0NBQW1DLFNBQVEscURBQTZCO0lBRW5GLFlBQVksS0FBOEM7UUFDeEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFDa0IsUUFBUSxDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUMzRDs7O1dBR0c7UUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUNELDhEQUE4RDtRQUM5RCxJQUFJLFFBQVEsR0FBVyxLQUFLLENBQUM7UUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLGFBQWlDLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksbUJBQUssRUFBRSxDQUFDO2dCQUN2RSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENB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QW9CLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssWUFBWSxDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRDs7O09BR0c7SUFDSyxZQUFZLENBQUMsSUFBWTtRQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNPLGFBQWEsQ0FBQyxTQUFpQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQW5KRCxnRkFtSkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBDZm5QYXJhbWV0ZXIsIENmblBhcmFtZXRlclByb3BzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE1kYWFDb25maWdSZWZWYWx1ZVRyYW5zZm9ybWVyUHJvcHMsIE1kYWFDb25maWdSZWZWYWx1ZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi9yZWYtdmFsdWUtdHJhbnNmb3JtZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFDb25maWdQYXJhbVJlZlZhbHVlVHJhbnNmb3JtZXJQcm9wcyBleHRlbmRzIE1kYWFDb25maWdSZWZWYWx1ZVRyYW5zZm9ybWVyUHJvcHMge1xuICByZWFkb25seSBwYXJhbVByb3BzOiB7IFtuYW1lOiBzdHJpbmddOiBDZm5QYXJhbWV0ZXJQcm9wcyB9O1xufVxuZXhwb3J0IGNsYXNzIE1kYWFDb25maWdQYXJhbVJlZlZhbHVlVHJhbnNmb3JtZXIgZXh0ZW5kcyBNZGFhQ29uZmlnUmVmVmFsdWVUcmFuc2Zvcm1lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1Qcm9wczogeyBbbmFtZTogc3RyaW5nXTogQ2ZuUGFyYW1ldGVyUHJvcHMgfTtcbiAgY29uc3RydWN0b3IocHJvcHM6IE1kYWFDb25maWdQYXJhbVJlZlZhbHVlVHJhbnNmb3JtZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnBhcmFtUHJvcHMgPSBwcm9wcy5wYXJhbVByb3BzO1xuICB9XG4gIHByb3RlY3RlZCBvdmVycmlkZSBwYXJzZVJlZih2YWx1ZTogc3RyaW5nLCByZWZNYXRjaDogc3RyaW5nW10pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIC8qKlxuICAgICAqIEhhbmRsZSBiYXNlIGNhc2Ugd2hlcmUgd2UgcmVzb2x2ZSBhbmQgcmV0dXJuIGEgc2luZ2xlIG5ha2VkIHBhcmFtZXRlciB2YWx1ZSxcbiAgICAgKiBJbXBvcnRhbnQgYXMgd2UgbmVlZCB0byBhdm9pZCBidWlsZGluZyBhIHN0cmluZyBpZiB3ZSBoYXZlIGEgc3RhbmRhbG9uZSBudW1lcmljYWwgdmFsdWVcbiAgICAgKi9cbiAgICBjb25zdCBzdGFuZGFsb25lUGFyYW0gPSB0aGlzLnJlc29sdmVTdGFuZGFsb25lUGFyYW0odmFsdWUsIHJlZk1hdGNoKTtcbiAgICBpZiAoc3RhbmRhbG9uZVBhcmFtKSB7XG4gICAgICByZXR1cm4gc3RhbmRhbG9uZVBhcmFtO1xuICAgIH1cbiAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHJldHVybiBhIHJlY3Vyc2l2ZWx5IHN1YnN0aXR1dGVkIHN0cmluZ1xuICAgIGxldCB0b1JldHVybjogc3RyaW5nID0gdmFsdWU7XG4gICAgcmVmTWF0Y2guZm9yRWFjaChyZWYgPT4ge1xuICAgICAgbGV0IHJlc29sdmVkVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlZklubmVyID0gdGhpcy50cmFuc2Zvcm1WYWx1ZShyZWYpLnRvU3RyaW5nKCk7XG4gICAgICBpZiAocmVmSW5uZXIuc3RhcnRzV2l0aCgncGFyYW06JykgJiYgdGhpcy5wcm9wcy5zY29wZSBpbnN0YW5jZW9mIFN0YWNrKSB7XG4gICAgICAgIHJlc29sdmVkVmFsdWUgPSB0aGlzLmNyZWF0ZVBhcmFtKHJlZklubmVyKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgdG9SZXR1cm4gPSByZXNvbHZlZFZhbHVlID8gdG9SZXR1cm4ucmVwbGFjZShge3ske3JlZn19fWAsIHJlc29sdmVkVmFsdWUpIDogdG9SZXR1cm47XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG4gIC8qKlxuICAgKiBSZXNvbHZlIHN0YW5kYWxvbmUgcGFyYW1ldGVycyB3aXRoIG5vIG90aGVyIGNvbnRlbnQgaW4gdGhlIHZhbHVlLlxuICAgKiBcIlN0YW5kYWxvbmVcIiBtZWFucyBpdCBpcyBub3QgZW1iZWRkZWQgaW4gYSBzdHJpbmcgdmFsdWUuXG4gICAqIEltcG9ydGFudCBhcyB0aGlzIGNhbiBiZSBhIGNhc2Ugd2hlcmUgYSBudW1iZXIgc2hvdWxkIGJlIHJldHVybmVkIGluc3RlYWQgb2YgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gcmVmTWF0Y2hcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVN0YW5kYWxvbmVQYXJhbSh2YWx1ZTogc3RyaW5nLCByZWZNYXRjaDogc3RyaW5nW10pOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmIChyZWZNYXRjaC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHN0cmlwcGVkVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGB7eyR7cmVmTWF0Y2hbMF19fX1gLCAnJykudHJpbSgpO1xuICAgICAgaWYgKHN0cmlwcGVkVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHJlZklubmVyID0gdGhpcy50cmFuc2Zvcm1WYWx1ZShyZWZNYXRjaFswXSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmSW5uZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHJlZklubmVyLnN0YXJ0c1dpdGgoJ3BhcmFtOicpICYmIHRoaXMucHJvcHMuc2NvcGUgaW5zdGFuY2VvZiBTdGFjaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFyYW0ocmVmSW5uZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IG9yIHJlc29sdmUgZXhpc3RpbmcgcGFyYW1ldGVyIGZvciBhIGdpdmVuIHBhcmFtZXRlciByZWZlcmVuY2VcbiAgICogQHBhcmFtIHJlZklubmVyXG4gICAqIEByZXR1cm5zIFZhbHVlIG9mIENmblBhcmFtZXRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVQYXJhbShyZWZJbm5lcjogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBwYXJhbWV0ZXJzIG91dHNpZGUgb2YgYSBDb25zdHJ1Y3QnKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzLnByb3BzLnNjb3BlKTtcbiAgICBjb25zdCBwYXJhbUJhc2UgPSByZWZJbm5lci5yZXBsYWNlKC9ecGFyYW06LywgJycpO1xuICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtQmFzZVxuICAgICAgLnJlcGxhY2UoL15zdHJpbmc6LywgJycpXG4gICAgICAucmVwbGFjZSgvXm51bWJlcjovLCAnJylcbiAgICAgIC5yZXBsYWNlKC9ebGlzdDovLCAnJyk7XG4gICAgY29uc3QgcGFyYW1Qcm9wcyA9IHRoaXMuZ2V0UGFyYW1Qcm9wcyhwYXJhbU5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKHBhcmFtTmFtZSkgYXMgQ2ZuUGFyYW1ldGVyO1xuICAgIC8vIFJldHVybiB2YWx1ZXMgZm9yIGV4aXN0aW5nIHBhcmFtZXRlciBpZiBpdCBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHM/LnR5cGUpIHtcbiAgICAgIGlmICh0aGlzLmlzU3RyaW5nVHlwZShleGlzdHMudHlwZSkpIHJldHVybiBleGlzdHMudmFsdWVBc1N0cmluZztcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNOdW1iZXJUeXBlKGV4aXN0cy50eXBlKSkgcmV0dXJuIGV4aXN0cy52YWx1ZUFzTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGhpcy5pc0xpc3RUeXBlKGV4aXN0cy50eXBlKSkgcmV0dXJuIGV4aXN0cy52YWx1ZUFzTGlzdC5qb2luKCcsJyk7XG4gICAgfVxuICAgIC8vIElmIHBhcmFtZXRlciBleGlzdHMsIGJ1dCB3ZSB3ZXJlbid0IGFibGUgdG8gaW5mZXIgYSB0eXBlLCByZXR1cm4gaXQgYXMgYSBzdHJpbmdcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZXhpc3RzLnZhbHVlQXNTdHJpbmc7XG4gICAgfVxuICAgIC8vIElmIHBhcmFtZXRlciBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LCB1c2UgdGhlbSB0byBpbmZlciB0aGUgcGFyYW1ldGVyIHR5cGUgaWYgcG9zc2libGVcbiAgICBpZiAocGFyYW1Qcm9wcz8udHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFyYW1Vc2luZ1Byb3BzKHBhcmFtTmFtZSwgcGFyYW1Qcm9wcy50eXBlLCBwYXJhbVByb3BzKTtcbiAgICB9XG4gICAgLy8gSWYgbm8gcGFyYW1Qcm9wcyB0eXBlIHdhcyBmb3VuZCwgY3JlYXRlIGEgbmV3IHBhcmFtZXRlciBiYXNlZCBvbiB0eXBlIGxhYmVscyBpZiBwcmVzZW50XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFyYW1Vc2luZ1R5cGVMYWJlbHMocGFyYW1CYXNlLCBwYXJhbU5hbWUsIHBhcmFtUHJvcHMpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlUGFyYW1Vc2luZ1Byb3BzKHBhcmFtTmFtZTogc3RyaW5nLCBwYXJhbVR5cGU6IHN0cmluZywgcGFyYW1Qcm9wczogQ2ZuUGFyYW1ldGVyUHJvcHMpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBwYXJhbXMgb3V0c2lkZSBvZiBhIENvbnN0cnVjdCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc051bWJlclR5cGUocGFyYW1UeXBlKSkge1xuICAgICAgcmV0dXJuIG5ldyBDZm5QYXJhbWV0ZXIodGhpcy5wcm9wcy5zY29wZSwgcGFyYW1OYW1lLCBwYXJhbVByb3BzKS52YWx1ZUFzTnVtYmVyO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1N0cmluZ1R5cGUocGFyYW1UeXBlKSkge1xuICAgICAgcmV0dXJuIG5ldyBDZm5QYXJhbWV0ZXIodGhpcy5wcm9wcy5zY29wZSwgcGFyYW1OYW1lLCBwYXJhbVByb3BzKS52YWx1ZUFzU3RyaW5nO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0xpc3RUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICAgIHJldHVybiBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMucHJvcHMuc2NvcGUsIHBhcmFtTmFtZSwgcGFyYW1Qcm9wcykudmFsdWVBc0xpc3Quam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciB0eXBlIHBhc3NlZCB0byBwYXJhbVByb3BzOiBcIiR7cGFyYW1UeXBlfVwiLiBUeXBlIG11c3QgYmUgb25lIG9mIFsnU3RyaW5nJywgJ051bWJlcicsICdDb21tYURlbGltaXRlZExpc3QnXWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUGFyYW1Vc2luZ1R5cGVMYWJlbHMoXG4gICAgcGFyYW1CYXNlOiBzdHJpbmcsXG4gICAgcGFyYW1OYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1Qcm9wczogQ2ZuUGFyYW1ldGVyUHJvcHMgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIGlmICghdGhpcy5wcm9wcy5zY29wZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHBhcmFtcyBvdXRzaWRlIG9mIGEgQ29uc3RydWN0Jyk7XG4gICAgfVxuICAgIGlmIChwYXJhbUJhc2Uuc3RhcnRzV2l0aCgnc3RyaW5nOicpKSB7XG4gICAgICBjb25zdCB0eXBlZFByb3BzID0geyAuLi5wYXJhbVByb3BzLCB0eXBlOiAnU3RyaW5nJyB9O1xuICAgICAgcmV0dXJuIG5ldyBDZm5QYXJhbWV0ZXIodGhpcy5wcm9wcy5zY29wZSwgcGFyYW1OYW1lLCB0eXBlZFByb3BzKS52YWx1ZUFzU3RyaW5nO1xuICAgIH0gZWxzZSBpZiAocGFyYW1CYXNlLnN0YXJ0c1dpdGgoJ251bWJlcicpKSB7XG4gICAgICBjb25zdCB0eXBlZFByb3BzID0geyAuLi5wYXJhbVByb3BzLCB0eXBlOiAnTnVtYmVyJyB9O1xuICAgICAgcmV0dXJuIG5ldyBDZm5QYXJhbWV0ZXIodGhpcy5wcm9wcy5zY29wZSwgcGFyYW1OYW1lLCB0eXBlZFByb3BzKS52YWx1ZUFzTnVtYmVyO1xuICAgIH0gZWxzZSBpZiAocGFyYW1CYXNlLnN0YXJ0c1dpdGgoJ2xpc3QnKSkge1xuICAgICAgY29uc3QgdHlwZWRQcm9wcyA9IHsgLi4ucGFyYW1Qcm9wcywgdHlwZTogJ0NvbW1hRGVsaW1pdGVkTGlzdCcgfTtcbiAgICAgIHJldHVybiBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMucHJvcHMuc2NvcGUsIHBhcmFtTmFtZSwgdHlwZWRQcm9wcykudmFsdWVBc0xpc3Quam9pbignLCcpO1xuICAgIH1cbiAgICAvLyBJZiBubyB0eXBlIGlzIHNwZWNpZmllZCBpbiBwYXJhbVByb3BzLCB0aGVuIGFzc3VtZSB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmdcbiAgICByZXR1cm4gbmV3IENmblBhcmFtZXRlcih0aGlzLnByb3BzLnNjb3BlLCBwYXJhbU5hbWUsIHBhcmFtUHJvcHMpLnZhbHVlQXNTdHJpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdpdmVuIHBhcmFtZXRlciB0eXBlIGlzIGEgbGlzdCB0eXBlXG4gICAqIEZvbGxvd3MgY29udmVudGlvbnMgb2YgQ2ZuUGFyYW1ldGVyIGludGVybmFsIGZ1bmN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpc0xpc3RUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0eXBlLmluY2x1ZGVzKCdMaXN0PCcpIHx8IHR5cGUuaW5jbHVkZXMoJ0NvbW1hRGVsaW1pdGVkTGlzdCcpO1xuICB9XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZSBpcyBhIG51bWJlciB0eXBlXG4gICAqIEZvbGxvd3MgY29udmVudGlvbnMgb2YgQ2ZuUGFyYW1ldGVyIGludGVybmFsIGZ1bmN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpc051bWJlclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdOdW1iZXInO1xuICB9XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZSBpcyBhIHN0cmluZyB0eXBlXG4gICAqIEZvbGxvd3MgY29udmVudGlvbnMgb2YgQ2ZuUGFyYW1ldGVyIGludGVybmFsIGZ1bmN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpc1N0cmluZ1R5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTGlzdFR5cGUodHlwZSkgJiYgIXRoaXMuaXNOdW1iZXJUeXBlKHR5cGUpO1xuICB9XG4gIHByaXZhdGUgZ2V0UGFyYW1Qcm9wcyhwYXJhbU5hbWU6IHN0cmluZyk6IENmblBhcmFtZXRlclByb3BzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wYXJhbVByb3BzW3BhcmFtTmFtZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtUHJvcHNbcGFyYW1OYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|