cdk-import 0.1.7 → 0.1.8

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.
@@ -15,14 +15,41 @@ class CfnResourceGenerator {
15
15
  * @param schema the schema of the resource type for input and output properties
16
16
  */
17
17
  constructor(typeName, typeDef, schema) {
18
+ var _a;
18
19
  this.typeName = typeName;
19
20
  this.typeDef = typeDef;
20
21
  this.schema = schema;
21
22
  this.sanitizedTypeName = (0, util_1.sanitizeTypeName)(typeName);
22
- this.resourceAttributes = this.schema.readOnlyProperties ? this.schema.readOnlyProperties.map((prop) => prop.replace(/^\/properties\//, '')) : [];
23
- this.resourceProperties = Object.keys(this.schema.properties).filter(prop => this.resourceAttributes.indexOf(prop) === -1);
23
+ // this.resourceAttributes = this.schema.readOnlyProperties ? this.schema.readOnlyProperties.map((prop: string) => prop.replace(/^\/properties\//, '')) : [];
24
+ // this.resourceProperties = Object.keys(this.schema.properties).filter(prop => this.resourceAttributes.indexOf(prop) === -1);
24
25
  this.constructClassName = `Cfn${this.sanitizedTypeName}`;
25
26
  this.propsStructName = `${this.constructClassName}Props`;
27
+ this.resourceAttributes = new Array();
28
+ this.resourceProperties = new Array();
29
+ const props = (_a = this.schema.properties) !== null && _a !== void 0 ? _a : {};
30
+ const attributeNames = this.schema.readOnlyProperties
31
+ ? this.schema.readOnlyProperties.map((prop) => prop.replace(/^\/properties\//, ''))
32
+ : [];
33
+ for (const attr of attributeNames) {
34
+ const def = props[attr];
35
+ if (!def) {
36
+ console.warn(`Unresolvable read-only property (attribute) ${typeName}.${attr}`);
37
+ continue;
38
+ }
39
+ // verify that the type of the attribute is a primitive
40
+ if (def.type !== 'string' && def.type !== 'number') {
41
+ console.warn(`Unsupported type ${JSON.stringify(def)} for read-only property (attribute) ${typeName}.${attr}`);
42
+ continue;
43
+ }
44
+ this.resourceAttributes.push(attr);
45
+ }
46
+ for (const prop of Object.keys(props)) {
47
+ // if this is a read-only property, consider it an attribute
48
+ if (attributeNames.includes(prop)) {
49
+ continue;
50
+ }
51
+ this.resourceProperties.push(prop);
52
+ }
26
53
  }
27
54
  /**
28
55
  * Render the type into a TypeScript class fil defining the props and the L1 construct
@@ -62,7 +89,9 @@ class CfnResourceGenerator {
62
89
  code.line(' *');
63
90
  code.line(` * @cloudformationResource ${this.typeName}`);
64
91
  code.line(' * @stability external');
65
- code.line(` * @link ${this.typeDef.SourceUrl}`);
92
+ if (this.typeDef.SourceUrl) {
93
+ code.line(` * @link ${this.typeDef.SourceUrl}`);
94
+ }
66
95
  code.line(' */');
67
96
  code.openBlock(`export class ${this.constructClassName} extends cdk.CfnResource`);
68
97
  code.line('/**');
@@ -77,14 +106,18 @@ class CfnResourceGenerator {
77
106
  if (this.schema.properties[prop].description) {
78
107
  code.line(` * ${this.schema.properties[prop].description}`);
79
108
  }
80
- code.line(` * @link ${this.typeDef.SourceUrl}`);
109
+ if (this.typeDef.SourceUrl) {
110
+ code.line(` * @link ${this.typeDef.SourceUrl}`);
111
+ }
81
112
  code.line(' */');
82
113
  code.line(`public readonly ${(0, case_1.camel)(prop)}: ${this.getTypeOfProperty(prop)}${optionalMarker};`);
83
114
  }
84
115
  for (const prop of this.resourceAttributes) {
85
116
  code.line('/**');
86
117
  code.line(` * Attribute \`${this.typeName}.${prop}\``);
87
- code.line(` * @link ${this.typeDef.SourceUrl}`);
118
+ if (this.typeDef.SourceUrl) {
119
+ code.line(` * @link ${this.typeDef.SourceUrl}`);
120
+ }
88
121
  code.line(' */');
89
122
  code.line(`public readonly attr${(0, case_1.pascal)(prop)}: ${this.getTypeOfProperty(prop)};`);
90
123
  }
@@ -134,6 +167,10 @@ class CfnResourceGenerator {
134
167
  return 'string';
135
168
  case 'array':
136
169
  return `${this.getTypeFromSchema(prop.items)}[]`;
170
+ case 'number':
171
+ return 'number';
172
+ case 'integer':
173
+ return 'number';
137
174
  default:
138
175
  return 'any';
139
176
  }
@@ -145,4 +182,4 @@ class CfnResourceGenerator {
145
182
  }
146
183
  }
147
184
  exports.CfnResourceGenerator = CfnResourceGenerator;
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLXJlc291cmNlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jZm4tcmVzb3VyY2UtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFxQztBQUNyQyxpQ0FBaUM7QUFFakMsaUNBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFRL0I7Ozs7O09BS0c7SUFDSCxZQUE2QixRQUFnQixFQUFtQixPQUFpQixFQUFtQixNQUFXO1FBQWxGLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUFtQixXQUFNLEdBQU4sTUFBTSxDQUFLO1FBQzdHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFBLHVCQUFnQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUosSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxD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QUFDO0lBQ2YsQ0FBQztDQUVGO0FBM0pELG9EQTJKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbWVsLCBwYXNjYWwgfSBmcm9tICdjYXNlJztcbmltcG9ydCAqIGFzIGoyaiBmcm9tICdqc29uMmpzaWknO1xuaW1wb3J0IHsgVHlwZUluZm8gfSBmcm9tICcuL3R5cGUtaW5mbyc7XG5pbXBvcnQgeyBzYW5pdGl6ZVR5cGVOYW1lIH0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBHZW5lcmF0b3IgdG8gZW1pdCBjbGFzc2VzIGFuZCB0eXBlcyBmb3IgdGhlIEwxIGNvbnN0cnVjdCBvZiB0aGUgZ2l2ZW4gcmVzb3VyY2UgdHlwZVxuICovXG5leHBvcnQgY2xhc3MgQ2ZuUmVzb3VyY2VHZW5lcmF0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVkVHlwZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlUHJvcGVydGllczogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3RydWN0Q2xhc3NOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHNTdHJ1Y3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlTmFtZSB0aGUgbmFtZSBvZiB0aGUgQ0ZOIHJlc291cmNlIHR5cGUgKGUuZy4gQVdTUVM6OkVLUzo6Q2x1c3RlcilcbiAgICogQHBhcmFtIHR5cGVEZWYgdGhlIHR5cGUgaW5mbyBjb250YWluaW5nIHRoZSBzb3VyY2UgdXJsXG4gICAqIEBwYXJhbSBzY2hlbWEgdGhlIHNjaGVtYSBvZiB0aGUgcmVzb3VyY2UgdHlwZSBmb3IgaW5wdXQgYW5kIG91dHB1dCBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGVOYW1lOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgdHlwZURlZjogVHlwZUluZm8sIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBhbnkpIHtcbiAgICB0aGlzLnNhbml0aXplZFR5cGVOYW1lID0gc2FuaXRpemVUeXBlTmFtZSh0eXBlTmFtZSk7XG4gICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMgPSB0aGlzLnNjaGVtYS5yZWFkT25seVByb3BlcnRpZXMgPyB0aGlzLnNjaGVtYS5yZWFkT25seVByb3BlcnRpZXMubWFwKChwcm9wOiBzdHJpbmcpID0+IHByb3AucmVwbGFjZSgvXlxcL3Byb3BlcnRpZXNcXC8vLCAnJykpIDogW107XG4gICAgdGhpcy5yZXNvdXJjZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKS5maWx0ZXIocHJvcCA9PiB0aGlzLnJlc291cmNlQXR0cmlidXRlcy5pbmRleE9mKHByb3ApID09PSAtMSk7XG4gICAgdGhpcy5jb25zdHJ1Y3RDbGFzc05hbWUgPSBgQ2ZuJHt0aGlzLnNhbml0aXplZFR5cGVOYW1lfWA7XG4gICAgdGhpcy5wcm9wc1N0cnVjdE5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1Qcm9wc2A7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSB0eXBlIGludG8gYSBUeXBlU2NyaXB0IGNsYXNzIGZpbCBkZWZpbmluZyB0aGUgcHJvcHMgYW5kIHRoZSBMMSBjb25zdHJ1Y3RcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlbmRlcmVkIGNsYXNzIGZpbGUgY29udGVudFxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvZGUgPSBuZXcgajJqLkNvZGUoKTtcbiAgICB0aGlzLmVtaXRJbXBvcnRzKGNvZGUpO1xuICAgIHRoaXMuZW1pdERlZmluaXRpb25UeXBlcyhjb2RlKTtcbiAgICB0aGlzLmVtaXRDb25zdHJ1Y3RDbGFzcyhjb2RlKTtcbiAgICByZXR1cm4gY29kZS5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEltcG9ydHMoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLmxpbmUoJy8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0Jyk7XG4gICAgY29kZS5saW5lKFwiaW1wb3J0ICogYXMgY2RrIGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1wiKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdERlZmluaXRpb25UeXBlcyhjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvbnN0IGdlbiA9IG5ldyBqMmouVHlwZUdlbmVyYXRvcih7XG4gICAgICBkZWZpbml0aW9uczogdGhpcy5zY2hlbWEuZGVmaW5pdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2NoZW1hKSk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBSZW1vdmUgYXR0cmlidXRlcyB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIGJ1dCBhcmUgdXNlZCBhcyBhdHRyaWJ1dGVzXG4gICAgICAvLyBUaGVzZSBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIFByb3BzIHN0cnVjdFxuICAgICAgZGVsZXRlIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIGdlbi5lbWl0VHlwZSh0aGlzLnByb3BzU3RydWN0TmFtZSwgc2NoZW1hKTtcblxuICAgIGdlbi5yZW5kZXJUb0NvZGUoY29kZSk7XG4gICAgY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25zdHJ1Y3RDbGFzcyhjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgY29kZS5saW5lKGAgKiBBIENsb3VkRm9ybWF0aW9uIFxcYCR7dGhpcy50eXBlTmFtZX1cXGBgKTtcbiAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgY29kZS5saW5lKGAgKiBAY2xvdWRmb3JtYXRpb25SZXNvdXJjZSAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgY29kZS5saW5lKCcgKiBAc3RhYmlsaXR5IGV4dGVybmFsJyk7XG4gICAgY29kZS5saW5lKGAgKiBAbGluayAke3RoaXMudHlwZURlZi5Tb3VyY2VVcmx9YCk7XG4gICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IGNsYXNzICR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9IGV4dGVuZHMgY2RrLkNmblJlc291cmNlYCk7XG4gICAgY29kZS5saW5lKCcvKionKTtcbiAgICBjb2RlLmxpbmUoJyogVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGUgbmFtZSBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy4nKTtcbiAgICBjb2RlLmxpbmUoJyovJyk7XG4gICAgY29kZS5saW5lKGBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENGTl9SRVNPVVJDRV9UWVBFX05BTUUgPSBcIiR7dGhpcy50eXBlTmFtZX1cIjtgKTtcbiAgICBjb2RlLmxpbmUoKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLnJlc291cmNlUHJvcGVydGllcykge1xuICAgICAgY29uc3Qgb3B0aW9uYWxNYXJrZXIgPSB0aGlzLnNjaGVtYS5yZXF1aXJlZD8uaW5kZXhPZihwcm9wKSA9PT0gLTEgPyAnIHwgdW5kZWZpbmVkJyA6ICcnO1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogXFxgJHt0aGlzLnR5cGVOYW1lfS4ke3Byb3B9XFxgYCk7XG4gICAgICBpZiAodGhpcy5zY2hlbWEucHJvcGVydGllc1twcm9wXS5kZXNjcmlwdGlvbikge1xuICAgICAgICBjb2RlLmxpbmUoYCAqICR7dGhpcy5zY2hlbWEucHJvcGVydGllc1twcm9wXS5kZXNjcmlwdGlvbn1gKTtcbiAgICAgIH1cbiAgICAgIGNvZGUubGluZShgICogQGxpbmsgJHt0aGlzLnR5cGVEZWYuU291cmNlVXJsfWApO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICAgIGNvZGUubGluZShgcHVibGljIHJlYWRvbmx5ICR7Y2FtZWwocHJvcCl9OiAke3RoaXMuZ2V0VHlwZU9mUHJvcGVydHkocHJvcCl9JHtvcHRpb25hbE1hcmtlcn07YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzKSB7XG4gICAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgICAgY29kZS5saW5lKGAgKiBBdHRyaWJ1dGUgXFxgJHt0aGlzLnR5cGVOYW1lfS4ke3Byb3B9XFxgYCk7XG4gICAgICBjb2RlLmxpbmUoYCAqIEBsaW5rICR7dGhpcy50eXBlRGVmLlNvdXJjZVVybH1gKTtcbiAgICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgICBjb2RlLmxpbmUoYHB1YmxpYyByZWFkb25seSBhdHRyJHtwYXNjYWwocHJvcCl9OiAke3RoaXMuZ2V0VHlwZU9mUHJvcGVydHkocHJvcCl9O2ApO1xuICAgIH1cblxuICAgIGNvZGUubGluZSgpO1xuXG4gICAgY29kZS5saW5lKCcvKionKTtcbiAgICBjb2RlLmxpbmUoYCAqIENyZWF0ZSBhIG5ldyBcXGAke3RoaXMudHlwZU5hbWV9XFxgLmApO1xuICAgIGNvZGUubGluZSgnIConKTtcbiAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgZGVmaW5lZCcpO1xuICAgIGNvZGUubGluZSgnICogQHBhcmFtIGlkICAgIC0gc2NvcGVkIGlkIG9mIHRoZSByZXNvdXJjZScpO1xuICAgIGNvZGUubGluZSgnICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllcycpO1xuICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgY29kZS5vcGVuQmxvY2soYGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogJHt0aGlzLnByb3BzU3RydWN0TmFtZX0pYCk7XG4gICAgY29kZS5saW5lKGBzdXBlcihzY29wZSwgaWQsIHsgdHlwZTogJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX0uQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSwgcHJvcGVydGllczogdG9Kc29uXyR7dGhpcy5wcm9wc1N0cnVjdE5hbWV9KHByb3BzKSEgfSk7YCk7XG4gICAgY29kZS5saW5lKCcnKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5yZXNvdXJjZVByb3BlcnRpZXMpIHtcbiAgICAgIGNvZGUubGluZShgdGhpcy4ke2NhbWVsKHByb3ApfSA9IHByb3BzLiR7Y2FtZWwocHJvcCl9O2ApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGBhdHRyJHtwYXNjYWwocHJvcCl9YDtcbiAgICAgIGNvZGUubGluZShgdGhpcy4ke3Byb3BlcnR5TmFtZX0gPSAke3RoaXMucmVuZGVyR2V0QXR0KHByb3ApfTtgKTtcbiAgICB9XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAvLyBDbG9zZSBjb25zdHJ1Y3QgY2xhc3NcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyR2V0QXR0KHByb3A6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IHRoaXMuZ2V0VHlwZU9mUHJvcGVydHkocHJvcCk7XG4gICAgY29uc3QgY29uc3RydWN0b3JBcmd1bWVudHMgPSBgdGhpcy5nZXRBdHQoJyR7cHJvcH0nKWA7XG4gICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYGNkay5Ub2tlbi5hc1N0cmluZygke2NvbnN0cnVjdG9yQXJndW1lbnRzfSlgO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlVHlwZSA9PT0gJ3N0cmluZ1tdJykge1xuICAgICAgcmV0dXJuIGBjZGsuVG9rZW4uYXNMaXN0KCR7Y29uc3RydWN0b3JBcmd1bWVudHN9KWA7XG4gICAgfVxuICAgIGlmIChhdHRyaWJ1dGVUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGBjZGsuVG9rZW4uYXNOdW1iZXIoJHtjb25zdHJ1Y3RvckFyZ3VtZW50c30pYDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yQXJndW1lbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlT2ZQcm9wZXJ0eShwcm9wOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlRnJvbVNjaGVtYSh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZUZyb21TY2hlbWEocHJvcDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAocHJvcC50eXBlKSB7XG4gICAgICBzd2l0Y2ggKHByb3AudHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICAgIHJldHVybiBgJHt0aGlzLmdldFR5cGVGcm9tU2NoZW1hKHByb3AuaXRlbXMpfVtdYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJ2FueSc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wLmhhc093blByb3BlcnR5KCckcmVmJykpIHtcbiAgICAgIHJldHVybiBwcm9wLiRyZWYucmVwbGFjZSgvI1xcL2RlZmluaXRpb25zXFwvLywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gJ2FueSc7XG4gIH1cblxufVxuIl19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLXJlc291cmNlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jZm4tcmVzb3VyY2UtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFxQztBQUNyQyxpQ0FBaUM7QUFFakMsaUNBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFRL0I7Ozs7O09BS0c7SUFDSCxZQUE2QixRQUFnQixFQUFtQixPQUFpQixFQUFtQixNQUFXOztRQUFsRixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQW1CLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQUM3RyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCw2SkFBNko7UUFDN0osOEhBQThIO1FBQzlILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLE9BQU8sQ0FBQztRQUV6RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUU5QyxNQUFNLEtBQUssR0FBRyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxjQUFjLEdBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0I7WUFDN0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLENBQUMsQ0FBQyxF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c0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FtZWwsIHBhc2NhbCB9IGZyb20gJ2Nhc2UnO1xuaW1wb3J0ICogYXMgajJqIGZyb20gJ2pzb24yanNpaSc7XG5pbXBvcnQgeyBUeXBlSW5mbyB9IGZyb20gJy4vdHlwZS1pbmZvJztcbmltcG9ydCB7IHNhbml0aXplVHlwZU5hbWUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEdlbmVyYXRvciB0byBlbWl0IGNsYXNzZXMgYW5kIHR5cGVzIGZvciB0aGUgTDEgY29uc3RydWN0IG9mIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5SZXNvdXJjZUdlbmVyYXRvciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZWRUeXBlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlQXR0cmlidXRlczogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RDbGFzc05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wc1N0cnVjdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHR5cGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBDRk4gcmVzb3VyY2UgdHlwZSAoZS5nLiBBV1NRUzo6RUtTOjpDbHVzdGVyKVxuICAgKiBAcGFyYW0gdHlwZURlZiB0aGUgdHlwZSBpbmZvIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSB1cmxcbiAgICogQHBhcmFtIHNjaGVtYSB0aGUgc2NoZW1hIG9mIHRoZSByZXNvdXJjZSB0eXBlIGZvciBpbnB1dCBhbmQgb3V0cHV0IHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHlwZU5hbWU6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSB0eXBlRGVmOiBUeXBlSW5mbywgcHJpdmF0ZSByZWFkb25seSBzY2hlbWE6IGFueSkge1xuICAgIHRoaXMuc2FuaXRpemVkVHlwZU5hbWUgPSBzYW5pdGl6ZVR5cGVOYW1lKHR5cGVOYW1lKTtcbiAgICAvLyB0aGlzLnJlc291cmNlQXR0cmlidXRlcyA9IHRoaXMuc2NoZW1hLnJlYWRPbmx5UHJvcGVydGllcyA/IHRoaXMuc2NoZW1hLnJlYWRPbmx5UHJvcGVydGllcy5tYXAoKHByb3A6IHN0cmluZykgPT4gcHJvcC5yZXBsYWNlKC9eXFwvcHJvcGVydGllc1xcLy8sICcnKSkgOiBbXTtcbiAgICAvLyB0aGlzLnJlc291cmNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpLmZpbHRlcihwcm9wID0+IHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzLmluZGV4T2YocHJvcCkgPT09IC0xKTtcbiAgICB0aGlzLmNvbnN0cnVjdENsYXNzTmFtZSA9IGBDZm4ke3RoaXMuc2FuaXRpemVkVHlwZU5hbWV9YDtcbiAgICB0aGlzLnByb3BzU3RydWN0TmFtZSA9IGAke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfVByb3BzYDtcblxuICAgIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICB0aGlzLnJlc291cmNlUHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuc2NoZW1hLnByb3BlcnRpZXMgPz8ge307XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5zY2hlbWEucmVhZE9ubHlQcm9wZXJ0aWVzXG4gICAgICA/IHRoaXMuc2NoZW1hLnJlYWRPbmx5UHJvcGVydGllcy5tYXAoKHByb3A6IHN0cmluZykgPT4gcHJvcC5yZXBsYWNlKC9eXFwvcHJvcGVydGllc1xcLy8sICcnKSlcbiAgICAgIDogW107XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlTmFtZXMpIHtcbiAgICAgIGNvbnN0IGRlZiA9IHByb3BzW2F0dHJdO1xuICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnJlc29sdmFibGUgcmVhZC1vbmx5IHByb3BlcnR5IChhdHRyaWJ1dGUpICR7dHlwZU5hbWV9LiR7YXR0cn1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUgaXMgYSBwcmltaXRpdmVcbiAgICAgIGlmIChkZWYudHlwZSAhPT0gJ3N0cmluZycgJiYgZGVmLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgdHlwZSAke0pTT04uc3RyaW5naWZ5KGRlZil9IGZvciByZWFkLW9ubHkgcHJvcGVydHkgKGF0dHJpYnV0ZSkgJHt0eXBlTmFtZX0uJHthdHRyfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMucHVzaChhdHRyKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgICAvLyBpZiB0aGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5LCBjb25zaWRlciBpdCBhbiBhdHRyaWJ1dGVcbiAgICAgIGlmIChhdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXNvdXJjZVByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSB0eXBlIGludG8gYSBUeXBlU2NyaXB0IGNsYXNzIGZpbCBkZWZpbmluZyB0aGUgcHJvcHMgYW5kIHRoZSBMMSBjb25zdHJ1Y3RcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlbmRlcmVkIGNsYXNzIGZpbGUgY29udGVudFxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvZGUgPSBuZXcgajJqLkNvZGUoKTtcbiAgICB0aGlzLmVtaXRJbXBvcnRzKGNvZGUpO1xuICAgIHRoaXMuZW1pdERlZmluaXRpb25UeXBlcyhjb2RlKTtcbiAgICB0aGlzLmVtaXRDb25zdHJ1Y3RDbGFzcyhjb2RlKTtcbiAgICByZXR1cm4gY29kZS5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEltcG9ydHMoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLmxpbmUoJy8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0Jyk7XG4gICAgY29kZS5saW5lKFwiaW1wb3J0ICogYXMgY2RrIGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1wiKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdERlZmluaXRpb25UeXBlcyhjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvbnN0IGdlbiA9IG5ldyBqMmouVHlwZUdlbmVyYXRvcih7XG4gICAgICBkZWZpbml0aW9uczogdGhpcy5zY2hlbWEuZGVmaW5pdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2NoZW1hKSk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBSZW1vdmUgYXR0cmlidXRlcyB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIGJ1dCBhcmUgdXNlZCBhcyBhdHRyaWJ1dGVzXG4gICAgICAvLyBUaGVzZSBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIFByb3BzIHN0cnVjdFxuICAgICAgZGVsZXRlIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIGdlbi5lbWl0VHlwZSh0aGlzLnByb3BzU3RydWN0TmFtZSwgc2NoZW1hKTtcblxuICAgIGdlbi5yZW5kZXJUb0NvZGUoY29kZSk7XG4gICAgY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25zdHJ1Y3RDbGFzcyhjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgY29kZS5saW5lKGAgKiBBIENsb3VkRm9ybWF0aW9uIFxcYCR7dGhpcy50eXBlTmFtZX1cXGBgKTtcbiAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgY29kZS5saW5lKGAgKiBAY2xvdWRmb3JtYXRpb25SZXNvdXJjZSAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgY29kZS5saW5lKCcgKiBAc3RhYmlsaXR5IGV4dGVybmFsJyk7XG4gICAgaWYgKHRoaXMudHlwZURlZi5Tb3VyY2VVcmwpIHtcbiAgICAgIGNvZGUubGluZShgICogQGxpbmsgJHt0aGlzLnR5cGVEZWYuU291cmNlVXJsfWApO1xuICAgIH1cbiAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgIGNvZGUub3BlbkJsb2NrKGBleHBvcnQgY2xhc3MgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX0gZXh0ZW5kcyBjZGsuQ2ZuUmVzb3VyY2VgKTtcbiAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgIGNvZGUubGluZSgnKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLicpO1xuICAgIGNvZGUubGluZSgnKi8nKTtcbiAgICBjb2RlLmxpbmUoYHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSA9IFwiJHt0aGlzLnR5cGVOYW1lfVwiO2ApO1xuICAgIGNvZGUubGluZSgpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMucmVzb3VyY2VQcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBvcHRpb25hbE1hcmtlciA9IHRoaXMuc2NoZW1hLnJlcXVpcmVkPy5pbmRleE9mKHByb3ApID09PSAtMSA/ICcgfCB1bmRlZmluZWQnIDogJyc7XG4gICAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgICAgY29kZS5saW5lKGAgKiBcXGAke3RoaXMudHlwZU5hbWV9LiR7cHJvcH1cXGBgKTtcbiAgICAgIGlmICh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvZGUubGluZShgICogJHt0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdLmRlc2NyaXB0aW9ufWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudHlwZURlZi5Tb3VyY2VVcmwpIHtcbiAgICAgICAgY29kZS5saW5lKGAgKiBAbGluayAke3RoaXMudHlwZURlZi5Tb3VyY2VVcmx9YCk7XG4gICAgICB9XG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgY29kZS5saW5lKGBwdWJsaWMgcmVhZG9ubHkgJHtjYW1lbChwcm9wKX06ICR7dGhpcy5nZXRUeXBlT2ZQcm9wZXJ0eShwcm9wKX0ke29wdGlvbmFsTWFya2VyfTtgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqIEF0dHJpYnV0ZSBcXGAke3RoaXMudHlwZU5hbWV9LiR7cHJvcH1cXGBgKTtcbiAgICAgIGlmICh0aGlzLnR5cGVEZWYuU291cmNlVXJsKSB7XG4gICAgICAgIGNvZGUubGluZShgICogQGxpbmsgJHt0aGlzLnR5cGVEZWYuU291cmNlVXJsfWApO1xuICAgICAgfVxuICAgICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICAgIGNvZGUubGluZShgcHVibGljIHJlYWRvbmx5IGF0dHIke3Bhc2NhbChwcm9wKX06ICR7dGhpcy5nZXRUeXBlT2ZQcm9wZXJ0eShwcm9wKX07YCk7XG4gICAgfVxuXG4gICAgY29kZS5saW5lKCk7XG5cbiAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgIGNvZGUubGluZShgICogQ3JlYXRlIGEgbmV3IFxcYCR7dGhpcy50eXBlTmFtZX1cXGAuYCk7XG4gICAgY29kZS5saW5lKCcgKicpO1xuICAgIGNvZGUubGluZSgnICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkJyk7XG4gICAgY29kZS5saW5lKCcgKiBAcGFyYW0gaWQgICAgLSBzY29wZWQgaWQgb2YgdGhlIHJlc291cmNlJyk7XG4gICAgY29kZS5saW5lKCcgKiBAcGFyYW0gcHJvcHMgLSByZXNvdXJjZSBwcm9wZXJ0aWVzJyk7XG4gICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICBjb2RlLm9wZW5CbG9jayhgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiAke3RoaXMucHJvcHNTdHJ1Y3ROYW1lfSlgKTtcbiAgICBjb2RlLmxpbmUoYHN1cGVyKHNjb3BlLCBpZCwgeyB0eXBlOiAke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfS5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FLCBwcm9wZXJ0aWVzOiB0b0pzb25fJHt0aGlzLnByb3BzU3RydWN0TmFtZX0ocHJvcHMpISB9KTtgKTtcbiAgICBjb2RlLmxpbmUoJycpO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLnJlc291cmNlUHJvcGVydGllcykge1xuICAgICAgY29kZS5saW5lKGB0aGlzLiR7Y2FtZWwocHJvcCl9ID0gcHJvcHMuJHtjYW1lbChwcm9wKX07YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLnJlc291cmNlQXR0cmlidXRlcykge1xuICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYGF0dHIke3Bhc2NhbChwcm9wKX1gO1xuICAgICAgY29kZS5saW5lKGB0aGlzLiR7cHJvcGVydHlOYW1lfSA9ICR7dGhpcy5yZW5kZXJHZXRBdHQocHJvcCl9O2ApO1xuICAgIH1cbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIENsb3NlIGNvbnN0cnVjdCBjbGFzc1xuICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJHZXRBdHQocHJvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gdGhpcy5nZXRUeXBlT2ZQcm9wZXJ0eShwcm9wKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckFyZ3VtZW50cyA9IGB0aGlzLmdldEF0dCgnJHtwcm9wfScpYDtcbiAgICBpZiAoYXR0cmlidXRlVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBgY2RrLlRva2VuLmFzU3RyaW5nKCR7Y29uc3RydWN0b3JBcmd1bWVudHN9KWA7XG4gICAgfVxuICAgIGlmIChhdHRyaWJ1dGVUeXBlID09PSAnc3RyaW5nW10nKSB7XG4gICAgICByZXR1cm4gYGNkay5Ub2tlbi5hc0xpc3QoJHtjb25zdHJ1Y3RvckFyZ3VtZW50c30pYDtcbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gYGNkay5Ub2tlbi5hc051bWJlcigke2NvbnN0cnVjdG9yQXJndW1lbnRzfSlgO1xuICAgIH1cbiAgICByZXR1cm4gY29uc3RydWN0b3JBcmd1bWVudHM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVPZlByb3BlcnR5KHByb3A6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVGcm9tU2NoZW1hKHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRnJvbVNjaGVtYShwcm9wOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChwcm9wLnR5cGUpIHtcbiAgICAgIHN3aXRjaCAocHJvcC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0VHlwZUZyb21TY2hlbWEocHJvcC5pdGVtcyl9W11gO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnYW55JztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3AuaGFzT3duUHJvcGVydHkoJyRyZWYnKSkge1xuICAgICAgcmV0dXJuIHByb3AuJHJlZi5yZXBsYWNlKC8jXFwvZGVmaW5pdGlvbnNcXC8vLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiAnYW55JztcbiAgfVxuXG59XG4iXX0=
package/package.json CHANGED
@@ -56,7 +56,7 @@
56
56
  "bundledDependencies": [],
57
57
  "main": "lib/index.js",
58
58
  "license": "Apache-2.0",
59
- "version": "0.1.7",
59
+ "version": "0.1.8",
60
60
  "jest": {
61
61
  "testMatch": [
62
62
  "**/__tests__/**/*.ts?(x)",
@@ -1,13 +0,0 @@
1
- {
2
- "Arn": "arn:aws:cloudformation:us-west-1::type/resource/408988dff9e863704bcc72e7e13f8d645cee8311/AWSQS-EKS-Cluster",
3
- "Type": "RESOURCE",
4
- "TypeName": "AWSQS::EKS::Cluster",
5
- "Description": "A resource that creates Amazon Elastic Kubernetes Service (Amazon EKS) clusters.",
6
- "Schema": "{\n \"typeName\": \"AWSQS::EKS::Cluster\",\n \"description\": \"A resource that creates Amazon Elastic Kubernetes Service (Amazon EKS) clusters.\",\n \"sourceUrl\": \"https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider.git\",\n \"documentationUrl\": \"https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider/blob/main/README.md\",\n \"definitions\": {\n \"KubernetesApiAccessEntry\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"Arn\": {\"type\": \"string\"},\n \"Username\": {\"type\": \"string\"},\n \"Groups\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}\n }\n },\n \"Provider\": {\n \"description\": \"AWS Key Management Service (AWS KMS) customer master key (CMK). Either the ARN or the alias can be used.\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"KeyArn\": {\n \"description\": \"Amazon Resource Name (ARN) or alias of the customer master key (CMK). The CMK must be symmetric, created in the same region as the cluster, and if the CMK was created in a different account, the user must have access to the CMK.\",\n \"type\": \"string\"\n }\n }\n },\n \"EncryptionConfigEntry\": {\n \"description\": \"The encryption configuration for the cluster.\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"Resources\": {\n \"type\": \"array\",\n \"description\": \"Specifies the resources to be encrypted. The only supported value is \\\"secrets\\\".\",\n \"items\": {\n \"description\": \"Specifies the resources to be encrypted. The only supported value is \\\"secrets\\\".\",\n \"type\": \"string\"\n }\n },\n \"Provider\": {\n \"$ref\": \"#/definitions/Provider\"\n }\n }\n }\n },\n \"properties\": {\n \"Name\": {\n \"description\": \"A unique name for your cluster.\",\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"RoleArn\": {\n \"description\": \"Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role. This provides permissions for Amazon EKS to call other AWS APIs.\",\n \"type\": \"string\"\n },\n \"LambdaRoleName\": {\n \"description\": \"Name of the AWS Identity and Access Management (IAM) role used for clusters that have the public endpoint disabled. this provides permissions for Lambda to be invoked and attach to the cluster VPC\",\n \"type\": \"string\",\n \"default\": \"CloudFormation-Kubernetes-VPC\"\n },\n \"Version\": {\n \"description\": \"Desired Kubernetes version for your cluster. If you don't specify this value, the cluster uses the latest version from Amazon EKS.\",\n \"type\": \"string\",\n \"default\": \"1.19\"\n },\n \"KubernetesNetworkConfig\": {\n \"description\": \"Network configuration for Amazon EKS cluster.\\n\\n\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"ServiceIpv4Cidr\": {\n \"description\": \"Specify the range from which cluster services will receive IPv4 addresses.\",\n \"type\": \"string\"\n }\n }\n },\n \"ResourcesVpcConfig\": {\n \"description\": \"An object that represents the virtual private cloud (VPC) configuration to use for an Amazon EKS cluster.\",\n \"type\": \"object\",\n \"properties\": {\n \"SecurityGroupIds\": {\n \"description\": \"Specify one or more security groups for the cross-account elastic network interfaces that Amazon EKS creates to use to allow communication between your worker nodes and the Kubernetes control plane. If you don't specify a security group, the default security group for your VPC is used.\",\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"SubnetIds\": {\n \"description\": \"Specify subnets for your Amazon EKS worker nodes. Amazon EKS creates cross-account elastic network interfaces in these subnets to allow communication between your worker nodes and the Kubernetes control plane.\",\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"EndpointPublicAccess\": {\n \"description\": \"Set this value to false to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is true , which enables public access for your Kubernetes API server.\",\n \"type\": \"boolean\"\n },\n \"EndpointPrivateAccess\": {\n \"description\": \"Set this value to true to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is false , which disables private access for your Kubernetes API server. If you disable private access and you have worker nodes or AWS Fargate pods in the cluster, then ensure that publicAccessCidrs includes the necessary CIDR blocks for communication with the worker nodes or Fargate pods.\",\n \"type\": \"boolean\"\n },\n \"PublicAccessCidrs\": {\n \"description\": \"The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is 0.0.0.0/0 . If you've disabled private endpoint access and you have worker nodes or AWS Fargate pods in the cluster, then ensure that you specify the necessary CIDR blocks.\",\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n }\n },\n \"required\": [\"SubnetIds\"],\n \"additionalProperties\": false\n },\n \"EnabledClusterLoggingTypes\": {\n \"description\": \"Enables exporting of logs from the Kubernetes control plane to Amazon CloudWatch Logs. By default, logs from the cluster control plane are not exported to CloudWatch Logs. The valid log types are api, audit, authenticator, controllerManager, and scheduler.\",\n \"type\": \"array\",\n \"items\": {\"type\": \"string\", \"pattern\": \"^api$|^audit$|^authenticator$|^controllerManager$|^scheduler$\"}\n },\n \"EncryptionConfig\": {\n \"description\": \"Encryption configuration for the cluster.\",\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/EncryptionConfigEntry\"\n }\n },\n \"KubernetesApiAccess\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"Roles\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/KubernetesApiAccessEntry\"\n }\n },\n \"Users\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/KubernetesApiAccessEntry\"\n }\n }\n }\n },\n \"Arn\": {\n \"description\": \"ARN of the cluster (e.g., `arn:aws:eks:us-west-2:666666666666:cluster/prod`).\",\n \"type\": \"string\"\n },\n \"CertificateAuthorityData\": {\n \"description\": \"Certificate authority data for your cluster.\",\n \"type\": \"string\"\n },\n \"ClusterSecurityGroupId\": {\n \"description\": \"Security group that was created by Amazon EKS for your cluster. Managed-node groups use this security group for control-plane-to-data-plane communications.\",\n \"type\": \"string\"\n },\n \"Endpoint\": {\n \"description\": \"Endpoint for your Kubernetes API server (e.g., https://5E1D0CEXAMPLEA591B746AFC5AB30262.yl4.us-west-2.eks.amazonaws.com).\",\n \"type\": \"string\"\n },\n \"EncryptionConfigKeyArn\": {\n \"description\": \"ARN or alias of the customer master key (CMK).\",\n \"type\": \"string\"\n },\n \"OIDCIssuerURL\": {\n \"description\": \"Issuer URL for the OpenID Connect identity provider.\",\n \"type\": \"string\"\n },\n \"Tags\": {\n \"type\": \"array\",\n \"uniqueItems\": false,\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"Value\": {\n \"type\": \"string\"\n },\n \"Key\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"Value\",\n \"Key\"\n ]\n }\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"RoleArn\",\n \"ResourcesVpcConfig\"\n ],\n \"readOnlyProperties\": [\n \"/properties/Arn\",\n \"/properties/Endpoint\",\n \"/properties/ClusterSecurityGroupId\",\n \"/properties/CertificateAuthorityData\",\n \"/properties/EncryptionConfigKeyArn\",\n \"/properties/OIDCIssuerURL\"\n ],\n \"createOnlyProperties\": [\n \"/properties/Name\",\n \"/properties/KubernetesNetworkConfig/ServiceIpv4Cidr\",\n \"/properties/RoleArn\",\n \"/properties/ResourcesVpcConfig/SubnetIds\",\n \"/properties/ResourcesVpcConfig/SecurityGroupIds\"\n ],\n \"primaryIdentifier\": [\n \"/properties/Name\"\n ],\n \"handlers\": {\n \"create\": {\n \"permissions\": [\n \"sts:GetCallerIdentity\",\n \"eks:CreateCluster\",\n \"eks:DescribeCluster\",\n \"eks:ListTagsForResource\",\n \"eks:TagResource\",\n \"iam:PassRole\",\n \"sts:AssumeRole\",\n \"lambda:UpdateFunctionConfiguration\",\n \"lambda:DeleteFunction\",\n \"lambda:GetFunction\",\n \"lambda:InvokeFunction\",\n \"lambda:CreateFunction\",\n \"lambda:UpdateFunctionCode\",\n \"ec2:DescribeVpcs\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeSecurityGroups\",\n \"iam:PassRole\",\n \"cloudformation:ListExports\",\n \"kms:DescribeKey\",\n \"kms:CreateGrant\"\n ]\n },\n \"read\": {\n \"permissions\": [\n \"sts:GetCallerIdentity\",\n \"eks:DescribeCluster\",\n \"eks:ListTagsForResource\",\n \"lambda:UpdateFunctionConfiguration\",\n \"lambda:DeleteFunction\",\n \"lambda:GetFunction\",\n \"lambda:InvokeFunction\",\n \"lambda:CreateFunction\",\n \"lambda:UpdateFunctionCode\",\n \"ec2:DescribeVpcs\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeSecurityGroups\",\n \"iam:PassRole\",\n \"cloudformation:ListExports\",\n \"kms:DescribeKey\",\n \"kms:CreateGrant\"\n ]\n },\n \"update\": {\n \"permissions\": [\n \"sts:GetCallerIdentity\",\n \"eks:DescribeCluster\",\n \"eks:UpdateClusterVersion\",\n \"eks:UpdateClusterConfig\",\n \"eks:ListTagsForResource\",\n \"eks:TagResource\",\n \"eks:UntagResource\",\n \"iam:PassRole\",\n \"lambda:UpdateFunctionConfiguration\",\n \"lambda:DeleteFunction\",\n \"lambda:GetFunction\",\n \"lambda:InvokeFunction\",\n \"lambda:CreateFunction\",\n \"lambda:UpdateFunctionCode\",\n \"ec2:DescribeVpcs\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeSecurityGroups\",\n \"cloudformation:ListExports\",\n \"kms:DescribeKey\",\n \"kms:CreateGrant\"\n ]\n },\n \"delete\": {\n \"permissions\": [\n \"sts:GetCallerIdentity\",\n \"eks:DescribeCluster\",\n \"eks:ListTagsForResource\",\n \"eks:DeleteCluster\",\n \"lambda:UpdateFunctionConfiguration\",\n \"lambda:DeleteFunction\",\n \"lambda:GetFunction\",\n \"lambda:InvokeFunction\",\n \"lambda:CreateFunction\",\n \"lambda:UpdateFunctionCode\",\n \"ec2:DescribeVpcs\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeSecurityGroups\",\n \"iam:PassRole\",\n \"cloudformation:ListExports\",\n \"kms:DescribeKey\",\n \"kms:CreateGrant\"\n ]\n }\n }\n}\n",
7
- "ProvisioningType": "FULLY_MUTABLE",
8
- "DeprecatedStatus": "LIVE",
9
- "Visibility": "PUBLIC",
10
- "SourceUrl": "https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider.git",
11
- "DocumentationUrl": "https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider/blob/main/README.md",
12
- "TimeCreated": "2021-06-21T23:57:50.259000+00:00"
13
- }
@@ -1,298 +0,0 @@
1
- {
2
- "typeName": "AWSQS::EKS::Cluster",
3
- "description": "A resource that creates Amazon Elastic Kubernetes Service (Amazon EKS) clusters.",
4
- "sourceUrl": "https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider.git",
5
- "documentationUrl": "https://github.com/aws-quickstart/quickstart-amazon-eks-cluster-resource-provider/blob/main/README.md",
6
- "definitions": {
7
- "KubernetesApiAccessEntry": {
8
- "type": "object",
9
- "additionalProperties": false,
10
- "properties": {
11
- "Arn": {"type": "string"},
12
- "Username": {"type": "string"},
13
- "Groups": {"type": "array", "items": {"type": "string"}}
14
- }
15
- },
16
- "Provider": {
17
- "description": "AWS Key Management Service (AWS KMS) customer master key (CMK). Either the ARN or the alias can be used.",
18
- "type": "object",
19
- "additionalProperties": false,
20
- "properties": {
21
- "KeyArn": {
22
- "description": "Amazon Resource Name (ARN) or alias of the customer master key (CMK). The CMK must be symmetric, created in the same region as the cluster, and if the CMK was created in a different account, the user must have access to the CMK.",
23
- "type": "string"
24
- }
25
- }
26
- },
27
- "EncryptionConfigEntry": {
28
- "description": "The encryption configuration for the cluster.",
29
- "type": "object",
30
- "additionalProperties": false,
31
- "properties": {
32
- "Resources": {
33
- "type": "array",
34
- "description": "Specifies the resources to be encrypted. The only supported value is \"secrets\".",
35
- "items": {
36
- "description": "Specifies the resources to be encrypted. The only supported value is \"secrets\".",
37
- "type": "string"
38
- }
39
- },
40
- "Provider": {
41
- "$ref": "#/definitions/Provider"
42
- }
43
- }
44
- }
45
- },
46
- "properties": {
47
- "Name": {
48
- "description": "A unique name for your cluster.",
49
- "type": "string",
50
- "minLength": 1
51
- },
52
- "RoleArn": {
53
- "description": "Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role. This provides permissions for Amazon EKS to call other AWS APIs.",
54
- "type": "string"
55
- },
56
- "LambdaRoleName": {
57
- "description": "Name of the AWS Identity and Access Management (IAM) role used for clusters that have the public endpoint disabled. this provides permissions for Lambda to be invoked and attach to the cluster VPC",
58
- "type": "string",
59
- "default": "CloudFormation-Kubernetes-VPC"
60
- },
61
- "Version": {
62
- "description": "Desired Kubernetes version for your cluster. If you don't specify this value, the cluster uses the latest version from Amazon EKS.",
63
- "type": "string",
64
- "default": "1.19"
65
- },
66
- "KubernetesNetworkConfig": {
67
- "description": "Network configuration for Amazon EKS cluster.\n\n",
68
- "type": "object",
69
- "additionalProperties": false,
70
- "properties": {
71
- "ServiceIpv4Cidr": {
72
- "description": "Specify the range from which cluster services will receive IPv4 addresses.",
73
- "type": "string"
74
- }
75
- }
76
- },
77
- "ResourcesVpcConfig": {
78
- "description": "An object that represents the virtual private cloud (VPC) configuration to use for an Amazon EKS cluster.",
79
- "type": "object",
80
- "properties": {
81
- "SecurityGroupIds": {
82
- "description": "Specify one or more security groups for the cross-account elastic network interfaces that Amazon EKS creates to use to allow communication between your worker nodes and the Kubernetes control plane. If you don't specify a security group, the default security group for your VPC is used.",
83
- "type": "array",
84
- "items": {"type": "string"}
85
- },
86
- "SubnetIds": {
87
- "description": "Specify subnets for your Amazon EKS worker nodes. Amazon EKS creates cross-account elastic network interfaces in these subnets to allow communication between your worker nodes and the Kubernetes control plane.",
88
- "type": "array",
89
- "items": {"type": "string"}
90
- },
91
- "EndpointPublicAccess": {
92
- "description": "Set this value to false to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is true , which enables public access for your Kubernetes API server.",
93
- "type": "boolean"
94
- },
95
- "EndpointPrivateAccess": {
96
- "description": "Set this value to true to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is false , which disables private access for your Kubernetes API server. If you disable private access and you have worker nodes or AWS Fargate pods in the cluster, then ensure that publicAccessCidrs includes the necessary CIDR blocks for communication with the worker nodes or Fargate pods.",
97
- "type": "boolean"
98
- },
99
- "PublicAccessCidrs": {
100
- "description": "The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is 0.0.0.0/0 . If you've disabled private endpoint access and you have worker nodes or AWS Fargate pods in the cluster, then ensure that you specify the necessary CIDR blocks.",
101
- "type": "array",
102
- "items": {"type": "string"}
103
- }
104
- },
105
- "required": ["SubnetIds"],
106
- "additionalProperties": false
107
- },
108
- "EnabledClusterLoggingTypes": {
109
- "description": "Enables exporting of logs from the Kubernetes control plane to Amazon CloudWatch Logs. By default, logs from the cluster control plane are not exported to CloudWatch Logs. The valid log types are api, audit, authenticator, controllerManager, and scheduler.",
110
- "type": "array",
111
- "items": {"type": "string", "pattern": "^api$|^audit$|^authenticator$|^controllerManager$|^scheduler$"}
112
- },
113
- "EncryptionConfig": {
114
- "description": "Encryption configuration for the cluster.",
115
- "type": "array",
116
- "items": {
117
- "$ref": "#/definitions/EncryptionConfigEntry"
118
- }
119
- },
120
- "KubernetesApiAccess": {
121
- "type": "object",
122
- "additionalProperties": false,
123
- "properties": {
124
- "Roles": {
125
- "type": "array",
126
- "items": {
127
- "$ref": "#/definitions/KubernetesApiAccessEntry"
128
- }
129
- },
130
- "Users": {
131
- "type": "array",
132
- "items": {
133
- "$ref": "#/definitions/KubernetesApiAccessEntry"
134
- }
135
- }
136
- }
137
- },
138
- "Arn": {
139
- "description": "ARN of the cluster (e.g., `arn:aws:eks:us-west-2:666666666666:cluster/prod`).",
140
- "type": "string"
141
- },
142
- "CertificateAuthorityData": {
143
- "description": "Certificate authority data for your cluster.",
144
- "type": "string"
145
- },
146
- "ClusterSecurityGroupId": {
147
- "description": "Security group that was created by Amazon EKS for your cluster. Managed-node groups use this security group for control-plane-to-data-plane communications.",
148
- "type": "string"
149
- },
150
- "Endpoint": {
151
- "description": "Endpoint for your Kubernetes API server (e.g., https://5E1D0CEXAMPLEA591B746AFC5AB30262.yl4.us-west-2.eks.amazonaws.com).",
152
- "type": "string"
153
- },
154
- "EncryptionConfigKeyArn": {
155
- "description": "ARN or alias of the customer master key (CMK).",
156
- "type": "string"
157
- },
158
- "OIDCIssuerURL": {
159
- "description": "Issuer URL for the OpenID Connect identity provider.",
160
- "type": "string"
161
- },
162
- "Tags": {
163
- "type": "array",
164
- "uniqueItems": false,
165
- "items": {
166
- "type": "object",
167
- "additionalProperties": false,
168
- "properties": {
169
- "Value": {
170
- "type": "string"
171
- },
172
- "Key": {
173
- "type": "string"
174
- }
175
- },
176
- "required": [
177
- "Value",
178
- "Key"
179
- ]
180
- }
181
- }
182
- },
183
- "additionalProperties": false,
184
- "required": [
185
- "RoleArn",
186
- "ResourcesVpcConfig"
187
- ],
188
- "readOnlyProperties": [
189
- "/properties/Arn",
190
- "/properties/Endpoint",
191
- "/properties/ClusterSecurityGroupId",
192
- "/properties/CertificateAuthorityData",
193
- "/properties/EncryptionConfigKeyArn",
194
- "/properties/OIDCIssuerURL"
195
- ],
196
- "createOnlyProperties": [
197
- "/properties/Name",
198
- "/properties/KubernetesNetworkConfig/ServiceIpv4Cidr",
199
- "/properties/RoleArn",
200
- "/properties/ResourcesVpcConfig/SubnetIds",
201
- "/properties/ResourcesVpcConfig/SecurityGroupIds"
202
- ],
203
- "primaryIdentifier": [
204
- "/properties/Name"
205
- ],
206
- "handlers": {
207
- "create": {
208
- "permissions": [
209
- "sts:GetCallerIdentity",
210
- "eks:CreateCluster",
211
- "eks:DescribeCluster",
212
- "eks:ListTagsForResource",
213
- "eks:TagResource",
214
- "iam:PassRole",
215
- "sts:AssumeRole",
216
- "lambda:UpdateFunctionConfiguration",
217
- "lambda:DeleteFunction",
218
- "lambda:GetFunction",
219
- "lambda:InvokeFunction",
220
- "lambda:CreateFunction",
221
- "lambda:UpdateFunctionCode",
222
- "ec2:DescribeVpcs",
223
- "ec2:DescribeSubnets",
224
- "ec2:DescribeSecurityGroups",
225
- "iam:PassRole",
226
- "cloudformation:ListExports",
227
- "kms:DescribeKey",
228
- "kms:CreateGrant"
229
- ]
230
- },
231
- "read": {
232
- "permissions": [
233
- "sts:GetCallerIdentity",
234
- "eks:DescribeCluster",
235
- "eks:ListTagsForResource",
236
- "lambda:UpdateFunctionConfiguration",
237
- "lambda:DeleteFunction",
238
- "lambda:GetFunction",
239
- "lambda:InvokeFunction",
240
- "lambda:CreateFunction",
241
- "lambda:UpdateFunctionCode",
242
- "ec2:DescribeVpcs",
243
- "ec2:DescribeSubnets",
244
- "ec2:DescribeSecurityGroups",
245
- "iam:PassRole",
246
- "cloudformation:ListExports",
247
- "kms:DescribeKey",
248
- "kms:CreateGrant"
249
- ]
250
- },
251
- "update": {
252
- "permissions": [
253
- "sts:GetCallerIdentity",
254
- "eks:DescribeCluster",
255
- "eks:UpdateClusterVersion",
256
- "eks:UpdateClusterConfig",
257
- "eks:ListTagsForResource",
258
- "eks:TagResource",
259
- "eks:UntagResource",
260
- "iam:PassRole",
261
- "lambda:UpdateFunctionConfiguration",
262
- "lambda:DeleteFunction",
263
- "lambda:GetFunction",
264
- "lambda:InvokeFunction",
265
- "lambda:CreateFunction",
266
- "lambda:UpdateFunctionCode",
267
- "ec2:DescribeVpcs",
268
- "ec2:DescribeSubnets",
269
- "ec2:DescribeSecurityGroups",
270
- "cloudformation:ListExports",
271
- "kms:DescribeKey",
272
- "kms:CreateGrant"
273
- ]
274
- },
275
- "delete": {
276
- "permissions": [
277
- "sts:GetCallerIdentity",
278
- "eks:DescribeCluster",
279
- "eks:ListTagsForResource",
280
- "eks:DeleteCluster",
281
- "lambda:UpdateFunctionConfiguration",
282
- "lambda:DeleteFunction",
283
- "lambda:GetFunction",
284
- "lambda:InvokeFunction",
285
- "lambda:CreateFunction",
286
- "lambda:UpdateFunctionCode",
287
- "ec2:DescribeVpcs",
288
- "ec2:DescribeSubnets",
289
- "ec2:DescribeSecurityGroups",
290
- "iam:PassRole",
291
- "cloudformation:ListExports",
292
- "kms:DescribeKey",
293
- "kms:CreateGrant"
294
- ]
295
- }
296
- }
297
- }
298
-
@@ -1,12 +0,0 @@
1
- const json2jsii = require('json2jsii');
2
- const schema = require('./eks.schema.json');
3
- const fs = require('fs');
4
-
5
- const gen = new json2jsii.TypeGenerator({
6
- definitions: schema.definitions
7
- });
8
-
9
- gen.emitType('ClusterProps', schema);
10
-
11
- // generate ClusterProps from the CFN registry schema
12
- fs.writeFileSync('out.ts', gen.render());