cdktn 0.26.0-pre.20 → 0.26.0-pre.21

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 (114) hide show
  1. package/.jsii +1200 -1116
  2. package/eslint.config.mjs +18 -7
  3. package/jest.config.js +0 -1
  4. package/lib/_tokens.d.ts +7 -0
  5. package/lib/_tokens.js +8 -2
  6. package/lib/annotations.js +1 -1
  7. package/lib/app.js +8 -4
  8. package/lib/aspect.js +1 -1
  9. package/lib/asset-hash.js +1 -1
  10. package/lib/asset-staging.js +1 -1
  11. package/lib/assets.js +4 -4
  12. package/lib/backends/azurerm-backend.d.ts +6 -0
  13. package/lib/backends/azurerm-backend.js +9 -5
  14. package/lib/backends/cloud-backend.js +4 -4
  15. package/lib/backends/consul-backend.d.ts +6 -0
  16. package/lib/backends/consul-backend.js +9 -5
  17. package/lib/backends/cos-backend.d.ts +6 -0
  18. package/lib/backends/cos-backend.js +9 -5
  19. package/lib/backends/gcs-backend.d.ts +6 -0
  20. package/lib/backends/gcs-backend.js +9 -5
  21. package/lib/backends/http-backend.d.ts +6 -0
  22. package/lib/backends/http-backend.js +9 -5
  23. package/lib/backends/local-backend.d.ts +6 -0
  24. package/lib/backends/local-backend.js +9 -5
  25. package/lib/backends/oss-backend.d.ts +6 -0
  26. package/lib/backends/oss-backend.js +9 -5
  27. package/lib/backends/pg-backend.d.ts +6 -0
  28. package/lib/backends/pg-backend.js +9 -5
  29. package/lib/backends/remote-backend.d.ts +12 -0
  30. package/lib/backends/remote-backend.js +17 -9
  31. package/lib/backends/s3-backend.d.ts +6 -0
  32. package/lib/backends/s3-backend.js +9 -5
  33. package/lib/backends/swift-backend.js +2 -2
  34. package/lib/complex-computed-list.d.ts +85 -0
  35. package/lib/complex-computed-list.js +112 -54
  36. package/lib/functions/helpers.d.ts +72 -0
  37. package/lib/functions/helpers.js +73 -14
  38. package/lib/functions/provider-function.js +1 -1
  39. package/lib/functions/terraform-functions.generated.d.ts +3 -0
  40. package/lib/functions/terraform-functions.generated.js +5 -3
  41. package/lib/hcl/render.js +30 -6
  42. package/lib/ignore-strategy.js +1 -1
  43. package/lib/importable-resource.js +1 -1
  44. package/lib/manifest.d.ts +4 -0
  45. package/lib/manifest.js +6 -3
  46. package/lib/private/unique.js +11 -3
  47. package/lib/resource.js +1 -1
  48. package/lib/runtime.d.ts +6 -0
  49. package/lib/runtime.js +12 -3
  50. package/lib/synthesize/required-version.d.ts +32 -0
  51. package/lib/synthesize/required-version.js +205 -0
  52. package/lib/synthesize/synthesizer.d.ts +13 -0
  53. package/lib/synthesize/synthesizer.js +42 -8
  54. package/lib/terraform-asset.d.ts +4 -0
  55. package/lib/terraform-asset.js +6 -3
  56. package/lib/terraform-backend.d.ts +3 -0
  57. package/lib/terraform-backend.js +5 -3
  58. package/lib/terraform-conditions.js +1 -2
  59. package/lib/terraform-count.js +1 -1
  60. package/lib/terraform-data-resource.js +1 -1
  61. package/lib/terraform-data-source.d.ts +4 -0
  62. package/lib/terraform-data-source.js +8 -6
  63. package/lib/terraform-dependable.js +1 -1
  64. package/lib/terraform-dynamic-block.d.ts +4 -0
  65. package/lib/terraform-dynamic-block.js +5 -2
  66. package/lib/terraform-element.d.ts +4 -0
  67. package/lib/terraform-element.js +6 -3
  68. package/lib/terraform-ephemeral-resource.d.ts +4 -0
  69. package/lib/terraform-ephemeral-resource.js +8 -6
  70. package/lib/terraform-functions.d.ts +4 -0
  71. package/lib/terraform-functions.js +6 -3
  72. package/lib/terraform-hcl-module.d.ts +4 -0
  73. package/lib/terraform-hcl-module.js +6 -3
  74. package/lib/terraform-iterator.d.ts +19 -0
  75. package/lib/terraform-iterator.js +25 -11
  76. package/lib/terraform-local.d.ts +4 -0
  77. package/lib/terraform-local.js +6 -3
  78. package/lib/terraform-module.js +1 -1
  79. package/lib/terraform-operators.js +1 -1
  80. package/lib/terraform-output.d.ts +4 -0
  81. package/lib/terraform-output.js +6 -3
  82. package/lib/terraform-provider.d.ts +4 -0
  83. package/lib/terraform-provider.js +6 -3
  84. package/lib/terraform-provisioner.js +1 -1
  85. package/lib/terraform-remote-state.d.ts +3 -0
  86. package/lib/terraform-remote-state.js +5 -3
  87. package/lib/terraform-resource-targets.js +1 -1
  88. package/lib/terraform-resource.d.ts +5 -1
  89. package/lib/terraform-resource.js +16 -9
  90. package/lib/terraform-stack.d.ts +4 -0
  91. package/lib/terraform-stack.js +28 -9
  92. package/lib/terraform-variable.d.ts +7 -0
  93. package/lib/terraform-variable.js +16 -7
  94. package/lib/testing/adapters/jest.d.ts +3 -0
  95. package/lib/testing/adapters/jest.js +10 -1
  96. package/lib/testing/index.js +14 -4
  97. package/lib/testing/matchers.js +61 -19
  98. package/lib/tfExpression.d.ts +48 -0
  99. package/lib/tfExpression.js +53 -15
  100. package/lib/tokens/lazy.d.ts +4 -0
  101. package/lib/tokens/lazy.js +21 -8
  102. package/lib/tokens/private/dependency.js +2 -6
  103. package/lib/tokens/private/resolve.js +3 -3
  104. package/lib/tokens/private/stack-trace.d.ts +1 -1
  105. package/lib/tokens/private/stack-trace.js +1 -2
  106. package/lib/tokens/resolvable.js +2 -2
  107. package/lib/tokens/string-fragments.js +4 -4
  108. package/lib/tokens/token.js +2 -2
  109. package/lib/upgrade-id-aspect.js +1 -1
  110. package/lib/util.d.ts +0 -1
  111. package/lib/util.js +4 -4
  112. package/lib/validations/target-versions.d.ts +12 -0
  113. package/lib/validations/target-versions.js +40 -1
  114. package/package.json +112 -109
@@ -5,19 +5,91 @@ type TFValue<T> = {
5
5
  };
6
6
  type TFValueValidator<T> = (value: T) => TFValue<T>;
7
7
  type ExecutableTfFunction = (...args: any[]) => IResolvable;
8
+ /**
9
+ * Validator that accepts any value
10
+ * @param value Value to validate
11
+ * @returns The wrapped value
12
+ */
8
13
  export declare function anyValue<T>(value: T): TFValue<T>;
14
+ /**
15
+ * Validator for map values; accepts any value without checking it
16
+ * @param value Value to validate
17
+ * @returns The wrapped value
18
+ */
9
19
  export declare function mapValue<T>(value: T): TFValue<T>;
20
+ /**
21
+ * Validator that accepts a string or a token
22
+ * @param value Value to validate
23
+ * @returns The wrapped value
24
+ * @throws If the value is neither a string nor a token, or is a string containing unescaped double quotes
25
+ */
10
26
  export declare function stringValue<T extends string>(value: T): TFValue<T>;
27
+ /**
28
+ * Validator that accepts a number or a token
29
+ * @param value Value to validate
30
+ * @returns The wrapped value
31
+ * @throws If the value is neither a number nor a token
32
+ */
11
33
  export declare function numericValue<T>(value: T): TFValue<T>;
34
+ /**
35
+ * Creates a validator for lists whose elements are checked with the given element validator. Tokens and non-array
36
+ * values pass through unchanged; `null`/`undefined` elements are dropped, token elements are kept as-is and plain
37
+ * string elements are wrapped in double quotes.
38
+ * @param type Validator applied to each non-token element
39
+ * @returns A list validator that throws if an element fails the element validator
40
+ */
12
41
  export declare function listOf<T>(type: TFValueValidator<T>): TFValueValidator<T[]>;
42
+ /**
43
+ * Creates a validator for a variadic argument: validates the value as a list and marks it to be expanded into
44
+ * separate arguments of the Terraform function call
45
+ * @param type Validator applied to each element
46
+ * @returns A validator for the variadic argument
47
+ */
13
48
  export declare function variadic<T>(type: TFValueValidator<T>): TFValueValidator<T[]>;
49
+ /**
50
+ * Converts a resolvable into a string token
51
+ * @param value Resolvable to convert
52
+ * @returns String token
53
+ */
14
54
  export declare function asString(value: IResolvable): string;
55
+ /**
56
+ * Converts a resolvable into a number token
57
+ * @param value Resolvable to convert
58
+ * @returns Number token
59
+ */
15
60
  export declare function asNumber(value: IResolvable): number;
61
+ /**
62
+ * Converts a resolvable into a string list token
63
+ * @param value Resolvable to convert
64
+ * @returns String list token
65
+ */
16
66
  export declare function asList(value: IResolvable): string[];
67
+ /**
68
+ * Converts a resolvable into a string map token
69
+ * @param value Resolvable to convert
70
+ * @returns String map token
71
+ */
17
72
  export declare function asStringMap(value: IResolvable): {
18
73
  [key: string]: string;
19
74
  };
75
+ /**
76
+ * Returns the resolvable unchanged, as booleans can not be represented as a token
77
+ * @param value Resolvable to return
78
+ * @returns The same resolvable
79
+ */
20
80
  export declare function asBoolean(value: IResolvable): IResolvable;
81
+ /**
82
+ * Converts a resolvable into a string token typed as `any`
83
+ * @param value Resolvable to convert
84
+ * @returns String token typed as `any`
85
+ */
21
86
  export declare function asAny(value: IResolvable): any;
87
+ /**
88
+ * Creates a function that validates its arguments and returns a Terraform function call expression
89
+ * @param name Name of the Terraform function
90
+ * @param argValidators Validators for each positional argument
91
+ * @returns A function returning the call expression; it throws if the number of arguments does not match the
92
+ * validators or an argument fails validation
93
+ */
22
94
  export declare function terraformFunction(name: string, argValidators: TFValueValidator<any>[]): ExecutableTfFunction;
23
95
  export {};
@@ -28,15 +28,28 @@ function hasUnescapedDoubleQuotes(str) {
28
28
  return /(^|[^\\])([\\]{2})*"/.test(str);
29
29
  }
30
30
  // Validators
31
- // eslint-disable-next-line jsdoc/require-jsdoc
31
+ /**
32
+ * Validator that accepts any value
33
+ * @param value Value to validate
34
+ * @returns The wrapped value
35
+ */
32
36
  function anyValue(value) {
33
37
  return { value };
34
38
  }
35
- // eslint-disable-next-line jsdoc/require-jsdoc
39
+ /**
40
+ * Validator for map values; accepts any value without checking it
41
+ * @param value Value to validate
42
+ * @returns The wrapped value
43
+ */
36
44
  function mapValue(value) {
37
45
  return { value };
38
46
  }
39
- // eslint-disable-next-line jsdoc/require-jsdoc
47
+ /**
48
+ * Validator that accepts a string or a token
49
+ * @param value Value to validate
50
+ * @returns The wrapped value
51
+ * @throws If the value is neither a string nor a token, or is a string containing unescaped double quotes
52
+ */
40
53
  function stringValue(value) {
41
54
  if (typeof value !== "string" && !token_1.Tokenization.isResolvable(value)) {
42
55
  throw (0, errors_1.valueIsInvalidStringOrToken)(value);
@@ -46,14 +59,25 @@ function stringValue(value) {
46
59
  }
47
60
  return { value };
48
61
  }
49
- // eslint-disable-next-line jsdoc/require-jsdoc
62
+ /**
63
+ * Validator that accepts a number or a token
64
+ * @param value Value to validate
65
+ * @returns The wrapped value
66
+ * @throws If the value is neither a number nor a token
67
+ */
50
68
  function numericValue(value) {
51
69
  if (typeof value !== "number" && !token_1.Tokenization.isResolvable(value)) {
52
70
  throw (0, errors_1.valueIsInvalidNumberOrToken)(value);
53
71
  }
54
72
  return { value };
55
73
  }
56
- // eslint-disable-next-line jsdoc/require-jsdoc
74
+ /**
75
+ * Creates a validator for lists whose elements are checked with the given element validator. Tokens and non-array
76
+ * values pass through unchanged; `null`/`undefined` elements are dropped, token elements are kept as-is and plain
77
+ * string elements are wrapped in double quotes.
78
+ * @param type Validator applied to each non-token element
79
+ * @returns A list validator that throws if an element fails the element validator
80
+ */
57
81
  function listOf(type) {
58
82
  return (value) => {
59
83
  if (token_1.Tokenization.isResolvable(value)) {
@@ -97,7 +121,12 @@ function listOf(type) {
97
121
  };
98
122
  };
99
123
  }
100
- // eslint-disable-next-line jsdoc/require-jsdoc
124
+ /**
125
+ * Creates a validator for a variadic argument: validates the value as a list and marks it to be expanded into
126
+ * separate arguments of the Terraform function call
127
+ * @param type Validator applied to each element
128
+ * @returns A validator for the variadic argument
129
+ */
101
130
  function variadic(type) {
102
131
  return (value) => {
103
132
  // we use the list validator and set variadic to true in order to have it expanded in the args passed to the TF function
@@ -105,27 +134,51 @@ function variadic(type) {
105
134
  };
106
135
  }
107
136
  // Tokenization
108
- // eslint-disable-next-line jsdoc/require-jsdoc
137
+ /**
138
+ * Converts a resolvable into a string token
139
+ * @param value Resolvable to convert
140
+ * @returns String token
141
+ */
109
142
  function asString(value) {
110
143
  return token_1.Token.asString(value);
111
144
  }
112
- // eslint-disable-next-line jsdoc/require-jsdoc
145
+ /**
146
+ * Converts a resolvable into a number token
147
+ * @param value Resolvable to convert
148
+ * @returns Number token
149
+ */
113
150
  function asNumber(value) {
114
151
  return token_1.Token.asNumber(value);
115
152
  }
116
- // eslint-disable-next-line jsdoc/require-jsdoc
153
+ /**
154
+ * Converts a resolvable into a string list token
155
+ * @param value Resolvable to convert
156
+ * @returns String list token
157
+ */
117
158
  function asList(value) {
118
159
  return token_1.Token.asList(value);
119
160
  }
120
- // eslint-disable-next-line jsdoc/require-jsdoc
161
+ /**
162
+ * Converts a resolvable into a string map token
163
+ * @param value Resolvable to convert
164
+ * @returns String map token
165
+ */
121
166
  function asStringMap(value) {
122
167
  return token_1.Token.asStringMap(value);
123
168
  }
124
- // eslint-disable-next-line jsdoc/require-jsdoc
169
+ /**
170
+ * Returns the resolvable unchanged, as booleans can not be represented as a token
171
+ * @param value Resolvable to return
172
+ * @returns The same resolvable
173
+ */
125
174
  function asBoolean(value) {
126
175
  return value; // Booleans can not be represented as a token
127
176
  }
128
- // eslint-disable-next-line jsdoc/require-jsdoc
177
+ /**
178
+ * Converts a resolvable into a string token typed as `any`
179
+ * @param value Resolvable to convert
180
+ * @returns String token typed as `any`
181
+ */
129
182
  function asAny(value) {
130
183
  // Ordinarily casting to any can cause issues, but
131
184
  // in this case it makes using functions a bit easier in TS
@@ -134,7 +187,13 @@ function asAny(value) {
134
187
  // so wrap as a string.
135
188
  return asString(value);
136
189
  }
137
- // eslint-disable-next-line jsdoc/require-jsdoc
190
+ /**
191
+ * Creates a function that validates its arguments and returns a Terraform function call expression
192
+ * @param name Name of the Terraform function
193
+ * @param argValidators Validators for each positional argument
194
+ * @returns A function returning the call expression; it throws if the number of arguments does not match the
195
+ * validators or an argument fails validation
196
+ */
138
197
  function terraformFunction(name, argValidators) {
139
198
  return function (...args) {
140
199
  if (args.length !== argValidators.length) {
@@ -157,4 +216,4 @@ function terraformFunction(name, argValidators) {
157
216
  }, []));
158
217
  };
159
218
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jdGlvbnMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStCQSw0QkFFQztBQUdELDRCQUVDO0FBR0Qsa0NBVUM7QUFHRCxvQ0FLQztBQUdELHdCQWlEQztBQUdELDRCQUtDO0FBSUQsNEJBRUM7QUFHRCw0QkFFQztBQUdELHdCQUVDO0FBR0Qsa0NBRUM7QUFHRCw4QkFFQztBQUdELHNCQU9DO0FBR0QsOENBMkJDO0FBekxELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQXNEO0FBQ3RELGtEQUF1QztBQUV2Qyx5REFBNkU7QUFDN0Usc0NBT21CO0FBT25COzs7O0dBSUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLEdBQVc7SUFDM0MsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELGFBQWE7QUFDYiwrQ0FBK0M7QUFDL0MsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBZ0IsV0FBVyxDQUFtQixLQUFRO0lBQ3BELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsb0JBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRSxNQUFNLElBQUEsb0NBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakUsTUFBTSxJQUFBLHFDQUE0QixFQUFDLEtBQUssQ0FBQyxDQUFD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LEVBQ0osYUFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBQSxtQkFBSSxFQUNULElBQUk7UUFDSixnR0FBZ0c7UUFDaEcsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksR0FBRyxDQUFDLFFBQVE7b0JBQUUsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztvQkFDN0MsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUEsMENBQWlDLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFRva2VuaXphdGlvbiwgVG9rZW4gfSBmcm9tIFwiLi4vdG9rZW5zL3Rva2VuXCI7XG5pbXBvcnQgeyBjYWxsIH0gZnJvbSBcIi4uL3RmRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSVJlc29sdmFibGUgfSBmcm9tIFwiLi4vdG9rZW5zL3Jlc29sdmFibGVcIjtcbmltcG9ydCB7IFRva2VuU3RyaW5nLCBleHRyYWN0VG9rZW5Eb3VibGUgfSBmcm9tIFwiLi4vdG9rZW5zL3ByaXZhdGUvZW5jb2RpbmdcIjtcbmltcG9ydCB7XG4gIGZ1bmN0aW9uQXJndW1lbnRWYWxpZGF0aW9uRmFpbHVyZSxcbiAgZnVuY3Rpb25SZWNlaXZlZFdyb25nTnVtYmVyT2ZBcmdzLFxuICBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUsXG4gIHZhbHVlQ29udGFpbnNVbmVzY2FwZWRRdW90ZXMsXG4gIHZhbHVlSXNJbnZhbGlkTnVtYmVyT3JUb2tlbixcbiAgdmFsdWVJc0ludmFsaWRTdHJpbmdPclRva2VuLFxufSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbnR5cGUgVEZWYWx1ZTxUPiA9IHsgdmFyaWFkaWM/OiBib29sZWFuOyB2YWx1ZTogVCB9O1xudHlwZSBURlZhbHVlVmFsaWRhdG9yPFQ+ID0gKHZhbHVlOiBUKSA9PiBURlZhbHVlPFQ+O1xuXG50eXBlIEV4ZWN1dGFibGVUZkZ1bmN0aW9uID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBJUmVzb2x2YWJsZTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGdpdmVuIHN0ciBoYXMgdW5lc2NhcGVkIGRvdWJsZSBxdW90ZXNcbiAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIHRlc3RcbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaGFzVW5lc2NhcGVkRG91YmxlUXVvdGVzKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiAvKF58W15cXFxcXSkoW1xcXFxdezJ9KSpcIi8udGVzdChzdHIpO1xufVxuXG4vLyBWYWxpZGF0b3JzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFueVZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gbWFwVmFsdWU8VD4odmFsdWU6IFQpOiBURlZhbHVlPFQ+IHtcbiAgcmV0dXJuIHsgdmFsdWUgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdWYWx1ZTxUIGV4dGVuZHMgc3RyaW5nPih2YWx1ZTogVCk6IFRGVmFsdWU8VD4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiICYmICFUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgIHRocm93IHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbih2YWx1ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGhhc1VuZXNjYXBlZERvdWJsZVF1b3Rlcyh2YWx1ZSkpIHtcbiAgICB0aHJvdyB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gbnVtZXJpY1ZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiYgIVRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgdGhyb3cgdmFsdWVJc0ludmFsaWROdW1iZXJPclRva2VuKHZhbHVlIGFzIHN0cmluZyk7XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWUgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBsaXN0T2Y8VD4odHlwZTogVEZWYWx1ZVZhbGlkYXRvcjxUPik6IFRGVmFsdWVWYWxpZGF0b3I8VFtdPiB7XG4gIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIHsgdmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsKVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChUb2tlblN0cmluZy5mb3JMaXN0VG9rZW4oaXRlbSkudGVzdCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXh0cmFjdFRva2VuRG91YmxlKGl0ZW0sIHRydWUpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChUb2tlblN0cmluZy5mb3JNYXBUb2tlbihpdGVtKS50ZXN0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgdG9rZW5MaXN0ID0gVG9rZW5pemF0aW9uLnJldmVyc2VTdHJpbmcoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJPZlRva2VucyA9XG4gICAgICAgICAgICAgIHRva2VuTGlzdC50b2tlbnMubGVuZ3RoICsgdG9rZW5MaXN0LmludHJpbnNpYy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZUb2tlbnMgPT09IDEgJiYgdG9rZW5MaXN0LmxpdGVyYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZShpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGBcIiR7aXRlbX1cImAgOiBpdGVtO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUodmFsdWUsIGksIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFkaWM8VD4odHlwZTogVEZWYWx1ZVZhbGlkYXRvcjxUPik6IFRGVmFsdWVWYWxpZGF0b3I8VFtdPiB7XG4gIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgIC8vIHdlIHVzZSB0aGUgbGlzdCB2YWxpZGF0b3IgYW5kIHNldCB2YXJpYWRpYyB0byB0cnVlIGluIG9yZGVyIHRvIGhhdmUgaXQgZXhwYW5kZWQgaW4gdGhlIGFyZ3MgcGFzc2VkIHRvIHRoZSBURiBmdW5jdGlvblxuICAgIHJldHVybiB7IHZhbHVlOiBsaXN0T2YodHlwZSkodmFsdWUpLnZhbHVlLCB2YXJpYWRpYzogdHJ1ZSB9O1xuICB9O1xufVxuXG4vLyBUb2tlbml6YXRpb25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNTdHJpbmcodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiBUb2tlbi5hc1N0cmluZyh2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiBUb2tlbi5hc051bWJlcih2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNMaXN0KHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNMaXN0KHZhbHVlKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBhc1N0cmluZ01hcCh2YWx1ZTogSVJlc29sdmFibGUpIHtcbiAgcmV0dXJuIFRva2VuLmFzU3RyaW5nTWFwKHZhbHVlKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBhc0Jvb2xlYW4odmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiB2YWx1ZTsgLy8gQm9vbGVhbnMgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBhcyBhIHRva2VuXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNBbnkodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIC8vIE9yZGluYXJpbHkgY2FzdGluZyB0byBhbnkgY2FuIGNhdXNlIGlzc3VlcywgYnV0XG4gIC8vIGluIHRoaXMgY2FzZSBpdCBtYWtlcyB1c2luZyBmdW5jdGlvbnMgYSBiaXQgZWFzaWVyIGluIFRTXG4gIC8vIGFuZCBkb2Vzbid0IHJlYWxseSBoYXJtIG90aGVyIGxhbmd1YWdlcy5cbiAgLy8gSnNpaSBoYXMgaXNzdWVzIHdoZW4gcmV0dXJuaW5nIHRoZSB2YWx1ZSBkaXJlY3RseSxcbiAgLy8gc28gd3JhcCBhcyBhIHN0cmluZy5cbiAgcmV0dXJuIGFzU3RyaW5nKHZhbHVlKSBhcyBhbnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gdGVycmFmb3JtRnVuY3Rpb24oXG4gIG5hbWU6IHN0cmluZyxcbiAgYXJnVmFsaWRhdG9yczogVEZWYWx1ZVZhbGlkYXRvcjxhbnk+W10sXG4pOiBFeGVjdXRhYmxlVGZGdW5jdGlvbiB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IGFyZ1ZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBmdW5jdGlvblJlY2VpdmVkV3JvbmdOdW1iZXJPZkFyZ3MoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFyZ1ZhbGlkYXRvcnMubGVuZ3RoLFxuICAgICAgICBhcmdzLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjYWxsKFxuICAgICAgbmFtZSxcbiAgICAgIC8vIFdlIHVzZSBmbGF0TWFwIG5vdywgc2luY2UgbGlzdE9mKCkgd3JhcHMgZXZlcnl0aGluZyBpbiBhbiBleHRyYSBhcnJheSBidXQgdmFyaWFkaWMoKSBkb2VzIG5vdFxuICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIGhhdmUgdmFyaWFkaWMgcGFzcyBtdWx0aXBsZSBhcmdzIGludG8gdGhlIGNhbGwoKSBmcm9tIGEgc2luZ2xlIGFycmF5XG4gICAgICBhcmdzLnJlZHVjZSgoY2FycnksIGFyZywgaSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGFyZ1ZhbGlkYXRvcnNbaV0oYXJnKTtcbiAgICAgICAgICBpZiAodmFsLnZhcmlhZGljKSByZXR1cm4gWy4uLmNhcnJ5LCAuLi52YWwudmFsdWVdO1xuICAgICAgICAgIGVsc2UgcmV0dXJuIFsuLi5jYXJyeSwgdmFsLnZhbHVlXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUoaSwgbmFtZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCBbXSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jdGlvbnMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1DQSw0QkFFQztBQU9ELDRCQUVDO0FBUUQsa0NBVUM7QUFRRCxvQ0FLQztBQVNELHdCQWlEQztBQVFELDRCQUtDO0FBUUQsNEJBRUM7QUFPRCw0QkFFQztBQU9ELHdCQUVDO0FBT0Qsa0NBRUM7QUFPRCw4QkFFQztBQU9ELHNCQU9DO0FBU0QsOENBMkJDO0FBcFBELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQXNEO0FBQ3RELGtEQUF1QztBQUV2Qyx5REFBNkU7QUFDN0Usc0NBT21CO0FBT25COzs7O0dBSUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLEdBQVc7SUFDM0MsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELGFBQWE7QUFDYjs7OztHQUlHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFdBQVcsQ0FBbUIsS0FBUTtJQUNwRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLG9CQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFBLG9DQUEyQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sSUFBQSxxQ0FBNEIsRUFBQyxLQUFLLENBQUMsQ0FB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ckMsSUFBSSxFQUNKLGFBQWEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUEsbUJBQUksRUFDVCxJQUFJO1FBQ0osZ0dBQWdHO1FBQ2hHLDBGQUEwRjtRQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsQ0FBQyxRQUFRO29CQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFBLDBDQUFpQyxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBUb2tlbml6YXRpb24sIFRva2VuIH0gZnJvbSBcIi4uL3Rva2Vucy90b2tlblwiO1xuaW1wb3J0IHsgY2FsbCB9IGZyb20gXCIuLi90ZkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IElSZXNvbHZhYmxlIH0gZnJvbSBcIi4uL3Rva2Vucy9yZXNvbHZhYmxlXCI7XG5pbXBvcnQgeyBUb2tlblN0cmluZywgZXh0cmFjdFRva2VuRG91YmxlIH0gZnJvbSBcIi4uL3Rva2Vucy9wcml2YXRlL2VuY29kaW5nXCI7XG5pbXBvcnQge1xuICBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUsXG4gIGZ1bmN0aW9uUmVjZWl2ZWRXcm9uZ051bWJlck9mQXJncyxcbiAgbGlzdEVsZW1lbnRJc09mV3JvbmdUeXBlLFxuICB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzLFxuICB2YWx1ZUlzSW52YWxpZE51bWJlck9yVG9rZW4sXG4gIHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbixcbn0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG50eXBlIFRGVmFsdWU8VD4gPSB7IHZhcmlhZGljPzogYm9vbGVhbjsgdmFsdWU6IFQgfTtcbnR5cGUgVEZWYWx1ZVZhbGlkYXRvcjxUPiA9ICh2YWx1ZTogVCkgPT4gVEZWYWx1ZTxUPjtcblxudHlwZSBFeGVjdXRhYmxlVGZGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gSVJlc29sdmFibGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBnaXZlbiBzdHIgaGFzIHVuZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gKiBAcGFyYW0gc3RyIFN0cmluZyB0byB0ZXN0XG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuZXNjYXBlZERvdWJsZVF1b3RlcyhzdHI6IHN0cmluZykge1xuICByZXR1cm4gLyhefFteXFxcXF0pKFtcXFxcXXsyfSkqXCIvLnRlc3Qoc3RyKTtcbn1cblxuLy8gVmFsaWRhdG9yc1xuLyoqXG4gKiBWYWxpZGF0b3IgdGhhdCBhY2NlcHRzIGFueSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUaGUgd3JhcHBlZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYW55VmFsdWU8VD4odmFsdWU6IFQpOiBURlZhbHVlPFQ+IHtcbiAgcmV0dXJuIHsgdmFsdWUgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0b3IgZm9yIG1hcCB2YWx1ZXM7IGFjY2VwdHMgYW55IHZhbHVlIHdpdGhvdXQgY2hlY2tpbmcgaXRcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgVGhlIHdyYXBwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8qKlxuICogVmFsaWRhdG9yIHRoYXQgYWNjZXB0cyBhIHN0cmluZyBvciBhIHRva2VuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIFRoZSB3cmFwcGVkIHZhbHVlXG4gKiBAdGhyb3dzIElmIHRoZSB2YWx1ZSBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIHRva2VuLCBvciBpcyBhIHN0cmluZyBjb250YWluaW5nIHVuZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdWYWx1ZTxUIGV4dGVuZHMgc3RyaW5nPih2YWx1ZTogVCk6IFRGVmFsdWU8VD4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiICYmICFUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgIHRocm93IHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbih2YWx1ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGhhc1VuZXNjYXBlZERvdWJsZVF1b3Rlcyh2YWx1ZSkpIHtcbiAgICB0aHJvdyB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8qKlxuICogVmFsaWRhdG9yIHRoYXQgYWNjZXB0cyBhIG51bWJlciBvciBhIHRva2VuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIFRoZSB3cmFwcGVkIHZhbHVlXG4gKiBAdGhyb3dzIElmIHRoZSB2YWx1ZSBpcyBuZWl0aGVyIGEgbnVtYmVyIG5vciBhIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBudW1lcmljVmFsdWU8VD4odmFsdWU6IFQpOiBURlZhbHVlPFQ+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiAmJiAhVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB2YWx1ZUlzSW52YWxpZE51bWJlck9yVG9rZW4odmFsdWUgYXMgc3RyaW5nKTtcbiAgfVxuICByZXR1cm4geyB2YWx1ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB2YWxpZGF0b3IgZm9yIGxpc3RzIHdob3NlIGVsZW1lbnRzIGFyZSBjaGVja2VkIHdpdGggdGhlIGdpdmVuIGVsZW1lbnQgdmFsaWRhdG9yLiBUb2tlbnMgYW5kIG5vbi1hcnJheVxuICogdmFsdWVzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQ7IGBudWxsYC9gdW5kZWZpbmVkYCBlbGVtZW50cyBhcmUgZHJvcHBlZCwgdG9rZW4gZWxlbWVudHMgYXJlIGtlcHQgYXMtaXMgYW5kIHBsYWluXG4gKiBzdHJpbmcgZWxlbWVudHMgYXJlIHdyYXBwZWQgaW4gZG91YmxlIHF1b3Rlcy5cbiAqIEBwYXJhbSB0eXBlIFZhbGlkYXRvciBhcHBsaWVkIHRvIGVhY2ggbm9uLXRva2VuIGVsZW1lbnRcbiAqIEByZXR1cm5zIEEgbGlzdCB2YWxpZGF0b3IgdGhhdCB0aHJvd3MgaWYgYW4gZWxlbWVudCBmYWlscyB0aGUgZWxlbWVudCB2YWxpZGF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RPZjxUPih0eXBlOiBURlZhbHVlVmFsaWRhdG9yPFQ+KTogVEZWYWx1ZVZhbGlkYXRvcjxUW10+IHtcbiAgcmV0dXJuICh2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyB2YWx1ZSB9O1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSB2YWxpZCBsaXN0YCk7XG4gICAgICByZXR1cm4geyB2YWx1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0gIT09IG51bGwpXG4gICAgICAgIC5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICBpZiAoVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFRva2VuU3RyaW5nLmZvckxpc3RUb2tlbihpdGVtKS50ZXN0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHRyYWN0VG9rZW5Eb3VibGUoaXRlbSwgdHJ1ZSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFRva2VuU3RyaW5nLmZvck1hcFRva2VuKGl0ZW0pLnRlc3QoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbkxpc3QgPSBUb2tlbml6YXRpb24ucmV2ZXJzZVN0cmluZyhpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlck9mVG9rZW5zID1cbiAgICAgICAgICAgICAgdG9rZW5MaXN0LnRva2Vucy5sZW5ndGggKyB0b2tlbkxpc3QuaW50cmluc2ljLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlRva2VucyA9PT0gMSAmJiB0b2tlbkxpc3QubGl0ZXJhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0eXBlKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gYFwiJHtpdGVtfVwiYCA6IGl0ZW07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGxpc3RFbGVtZW50SXNPZldyb25nVHlwZSh2YWx1ZSwgaSwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdmFsaWRhdG9yIGZvciBhIHZhcmlhZGljIGFyZ3VtZW50OiB2YWxpZGF0ZXMgdGhlIHZhbHVlIGFzIGEgbGlzdCBhbmQgbWFya3MgaXQgdG8gYmUgZXhwYW5kZWQgaW50b1xuICogc2VwYXJhdGUgYXJndW1lbnRzIG9mIHRoZSBUZXJyYWZvcm0gZnVuY3Rpb24gY2FsbFxuICogQHBhcmFtIHR5cGUgVmFsaWRhdG9yIGFwcGxpZWQgdG8gZWFjaCBlbGVtZW50XG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmb3IgdGhlIHZhcmlhZGljIGFyZ3VtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWRpYzxUPih0eXBlOiBURlZhbHVlVmFsaWRhdG9yPFQ+KTogVEZWYWx1ZVZhbGlkYXRvcjxUW10+IHtcbiAgcmV0dXJuICh2YWx1ZTogYW55KSA9PiB7XG4gICAgLy8gd2UgdXNlIHRoZSBsaXN0IHZhbGlkYXRvciBhbmQgc2V0IHZhcmlhZGljIHRvIHRydWUgaW4gb3JkZXIgdG8gaGF2ZSBpdCBleHBhbmRlZCBpbiB0aGUgYXJncyBwYXNzZWQgdG8gdGhlIFRGIGZ1bmN0aW9uXG4gICAgcmV0dXJuIHsgdmFsdWU6IGxpc3RPZih0eXBlKSh2YWx1ZSkudmFsdWUsIHZhcmlhZGljOiB0cnVlIH07XG4gIH07XG59XG5cbi8vIFRva2VuaXphdGlvblxuLyoqXG4gKiBDb252ZXJ0cyBhIHJlc29sdmFibGUgaW50byBhIHN0cmluZyB0b2tlblxuICogQHBhcmFtIHZhbHVlIFJlc29sdmFibGUgdG8gY29udmVydFxuICogQHJldHVybnMgU3RyaW5nIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc1N0cmluZyh2YWx1ZTogSVJlc29sdmFibGUpIHtcbiAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHJlc29sdmFibGUgaW50byBhIG51bWJlciB0b2tlblxuICogQHBhcmFtIHZhbHVlIFJlc29sdmFibGUgdG8gY29udmVydFxuICogQHJldHVybnMgTnVtYmVyIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc051bWJlcih2YWx1ZTogSVJlc29sdmFibGUpIHtcbiAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHJlc29sdmFibGUgaW50byBhIHN0cmluZyBsaXN0IHRva2VuXG4gKiBAcGFyYW0gdmFsdWUgUmVzb2x2YWJsZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBTdHJpbmcgbGlzdCB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNMaXN0KHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNMaXN0KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHJlc29sdmFibGUgaW50byBhIHN0cmluZyBtYXAgdG9rZW5cbiAqIEBwYXJhbSB2YWx1ZSBSZXNvbHZhYmxlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFN0cmluZyBtYXAgdG9rZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzU3RyaW5nTWFwKHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNTdHJpbmdNYXAodmFsdWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlc29sdmFibGUgdW5jaGFuZ2VkLCBhcyBib29sZWFucyBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGFzIGEgdG9rZW5cbiAqIEBwYXJhbSB2YWx1ZSBSZXNvbHZhYmxlIHRvIHJldHVyblxuICogQHJldHVybnMgVGhlIHNhbWUgcmVzb2x2YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNCb29sZWFuKHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gdmFsdWU7IC8vIEJvb2xlYW5zIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgYXMgYSB0b2tlblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgcmVzb2x2YWJsZSBpbnRvIGEgc3RyaW5nIHRva2VuIHR5cGVkIGFzIGBhbnlgXG4gKiBAcGFyYW0gdmFsdWUgUmVzb2x2YWJsZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBTdHJpbmcgdG9rZW4gdHlwZWQgYXMgYGFueWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQW55KHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICAvLyBPcmRpbmFyaWx5IGNhc3RpbmcgdG8gYW55IGNhbiBjYXVzZSBpc3N1ZXMsIGJ1dFxuICAvLyBpbiB0aGlzIGNhc2UgaXQgbWFrZXMgdXNpbmcgZnVuY3Rpb25zIGEgYml0IGVhc2llciBpbiBUU1xuICAvLyBhbmQgZG9lc24ndCByZWFsbHkgaGFybSBvdGhlciBsYW5ndWFnZXMuXG4gIC8vIEpzaWkgaGFzIGlzc3VlcyB3aGVuIHJldHVybmluZyB0aGUgdmFsdWUgZGlyZWN0bHksXG4gIC8vIHNvIHdyYXAgYXMgYSBzdHJpbmcuXG4gIHJldHVybiBhc1N0cmluZyh2YWx1ZSkgYXMgYW55O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHZhbGlkYXRlcyBpdHMgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgVGVycmFmb3JtIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvblxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgVGVycmFmb3JtIGZ1bmN0aW9uXG4gKiBAcGFyYW0gYXJnVmFsaWRhdG9ycyBWYWxpZGF0b3JzIGZvciBlYWNoIHBvc2l0aW9uYWwgYXJndW1lbnRcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjYWxsIGV4cHJlc3Npb247IGl0IHRocm93cyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBkb2VzIG5vdCBtYXRjaCB0aGVcbiAqIHZhbGlkYXRvcnMgb3IgYW4gYXJndW1lbnQgZmFpbHMgdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVycmFmb3JtRnVuY3Rpb24oXG4gIG5hbWU6IHN0cmluZyxcbiAgYXJnVmFsaWRhdG9yczogVEZWYWx1ZVZhbGlkYXRvcjxhbnk+W10sXG4pOiBFeGVjdXRhYmxlVGZGdW5jdGlvbiB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IGFyZ1ZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBmdW5jdGlvblJlY2VpdmVkV3JvbmdOdW1iZXJPZkFyZ3MoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFyZ1ZhbGlkYXRvcnMubGVuZ3RoLFxuICAgICAgICBhcmdzLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjYWxsKFxuICAgICAgbmFtZSxcbiAgICAgIC8vIFdlIHVzZSBmbGF0TWFwIG5vdywgc2luY2UgbGlzdE9mKCkgd3JhcHMgZXZlcnl0aGluZyBpbiBhbiBleHRyYSBhcnJheSBidXQgdmFyaWFkaWMoKSBkb2VzIG5vdFxuICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIGhhdmUgdmFyaWFkaWMgcGFzcyBtdWx0aXBsZSBhcmdzIGludG8gdGhlIGNhbGwoKSBmcm9tIGEgc2luZ2xlIGFycmF5XG4gICAgICBhcmdzLnJlZHVjZSgoY2FycnksIGFyZywgaSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGFyZ1ZhbGlkYXRvcnNbaV0oYXJnKTtcbiAgICAgICAgICBpZiAodmFsLnZhcmlhZGljKSByZXR1cm4gWy4uLmNhcnJ5LCAuLi52YWwudmFsdWVdO1xuICAgICAgICAgIGVsc2UgcmV0dXJuIFsuLi5jYXJyeSwgdmFsLnZhbHVlXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUoaSwgbmFtZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCBbXSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -10,7 +10,7 @@ const helpers_1 = require("./helpers");
10
10
  * through which every provider-defined function call flows.
11
11
  */
12
12
  class TerraformProviderFunction {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformProviderFunction", version: "0.26.0-pre.20" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformProviderFunction", version: "0.26.0-pre.21" };
14
14
  /**
15
15
  * Invokes a provider-defined function (Terraform's
16
16
  * `provider::<providerLocalName>::<functionName>(...)` syntax).
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Bindings for the Terraform and OpenTofu built-in functions, generated from the function availability matrix.
3
+ */
1
4
  export declare class FnGenerated {
2
5
  /**
3
6
  * {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it.