cdk8s-aws-cdk 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.gitattributes +21 -0
  2. package/.jsii +4392 -0
  3. package/API.md +2204 -0
  4. package/LICENSE +202 -0
  5. package/README.md +201 -0
  6. package/changelog.md +2 -0
  7. package/examples/rds-db-instance/README.md +0 -0
  8. package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.assets.json +19 -0
  9. package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.template.json +86 -0
  10. package/examples/rds-db-instance/cdk.out/cdk.out +1 -0
  11. package/examples/rds-db-instance/cdk.out/manifest.json +230 -0
  12. package/examples/rds-db-instance/cdk.out/tree.json +171 -0
  13. package/examples/rds-db-instance/main.ts +136 -0
  14. package/lib/adapter.d.ts +37 -0
  15. package/lib/adapter.d.ts.map +1 -0
  16. package/lib/adapter.js +196 -0
  17. package/lib/chart.d.ts +19 -0
  18. package/lib/chart.d.ts.map +1 -0
  19. package/lib/chart.js +63 -0
  20. package/lib/imports/cloudcontrol.services.k8s.aws.d.ts +106 -0
  21. package/lib/imports/cloudcontrol.services.k8s.aws.d.ts.map +1 -0
  22. package/lib/imports/cloudcontrol.services.k8s.aws.js +92 -0
  23. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts +430 -0
  24. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts.map +1 -0
  25. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.js +314 -0
  26. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts +173 -0
  27. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts.map +1 -0
  28. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.js +156 -0
  29. package/lib/imports/fieldexports-services.k8s.aws.d.ts +159 -0
  30. package/lib/imports/fieldexports-services.k8s.aws.d.ts.map +1 -0
  31. package/lib/imports/fieldexports-services.k8s.aws.js +151 -0
  32. package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts +135 -0
  33. package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts.map +1 -0
  34. package/lib/imports/iampolicies-iam.services.k8s.aws.js +109 -0
  35. package/lib/imports/iamroles-iam.services.k8s.aws.d.ts +143 -0
  36. package/lib/imports/iamroles-iam.services.k8s.aws.d.ts.map +1 -0
  37. package/lib/imports/iamroles-iam.services.k8s.aws.js +112 -0
  38. package/lib/imports/k8s.d.ts +18619 -0
  39. package/lib/imports/k8s.d.ts.map +1 -0
  40. package/lib/imports/k8s.js +14701 -0
  41. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts +280 -0
  42. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts.map +1 -0
  43. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.js +183 -0
  44. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts +343 -0
  45. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts.map +1 -0
  46. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.js +225 -0
  47. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts +790 -0
  48. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts.map +1 -0
  49. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.js +217 -0
  50. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts +114 -0
  51. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts.map +1 -0
  52. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.js +108 -0
  53. package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts +2253 -0
  54. package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts.map +1 -0
  55. package/lib/imports/s3buckets-s3.services.k8s.aws.js +1672 -0
  56. package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts +203 -0
  57. package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts.map +1 -0
  58. package/lib/imports/sfnmachines-sfn.services.k8s.aws.js +174 -0
  59. package/lib/imports/snstopics-sns.services.k8s.aws.d.ts +106 -0
  60. package/lib/imports/snstopics-sns.services.k8s.aws.d.ts.map +1 -0
  61. package/lib/imports/snstopics-sns.services.k8s.aws.js +110 -0
  62. package/lib/index.d.ts +4 -0
  63. package/lib/index.d.ts.map +1 -0
  64. package/lib/index.js +16 -0
  65. package/lib/mappers/base.d.ts +23 -0
  66. package/lib/mappers/base.d.ts.map +1 -0
  67. package/lib/mappers/base.js +20 -0
  68. package/lib/mappers/ec2-security-group.d.ts +9 -0
  69. package/lib/mappers/ec2-security-group.d.ts.map +1 -0
  70. package/lib/mappers/ec2-security-group.js +33 -0
  71. package/lib/mappers/iam-policy.d.ts +9 -0
  72. package/lib/mappers/iam-policy.d.ts.map +1 -0
  73. package/lib/mappers/iam-policy.js +32 -0
  74. package/lib/mappers/iam-role.d.ts +9 -0
  75. package/lib/mappers/iam-role.d.ts.map +1 -0
  76. package/lib/mappers/iam-role.js +34 -0
  77. package/lib/mappers/index.d.ts +9 -0
  78. package/lib/mappers/index.d.ts.map +1 -0
  79. package/lib/mappers/index.js +21 -0
  80. package/lib/mappers/lambda-function.d.ts +9 -0
  81. package/lib/mappers/lambda-function.d.ts.map +1 -0
  82. package/lib/mappers/lambda-function.js +37 -0
  83. package/lib/mappers/rds-db-instance.d.ts +10 -0
  84. package/lib/mappers/rds-db-instance.d.ts.map +1 -0
  85. package/lib/mappers/rds-db-instance.js +65 -0
  86. package/lib/mappers/rds-db-subnet-group.d.ts +9 -0
  87. package/lib/mappers/rds-db-subnet-group.d.ts.map +1 -0
  88. package/lib/mappers/rds-db-subnet-group.js +34 -0
  89. package/lib/mappers/s3-bucket.d.ts +9 -0
  90. package/lib/mappers/s3-bucket.d.ts.map +1 -0
  91. package/lib/mappers/s3-bucket.js +53 -0
  92. package/package.json +129 -0
  93. package/releasetag.txt +1 -0
  94. package/version.txt +1 -0
package/lib/adapter.js ADDED
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AwsCdkAdapater = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws = require("aws-cdk-lib");
7
+ const k = require("cdk8s");
8
+ const kplus = require("cdk8s-plus-24");
9
+ const kfieldexports = require("./imports/fieldexports-services.k8s.aws");
10
+ const mappers = require("./mappers");
11
+ class AwsCdkAdapater extends aws.Stack {
12
+ constructor(scope, id, props) {
13
+ super(scope, id, props);
14
+ this._mappers = {};
15
+ this.chart = props.chart;
16
+ this.registerMapper(new mappers.RdsDBInstanceMapper(this.chart));
17
+ this.registerMapper(new mappers.Ec2SecurityGroupMapper(this.chart));
18
+ this.registerMapper(new mappers.RdsDBSubnetGroup(this.chart));
19
+ this.registerMapper(new mappers.IamPolicyMapper(this.chart));
20
+ this.registerMapper(new mappers.IamRoleMapper(this.chart));
21
+ this.registerMapper(new mappers.LambdaFunctionMapper(this.chart));
22
+ this.registerMapper(new mappers.S3BucketMapper(this.chart));
23
+ }
24
+ /**
25
+ * Register a mapper that can transform a specific CloudFormation resource type.
26
+ */
27
+ registerMapper(mapper) {
28
+ this._mappers[mapper.type] = mapper;
29
+ }
30
+ /**
31
+ * Transform CloudFormation resources to ACK resources.
32
+ */
33
+ transformResources(cfnResources) {
34
+ for (const cfnResource of cfnResources) {
35
+ const logicalId = this.getLogicalId(cfnResource);
36
+ const cfnType = cfnResource.cfnResourceType;
37
+ const mapper = this.tryFindMapper(cfnType);
38
+ if (!mapper) {
39
+ throw new Error(`Unable to transform resource of type '${cfnType}'. Mapper is not registered`);
40
+ }
41
+ const cfnTemplateResources = Object.values(cfnResource._toCloudFormation().Resources);
42
+ const cfnProperties = this.resolveIntrinsics(logicalId, this.resolve(cfnTemplateResources[0].value.Properties.value), mapper);
43
+ const resource = mapper.map(logicalId, cfnProperties);
44
+ // for each resource we patch its name if needed
45
+ if (!cfnProperties[mapper.nameMapping.cfnProperty]) {
46
+ resource.addJsonPatch(k.JsonPatch.add(mapper.nameMapping.specPath, resource.name));
47
+ resource.addJsonPatch(k.JsonPatch.add('/metadata', { name: resource.name }));
48
+ }
49
+ // for each resource we create a config map that will hold its field exports.
50
+ // i.e runtime attributes. these will later be used to transform CloudFormation
51
+ // attributes.
52
+ const configMap = new kplus.ConfigMap(this.chart, `${logicalId}ConfigMap`);
53
+ for (const exportMapping of mapper.exportMappings) {
54
+ new kfieldexports.FieldExport(this.chart, this.fieldExportId(logicalId, exportMapping.attribute), {
55
+ spec: {
56
+ from: {
57
+ path: this.fieldExportPath(exportMapping.field),
58
+ resource: { group: resource.apiGroup, kind: resource.kind, name: resource.name },
59
+ },
60
+ to: {
61
+ kind: kfieldexports.FieldExportSpecToKind.CONFIGMAP,
62
+ name: configMap.name,
63
+ },
64
+ },
65
+ });
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Transform CloudFormation attributes into ACK field exports.
71
+ *
72
+ * Note that this is only supported for container environment variables,
73
+ * as only they allow referencing fields from config maps, which the field exports export to.
74
+ *
75
+ * If an ApiObject contains a CloudFormation attribute in any other definition, it will remain
76
+ * as is, it will remain in-place.
77
+ */
78
+ transformAttributes(apiObjects) {
79
+ var _b, _c, _d, _e;
80
+ for (const apiObject of apiObjects) {
81
+ const spec = apiObject.toJson().spec;
82
+ switch (apiObject.kind) {
83
+ case 'Deployment':
84
+ case 'StatefulSet':
85
+ case 'DaemonSet':
86
+ case 'Job':
87
+ this.patchContainerEnvironment(apiObject, (_d = (_c = (_b = spec === null || spec === void 0 ? void 0 : spec.template) === null || _b === void 0 ? void 0 : _b.spec) === null || _c === void 0 ? void 0 : _c.containers) !== null && _d !== void 0 ? _d : [], '/spec/template/spec/containers');
88
+ break;
89
+ case 'Pod':
90
+ this.patchContainerEnvironment(apiObject, (_e = spec === null || spec === void 0 ? void 0 : spec.containers) !== null && _e !== void 0 ? _e : [], '/spec/containers');
91
+ break;
92
+ default:
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ patchContainerEnvironment(resource, containers, path) {
98
+ var _b, _c;
99
+ for (let i = 0; i < containers.length; i++) {
100
+ const container = containers[i];
101
+ const envVars = (_b = container.env) !== null && _b !== void 0 ? _b : [];
102
+ for (let j = 0; j < envVars.length; j++) {
103
+ const envVar = envVars[j];
104
+ if (!envVar.value) {
105
+ // we only conver value --> valueFrom
106
+ continue;
107
+ }
108
+ if (!aws.Token.isUnresolved(envVar.value)) {
109
+ // no conversion necessary
110
+ continue;
111
+ }
112
+ const resolved = this.resolve(envVar.value);
113
+ if (typeof (resolved) !== 'object') {
114
+ // not sure what this means...skip in the meantime
115
+ continue;
116
+ }
117
+ const key = Object.keys(resolved)[0];
118
+ if (!key.startsWith('Fn::GetAtt')) {
119
+ // not sure what this means...skip in the meantime
120
+ continue;
121
+ }
122
+ const value = Object.values(resolved)[0];
123
+ const logicalId = value[0];
124
+ const attribute = value[1];
125
+ // locate the field exports that is mapped to this attribute.
126
+ const fieldExport = this.tryFindFieldExport(logicalId, attribute);
127
+ if (!fieldExport) {
128
+ throw new Error(`Unable to transform attribute '${JSON.stringify(resolved)}' for env variable '${envVar.name}' in resource '${resource.name}': Field export not registered.`);
129
+ }
130
+ const fieldExportSpec = fieldExport.toJson().spec;
131
+ const namespace = (_c = fieldExport.metadata.namespace) !== null && _c !== void 0 ? _c : 'default';
132
+ resource.addJsonPatch(k.JsonPatch.remove(`${path}/${i}/env/${j}`));
133
+ resource.addJsonPatch(k.JsonPatch.add(`${path}/${i}/env/${j}`, {
134
+ name: envVar.name,
135
+ valueFrom: {
136
+ configMapKeyRef: {
137
+ key: `${namespace}.${fieldExport.name}`,
138
+ name: fieldExportSpec.to.name,
139
+ },
140
+ },
141
+ }));
142
+ }
143
+ }
144
+ }
145
+ resolveIntrinsics(logicalId, properties, mapper) {
146
+ const resolved = JSON.stringify(properties, (key, value) => {
147
+ if (typeof (value) !== 'object') {
148
+ // not an attribute
149
+ return value;
150
+ }
151
+ if (Object.keys(value).length !== 1) {
152
+ // definitely not an intrinsic, which takes the form '{ key: value }'
153
+ return value;
154
+ }
155
+ const attribute = Object.keys(value)[0];
156
+ const refLogicalId = Object.values(value)[0];
157
+ if (attribute.startsWith('Fn::')) {
158
+ // ACK doesn't have support for Fn:: intrinsics at the moment.
159
+ // actually -- thats not entirely true, some resources do have a way to pass
160
+ // values by referencing other resources. For example, you can pass a `vpcRef`
161
+ // to a security group, instead of the actual vpc id. but I have yet to list those out,
162
+ // and understand how they work.
163
+ throw new Error(`Unable to resolve intrinsic function '${JSON.stringify(value)}' in property '${key}' of resource '${logicalId}'`);
164
+ }
165
+ if (attribute !== 'Ref') {
166
+ // probably just a complext value, move on...
167
+ return value;
168
+ }
169
+ // we can resolve 'Ref' because we know all resource names at synth time.
170
+ const reference = this.chart.node.findChild(refLogicalId);
171
+ switch (mapper.refMapping) {
172
+ case mappers.CloudFormationMapperRefMapping.NAME:
173
+ return k.ApiObject.of(reference).name;
174
+ default:
175
+ throw new Error(`Unsupported ref mapping: ${mapper.refMapping}`);
176
+ }
177
+ });
178
+ return JSON.parse(resolved);
179
+ }
180
+ tryFindMapper(cfnType) {
181
+ return this._mappers[cfnType];
182
+ }
183
+ tryFindFieldExport(logicalId, attr) {
184
+ return this.chart.node.tryFindChild(this.fieldExportId(logicalId, attr));
185
+ }
186
+ fieldExportId(logicalId, attribute) {
187
+ return `${logicalId}${attribute}`;
188
+ }
189
+ fieldExportPath(field) {
190
+ return `.status.${field}`;
191
+ }
192
+ }
193
+ exports.AwsCdkAdapater = AwsCdkAdapater;
194
+ _a = JSII_RTTI_SYMBOL_1;
195
+ AwsCdkAdapater[_a] = { fqn: "cdk8s-aws-cdk.AwsCdkAdapater", version: "0.0.5" };
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJCQUEyQjtBQUMzQix1Q0FBdUM7QUFFdkMseUVBQXlFO0FBRXpFLHFDQUFxQztBQU9yQyxNQUFhLGNBQWUsU0FBUSxHQUFHLENBQUMsS0FBSztJQU0zQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBSFQsYUFBUSxHQUF5RCxFQUFFLENBQUM7UUFJbkYsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8s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YUFBYSxDQUFDLFNBQWlCLEVBQUUsU0FBaUI7UUFDeEQsT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWE7UUFDbkMsT0FBTyxXQUFXLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7O0FBak9ILHdDQW1PQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGF3cyBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBrIGZyb20gJ2NkazhzJztcbmltcG9ydCAqIGFzIGtwbHVzIGZyb20gJ2NkazhzLXBsdXMtMjQnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBrZmllbGRleHBvcnRzIGZyb20gJy4vaW1wb3J0cy9maWVsZGV4cG9ydHMtc2VydmljZXMuazhzLmF3cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBtYXBwZXJzIGZyb20gJy4vbWFwcGVycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ2RrQWRhcHRlclByb3BzIGV4dGVuZHMgYXdzLlN0YWNrUHJvcHMge1xuXG4gIHJlYWRvbmx5IGNoYXJ0OiBrLkNoYXJ0O1xufVxuXG5leHBvcnQgY2xhc3MgQXdzQ2RrQWRhcGF0ZXIgZXh0ZW5kcyBhd3MuU3RhY2sge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnQ6IGsuQ2hhcnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwcGVyczogUmVjb3JkPHN0cmluZywgbWFwcGVycy5DbG91ZEZvcm1hdGlvblJlc291cmNlTWFwcGVyPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBd3NDZGtBZGFwdGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLmNoYXJ0ID0gcHJvcHMuY2hhcnQ7XG5cbiAgICB0aGlzLnJlZ2lzdGVyTWFwcGVyKG5ldyBtYXBwZXJzLlJkc0RCSW5zdGFuY2VNYXBwZXIodGhpcy5jaGFydCkpO1xuICAgIHRoaXMucmVnaXN0ZXJNYXBwZXIobmV3IG1hcHBlcnMuRWMyU2VjdXJpdHlHcm91cE1hcHBlcih0aGlzLmNoYXJ0KSk7XG4gICAgdGhpcy5yZWdpc3Rlck1hcHBlcihuZXcgbWFwcGVycy5SZHNEQlN1Ym5ldEdyb3VwKHRoaXMuY2hhcnQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyTWFwcGVyKG5ldyBtYXBwZXJzLklhbVBvbGljeU1hcHBlcih0aGlzLmNoYXJ0KSk7XG4gICAgdGhpcy5yZWdpc3Rlck1hcHBlcihuZXcgbWFwcGVycy5JYW1Sb2xlTWFwcGVyKHRoaXMuY2hhcnQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyTWFwcGVyKG5ldyBtYXBwZXJzLkxhbWJkYUZ1bmN0aW9uTWFwcGVyKHRoaXMuY2hhcnQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyTWFwcGVyKG5ldyBtYXBwZXJzLlMzQnVja2V0TWFwcGVyKHRoaXMuY2hhcnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIG1hcHBlciB0aGF0IGNhbiB0cmFuc2Zvcm0gYSBzcGVjaWZpYyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTWFwcGVyKG1hcHBlcjogbWFwcGVycy5DbG91ZEZvcm1hdGlvblJlc291cmNlTWFwcGVyKSB7XG4gICAgdGhpcy5fbWFwcGVyc1ttYXBwZXIudHlwZV0gPSBtYXBwZXI7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIENsb3VkRm9ybWF0aW9uIHJlc291cmNlcyB0byBBQ0sgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybVJlc291cmNlcyhjZm5SZXNvdXJjZXM6IGF3cy5DZm5SZXNvdXJjZVtdKSB7XG5cbiAgICBmb3IgKGNvbnN0IGNmblJlc291cmNlIG9mIGNmblJlc291cmNlcykge1xuICAgICAgY29uc3QgbG9naWNhbElkID0gdGhpcy5nZXRMb2dpY2FsSWQoY2ZuUmVzb3VyY2UpO1xuICAgICAgY29uc3QgY2ZuVHlwZSA9IGNmblJlc291cmNlLmNmblJlc291cmNlVHlwZTtcblxuICAgICAgY29uc3QgbWFwcGVyID0gdGhpcy50cnlGaW5kTWFwcGVyKGNmblR5cGUpO1xuXG4gICAgICBpZiAoIW1hcHBlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byB0cmFuc2Zvcm0gcmVzb3VyY2Ugb2YgdHlwZSAnJHtjZm5UeXBlfScuIE1hcHBlciBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZVJlc291cmNlcyA9IE9iamVjdC52YWx1ZXMoKGNmblJlc291cmNlLl90b0Nsb3VkRm9ybWF0aW9uKCkgYXMgYW55KS5SZXNvdXJjZXMpIGFzIGFueVtdO1xuICAgICAgY29uc3QgY2ZuUHJvcGVydGllcyA9IHRoaXMucmVzb2x2ZUludHJpbnNpY3MobG9naWNhbElkLCB0aGlzLnJlc29sdmUoY2ZuVGVtcGxhdGVSZXNvdXJjZXNbMF0udmFsdWUuUHJvcGVydGllcy52YWx1ZSksIG1hcHBlcik7XG5cbiAgICAgIGNvbnN0IHJlc291cmNlID0gbWFwcGVyLm1hcChsb2dpY2FsSWQsIGNmblByb3BlcnRpZXMpO1xuXG4gICAgICAvLyBmb3IgZWFjaCByZXNvdXJjZSB3ZSBwYXRjaCBpdHMgbmFtZSBpZiBuZWVkZWRcbiAgICAgIGlmICghY2ZuUHJvcGVydGllc1ttYXBwZXIubmFtZU1hcHBpbmcuY2ZuUHJvcGVydHldKSB7XG4gICAgICAgIHJlc291cmNlLmFkZEpzb25QYXRjaChrLkpzb25QYXRjaC5hZGQobWFwcGVyLm5hbWVNYXBwaW5nLnNwZWNQYXRoLCByZXNvdXJjZS5uYW1lKSk7XG4gICAgICAgIHJlc291cmNlLmFkZEpzb25QYXRjaChrLkpzb25QYXRjaC5hZGQoJy9tZXRhZGF0YScsIHsgbmFtZTogcmVzb3VyY2UubmFtZSB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvciBlYWNoIHJlc291cmNlIHdlIGNyZWF0ZSBhIGNvbmZpZyBtYXAgdGhhdCB3aWxsIGhvbGQgaXRzIGZpZWxkIGV4cG9ydHMuXG4gICAgICAvLyBpLmUgcnVudGltZSBhdHRyaWJ1dGVzLiB0aGVzZSB3aWxsIGxhdGVyIGJlIHVzZWQgdG8gdHJhbnNmb3JtIENsb3VkRm9ybWF0aW9uXG4gICAgICAvLyBhdHRyaWJ1dGVzLlxuICAgICAgY29uc3QgY29uZmlnTWFwID0gbmV3IGtwbHVzLkNvbmZpZ01hcCh0aGlzLmNoYXJ0LCBgJHtsb2dpY2FsSWR9Q29uZmlnTWFwYCk7XG5cbiAgICAgIGZvciAoY29uc3QgZXhwb3J0TWFwcGluZyBvZiBtYXBwZXIuZXhwb3J0TWFwcGluZ3MpIHtcbiAgICAgICAgbmV3IGtmaWVsZGV4cG9ydHMuRmllbGRFeHBvcnQodGhpcy5jaGFydCwgdGhpcy5maWVsZEV4cG9ydElkKGxvZ2ljYWxJZCwgZXhwb3J0TWFwcGluZy5hdHRyaWJ1dGUpLCB7XG4gICAgICAgICAgc3BlYzoge1xuICAgICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgICBwYXRoOiB0aGlzLmZpZWxkRXhwb3J0UGF0aChleHBvcnRNYXBwaW5nLmZpZWxkKSxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6IHsgZ3JvdXA6IHJlc291cmNlLmFwaUdyb3VwLCBraW5kOiByZXNvdXJjZS5raW5kLCBuYW1lOiByZXNvdXJjZS5uYW1lIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG86IHtcbiAgICAgICAgICAgICAga2luZDoga2ZpZWxkZXhwb3J0cy5GaWVsZEV4cG9ydFNwZWNUb0tpbmQuQ09ORklHTUFQLFxuICAgICAgICAgICAgICBuYW1lOiBjb25maWdNYXAubmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBDbG91ZEZvcm1hdGlvbiBhdHRyaWJ1dGVzIGludG8gQUNLIGZpZWxkIGV4cG9ydHMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjb250YWluZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLFxuICAgKiBhcyBvbmx5IHRoZXkgYWxsb3cgcmVmZXJlbmNpbmcgZmllbGRzIGZyb20gY29uZmlnIG1hcHMsIHdoaWNoIHRoZSBmaWVsZCBleHBvcnRzIGV4cG9ydCB0by5cbiAgICpcbiAgICogSWYgYW4gQXBpT2JqZWN0IGNvbnRhaW5zIGEgQ2xvdWRGb3JtYXRpb24gYXR0cmlidXRlIGluIGFueSBvdGhlciBkZWZpbml0aW9uLCBpdCB3aWxsIHJlbWFpblxuICAgKiBhcyBpcywgaXQgd2lsbCByZW1haW4gaW4tcGxhY2UuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtQXR0cmlidXRlcyhhcGlPYmplY3RzOiBrLkFwaU9iamVjdFtdKSB7XG5cbiAgICBmb3IgKGNvbnN0IGFwaU9iamVjdCBvZiBhcGlPYmplY3RzKSB7XG5cbiAgICAgIGNvbnN0IHNwZWM6IGFueSA9IGFwaU9iamVjdC50b0pzb24oKS5zcGVjO1xuXG4gICAgICBzd2l0Y2ggKGFwaU9iamVjdC5raW5kKSB7XG4gICAgICAgIGNhc2UgJ0RlcGxveW1lbnQnOlxuICAgICAgICBjYXNlICdTdGF0ZWZ1bFNldCc6XG4gICAgICAgIGNhc2UgJ0RhZW1vblNldCc6XG4gICAgICAgIGNhc2UgJ0pvYic6XG4gICAgICAgICAgdGhpcy5wYXRjaENvbnRhaW5lckVudmlyb25tZW50KGFwaU9iamVjdCwgc3BlYz8udGVtcGxhdGU/LnNwZWM/LmNvbnRhaW5lcnMgPz8gW10sICcvc3BlYy90ZW1wbGF0ZS9zcGVjL2NvbnRhaW5lcnMnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUG9kJzpcbiAgICAgICAgICB0aGlzLnBhdGNoQ29udGFpbmVyRW52aXJvbm1lbnQoYXBpT2JqZWN0LCBzcGVjPy5jb250YWluZXJzID8/IFtdLCAnL3NwZWMvY29udGFpbmVycycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hDb250YWluZXJFbnZpcm9ubWVudChyZXNvdXJjZTogay5BcGlPYmplY3QsIGNvbnRhaW5lcnM6IGs4cy5Db250YWluZXJbXSwgcGF0aDogc3RyaW5nKSB7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lcnMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyc1tpXTtcbiAgICAgIGNvbnN0IGVudlZhcnMgPSBjb250YWluZXIuZW52ID8/IFtdO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVudlZhcnMubGVuZ3RoOyBqKyspIHtcblxuICAgICAgICBjb25zdCBlbnZWYXIgPSBlbnZWYXJzW2pdO1xuXG4gICAgICAgIGlmICghZW52VmFyLnZhbHVlKSB7XG4gICAgICAgICAgLy8gd2Ugb25seSBjb252ZXIgdmFsdWUgLS0+IHZhbHVlRnJvbVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhd3MuVG9rZW4uaXNVbnJlc29sdmVkKGVudlZhci52YWx1ZSkpIHtcbiAgICAgICAgICAvLyBubyBjb252ZXJzaW9uIG5lY2Vzc2FyeVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoZW52VmFyLnZhbHVlKTtcblxuICAgICAgICBpZiAodHlwZW9mKHJlc29sdmVkKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMuLi5za2lwIGluIHRoZSBtZWFudGltZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMocmVzb2x2ZWQpWzBdO1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKCdGbjo6R2V0QXR0JykpIHtcbiAgICAgICAgICAvLyBub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMuLi5za2lwIGluIHRoZSBtZWFudGltZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkKVswXSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgbG9naWNhbElkID0gdmFsdWVbMF07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHZhbHVlWzFdO1xuXG4gICAgICAgIC8vIGxvY2F0ZSB0aGUgZmllbGQgZXhwb3J0cyB0aGF0IGlzIG1hcHBlZCB0byB0aGlzIGF0dHJpYnV0ZS5cbiAgICAgICAgY29uc3QgZmllbGRFeHBvcnQgPSB0aGlzLnRyeUZpbmRGaWVsZEV4cG9ydChsb2dpY2FsSWQsIGF0dHJpYnV0ZSk7XG4gICAgICAgIGlmICghZmllbGRFeHBvcnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byB0cmFuc2Zvcm0gYXR0cmlidXRlICcke0pTT04uc3RyaW5naWZ5KHJlc29sdmVkKX0nIGZvciBlbnYgdmFyaWFibGUgJyR7ZW52VmFyLm5hbWV9JyBpbiByZXNvdXJjZSAnJHtyZXNvdXJjZS5uYW1lfSc6IEZpZWxkIGV4cG9ydCBub3QgcmVnaXN0ZXJlZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkRXhwb3J0U3BlYzoga2ZpZWxkZXhwb3J0cy5GaWVsZEV4cG9ydFNwZWMgPSBmaWVsZEV4cG9ydC50b0pzb24oKS5zcGVjO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBmaWVsZEV4cG9ydC5tZXRhZGF0YS5uYW1lc3BhY2UgPz8gJ2RlZmF1bHQnO1xuXG4gICAgICAgIHJlc291cmNlLmFkZEpzb25QYXRjaChrLkpzb25QYXRjaC5yZW1vdmUoYCR7cGF0aH0vJHtpfS9lbnYvJHtqfWApKTtcbiAgICAgICAgcmVzb3VyY2UuYWRkSnNvblBhdGNoKGsuSnNvblBhdGNoLmFkZChgJHtwYXRofS8ke2l9L2Vudi8ke2p9YCwge1xuICAgICAgICAgIG5hbWU6IGVudlZhci5uYW1lLFxuICAgICAgICAgIHZhbHVlRnJvbToge1xuICAgICAgICAgICAgY29uZmlnTWFwS2V5UmVmOiB7XG4gICAgICAgICAgICAgIGtleTogYCR7bmFtZXNwYWNlfS4ke2ZpZWxkRXhwb3J0Lm5hbWV9YCxcbiAgICAgICAgICAgICAgbmFtZTogZmllbGRFeHBvcnRTcGVjLnRvLm5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbnRyaW5zaWNzKGxvZ2ljYWxJZDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBhbnksIG1hcHBlcjogbWFwcGVycy5DbG91ZEZvcm1hdGlvblJlc291cmNlTWFwcGVyKSB7XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMsIChrZXksIHZhbHVlKSA9PiB7XG5cbiAgICAgIGlmICh0eXBlb2YodmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBub3QgYW4gYXR0cmlidXRlXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgLy8gZGVmaW5pdGVseSBub3QgYW4gaW50cmluc2ljLCB3aGljaCB0YWtlcyB0aGUgZm9ybSAneyBrZXk6IHZhbHVlIH0nXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlID0gT2JqZWN0LmtleXModmFsdWUpWzBdO1xuICAgICAgY29uc3QgcmVmTG9naWNhbElkID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSlbMF07XG5cbiAgICAgIGlmIChhdHRyaWJ1dGUuc3RhcnRzV2l0aCgnRm46OicpKSB7XG4gICAgICAgIC8vIEFDSyBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgRm46OiBpbnRyaW5zaWNzIGF0IHRoZSBtb21lbnQuXG4gICAgICAgIC8vIGFjdHVhbGx5IC0tIHRoYXRzIG5vdCBlbnRpcmVseSB0cnVlLCBzb21lIHJlc291cmNlcyBkbyBoYXZlIGEgd2F5IHRvIHBhc3NcbiAgICAgICAgLy8gdmFsdWVzIGJ5IHJlZmVyZW5jaW5nIG90aGVyIHJlc291cmNlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gcGFzcyBhIGB2cGNSZWZgXG4gICAgICAgIC8vIHRvIGEgc2VjdXJpdHkgZ3JvdXAsIGluc3RlYWQgb2YgdGhlIGFjdHVhbCB2cGMgaWQuIGJ1dCBJIGhhdmUgeWV0IHRvIGxpc3QgdGhvc2Ugb3V0LFxuICAgICAgICAvLyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIGludHJpbnNpYyBmdW5jdGlvbiAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9JyBpbiBwcm9wZXJ0eSAnJHtrZXl9JyBvZiByZXNvdXJjZSAnJHtsb2dpY2FsSWR9J2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cmlidXRlICE9PSAnUmVmJykge1xuICAgICAgICAvLyBwcm9iYWJseSBqdXN0IGEgY29tcGxleHQgdmFsdWUsIG1vdmUgb24uLi5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBjYW4gcmVzb2x2ZSAnUmVmJyBiZWNhdXNlIHdlIGtub3cgYWxsIHJlc291cmNlIG5hbWVzIGF0IHN5bnRoIHRpbWUuXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmNoYXJ0Lm5vZGUuZmluZENoaWxkKHJlZkxvZ2ljYWxJZCBhcyBzdHJpbmcpO1xuICAgICAgc3dpdGNoIChtYXBwZXIucmVmTWFwcGluZykge1xuICAgICAgICBjYXNlIG1hcHBlcnMuQ2xvdWRGb3JtYXRpb25NYXBwZXJSZWZNYXBwaW5nLk5BTUU6XG4gICAgICAgICAgcmV0dXJuIGsuQXBpT2JqZWN0Lm9mKHJlZmVyZW5jZSkubmFtZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJlZiBtYXBwaW5nOiAke21hcHBlci5yZWZNYXBwaW5nfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzb2x2ZWQpO1xuXG4gIH1cblxuICBwcml2YXRlIHRyeUZpbmRNYXBwZXIoY2ZuVHlwZTogc3RyaW5nKTogbWFwcGVycy5DbG91ZEZvcm1hdGlvblJlc291cmNlTWFwcGVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwcGVyc1tjZm5UeXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5RmluZEZpZWxkRXhwb3J0KGxvZ2ljYWxJZDogc3RyaW5nLCBhdHRyOiBzdHJpbmcpOiBrZmllbGRleHBvcnRzLkZpZWxkRXhwb3J0IHtcbiAgICByZXR1cm4gdGhpcy5jaGFydC5ub2RlLnRyeUZpbmRDaGlsZCh0aGlzLmZpZWxkRXhwb3J0SWQobG9naWNhbElkLCBhdHRyKSkgYXMga2ZpZWxkZXhwb3J0cy5GaWVsZEV4cG9ydDtcbiAgfVxuXG4gIHByaXZhdGUgZmllbGRFeHBvcnRJZChsb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7bG9naWNhbElkfSR7YXR0cmlidXRlfWA7XG4gIH1cblxuICBwcml2YXRlIGZpZWxkRXhwb3J0UGF0aChmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAuc3RhdHVzLiR7ZmllbGR9YDtcbiAgfVxuXG59XG4iXX0=
package/lib/chart.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import * as k from 'cdk8s';
2
+ import { Construct } from 'constructs';
3
+ import * as adapter from './adapter';
4
+ import * as mappers from './mappers';
5
+ export declare class Chart extends k.Chart {
6
+ protected readonly adapter: adapter.AwsCdkAdapater;
7
+ constructor(scope: Construct, id: string, props?: k.ChartProps);
8
+ private _validate;
9
+ /**
10
+ * Monkey patches the chart to also inherit from an AWS CDK stack.
11
+ * This makes it so the chart can be passed as a scope of AWS CDK constructs.
12
+ */
13
+ private _inheritStack;
14
+ /**
15
+ * Registers a new mapper.
16
+ */
17
+ protected registerMapper(mapper: mappers.CloudFormationResourceMapper): void;
18
+ }
19
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../src/chart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAIrC,qBAAa,KAAM,SAAQ,CAAC,CAAC,KAAK;IAEhC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC;gBAEvC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,CAAC,UAAgB;IAUnE,OAAO,CAAC,SAAS;IAejB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,4BAA4B;CAItE"}
package/lib/chart.js ADDED
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Chart = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws = require("aws-cdk-lib");
7
+ const k = require("cdk8s");
8
+ const adapter = require("./adapter");
9
+ const STACK_SYMBOL = Symbol.for('@aws-cdk/core.Stack');
10
+ class Chart extends k.Chart {
11
+ constructor(scope, id, props = {}) {
12
+ super(scope, id, props);
13
+ this.adapter = new adapter.AwsCdkAdapater(this, 'AwsCdkAdapter', { chart: this });
14
+ this._inheritStack();
15
+ // hack that allows us to inject code just before cdk8s synthesis.
16
+ // TODO - figure out a proper hook for synthesis in cdk8s (or maybe constructs?)
17
+ this.node.addValidation({ validate: () => this._validate() });
18
+ }
19
+ _validate() {
20
+ const cfnResources = this.node.findAll().filter(n => aws.CfnResource.isCfnResource(n));
21
+ const apiObjects = this.node.findAll().filter(n => n instanceof k.ApiObject);
22
+ // transform all cfn resources to ack resources
23
+ this.adapter.transformResources(cfnResources);
24
+ // transform cfn attributes to field exports
25
+ this.adapter.transformAttributes(apiObjects);
26
+ // hack, we need to return something...
27
+ return [];
28
+ }
29
+ /**
30
+ * Monkey patches the chart to also inherit from an AWS CDK stack.
31
+ * This makes it so the chart can be passed as a scope of AWS CDK constructs.
32
+ */
33
+ _inheritStack() {
34
+ Object.defineProperty(this, STACK_SYMBOL, { value: true });
35
+ const stackMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(this.adapter)));
36
+ const adapterProperties = Object.getOwnPropertyNames(this.adapter);
37
+ for (const p of [...stackMethods, ...adapterProperties]) {
38
+ if (['constructor', 'node'].includes(p)) {
39
+ continue;
40
+ }
41
+ ;
42
+ const v = this.adapter[p];
43
+ if (typeof (v) === 'function') {
44
+ // this is...adventurous? yeah...
45
+ const n = new Function('...args', `return this.adapter.${p}(...args);`);
46
+ Object.defineProperty(this, p, { value: n });
47
+ }
48
+ else {
49
+ Object.defineProperty(this, p, { value: v });
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Registers a new mapper.
55
+ */
56
+ registerMapper(mapper) {
57
+ this.adapter.registerMapper(mapper);
58
+ }
59
+ }
60
+ exports.Chart = Chart;
61
+ _a = JSII_RTTI_SYMBOL_1;
62
+ Chart[_a] = { fqn: "cdk8s-aws-cdk.Chart", version: "0.0.5" };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsMkJBQTJCO0FBRTNCLHFDQUFxQztBQUdyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFdkQsTUFBYSxLQUFNLFNBQVEsQ0FBQyxDQUFDLEtBQUs7SUFJaEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFzQixFQUFHO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsa0VBQWtFO1FBQ2xFLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxTQUFTO1FBRWYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBc0IsQ0FBQztRQUM1RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFrQixDQUFDO1FBRTlGLCtDQUErQztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTlDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdDLHVDQUF1QztRQUN2QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhO1FBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsRUFBRTtZQUV2RCxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsU0FBUzthQUNWO1lBQUEsQ0FBQztZQUVGLE1BQU0sQ0FBQyxHQUFJLElBQUksQ0FBQyxPQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkMsSUFBSSxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUM1QixpQ0FBaUM7Z0JBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDOUM7U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLGNBQWMsQ0FBQyxNQUE0QztRQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDOztBQTVESCxzQkE4REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhd3MgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgayBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGFkYXB0ZXIgZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCAqIGFzIG1hcHBlcnMgZnJvbSAnLi9tYXBwZXJzJztcblxuY29uc3QgU1RBQ0tfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvY29yZS5TdGFjaycpO1xuXG5leHBvcnQgY2xhc3MgQ2hhcnQgZXh0ZW5kcyBrLkNoYXJ0IHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRhcHRlcjogYWRhcHRlci5Bd3NDZGtBZGFwYXRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogay5DaGFydFByb3BzID0geyB9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5hZGFwdGVyID0gbmV3IGFkYXB0ZXIuQXdzQ2RrQWRhcGF0ZXIodGhpcywgJ0F3c0Nka0FkYXB0ZXInLCB7IGNoYXJ0OiB0aGlzIH0pO1xuICAgIHRoaXMuX2luaGVyaXRTdGFjaygpO1xuXG4gICAgLy8gaGFjayB0aGF0IGFsbG93cyB1cyB0byBpbmplY3QgY29kZSBqdXN0IGJlZm9yZSBjZGs4cyBzeW50aGVzaXMuXG4gICAgLy8gVE9ETyAtIGZpZ3VyZSBvdXQgYSBwcm9wZXIgaG9vayBmb3Igc3ludGhlc2lzIGluIGNkazhzIChvciBtYXliZSBjb25zdHJ1Y3RzPylcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiAoKSA9PiB0aGlzLl92YWxpZGF0ZSgpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuXG4gICAgY29uc3QgY2ZuUmVzb3VyY2VzID0gdGhpcy5ub2RlLmZpbmRBbGwoKS5maWx0ZXIobiA9PiBhd3MuQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShuKSkgYXMgYXdzLkNmblJlc291cmNlW107XG4gICAgY29uc3QgYXBpT2JqZWN0cyA9IHRoaXMubm9kZS5maW5kQWxsKCkuZmlsdGVyKG4gPT4gbiBpbnN0YW5jZW9mIGsuQXBpT2JqZWN0KSBhcyBrLkFwaU9iamVjdFtdO1xuXG4gICAgLy8gdHJhbnNmb3JtIGFsbCBjZm4gcmVzb3VyY2VzIHRvIGFjayByZXNvdXJjZXNcbiAgICB0aGlzLmFkYXB0ZXIudHJhbnNmb3JtUmVzb3VyY2VzKGNmblJlc291cmNlcyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0gY2ZuIGF0dHJpYnV0ZXMgdG8gZmllbGQgZXhwb3J0c1xuICAgIHRoaXMuYWRhcHRlci50cmFuc2Zvcm1BdHRyaWJ1dGVzKGFwaU9iamVjdHMpO1xuXG4gICAgLy8gaGFjaywgd2UgbmVlZCB0byByZXR1cm4gc29tZXRoaW5nLi4uXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbmtleSBwYXRjaGVzIHRoZSBjaGFydCB0byBhbHNvIGluaGVyaXQgZnJvbSBhbiBBV1MgQ0RLIHN0YWNrLlxuICAgKiBUaGlzIG1ha2VzIGl0IHNvIHRoZSBjaGFydCBjYW4gYmUgcGFzc2VkIGFzIGEgc2NvcGUgb2YgQVdTIENESyBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5oZXJpdFN0YWNrKCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTVEFDS19TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RhY2tNZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLmFkYXB0ZXIpKSk7XG4gICAgY29uc3QgYWRhcHRlclByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmFkYXB0ZXIpO1xuICAgIGZvciAoY29uc3QgcCBvZiBbLi4uc3RhY2tNZXRob2RzLCAuLi5hZGFwdGVyUHJvcGVydGllc10pIHtcblxuICAgICAgaWYgKFsnY29uc3RydWN0b3InLCAnbm9kZSddLmluY2x1ZGVzKHApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdiA9ICh0aGlzLmFkYXB0ZXIgYXMgYW55KVtwXTtcblxuICAgICAgaWYgKHR5cGVvZih2KSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyB0aGlzIGlzLi4uYWR2ZW50dXJvdXM/IHllYWguLi5cbiAgICAgICAgY29uc3QgbiA9IG5ldyBGdW5jdGlvbignLi4uYXJncycsIGByZXR1cm4gdGhpcy5hZGFwdGVyLiR7cH0oLi4uYXJncyk7YCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwLCB7IHZhbHVlOiBuIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHAsIHsgdmFsdWU6IHYgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG5ldyBtYXBwZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXJNYXBwZXIobWFwcGVyOiBtYXBwZXJzLkNsb3VkRm9ybWF0aW9uUmVzb3VyY2VNYXBwZXIpIHtcbiAgICB0aGlzLmFkYXB0ZXIucmVnaXN0ZXJNYXBwZXIobWFwcGVyKTtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,106 @@
1
+ import { ApiObject, ApiObjectMetadata, GroupVersionKind } from 'cdk8s';
2
+ import { Construct } from 'constructs';
3
+ /**
4
+ * Resource is the Schema for the Resources API
5
+ *
6
+ * @schema Resource
7
+ */
8
+ export declare class Resource extends ApiObject {
9
+ /**
10
+ * Returns the apiVersion and kind for "Resource"
11
+ */
12
+ static readonly GVK: GroupVersionKind;
13
+ /**
14
+ * Renders a Kubernetes manifest for "Resource".
15
+ *
16
+ * This can be used to inline resource manifests inside other objects (e.g. as templates).
17
+ *
18
+ * @param props initialization props
19
+ */
20
+ static manifest(props?: ResourceProps): any;
21
+ /**
22
+ * Defines a "Resource" API object
23
+ * @param scope the scope in which to define this object
24
+ * @param id a scope-local name for the object
25
+ * @param props initialization props
26
+ */
27
+ constructor(scope: Construct, id: string, props?: ResourceProps);
28
+ /**
29
+ * Renders the object to Kubernetes JSON.
30
+ */
31
+ toJson(): any;
32
+ }
33
+ /**
34
+ * Resource is the Schema for the Resources API
35
+ *
36
+ * @schema Resource
37
+ */
38
+ export interface ResourceProps {
39
+ /**
40
+ * @schema Resource#metadata
41
+ */
42
+ readonly metadata?: ApiObjectMetadata;
43
+ /**
44
+ * ResourceSpec defines the desired state of Resource.
45
+ *
46
+ * @schema Resource#spec
47
+ */
48
+ readonly spec?: ResourceSpec;
49
+ }
50
+ /**
51
+ * Converts an object of type 'ResourceProps' to JSON representation.
52
+ */
53
+ export declare function toJson_ResourceProps(obj: ResourceProps | undefined): Record<string, any> | undefined;
54
+ /**
55
+ * ResourceSpec defines the desired state of Resource.
56
+ *
57
+ * @schema ResourceSpec
58
+ */
59
+ export interface ResourceSpec {
60
+ /**
61
+ * A unique identifier to ensure the idempotency of the resource request. As a best practice, specify this token to ensure idempotency, so that Amazon Web Services Cloud Control API can accurately distinguish between request retries and new resource requests. You might retry a resource request to ensure that it was successfully received.
62
+ * A client token is valid for 36 hours once used. After that, a resource request with the same client token is treated as a new request.
63
+ * If you do not specify a client token, one is generated for inclusion in the request.
64
+ * For more information, see Ensuring resource operation requests are unique (https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-operations.html#resource-operations-idempotency) in the Amazon Web Services Cloud Control API User Guide.
65
+ *
66
+ * @schema ResourceSpec#clientToken
67
+ */
68
+ readonly clientToken?: string;
69
+ /**
70
+ * Structured data format representing the desired state of the resource, consisting of that resource's properties and their desired values.
71
+ * Cloud Control API currently supports JSON as a structured data format.
72
+ * Specify the desired state as one of the following:
73
+ * * A JSON blob
74
+ * * A local path containing the desired state in JSON data format
75
+ * For more information, see Composing the desired state of the resource (https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-operations-create.html#resource-operations-create-desiredstate) in the Amazon Web Services Cloud Control API User Guide.
76
+ * For more information about the properties of a specific resource, refer to the related topic for the resource in the Resource and property types reference (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) in the Amazon Web Services CloudFormation Users Guide.
77
+ *
78
+ * @schema ResourceSpec#desiredState
79
+ */
80
+ readonly desiredState: string;
81
+ /**
82
+ * The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) for Cloud Control API to use when performing this resource operation. The role specified must have the permissions required for this operation. The necessary permissions for each event handler are defined in the handlers (https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html#schema-properties-handlers) section of the resource type definition schema (https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html).
83
+ * If you do not specify a role, Cloud Control API uses a temporary session created using your Amazon Web Services user credentials.
84
+ * For more information, see Specifying credentials (https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/resource-operations.html#resource-operations-permissions) in the Amazon Web Services Cloud Control API User Guide.
85
+ *
86
+ * @schema ResourceSpec#roleARN
87
+ */
88
+ readonly roleArn?: string;
89
+ /**
90
+ * The name of the resource type.
91
+ *
92
+ * @schema ResourceSpec#typeName
93
+ */
94
+ readonly typeName: string;
95
+ /**
96
+ * For private resource types, the type version to use in this resource operation. If you do not specify a resource version, CloudFormation uses the default version.
97
+ *
98
+ * @schema ResourceSpec#typeVersionID
99
+ */
100
+ readonly typeVersionId?: string;
101
+ }
102
+ /**
103
+ * Converts an object of type 'ResourceSpec' to JSON representation.
104
+ */
105
+ export declare function toJson_ResourceSpec(obj: ResourceSpec | undefined): Record<string, any> | undefined;
106
+ //# sourceMappingURL=cloudcontrol.services.k8s.aws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudcontrol.services.k8s.aws.d.ts","sourceRoot":"","sources":["../../src/imports/cloudcontrol.services.k8s.aws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC;;OAEG;IACH,gBAAuB,GAAG,EAAE,gBAAgB,CAG1C;IAEF;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,GAAE,aAAkB,GAAG,GAAG;IAOtD;;;;;OAKG;gBACgB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,aAAkB;IAO1E;;OAEG;IACI,MAAM,IAAI,GAAG;CAQrB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;CAE9B;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAQpG;AAGD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAEjC;AAED;;GAEG;AAEH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAWlG"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toJson_ResourceSpec = exports.toJson_ResourceProps = exports.Resource = void 0;
4
+ // generated by cdk8s
5
+ const cdk8s_1 = require("cdk8s");
6
+ /**
7
+ * Resource is the Schema for the Resources API
8
+ *
9
+ * @schema Resource
10
+ */
11
+ class Resource extends cdk8s_1.ApiObject {
12
+ /**
13
+ * Defines a "Resource" API object
14
+ * @param scope the scope in which to define this object
15
+ * @param id a scope-local name for the object
16
+ * @param props initialization props
17
+ */
18
+ constructor(scope, id, props = {}) {
19
+ super(scope, id, {
20
+ ...Resource.GVK,
21
+ ...props,
22
+ });
23
+ }
24
+ /**
25
+ * Renders a Kubernetes manifest for "Resource".
26
+ *
27
+ * This can be used to inline resource manifests inside other objects (e.g. as templates).
28
+ *
29
+ * @param props initialization props
30
+ */
31
+ static manifest(props = {}) {
32
+ return {
33
+ ...Resource.GVK,
34
+ ...toJson_ResourceProps(props),
35
+ };
36
+ }
37
+ /**
38
+ * Renders the object to Kubernetes JSON.
39
+ */
40
+ toJson() {
41
+ const resolved = super.toJson();
42
+ return {
43
+ ...Resource.GVK,
44
+ ...toJson_ResourceProps(resolved),
45
+ };
46
+ }
47
+ }
48
+ exports.Resource = Resource;
49
+ /**
50
+ * Returns the apiVersion and kind for "Resource"
51
+ */
52
+ Resource.GVK = {
53
+ apiVersion: 'cloudcontrol.services.k8s.aws/v1alpha1',
54
+ kind: 'Resource',
55
+ };
56
+ /**
57
+ * Converts an object of type 'ResourceProps' to JSON representation.
58
+ */
59
+ /* eslint-disable max-len, quote-props */
60
+ function toJson_ResourceProps(obj) {
61
+ if (obj === undefined) {
62
+ return undefined;
63
+ }
64
+ const result = {
65
+ 'metadata': obj.metadata,
66
+ 'spec': toJson_ResourceSpec(obj.spec),
67
+ };
68
+ // filter undefined values
69
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
70
+ }
71
+ exports.toJson_ResourceProps = toJson_ResourceProps;
72
+ /**
73
+ * Converts an object of type 'ResourceSpec' to JSON representation.
74
+ */
75
+ /* eslint-disable max-len, quote-props */
76
+ function toJson_ResourceSpec(obj) {
77
+ if (obj === undefined) {
78
+ return undefined;
79
+ }
80
+ const result = {
81
+ 'clientToken': obj.clientToken,
82
+ 'desiredState': obj.desiredState,
83
+ 'roleARN': obj.roleArn,
84
+ 'typeName': obj.typeName,
85
+ 'typeVersionID': obj.typeVersionId,
86
+ };
87
+ // filter undefined values
88
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
89
+ }
90
+ exports.toJson_ResourceSpec = toJson_ResourceSpec;
91
+ /* eslint-enable max-len, quote-props */
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRjb250cm9sLnNlcnZpY2VzLms4cy5hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0cy9jbG91ZGNvbnRyb2wuc2VydmljZXMuazhzLmF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQkFBcUI7QUFDckIsaUNBQXVFO0FBSXZFOzs7O0dBSUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxpQkFBUztJQXVCckM7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF1QixFQUFFO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxRQUFRLENBQUMsR0FBRztZQUNmLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUF6QkQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUF1QixFQUFFO1FBQzlDLE9BQU87WUFDTCxHQUFHLFFBQVEsQ0FBQyxHQUFHO1lBQ2YsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFlRDs7T0FFRztJQUNJLE1BQU07UUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsT0FBTztZQUNMLEdBQUcsUUFBUSxDQUFDLEdBQUc7WUFDZixHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQzs7QUE5Q0gsNEJBK0NDO0FBOUNDOztHQUVHO0FBQ29CLFlBQUcsR0FBcUI7SUFDN0MsVUFBVSxFQUFFLHdDQUF3QztJQUNwRCxJQUFJLEVBQUUsVUFBVTtDQUNqQixDQUFDO0FBOERKOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLG9CQUFvQixDQUFDLEdBQThCO0lBQ2pFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDeEIsTUFBTSxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDdEMsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsb0RBUUM7QUF5REQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsbUJBQW1CLENBQUMsR0FBNkI7SUFDL0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM5QixjQUFjLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDaEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3RCLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN4QixlQUFlLEVBQUUsR0FBRyxDQUFDLGFBQWE7S0FDbkMsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBWEQsa0RBV0M7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIFJlc291cmNlIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBSZXNvdXJjZXMgQVBJXG4gKlxuICogQHNjaGVtYSBSZXNvdXJjZVxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJSZXNvdXJjZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnY2xvdWRjb250cm9sLnNlcnZpY2VzLms4cy5hd3MvdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdSZXNvdXJjZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIlJlc291cmNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IFJlc291cmNlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlJlc291cmNlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9SZXNvdXJjZVByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIlJlc291cmNlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZXNvdXJjZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLlJlc291cmNlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5SZXNvdXJjZS5HVkssXG4gICAgICAuLi50b0pzb25fUmVzb3VyY2VQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc291cmNlIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBSZXNvdXJjZXMgQVBJXG4gKlxuICogQHNjaGVtYSBSZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBSZXNvdXJjZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogUmVzb3VyY2VTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgUmVzb3VyY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVzb3VyY2Ujc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFJlc291cmNlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdSZXNvdXJjZVByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9SZXNvdXJjZVByb3BzKG9iajogUmVzb3VyY2VQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX1Jlc291cmNlU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogUmVzb3VyY2VTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgUmVzb3VyY2UuXG4gKlxuICogQHNjaGVtYSBSZXNvdXJjZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVNwZWMge1xuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXNvdXJjZSByZXF1ZXN0LiBBcyBhIGJlc3QgcHJhY3RpY2UsIHNwZWNpZnkgdGhpcyB0b2tlbiB0byBlbnN1cmUgaWRlbXBvdGVuY3ksIHNvIHRoYXQgQW1hem9uIFdlYiBTZXJ2aWNlcyBDbG91ZCBDb250cm9sIEFQSSBjYW4gYWNjdXJhdGVseSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlcXVlc3QgcmV0cmllcyBhbmQgbmV3IHJlc291cmNlIHJlcXVlc3RzLiBZb3UgbWlnaHQgcmV0cnkgYSByZXNvdXJjZSByZXF1ZXN0IHRvIGVuc3VyZSB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQuXG4gICAqIEEgY2xpZW50IHRva2VuIGlzIHZhbGlkIGZvciAzNiBob3VycyBvbmNlIHVzZWQuIEFmdGVyIHRoYXQsIGEgcmVzb3VyY2UgcmVxdWVzdCB3aXRoIHRoZSBzYW1lIGNsaWVudCB0b2tlbiBpcyB0cmVhdGVkIGFzIGEgbmV3IHJlcXVlc3QuXG4gICAqIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsaWVudCB0b2tlbiwgb25lIGlzIGdlbmVyYXRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSByZXF1ZXN0LlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEVuc3VyaW5nIHJlc291cmNlIG9wZXJhdGlvbiByZXF1ZXN0cyBhcmUgdW5pcXVlIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRjb250cm9sYXBpL2xhdGVzdC91c2VyZ3VpZGUvcmVzb3VyY2Utb3BlcmF0aW9ucy5odG1sI3Jlc291cmNlLW9wZXJhdGlvbnMtaWRlbXBvdGVuY3kpIGluIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIENsb3VkIENvbnRyb2wgQVBJIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVzb3VyY2VTcGVjI2NsaWVudFRva2VuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3RydWN0dXJlZCBkYXRhIGZvcm1hdCByZXByZXNlbnRpbmcgdGhlIGRlc2lyZWQgc3RhdGUgb2YgdGhlIHJlc291cmNlLCBjb25zaXN0aW5nIG9mIHRoYXQgcmVzb3VyY2UncyBwcm9wZXJ0aWVzIGFuZCB0aGVpciBkZXNpcmVkIHZhbHVlcy5cbiAgICogQ2xvdWQgQ29udHJvbCBBUEkgY3VycmVudGx5IHN1cHBvcnRzIEpTT04gYXMgYSBzdHJ1Y3R1cmVkIGRhdGEgZm9ybWF0LlxuICAgKiBTcGVjaWZ5IHRoZSBkZXNpcmVkIHN0YXRlIGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgKiAqIEEgSlNPTiBibG9iXG4gICAqICogQSBsb2NhbCBwYXRoIGNvbnRhaW5pbmcgdGhlIGRlc2lyZWQgc3RhdGUgaW4gSlNPTiBkYXRhIGZvcm1hdFxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIENvbXBvc2luZyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiB0aGUgcmVzb3VyY2UgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZGNvbnRyb2xhcGkvbGF0ZXN0L3VzZXJndWlkZS9yZXNvdXJjZS1vcGVyYXRpb25zLWNyZWF0ZS5odG1sI3Jlc291cmNlLW9wZXJhdGlvbnMtY3JlYXRlLWRlc2lyZWRzdGF0ZSkgaW4gdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgQ2xvdWQgQ29udHJvbCBBUEkgVXNlciBHdWlkZS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3BlcnRpZXMgb2YgYSBzcGVjaWZpYyByZXNvdXJjZSwgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgdG9waWMgZm9yIHRoZSByZXNvdXJjZSBpbiB0aGUgUmVzb3VyY2UgYW5kIHByb3BlcnR5IHR5cGVzIHJlZmVyZW5jZSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXRlbXBsYXRlLXJlc291cmNlLXR5cGUtcmVmLmh0bWwpIGluIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIENsb3VkRm9ybWF0aW9uIFVzZXJzIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFJlc291cmNlU3BlYyNkZXNpcmVkU3RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRTdGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBmb3IgQ2xvdWQgQ29udHJvbCBBUEkgdG8gdXNlIHdoZW4gcGVyZm9ybWluZyB0aGlzIHJlc291cmNlIG9wZXJhdGlvbi4gVGhlIHJvbGUgc3BlY2lmaWVkIG11c3QgaGF2ZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoaXMgb3BlcmF0aW9uLiBUaGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciBlYWNoIGV2ZW50IGhhbmRsZXIgYXJlIGRlZmluZWQgaW4gdGhlIGhhbmRsZXJzIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmb3JtYXRpb24tY2xpL2xhdGVzdC91c2VyZ3VpZGUvcmVzb3VyY2UtdHlwZS1zY2hlbWEuaHRtbCNzY2hlbWEtcHJvcGVydGllcy1oYW5kbGVycykgc2VjdGlvbiBvZiB0aGUgcmVzb3VyY2UgdHlwZSBkZWZpbml0aW9uIHNjaGVtYSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZm9ybWF0aW9uLWNsaS9sYXRlc3QvdXNlcmd1aWRlL3Jlc291cmNlLXR5cGUtc2NoZW1hLmh0bWwpLlxuICAgKiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSByb2xlLCBDbG91ZCBDb250cm9sIEFQSSB1c2VzIGEgdGVtcG9yYXJ5IHNlc3Npb24gY3JlYXRlZCB1c2luZyB5b3VyIEFtYXpvbiBXZWIgU2VydmljZXMgdXNlciBjcmVkZW50aWFscy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBTcGVjaWZ5aW5nIGNyZWRlbnRpYWxzIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRjb250cm9sYXBpL2xhdGVzdC91c2VyZ3VpZGUvcmVzb3VyY2Utb3BlcmF0aW9ucy5odG1sI3Jlc291cmNlLW9wZXJhdGlvbnMtcGVybWlzc2lvbnMpIGluIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIENsb3VkIENvbnRyb2wgQVBJIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVzb3VyY2VTcGVjI3JvbGVBUk5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0eXBlLlxuICAgKlxuICAgKiBAc2NoZW1hIFJlc291cmNlU3BlYyN0eXBlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHByaXZhdGUgcmVzb3VyY2UgdHlwZXMsIHRoZSB0eXBlIHZlcnNpb24gdG8gdXNlIGluIHRoaXMgcmVzb3VyY2Ugb3BlcmF0aW9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSByZXNvdXJjZSB2ZXJzaW9uLCBDbG91ZEZvcm1hdGlvbiB1c2VzIHRoZSBkZWZhdWx0IHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUmVzb3VyY2VTcGVjI3R5cGVWZXJzaW9uSURcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVWZXJzaW9uSWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUmVzb3VyY2VTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9SZXNvdXJjZVNwZWMob2JqOiBSZXNvdXJjZVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjbGllbnRUb2tlbic6IG9iai5jbGllbnRUb2tlbixcbiAgICAnZGVzaXJlZFN0YXRlJzogb2JqLmRlc2lyZWRTdGF0ZSxcbiAgICAncm9sZUFSTic6IG9iai5yb2xlQXJuLFxuICAgICd0eXBlTmFtZSc6IG9iai50eXBlTmFtZSxcbiAgICAndHlwZVZlcnNpb25JRCc6IG9iai50eXBlVmVyc2lvbklkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4iXX0=