cdk8s 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +57 -13
- package/API.md +3 -0
- package/README.md +34 -2
- package/lib/api-object.d.ts +44 -16
- package/lib/api-object.js +22 -10
- package/lib/app.d.ts +18 -6
- package/lib/app.js +11 -5
- package/lib/chart.d.ts +51 -8
- package/lib/chart.js +31 -6
- package/lib/dependency.d.ts +31 -9
- package/lib/dependency.js +32 -10
- package/lib/helm.d.ts +26 -11
- package/lib/helm.js +7 -2
- package/lib/include.d.ts +17 -5
- package/lib/include.js +10 -4
- package/lib/lazy.d.ts +15 -0
- package/lib/lazy.js +10 -1
- package/lib/metadata.d.ts +44 -18
- package/lib/metadata.js +21 -9
- package/lib/names.d.ts +18 -18
- package/lib/names.js +19 -19
- package/lib/testing.d.ts +10 -4
- package/lib/testing.js +11 -5
- package/lib/yaml.d.ts +14 -9
- package/lib/yaml.js +15 -10
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"stability": "experimental"
|
|
45
45
|
},
|
|
46
46
|
"homepage": "https://github.com/awslabs/cdk8s.git",
|
|
47
|
-
"jsiiVersion": "1.
|
|
47
|
+
"jsiiVersion": "1.13.0 (build 385c325)",
|
|
48
48
|
"keywords": [
|
|
49
49
|
"cdk",
|
|
50
50
|
"kubernetes",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"license": "Apache-2.0",
|
|
55
55
|
"name": "cdk8s",
|
|
56
56
|
"readme": {
|
|
57
|
-
"markdown": "# cdk8s\n\n> Cloud Development Kit for Kubernetes\n\n**cdk8s** is a software development framework for defining Kubernetes\napplications using rich object-oriented APIs. It allows developers to leverage\nthe full power of software in order to define abstract components called\n\"constructs\" which compose Kubernetes resources or other constructs into\nhigher-level abstractions.\n\nThis library is the foundation of **cdk8s**. It includes base types that are\nused to define cdk8s applications.\n\n## Chart\n\nThe `Chart` is a container that synthesizes a single Kubernetes manifest.\n\n```ts\nclass MyChart extends Chart {\n constructor(scope: Construct, ns: string) {\n super(scope, ns);\n\n // add contents here\n }\n}\n```\n\nDuring synthesis, charts collect all the `ApiObject` nodes (recursively) and\nemit a single YAML manifest that includes all these objects.\n\n## ApiObject\n\nAn `ApiObject` is a construct that represents an entry in a Kubernetes manifest (level 0).\nIn most cases, you won't use `ApiObject` directly but rather use classes that\nare imported through `cdk8s import` and which extend this base class.\n\n## Include\n\nThe `Include` construct can be used to include an existing manifest in a chart.\n\nThe following example will include the Kubernetes Dashboard in `MyChart`:\n\n```ts\nimport { Include } from 'cdk8s';\n\nclass MyChart extends Chart {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n const dashboard = new Include(this, 'dashboard', {\n url: 'https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml',\n // or\n url: 'dashboard.yaml'\n });\n\n // ...other resources\n }\n}\n```\n\nAll API objects defined in the included manifest will be added as children\n`ApiObject`s under the `Include` construct's scope and can be accessed\nthrough the `apiObject` property:\n\nThe following example queries for all the `Deployment` resources in the\ndashboard:\n\n```ts\nconst deploymentApiObject = dashboard.apiObjects.find(c => c.kind === 'Deployment);\n```\n\nNOTE: names of included objects (`metadata.name`) are preserved. This means that\nif you try to include the same manifest twice into the same chart, your manifest\nwill have duplicate definitions of the same objects.\n\n## Dependencies\n\nYou can declare dependencies between any two cdk8s constructs using the `addDependency()` method.\n\n### ApiObjects\n\nFor example, you can force kubernetes to first apply a `Namespace` before applying the `Service` in the scope of that namespace:\n\n```typescript\n\nconst namespace = new k8s.Namespace(chart, 'backend');\nconst service = new k8s.Service(chart, 'Service', { metadata: { namespace: namespace.name }});\n\n// declare the dependency. this is just a syntactic sugar for Node.of(service).addDependency(namespace)\nservice.addDependency(namespace);\n```\n\n`cdk8s` will ensure that the `Namespace` object is placed before the `Service` object in the resulting manifest:\n\n```yaml\napiVersion: v1\nkind: Namespace\nmetadata:\n name: chart-backend-a59d2e47\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: chart-service-93d02be7\n namespace: chart-backend-a59d2e47\n```\n\n### Charts\n\nYou can also specify dependencies between charts, in exactly the same manner. For example, if we have a chart that provisions our `namespace`, we need that chart to be applied first:\n\n```typescript\nconst namespaceChart = new NamespaceChart(app, 'namespace');\nconst applicationChart = new ApplicationChart(app, 'application');\n\n// declare the dependency. this is just a syntactic sugar for Node.of(applicationChart).addDependency(namespaceChart)\napplicationChart.addDependency(namespaceChart);\n```\n\nRunning `cdk8s synth` will produce the following `dist` directory:\n\n```console\n> cdk8s synth\n\ndist/0000-namespace.k8s.yaml\ndist/0001-application.k8s.yaml\n```\n\nNotice that the `namespace` chart appears first with the `0000` prefix. This will ensure that a subsequent execution of `kubectl apply -f dist/` will apply the `namespace` first, and the `application` second.\n\n### Custom Constructs\n\nThe behavior above applies in the same way to custom constructs that you create or use.\n\n```typescript\nclass Database extends Construct {\n constructor(scope: Construct, name: string) {\n super(scope, name);\n\n new k8s.StatefulSet(this, 'StatefulSet');\n new k8s.ConfigMap(this, 'ConfigMap');\n }\n}\n\nconst app = new App();\n\nconst chart = new Chart(app, 'Chart');\n\nconst service = new k8s.Service(chart, 'Service')\nconst database = new Database(chart, 'Database');\n\nservice.addDependency(database);\n```\n\nDeclaring such a dependency will cause **each** `ApiObject` in the source construct, to *depend on* **every** `ApiObject` in the target construct.\n\nNote that in the example above, the source construct is actually an `ApiObject`, which is also ok since it is essentially a construct with a single `ApiObject`.\n\n> Note that if the source of your dependency is a custom construct, it won't have the `addDependency` syntactic sugar by default, so you'll have to use `Node.of()`.\n\nThe resulting manifest will be:\n\n```yaml\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: chart-database-statefulset-4627f8e2\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: chart-database-configmap-676f8640\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: chart-service-93d02be7\n```\n\nYou can see that all `ApiObject`s of the `Database` construct, appear before the `Service` object.\n\n### Things just got cool\n\nIf you simply declare a dependency between two `ApiObject`s (or `Constructs`), that belong to two different `Chart`s, `cdk8s` will create the chart dependency automatically for you.\n\n```typescript\nconst namespaceChart = new NamespaceChart(app, 'namespace');\nconst applicationChart = new ApplicationChart(app, 'application');\n\nconst namespace = new k8s.Namespace(namespaceChart, 'namespace');\nconst deployment = new k8s.Deployment(applicationChart, 'Deployment');\n\n// dependency between ApiObjects, not Charts!\ndeployment.addDependency(namespace);\n```\n\nRunning `cdk8s synth` will produce the same result as if explicit chart dependencies were declared:\n\n```console\n> cdk8s synth\n\ndist/0000-namespace.k8s.yaml\ndist/0001-application.k8s.yaml\n```\n\nThis means you need not be bothered with managing chart dependencies, simply work with the `ApiObject`s you create, and let `cdk8s` infer the chart dependencies.\n\n## Helm Support\n\nYou can use the `Helm` construct in order to include [Helm](https://helm.sh)\ncharts.\n\nIn order to use this construct, you must have `helm` installed on your system.\nSee [Installing Helm](https://helm.sh/docs/intro/install/) in the Helm\ndocumentation for details.\n\nThe following example adds the\n[bitnami/redis](https://github.com/bitnami/charts/tree/master/bitnami/redis)\nHelm chart with sentinel containers enabled:\n\n> The Bitnami helm repo needs to be added through: `helm repo add bitnami https://charts.bitnami.com/bitnami`\n\n```ts\nclass MyChart extends cdk8s.Chart {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n const redis = new Helm(this, 'redis', {\n chart: 'bitnami/redis',\n values: {\n sentinel: {\n enabled: true\n }\n }\n });\n }\n}\n```\n\nThe `Helm` construct will render the manifest from the specified chart by\nexecuting `helm template`. If `values` is specified, these values will override\nthe default values included with the chart.\n\nThe `name` option can be used to specify the chart's [release name](https://helm.sh/docs/intro/using_helm/#three-big-concepts).\nIf not specified, a valid and unique release name will be allocated\nbased on the construct path.\n\nThe `Helm` construct extends `Include` and inherits it's API. For example, you\ncan use the `apiObjects` property to find and interact with included API\nobjects.\n\nThe following example shows how to add an annotation to the Redis master\ndeployment:\n\n```ts\nconst master = redis.apiObjects.find(o => o.name === 'foo-redis-master);\nmaster.metadata.addAnnotation('my.annotation', 'hey-there');\n```\n\n## Testing\n\ncdk8s bundles a set of test utilities under the `Testing` class:\n\n* `Testing.app()` returns an `App` object bound to a temporary output directory.\n* `Testing.chart()` returns a `Chart` object bound to a testing app.\n* `Testing.synth(chart)` returns the Kubernetes manifest synthesized from a\n chart.\n\n## License\n\nThis project is distributed under the [Apache License, Version 2.0](./LICENSE).\n\nThis module is part of the [cdk8s project](https://github.com/awslabs/cdk8s).\n"
|
|
57
|
+
"markdown": "# cdk8s\n\n> Cloud Development Kit for Kubernetes\n\n**cdk8s** is a software development framework for defining Kubernetes\napplications using rich object-oriented APIs. It allows developers to leverage\nthe full power of software in order to define abstract components called\n\"constructs\" which compose Kubernetes resources or other constructs into\nhigher-level abstractions.\n\nThis library is the foundation of **cdk8s**. It includes base types that are\nused to define cdk8s applications.\n\n## Chart\n\nThe `Chart` is a container that synthesizes a single Kubernetes manifest.\n\n```ts\nclass MyChart extends Chart {\n constructor(scope: Construct, ns: string) {\n super(scope, ns);\n\n // add contents here\n }\n}\n```\n\nDuring synthesis, charts collect all the `ApiObject` nodes (recursively) and\nemit a single YAML manifest that includes all these objects.\n\nWhen a chart is defined, you can specify chart-level `namespace` and `labels`.\nThose will be applied to all API objects defined within the chart (recursively):\n\n```ts\nclass MyChart extends Chart {\n constructor(scope: Construct, ns: string) {\n super(scope, ns, {\n namespace: 'my-namespace',\n labels: {\n app: 'my-app',\n },\n });\n\n new ApiObject(this, 'my-object', {\n apiVersion: 'v1',\n kind: 'Foo'\n });\n }\n}\n```\n\nWill synthesize into:\n\n```yaml\napiVersion: v1\nkind: Foo\nmetadata:\n namesapce: my-namespace\n labels:\n app: my-app\n```\n\n## ApiObject\n\nAn `ApiObject` is a construct that represents an entry in a Kubernetes manifest (level 0).\nIn most cases, you won't use `ApiObject` directly but rather use classes that\nare imported through `cdk8s import` and which extend this base class.\n\n## Include\n\nThe `Include` construct can be used to include an existing manifest in a chart.\n\nThe following example will include the Kubernetes Dashboard in `MyChart`:\n\n```ts\nimport { Include } from 'cdk8s';\n\nclass MyChart extends Chart {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n const dashboard = new Include(this, 'dashboard', {\n url: 'https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml',\n // or\n url: 'dashboard.yaml'\n });\n\n // ...other resources\n }\n}\n```\n\nAll API objects defined in the included manifest will be added as children\n`ApiObject`s under the `Include` construct's scope and can be accessed\nthrough the `apiObject` property:\n\nThe following example queries for all the `Deployment` resources in the\ndashboard:\n\n```ts\nconst deploymentApiObject = dashboard.apiObjects.find(c => c.kind === 'Deployment);\n```\n\nNOTE: names of included objects (`metadata.name`) are preserved. This means that\nif you try to include the same manifest twice into the same chart, your manifest\nwill have duplicate definitions of the same objects.\n\n## Dependencies\n\nYou can declare dependencies between any two cdk8s constructs using the `addDependency()` method.\n\n### ApiObjects\n\nFor example, you can force kubernetes to first apply a `Namespace` before applying the `Service` in the scope of that namespace:\n\n```typescript\n\nconst namespace = new k8s.Namespace(chart, 'backend');\nconst service = new k8s.Service(chart, 'Service', { metadata: { namespace: namespace.name }});\n\n// declare the dependency. this is just a syntactic sugar for Node.of(service).addDependency(namespace)\nservice.addDependency(namespace);\n```\n\n`cdk8s` will ensure that the `Namespace` object is placed before the `Service` object in the resulting manifest:\n\n```yaml\napiVersion: v1\nkind: Namespace\nmetadata:\n name: chart-backend-a59d2e47\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: chart-service-93d02be7\n namespace: chart-backend-a59d2e47\n```\n\n### Charts\n\nYou can also specify dependencies between charts, in exactly the same manner. For example, if we have a chart that provisions our `namespace`, we need that chart to be applied first:\n\n```typescript\nconst namespaceChart = new NamespaceChart(app, 'namespace');\nconst applicationChart = new ApplicationChart(app, 'application');\n\n// declare the dependency. this is just a syntactic sugar for Node.of(applicationChart).addDependency(namespaceChart)\napplicationChart.addDependency(namespaceChart);\n```\n\nRunning `cdk8s synth` will produce the following `dist` directory:\n\n```console\n> cdk8s synth\n\ndist/0000-namespace.k8s.yaml\ndist/0001-application.k8s.yaml\n```\n\nNotice that the `namespace` chart appears first with the `0000` prefix. This will ensure that a subsequent execution of `kubectl apply -f dist/` will apply the `namespace` first, and the `application` second.\n\n### Custom Constructs\n\nThe behavior above applies in the same way to custom constructs that you create or use.\n\n```typescript\nclass Database extends Construct {\n constructor(scope: Construct, name: string) {\n super(scope, name);\n\n new k8s.StatefulSet(this, 'StatefulSet');\n new k8s.ConfigMap(this, 'ConfigMap');\n }\n}\n\nconst app = new App();\n\nconst chart = new Chart(app, 'Chart');\n\nconst service = new k8s.Service(chart, 'Service')\nconst database = new Database(chart, 'Database');\n\nservice.addDependency(database);\n```\n\nDeclaring such a dependency will cause **each** `ApiObject` in the source construct, to *depend on* **every** `ApiObject` in the target construct.\n\nNote that in the example above, the source construct is actually an `ApiObject`, which is also ok since it is essentially a construct with a single `ApiObject`.\n\n> Note that if the source of your dependency is a custom construct, it won't have the `addDependency` syntactic sugar by default, so you'll have to use `Node.of()`.\n\nThe resulting manifest will be:\n\n```yaml\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: chart-database-statefulset-4627f8e2\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: chart-database-configmap-676f8640\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: chart-service-93d02be7\n```\n\nYou can see that all `ApiObject`s of the `Database` construct, appear before the `Service` object.\n\n### Things just got cool\n\nIf you simply declare a dependency between two `ApiObject`s (or `Constructs`), that belong to two different `Chart`s, `cdk8s` will create the chart dependency automatically for you.\n\n```typescript\nconst namespaceChart = new NamespaceChart(app, 'namespace');\nconst applicationChart = new ApplicationChart(app, 'application');\n\nconst namespace = new k8s.Namespace(namespaceChart, 'namespace');\nconst deployment = new k8s.Deployment(applicationChart, 'Deployment');\n\n// dependency between ApiObjects, not Charts!\ndeployment.addDependency(namespace);\n```\n\nRunning `cdk8s synth` will produce the same result as if explicit chart dependencies were declared:\n\n```console\n> cdk8s synth\n\ndist/0000-namespace.k8s.yaml\ndist/0001-application.k8s.yaml\n```\n\nThis means you need not be bothered with managing chart dependencies, simply work with the `ApiObject`s you create, and let `cdk8s` infer the chart dependencies.\n\n## Helm Support\n\nYou can use the `Helm` construct in order to include [Helm](https://helm.sh)\ncharts.\n\nIn order to use this construct, you must have `helm` installed on your system.\nSee [Installing Helm](https://helm.sh/docs/intro/install/) in the Helm\ndocumentation for details.\n\nThe following example adds the\n[bitnami/redis](https://github.com/bitnami/charts/tree/master/bitnami/redis)\nHelm chart with sentinel containers enabled:\n\n> The Bitnami helm repo needs to be added through: `helm repo add bitnami https://charts.bitnami.com/bitnami`\n\n```ts\nclass MyChart extends cdk8s.Chart {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n const redis = new Helm(this, 'redis', {\n chart: 'bitnami/redis',\n values: {\n sentinel: {\n enabled: true\n }\n }\n });\n }\n}\n```\n\nThe `Helm` construct will render the manifest from the specified chart by\nexecuting `helm template`. If `values` is specified, these values will override\nthe default values included with the chart.\n\nThe `name` option can be used to specify the chart's [release name](https://helm.sh/docs/intro/using_helm/#three-big-concepts).\nIf not specified, a valid and unique release name will be allocated\nbased on the construct path.\n\nThe `Helm` construct extends `Include` and inherits it's API. For example, you\ncan use the `apiObjects` property to find and interact with included API\nobjects.\n\nThe following example shows how to add an annotation to the Redis master\ndeployment:\n\n```ts\nconst master = redis.apiObjects.find(o => o.name === 'foo-redis-master);\nmaster.metadata.addAnnotation('my.annotation', 'hey-there');\n```\n\n## Testing\n\ncdk8s bundles a set of test utilities under the `Testing` class:\n\n* `Testing.app()` returns an `App` object bound to a temporary output directory.\n* `Testing.chart()` returns a `Chart` object bound to a testing app.\n* `Testing.synth(chart)` returns the Kubernetes manifest synthesized from a\n chart.\n\n## License\n\nThis project is distributed under the [Apache License, Version 2.0](./LICENSE).\n\nThis module is part of the [cdk8s project](https://github.com/awslabs/cdk8s).\n"
|
|
58
58
|
},
|
|
59
59
|
"repository": {
|
|
60
60
|
"type": "git",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
},
|
|
143
143
|
"locationInModule": {
|
|
144
144
|
"filename": "src/api-object.ts",
|
|
145
|
-
"line":
|
|
145
|
+
"line": 108
|
|
146
146
|
},
|
|
147
147
|
"name": "addDependency",
|
|
148
148
|
"parameters": [
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
},
|
|
167
167
|
"locationInModule": {
|
|
168
168
|
"filename": "src/api-object.ts",
|
|
169
|
-
"line":
|
|
169
|
+
"line": 115
|
|
170
170
|
},
|
|
171
171
|
"name": "toJson",
|
|
172
172
|
"returns": {
|
|
@@ -763,7 +763,7 @@
|
|
|
763
763
|
},
|
|
764
764
|
"locationInModule": {
|
|
765
765
|
"filename": "src/chart.ts",
|
|
766
|
-
"line":
|
|
766
|
+
"line": 53
|
|
767
767
|
},
|
|
768
768
|
"parameters": [
|
|
769
769
|
{
|
|
@@ -790,7 +790,7 @@
|
|
|
790
790
|
"kind": "class",
|
|
791
791
|
"locationInModule": {
|
|
792
792
|
"filename": "src/chart.ts",
|
|
793
|
-
"line":
|
|
793
|
+
"line": 24
|
|
794
794
|
},
|
|
795
795
|
"methods": [
|
|
796
796
|
{
|
|
@@ -800,7 +800,7 @@
|
|
|
800
800
|
},
|
|
801
801
|
"locationInModule": {
|
|
802
802
|
"filename": "src/chart.ts",
|
|
803
|
-
"line":
|
|
803
|
+
"line": 30
|
|
804
804
|
},
|
|
805
805
|
"name": "of",
|
|
806
806
|
"parameters": [
|
|
@@ -829,7 +829,7 @@
|
|
|
829
829
|
},
|
|
830
830
|
"locationInModule": {
|
|
831
831
|
"filename": "src/chart.ts",
|
|
832
|
-
"line":
|
|
832
|
+
"line": 98
|
|
833
833
|
},
|
|
834
834
|
"name": "addDependency",
|
|
835
835
|
"parameters": [
|
|
@@ -854,7 +854,7 @@
|
|
|
854
854
|
},
|
|
855
855
|
"locationInModule": {
|
|
856
856
|
"filename": "src/chart.ts",
|
|
857
|
-
"line":
|
|
857
|
+
"line": 88
|
|
858
858
|
},
|
|
859
859
|
"name": "generateObjectName",
|
|
860
860
|
"parameters": [
|
|
@@ -882,7 +882,7 @@
|
|
|
882
882
|
},
|
|
883
883
|
"locationInModule": {
|
|
884
884
|
"filename": "src/chart.ts",
|
|
885
|
-
"line":
|
|
885
|
+
"line": 106
|
|
886
886
|
},
|
|
887
887
|
"name": "toJson",
|
|
888
888
|
"returns": {
|
|
@@ -899,6 +899,27 @@
|
|
|
899
899
|
],
|
|
900
900
|
"name": "Chart",
|
|
901
901
|
"properties": [
|
|
902
|
+
{
|
|
903
|
+
"docs": {
|
|
904
|
+
"remarks": "This is an immutable copy.",
|
|
905
|
+
"stability": "experimental",
|
|
906
|
+
"summary": "Labels applied to all resources in this chart."
|
|
907
|
+
},
|
|
908
|
+
"immutable": true,
|
|
909
|
+
"locationInModule": {
|
|
910
|
+
"filename": "src/chart.ts",
|
|
911
|
+
"line": 64
|
|
912
|
+
},
|
|
913
|
+
"name": "labels",
|
|
914
|
+
"type": {
|
|
915
|
+
"collection": {
|
|
916
|
+
"elementtype": {
|
|
917
|
+
"primitive": "string"
|
|
918
|
+
},
|
|
919
|
+
"kind": "map"
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
},
|
|
902
923
|
{
|
|
903
924
|
"docs": {
|
|
904
925
|
"stability": "experimental",
|
|
@@ -907,7 +928,7 @@
|
|
|
907
928
|
"immutable": true,
|
|
908
929
|
"locationInModule": {
|
|
909
930
|
"filename": "src/chart.ts",
|
|
910
|
-
"line":
|
|
931
|
+
"line": 46
|
|
911
932
|
},
|
|
912
933
|
"name": "namespace",
|
|
913
934
|
"optional": true,
|
|
@@ -931,6 +952,29 @@
|
|
|
931
952
|
},
|
|
932
953
|
"name": "ChartOptions",
|
|
933
954
|
"properties": [
|
|
955
|
+
{
|
|
956
|
+
"abstract": true,
|
|
957
|
+
"docs": {
|
|
958
|
+
"default": "- no common labels",
|
|
959
|
+
"stability": "experimental",
|
|
960
|
+
"summary": "Labels to apply to all resources in this chart."
|
|
961
|
+
},
|
|
962
|
+
"immutable": true,
|
|
963
|
+
"locationInModule": {
|
|
964
|
+
"filename": "src/chart.ts",
|
|
965
|
+
"line": 21
|
|
966
|
+
},
|
|
967
|
+
"name": "labels",
|
|
968
|
+
"optional": true,
|
|
969
|
+
"type": {
|
|
970
|
+
"collection": {
|
|
971
|
+
"elementtype": {
|
|
972
|
+
"primitive": "string"
|
|
973
|
+
},
|
|
974
|
+
"kind": "map"
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
},
|
|
934
978
|
{
|
|
935
979
|
"abstract": true,
|
|
936
980
|
"docs": {
|
|
@@ -1843,6 +1887,6 @@
|
|
|
1843
1887
|
"name": "Yaml"
|
|
1844
1888
|
}
|
|
1845
1889
|
},
|
|
1846
|
-
"version": "0.
|
|
1847
|
-
"fingerprint": "
|
|
1890
|
+
"version": "0.33.0",
|
|
1891
|
+
"fingerprint": "K95av6FvAZM1/HSlOO3mX0HQ6W3vU/PrmlT3xI2Juug="
|
|
1848
1892
|
}
|
package/API.md
CHANGED
|
@@ -273,6 +273,7 @@ new Chart(scope: Construct, ns: string, options?: ChartOptions)
|
|
|
273
273
|
* **scope** (<code>[Construct](#constructs-construct)</code>) *No description*
|
|
274
274
|
* **ns** (<code>string</code>) *No description*
|
|
275
275
|
* **options** (<code>[ChartOptions](#cdk8s-chartoptions)</code>) *No description*
|
|
276
|
+
* **labels** (<code>Map<string, string></code>) Labels to apply to all resources in this chart. __*Default*__: no common labels
|
|
276
277
|
* **namespace** (<code>string</code>) The default namespace for all objects defined in this chart (directly or indirectly). __*Default*__: no namespace is synthesized (usually this implies "default")
|
|
277
278
|
|
|
278
279
|
|
|
@@ -282,6 +283,7 @@ new Chart(scope: Construct, ns: string, options?: ChartOptions)
|
|
|
282
283
|
|
|
283
284
|
Name | Type | Description
|
|
284
285
|
-----|------|-------------
|
|
286
|
+
**labels**🔹 | <code>Map<string, string></code> | Labels applied to all resources in this chart.
|
|
285
287
|
**namespace**?🔹 | <code>string</code> | The default namespace for all objects in this chart.<br/>__*Optional*__
|
|
286
288
|
|
|
287
289
|
### Methods
|
|
@@ -802,6 +804,7 @@ Name | Type | Description
|
|
|
802
804
|
|
|
803
805
|
Name | Type | Description
|
|
804
806
|
-----|------|-------------
|
|
807
|
+
**labels**?🔹 | <code>Map<string, string></code> | Labels to apply to all resources in this chart.<br/>__*Default*__: no common labels
|
|
805
808
|
**namespace**?🔹 | <code>string</code> | The default namespace for all objects defined in this chart (directly or indirectly).<br/>__*Default*__: no namespace is synthesized (usually this implies "default")
|
|
806
809
|
|
|
807
810
|
|
package/README.md
CHANGED
|
@@ -28,6 +28,38 @@ class MyChart extends Chart {
|
|
|
28
28
|
During synthesis, charts collect all the `ApiObject` nodes (recursively) and
|
|
29
29
|
emit a single YAML manifest that includes all these objects.
|
|
30
30
|
|
|
31
|
+
When a chart is defined, you can specify chart-level `namespace` and `labels`.
|
|
32
|
+
Those will be applied to all API objects defined within the chart (recursively):
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
class MyChart extends Chart {
|
|
36
|
+
constructor(scope: Construct, ns: string) {
|
|
37
|
+
super(scope, ns, {
|
|
38
|
+
namespace: 'my-namespace',
|
|
39
|
+
labels: {
|
|
40
|
+
app: 'my-app',
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
new ApiObject(this, 'my-object', {
|
|
45
|
+
apiVersion: 'v1',
|
|
46
|
+
kind: 'Foo'
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Will synthesize into:
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
apiVersion: v1
|
|
56
|
+
kind: Foo
|
|
57
|
+
metadata:
|
|
58
|
+
namesapce: my-namespace
|
|
59
|
+
labels:
|
|
60
|
+
app: my-app
|
|
61
|
+
```
|
|
62
|
+
|
|
31
63
|
## ApiObject
|
|
32
64
|
|
|
33
65
|
An `ApiObject` is a construct that represents an entry in a Kubernetes manifest (level 0).
|
|
@@ -241,8 +273,8 @@ The `Helm` construct will render the manifest from the specified chart by
|
|
|
241
273
|
executing `helm template`. If `values` is specified, these values will override
|
|
242
274
|
the default values included with the chart.
|
|
243
275
|
|
|
244
|
-
The `name` option can be used to specify the chart's [release name](https://helm.sh/docs/intro/using_helm/#three-big-concepts).
|
|
245
|
-
If not specified, a valid and unique release name will be allocated
|
|
276
|
+
The `name` option can be used to specify the chart's [release name](https://helm.sh/docs/intro/using_helm/#three-big-concepts).
|
|
277
|
+
If not specified, a valid and unique release name will be allocated
|
|
246
278
|
based on the construct path.
|
|
247
279
|
|
|
248
280
|
The `Helm` construct extends `Include` and inherits it's API. For example, you
|
package/lib/api-object.d.ts
CHANGED
|
@@ -2,22 +2,30 @@ import { Construct, IConstruct } from 'constructs';
|
|
|
2
2
|
import { Chart } from './chart';
|
|
3
3
|
import { ApiObjectMetadata, ApiObjectMetadataDefinition } from './metadata';
|
|
4
4
|
/**
|
|
5
|
-
* Options for defining API objects.
|
|
5
|
+
* (experimental) Options for defining API objects.
|
|
6
|
+
*
|
|
7
|
+
* @experimental
|
|
6
8
|
*/
|
|
7
9
|
export interface ApiObjectOptions {
|
|
8
10
|
/**
|
|
9
|
-
* Object metadata.
|
|
11
|
+
* (experimental) Object metadata.
|
|
10
12
|
*
|
|
11
13
|
* If `name` is not specified, an app-unique name will be allocated by the
|
|
12
14
|
* framework based on the path of the construct within thes construct tree.
|
|
15
|
+
*
|
|
16
|
+
* @experimental
|
|
13
17
|
*/
|
|
14
18
|
readonly metadata?: ApiObjectMetadata;
|
|
15
19
|
/**
|
|
16
|
-
* API version.
|
|
20
|
+
* (experimental) API version.
|
|
21
|
+
*
|
|
22
|
+
* @experimental
|
|
17
23
|
*/
|
|
18
24
|
readonly apiVersion: string;
|
|
19
25
|
/**
|
|
20
|
-
* Resource kind.
|
|
26
|
+
* (experimental) Resource kind.
|
|
27
|
+
*
|
|
28
|
+
* @experimental
|
|
21
29
|
*/
|
|
22
30
|
readonly kind: string;
|
|
23
31
|
/**
|
|
@@ -25,54 +33,74 @@ export interface ApiObjectOptions {
|
|
|
25
33
|
*/
|
|
26
34
|
readonly [key: string]: any;
|
|
27
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* @experimental
|
|
38
|
+
*/
|
|
28
39
|
export declare class ApiObject extends Construct {
|
|
29
40
|
private readonly options;
|
|
30
41
|
/**
|
|
31
|
-
* The name of the API object.
|
|
42
|
+
* (experimental) The name of the API object.
|
|
32
43
|
*
|
|
33
44
|
* If a name is specified in `metadata.name` this will be the name returned.
|
|
34
45
|
* Otherwise, a name will be generated by calling
|
|
35
46
|
* `Chart.of(this).generatedObjectName(this)`, which by default uses the
|
|
36
47
|
* construct path to generate a DNS-compatible name for the resource.
|
|
48
|
+
*
|
|
49
|
+
* @experimental
|
|
37
50
|
*/
|
|
38
51
|
readonly name: string;
|
|
39
52
|
/**
|
|
40
|
-
* The object's API version (e.g. `authorization.k8s.io/v1`)
|
|
53
|
+
* (experimental) The object's API version (e.g. `authorization.k8s.io/v1`).
|
|
54
|
+
*
|
|
55
|
+
* @experimental
|
|
41
56
|
*/
|
|
42
57
|
readonly apiVersion: string;
|
|
43
58
|
/**
|
|
44
|
-
* The group portion of the API version (e.g. `authorization.k8s.io`)
|
|
59
|
+
* (experimental) The group portion of the API version (e.g. `authorization.k8s.io`).
|
|
60
|
+
*
|
|
61
|
+
* @experimental
|
|
45
62
|
*/
|
|
46
63
|
readonly apiGroup: string;
|
|
47
64
|
/**
|
|
48
|
-
* The object kind.
|
|
65
|
+
* (experimental) The object kind.
|
|
66
|
+
*
|
|
67
|
+
* @experimental
|
|
49
68
|
*/
|
|
50
69
|
readonly kind: string;
|
|
51
70
|
/**
|
|
52
|
-
* The chart in which this object is defined.
|
|
71
|
+
* (experimental) The chart in which this object is defined.
|
|
72
|
+
*
|
|
73
|
+
* @experimental
|
|
53
74
|
*/
|
|
54
75
|
readonly chart: Chart;
|
|
55
76
|
/**
|
|
56
|
-
* Metadata associated with this API object.
|
|
77
|
+
* (experimental) Metadata associated with this API object.
|
|
78
|
+
*
|
|
79
|
+
* @experimental
|
|
57
80
|
*/
|
|
58
81
|
readonly metadata: ApiObjectMetadataDefinition;
|
|
59
82
|
/**
|
|
60
|
-
* Defines an API object.
|
|
83
|
+
* (experimental) Defines an API object.
|
|
61
84
|
*
|
|
62
|
-
* @param scope the construct scope
|
|
63
|
-
* @param ns namespace
|
|
64
|
-
* @param options options
|
|
85
|
+
* @param scope the construct scope.
|
|
86
|
+
* @param ns namespace.
|
|
87
|
+
* @param options options.
|
|
88
|
+
* @experimental
|
|
65
89
|
*/
|
|
66
90
|
constructor(scope: Construct, ns: string, options: ApiObjectOptions);
|
|
67
91
|
/**
|
|
68
|
-
* Create a dependency between this ApiObject and other constructs.
|
|
92
|
+
* (experimental) Create a dependency between this ApiObject and other constructs.
|
|
93
|
+
*
|
|
69
94
|
* These can be other ApiObjects, Charts, or custom.
|
|
70
95
|
*
|
|
71
96
|
* @param dependencies the dependencies to add.
|
|
97
|
+
* @experimental
|
|
72
98
|
*/
|
|
73
99
|
addDependency(...dependencies: IConstruct[]): void;
|
|
74
100
|
/**
|
|
75
|
-
* Renders the object to Kubernetes JSON.
|
|
101
|
+
* (experimental) Renders the object to Kubernetes JSON.
|
|
102
|
+
*
|
|
103
|
+
* @experimental
|
|
76
104
|
*/
|
|
77
105
|
toJson(): any;
|
|
78
106
|
}
|
package/lib/api-object.js
CHANGED
|
@@ -7,16 +7,20 @@ const _util_1 = require("./_util");
|
|
|
7
7
|
const _resolve_1 = require("./_resolve");
|
|
8
8
|
const stringify = require("json-stable-stringify");
|
|
9
9
|
const metadata_1 = require("./metadata");
|
|
10
|
+
/**
|
|
11
|
+
* @experimental
|
|
12
|
+
*/
|
|
10
13
|
class ApiObject extends constructs_1.Construct {
|
|
11
14
|
/**
|
|
12
|
-
* Defines an API object.
|
|
15
|
+
* (experimental) Defines an API object.
|
|
13
16
|
*
|
|
14
|
-
* @param scope the construct scope
|
|
15
|
-
* @param ns namespace
|
|
16
|
-
* @param options options
|
|
17
|
+
* @param scope the construct scope.
|
|
18
|
+
* @param ns namespace.
|
|
19
|
+
* @param options options.
|
|
20
|
+
* @experimental
|
|
17
21
|
*/
|
|
18
22
|
constructor(scope, ns, options) {
|
|
19
|
-
var _a, _b, _c, _d;
|
|
23
|
+
var _a, _b, _c, _d, _e;
|
|
20
24
|
super(scope, ns);
|
|
21
25
|
this.options = options;
|
|
22
26
|
this.chart = chart_1.Chart.of(this);
|
|
@@ -26,22 +30,30 @@ class ApiObject extends constructs_1.Construct {
|
|
|
26
30
|
this.name = (_b = (_a = options.metadata) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : this.chart.generateObjectName(this);
|
|
27
31
|
this.metadata = new metadata_1.ApiObjectMetadataDefinition({
|
|
28
32
|
name: this.name,
|
|
29
|
-
|
|
30
|
-
// override user defined values
|
|
33
|
+
// user defined values
|
|
31
34
|
...options.metadata,
|
|
35
|
+
namespace: (_d = (_c = options.metadata) === null || _c === void 0 ? void 0 : _c.namespace) !== null && _d !== void 0 ? _d : this.chart.namespace,
|
|
36
|
+
labels: {
|
|
37
|
+
...this.chart.labels,
|
|
38
|
+
...(_e = options.metadata) === null || _e === void 0 ? void 0 : _e.labels,
|
|
39
|
+
},
|
|
32
40
|
});
|
|
33
41
|
}
|
|
34
42
|
/**
|
|
35
|
-
* Create a dependency between this ApiObject and other constructs.
|
|
43
|
+
* (experimental) Create a dependency between this ApiObject and other constructs.
|
|
44
|
+
*
|
|
36
45
|
* These can be other ApiObjects, Charts, or custom.
|
|
37
46
|
*
|
|
38
47
|
* @param dependencies the dependencies to add.
|
|
48
|
+
* @experimental
|
|
39
49
|
*/
|
|
40
50
|
addDependency(...dependencies) {
|
|
41
51
|
constructs_1.Node.of(this).addDependency(...dependencies);
|
|
42
52
|
}
|
|
43
53
|
/**
|
|
44
|
-
* Renders the object to Kubernetes JSON.
|
|
54
|
+
* (experimental) Renders the object to Kubernetes JSON.
|
|
55
|
+
*
|
|
56
|
+
* @experimental
|
|
45
57
|
*/
|
|
46
58
|
toJson() {
|
|
47
59
|
const data = {
|
|
@@ -66,4 +78,4 @@ function parseApiGroup(apiVersion) {
|
|
|
66
78
|
}
|
|
67
79
|
throw new Error(`invalid apiVersion ${apiVersion}, expecting GROUP/VERSION. See https://kubernetes.io/docs/reference/using-api/api-overview/#api-groups`);
|
|
68
80
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF5RDtBQUN6RCxtQ0FBZ0M7QUFDaEMsbUNBQXdDO0FBQ3hDLHlDQUFxQztBQUNyQyxtREFBbUQ7QUFDbkQseUNBQTRFOzs7O0FBOEI1RSxNQUFhLFNBQVUsU0FBUSxzQkFBUzs7Ozs7Ozs7O0lBMkN0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFtQixPQUF5Qjs7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUR3QyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUVsRixJQUFJLENBQUMsS0FBSyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksZUFBRyxPQUFPLENBQUMsUUFBUSwwQ0FBRSxJQUFJLG1DQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNDQUEyQixDQUFDO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUVmLHNCQUFzQjtZQUN0QixHQUFHLE9BQU8sQ0FBQyxRQUFRO1lBRW5CLFNBQVMsY0FBRSxPQUFPLENBQUMsUUFBUSwwQ0FBRSxTQUFTLG1DQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUM5RCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLFNBQUcsT0FBTyxDQUFDLFFBQVEsMENBQUUsTUFBTTthQUM1QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7Ozs7OztJQVFNLGFBQWEsQ0FBQyxHQUFHLFlBQTBCO1FBQ2hELGlCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQy9DLENBQUM7Ozs7OztJQUtNLE1BQU07UUFDWCxNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7U0FDakMsQ0FBQztRQUVGLHdFQUF3RTtRQUN4RSwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxxQkFBYSxDQUFDLGtCQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNGO0FBekZELDhCQXlGQztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQWtCO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsd0JBQXdCO0lBQ3hCLDBFQUEwRTtJQUMxRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixVQUFVLHdHQUF3RyxDQUFDLENBQUM7QUFDNUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCwgTm9kZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcbmltcG9ydCB7IHNhbml0aXplVmFsdWUgfSBmcm9tICcuL191dGlsJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL19yZXNvbHZlJztcbmltcG9ydCAqIGFzIHN0cmluZ2lmeSBmcm9tICdqc29uLXN0YWJsZS1zdHJpbmdpZnknO1xuaW1wb3J0IHsgQXBpT2JqZWN0TWV0YWRhdGEsIEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbiB9IGZyb20gJy4vbWV0YWRhdGEnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBBcGlPYmplY3RPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlPYmplY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBhcGlHcm91cDogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNoYXJ0OiBDaGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5zOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQXBpT2JqZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlLCBucyk7XG4gICAgdGhpcy5jaGFydCA9IENoYXJ0Lm9mKHRoaXMpO1xuICAgIHRoaXMua2luZCA9IG9wdGlvbnMua2luZDtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSBvcHRpb25zLmFwaVZlcnNpb247XG4gICAgdGhpcy5hcGlHcm91cCA9IHBhcnNlQXBpR3JvdXAodGhpcy5hcGlWZXJzaW9uKTtcblxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubWV0YWRhdGE/Lm5hbWUgPz8gdGhpcy5jaGFydC5nZW5lcmF0ZU9iamVjdE5hbWUodGhpcyk7XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gbmV3IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbih7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG5cbiAgICAgIC8vIHVzZXIgZGVmaW5lZCB2YWx1ZXNcbiAgICAgIC4uLm9wdGlvbnMubWV0YWRhdGEsXG4gICAgICBcbiAgICAgIG5hbWVzcGFjZTogb3B0aW9ucy5tZXRhZGF0YT8ubmFtZXNwYWNlID8/IHRoaXMuY2hhcnQubmFtZXNwYWNlLFxuICAgICAgbGFiZWxzOiB7XG4gICAgICAgIC4uLnRoaXMuY2hhcnQubGFiZWxzLFxuICAgICAgICAuLi5vcHRpb25zLm1ldGFkYXRhPy5sYWJlbHMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llczogSUNvbnN0cnVjdFtdKSB7XG4gICAgTm9kZS5vZih0aGlzKS5hZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llcyk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLnRvSnNvbigpLFxuICAgIH07XG5cbiAgICAvLyBjb252ZXJ0IHRvIFwicHVyZSBkYXRhXCIgc28sIGZvciBleGFtcGxlLCB3aGVuIHdlIGNvbnZlcnQgdG8geWFtbCB0aGVzZVxuICAgIC8vIHJlZmVyZW5jZXMgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYW5jaG9ycy5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmdpZnkoc2FuaXRpemVWYWx1ZShyZXNvbHZlKGRhdGEpKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXBpR3JvdXAoYXBpVmVyc2lvbjogc3RyaW5nKSB7XG4gIGNvbnN0IHYgPSBhcGlWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgLy8gbm8gZ3JvdXAgbWVhbnMgXCJjb3JlXCJcbiAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL3VzaW5nLWFwaS9hcGktb3ZlcnZpZXcvI2FwaS1ncm91cHNcbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuICdjb3JlJztcbiAgfVxuXG4gIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB2WzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFwaVZlcnNpb24gJHthcGlWZXJzaW9ufSwgZXhwZWN0aW5nIEdST1VQL1ZFUlNJT04uIFNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc2ApO1xufSJdfQ==
|
package/lib/app.d.ts
CHANGED
|
@@ -1,27 +1,39 @@
|
|
|
1
1
|
import { Construct } from 'constructs';
|
|
2
|
+
/**
|
|
3
|
+
* @experimental
|
|
4
|
+
*/
|
|
2
5
|
export interface AppOptions {
|
|
3
6
|
/**
|
|
4
|
-
* The directory to output Kubernetes manifests.
|
|
7
|
+
* (experimental) The directory to output Kubernetes manifests.
|
|
5
8
|
*
|
|
6
9
|
* @default - CDK8S_OUTDIR if defined, otherwise "dist"
|
|
10
|
+
* @experimental
|
|
7
11
|
*/
|
|
8
12
|
readonly outdir?: string;
|
|
9
13
|
}
|
|
10
14
|
/**
|
|
11
|
-
* Represents a cdk8s application.
|
|
15
|
+
* (experimental) Represents a cdk8s application.
|
|
16
|
+
*
|
|
17
|
+
* @experimental
|
|
12
18
|
*/
|
|
13
19
|
export declare class App extends Construct {
|
|
14
20
|
/**
|
|
15
|
-
* The output directory into which manifests will be synthesized.
|
|
21
|
+
* (experimental) The output directory into which manifests will be synthesized.
|
|
22
|
+
*
|
|
23
|
+
* @experimental
|
|
16
24
|
*/
|
|
17
25
|
readonly outdir: string;
|
|
18
26
|
/**
|
|
19
|
-
* Defines an app
|
|
20
|
-
*
|
|
27
|
+
* (experimental) Defines an app.
|
|
28
|
+
*
|
|
29
|
+
* @param options configuration options.
|
|
30
|
+
* @experimental
|
|
21
31
|
*/
|
|
22
32
|
constructor(options?: AppOptions);
|
|
23
33
|
/**
|
|
24
|
-
* Synthesizes all manifests to the output directory
|
|
34
|
+
* (experimental) Synthesizes all manifests to the output directory.
|
|
35
|
+
*
|
|
36
|
+
* @experimental
|
|
25
37
|
*/
|
|
26
38
|
synth(): void;
|
|
27
39
|
private static of;
|
package/lib/app.js
CHANGED
|
@@ -10,12 +10,16 @@ const dependency_1 = require("./dependency");
|
|
|
10
10
|
const api_object_1 = require("./api-object");
|
|
11
11
|
const names_1 = require("./names");
|
|
12
12
|
/**
|
|
13
|
-
* Represents a cdk8s application.
|
|
13
|
+
* (experimental) Represents a cdk8s application.
|
|
14
|
+
*
|
|
15
|
+
* @experimental
|
|
14
16
|
*/
|
|
15
17
|
class App extends constructs_1.Construct {
|
|
16
18
|
/**
|
|
17
|
-
* Defines an app
|
|
18
|
-
*
|
|
19
|
+
* (experimental) Defines an app.
|
|
20
|
+
*
|
|
21
|
+
* @param options configuration options.
|
|
22
|
+
* @experimental
|
|
19
23
|
*/
|
|
20
24
|
constructor(options = {}) {
|
|
21
25
|
var _a, _b;
|
|
@@ -23,7 +27,9 @@ class App extends constructs_1.Construct {
|
|
|
23
27
|
this.outdir = (_b = (_a = options.outdir) !== null && _a !== void 0 ? _a : process.env.CDK8S_OUTDIR) !== null && _b !== void 0 ? _b : 'dist';
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
|
-
* Synthesizes all manifests to the output directory
|
|
30
|
+
* (experimental) Synthesizes all manifests to the output directory.
|
|
31
|
+
*
|
|
32
|
+
* @experimental
|
|
27
33
|
*/
|
|
28
34
|
synth() {
|
|
29
35
|
fs.mkdirSync(this.outdir, { recursive: true });
|
|
@@ -111,4 +117,4 @@ function chartToKube(chart) {
|
|
|
111
117
|
.filter(x => x instanceof api_object_1.ApiObject)
|
|
112
118
|
.map(x => x.toJson());
|
|
113
119
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBeUQ7QUFDekQseUJBQXlCO0FBQ3pCLG1DQUFnQztBQUNoQyw2QkFBNkI7QUFDN0IsaUNBQThCO0FBQzlCLDZDQUErQztBQUMvQyw2Q0FBeUM7QUFDekMsbUNBQWdDO0FBV2hDOztHQUVHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsc0JBQVM7SUFNaEM7OztPQUdHO0lBQ0gsWUFBWSxVQUFzQixFQUFHOztRQUNuQyxLQUFLLENBQUMsU0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxlQUFHLE9BQU8sQ0FBQyxNQUFNLG1DQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxtQ0FBSSxNQUFNLENBQUM7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUVWLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLHFFQUFxRTtRQUNyRSxzQ0FBc0M7UUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCw4SEFBOEg7UUFDOUgsdUZBQXVGO1FBQ3ZGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVmLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2xHLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFH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QyxFQUFFLENBQUMsQ0FBQyxZQUFZLHNCQUFTLENBQUMsQ0FBQztRQUUzRixLQUFLLE1BQU0sTUFBTSxJQUFJLGdCQUFnQixFQUFFO1lBQ3JDLEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3JDLGlCQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QztTQUNGO1FBRUQsMkVBQTJFO1FBQzNFLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUMvQixpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0tBRUY7SUFFRCxPQUFPLGtCQUFrQixDQUFDO0FBRTVCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE9BQU8sSUFBSSw0QkFBZSxDQUFDLGlCQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxzQkFBUyxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIE5vZGUsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgWWFtbCB9IGZyb20gJy4veWFtbCc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5R3JhcGggfSBmcm9tICcuL2RlcGVuZGVuY3knO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IE5hbWVzIH0gZnJvbSAnLi9uYW1lcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIG91dHB1dCBLdWJlcm5ldGVzIG1hbmlmZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDREs4U19PVVRESVIgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIFwiZGlzdFwiXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNkazhzIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggbWFuaWZlc3RzIHdpbGwgYmUgc3ludGhlc2l6ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYW4gYXBwXG4gICAqIEBwYXJhbSBvcHRpb25zIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXBwT3B0aW9ucyA9IHsgfSkge1xuICAgIHN1cGVyKHVuZGVmaW5lZCBhcyBhbnksICcnKTtcbiAgICB0aGlzLm91dGRpciA9IG9wdGlvbnMub3V0ZGlyID8/IHByb2Nlc3MuZW52LkNESzhTX09VVERJUiA/PyAnZGlzdCc7XG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgYWxsIG1hbmlmZXN0cyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIHN5bnRoKCk6IHZvaWQge1xuXG4gICAgZnMubWtkaXJTeW5jKHRoaXMub3V0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIHRoaXMgaXMga2luZCBvZiBzdWNreSwgZXZlbnR1YWxseSBJIHdvdWxkIGxpa2UgdGhlIERlcGVuZGVuY3lHcmFwaFxuICAgIC8vIHRvIGJlIGFibGUgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24uXG4gICAgY29uc3QgaGFzRGVwZW5kYW50Q2hhcnRzID0gcmVzb2x2ZURlcGVuZGVuY2llcyh0aGlzKTtcblxuICAgIC8vIFNpbmNlIHdlIHBsYW4gb24gcmVtb3ZpbmcgdGhlIGRpc3RyaWJ1dGVkIHN5bnRoIG1lY2hhbmlzbSwgd2Ugbm8gbG9uZ2VyIGNhbGwgYE5vZGUuc3ludGhlc2l6ZWAsIGJ1dCByYXRoZXIgc2ltcGx5IGltcGxlbWVudFxuICAgIC8vIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucy4gV2UgZG8gaG93ZXZlciB3YW50IHRvIHByZXNlcnZlIHRoZSBkaXN0cmlidXRlZCB2YWxpZGF0aW9uLlxuICAgIHZhbGlkYXRlKHRoaXMpO1xuXG4gICAgY29uc3Qgc2ltcGxlTWFuaWZlc3ROYW1lciA9IChjaGFydDogQ2hhcnQpID0+IGAke05hbWVzLnRvRG5zTGFiZWwoTm9kZS5vZihjaGFydCkucGF0aCl9Lms4cy55YW1sYDtcbiAgICBjb25zdCBtYW5pZmVzdE5hbWVyID0gaGFzRGVwZW5kYW50Q2hhcnRzID8gKGNoYXJ0OiBDaGFydCkgPT4gYCR7aW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCg0LCAnMCcpfS0ke3NpbXBsZU1hbmlmZXN0TmFtZXIoY2hhcnQpfWAgOiBzaW1wbGVNYW5pZmVzdE5hbWVyO1xuXG4gICAgY29uc3QgY2hhcnRzOiBJQ29uc3RydWN0W10gPSBuZXcgRGVwZW5kZW5jeUdyYXBoKE5vZGUub2YodGhpcykpLnRvcG9sb2d5KCkuZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIENoYXJ0KTtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGNoYXJ0cykge1xuICAgICAgY29uc3QgY2hhcnQ6IENoYXJ0ID0gQ2hhcnQub2Yobm9kZSk7XG4gICAgICBZYW1sLnNhdmUocGF0aC5qb2luKHRoaXMub3V0ZGlyLCBtYW5pZmVzdE5hbWVyKGNoYXJ0KSksIGNoYXJ0VG9LdWJlKGNoYXJ0KSk7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemUgYSBzaW5nbGUgY2hhcnQuXG4gICAqXG4gICAqIEVhY2ggZWxlbWVudCByZXR1cm5lZCBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgQXBpT2JqZWN0XG4gICAqIGluIHRoZSBzY29wZSBvZiB0aGUgY2hhcnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgb3JkZXIgaXMgaW1wb3J0YW50LiBJdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcyBiZXR3ZWVuXG4gICAqIHRoZSBjb25zdHJ1Y3RzIGluIHRoZSBjaGFydCwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG9uZSB3aXRob3V0IGRlcGVuZGVuY2llcywgYW5kIHNvIG9uLi4uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEpTT04gb2JqZWN0cy5cbiAgICogQHBhcmFtIGNoYXJ0IHRoZSBjaGFydCB0byBzeW50aGVzaXplLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgX3N5bnRoQ2hhcnQoY2hhcnQ6IENoYXJ0KTogYW55W10ge1xuXG4gICAgY29uc3QgYXBwOiBBcHAgPSBBcHAub2YoY2hhcnQpO1xuXG4gICAgLy8gd2UgbXVzdCBwcmVwYXJlIHRoZSBlbnRpcmUgYXBwIGJlZm9yZSBzeW50aGVzaXppbmcgdGhlIGNoYXJ0XG4gICAgLy8gYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBpbmZlcmVuY2UgaGFwcGVucyBvbiB0aGUgYXBwIGxldmVsLlxuICAgIHJlc29sdmVEZXBlbmRlbmNpZXMoYXBwKTtcblxuICAgIC8vIHZhbGlkYXRlIHRoZSBhcHAgc2luY2Ugd2Ugd2FudCB0byBjYWxsIG9uVmFsaWRhdGUgb2YgdGhlIHJlbGV2YW50IGNvbnN0cnVjdHMuXG4gICAgLy8gbm90ZSB0aGlzIHdpbGwgYWxzbyBjYWxsIG9uVmFsaWRhdGUgb24gY29uc3RydWN0cyBmcm9tIHBvc3NpYmx5IGRpZmZlcmVudCBjaGFydHMsXG4gICAgLy8gYnV0IHRoYXRzIG9rIHRvbyBzaW5jZSB3ZSBubyBsb25nZXIgdHJlYXQgY29uc3RydWN0cyBhcyBhIHNlbGYtY29udGFpbmVkIHN5bnRoZXNpcyB1bml0LlxuICAgIHZhbGlkYXRlKGFwcCk7XG5cbiAgICByZXR1cm4gY2hhcnRUb0t1YmUoY2hhcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwcCB7XG5cbiAgICBjb25zdCBzY29wZSA9IE5vZGUub2YoYykuc2NvcGU7XG5cbiAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAvLyB0aGUgYXBwIGlzIHRoZSBvbmx5IGNvbnN0cnVjdCB3aXRob3V0IGEgc2NvcGUuXG4gICAgICByZXR1cm4gYyBhcyBBcHA7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5vZihzY29wZSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZShhcHA6IEFwcCkge1xuXG4gIC8vIE5vdGUgdGhpcyBpcyBhIGNvcHktcGFzdGUgb2YgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9jb25zdHJ1Y3RzL2Jsb2IvbWFzdGVyL2xpYi9jb25zdHJ1Y3QudHMjTDQzOC5cbiAgY29uc3QgZXJyb3JzID0gTm9kZS5vZihhcHApLnZhbGlkYXRlKCk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yTGlzdCA9IGVycm9ycy5tYXAoZSA9PiBgWyR7Tm9kZS5vZihlLnNvdXJjZSkucGF0aH1dICR7ZS5tZXNzYWdlfWApLmpvaW4oJ1xcbiAgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxcbiAgJHtlcnJvckxpc3R9YCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVwZW5kZW5jaWVzKGFwcDogQXBwKSB7XG5cbiAgbGV0IGhhc0RlcGVuZGFudENoYXJ0cyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVwIG9mIE5vZGUub2YoYXBwKS5kZXBlbmRlbmNpZXMpIHtcblxuICAgIC8vIGNyZWF0ZSBleHBsaWNpdCBhcGkgb2JqZWN0IGRlcGVuZGVuY2llcyBmcm9tIGltcGxpY2l0IGNvbnN0cnVjdCBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCB0YXJnZXRBcGlPYmplY3RzID0gTm9kZS5vZihkZXAudGFyZ2V0KS5maW5kQWxsKCkuZmlsdGVyKGMgPT4gYyBpbnN0YW5jZW9mIEFwaU9iamVjdCk7XG4gICAgY29uc3Qgc291cmNlQXBpT2JqZWN0cyA9IE5vZGUub2YoZGVwLnNvdXJjZSkuZmluZEFsbCgpLmZpbHRlcihjID0+IGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0QXBpT2JqZWN0cykge1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlQXBpT2JqZWN0cykge1xuICAgICAgICBOb2RlLm9mKHNvdXJjZSkuYWRkRGVwZW5kZW5jeSh0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhbiBleHBsaWNpdCBjaGFydCBkZXBlbmRlbmN5IGZyb20gaW1wbGljaXQgY29uc3RydWN0IGRlcGVuZGVuY2llc1xuICAgIGNvbnN0IHNvdXJjZUNoYXJ0ID0gQ2hhcnQub2YoZGVwLnNvdXJjZSk7XG4gICAgY29uc3QgdGFyZ2V0Q2hhcnQgPSBDaGFydC5vZihkZXAudGFyZ2V0KTtcblxuICAgIGlmIChzb3VyY2VDaGFydCAhPT0gdGFyZ2V0Q2hhcnQpIHtcbiAgICAgIE5vZGUub2Yoc291cmNlQ2hhcnQpLmFkZERlcGVuZGVuY3kodGFyZ2V0Q2hhcnQpO1xuICAgICAgaGFzRGVwZW5kYW50Q2hhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBoYXNEZXBlbmRhbnRDaGFydHM7XG5cbn1cblxuZnVuY3Rpb24gY2hhcnRUb0t1YmUoY2hhcnQ6IENoYXJ0KSB7XG4gIHJldHVybiBuZXcgRGVwZW5kZW5jeUdyYXBoKE5vZGUub2YoY2hhcnQpKS50b3BvbG9neSgpXG4gICAgLmZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBBcGlPYmplY3QpXG4gICAgLm1hcCh4ID0+ICh4IGFzIEFwaU9iamVjdCkudG9Kc29uKCkpO1xufSJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBeUQ7QUFDekQseUJBQXlCO0FBQ3pCLG1DQUFnQztBQUNoQyw2QkFBNkI7QUFDN0IsaUNBQThCO0FBQzlCLDZDQUErQztBQUMvQyw2Q0FBeUM7QUFDekMsbUNBQWdDOzs7Ozs7QUFjaEMsTUFBYSxHQUFJLFNBQVEsc0JBQVM7Ozs7Ozs7SUFVaEMsWUFBWSxVQUFzQixFQUFHOztRQUNuQyxLQUFLLENBQUMsU0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxlQUFHLE9BQU8sQ0FBQyxNQUFNLG1DQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxtQ0FBSSxNQUFNLENBQUM7SUFDckUsQ0FBQzs7Ozs7O0lBS00sS0FBSztRQUVWLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLHFFQUFxRTtRQUNyRSxzQ0FBc0M7UUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCw4SEFBOEg7UUFDOUgsdUZBQXVGO1FBQ3ZGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVmLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2xHLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxtQkFBbUIs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QUFZLHNCQUFTLENBQUMsQ0FBQztRQUUzRixLQUFLLE1BQU0sTUFBTSxJQUFJLGdCQUFnQixFQUFFO1lBQ3JDLEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3JDLGlCQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QztTQUNGO1FBRUQsMkVBQTJFO1FBQzNFLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUMvQixpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0tBRUY7SUFFRCxPQUFPLGtCQUFrQixDQUFDO0FBRTVCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE9BQU8sSUFBSSw0QkFBZSxDQUFDLGlCQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxzQkFBUyxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIE5vZGUsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgWWFtbCB9IGZyb20gJy4veWFtbCc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5R3JhcGggfSBmcm9tICcuL2RlcGVuZGVuY3knO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IE5hbWVzIH0gZnJvbSAnLi9uYW1lcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIEFwcCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBcHBPcHRpb25zID0geyB9KSB7XG4gICAgc3VwZXIodW5kZWZpbmVkIGFzIGFueSwgJycpO1xuICAgIHRoaXMub3V0ZGlyID0gb3B0aW9ucy5vdXRkaXIgPz8gcHJvY2Vzcy5lbnYuQ0RLOFNfT1VURElSID8/ICdkaXN0JztcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN5bnRoKCk6IHZvaWQge1xuXG4gICAgZnMubWtkaXJTeW5jKHRoaXMub3V0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIHRoaXMgaXMga2luZCBvZiBzdWNreSwgZXZlbnR1YWxseSBJIHdvdWxkIGxpa2UgdGhlIERlcGVuZGVuY3lHcmFwaFxuICAgIC8vIHRvIGJlIGFibGUgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24uXG4gICAgY29uc3QgaGFzRGVwZW5kYW50Q2hhcnRzID0gcmVzb2x2ZURlcGVuZGVuY2llcyh0aGlzKTtcblxuICAgIC8vIFNpbmNlIHdlIHBsYW4gb24gcmVtb3ZpbmcgdGhlIGRpc3RyaWJ1dGVkIHN5bnRoIG1lY2hhbmlzbSwgd2Ugbm8gbG9uZ2VyIGNhbGwgYE5vZGUuc3ludGhlc2l6ZWAsIGJ1dCByYXRoZXIgc2ltcGx5IGltcGxlbWVudFxuICAgIC8vIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucy4gV2UgZG8gaG93ZXZlciB3YW50IHRvIHByZXNlcnZlIHRoZSBkaXN0cmlidXRlZCB2YWxpZGF0aW9uLlxuICAgIHZhbGlkYXRlKHRoaXMpO1xuXG4gICAgY29uc3Qgc2ltcGxlTWFuaWZlc3ROYW1lciA9IChjaGFydDogQ2hhcnQpID0+IGAke05hbWVzLnRvRG5zTGFiZWwoTm9kZS5vZihjaGFydCkucGF0aCl9Lms4cy55YW1sYDtcbiAgICBjb25zdCBtYW5pZmVzdE5hbWVyID0gaGFzRGVwZW5kYW50Q2hhcnRzID8gKGNoYXJ0OiBDaGFydCkgPT4gYCR7aW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCg0LCAnMCcpfS0ke3NpbXBsZU1hbmlmZXN0TmFtZXIoY2hhcnQpfWAgOiBzaW1wbGVNYW5pZmVzdE5hbWVyO1xuXG4gICAgY29uc3QgY2hhcnRzOiBJQ29uc3RydWN0W10gPSBuZXcgRGVwZW5kZW5jeUdyYXBoKE5vZGUub2YodGhpcykpLnRvcG9sb2d5KCkuZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIENoYXJ0KTtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGNoYXJ0cykge1xuICAgICAgY29uc3QgY2hhcnQ6IENoYXJ0ID0gQ2hhcnQub2Yobm9kZSk7XG4gICAgICBZYW1sLnNhdmUocGF0aC5qb2luKHRoaXMub3V0ZGlyLCBtYW5pZmVzdE5hbWVyKGNoYXJ0KSksIGNoYXJ0VG9LdWJlKGNoYXJ0KSk7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemUgYSBzaW5nbGUgY2hhcnQuXG4gICAqXG4gICAqIEVhY2ggZWxlbWVudCByZXR1cm5lZCBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgQXBpT2JqZWN0XG4gICAqIGluIHRoZSBzY29wZSBvZiB0aGUgY2hhcnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgb3JkZXIgaXMgaW1wb3J0YW50LiBJdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcyBiZXR3ZWVuXG4gICAqIHRoZSBjb25zdHJ1Y3RzIGluIHRoZSBjaGFydCwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG9uZSB3aXRob3V0IGRlcGVuZGVuY2llcywgYW5kIHNvIG9uLi4uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEpTT04gb2JqZWN0cy5cbiAgICogQHBhcmFtIGNoYXJ0IHRoZSBjaGFydCB0byBzeW50aGVzaXplLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgX3N5bnRoQ2hhcnQoY2hhcnQ6IENoYXJ0KTogYW55W10ge1xuXG4gICAgY29uc3QgYXBwOiBBcHAgPSBBcHAub2YoY2hhcnQpO1xuXG4gICAgLy8gd2UgbXVzdCBwcmVwYXJlIHRoZSBlbnRpcmUgYXBwIGJlZm9yZSBzeW50aGVzaXppbmcgdGhlIGNoYXJ0XG4gICAgLy8gYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBpbmZlcmVuY2UgaGFwcGVucyBvbiB0aGUgYXBwIGxldmVsLlxuICAgIHJlc29sdmVEZXBlbmRlbmNpZXMoYXBwKTtcblxuICAgIC8vIHZhbGlkYXRlIHRoZSBhcHAgc2luY2Ugd2Ugd2FudCB0byBjYWxsIG9uVmFsaWRhdGUgb2YgdGhlIHJlbGV2YW50IGNvbnN0cnVjdHMuXG4gICAgLy8gbm90ZSB0aGlzIHdpbGwgYWxzbyBjYWxsIG9uVmFsaWRhdGUgb24gY29uc3RydWN0cyBmcm9tIHBvc3NpYmx5IGRpZmZlcmVudCBjaGFydHMsXG4gICAgLy8gYnV0IHRoYXRzIG9rIHRvbyBzaW5jZSB3ZSBubyBsb25nZXIgdHJlYXQgY29uc3RydWN0cyBhcyBhIHNlbGYtY29udGFpbmVkIHN5bnRoZXNpcyB1bml0LlxuICAgIHZhbGlkYXRlKGFwcCk7XG5cbiAgICByZXR1cm4gY2hhcnRUb0t1YmUoY2hhcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwcCB7XG5cbiAgICBjb25zdCBzY29wZSA9IE5vZGUub2YoYykuc2NvcGU7XG5cbiAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAvLyB0aGUgYXBwIGlzIHRoZSBvbmx5IGNvbnN0cnVjdCB3aXRob3V0IGEgc2NvcGUuXG4gICAgICByZXR1cm4gYyBhcyBBcHA7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5vZihzY29wZSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZShhcHA6IEFwcCkge1xuXG4gIC8vIE5vdGUgdGhpcyBpcyBhIGNvcHktcGFzdGUgb2YgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9jb25zdHJ1Y3RzL2Jsb2IvbWFzdGVyL2xpYi9jb25zdHJ1Y3QudHMjTDQzOC5cbiAgY29uc3QgZXJyb3JzID0gTm9kZS5vZihhcHApLnZhbGlkYXRlKCk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yTGlzdCA9IGVycm9ycy5tYXAoZSA9PiBgWyR7Tm9kZS5vZihlLnNvdXJjZSkucGF0aH1dICR7ZS5tZXNzYWdlfWApLmpvaW4oJ1xcbiAgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxcbiAgJHtlcnJvckxpc3R9YCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVwZW5kZW5jaWVzKGFwcDogQXBwKSB7XG5cbiAgbGV0IGhhc0RlcGVuZGFudENoYXJ0cyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVwIG9mIE5vZGUub2YoYXBwKS5kZXBlbmRlbmNpZXMpIHtcblxuICAgIC8vIGNyZWF0ZSBleHBsaWNpdCBhcGkgb2JqZWN0IGRlcGVuZGVuY2llcyBmcm9tIGltcGxpY2l0IGNvbnN0cnVjdCBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCB0YXJnZXRBcGlPYmplY3RzID0gTm9kZS5vZihkZXAudGFyZ2V0KS5maW5kQWxsKCkuZmlsdGVyKGMgPT4gYyBpbnN0YW5jZW9mIEFwaU9iamVjdCk7XG4gICAgY29uc3Qgc291cmNlQXBpT2JqZWN0cyA9IE5vZGUub2YoZGVwLnNvdXJjZSkuZmluZEFsbCgpLmZpbHRlcihjID0+IGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0QXBpT2JqZWN0cykge1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlQXBpT2JqZWN0cykge1xuICAgICAgICBOb2RlLm9mKHNvdXJjZSkuYWRkRGVwZW5kZW5jeSh0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhbiBleHBsaWNpdCBjaGFydCBkZXBlbmRlbmN5IGZyb20gaW1wbGljaXQgY29uc3RydWN0IGRlcGVuZGVuY2llc1xuICAgIGNvbnN0IHNvdXJjZUNoYXJ0ID0gQ2hhcnQub2YoZGVwLnNvdXJjZSk7XG4gICAgY29uc3QgdGFyZ2V0Q2hhcnQgPSBDaGFydC5vZihkZXAudGFyZ2V0KTtcblxuICAgIGlmIChzb3VyY2VDaGFydCAhPT0gdGFyZ2V0Q2hhcnQpIHtcbiAgICAgIE5vZGUub2Yoc291cmNlQ2hhcnQpLmFkZERlcGVuZGVuY3kodGFyZ2V0Q2hhcnQpO1xuICAgICAgaGFzRGVwZW5kYW50Q2hhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBoYXNEZXBlbmRhbnRDaGFydHM7XG5cbn1cblxuZnVuY3Rpb24gY2hhcnRUb0t1YmUoY2hhcnQ6IENoYXJ0KSB7XG4gIHJldHVybiBuZXcgRGVwZW5kZW5jeUdyYXBoKE5vZGUub2YoY2hhcnQpKS50b3BvbG9neSgpXG4gICAgLmZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBBcGlPYmplY3QpXG4gICAgLm1hcCh4ID0+ICh4IGFzIEFwaU9iamVjdCkudG9Kc29uKCkpO1xufSJdfQ==
|