cdk8s 2.64.25 → 2.65.1

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.
@@ -220,6 +220,21 @@ public synth()
220
220
  public synthYaml()
221
221
  ```
222
222
 
223
+ #### Static Functions <a name="Static Functions"></a>
224
+
225
+ ##### `of` <a name="cdk8s.App.of"></a>
226
+
227
+ ```typescript
228
+ import { App } from 'cdk8s'
229
+
230
+ App.of(c: IConstruct)
231
+ ```
232
+
233
+ ###### `c`<sup>Required</sup> <a name="cdk8s.App.parameter.c"></a>
234
+
235
+ - *Type:* [`constructs.IConstruct`](#constructs.IConstruct)
236
+
237
+ ---
223
238
 
224
239
  #### Properties <a name="Properties"></a>
225
240
 
@@ -260,6 +275,21 @@ The file extension to use for rendered YAML files.
260
275
 
261
276
  ---
262
277
 
278
+ ##### `resolvers`<sup>Required</sup> <a name="cdk8s.App.property.resolvers"></a>
279
+
280
+ ```typescript
281
+ public readonly resolvers: IResolver[];
282
+ ```
283
+
284
+ - *Type:* [`cdk8s.IResolver`](#cdk8s.IResolver)[]
285
+
286
+ Resolvers used by this app.
287
+
288
+ This includes both custom resolvers
289
+ passed by the `resolvers` property, as well as built-in resolvers.
290
+
291
+ ---
292
+
263
293
  ##### `yamlOutputType`<sup>Required</sup> <a name="cdk8s.App.property.yamlOutputType"></a>
264
294
 
265
295
  ```typescript
@@ -646,6 +676,164 @@ relationships.
646
676
 
647
677
  ---
648
678
 
679
+ ### ApiObjectMetadataDefinitionOptions <a name="cdk8s.ApiObjectMetadataDefinitionOptions"></a>
680
+
681
+ Options for `ApiObjectMetadataDefinition`.
682
+
683
+ #### Initializer <a name="[object Object].Initializer"></a>
684
+
685
+ ```typescript
686
+ import { ApiObjectMetadataDefinitionOptions } from 'cdk8s'
687
+
688
+ const apiObjectMetadataDefinitionOptions: ApiObjectMetadataDefinitionOptions = { ... }
689
+ ```
690
+
691
+ ##### `annotations`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.annotations"></a>
692
+
693
+ ```typescript
694
+ public readonly annotations: {[ key: string ]: string};
695
+ ```
696
+
697
+ - *Type:* {[ key: string ]: `string`}
698
+ - *Default:* No annotations.
699
+
700
+ Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
701
+
702
+ They are not queryable and should be
703
+ preserved when modifying objects.
704
+
705
+ > http://kubernetes.io/docs/user-guide/annotations
706
+
707
+ ---
708
+
709
+ ##### `finalizers`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.finalizers"></a>
710
+
711
+ ```typescript
712
+ public readonly finalizers: string[];
713
+ ```
714
+
715
+ - *Type:* `string`[]
716
+ - *Default:* No finalizers.
717
+
718
+ Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion.
719
+
720
+ Must be empty before the object is deleted from the registry. Each entry is
721
+ an identifier for the responsible component that will remove the entry from
722
+ the list. If the deletionTimestamp of the object is non-nil, entries in
723
+ this list can only be removed. Finalizers may be processed and removed in
724
+ any order. Order is NOT enforced because it introduces significant risk of
725
+ stuck finalizers. finalizers is a shared field, any actor with permission
726
+ can reorder it. If the finalizer list is processed in order, then this can
727
+ lead to a situation in which the component responsible for the first
728
+ finalizer in the list is waiting for a signal (field value, external
729
+ system, or other) produced by a component responsible for a finalizer later
730
+ in the list, resulting in a deadlock. Without enforced ordering finalizers
731
+ are free to order amongst themselves and are not vulnerable to ordering
732
+ changes in the list.
733
+
734
+ > https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/
735
+
736
+ ---
737
+
738
+ ##### `labels`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.labels"></a>
739
+
740
+ ```typescript
741
+ public readonly labels: {[ key: string ]: string};
742
+ ```
743
+
744
+ - *Type:* {[ key: string ]: `string`}
745
+ - *Default:* No labels.
746
+
747
+ Map of string keys and values that can be used to organize and categorize (scope and select) objects.
748
+
749
+ May match selectors of replication controllers and services.
750
+
751
+ > http://kubernetes.io/docs/user-guide/labels
752
+
753
+ ---
754
+
755
+ ##### `name`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.name"></a>
756
+
757
+ ```typescript
758
+ public readonly name: string;
759
+ ```
760
+
761
+ - *Type:* `string`
762
+ - *Default:* an app-unique name generated by the chart
763
+
764
+ The unique, namespace-global, name of this object inside the Kubernetes cluster.
765
+
766
+ Normally, you shouldn't specify names for objects and let the CDK generate
767
+ a name for you that is application-unique. The names CDK generates are
768
+ composed from the construct path components, separated by dots and a suffix
769
+ that is based on a hash of the entire path, to ensure uniqueness.
770
+
771
+ You can supply custom name allocation logic by overriding the
772
+ `chart.generateObjectName` method.
773
+
774
+ If you use an explicit name here, bear in mind that this reduces the
775
+ composability of your construct because it won't be possible to include
776
+ more than one instance in any app. Therefore it is highly recommended to
777
+ leave this unspecified.
778
+
779
+ ---
780
+
781
+ ##### `namespace`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.namespace"></a>
782
+
783
+ ```typescript
784
+ public readonly namespace: string;
785
+ ```
786
+
787
+ - *Type:* `string`
788
+ - *Default:* undefined (will be assigned to the 'default' namespace)
789
+
790
+ Namespace defines the space within each name must be unique.
791
+
792
+ An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
793
+ Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces
794
+
795
+ ---
796
+
797
+ ##### `ownerReferences`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.ownerReferences"></a>
798
+
799
+ ```typescript
800
+ public readonly ownerReferences: OwnerReference[];
801
+ ```
802
+
803
+ - *Type:* [`cdk8s.OwnerReference`](#cdk8s.OwnerReference)[]
804
+ - *Default:* automatically set by Kubernetes
805
+
806
+ List of objects depended by this object.
807
+
808
+ If ALL objects in the list have
809
+ been deleted, this object will be garbage collected. If this object is
810
+ managed by a controller, then an entry in this list will point to this
811
+ controller, with the controller field set to true. There cannot be more
812
+ than one managing controller.
813
+
814
+ Kubernetes sets the value of this field automatically for objects that are
815
+ dependents of other objects like ReplicaSets, DaemonSets, Deployments, Jobs
816
+ and CronJobs, and ReplicationControllers. You can also configure these
817
+ relationships manually by changing the value of this field. However, you
818
+ usually don't need to and can allow Kubernetes to automatically manage the
819
+ relationships.
820
+
821
+ > https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/
822
+
823
+ ---
824
+
825
+ ##### `apiObject`<sup>Required</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.apiObject"></a>
826
+
827
+ ```typescript
828
+ public readonly apiObject: ApiObject;
829
+ ```
830
+
831
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
832
+
833
+ Which ApiObject instance is the metadata attached to.
834
+
835
+ ---
836
+
649
837
  ### ApiObjectProps <a name="cdk8s.ApiObjectProps"></a>
650
838
 
651
839
  Options for defining API objects.
@@ -754,6 +942,25 @@ When set to true, the output directory will contain a `construct-metadata.json`
754
942
 
755
943
  ---
756
944
 
945
+ ##### `resolvers`<sup>Optional</sup> <a name="cdk8s.AppProps.property.resolvers"></a>
946
+
947
+ ```typescript
948
+ public readonly resolvers: IResolver[];
949
+ ```
950
+
951
+ - *Type:* [`cdk8s.IResolver`](#cdk8s.IResolver)[]
952
+ - *Default:* no resolvers.
953
+
954
+ A list of resolvers that can be used to replace property values before they are written to the manifest file.
955
+
956
+ When multiple resolvers are passed,
957
+ they are invoked by order in the list, and only the first one that applies
958
+ (e.g calls `context.replaceValue`) is invoked.
959
+
960
+ > https://cdk8s.io/docs/latest/basics/app/#resolvers
961
+
962
+ ---
963
+
757
964
  ##### `yamlOutputType`<sup>Optional</sup> <a name="cdk8s.AppProps.property.yamlOutputType"></a>
758
965
 
759
966
  ```typescript
@@ -1303,12 +1510,12 @@ Object metadata.
1303
1510
  ```typescript
1304
1511
  import { ApiObjectMetadataDefinition } from 'cdk8s'
1305
1512
 
1306
- new ApiObjectMetadataDefinition(options?: ApiObjectMetadata)
1513
+ new ApiObjectMetadataDefinition(options: ApiObjectMetadataDefinitionOptions)
1307
1514
  ```
1308
1515
 
1309
- ##### `options`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinition.parameter.options"></a>
1516
+ ##### `options`<sup>Required</sup> <a name="cdk8s.ApiObjectMetadataDefinition.parameter.options"></a>
1310
1517
 
1311
- - *Type:* [`cdk8s.ApiObjectMetadata`](#cdk8s.ApiObjectMetadata)
1518
+ - *Type:* [`cdk8s.ApiObjectMetadataDefinitionOptions`](#cdk8s.ApiObjectMetadataDefinitionOptions)
1312
1519
 
1313
1520
  ---
1314
1521
 
@@ -1884,6 +2091,37 @@ the amount of Seconds the `Duration` will represent.
1884
2091
 
1885
2092
 
1886
2093
 
2094
+ ### ImplicitTokenResolver <a name="cdk8s.ImplicitTokenResolver"></a>
2095
+
2096
+ - *Implements:* [`cdk8s.IResolver`](#cdk8s.IResolver)
2097
+
2098
+ Resolves implicit tokens.
2099
+
2100
+ #### Initializers <a name="cdk8s.ImplicitTokenResolver.Initializer"></a>
2101
+
2102
+ ```typescript
2103
+ import { ImplicitTokenResolver } from 'cdk8s'
2104
+
2105
+ new ImplicitTokenResolver()
2106
+ ```
2107
+
2108
+ #### Methods <a name="Methods"></a>
2109
+
2110
+ ##### `resolve` <a name="cdk8s.ImplicitTokenResolver.resolve"></a>
2111
+
2112
+ ```typescript
2113
+ public resolve(context: ResolutionContext)
2114
+ ```
2115
+
2116
+ ###### `context`<sup>Required</sup> <a name="cdk8s.ImplicitTokenResolver.parameter.context"></a>
2117
+
2118
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2119
+
2120
+ ---
2121
+
2122
+
2123
+
2124
+
1887
2125
  ### JsonPatch <a name="cdk8s.JsonPatch"></a>
1888
2126
 
1889
2127
  Utility for applying RFC-6902 JSON-Patch to a document.
@@ -2065,6 +2303,37 @@ Lazy.any(producer: IAnyProducer)
2065
2303
 
2066
2304
 
2067
2305
 
2306
+ ### LazyResolver <a name="cdk8s.LazyResolver"></a>
2307
+
2308
+ - *Implements:* [`cdk8s.IResolver`](#cdk8s.IResolver)
2309
+
2310
+ Resolvers instanecs of `Lazy`.
2311
+
2312
+ #### Initializers <a name="cdk8s.LazyResolver.Initializer"></a>
2313
+
2314
+ ```typescript
2315
+ import { LazyResolver } from 'cdk8s'
2316
+
2317
+ new LazyResolver()
2318
+ ```
2319
+
2320
+ #### Methods <a name="Methods"></a>
2321
+
2322
+ ##### `resolve` <a name="cdk8s.LazyResolver.resolve"></a>
2323
+
2324
+ ```typescript
2325
+ public resolve(context: ResolutionContext)
2326
+ ```
2327
+
2328
+ ###### `context`<sup>Required</sup> <a name="cdk8s.LazyResolver.parameter.context"></a>
2329
+
2330
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2331
+
2332
+ ---
2333
+
2334
+
2335
+
2336
+
2068
2337
  ### Names <a name="cdk8s.Names"></a>
2069
2338
 
2070
2339
  Utilities for generating unique and stable names.
@@ -2122,6 +2391,120 @@ Name options.
2122
2391
 
2123
2392
 
2124
2393
 
2394
+ ### ResolutionContext <a name="cdk8s.ResolutionContext"></a>
2395
+
2396
+ Context object for a specific resolution process.
2397
+
2398
+ #### Initializers <a name="cdk8s.ResolutionContext.Initializer"></a>
2399
+
2400
+ ```typescript
2401
+ import { ResolutionContext } from 'cdk8s'
2402
+
2403
+ new ResolutionContext(obj: ApiObject, key: string[], value: any)
2404
+ ```
2405
+
2406
+ ##### `obj`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.obj"></a>
2407
+
2408
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
2409
+
2410
+ Which ApiObject is currently being resolved.
2411
+
2412
+ ---
2413
+
2414
+ ##### `key`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.key"></a>
2415
+
2416
+ - *Type:* `string`[]
2417
+
2418
+ Which key is currently being resolved.
2419
+
2420
+ ---
2421
+
2422
+ ##### `value`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.value"></a>
2423
+
2424
+ - *Type:* `any`
2425
+
2426
+ The value associated to the key currently being resolved.
2427
+
2428
+ ---
2429
+
2430
+ #### Methods <a name="Methods"></a>
2431
+
2432
+ ##### `replaceValue` <a name="cdk8s.ResolutionContext.replaceValue"></a>
2433
+
2434
+ ```typescript
2435
+ public replaceValue(newValue: any)
2436
+ ```
2437
+
2438
+ ###### `newValue`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.newValue"></a>
2439
+
2440
+ - *Type:* `any`
2441
+
2442
+ ---
2443
+
2444
+
2445
+ #### Properties <a name="Properties"></a>
2446
+
2447
+ ##### `key`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.key"></a>
2448
+
2449
+ ```typescript
2450
+ public readonly key: string[];
2451
+ ```
2452
+
2453
+ - *Type:* `string`[]
2454
+
2455
+ Which key is currently being resolved.
2456
+
2457
+ ---
2458
+
2459
+ ##### `obj`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.obj"></a>
2460
+
2461
+ ```typescript
2462
+ public readonly obj: ApiObject;
2463
+ ```
2464
+
2465
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
2466
+
2467
+ Which ApiObject is currently being resolved.
2468
+
2469
+ ---
2470
+
2471
+ ##### `value`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.value"></a>
2472
+
2473
+ ```typescript
2474
+ public readonly value: any;
2475
+ ```
2476
+
2477
+ - *Type:* `any`
2478
+
2479
+ The value associated to the key currently being resolved.
2480
+
2481
+ ---
2482
+
2483
+ ##### `replaced`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.replaced"></a>
2484
+
2485
+ ```typescript
2486
+ public readonly replaced: boolean;
2487
+ ```
2488
+
2489
+ - *Type:* `boolean`
2490
+
2491
+ Whether or not the value was replaced by invoking the `replaceValue` method.
2492
+
2493
+ ---
2494
+
2495
+ ##### `replacedValue`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.replacedValue"></a>
2496
+
2497
+ ```typescript
2498
+ public readonly replacedValue: any;
2499
+ ```
2500
+
2501
+ - *Type:* `any`
2502
+
2503
+ The replaced value that was set via the `replaceValue` method.
2504
+
2505
+ ---
2506
+
2507
+
2125
2508
  ### Size <a name="cdk8s.Size"></a>
2126
2509
 
2127
2510
  Represents the amount of digital storage.
@@ -2422,6 +2805,27 @@ public produce()
2422
2805
  ```
2423
2806
 
2424
2807
 
2808
+ ### IResolver <a name="cdk8s.IResolver"></a>
2809
+
2810
+ - *Implemented By:* [`cdk8s.ImplicitTokenResolver`](#cdk8s.ImplicitTokenResolver), [`cdk8s.LazyResolver`](#cdk8s.LazyResolver), [`cdk8s.IResolver`](#cdk8s.IResolver)
2811
+
2812
+ Contract for resolver objects.
2813
+
2814
+ #### Methods <a name="Methods"></a>
2815
+
2816
+ ##### `resolve` <a name="cdk8s.IResolver.resolve"></a>
2817
+
2818
+ ```typescript
2819
+ public resolve(context: ResolutionContext)
2820
+ ```
2821
+
2822
+ ###### `context`<sup>Required</sup> <a name="cdk8s.IResolver.parameter.context"></a>
2823
+
2824
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2825
+
2826
+ ---
2827
+
2828
+
2425
2829
  ## Enums <a name="Enums"></a>
2426
2830
 
2427
2831
  ### SizeRoundingBehavior <a name="SizeRoundingBehavior"></a>
package/lib/api-object.js CHANGED
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ApiObject = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const constructs_1 = require("constructs");
7
- const _resolve_1 = require("./_resolve");
8
7
  const _util_1 = require("./_util");
9
8
  const chart_1 = require("./chart");
10
9
  const json_patch_1 = require("./json-patch");
11
10
  const metadata_1 = require("./metadata");
11
+ const resolve_1 = require("./resolve");
12
12
  const API_OBJECT_SYMBOL = Symbol.for('cdk8s.ApiObject');
13
13
  class ApiObject extends constructs_1.Construct {
14
14
  /**
@@ -73,6 +73,7 @@ class ApiObject extends constructs_1.Construct {
73
73
  ...this.chart.labels,
74
74
  ...props.metadata?.labels,
75
75
  },
76
+ apiObject: this,
76
77
  });
77
78
  Object.defineProperty(this, API_OBJECT_SYMBOL, { value: true });
78
79
  }
@@ -111,7 +112,7 @@ class ApiObject extends constructs_1.Construct {
111
112
  metadata: this.metadata.toJson(),
112
113
  };
113
114
  const sortKeys = process.env.CDK8S_DISABLE_SORT ? false : true;
114
- const json = (0, _util_1.sanitizeValue)((0, _resolve_1.resolve)(data), { sortKeys });
115
+ const json = (0, _util_1.sanitizeValue)((0, resolve_1.resolve)([], data, this), { sortKeys });
115
116
  const patched = json_patch_1.JsonPatch.apply(json, ...this.patches);
116
117
  // reorder top-level keys so that we first have "apiVersion", "kind" and
117
118
  // "metadata" and then all the rest
@@ -126,7 +127,7 @@ class ApiObject extends constructs_1.Construct {
126
127
  }
127
128
  }
128
129
  exports.ApiObject = ApiObject;
129
- ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.64.25" };
130
+ ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.65.1" };
130
131
  function parseApiGroup(apiVersion) {
131
132
  const v = apiVersion.split('/');
132
133
  // no group means "core"
@@ -139,4 +140,4 @@ function parseApiGroup(apiVersion) {
139
140
  }
140
141
  throw new Error(`invalid apiVersion ${apiVersion}, expecting GROUP/VERSION. See https://kubernetes.io/docs/reference/using-api/api-overview/#api-groups`);
141
142
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQW1EO0FBQ25ELHlDQUFxQztBQUNyQyxtQ0FBd0M7QUFDeEMsbUNBQWdDO0FBQ2hDLDZDQUF5QztBQUN6Qyx5Q0FBNEU7QUE0QzVFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXhELE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBTTtRQUN2QixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsMkJBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQVU7UUFDcEMsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFhO1FBQzVCLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRTtZQUMxQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM1RztRQUVELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBMENEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQW1CLEtB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Q3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsd0JBQXdCO0lBQ3hCLDBFQUEwRTtJQUMxRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixVQUFVLHdHQUF3RyxDQUFDLENBQUM7QUFDNUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJy4vX3Jlc29sdmUnO1xuaW1wb3J0IHsgc2FuaXRpemVWYWx1ZSB9IGZyb20gJy4vX3V0aWwnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcbmltcG9ydCB7IEpzb25QYXRjaCB9IGZyb20gJy4vanNvbi1wYXRjaCc7XG5pbXBvcnQgeyBBcGlPYmplY3RNZXRhZGF0YSwgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZGVmaW5pbmcgQVBJIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpT2JqZWN0UHJvcHMge1xuICAvKipcbiAgICogT2JqZWN0IG1ldGFkYXRhLlxuICAgKlxuICAgKiBJZiBgbmFtZWAgaXMgbm90IHNwZWNpZmllZCwgYW4gYXBwLXVuaXF1ZSBuYW1lIHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoZVxuICAgKiBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIHBhdGggb2YgdGhlIGNvbnN0cnVjdCB3aXRoaW4gdGhlcyBjb25zdHJ1Y3QgdHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEFQSSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHRoaXMgQVBJIG9iamVjdC5cbiAgICogQGpzaWkgaWdub3JlXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NkazhzLXRlYW0vY2RrOHMtY29yZS9pc3N1ZXMvMTI5N1xuICAgKi9cbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVmVyc2lvbktpbmQge1xuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pby92MWApXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuY29uc3QgQVBJX09CSkVDVF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdjZGs4cy5BcGlPYmplY3QnKTtcblxuZXhwb3J0IGNsYXNzIEFwaU9iamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gYEFwaU9iamVjdGAuXG4gICAqXG4gICAqIFdlIGRvIGF0dHJpYnV0ZSBkZXRlY3Rpb24gc2luY2Ugd2UgY2FuJ3QgcmVsaWFibHkgdXNlICdpbnN0YW5jZW9mJy5cblxuICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gICAqL1xuICBzdGF0aWMgaXNBcGlPYmplY3QobzogYW55KTogbyBpcyBBcGlPYmplY3Qge1xuICAgIHJldHVybiBvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBBUElfT0JKRUNUX1NZTUJPTCBpbiBvO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgYGluc3RhbmNlb2YgQXBpT2JqZWN0YCB1c2luZyB0aGUgbW9yZSByZWxpYWJsZSBgQXBpT2JqZWN0LmlzQXBpT2JqZWN0YCBzdGF0aWMgbWV0aG9kXG4gICAqXG4gICAqIEBwYXJhbSBvIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0obzogdW5rbm93bikge1xuICAgIHJldHVybiBBcGlPYmplY3QuaXNBcGlPYmplY3Qobyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBBcGlPYmplY3RgIG5hbWVkIGBSZXNvdXJjZWAgd2hpY2ggaXMgYSBjaGlsZCBvZiB0aGUgZ2l2ZW5cbiAgICogY29uc3RydWN0LiBJZiBgY2AgaXMgYW4gYEFwaU9iamVjdGAsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LiBUaHJvd3MgYW5cbiAgICogZXhjZXB0aW9uIGlmIHRoZSBjb25zdHJ1Y3QgZG9lcyBub3QgaGF2ZSBhIGNoaWxkIG5hbWVkIGBEZWZhdWx0YCBfb3JfIGlmXG4gICAqIHRoaXMgY2hpbGQgaXMgbm90IGFuIGBBcGlPYmplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0gYyBUaGUgaGlnaGVyLWxldmVsIGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihjOiBJQ29uc3RydWN0KTogQXBpT2JqZWN0IHtcbiAgICBpZiAoYyBpbnN0YW5jZW9mIEFwaU9iamVjdCkge1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGQgPSBjLm5vZGUuZGVmYXVsdENoaWxkO1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgYSAoZGlyZWN0IG9yIGluZGlyZWN0KSBjaGlsZCBvZiB0eXBlIEFwaU9iamVjdCBmb3IgY29uc3RydWN0ICR7Yy5ub2RlLnBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwaU9iamVjdC5vZihjaGlsZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIElmIGEgbmFtZSBpcyBzcGVjaWZpZWQgaW4gYG1ldGFkYXRhLm5hbWVgIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgY2FsbGluZ1xuICAgKiBgQ2hhcnQub2YodGhpcykuZ2VuZXJhdGVkT2JqZWN0TmFtZSh0aGlzKWAsIHdoaWNoIGJ5IGRlZmF1bHQgdXNlcyB0aGVcbiAgICogY29uc3RydWN0IHBhdGggdG8gZ2VuZXJhdGUgYSBETlMtY29tcGF0aWJsZSBuYW1lIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0J3MgQVBJIHZlcnNpb24gKGUuZy4gYGF1dGhvcml6YXRpb24uazhzLmlvL3YxYClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBwb3J0aW9uIG9mIHRoZSBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW9gKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBpbiB3aGljaCB0aGlzIG9iamVjdCBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNoYXJ0OiBDaGFydDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVBJIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBKU09OIHBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGRvY3VtZW50IGFmdGVyIHN5bnRoZXNpcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0Y2hlczogQXJyYXk8SnNvblBhdGNoPjtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgbmFtZXNwYWNlXG4gICAqIEBwYXJhbSBwcm9wcyBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlPYmplY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wYXRjaGVzID0gbmV3IEFycmF5PEpzb25QYXRjaD4oKTtcbiAgICB0aGlzLmNoYXJ0ID0gQ2hhcnQub2YodGhpcyk7XG4gICAgdGhpcy5raW5kID0gcHJvcHMua2luZDtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSBwcm9wcy5hcGlWZXJzaW9uO1xuICAgIHRoaXMuYXBpR3JvdXAgPSBwYXJzZUFwaUdyb3VwKHRoaXMuYXBpVmVyc2lvbik7XG5cbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5tZXRhZGF0YT8ubmFtZSA/PyB0aGlzLmNoYXJ0LmdlbmVyYXRlT2JqZWN0TmFtZSh0aGlzKTtcblxuICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uKHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcblxuICAgICAgLy8gdXNlciBkZWZpbmVkIHZhbHVlc1xuICAgICAgLi4ucHJvcHMubWV0YWRhdGEsXG5cbiAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0YWRhdGE/Lm5hbWVzcGFjZSA/PyB0aGlzLmNoYXJ0Lm5hbWVzcGFjZSxcbiAgICAgIGxhYmVsczoge1xuICAgICAgICAuLi50aGlzLmNoYXJ0LmxhYmVscyxcbiAgICAgICAgLi4ucHJvcHMubWV0YWRhdGE/LmxhYmVscyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQVBJX09CSkVDVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoaXMgQXBpT2JqZWN0IGFuZCBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKiBUaGVzZSBjYW4gYmUgb3RoZXIgQXBpT2JqZWN0cywgQ2hhcnRzLCBvciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgdGhlIGRlcGVuZGVuY2llcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXM6IElDb25zdHJ1Y3RbXSkge1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llcyk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIHNldCBvZiBSRkMtNjkwMiBKU09OLVBhdGNoIG9wZXJhdGlvbnMgdG8gdGhlIG1hbmlmZXN0XG4gICAqIHN5bnRoZXNpemVkIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBvcHMgVGhlIEpTT04tUGF0Y2ggb3BlcmF0aW9ucyB0byBhcHBseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICBrdWJlUG9kLmFkZEpzb25QYXRjaChKc29uUGF0Y2gucmVwbGFjZSgnL3NwZWMvZW5hYmxlU2VydmljZUxpbmtzJywgdHJ1ZSkpO1xuICAgKlxuICAgKi9cbiAgcHVibGljIGFkZEpzb25QYXRjaCguLi5vcHM6IEpzb25QYXRjaFtdKSB7XG4gICAgdGhpcy5wYXRjaGVzLnB1c2goLi4ub3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKlxuICAgKiBUbyBkaXNhYmxlIHNvcnRpbmcgb2YgZGljdGlvbmFyeSBrZXlzIGluIG91dHB1dCBvYmplY3Qgc2V0IHRoZVxuICAgKiBgQ0RLOFNfRElTQUJMRV9TT1JUYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhbnkgbm9uLWVtcHR5IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YS50b0pzb24oKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydEtleXMgPSBwcm9jZXNzLmVudi5DREs4U19ESVNBQkxFX1NPUlQgPyBmYWxzZSA6IHRydWU7XG4gICAgY29uc3QganNvbiA9IHNhbml0aXplVmFsdWUocmVzb2x2ZShkYXRhKSwgeyBzb3J0S2V5cyB9KTtcbiAgICBjb25zdCBwYXRjaGVkID0gSnNvblBhdGNoLmFwcGx5KGpzb24sIC4uLnRoaXMucGF0Y2hlcyk7XG5cbiAgICAvLyByZW9yZGVyIHRvcC1sZXZlbCBrZXlzIHNvIHRoYXQgd2UgZmlyc3QgaGF2ZSBcImFwaVZlcnNpb25cIiwgXCJraW5kXCIgYW5kXG4gICAgLy8gXCJtZXRhZGF0YVwiIGFuZCB0aGVuIGFsbCB0aGUgcmVzdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgY29uc3Qgb3JkZXJlZEtleXMgPSBbJ2FwaVZlcnNpb24nLCAna2luZCcsICdtZXRhZGF0YScsIC4uLk9iamVjdC5rZXlzKHBhdGNoZWQpXTtcbiAgICBmb3IgKGNvbnN0IGsgb2Ygb3JkZXJlZEtleXMpIHtcbiAgICAgIGlmIChrIGluIHBhdGNoZWQpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcGF0Y2hlZFtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXBpR3JvdXAoYXBpVmVyc2lvbjogc3RyaW5nKSB7XG4gIGNvbnN0IHYgPSBhcGlWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgLy8gbm8gZ3JvdXAgbWVhbnMgXCJjb3JlXCJcbiAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL3VzaW5nLWFwaS9hcGktb3ZlcnZpZXcvI2FwaS1ncm91cHNcbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuICdjb3JlJztcbiAgfVxuXG4gIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB2WzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFwaVZlcnNpb24gJHthcGlWZXJzaW9ufSwgZXhwZWN0aW5nIEdST1VQL1ZFUlNJT04uIFNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc2ApO1xufVxuIl19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQW1EO0FBQ25ELG1DQUF3QztBQUN4QyxtQ0FBZ0M7QUFDaEMsNkNBQXlDO0FBQ3pDLHlDQUE0RTtBQUM1RSx1Q0FBb0M7QUE0Q3BDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXhELE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBTTtRQUN2QixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsMkJBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQVU7UUFDcEMsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFhO1FBQzVCLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRTtZQUMxQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM1RztRQUVELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBMENEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQW1CLEtB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QXpLSCw4QkEwS0M7O0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBa0I7SUFDdkMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyx3QkFBd0I7SUFDeEIsMEVBQTBFO0lBQzFFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDYjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFVBQVUsd0dBQXdHLENBQUMsQ0FBQztBQUM1SixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBzYW5pdGl6ZVZhbHVlIH0gZnJvbSAnLi9fdXRpbCc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuaW1wb3J0IHsgSnNvblBhdGNoIH0gZnJvbSAnLi9qc29uLXBhdGNoJztcbmltcG9ydCB7IEFwaU9iamVjdE1ldGFkYXRhLCBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24gfSBmcm9tICcuL21ldGFkYXRhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL3Jlc29sdmUnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRlZmluaW5nIEFQSSBvYmplY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9iamVjdFByb3BzIHtcbiAgLyoqXG4gICAqIE9iamVjdCBtZXRhZGF0YS5cbiAgICpcbiAgICogSWYgYG5hbWVgIGlzIG5vdCBzcGVjaWZpZWQsIGFuIGFwcC11bmlxdWUgbmFtZSB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGVcbiAgICogZnJhbWV3b3JrIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSBjb25zdHJ1Y3Qgd2l0aGluIHRoZXMgY29uc3RydWN0IHRyZWUuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBBUEkgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2Uga2luZC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGs4cy10ZWFtL2NkazhzLWNvcmUvaXNzdWVzLzEyOTdcbiAgICovXG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cFZlcnNpb25LaW5kIHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3QncyBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFgKVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IGtpbmQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmNvbnN0IEFQSV9PQkpFQ1RfU1lNQk9MID0gU3ltYm9sLmZvcignY2RrOHMuQXBpT2JqZWN0Jyk7XG5cbmV4cG9ydCBjbGFzcyBBcGlPYmplY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIGBBcGlPYmplY3RgLlxuICAgKlxuICAgKiBXZSBkbyBhdHRyaWJ1dGUgZGV0ZWN0aW9uIHNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IHVzZSAnaW5zdGFuY2VvZicuXG5cbiAgICogQHBhcmFtIG8gVGhlIG9iamVjdCB0byBjaGVja1xuICAgKi9cbiAgc3RhdGljIGlzQXBpT2JqZWN0KG86IGFueSk6IG8gaXMgQXBpT2JqZWN0IHtcbiAgICByZXR1cm4gbyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgQVBJX09CSkVDVF9TWU1CT0wgaW4gbztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIGBpbnN0YW5jZW9mIEFwaU9iamVjdGAgdXNpbmcgdGhlIG1vcmUgcmVsaWFibGUgYEFwaU9iamVjdC5pc0FwaU9iamVjdGAgc3RhdGljIG1ldGhvZFxuICAgKlxuICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKG86IHVua25vd24pIHtcbiAgICByZXR1cm4gQXBpT2JqZWN0LmlzQXBpT2JqZWN0KG8pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgQXBpT2JqZWN0YCBuYW1lZCBgUmVzb3VyY2VgIHdoaWNoIGlzIGEgY2hpbGQgb2YgdGhlIGdpdmVuXG4gICAqIGNvbnN0cnVjdC4gSWYgYGNgIGlzIGFuIGBBcGlPYmplY3RgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4gVGhyb3dzIGFuXG4gICAqIGV4Y2VwdGlvbiBpZiB0aGUgY29uc3RydWN0IGRvZXMgbm90IGhhdmUgYSBjaGlsZCBuYW1lZCBgRGVmYXVsdGAgX29yXyBpZlxuICAgKiB0aGlzIGNoaWxkIGlzIG5vdCBhbiBgQXBpT2JqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIGMgVGhlIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwaU9iamVjdCB7XG4gICAgaWYgKGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkID0gYy5ub2RlLmRlZmF1bHRDaGlsZDtcbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBmaW5kIGEgKGRpcmVjdCBvciBpbmRpcmVjdCkgY2hpbGQgb2YgdHlwZSBBcGlPYmplY3QgZm9yIGNvbnN0cnVjdCAke2Mubm9kZS5wYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiBBcGlPYmplY3Qub2YoY2hpbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBJZiBhIG5hbWUgaXMgc3BlY2lmaWVkIGluIGBtZXRhZGF0YS5uYW1lYCB0aGlzIHdpbGwgYmUgdGhlIG5hbWUgcmV0dXJuZWQuXG4gICAqIE90aGVyd2lzZSwgYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IGNhbGxpbmdcbiAgICogYENoYXJ0Lm9mKHRoaXMpLmdlbmVyYXRlZE9iamVjdE5hbWUodGhpcylgLCB3aGljaCBieSBkZWZhdWx0IHVzZXMgdGhlXG4gICAqIGNvbnN0cnVjdCBwYXRoIHRvIGdlbmVyYXRlIGEgRE5TLWNvbXBhdGlibGUgbmFtZSBmb3IgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pby92MWApXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ3JvdXAgcG9ydGlvbiBvZiB0aGUgQVBJIHZlcnNpb24gKGUuZy4gYGF1dGhvcml6YXRpb24uazhzLmlvYClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlHcm91cDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IGtpbmQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgaW4gd2hpY2ggdGhpcyBvYmplY3QgaXMgZGVmaW5lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjaGFydDogQ2hhcnQ7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFQSSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogQSBzZXQgb2YgSlNPTiBwYXRjaCBvcGVyYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBkb2N1bWVudCBhZnRlciBzeW50aGVzaXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhdGNoZXM6IEFycmF5PEpzb25QYXRjaD47XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYW4gQVBJIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIG5hbWVzcGFjZVxuICAgKiBAcGFyYW0gcHJvcHMgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXBpT2JqZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucGF0Y2hlcyA9IG5ldyBBcnJheTxKc29uUGF0Y2g+KCk7XG4gICAgdGhpcy5jaGFydCA9IENoYXJ0Lm9mKHRoaXMpO1xuICAgIHRoaXMua2luZCA9IHByb3BzLmtpbmQ7XG4gICAgdGhpcy5hcGlWZXJzaW9uID0gcHJvcHMuYXBpVmVyc2lvbjtcbiAgICB0aGlzLmFwaUdyb3VwID0gcGFyc2VBcGlHcm91cCh0aGlzLmFwaVZlcnNpb24pO1xuXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubWV0YWRhdGE/Lm5hbWUgPz8gdGhpcy5jaGFydC5nZW5lcmF0ZU9iamVjdE5hbWUodGhpcyk7XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gbmV3IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbih7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG5cbiAgICAgIC8vIHVzZXIgZGVmaW5lZCB2YWx1ZXNcbiAgICAgIC4uLnByb3BzLm1ldGFkYXRhLFxuXG4gICAgICBuYW1lc3BhY2U6IHByb3BzLm1ldGFkYXRhPy5uYW1lc3BhY2UgPz8gdGhpcy5jaGFydC5uYW1lc3BhY2UsXG4gICAgICBsYWJlbHM6IHtcbiAgICAgICAgLi4udGhpcy5jaGFydC5sYWJlbHMsXG4gICAgICAgIC4uLnByb3BzLm1ldGFkYXRhPy5sYWJlbHMsXG4gICAgICB9LFxuICAgICAgYXBpT2JqZWN0OiB0aGlzLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIEFQSV9PQkpFQ1RfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGlzIEFwaU9iamVjdCBhbmQgb3RoZXIgY29uc3RydWN0cy5cbiAgICogVGhlc2UgY2FuIGJlIG90aGVyIEFwaU9iamVjdHMsIENoYXJ0cywgb3IgY3VzdG9tLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIHRoZSBkZXBlbmRlbmNpZXMgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koLi4uZGVwZW5kZW5jaWVzOiBJQ29uc3RydWN0W10pIHtcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBzZXQgb2YgUkZDLTY5MDIgSlNPTi1QYXRjaCBvcGVyYXRpb25zIHRvIHRoZSBtYW5pZmVzdFxuICAgKiBzeW50aGVzaXplZCBmb3IgdGhpcyBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3BzIFRoZSBKU09OLVBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAga3ViZVBvZC5hZGRKc29uUGF0Y2goSnNvblBhdGNoLnJlcGxhY2UoJy9zcGVjL2VuYWJsZVNlcnZpY2VMaW5rcycsIHRydWUpKTtcbiAgICpcbiAgICovXG4gIHB1YmxpYyBhZGRKc29uUGF0Y2goLi4ub3BzOiBKc29uUGF0Y2hbXSkge1xuICAgIHRoaXMucGF0Y2hlcy5wdXNoKC4uLm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICpcbiAgICogVG8gZGlzYWJsZSBzb3J0aW5nIG9mIGRpY3Rpb25hcnkga2V5cyBpbiBvdXRwdXQgb2JqZWN0IHNldCB0aGVcbiAgICogYENESzhTX0RJU0FCTEVfU09SVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYW55IG5vbi1lbXB0eSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGEudG9Kc29uKCksXG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRLZXlzID0gcHJvY2Vzcy5lbnYuQ0RLOFNfRElTQUJMRV9TT1JUID8gZmFsc2UgOiB0cnVlO1xuICAgIGNvbnN0IGpzb24gPSBzYW5pdGl6ZVZhbHVlKHJlc29sdmUoW10sIGRhdGEsIHRoaXMpLCB7IHNvcnRLZXlzIH0pO1xuICAgIGNvbnN0IHBhdGNoZWQgPSBKc29uUGF0Y2guYXBwbHkoanNvbiwgLi4udGhpcy5wYXRjaGVzKTtcblxuICAgIC8vIHJlb3JkZXIgdG9wLWxldmVsIGtleXMgc28gdGhhdCB3ZSBmaXJzdCBoYXZlIFwiYXBpVmVyc2lvblwiLCBcImtpbmRcIiBhbmRcbiAgICAvLyBcIm1ldGFkYXRhXCIgYW5kIHRoZW4gYWxsIHRoZSByZXN0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBjb25zdCBvcmRlcmVkS2V5cyA9IFsnYXBpVmVyc2lvbicsICdraW5kJywgJ21ldGFkYXRhJywgLi4uT2JqZWN0LmtleXMocGF0Y2hlZCldO1xuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkS2V5cykge1xuICAgICAgaWYgKGsgaW4gcGF0Y2hlZCkge1xuICAgICAgICByZXN1bHRba10gPSBwYXRjaGVkW2tdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBcGlHcm91cChhcGlWZXJzaW9uOiBzdHJpbmcpIHtcbiAgY29uc3QgdiA9IGFwaVZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAvLyBubyBncm91cCBtZWFucyBcImNvcmVcIlxuICAvLyBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc1xuICBpZiAodi5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gJ2NvcmUnO1xuICB9XG5cbiAgaWYgKHYubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHZbMF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYXBpVmVyc2lvbiAke2FwaVZlcnNpb259LCBleHBlY3RpbmcgR1JPVVAvVkVSU0lPTi4gU2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS91c2luZy1hcGkvYXBpLW92ZXJ2aWV3LyNhcGktZ3JvdXBzYCk7XG59XG4iXX0=
package/lib/app.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { Construct } from 'constructs';
1
+ import { Construct, IConstruct } from 'constructs';
2
2
  import { Chart } from './chart';
3
+ import { IResolver } from './resolve';
3
4
  /** The method to divide YAML output into files */
4
5
  export declare enum YamlOutputType {
5
6
  /** All resources are output into a single YAML file */
@@ -43,6 +44,17 @@ export interface AppProps {
43
44
  * @default false
44
45
  */
45
46
  readonly recordConstructMetadata?: boolean;
47
+ /**
48
+ * A list of resolvers that can be used to replace property values before
49
+ * they are written to the manifest file. When multiple resolvers are passed,
50
+ * they are invoked by order in the list, and only the first one that applies
51
+ * (e.g calls `context.replaceValue`) is invoked.
52
+ *
53
+ * @see https://cdk8s.io/docs/latest/basics/app/#resolvers
54
+ *
55
+ * @default - no resolvers.
56
+ */
57
+ readonly resolvers?: IResolver[];
46
58
  }
47
59
  /**
48
60
  * Represents a cdk8s application.
@@ -62,7 +74,7 @@ export declare class App extends Construct {
62
74
  * @internal
63
75
  */
64
76
  static _synthChart(chart: Chart): any[];
65
- private static of;
77
+ static of(c: IConstruct): App;
66
78
  /**
67
79
  * The output directory into which manifests will be synthesized.
68
80
  */
@@ -76,6 +88,11 @@ export declare class App extends Construct {
76
88
  * @default YamlOutputType.FILE_PER_CHART
77
89
  */
78
90
  readonly yamlOutputType: YamlOutputType;
91
+ /**
92
+ * Resolvers used by this app. This includes both custom resolvers
93
+ * passed by the `resolvers` property, as well as built-in resolvers.
94
+ */
95
+ readonly resolvers: IResolver[];
79
96
  private readonly recordConstructMetadata;
80
97
  /**
81
98
  * Returns all the charts in this app, sorted topologically.