@highstate/k8s 0.9.15 → 0.9.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/{chunk-KBWGED2C.js → chunk-5C2BJGES.js} +7 -12
  2. package/dist/chunk-5C2BJGES.js.map +1 -0
  3. package/dist/{chunk-YUMBUWA4.js → chunk-5TLC5BXR.js} +18 -38
  4. package/dist/chunk-5TLC5BXR.js.map +1 -0
  5. package/dist/{chunk-P2UABKGA.js → chunk-BBIY3KUN.js} +129 -236
  6. package/dist/chunk-BBIY3KUN.js.map +1 -0
  7. package/dist/{chunk-MKFBWTVZ.js → chunk-OFFSHGC6.js} +17 -38
  8. package/dist/chunk-OFFSHGC6.js.map +1 -0
  9. package/dist/chunk-PZ5AY32C.js +2 -3
  10. package/dist/chunk-PZ5AY32C.js.map +1 -1
  11. package/dist/{chunk-QMWFPJQB.js → chunk-TZHOUJRC.js} +9 -20
  12. package/dist/chunk-TZHOUJRC.js.map +1 -0
  13. package/dist/{chunk-YRC7EI6X.js → chunk-YWRJ4EZM.js} +9 -20
  14. package/dist/chunk-YWRJ4EZM.js.map +1 -0
  15. package/dist/deployment-XK3CDJOE.js +6 -0
  16. package/dist/deployment-XK3CDJOE.js.map +1 -0
  17. package/dist/highstate.manifest.json +8 -8
  18. package/dist/index.js +39 -137
  19. package/dist/index.js.map +1 -1
  20. package/dist/stateful-set-7CAQWTV2.js +6 -0
  21. package/dist/stateful-set-7CAQWTV2.js.map +1 -0
  22. package/dist/units/access-point/index.js +6 -7
  23. package/dist/units/access-point/index.js.map +1 -1
  24. package/dist/units/cert-manager/index.js +11 -17
  25. package/dist/units/cert-manager/index.js.map +1 -1
  26. package/dist/units/cluster-dns/index.js +8 -9
  27. package/dist/units/cluster-dns/index.js.map +1 -1
  28. package/dist/units/cluster-patch/index.js +8 -9
  29. package/dist/units/cluster-patch/index.js.map +1 -1
  30. package/dist/units/dns01-issuer/index.js +9 -15
  31. package/dist/units/dns01-issuer/index.js.map +1 -1
  32. package/dist/units/existing-cluster/index.js +12 -21
  33. package/dist/units/existing-cluster/index.js.map +1 -1
  34. package/dist/units/gateway-api/index.js +8 -11
  35. package/dist/units/gateway-api/index.js.map +1 -1
  36. package/package.json +18 -10
  37. package/src/shared.ts +14 -0
  38. package/src/units/cluster-dns/index.ts +1 -1
  39. package/src/units/cluster-patch/index.ts +1 -1
  40. package/src/units/existing-cluster/index.ts +1 -1
  41. package/dist/chunk-KBWGED2C.js.map +0 -1
  42. package/dist/chunk-MKFBWTVZ.js.map +0 -1
  43. package/dist/chunk-P2UABKGA.js.map +0 -1
  44. package/dist/chunk-QMWFPJQB.js.map +0 -1
  45. package/dist/chunk-YRC7EI6X.js.map +0 -1
  46. package/dist/chunk-YUMBUWA4.js.map +0 -1
  47. package/dist/deployment-KOZNZXJA.js +0 -10
  48. package/dist/deployment-KOZNZXJA.js.map +0 -1
  49. package/dist/stateful-set-H5BR3H5D.js +0 -10
  50. package/dist/stateful-set-H5BR3H5D.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/index.js": "289dddef193f49f988b4cab5a8e5b0c8ae987adf3b4c22d6c41dc68144aeacf0",
4
- "./dist/units/access-point/index.js": "abc41ccfe70a8bde952f76ceb6cbae2724052ea78779f83e85d7fd06323901a3",
5
- "./dist/units/cert-manager/index.js": "09fb878da5fb2cb5b4a0805e5de1c167a332ecd413e7ba284b55603db42506c0",
6
- "./dist/units/cluster-patch/index.js": "ce375c50f882d07e64302d193ad6fcaf157c1415256875b7bccb364f6149cc48",
7
- "./dist/units/cluster-dns/index.js": "5fbdab2948fd29a713bbebf103bb7b4676d99cd941d1d65c70a4b7aeae49fc91",
8
- "./dist/units/dns01-issuer/index.js": "5430af651a9546bc1ff2870486b60a76f1650a7f79b4228905b2857c64dbbe54",
9
- "./dist/units/existing-cluster/index.js": "d662c4caa3446388622e65c5c1cc01758ea03a15889e500701a9bf7ebf7b2011",
10
- "./dist/units/gateway-api/index.js": "2514fddfed454490f9c981c1aaa5751e5c18eee528ead66e80a13e1f43d94418"
3
+ "./dist/index.js": 2212294583,
4
+ "./dist/units/access-point/index.js": 1696538936,
5
+ "./dist/units/cert-manager/index.js": 62214576,
6
+ "./dist/units/cluster-patch/index.js": 1914629924,
7
+ "./dist/units/cluster-dns/index.js": 611344514,
8
+ "./dist/units/dns01-issuer/index.js": 3407863981,
9
+ "./dist/units/existing-cluster/index.js": 3899275346,
10
+ "./dist/units/gateway-api/index.js": 3233535669
11
11
  }
12
12
  }
package/dist/index.js CHANGED
@@ -1,58 +1,23 @@
1
- import {
2
- Chart,
3
- RenderedChart,
4
- getChartService,
5
- getChartServiceOutput,
6
- resolveHelmChart
7
- } from "./chunk-MKFBWTVZ.js";
8
- import {
9
- StatefulSet
10
- } from "./chunk-QMWFPJQB.js";
11
- import {
12
- Deployment
13
- } from "./chunk-YRC7EI6X.js";
14
- import {
15
- ConfigMap,
16
- ExposableWorkload,
17
- HttpRoute,
18
- NetworkPolicy,
19
- PersistentVolumeClaim,
20
- Secret,
21
- Service,
22
- Workload,
23
- getBestEndpoint,
24
- getServiceMetadata,
25
- getWorkloadComponents,
26
- hasServiceMetadata,
27
- isFromCluster,
28
- mapContainerPortToServicePort,
29
- mapServiceToLabelSelector,
30
- requireBestEndpoint,
31
- withServiceMetadata
32
- } from "./chunk-P2UABKGA.js";
33
- import {
34
- createK8sTerminal,
35
- detectExternalIps
36
- } from "./chunk-KBWGED2C.js";
37
- import {
38
- Namespace,
39
- commonExtraArgs,
40
- getProvider,
41
- mapMetadata,
42
- mapNamespaceLikeToNamespaceName,
43
- mapNamespaceNameToSelector,
44
- mapSelectorLikeToSelector
45
- } from "./chunk-YUMBUWA4.js";
46
- import "./chunk-PZ5AY32C.js";
1
+ export { Chart, RenderedChart, getChartService, getChartServiceOutput, resolveHelmChart } from './chunk-OFFSHGC6.js';
2
+ export { StatefulSet } from './chunk-TZHOUJRC.js';
3
+ export { Deployment } from './chunk-YWRJ4EZM.js';
4
+ import { NetworkPolicy, isFromCluster, ConfigMap, getWorkloadComponents } from './chunk-BBIY3KUN.js';
5
+ export { ConfigMap, ExposableWorkload, HttpRoute, NetworkPolicy, PersistentVolumeClaim, Secret, Service, Workload, getBestEndpoint, getServiceMetadata, hasServiceMetadata, isFromCluster, mapContainerPortToServicePort, mapServiceToLabelSelector, requireBestEndpoint, withServiceMetadata } from './chunk-BBIY3KUN.js';
6
+ export { createK8sTerminal, detectExternalIps } from './chunk-5C2BJGES.js';
7
+ import { commonExtraArgs, getProvider, mapNamespaceLikeToNamespaceName, mapMetadata } from './chunk-5TLC5BXR.js';
8
+ export { Namespace, getProvider, mapMetadata, mapNamespaceLikeToNamespaceName, mapNamespaceNameToSelector, mapSelectorLikeToSelector } from './chunk-5TLC5BXR.js';
9
+ import './chunk-PZ5AY32C.js';
10
+ import { DnsRecordSet, filterEndpoints, l3EndpointToString, parseL34Endpoint } from '@highstate/common';
11
+ import { gateway } from '@highstate/gateway-api';
12
+ import { output, normalize, toPromise, apply, ComponentResource as ComponentResource$1 } from '@highstate/pulumi';
13
+ import { ComponentResource, output as output$1 } from '@pulumi/pulumi';
14
+ import { pipe, omitBy, mapValues, merge, mergeDeep, omit } from 'remeda';
15
+ import { deepmerge } from 'deepmerge-ts';
16
+ import { readPackageJSON } from 'pkg-types';
17
+ import { text, trimIndentation } from '@highstate/contract';
18
+ import { serializeFunction } from '@pulumi/pulumi/runtime/index.js';
19
+ import { batch } from '@pulumi/kubernetes';
47
20
 
48
- // src/access-point.ts
49
- import { DnsRecordSet, filterEndpoints, l3EndpointToString } from "@highstate/common";
50
- import { gateway } from "@highstate/gateway-api";
51
- import {
52
- normalize,
53
- output,
54
- toPromise
55
- } from "@highstate/pulumi";
56
21
  function useAccessPoint(args) {
57
22
  const result = output({ args, namespaceName: output(args.namespace).metadata.name }).apply(
58
23
  ({ args: args2, namespaceName }) => {
@@ -163,19 +128,6 @@ function createGateway(args) {
163
128
  });
164
129
  }
165
130
 
166
- // src/scripting/bundle.ts
167
- import { apply, normalize as normalize2 } from "@highstate/pulumi";
168
- import {
169
- ComponentResource,
170
- output as output2
171
- } from "@pulumi/pulumi";
172
- import { mapValues, omitBy, pipe } from "remeda";
173
- import { deepmerge } from "deepmerge-ts";
174
- import { readPackageJSON } from "pkg-types";
175
- import { text, trimIndentation } from "@highstate/contract";
176
- import { parseL34Endpoint } from "@highstate/common";
177
- import { serializeFunction } from "@pulumi/pulumi/runtime/index.js";
178
-
179
131
  // src/scripting/environment.ts
180
132
  var emptyDistributionEnvironment = {
181
133
  preInstallPackages: [],
@@ -249,8 +201,8 @@ var ScriptBundle = class extends ComponentResource {
249
201
  constructor(name, args, opts) {
250
202
  super("highstate:k8s:ScriptBundle", name, args, opts);
251
203
  const scriptEnvironment = pipe(
252
- output2(args),
253
- apply((args2) => normalize2(args2.environment, args2.environments)),
204
+ output$1(args),
205
+ apply((args2) => normalize(args2.environment, args2.environments)),
254
206
  apply((args2) => deepmerge(emptyScriptEnvironment, ...args2))
255
207
  );
256
208
  const hasFunctionScripts = scriptEnvironment.apply((scriptEnvironment2) => {
@@ -259,11 +211,11 @@ var ScriptBundle = class extends ComponentResource {
259
211
  this.distribution = args.distribution;
260
212
  this.environment = scriptEnvironment.environment;
261
213
  this.image = hasFunctionScripts.apply(
262
- (hasFunctionScripts2) => output2(
214
+ (hasFunctionScripts2) => output$1(
263
215
  hasFunctionScripts2 ? functionScriptImages[args.distribution] : scriptEnvironment[args.distribution].image
264
216
  )
265
217
  );
266
- this.allowedEndpoints = output2({ scriptEnvironment, hasFunctionScripts }).apply(
218
+ this.allowedEndpoints = output$1({ scriptEnvironment, hasFunctionScripts }).apply(
267
219
  ({ scriptEnvironment: scriptEnvironment2, hasFunctionScripts: hasFunctionScripts2 }) => {
268
220
  const allowedEndpoints = [
269
221
  ...scriptEnvironment2.allowedEndpoints,
@@ -275,7 +227,7 @@ var ScriptBundle = class extends ComponentResource {
275
227
  return allowedEndpoints.map(parseL34Endpoint);
276
228
  }
277
229
  );
278
- this.configMap = output2({ scriptEnvironment, args }).apply(({ scriptEnvironment: scriptEnvironment2, args: args2 }) => {
230
+ this.configMap = output$1({ scriptEnvironment, args }).apply(({ scriptEnvironment: scriptEnvironment2, args: args2 }) => {
279
231
  return ConfigMap.create(
280
232
  name,
281
233
  {
@@ -286,7 +238,7 @@ var ScriptBundle = class extends ComponentResource {
286
238
  { ...opts, parent: this }
287
239
  );
288
240
  });
289
- this.volumes = output2({ hasFunctionScripts, volumes: scriptEnvironment.volumes }).apply(
241
+ this.volumes = output$1({ hasFunctionScripts, volumes: scriptEnvironment.volumes }).apply(
290
242
  ({ hasFunctionScripts: hasFunctionScripts2, volumes }) => {
291
243
  return [
292
244
  ...volumes,
@@ -302,7 +254,7 @@ var ScriptBundle = class extends ComponentResource {
302
254
  ];
303
255
  }
304
256
  );
305
- this.volumeMounts = output2({
257
+ this.volumeMounts = output$1({
306
258
  hasFunctionScripts,
307
259
  volumeMounts: scriptEnvironment.volumeMounts
308
260
  }).apply(({ hasFunctionScripts: hasFunctionScripts2, volumeMounts }) => {
@@ -468,13 +420,9 @@ function getInstallPackagesScript(distribution, packages) {
468
420
  `;
469
421
  }
470
422
  }
471
-
472
- // src/scripting/container.ts
473
- import { merge } from "remeda";
474
- import { output as output3 } from "@pulumi/pulumi";
475
423
  function createScriptContainer(options) {
476
- const bundle = output3(options.bundle);
477
- return output3({
424
+ const bundle = output$1(options.bundle);
425
+ return output$1({
478
426
  options,
479
427
  image: bundle.image,
480
428
  volumeMounts: bundle.volumeMounts,
@@ -493,13 +441,8 @@ function createScriptContainer(options) {
493
441
  };
494
442
  });
495
443
  }
496
-
497
- // src/job.ts
498
- import { batch } from "@pulumi/kubernetes";
499
- import { ComponentResource as ComponentResource2, output as output4 } from "@highstate/pulumi";
500
- import { mergeDeep, omit } from "remeda";
501
444
  var jobExtraArgs = [...commonExtraArgs, "container", "containers"];
502
- var Job = class extends ComponentResource2 {
445
+ var Job = class extends ComponentResource$1 {
503
446
  /**
504
447
  * The underlying Kubernetes job.
505
448
  */
@@ -507,7 +450,7 @@ var Job = class extends ComponentResource2 {
507
450
  constructor(name, args, opts) {
508
451
  super("highstate:k8s:Job", name, args, opts);
509
452
  const { podTemplate } = getWorkloadComponents(name, args, () => this, opts);
510
- this.job = output4({ args, podTemplate }).apply(async ({ args: args2, podTemplate: podTemplate2 }) => {
453
+ this.job = output({ args, podTemplate }).apply(async ({ args: args2, podTemplate: podTemplate2 }) => {
511
454
  return new batch.v1.Job(
512
455
  name,
513
456
  {
@@ -535,13 +478,8 @@ var Job = class extends ComponentResource2 {
535
478
  });
536
479
  }
537
480
  };
538
-
539
- // src/cron-job.ts
540
- import { batch as batch2 } from "@pulumi/kubernetes";
541
- import { ComponentResource as ComponentResource3, output as output5 } from "@highstate/pulumi";
542
- import { mergeDeep as mergeDeep2, omit as omit2 } from "remeda";
543
481
  var cronJobExtraArgs = [...commonExtraArgs, "container", "containers"];
544
- var CronJob = class extends ComponentResource3 {
482
+ var CronJob = class extends ComponentResource$1 {
545
483
  /**
546
484
  * The underlying Kubernetes job.
547
485
  */
@@ -549,16 +487,16 @@ var CronJob = class extends ComponentResource3 {
549
487
  constructor(name, args, opts) {
550
488
  super("highstate:k8s:CronJob", name, args, opts);
551
489
  const { podTemplate } = getWorkloadComponents(name, args, () => this, opts);
552
- this.cronJob = output5({ args, podTemplate }).apply(async ({ args: args2, podTemplate: podTemplate2 }) => {
553
- return new batch2.v1.CronJob(
490
+ this.cronJob = output({ args, podTemplate }).apply(async ({ args: args2, podTemplate: podTemplate2 }) => {
491
+ return new batch.v1.CronJob(
554
492
  name,
555
493
  {
556
494
  metadata: mapMetadata(args2, name),
557
- spec: mergeDeep2(
495
+ spec: mergeDeep(
558
496
  {
559
497
  jobTemplate: {
560
498
  spec: {
561
- template: mergeDeep2(
499
+ template: mergeDeep(
562
500
  {
563
501
  spec: {
564
502
  restartPolicy: "Never"
@@ -570,7 +508,7 @@ var CronJob = class extends ComponentResource3 {
570
508
  },
571
509
  schedule: args2.schedule
572
510
  },
573
- omit2(args2, cronJobExtraArgs)
511
+ omit(args2, cronJobExtraArgs)
574
512
  )
575
513
  },
576
514
  {
@@ -582,43 +520,7 @@ var CronJob = class extends ComponentResource3 {
582
520
  });
583
521
  }
584
522
  };
585
- export {
586
- Chart,
587
- ConfigMap,
588
- CronJob,
589
- Deployment,
590
- ExposableWorkload,
591
- HttpRoute,
592
- Job,
593
- Namespace,
594
- NetworkPolicy,
595
- PersistentVolumeClaim,
596
- RenderedChart,
597
- ScriptBundle,
598
- Secret,
599
- Service,
600
- StatefulSet,
601
- Workload,
602
- createK8sTerminal,
603
- createScriptContainer,
604
- detectExternalIps,
605
- getBestEndpoint,
606
- getChartService,
607
- getChartServiceOutput,
608
- getProvider,
609
- getServiceMetadata,
610
- hasServiceMetadata,
611
- isFromCluster,
612
- mapContainerPortToServicePort,
613
- mapMetadata,
614
- mapNamespaceLikeToNamespaceName,
615
- mapNamespaceNameToSelector,
616
- mapSelectorLikeToSelector,
617
- mapServiceToLabelSelector,
618
- requireBestEndpoint,
619
- resolveHelmChart,
620
- useAccessPoint,
621
- useStandardAcessPoint,
622
- withServiceMetadata
623
- };
523
+
524
+ export { CronJob, Job, ScriptBundle, createScriptContainer, useAccessPoint, useStandardAcessPoint };
525
+ //# sourceMappingURL=index.js.map
624
526
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/access-point.ts","../src/scripting/bundle.ts","../src/scripting/environment.ts","../src/scripting/container.ts","../src/job.ts","../src/cron-job.ts"],"sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport type { Provider } from \"@pulumi/kubernetes\"\nimport type { Namespace } from \"./namespace\"\nimport { DnsRecordSet, filterEndpoints, l3EndpointToString } from \"@highstate/common\"\nimport { gateway } from \"@highstate/gateway-api\"\nimport {\n normalize,\n Output,\n output,\n toPromise,\n type Input,\n type InputArray,\n} from \"@highstate/pulumi\"\nimport { NetworkPolicy } from \"./network-policy\"\nimport { getProvider, mapNamespaceLikeToNamespaceName } from \"./shared\"\nimport { isFromCluster } from \"./service\"\n\nexport type UseAccessPointResult = {\n /**\n * The gateway instance created according to the access point.\n */\n gateway: gateway.v1.Gateway\n\n /**\n * The DNS record sets associated created according to the access point and gateway.\n */\n dnsRecordSets: DnsRecordSet[]\n\n /**\n * The network policies associated with the access point.\n */\n networkPolicies: NetworkPolicy[]\n}\n\nexport type UseAccessPointArgs = Omit<CreateGatewayArgs, \"gateway\"> & {\n accessPoint: Input<k8s.AccessPoint>\n}\n\nexport function useAccessPoint(args: UseAccessPointArgs): Promise<UseAccessPointResult> {\n const result = output({ args, namespaceName: output(args.namespace).metadata.name }).apply(\n ({ args, namespaceName }) => {\n if (args.accessPoint.clusterId !== args.cluster.id) {\n throw new Error(\n \"The provided Kubernetes cluster is different from the one where the access point is deployed.\",\n )\n }\n\n const gateway = createGateway({\n ...args,\n annotations: {\n \"cert-manager.io/cluster-issuer\": args.accessPoint.tlsIssuer.clusterIssuerName,\n },\n gateway: args.accessPoint.gateway,\n })\n\n const dnsRecordSets = normalize(args.fqdn, args.fqdns).flatMap(fqdn => {\n return DnsRecordSet.create(fqdn, {\n providers: args.accessPoint.dnsProviders,\n values: filterEndpoints(\n args.accessPoint.gateway.endpoints.filter(endpoint => endpoint.type !== \"hostname\"),\n ),\n })\n })\n\n const networkPolicies: Output<NetworkPolicy>[] = [\n NetworkPolicy.create(\n `allow-ingress-from-${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}`,\n {\n namespace: args.namespace,\n cluster: args.cluster,\n\n description: `Allow ingress traffic from the gateway at \"${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}\".`,\n\n ingressRule: {\n fromEndpoints: args.accessPoint.gateway.endpoints,\n },\n },\n { provider: args.provider },\n ),\n ]\n\n if (isFromCluster(args.accessPoint.gateway.endpoints[0], args.cluster)) {\n networkPolicies.push(\n NetworkPolicy.create(\n `allow-egress-to-${namespaceName}`,\n {\n namespace: args.accessPoint.gateway.endpoints[0].metadata.k8sService.namespace,\n cluster: args.cluster,\n\n selector: args.accessPoint.gateway.endpoints[0].metadata.k8sService.selector,\n\n description: `Allow egress traffic to the namespace \"${namespaceName}\".`,\n\n egressRule: {\n toNamespace: args.namespace,\n },\n },\n { provider: args.provider },\n ),\n )\n }\n\n return output({\n gateway,\n dnsRecordSets,\n networkPolicies,\n })\n },\n )\n\n return toPromise(result)\n}\n\nexport type StandardAccessPointArgs = {\n appName: string\n fqdn: string\n}\n\nexport type StandardAccessPointInputs = {\n accessPoint: Output<k8s.AccessPoint>\n k8sCluster: Output<k8s.Cluster>\n}\n\nexport async function useStandardAcessPoint(\n namespace: Namespace,\n args: StandardAccessPointArgs,\n inputs: StandardAccessPointInputs,\n): Promise<UseAccessPointResult> {\n return await useAccessPoint({\n name: args.appName,\n namespace,\n\n fqdn: args.fqdn,\n\n accessPoint: inputs.accessPoint,\n cluster: inputs.k8sCluster,\n provider: await getProvider(inputs.k8sCluster),\n })\n}\n\nexport type CreateGatewayArgs = {\n name: string\n namespace: Input<Namespace>\n annotations?: Input<Record<string, string>>\n\n fqdn?: Input<string>\n fqdns?: InputArray<string>\n\n gateway: Input<k8s.Gateway>\n cluster: Input<k8s.Cluster>\n provider: Provider\n}\n\nexport function createGateway(args: CreateGatewayArgs): Output<gateway.v1.Gateway> {\n return output(args).apply(args => {\n if (args.cluster.id !== args.gateway.clusterId) {\n throw new Error(\n \"The provided Kubernetes cluster is different from the one where the gateway controller is deployed.\",\n )\n }\n\n return new gateway.v1.Gateway(\n args.name,\n {\n metadata: {\n name: args.name,\n namespace: mapNamespaceLikeToNamespaceName(args.namespace),\n annotations: args.annotations,\n },\n spec: {\n gatewayClassName: output(args.gateway).gatewayClassName,\n listeners: normalize(args.fqdn, args.fqdns).map(fqdn => {\n const normalizedName = fqdn.replace(/\\*/g, \"wildcard\")\n\n return {\n name: `https-${normalizedName}`,\n port: output(args.gateway).httpsListenerPort,\n protocol: \"HTTPS\",\n hostname: fqdn,\n tls: {\n mode: \"Terminate\",\n certificateRefs: [{ name: normalizedName }],\n },\n }\n }),\n },\n },\n { provider: args.provider, deletedWith: args.namespace },\n )\n })\n}\n","import type { ContainerEnvironment, ContainerVolumeMount, WorkloadVolume } from \"../container\"\nimport type { network } from \"@highstate/library\"\nimport { apply, normalize, type InputArray } from \"@highstate/pulumi\"\nimport {\n ComponentResource,\n output,\n type ComponentResourceOptions,\n type Input,\n type Output,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { mapValues, omitBy, pipe } from \"remeda\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport { readPackageJSON } from \"pkg-types\"\nimport { text, trimIndentation } from \"@highstate/contract\"\nimport { parseL34Endpoint } from \"@highstate/common\"\nimport { serializeFunction } from \"@pulumi/pulumi/runtime/index.js\"\nimport { type CommonArgs } from \"../shared\"\nimport { ConfigMap } from \"../config-map\"\nimport {\n emptyScriptEnvironment,\n functionScriptImages,\n type ResolvedScriptEnvironment,\n type ScriptDistribution,\n type ScriptEnvironment,\n} from \"./environment\"\n\nexport type ScriptBundleArgs = CommonArgs & {\n /**\n * The environment to bundle the scripts from.\n */\n environment?: Input<ScriptEnvironment>\n\n /**\n * The environments to bundle the scripts from.\n */\n environments?: InputArray<ScriptEnvironment>\n\n /**\n * The distribution to use for the scripts.\n */\n distribution: ScriptDistribution\n}\n\nexport class ScriptBundle extends ComponentResource {\n /**\n * The config map containing the scripts.\n */\n readonly configMap: Output<ConfigMap>\n\n /**\n * The volumes that should be included in the workload.\n */\n readonly volumes: Output<WorkloadVolume[]>\n\n /**\n * The volume mounts that should be defined in the container.\n */\n readonly volumeMounts: Output<ContainerVolumeMount[]>\n\n /**\n * The environment variables that should be defined in the container.\n */\n readonly environment: Output<ContainerEnvironment>\n\n /**\n * The image to use for the scripts.\n */\n readonly image: Output<string>\n\n /**\n * The distribution to use for the scripts.\n */\n readonly distribution: ScriptDistribution\n\n /**\n * The list of endpoints that the script is allowed to access.\n */\n readonly allowedEndpoints: Output<network.L34Endpoint[]>\n\n constructor(name: string, args: ScriptBundleArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:ScriptBundle\", name, args, opts)\n\n const scriptEnvironment = pipe(\n output(args),\n apply(args => normalize(args.environment, args.environments)),\n apply(args => deepmerge(emptyScriptEnvironment, ...args)),\n ) as Output<Unwrap<ResolvedScriptEnvironment>>\n\n const hasFunctionScripts = scriptEnvironment.apply(scriptEnvironment => {\n return Object.values(scriptEnvironment.files).some(file => typeof file === \"function\")\n })\n\n this.distribution = args.distribution\n this.environment = scriptEnvironment.environment\n\n this.image = hasFunctionScripts.apply(hasFunctionScripts =>\n output(\n hasFunctionScripts\n ? functionScriptImages[args.distribution]\n : scriptEnvironment[args.distribution].image,\n ),\n )\n\n this.allowedEndpoints = output({ scriptEnvironment, hasFunctionScripts }).apply(\n ({ scriptEnvironment, hasFunctionScripts }) => {\n const allowedEndpoints = [\n ...scriptEnvironment.allowedEndpoints,\n ...scriptEnvironment[args.distribution].allowedEndpoints,\n ]\n\n if (hasFunctionScripts) {\n allowedEndpoints.push(\"tcp://registry.npmjs.org:443\")\n }\n\n return allowedEndpoints.map(parseL34Endpoint)\n },\n )\n\n this.configMap = output({ scriptEnvironment, args }).apply(({ scriptEnvironment, args }) => {\n return ConfigMap.create(\n name,\n {\n cluster: args.cluster,\n namespace: args.namespace,\n\n data: createScriptData(this.distribution, scriptEnvironment),\n },\n { ...opts, parent: this },\n )\n })\n\n this.volumes = output({ hasFunctionScripts, volumes: scriptEnvironment.volumes }).apply(\n ({ hasFunctionScripts, volumes }) => {\n return [\n ...volumes,\n {\n name: this.configMap.metadata.name,\n\n configMap: {\n name: this.configMap.metadata.name,\n defaultMode: 0o550, // read and execute permissions\n },\n },\n ...(hasFunctionScripts ? [{ name: \"node-modules\", emptyDir: {} }] : []),\n ]\n },\n )\n\n this.volumeMounts = output({\n hasFunctionScripts,\n volumeMounts: scriptEnvironment.volumeMounts,\n }).apply(({ hasFunctionScripts, volumeMounts }) => {\n return [\n ...volumeMounts,\n {\n volume: this.configMap,\n mountPath: \"/scripts\",\n },\n ...(hasFunctionScripts\n ? [{ name: \"node-modules\", mountPath: \"/scripts/node_modules\" }]\n : []),\n ]\n })\n\n this.registerOutputs({\n configMap: this.configMap,\n volumes: this.volumes,\n volumeMounts: this.volumeMounts,\n environment: this.environment,\n distribution: this.distribution,\n allowedEndpoints: this.allowedEndpoints,\n image: this.image,\n })\n }\n}\n\nfunction stripWorkspacePrefix(value: string): string {\n if (value.startsWith(\"workspace:\")) {\n return value.replace(\"workspace:\", \"\")\n }\n\n return value\n}\n\nasync function createScriptData(\n distribution: ScriptDistribution,\n environment: Unwrap<ResolvedScriptEnvironment>,\n): Promise<Record<string, string>> {\n const scriptData: Record<string, string> = {}\n const actions: string[] = []\n\n const distributionEnvironment = environment[distribution]\n const setupScripts = { ...environment.setupScripts }\n\n let hasFunctionScripts = false\n\n for (const key in environment.files) {\n if (typeof environment.files[key] === \"function\") {\n const serialized = await serializeFunction(environment.files[key])\n\n scriptData[key] = text`\n #!/usr/local/bin/bun\n \n ${serialized.text}\n\n exports.${serialized.exportName}()\n `\n\n hasFunctionScripts = true\n } else {\n scriptData[key] = environment.files[key]\n }\n }\n\n if (hasFunctionScripts) {\n const packageJson = await readPackageJSON()\n\n packageJson.dependencies = omitBy(\n mapValues(packageJson.dependencies ?? {}, stripWorkspacePrefix),\n (_, key) => key.startsWith(\"@highstate/\"),\n )\n\n packageJson.devDependencies = omitBy(\n mapValues(packageJson.devDependencies ?? {}, stripWorkspacePrefix),\n (_, key) => key.startsWith(\"@highstate/\"),\n )\n\n scriptData[\"package.json\"] = JSON.stringify(packageJson, null, 2)\n\n setupScripts[\"resolve-dependencies.sh\"] = text`\n #!/usr/local/bin/bun\n set -e\n\n cd /scripts\n bun install --production\n `\n }\n\n if (distributionEnvironment.preInstallPackages.length > 0) {\n scriptData[\"pre-install-packages.sh\"] = getInstallPackagesScript(\n distribution,\n distributionEnvironment.preInstallPackages,\n )\n\n actions.push(`\n echo \"+ Installing pre-install packages...\"\n /scripts/pre-install-packages.sh\n echo \"+ Pre-install packages installed successfully\"\n `)\n }\n\n if (Object.keys(distributionEnvironment.preInstallScripts).length > 0) {\n for (const key in distributionEnvironment.preInstallScripts) {\n scriptData[`pre-install-${key}`] = distributionEnvironment.preInstallScripts[key]\n\n actions.push(`\n echo \"+ Running pre-install script '${key}'...\"\n /scripts/pre-install-${key}\n echo \"+ Pre-install script '${key}'... Done\"\n `)\n }\n }\n\n if (distributionEnvironment.packages.length > 0) {\n scriptData[\"install-packages.sh\"] = getInstallPackagesScript(\n distribution,\n distributionEnvironment.packages,\n )\n\n actions.push(`\n echo \"+ Installing packages...\"\n /scripts/install-packages.sh\n echo \"+ Packages installed successfully\"\n `)\n }\n\n if (Object.keys(setupScripts).length > 0) {\n for (const key in setupScripts) {\n scriptData[`setup-${key}`] = setupScripts[key]\n\n actions.push(`\n echo \"+ Running setup script '${key}'...\"\n /scripts/setup-${key}\n echo \"+ Setup script '${key}'... Done\"\n `)\n }\n }\n\n if (Object.keys(environment.cleanupScripts).length > 0) {\n const cleanupActions: string[] = []\n\n for (const key in environment.cleanupScripts) {\n scriptData[`cleanup-${key}`] = environment.cleanupScripts[key]\n\n cleanupActions.push(`\n echo \"+ Running cleanup script '${key}'...\"\n /scripts/cleanup-${key}\n echo \"+ Cleanup script '${key}'... Done\"\n `)\n }\n\n actions.push(`\n function cleanup() {\n ${cleanupActions.map(s => s.trim()).join(\"\\n\\n\")}\n }\n\n trap cleanup EXIT\n trap cleanup SIGTERM\n `)\n }\n\n scriptData[\"entrypoint.sh\"] = trimIndentation(`\n #!/bin/sh\n set -e\n\n if [ -z \"$1\" ]; then\n echo \"Usage: entrypoint.sh <main script> [args...]\"\n exit 1\n fi\n\n ${actions.map(s => s.trim()).join(\"\\n\\n\")}\n\n echo \"+ Running main script...\"\n $@\n echo \"+ Main script completed\"\n `)\n\n return scriptData\n}\n\nfunction getInstallPackagesScript(distribution: ScriptDistribution, packages: string[]): string {\n if (distribution === \"alpine\") {\n return text`\n #!/bin/sh\n set -e\n\n apk add --no-cache ${packages.join(\" \")}\n `\n } else {\n return text`\n #!/bin/sh\n set -e\n\n apt-get update\n apt-get install -y ${packages.join(\" \")}\n `\n }\n}\n","import type { Input, InputArray, InputMap } from \"@highstate/pulumi\"\nimport type { ContainerEnvironment, ContainerVolumeMount, WorkloadVolume } from \"../container\"\nimport type { InputL34Endpoint } from \"@highstate/common\"\n\nexport type ScriptDistribution = \"alpine\" | \"ubuntu\"\n\nexport type DistributionEnvironment = {\n /**\n * The image that should be used for the distribution.\n */\n image?: Input<string>\n\n /**\n * The utility packages that should be installed before running \"preInstallScripts\".\n *\n * Useful for installing tools like `curl` to install additional repositories.\n */\n preInstallPackages?: InputArray<string>\n\n /**\n * The pre-install scripts that should be run before installing packages.\n * Typically, these scripts are used to install additional repositories.\n */\n preInstallScripts?: InputMap<string>\n\n /**\n * The packages that are available in the environment.\n */\n packages?: InputArray<string>\n\n /**\n * The endpoint which the script is allowed to access scoped to the distribution.\n *\n * Typically, this is used to allow access to the package manager.\n *\n * Will be used to generate a network policy.\n */\n allowedEndpoints?: InputArray<InputL34Endpoint>\n}\n\nexport type ScriptProgram = () => unknown\n\nexport type ScriptEnvironment = {\n [distribution in ScriptDistribution]?: DistributionEnvironment\n} & {\n /**\n * The setup scripts that should be run before the script.\n */\n setupScripts?: InputMap<string>\n\n /**\n * The cleanup scripts that should be run after the script.\n */\n cleanupScripts?: InputMap<string>\n\n /**\n * The arbitrary files available in the environment including scripts.\n */\n files?: InputMap<string | ScriptProgram>\n\n /**\n * The volumes that should be defined in the environment.\n */\n volumes?: InputArray<WorkloadVolume>\n\n /**\n * The volume mounts that should be defined in the environment.\n */\n volumeMounts?: InputArray<ContainerVolumeMount>\n\n /**\n * The environment variables that should be defined in the environment.\n */\n environment?: Input<ContainerEnvironment>\n\n /**\n * The endpoint which the script is allowed to access.\n *\n * Will be used to generate a network policy.\n */\n allowedEndpoints?: InputArray<InputL34Endpoint>\n}\n\nexport type ResolvedScriptEnvironment = Omit<Required<ScriptEnvironment>, ScriptDistribution> & {\n [distribution in ScriptDistribution]: Required<DistributionEnvironment>\n}\n\nconst emptyDistributionEnvironment = {\n preInstallPackages: [],\n preInstallScripts: {},\n packages: [],\n}\n\nexport const emptyScriptEnvironment: ResolvedScriptEnvironment = {\n alpine: {\n ...emptyDistributionEnvironment,\n image: \"alpine@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c\",\n allowedEndpoints: [\n //\n \"tcp://dl-cdn.alpinelinux.org:443\",\n \"tcp://dl-cdn.alpinelinux.org:80\",\n ],\n },\n\n ubuntu: {\n ...emptyDistributionEnvironment,\n image: \"ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782\",\n allowedEndpoints: [\n //\n \"tcp://archive.ubuntu.com:80\",\n \"tcp://archive.ubuntu.com:443\",\n \"tcp://security.ubuntu.com:80\",\n \"tcp://security.ubuntu.com:443\",\n ],\n },\n\n setupScripts: {},\n cleanupScripts: {},\n files: {},\n volumes: [],\n volumeMounts: [],\n environment: {},\n allowedEndpoints: [],\n}\n\nexport const functionScriptImages: Record<ScriptDistribution, string> = {\n alpine: \"oven/bun@sha256:6b14922b0885c3890cdb0b396090af1da486ba941df5ee94391eef64f7113c61\",\n ubuntu: \"oven/bun@sha256:66b431441dc4c36d7e8164bfc61e6348ec1d7ce2862fc3a29f5dc9856e8205e4\",\n}\n","import type { Container } from \"../container\"\nimport type { ScriptBundle } from \"./bundle\"\nimport { merge } from \"remeda\"\nimport { Output, output, type Input } from \"@pulumi/pulumi\"\n\nexport type ScriptContainer = Container & {\n /**\n * The script bundle to use.\n */\n bundle: Input<ScriptBundle>\n\n /**\n * The name of the main script to run.\n * The script must be available in the bundle.\n */\n main: Input<string>\n}\n\n/**\n * Creates a spec for a container that runs a script.\n * This spec can be used to create a complete workload or an init container.\n *\n * @param options The options to create the container spec.\n * @returns The container spec.\n */\nexport function createScriptContainer(options: ScriptContainer): Output<Container> {\n const bundle = output(options.bundle)\n\n return output({\n options,\n image: bundle.image,\n volumeMounts: bundle.volumeMounts,\n volumes: bundle.volumes,\n environment: bundle.environment,\n allowedEndpoints: bundle.allowedEndpoints,\n }).apply(({ options, image, volumeMounts, volumes, environment, allowedEndpoints }) => {\n return {\n image,\n command: [\"/scripts/entrypoint.sh\", `/scripts/${options.main}`],\n\n ...options,\n\n volumeMounts: [...volumeMounts, ...(options.volumeMounts ?? [])],\n volumes: [...volumes, ...(options.volumes ?? [])],\n environment: merge(environment, options.environment),\n allowedEndpoints: [...allowedEndpoints, ...(options.allowedEndpoints ?? [])],\n } as Container\n })\n}\n","import { batch, type types } from \"@pulumi/kubernetes\"\nimport { ComponentResource, Output, output, type ComponentResourceOptions } from \"@highstate/pulumi\"\nimport { mergeDeep, omit } from \"remeda\"\nimport { commonExtraArgs, getProvider, mapMetadata } from \"./shared\"\nimport { getWorkloadComponents, type WorkloadArgs } from \"./workload\"\n\nexport type JobArgs = WorkloadArgs &\n Omit<Partial<types.input.batch.v1.JobSpec>, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n\nconst jobExtraArgs = [...commonExtraArgs, \"container\", \"containers\"] as const\n\nexport class Job extends ComponentResource {\n /**\n * The underlying Kubernetes job.\n */\n public readonly job: Output<batch.v1.Job>\n\n constructor(name: string, args: JobArgs, opts: ComponentResourceOptions) {\n super(\"highstate:k8s:Job\", name, args, opts)\n\n const { podTemplate } = getWorkloadComponents(name, args, () => this, opts)\n\n this.job = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {\n return new batch.v1.Job(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: mergeDeep(\n {\n template: mergeDeep(\n {\n spec: {\n restartPolicy: \"Never\",\n },\n },\n podTemplate,\n ),\n } satisfies types.input.batch.v1.JobSpec,\n omit(args, jobExtraArgs) as types.input.batch.v1.JobSpec,\n ),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n }\n}\n","import type { RequiredKeys } from \"@highstate/contract\"\nimport { batch, type types } from \"@pulumi/kubernetes\"\nimport { ComponentResource, Output, output, type ComponentResourceOptions } from \"@highstate/pulumi\"\nimport { mergeDeep, omit } from \"remeda\"\nimport { commonExtraArgs, getProvider, mapMetadata } from \"./shared\"\nimport { getWorkloadComponents, type WorkloadArgs } from \"./workload\"\n\nexport type CronJobArgs = WorkloadArgs &\n Omit<RequiredKeys<Partial<types.input.batch.v1.CronJobSpec>, \"schedule\">, \"jobTemplate\"> & {\n jobTemplate?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Omit<types.input.batch.v1.JobSpec, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n }\n }\n\nconst cronJobExtraArgs = [...commonExtraArgs, \"container\", \"containers\"] as const\n\nexport class CronJob extends ComponentResource {\n /**\n * The underlying Kubernetes job.\n */\n public readonly cronJob: Output<batch.v1.CronJob>\n\n constructor(name: string, args: CronJobArgs, opts: ComponentResourceOptions) {\n super(\"highstate:k8s:CronJob\", name, args, opts)\n\n const { podTemplate } = getWorkloadComponents(name, args, () => this, opts)\n\n this.cronJob = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {\n return new batch.v1.CronJob(\n name,\n {\n metadata: mapMetadata(args, name),\n\n spec: mergeDeep(\n {\n jobTemplate: {\n spec: {\n template: mergeDeep(\n {\n spec: {\n restartPolicy: \"Never\",\n },\n },\n podTemplate,\n ),\n },\n },\n\n schedule: args.schedule,\n } satisfies types.input.batch.v1.CronJobSpec,\n omit(args, cronJobExtraArgs) as types.input.batch.v1.CronJobSpec,\n ),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n }\n}\n"],"mappings":"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","names":["args","gateway","normalize","output","output","args","normalize","scriptEnvironment","hasFunctionScripts","output","options","ComponentResource","output","ComponentResource","output","args","podTemplate","batch","ComponentResource","output","mergeDeep","omit","ComponentResource","output","args","podTemplate","batch","mergeDeep","omit"]}
1
+ {"version":3,"sources":["../src/access-point.ts","../src/scripting/environment.ts","../src/scripting/bundle.ts","../src/scripting/container.ts","../src/job.ts","../src/cron-job.ts"],"names":["args","gateway","output","normalize","scriptEnvironment","hasFunctionScripts","options","ComponentResource","podTemplate","batch","mergeDeep","omit"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsCO,SAAS,eAAe,IAAyD,EAAA;AACtF,EAAA,MAAM,MAAS,GAAA,MAAA,CAAO,EAAE,IAAA,EAAM,aAAe,EAAA,MAAA,CAAO,IAAK,CAAA,SAAS,CAAE,CAAA,QAAA,CAAS,IAAK,EAAC,CAAE,CAAA,KAAA;AAAA,IACnF,CAAC,EAAE,IAAAA,EAAAA,KAAAA,EAAM,eAAoB,KAAA;AAC3B,MAAA,IAAIA,KAAK,CAAA,WAAA,CAAY,SAAcA,KAAAA,KAAAA,CAAK,QAAQ,EAAI,EAAA;AAClD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA;AAGF,MAAA,MAAMC,WAAU,aAAc,CAAA;AAAA,QAC5B,GAAGD,KAAAA;AAAA,QACH,WAAa,EAAA;AAAA,UACX,gCAAA,EAAkCA,KAAK,CAAA,WAAA,CAAY,SAAU,CAAA;AAAA,SAC/D;AAAA,QACA,OAAA,EAASA,MAAK,WAAY,CAAA;AAAA,OAC3B,CAAA;AAED,MAAM,MAAA,aAAA,GAAgB,UAAUA,KAAK,CAAA,IAAA,EAAMA,MAAK,KAAK,CAAA,CAAE,QAAQ,CAAQ,IAAA,KAAA;AACrE,QAAO,OAAA,YAAA,CAAa,OAAO,IAAM,EAAA;AAAA,UAC/B,SAAA,EAAWA,MAAK,WAAY,CAAA,YAAA;AAAA,UAC5B,MAAQ,EAAA,eAAA;AAAA,YACNA,KAAAA,CAAK,YAAY,OAAQ,CAAA,SAAA,CAAU,OAAO,CAAY,QAAA,KAAA,QAAA,CAAS,SAAS,UAAU;AAAA;AACpF,SACD,CAAA;AAAA,OACF,CAAA;AAED,MAAA,MAAM,eAA2C,GAAA;AAAA,QAC/C,aAAc,CAAA,MAAA;AAAA,UACZ,CAAA,mBAAA,EAAsB,mBAAmBA,KAAK,CAAA,WAAA,CAAY,QAAQ,SAAU,CAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,UAC/E;AAAA,YACE,WAAWA,KAAK,CAAA,SAAA;AAAA,YAChB,SAASA,KAAK,CAAA,OAAA;AAAA,YAEd,WAAA,EAAa,8CAA8C,kBAAmBA,CAAAA,KAAAA,CAAK,YAAY,OAAQ,CAAA,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,YAEpH,WAAa,EAAA;AAAA,cACX,aAAA,EAAeA,KAAK,CAAA,WAAA,CAAY,OAAQ,CAAA;AAAA;AAC1C,WACF;AAAA,UACA,EAAE,QAAUA,EAAAA,KAAAA,CAAK,QAAS;AAAA;AAC5B,OACF;AAEA,MAAI,IAAA,aAAA,CAAcA,MAAK,WAAY,CAAA,OAAA,CAAQ,UAAU,CAAC,CAAA,EAAGA,KAAK,CAAA,OAAO,CAAG,EAAA;AACtE,QAAgB,eAAA,CAAA,IAAA;AAAA,UACd,aAAc,CAAA,MAAA;AAAA,YACZ,mBAAmB,aAAa,CAAA,CAAA;AAAA,YAChC;AAAA,cACE,SAAA,EAAWA,MAAK,WAAY,CAAA,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,SAAS,UAAW,CAAA,SAAA;AAAA,cACrE,SAASA,KAAK,CAAA,OAAA;AAAA,cAEd,QAAA,EAAUA,MAAK,WAAY,CAAA,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,SAAS,UAAW,CAAA,QAAA;AAAA,cAEpE,WAAA,EAAa,0CAA0C,aAAa,CAAA,EAAA,CAAA;AAAA,cAEpE,UAAY,EAAA;AAAA,gBACV,aAAaA,KAAK,CAAA;AAAA;AACpB,aACF;AAAA,YACA,EAAE,QAAUA,EAAAA,KAAAA,CAAK,QAAS;AAAA;AAC5B,SACF;AAAA;AAGF,MAAA,OAAO,MAAO,CAAA;AAAA,QACZ,OAAAC,EAAAA,QAAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA;AACH,GACF;AAEA,EAAA,OAAO,UAAU,MAAM,CAAA;AACzB;AAYA,eAAsB,qBAAA,CACpB,SACA,EAAA,IAAA,EACA,MAC+B,EAAA;AAC/B,EAAA,OAAO,MAAM,cAAe,CAAA;AAAA,IAC1B,MAAM,IAAK,CAAA,OAAA;AAAA,IACX,SAAA;AAAA,IAEA,MAAM,IAAK,CAAA,IAAA;AAAA,IAEX,aAAa,MAAO,CAAA,WAAA;AAAA,IACpB,SAAS,MAAO,CAAA,UAAA;AAAA,IAChB,QAAU,EAAA,MAAM,WAAY,CAAA,MAAA,CAAO,UAAU;AAAA,GAC9C,CAAA;AACH;AAeO,SAAS,cAAc,IAAqD,EAAA;AACjF,EAAA,OAAO,MAAO,CAAA,IAAI,CAAE,CAAA,KAAA,CAAM,CAAAD,KAAQ,KAAA;AAChC,IAAA,IAAIA,KAAK,CAAA,OAAA,CAAQ,EAAOA,KAAAA,KAAAA,CAAK,QAAQ,SAAW,EAAA;AAC9C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA;AAGF,IAAO,OAAA,IAAI,QAAQ,EAAG,CAAA,OAAA;AAAA,MACpBA,KAAK,CAAA,IAAA;AAAA,MACL;AAAA,QACE,QAAU,EAAA;AAAA,UACR,MAAMA,KAAK,CAAA,IAAA;AAAA,UACX,SAAA,EAAW,+BAAgCA,CAAAA,KAAAA,CAAK,SAAS,CAAA;AAAA,UACzD,aAAaA,KAAK,CAAA;AAAA,SACpB;AAAA,QACA,IAAM,EAAA;AAAA,UACJ,gBAAkB,EAAA,MAAA,CAAOA,KAAK,CAAA,OAAO,CAAE,CAAA,gBAAA;AAAA,UACvC,SAAA,EAAW,UAAUA,KAAK,CAAA,IAAA,EAAMA,MAAK,KAAK,CAAA,CAAE,IAAI,CAAQ,IAAA,KAAA;AACtD,YAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,EAAO,UAAU,CAAA;AAErD,YAAO,OAAA;AAAA,cACL,IAAA,EAAM,SAAS,cAAc,CAAA,CAAA;AAAA,cAC7B,IAAM,EAAA,MAAA,CAAOA,KAAK,CAAA,OAAO,CAAE,CAAA,iBAAA;AAAA,cAC3B,QAAU,EAAA,OAAA;AAAA,cACV,QAAU,EAAA,IAAA;AAAA,cACV,GAAK,EAAA;AAAA,gBACH,IAAM,EAAA,WAAA;AAAA,gBACN,eAAiB,EAAA,CAAC,EAAE,IAAA,EAAM,gBAAgB;AAAA;AAC5C,aACF;AAAA,WACD;AAAA;AACH,OACF;AAAA,MACA,EAAE,QAAUA,EAAAA,KAAAA,CAAK,QAAU,EAAA,WAAA,EAAaA,MAAK,SAAU;AAAA,KACzD;AAAA,GACD,CAAA;AACH;;;ACvGA,IAAM,4BAA+B,GAAA;AAAA,EACnC,oBAAoB,EAAC;AAAA,EACrB,mBAAmB,EAAC;AAAA,EACpB,UAAU;AACZ,CAAA;AAEO,IAAM,sBAAoD,GAAA;AAAA,EAC/D,MAAQ,EAAA;AAAA,IACN,GAAG,4BAAA;AAAA,IACH,KAAO,EAAA,gFAAA;AAAA,IACP,gBAAkB,EAAA;AAAA;AAAA,MAEhB,kCAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EAEA,MAAQ,EAAA;AAAA,IACN,GAAG,4BAAA;AAAA,IACH,KAAO,EAAA,gFAAA;AAAA,IACP,gBAAkB,EAAA;AAAA;AAAA,MAEhB,6BAAA;AAAA,MACA,8BAAA;AAAA,MACA,8BAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EAEA,cAAc,EAAC;AAAA,EACf,gBAAgB,EAAC;AAAA,EACjB,OAAO,EAAC;AAAA,EACR,SAAS,EAAC;AAAA,EACV,cAAc,EAAC;AAAA,EACf,aAAa,EAAC;AAAA,EACd,kBAAkB;AACpB,CAAA;AAEO,IAAM,oBAA2D,GAAA;AAAA,EACtE,MAAQ,EAAA,kFAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;;;ACpFa,IAAA,YAAA,GAAN,cAA2B,iBAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,EAIzC,SAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA;AAAA,EAET,WAAA,CAAY,IAAc,EAAA,IAAA,EAAwB,IAAiC,EAAA;AACjF,IAAM,KAAA,CAAA,4BAAA,EAA8B,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAEpD,IAAA,MAAM,iBAAoB,GAAA,IAAA;AAAA,MACxBE,SAAO,IAAI,CAAA;AAAA,MACX,KAAA,CAAM,CAAAF,KAAQG,KAAAA,SAAAA,CAAUH,MAAK,WAAaA,EAAAA,KAAAA,CAAK,YAAY,CAAC,CAAA;AAAA,MAC5D,MAAM,CAAAA,KAAAA,KAAQ,UAAU,sBAAwB,EAAA,GAAGA,KAAI,CAAC;AAAA,KAC1D;AAEA,IAAA,MAAM,kBAAqB,GAAA,iBAAA,CAAkB,KAAM,CAAA,CAAAI,kBAAqB,KAAA;AACtE,MAAO,OAAA,MAAA,CAAO,OAAOA,kBAAkB,CAAA,KAAK,EAAE,IAAK,CAAA,CAAA,IAAA,KAAQ,OAAO,IAAA,KAAS,UAAU,CAAA;AAAA,KACtF,CAAA;AAED,IAAA,IAAA,CAAK,eAAe,IAAK,CAAA,YAAA;AACzB,IAAA,IAAA,CAAK,cAAc,iBAAkB,CAAA,WAAA;AAErC,IAAA,IAAA,CAAK,QAAQ,kBAAmB,CAAA,KAAA;AAAA,MAAM,CAAAC,mBACpCH,KAAAA,QAAAA;AAAA,QACEG,mBAAAA,GACI,qBAAqB,IAAK,CAAA,YAAY,IACtC,iBAAkB,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA;AAAA;AAC3C,KACF;AAEA,IAAA,IAAA,CAAK,mBAAmBH,QAAO,CAAA,EAAE,iBAAmB,EAAA,kBAAA,EAAoB,CAAE,CAAA,KAAA;AAAA,MACxE,CAAC,EAAE,iBAAA,EAAAE,kBAAmB,EAAA,kBAAA,EAAAC,qBAAyB,KAAA;AAC7C,QAAA,MAAM,gBAAmB,GAAA;AAAA,UACvB,GAAGD,kBAAkB,CAAA,gBAAA;AAAA,UACrB,GAAGA,kBAAAA,CAAkB,IAAK,CAAA,YAAY,CAAE,CAAA;AAAA,SAC1C;AAEA,QAAA,IAAIC,mBAAoB,EAAA;AACtB,UAAA,gBAAA,CAAiB,KAAK,8BAA8B,CAAA;AAAA;AAGtD,QAAO,OAAA,gBAAA,CAAiB,IAAI,gBAAgB,CAAA;AAAA;AAC9C,KACF;AAEA,IAAA,IAAA,CAAK,SAAYH,GAAAA,QAAAA,CAAO,EAAE,iBAAA,EAAmB,MAAM,CAAA,CAAE,KAAM,CAAA,CAAC,EAAE,iBAAA,EAAAE,kBAAmB,EAAA,IAAA,EAAAJ,OAAW,KAAA;AAC1F,MAAA,OAAO,SAAU,CAAA,MAAA;AAAA,QACf,IAAA;AAAA,QACA;AAAA,UACE,SAASA,KAAK,CAAA,OAAA;AAAA,UACd,WAAWA,KAAK,CAAA,SAAA;AAAA,UAEhB,IAAM,EAAA,gBAAA,CAAiB,IAAK,CAAA,YAAA,EAAcI,kBAAiB;AAAA,SAC7D;AAAA,QACA,EAAE,GAAG,IAAM,EAAA,MAAA,EAAQ,IAAK;AAAA,OAC1B;AAAA,KACD,CAAA;AAED,IAAK,IAAA,CAAA,OAAA,GAAUF,SAAO,EAAE,kBAAA,EAAoB,SAAS,iBAAkB,CAAA,OAAA,EAAS,CAAE,CAAA,KAAA;AAAA,MAChF,CAAC,EAAE,kBAAAG,EAAAA,mBAAAA,EAAoB,SAAc,KAAA;AACnC,QAAO,OAAA;AAAA,UACL,GAAG,OAAA;AAAA,UACH;AAAA,YACE,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAS,CAAA,IAAA;AAAA,YAE9B,SAAW,EAAA;AAAA,cACT,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAS,CAAA,IAAA;AAAA,cAC9B,WAAa,EAAA;AAAA;AAAA;AACf,WACF;AAAA,UACA,GAAIA,mBAAqB,GAAA,CAAC,EAAE,IAAA,EAAM,cAAgB,EAAA,QAAA,EAAU,EAAC,EAAG,CAAA,GAAI;AAAC,SACvE;AAAA;AACF,KACF;AAEA,IAAA,IAAA,CAAK,eAAeH,QAAO,CAAA;AAAA,MACzB,kBAAA;AAAA,MACA,cAAc,iBAAkB,CAAA;AAAA,KACjC,EAAE,KAAM,CAAA,CAAC,EAAE,kBAAAG,EAAAA,mBAAAA,EAAoB,cAAmB,KAAA;AACjD,MAAO,OAAA;AAAA,QACL,GAAG,YAAA;AAAA,QACH;AAAA,UACE,QAAQ,IAAK,CAAA,SAAA;AAAA,UACb,SAAW,EAAA;AAAA,SACb;AAAA,QACA,GAAIA,mBACA,GAAA,CAAC,EAAE,IAAA,EAAM,gBAAgB,SAAW,EAAA,uBAAA,EAAyB,CAAA,GAC7D;AAAC,OACP;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,eAAgB,CAAA;AAAA,MACnB,WAAW,IAAK,CAAA,SAAA;AAAA,MAChB,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,cAAc,IAAK,CAAA,YAAA;AAAA,MACnB,aAAa,IAAK,CAAA,WAAA;AAAA,MAClB,cAAc,IAAK,CAAA,YAAA;AAAA,MACnB,kBAAkB,IAAK,CAAA,gBAAA;AAAA,MACvB,OAAO,IAAK,CAAA;AAAA,KACb,CAAA;AAAA;AAEL;AAEA,SAAS,qBAAqB,KAAuB,EAAA;AACnD,EAAI,IAAA,KAAA,CAAM,UAAW,CAAA,YAAY,CAAG,EAAA;AAClC,IAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,EAAc,EAAE,CAAA;AAAA;AAGvC,EAAO,OAAA,KAAA;AACT;AAEA,eAAe,gBAAA,CACb,cACA,WACiC,EAAA;AACjC,EAAA,MAAM,aAAqC,EAAC;AAC5C,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAM,MAAA,uBAAA,GAA0B,YAAY,YAAY,CAAA;AACxD,EAAA,MAAM,YAAe,GAAA,EAAE,GAAG,WAAA,CAAY,YAAa,EAAA;AAEnD,EAAA,IAAI,kBAAqB,GAAA,KAAA;AAEzB,EAAW,KAAA,MAAA,GAAA,IAAO,YAAY,KAAO,EAAA;AACnC,IAAA,IAAI,OAAO,WAAA,CAAY,KAAM,CAAA,GAAG,MAAM,UAAY,EAAA;AAChD,MAAA,MAAM,aAAa,MAAM,iBAAA,CAAkB,WAAY,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA;AAEjE,MAAA,UAAA,CAAW,GAAG,CAAI,GAAA,IAAA;AAAA;AAAA;AAAA,QAAA,EAGd,WAAW,IAAI;;AAAA,gBAAA,EAEP,WAAW,UAAU,CAAA;AAAA,MAAA,CAAA;AAGjC,MAAqB,kBAAA,GAAA,IAAA;AAAA,KAChB,MAAA;AACL,MAAA,UAAA,CAAW,GAAG,CAAA,GAAI,WAAY,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA;AACzC;AAGF,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAM,MAAA,WAAA,GAAc,MAAM,eAAgB,EAAA;AAE1C,IAAA,WAAA,CAAY,YAAe,GAAA,MAAA;AAAA,MACzB,SAAU,CAAA,WAAA,CAAY,YAAgB,IAAA,IAAI,oBAAoB,CAAA;AAAA,MAC9D,CAAC,CAAA,EAAG,GAAQ,KAAA,GAAA,CAAI,WAAW,aAAa;AAAA,KAC1C;AAEA,IAAA,WAAA,CAAY,eAAkB,GAAA,MAAA;AAAA,MAC5B,SAAU,CAAA,WAAA,CAAY,eAAmB,IAAA,IAAI,oBAAoB,CAAA;AAAA,MACjE,CAAC,CAAA,EAAG,GAAQ,KAAA,GAAA,CAAI,WAAW,aAAa;AAAA,KAC1C;AAEA,IAAA,UAAA,CAAW,cAAc,CAAI,GAAA,IAAA,CAAK,SAAU,CAAA,WAAA,EAAa,MAAM,CAAC,CAAA;AAEhE,IAAA,YAAA,CAAa,yBAAyB,CAAI,GAAA,IAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA;AAS5C,EAAI,IAAA,uBAAA,CAAwB,kBAAmB,CAAA,MAAA,GAAS,CAAG,EAAA;AACzD,IAAA,UAAA,CAAW,yBAAyB,CAAI,GAAA,wBAAA;AAAA,MACtC,YAAA;AAAA,MACA,uBAAwB,CAAA;AAAA,KAC1B;AAEA,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAAA;AAAA;AAAA,IAIZ,CAAA,CAAA;AAAA;AAGH,EAAA,IAAI,OAAO,IAAK,CAAA,uBAAA,CAAwB,iBAAiB,CAAA,CAAE,SAAS,CAAG,EAAA;AACrE,IAAW,KAAA,MAAA,GAAA,IAAO,wBAAwB,iBAAmB,EAAA;AAC3D,MAAA,UAAA,CAAW,eAAe,GAAG,CAAA,CAAE,CAAI,GAAA,uBAAA,CAAwB,kBAAkB,GAAG,CAAA;AAEhF,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,4CAAA,EAC2B,GAAG,CAAA;AAAA,6BAAA,EAClB,GAAG;AAAA,oCAAA,EACI,GAAG,CAAA;AAAA,MAClC,CAAA,CAAA;AAAA;AACH;AAGF,EAAI,IAAA,uBAAA,CAAwB,QAAS,CAAA,MAAA,GAAS,CAAG,EAAA;AAC/C,IAAA,UAAA,CAAW,qBAAqB,CAAI,GAAA,wBAAA;AAAA,MAClC,YAAA;AAAA,MACA,uBAAwB,CAAA;AAAA,KAC1B;AAEA,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAAA;AAAA;AAAA,IAIZ,CAAA,CAAA;AAAA;AAGH,EAAA,IAAI,MAAO,CAAA,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAG,EAAA;AACxC,IAAA,KAAA,MAAW,OAAO,YAAc,EAAA;AAC9B,MAAA,UAAA,CAAW,CAAS,MAAA,EAAA,GAAG,CAAE,CAAA,CAAA,GAAI,aAAa,GAAG,CAAA;AAE7C,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,sCAAA,EACqB,GAAG,CAAA;AAAA,uBAAA,EAClB,GAAG;AAAA,8BAAA,EACI,GAAG,CAAA;AAAA,MAC5B,CAAA,CAAA;AAAA;AACH;AAGF,EAAA,IAAI,OAAO,IAAK,CAAA,WAAA,CAAY,cAAc,CAAA,CAAE,SAAS,CAAG,EAAA;AACtD,IAAA,MAAM,iBAA2B,EAAC;AAElC,IAAW,KAAA,MAAA,GAAA,IAAO,YAAY,cAAgB,EAAA;AAC5C,MAAA,UAAA,CAAW,WAAW,GAAG,CAAA,CAAE,CAAI,GAAA,WAAA,CAAY,eAAe,GAAG,CAAA;AAE7D,MAAA,cAAA,CAAe,IAAK,CAAA;AAAA,wCAAA,EACgB,GAAG,CAAA;AAAA,yBAAA,EAClB,GAAG;AAAA,gCAAA,EACI,GAAG,CAAA;AAAA,MAC9B,CAAA,CAAA;AAAA;AAGH,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAAA,MAET,EAAA,cAAA,CAAe,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,MAAM,CAAA,CAAE,IAAK,CAAA,MAAM,CAAC;AAAA;;AAAA;AAAA;AAAA,IAKjD,CAAA,CAAA;AAAA;AAGH,EAAW,UAAA,CAAA,eAAe,IAAI,eAAgB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA,EAS5C,EAAA,OAAA,CAAQ,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,MAAM,CAAA,CAAE,IAAK,CAAA,MAAM,CAAC;;AAAA;AAAA;AAAA;AAAA,EAKxC,CAAA,CAAA;AAED,EAAO,OAAA,UAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,cAAkC,QAA4B,EAAA;AAC9F,EAAA,IAAI,iBAAiB,QAAU,EAAA;AAC7B,IAAO,OAAA,IAAA;AAAA;AAAA;;AAAA,yBAIgB,EAAA,QAAA,CAAS,IAAK,CAAA,GAAG,CAAC;AAAA,IAAA,CAAA;AAAA,GAEpC,MAAA;AACL,IAAO,OAAA,IAAA;AAAA;AAAA;;AAAA;AAAA,yBAKgB,EAAA,QAAA,CAAS,IAAK,CAAA,GAAG,CAAC;AAAA,IAAA,CAAA;AAAA;AAG7C;ACnUO,SAAS,sBAAsB,OAA6C,EAAA;AACjF,EAAM,MAAA,MAAA,GAASH,QAAO,CAAA,OAAA,CAAQ,MAAM,CAAA;AAEpC,EAAA,OAAOA,QAAO,CAAA;AAAA,IACZ,OAAA;AAAA,IACA,OAAO,MAAO,CAAA,KAAA;AAAA,IACd,cAAc,MAAO,CAAA,YAAA;AAAA,IACrB,SAAS,MAAO,CAAA,OAAA;AAAA,IAChB,aAAa,MAAO,CAAA,WAAA;AAAA,IACpB,kBAAkB,MAAO,CAAA;AAAA,GAC1B,CAAA,CAAE,KAAM,CAAA,CAAC,EAAE,OAAA,EAAAI,QAAS,EAAA,KAAA,EAAO,YAAc,EAAA,OAAA,EAAS,WAAa,EAAA,gBAAA,EAAuB,KAAA;AACrF,IAAO,OAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAS,CAAC,wBAAA,EAA0B,CAAYA,SAAAA,EAAAA,QAAAA,CAAQ,IAAI,CAAE,CAAA,CAAA;AAAA,MAE9D,GAAGA,QAAAA;AAAA,MAEH,YAAA,EAAc,CAAC,GAAG,YAAA,EAAc,GAAIA,QAAQ,CAAA,YAAA,IAAgB,EAAG,CAAA;AAAA,MAC/D,OAAA,EAAS,CAAC,GAAG,OAAA,EAAS,GAAIA,QAAQ,CAAA,OAAA,IAAW,EAAG,CAAA;AAAA,MAChD,WAAa,EAAA,KAAA,CAAM,WAAaA,EAAAA,QAAAA,CAAQ,WAAW,CAAA;AAAA,MACnD,gBAAA,EAAkB,CAAC,GAAG,gBAAA,EAAkB,GAAIA,QAAQ,CAAA,gBAAA,IAAoB,EAAG;AAAA,KAC7E;AAAA,GACD,CAAA;AACH;AClCA,IAAM,YAAe,GAAA,CAAC,GAAG,eAAA,EAAiB,aAAa,YAAY,CAAA;AAEtD,IAAA,GAAA,GAAN,cAAkBC,mBAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,EAIzB,GAAA;AAAA,EAEhB,WAAA,CAAY,IAAc,EAAA,IAAA,EAAe,IAAgC,EAAA;AACvE,IAAM,KAAA,CAAA,mBAAA,EAAqB,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAE3C,IAAM,MAAA,EAAE,aAAgB,GAAA,qBAAA,CAAsB,MAAM,IAAM,EAAA,MAAM,MAAM,IAAI,CAAA;AAE1E,IAAA,IAAA,CAAK,GAAML,GAAAA,MAAAA,CAAO,EAAE,IAAA,EAAM,aAAa,CAAA,CAAE,KAAM,CAAA,OAAO,EAAE,IAAA,EAAAF,KAAM,EAAA,WAAA,EAAAQ,cAAkB,KAAA;AAC9E,MAAO,OAAA,IAAI,MAAM,EAAG,CAAA,GAAA;AAAA,QAClB,IAAA;AAAA,QACA;AAAA,UACE,QAAA,EAAU,WAAYR,CAAAA,KAAAA,EAAM,IAAI,CAAA;AAAA,UAChC,IAAM,EAAA,SAAA;AAAA,YACJ;AAAA,cACE,QAAU,EAAA,SAAA;AAAA,gBACR;AAAA,kBACE,IAAM,EAAA;AAAA,oBACJ,aAAe,EAAA;AAAA;AACjB,iBACF;AAAA,gBACAQ;AAAA;AACF,aACF;AAAA,YACA,IAAA,CAAKR,OAAM,YAAY;AAAA;AACzB,SACF;AAAA,QACA;AAAA,UACE,GAAG,IAAA;AAAA,UACH,MAAQ,EAAA,IAAA;AAAA,UACR,QAAU,EAAA,MAAM,WAAYA,CAAAA,KAAAA,CAAK,OAAO;AAAA;AAC1C,OACF;AAAA,KACD,CAAA;AAAA;AAEL;AClCA,IAAM,gBAAmB,GAAA,CAAC,GAAG,eAAA,EAAiB,aAAa,YAAY,CAAA;AAE1D,IAAA,OAAA,GAAN,cAAsBO,mBAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,EAI7B,OAAA;AAAA,EAEhB,WAAA,CAAY,IAAc,EAAA,IAAA,EAAmB,IAAgC,EAAA;AAC3E,IAAM,KAAA,CAAA,uBAAA,EAAyB,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAE/C,IAAM,MAAA,EAAE,aAAgB,GAAA,qBAAA,CAAsB,MAAM,IAAM,EAAA,MAAM,MAAM,IAAI,CAAA;AAE1E,IAAA,IAAA,CAAK,OAAUL,GAAAA,MAAAA,CAAO,EAAE,IAAA,EAAM,aAAa,CAAA,CAAE,KAAM,CAAA,OAAO,EAAE,IAAA,EAAAF,KAAM,EAAA,WAAA,EAAAQ,cAAkB,KAAA;AAClF,MAAO,OAAA,IAAIC,MAAM,EAAG,CAAA,OAAA;AAAA,QAClB,IAAA;AAAA,QACA;AAAA,UACE,QAAA,EAAU,WAAYT,CAAAA,KAAAA,EAAM,IAAI,CAAA;AAAA,UAEhC,IAAMU,EAAAA,SAAAA;AAAA,YACJ;AAAA,cACE,WAAa,EAAA;AAAA,gBACX,IAAM,EAAA;AAAA,kBACJ,QAAUA,EAAAA,SAAAA;AAAA,oBACR;AAAA,sBACE,IAAM,EAAA;AAAA,wBACJ,aAAe,EAAA;AAAA;AACjB,qBACF;AAAA,oBACAF;AAAA;AACF;AACF,eACF;AAAA,cAEA,UAAUR,KAAK,CAAA;AAAA,aACjB;AAAA,YACAW,IAAAA,CAAKX,OAAM,gBAAgB;AAAA;AAC7B,SACF;AAAA,QACA;AAAA,UACE,GAAG,IAAA;AAAA,UACH,MAAQ,EAAA,IAAA;AAAA,UACR,QAAU,EAAA,MAAM,WAAYA,CAAAA,KAAAA,CAAK,OAAO;AAAA;AAC1C,OACF;AAAA,KACD,CAAA;AAAA;AAEL","file":"index.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport type { Provider } from \"@pulumi/kubernetes\"\nimport type { Namespace } from \"./namespace\"\nimport { DnsRecordSet, filterEndpoints, l3EndpointToString } from \"@highstate/common\"\nimport { gateway } from \"@highstate/gateway-api\"\nimport {\n normalize,\n Output,\n output,\n toPromise,\n type Input,\n type InputArray,\n} from \"@highstate/pulumi\"\nimport { NetworkPolicy } from \"./network-policy\"\nimport { getProvider, mapNamespaceLikeToNamespaceName } from \"./shared\"\nimport { isFromCluster } from \"./service\"\n\nexport type UseAccessPointResult = {\n /**\n * The gateway instance created according to the access point.\n */\n gateway: gateway.v1.Gateway\n\n /**\n * The DNS record sets associated created according to the access point and gateway.\n */\n dnsRecordSets: DnsRecordSet[]\n\n /**\n * The network policies associated with the access point.\n */\n networkPolicies: NetworkPolicy[]\n}\n\nexport type UseAccessPointArgs = Omit<CreateGatewayArgs, \"gateway\"> & {\n accessPoint: Input<k8s.AccessPoint>\n}\n\nexport function useAccessPoint(args: UseAccessPointArgs): Promise<UseAccessPointResult> {\n const result = output({ args, namespaceName: output(args.namespace).metadata.name }).apply(\n ({ args, namespaceName }) => {\n if (args.accessPoint.clusterId !== args.cluster.id) {\n throw new Error(\n \"The provided Kubernetes cluster is different from the one where the access point is deployed.\",\n )\n }\n\n const gateway = createGateway({\n ...args,\n annotations: {\n \"cert-manager.io/cluster-issuer\": args.accessPoint.tlsIssuer.clusterIssuerName,\n },\n gateway: args.accessPoint.gateway,\n })\n\n const dnsRecordSets = normalize(args.fqdn, args.fqdns).flatMap(fqdn => {\n return DnsRecordSet.create(fqdn, {\n providers: args.accessPoint.dnsProviders,\n values: filterEndpoints(\n args.accessPoint.gateway.endpoints.filter(endpoint => endpoint.type !== \"hostname\"),\n ),\n })\n })\n\n const networkPolicies: Output<NetworkPolicy>[] = [\n NetworkPolicy.create(\n `allow-ingress-from-${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}`,\n {\n namespace: args.namespace,\n cluster: args.cluster,\n\n description: `Allow ingress traffic from the gateway at \"${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}\".`,\n\n ingressRule: {\n fromEndpoints: args.accessPoint.gateway.endpoints,\n },\n },\n { provider: args.provider },\n ),\n ]\n\n if (isFromCluster(args.accessPoint.gateway.endpoints[0], args.cluster)) {\n networkPolicies.push(\n NetworkPolicy.create(\n `allow-egress-to-${namespaceName}`,\n {\n namespace: args.accessPoint.gateway.endpoints[0].metadata.k8sService.namespace,\n cluster: args.cluster,\n\n selector: args.accessPoint.gateway.endpoints[0].metadata.k8sService.selector,\n\n description: `Allow egress traffic to the namespace \"${namespaceName}\".`,\n\n egressRule: {\n toNamespace: args.namespace,\n },\n },\n { provider: args.provider },\n ),\n )\n }\n\n return output({\n gateway,\n dnsRecordSets,\n networkPolicies,\n })\n },\n )\n\n return toPromise(result)\n}\n\nexport type StandardAccessPointArgs = {\n appName: string\n fqdn: string\n}\n\nexport type StandardAccessPointInputs = {\n accessPoint: Output<k8s.AccessPoint>\n k8sCluster: Output<k8s.Cluster>\n}\n\nexport async function useStandardAcessPoint(\n namespace: Namespace,\n args: StandardAccessPointArgs,\n inputs: StandardAccessPointInputs,\n): Promise<UseAccessPointResult> {\n return await useAccessPoint({\n name: args.appName,\n namespace,\n\n fqdn: args.fqdn,\n\n accessPoint: inputs.accessPoint,\n cluster: inputs.k8sCluster,\n provider: await getProvider(inputs.k8sCluster),\n })\n}\n\nexport type CreateGatewayArgs = {\n name: string\n namespace: Input<Namespace>\n annotations?: Input<Record<string, string>>\n\n fqdn?: Input<string>\n fqdns?: InputArray<string>\n\n gateway: Input<k8s.Gateway>\n cluster: Input<k8s.Cluster>\n provider: Provider\n}\n\nexport function createGateway(args: CreateGatewayArgs): Output<gateway.v1.Gateway> {\n return output(args).apply(args => {\n if (args.cluster.id !== args.gateway.clusterId) {\n throw new Error(\n \"The provided Kubernetes cluster is different from the one where the gateway controller is deployed.\",\n )\n }\n\n return new gateway.v1.Gateway(\n args.name,\n {\n metadata: {\n name: args.name,\n namespace: mapNamespaceLikeToNamespaceName(args.namespace),\n annotations: args.annotations,\n },\n spec: {\n gatewayClassName: output(args.gateway).gatewayClassName,\n listeners: normalize(args.fqdn, args.fqdns).map(fqdn => {\n const normalizedName = fqdn.replace(/\\*/g, \"wildcard\")\n\n return {\n name: `https-${normalizedName}`,\n port: output(args.gateway).httpsListenerPort,\n protocol: \"HTTPS\",\n hostname: fqdn,\n tls: {\n mode: \"Terminate\",\n certificateRefs: [{ name: normalizedName }],\n },\n }\n }),\n },\n },\n { provider: args.provider, deletedWith: args.namespace },\n )\n })\n}\n","import type { Input, InputArray, InputMap } from \"@highstate/pulumi\"\nimport type { ContainerEnvironment, ContainerVolumeMount, WorkloadVolume } from \"../container\"\nimport type { InputL34Endpoint } from \"@highstate/common\"\n\nexport type ScriptDistribution = \"alpine\" | \"ubuntu\"\n\nexport type DistributionEnvironment = {\n /**\n * The image that should be used for the distribution.\n */\n image?: Input<string>\n\n /**\n * The utility packages that should be installed before running \"preInstallScripts\".\n *\n * Useful for installing tools like `curl` to install additional repositories.\n */\n preInstallPackages?: InputArray<string>\n\n /**\n * The pre-install scripts that should be run before installing packages.\n * Typically, these scripts are used to install additional repositories.\n */\n preInstallScripts?: InputMap<string>\n\n /**\n * The packages that are available in the environment.\n */\n packages?: InputArray<string>\n\n /**\n * The endpoint which the script is allowed to access scoped to the distribution.\n *\n * Typically, this is used to allow access to the package manager.\n *\n * Will be used to generate a network policy.\n */\n allowedEndpoints?: InputArray<InputL34Endpoint>\n}\n\nexport type ScriptProgram = () => unknown\n\nexport type ScriptEnvironment = {\n [distribution in ScriptDistribution]?: DistributionEnvironment\n} & {\n /**\n * The setup scripts that should be run before the script.\n */\n setupScripts?: InputMap<string>\n\n /**\n * The cleanup scripts that should be run after the script.\n */\n cleanupScripts?: InputMap<string>\n\n /**\n * The arbitrary files available in the environment including scripts.\n */\n files?: InputMap<string | ScriptProgram>\n\n /**\n * The volumes that should be defined in the environment.\n */\n volumes?: InputArray<WorkloadVolume>\n\n /**\n * The volume mounts that should be defined in the environment.\n */\n volumeMounts?: InputArray<ContainerVolumeMount>\n\n /**\n * The environment variables that should be defined in the environment.\n */\n environment?: Input<ContainerEnvironment>\n\n /**\n * The endpoint which the script is allowed to access.\n *\n * Will be used to generate a network policy.\n */\n allowedEndpoints?: InputArray<InputL34Endpoint>\n}\n\nexport type ResolvedScriptEnvironment = Omit<Required<ScriptEnvironment>, ScriptDistribution> & {\n [distribution in ScriptDistribution]: Required<DistributionEnvironment>\n}\n\nconst emptyDistributionEnvironment = {\n preInstallPackages: [],\n preInstallScripts: {},\n packages: [],\n}\n\nexport const emptyScriptEnvironment: ResolvedScriptEnvironment = {\n alpine: {\n ...emptyDistributionEnvironment,\n image: \"alpine@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c\",\n allowedEndpoints: [\n //\n \"tcp://dl-cdn.alpinelinux.org:443\",\n \"tcp://dl-cdn.alpinelinux.org:80\",\n ],\n },\n\n ubuntu: {\n ...emptyDistributionEnvironment,\n image: \"ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782\",\n allowedEndpoints: [\n //\n \"tcp://archive.ubuntu.com:80\",\n \"tcp://archive.ubuntu.com:443\",\n \"tcp://security.ubuntu.com:80\",\n \"tcp://security.ubuntu.com:443\",\n ],\n },\n\n setupScripts: {},\n cleanupScripts: {},\n files: {},\n volumes: [],\n volumeMounts: [],\n environment: {},\n allowedEndpoints: [],\n}\n\nexport const functionScriptImages: Record<ScriptDistribution, string> = {\n alpine: \"oven/bun@sha256:6b14922b0885c3890cdb0b396090af1da486ba941df5ee94391eef64f7113c61\",\n ubuntu: \"oven/bun@sha256:66b431441dc4c36d7e8164bfc61e6348ec1d7ce2862fc3a29f5dc9856e8205e4\",\n}\n","import type { ContainerEnvironment, ContainerVolumeMount, WorkloadVolume } from \"../container\"\nimport type { network } from \"@highstate/library\"\nimport { apply, normalize, type InputArray } from \"@highstate/pulumi\"\nimport {\n ComponentResource,\n output,\n type ComponentResourceOptions,\n type Input,\n type Output,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { mapValues, omitBy, pipe } from \"remeda\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport { readPackageJSON } from \"pkg-types\"\nimport { text, trimIndentation } from \"@highstate/contract\"\nimport { parseL34Endpoint } from \"@highstate/common\"\nimport { serializeFunction } from \"@pulumi/pulumi/runtime/index.js\"\nimport { type CommonArgs } from \"../shared\"\nimport { ConfigMap } from \"../config-map\"\nimport {\n emptyScriptEnvironment,\n functionScriptImages,\n type ResolvedScriptEnvironment,\n type ScriptDistribution,\n type ScriptEnvironment,\n} from \"./environment\"\n\nexport type ScriptBundleArgs = CommonArgs & {\n /**\n * The environment to bundle the scripts from.\n */\n environment?: Input<ScriptEnvironment>\n\n /**\n * The environments to bundle the scripts from.\n */\n environments?: InputArray<ScriptEnvironment>\n\n /**\n * The distribution to use for the scripts.\n */\n distribution: ScriptDistribution\n}\n\nexport class ScriptBundle extends ComponentResource {\n /**\n * The config map containing the scripts.\n */\n readonly configMap: Output<ConfigMap>\n\n /**\n * The volumes that should be included in the workload.\n */\n readonly volumes: Output<WorkloadVolume[]>\n\n /**\n * The volume mounts that should be defined in the container.\n */\n readonly volumeMounts: Output<ContainerVolumeMount[]>\n\n /**\n * The environment variables that should be defined in the container.\n */\n readonly environment: Output<ContainerEnvironment>\n\n /**\n * The image to use for the scripts.\n */\n readonly image: Output<string>\n\n /**\n * The distribution to use for the scripts.\n */\n readonly distribution: ScriptDistribution\n\n /**\n * The list of endpoints that the script is allowed to access.\n */\n readonly allowedEndpoints: Output<network.L34Endpoint[]>\n\n constructor(name: string, args: ScriptBundleArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:ScriptBundle\", name, args, opts)\n\n const scriptEnvironment = pipe(\n output(args),\n apply(args => normalize(args.environment, args.environments)),\n apply(args => deepmerge(emptyScriptEnvironment, ...args)),\n ) as Output<Unwrap<ResolvedScriptEnvironment>>\n\n const hasFunctionScripts = scriptEnvironment.apply(scriptEnvironment => {\n return Object.values(scriptEnvironment.files).some(file => typeof file === \"function\")\n })\n\n this.distribution = args.distribution\n this.environment = scriptEnvironment.environment\n\n this.image = hasFunctionScripts.apply(hasFunctionScripts =>\n output(\n hasFunctionScripts\n ? functionScriptImages[args.distribution]\n : scriptEnvironment[args.distribution].image,\n ),\n )\n\n this.allowedEndpoints = output({ scriptEnvironment, hasFunctionScripts }).apply(\n ({ scriptEnvironment, hasFunctionScripts }) => {\n const allowedEndpoints = [\n ...scriptEnvironment.allowedEndpoints,\n ...scriptEnvironment[args.distribution].allowedEndpoints,\n ]\n\n if (hasFunctionScripts) {\n allowedEndpoints.push(\"tcp://registry.npmjs.org:443\")\n }\n\n return allowedEndpoints.map(parseL34Endpoint)\n },\n )\n\n this.configMap = output({ scriptEnvironment, args }).apply(({ scriptEnvironment, args }) => {\n return ConfigMap.create(\n name,\n {\n cluster: args.cluster,\n namespace: args.namespace,\n\n data: createScriptData(this.distribution, scriptEnvironment),\n },\n { ...opts, parent: this },\n )\n })\n\n this.volumes = output({ hasFunctionScripts, volumes: scriptEnvironment.volumes }).apply(\n ({ hasFunctionScripts, volumes }) => {\n return [\n ...volumes,\n {\n name: this.configMap.metadata.name,\n\n configMap: {\n name: this.configMap.metadata.name,\n defaultMode: 0o550, // read and execute permissions\n },\n },\n ...(hasFunctionScripts ? [{ name: \"node-modules\", emptyDir: {} }] : []),\n ]\n },\n )\n\n this.volumeMounts = output({\n hasFunctionScripts,\n volumeMounts: scriptEnvironment.volumeMounts,\n }).apply(({ hasFunctionScripts, volumeMounts }) => {\n return [\n ...volumeMounts,\n {\n volume: this.configMap,\n mountPath: \"/scripts\",\n },\n ...(hasFunctionScripts\n ? [{ name: \"node-modules\", mountPath: \"/scripts/node_modules\" }]\n : []),\n ]\n })\n\n this.registerOutputs({\n configMap: this.configMap,\n volumes: this.volumes,\n volumeMounts: this.volumeMounts,\n environment: this.environment,\n distribution: this.distribution,\n allowedEndpoints: this.allowedEndpoints,\n image: this.image,\n })\n }\n}\n\nfunction stripWorkspacePrefix(value: string): string {\n if (value.startsWith(\"workspace:\")) {\n return value.replace(\"workspace:\", \"\")\n }\n\n return value\n}\n\nasync function createScriptData(\n distribution: ScriptDistribution,\n environment: Unwrap<ResolvedScriptEnvironment>,\n): Promise<Record<string, string>> {\n const scriptData: Record<string, string> = {}\n const actions: string[] = []\n\n const distributionEnvironment = environment[distribution]\n const setupScripts = { ...environment.setupScripts }\n\n let hasFunctionScripts = false\n\n for (const key in environment.files) {\n if (typeof environment.files[key] === \"function\") {\n const serialized = await serializeFunction(environment.files[key])\n\n scriptData[key] = text`\n #!/usr/local/bin/bun\n \n ${serialized.text}\n\n exports.${serialized.exportName}()\n `\n\n hasFunctionScripts = true\n } else {\n scriptData[key] = environment.files[key]\n }\n }\n\n if (hasFunctionScripts) {\n const packageJson = await readPackageJSON()\n\n packageJson.dependencies = omitBy(\n mapValues(packageJson.dependencies ?? {}, stripWorkspacePrefix),\n (_, key) => key.startsWith(\"@highstate/\"),\n )\n\n packageJson.devDependencies = omitBy(\n mapValues(packageJson.devDependencies ?? {}, stripWorkspacePrefix),\n (_, key) => key.startsWith(\"@highstate/\"),\n )\n\n scriptData[\"package.json\"] = JSON.stringify(packageJson, null, 2)\n\n setupScripts[\"resolve-dependencies.sh\"] = text`\n #!/usr/local/bin/bun\n set -e\n\n cd /scripts\n bun install --production\n `\n }\n\n if (distributionEnvironment.preInstallPackages.length > 0) {\n scriptData[\"pre-install-packages.sh\"] = getInstallPackagesScript(\n distribution,\n distributionEnvironment.preInstallPackages,\n )\n\n actions.push(`\n echo \"+ Installing pre-install packages...\"\n /scripts/pre-install-packages.sh\n echo \"+ Pre-install packages installed successfully\"\n `)\n }\n\n if (Object.keys(distributionEnvironment.preInstallScripts).length > 0) {\n for (const key in distributionEnvironment.preInstallScripts) {\n scriptData[`pre-install-${key}`] = distributionEnvironment.preInstallScripts[key]\n\n actions.push(`\n echo \"+ Running pre-install script '${key}'...\"\n /scripts/pre-install-${key}\n echo \"+ Pre-install script '${key}'... Done\"\n `)\n }\n }\n\n if (distributionEnvironment.packages.length > 0) {\n scriptData[\"install-packages.sh\"] = getInstallPackagesScript(\n distribution,\n distributionEnvironment.packages,\n )\n\n actions.push(`\n echo \"+ Installing packages...\"\n /scripts/install-packages.sh\n echo \"+ Packages installed successfully\"\n `)\n }\n\n if (Object.keys(setupScripts).length > 0) {\n for (const key in setupScripts) {\n scriptData[`setup-${key}`] = setupScripts[key]\n\n actions.push(`\n echo \"+ Running setup script '${key}'...\"\n /scripts/setup-${key}\n echo \"+ Setup script '${key}'... Done\"\n `)\n }\n }\n\n if (Object.keys(environment.cleanupScripts).length > 0) {\n const cleanupActions: string[] = []\n\n for (const key in environment.cleanupScripts) {\n scriptData[`cleanup-${key}`] = environment.cleanupScripts[key]\n\n cleanupActions.push(`\n echo \"+ Running cleanup script '${key}'...\"\n /scripts/cleanup-${key}\n echo \"+ Cleanup script '${key}'... Done\"\n `)\n }\n\n actions.push(`\n function cleanup() {\n ${cleanupActions.map(s => s.trim()).join(\"\\n\\n\")}\n }\n\n trap cleanup EXIT\n trap cleanup SIGTERM\n `)\n }\n\n scriptData[\"entrypoint.sh\"] = trimIndentation(`\n #!/bin/sh\n set -e\n\n if [ -z \"$1\" ]; then\n echo \"Usage: entrypoint.sh <main script> [args...]\"\n exit 1\n fi\n\n ${actions.map(s => s.trim()).join(\"\\n\\n\")}\n\n echo \"+ Running main script...\"\n $@\n echo \"+ Main script completed\"\n `)\n\n return scriptData\n}\n\nfunction getInstallPackagesScript(distribution: ScriptDistribution, packages: string[]): string {\n if (distribution === \"alpine\") {\n return text`\n #!/bin/sh\n set -e\n\n apk add --no-cache ${packages.join(\" \")}\n `\n } else {\n return text`\n #!/bin/sh\n set -e\n\n apt-get update\n apt-get install -y ${packages.join(\" \")}\n `\n }\n}\n","import type { Container } from \"../container\"\nimport type { ScriptBundle } from \"./bundle\"\nimport { merge } from \"remeda\"\nimport { Output, output, type Input } from \"@pulumi/pulumi\"\n\nexport type ScriptContainer = Container & {\n /**\n * The script bundle to use.\n */\n bundle: Input<ScriptBundle>\n\n /**\n * The name of the main script to run.\n * The script must be available in the bundle.\n */\n main: Input<string>\n}\n\n/**\n * Creates a spec for a container that runs a script.\n * This spec can be used to create a complete workload or an init container.\n *\n * @param options The options to create the container spec.\n * @returns The container spec.\n */\nexport function createScriptContainer(options: ScriptContainer): Output<Container> {\n const bundle = output(options.bundle)\n\n return output({\n options,\n image: bundle.image,\n volumeMounts: bundle.volumeMounts,\n volumes: bundle.volumes,\n environment: bundle.environment,\n allowedEndpoints: bundle.allowedEndpoints,\n }).apply(({ options, image, volumeMounts, volumes, environment, allowedEndpoints }) => {\n return {\n image,\n command: [\"/scripts/entrypoint.sh\", `/scripts/${options.main}`],\n\n ...options,\n\n volumeMounts: [...volumeMounts, ...(options.volumeMounts ?? [])],\n volumes: [...volumes, ...(options.volumes ?? [])],\n environment: merge(environment, options.environment),\n allowedEndpoints: [...allowedEndpoints, ...(options.allowedEndpoints ?? [])],\n } as Container\n })\n}\n","import { batch, type types } from \"@pulumi/kubernetes\"\nimport { ComponentResource, Output, output, type ComponentResourceOptions } from \"@highstate/pulumi\"\nimport { mergeDeep, omit } from \"remeda\"\nimport { commonExtraArgs, getProvider, mapMetadata } from \"./shared\"\nimport { getWorkloadComponents, type WorkloadArgs } from \"./workload\"\n\nexport type JobArgs = WorkloadArgs &\n Omit<Partial<types.input.batch.v1.JobSpec>, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n\nconst jobExtraArgs = [...commonExtraArgs, \"container\", \"containers\"] as const\n\nexport class Job extends ComponentResource {\n /**\n * The underlying Kubernetes job.\n */\n public readonly job: Output<batch.v1.Job>\n\n constructor(name: string, args: JobArgs, opts: ComponentResourceOptions) {\n super(\"highstate:k8s:Job\", name, args, opts)\n\n const { podTemplate } = getWorkloadComponents(name, args, () => this, opts)\n\n this.job = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {\n return new batch.v1.Job(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: mergeDeep(\n {\n template: mergeDeep(\n {\n spec: {\n restartPolicy: \"Never\",\n },\n },\n podTemplate,\n ),\n } satisfies types.input.batch.v1.JobSpec,\n omit(args, jobExtraArgs) as types.input.batch.v1.JobSpec,\n ),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n }\n}\n","import type { RequiredKeys } from \"@highstate/contract\"\nimport { batch, type types } from \"@pulumi/kubernetes\"\nimport { ComponentResource, Output, output, type ComponentResourceOptions } from \"@highstate/pulumi\"\nimport { mergeDeep, omit } from \"remeda\"\nimport { commonExtraArgs, getProvider, mapMetadata } from \"./shared\"\nimport { getWorkloadComponents, type WorkloadArgs } from \"./workload\"\n\nexport type CronJobArgs = WorkloadArgs &\n Omit<RequiredKeys<Partial<types.input.batch.v1.CronJobSpec>, \"schedule\">, \"jobTemplate\"> & {\n jobTemplate?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Omit<types.input.batch.v1.JobSpec, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n }\n }\n\nconst cronJobExtraArgs = [...commonExtraArgs, \"container\", \"containers\"] as const\n\nexport class CronJob extends ComponentResource {\n /**\n * The underlying Kubernetes job.\n */\n public readonly cronJob: Output<batch.v1.CronJob>\n\n constructor(name: string, args: CronJobArgs, opts: ComponentResourceOptions) {\n super(\"highstate:k8s:CronJob\", name, args, opts)\n\n const { podTemplate } = getWorkloadComponents(name, args, () => this, opts)\n\n this.cronJob = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {\n return new batch.v1.CronJob(\n name,\n {\n metadata: mapMetadata(args, name),\n\n spec: mergeDeep(\n {\n jobTemplate: {\n spec: {\n template: mergeDeep(\n {\n spec: {\n restartPolicy: \"Never\",\n },\n },\n podTemplate,\n ),\n },\n },\n\n schedule: args.schedule,\n } satisfies types.input.batch.v1.CronJobSpec,\n omit(args, cronJobExtraArgs) as types.input.batch.v1.CronJobSpec,\n ),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export { StatefulSet } from './chunk-TZHOUJRC.js';
2
+ import './chunk-BBIY3KUN.js';
3
+ import './chunk-5TLC5BXR.js';
4
+ import './chunk-PZ5AY32C.js';
5
+ //# sourceMappingURL=stateful-set-7CAQWTV2.js.map
6
+ //# sourceMappingURL=stateful-set-7CAQWTV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"stateful-set-7CAQWTV2.js"}
@@ -1,8 +1,7 @@
1
- import "../../chunk-PZ5AY32C.js";
1
+ import '../../chunk-PZ5AY32C.js';
2
+ import { k8s } from '@highstate/library';
3
+ import { forUnit, toPromise } from '@highstate/pulumi';
2
4
 
3
- // src/units/access-point/index.ts
4
- import { k8s } from "@highstate/library";
5
- import { forUnit, toPromise } from "@highstate/pulumi";
6
5
  var { inputs, outputs } = forUnit(k8s.accessPoint);
7
6
  var { gateway, tlsIssuer } = await toPromise(inputs);
8
7
  if (gateway.clusterId !== tlsIssuer.clusterId) {
@@ -16,7 +15,7 @@ var access_point_default = outputs({
16
15
  tlsIssuer: inputs.tlsIssuer
17
16
  }
18
17
  });
19
- export {
20
- access_point_default as default
21
- };
18
+
19
+ export { access_point_default as default };
20
+ //# sourceMappingURL=index.js.map
22
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/units/access-point/index.ts"],"sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\n\nconst { inputs, outputs } = forUnit(k8s.accessPoint)\n\nconst { gateway, tlsIssuer } = await toPromise(inputs)\n\nif (gateway.clusterId !== tlsIssuer.clusterId) {\n throw new Error(\"Gateway and TLS issuer must be in the same cluster\")\n}\n\nexport default outputs({\n accessPoint: {\n clusterId: gateway.clusterId,\n dnsProviders: inputs.dnsProviders,\n gateway: inputs.gateway,\n tlsIssuer: inputs.tlsIssuer,\n },\n})\n"],"mappings":";;;AAAA,SAAS,WAAW;AACpB,SAAS,SAAS,iBAAiB;AAEnC,IAAM,EAAE,QAAQ,QAAQ,IAAI,QAAQ,IAAI,WAAW;AAEnD,IAAM,EAAE,SAAS,UAAU,IAAI,MAAM,UAAU,MAAM;AAErD,IAAI,QAAQ,cAAc,UAAU,WAAW;AAC7C,QAAM,IAAI,MAAM,oDAAoD;AACtE;AAEA,IAAO,uBAAQ,QAAQ;AAAA,EACrB,aAAa;AAAA,IACX,WAAW,QAAQ;AAAA,IACnB,cAAc,OAAO;AAAA,IACrB,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,EACpB;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/units/access-point/index.ts"],"names":[],"mappings":";;;;AAGA,IAAM,EAAE,MAAQ,EAAA,OAAA,EAAY,GAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AAEnD,IAAM,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,MAAM,UAAU,MAAM,CAAA;AAErD,IAAI,OAAA,CAAQ,SAAc,KAAA,SAAA,CAAU,SAAW,EAAA;AAC7C,EAAM,MAAA,IAAI,MAAM,oDAAoD,CAAA;AACtE;AAEA,IAAO,uBAAQ,OAAQ,CAAA;AAAA,EACrB,WAAa,EAAA;AAAA,IACX,WAAW,OAAQ,CAAA,SAAA;AAAA,IACnB,cAAc,MAAO,CAAA,YAAA;AAAA,IACrB,SAAS,MAAO,CAAA,OAAA;AAAA,IAChB,WAAW,MAAO,CAAA;AAAA;AAEtB,CAAC","file":"index.js","sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\n\nconst { inputs, outputs } = forUnit(k8s.accessPoint)\n\nconst { gateway, tlsIssuer } = await toPromise(inputs)\n\nif (gateway.clusterId !== tlsIssuer.clusterId) {\n throw new Error(\"Gateway and TLS issuer must be in the same cluster\")\n}\n\nexport default outputs({\n accessPoint: {\n clusterId: gateway.clusterId,\n dnsProviders: inputs.dnsProviders,\n gateway: inputs.gateway,\n tlsIssuer: inputs.tlsIssuer,\n },\n})\n"]}
@@ -1,17 +1,11 @@
1
- import {
2
- Chart
3
- } from "../../chunk-MKFBWTVZ.js";
4
- import "../../chunk-QMWFPJQB.js";
5
- import "../../chunk-YRC7EI6X.js";
6
- import "../../chunk-P2UABKGA.js";
7
- import {
8
- Namespace
9
- } from "../../chunk-YUMBUWA4.js";
10
- import "../../chunk-PZ5AY32C.js";
11
-
12
- // src/units/cert-manager/index.ts
13
- import { k8s } from "@highstate/library";
14
- import { forUnit } from "@highstate/pulumi";
1
+ import { Chart } from '../../chunk-OFFSHGC6.js';
2
+ import '../../chunk-TZHOUJRC.js';
3
+ import '../../chunk-YWRJ4EZM.js';
4
+ import '../../chunk-BBIY3KUN.js';
5
+ import { Namespace } from '../../chunk-5TLC5BXR.js';
6
+ import '../../chunk-PZ5AY32C.js';
7
+ import { k8s } from '@highstate/library';
8
+ import { forUnit } from '@highstate/pulumi';
15
9
 
16
10
  // assets/charts.json
17
11
  var charts_default = {
@@ -44,7 +38,7 @@ new Chart("cert-manager", {
44
38
  var cert_manager_default = outputs({
45
39
  k8sCluster: inputs.k8sCluster
46
40
  });
47
- export {
48
- cert_manager_default as default
49
- };
41
+
42
+ export { cert_manager_default as default };
43
+ //# sourceMappingURL=index.js.map
50
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/units/cert-manager/index.ts","../../../assets/charts.json"],"sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { Chart } from \"../../helm\"\nimport charts from \"../../../assets/charts.json\"\nimport { Namespace } from \"../../namespace\"\n\nconst { inputs, outputs } = forUnit(k8s.certManager)\n\nconst namespace = Namespace.create(\"cert-manager\", { cluster: inputs.k8sCluster })\n\nnew Chart(\"cert-manager\", {\n cluster: inputs.k8sCluster,\n namespace,\n\n chart: charts[\"cert-manager\"],\n\n values: {\n crds: {\n enabled: true,\n },\n\n config: {\n apiVersion: \"controller.config.cert-manager.io/v1alpha1\",\n kind: \"ControllerConfiguration\",\n enableGatewayAPI: true,\n },\n },\n})\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster,\n})\n","{\n \"cert-manager\": {\n \"repo\": \"https://charts.jetstack.io\",\n \"name\": \"cert-manager\",\n \"version\": \"v1.17.1\",\n \"sha256\": \"48707f6e8937290da96065dc7de8b4f5a95d9707798d4b5a0d560f78c12996f7\"\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,WAAW;AACpB,SAAS,eAAe;;;ACDxB;AAAA,EACE,gBAAgB;AAAA,IACd,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,QAAU;AAAA,EACZ;AACF;;;ADDA,IAAM,EAAE,QAAQ,QAAQ,IAAI,QAAQ,IAAI,WAAW;AAEnD,IAAM,YAAY,UAAU,OAAO,gBAAgB,EAAE,SAAS,OAAO,WAAW,CAAC;AAEjF,IAAI,MAAM,gBAAgB;AAAA,EACxB,SAAS,OAAO;AAAA,EAChB;AAAA,EAEA,OAAO,eAAO,cAAc;AAAA,EAE5B,QAAQ;AAAA,IACN,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,IAEA,QAAQ;AAAA,MACN,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,kBAAkB;AAAA,IACpB;AAAA,EACF;AACF,CAAC;AAED,IAAO,uBAAQ,QAAQ;AAAA,EACrB,YAAY,OAAO;AACrB,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../assets/charts.json","../../../src/units/cert-manager/index.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,IAAA,cAAA,GAAA;AAAA,EACE,cAAgB,EAAA;AAAA,IACd,IAAQ,EAAA,4BAAA;AAAA,IACR,IAAQ,EAAA,cAAA;AAAA,IACR,OAAW,EAAA,SAAA;AAAA,IACX,MAAU,EAAA;AAAA;AAEd,CAAA;;;ACDA,IAAM,EAAE,MAAQ,EAAA,OAAA,EAAY,GAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AAEnD,IAAM,SAAA,GAAY,UAAU,MAAO,CAAA,cAAA,EAAgB,EAAE,OAAS,EAAA,MAAA,CAAO,YAAY,CAAA;AAEjF,IAAI,MAAM,cAAgB,EAAA;AAAA,EACxB,SAAS,MAAO,CAAA,UAAA;AAAA,EAChB,SAAA;AAAA,EAEA,KAAA,EAAO,eAAO,cAAc,CAAA;AAAA,EAE5B,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA;AAAA,KACX;AAAA,IAEA,MAAQ,EAAA;AAAA,MACN,UAAY,EAAA,4CAAA;AAAA,MACZ,IAAM,EAAA,yBAAA;AAAA,MACN,gBAAkB,EAAA;AAAA;AACpB;AAEJ,CAAC,CAAA;AAED,IAAO,uBAAQ,OAAQ,CAAA;AAAA,EACrB,YAAY,MAAO,CAAA;AACrB,CAAC","file":"index.js","sourcesContent":["{\n \"cert-manager\": {\n \"repo\": \"https://charts.jetstack.io\",\n \"name\": \"cert-manager\",\n \"version\": \"v1.17.1\",\n \"sha256\": \"48707f6e8937290da96065dc7de8b4f5a95d9707798d4b5a0d560f78c12996f7\"\n }\n}\n","import { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { Chart } from \"../../helm\"\nimport charts from \"../../../assets/charts.json\"\nimport { Namespace } from \"../../namespace\"\n\nconst { inputs, outputs } = forUnit(k8s.certManager)\n\nconst namespace = Namespace.create(\"cert-manager\", { cluster: inputs.k8sCluster })\n\nnew Chart(\"cert-manager\", {\n cluster: inputs.k8sCluster,\n namespace,\n\n chart: charts[\"cert-manager\"],\n\n values: {\n crds: {\n enabled: true,\n },\n\n config: {\n apiVersion: \"controller.config.cert-manager.io/v1alpha1\",\n kind: \"ControllerConfiguration\",\n enableGatewayAPI: true,\n },\n },\n})\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster,\n})\n"]}
@@ -1,9 +1,8 @@
1
- import "../../chunk-PZ5AY32C.js";
1
+ import '../../chunk-PZ5AY32C.js';
2
+ import { updateEndpointsWithFqdn, l4EndpointToString, l3EndpointToString } from '@highstate/common';
3
+ import { k8s } from '@highstate/library';
4
+ import { forUnit } from '@highstate/pulumi';
2
5
 
3
- // src/units/cluster-dns/index.ts
4
- import { l3EndpointToString, l4EndpointToString, updateEndpointsWithFqdn } from "@highstate/common";
5
- import { k8s } from "@highstate/library";
6
- import { forUnit } from "@highstate/pulumi";
7
6
  var { args, inputs, outputs } = forUnit(k8s.clusterDns);
8
7
  var { endpoints } = await updateEndpointsWithFqdn(
9
8
  inputs.k8sCluster.endpoints,
@@ -27,12 +26,12 @@ var cluster_dns_default = outputs({
27
26
  })),
28
27
  endpoints,
29
28
  apiEndpoints,
30
- $status: {
29
+ $statusFields: {
31
30
  endpoints: endpoints.map(l3EndpointToString),
32
31
  apiEndpoints: apiEndpoints.map(l4EndpointToString)
33
32
  }
34
33
  });
35
- export {
36
- cluster_dns_default as default
37
- };
34
+
35
+ export { cluster_dns_default as default };
36
+ //# sourceMappingURL=index.js.map
38
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/units/cluster-dns/index.ts"],"sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpointsWithFqdn } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterDns)\n\nconst { endpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.endpoints,\n args.fqdn,\n args.endpointFilter,\n args.patchMode,\n inputs.dnsProviders,\n)\n\nconst { endpoints: apiEndpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.apiEndpoints,\n args.apiFqdn,\n args.apiEndpointFilter,\n args.apiPatchMode,\n inputs.dnsProviders,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $status: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"],"mappings":";;;AAAA,SAAS,oBAAoB,oBAAoB,+BAA+B;AAChF,SAAS,WAAW;AACpB,SAAS,eAAe;AAExB,IAAM,EAAE,MAAM,QAAQ,QAAQ,IAAI,QAAQ,IAAI,UAAU;AAExD,IAAM,EAAE,UAAU,IAAI,MAAM;AAAA,EAC1B,OAAO,WAAW;AAAA,EAClB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AACT;AAEA,IAAM,EAAE,WAAW,aAAa,IAAI,MAAM;AAAA,EACxC,OAAO,WAAW;AAAA,EAClB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AACT;AAEA,IAAO,sBAAQ,QAAQ;AAAA,EACrB,YAAY,OAAO,WAAW,MAAM,iBAAe;AAAA,IACjD,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE;AAAA,EAEF;AAAA,EACA;AAAA,EAEA,SAAS;AAAA,IACP,WAAW,UAAU,IAAI,kBAAkB;AAAA,IAC3C,cAAc,aAAa,IAAI,kBAAkB;AAAA,EACnD;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/units/cluster-dns/index.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AAExD,IAAM,EAAE,SAAU,EAAA,GAAI,MAAM,uBAAA;AAAA,EAC1B,OAAO,UAAW,CAAA,SAAA;AAAA,EAClB,IAAK,CAAA,IAAA;AAAA,EACL,IAAK,CAAA,cAAA;AAAA,EACL,IAAK,CAAA,SAAA;AAAA,EACL,MAAO,CAAA;AACT,CAAA;AAEA,IAAM,EAAE,SAAA,EAAW,YAAa,EAAA,GAAI,MAAM,uBAAA;AAAA,EACxC,OAAO,UAAW,CAAA,YAAA;AAAA,EAClB,IAAK,CAAA,OAAA;AAAA,EACL,IAAK,CAAA,iBAAA;AAAA,EACL,IAAK,CAAA,YAAA;AAAA,EACL,MAAO,CAAA;AACT,CAAA;AAEA,IAAO,sBAAQ,OAAQ,CAAA;AAAA,EACrB,UAAY,EAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,CAAe,UAAA,MAAA;AAAA,IACjD,GAAG,UAAA;AAAA,IACH,SAAA;AAAA,IACA;AAAA,GACA,CAAA,CAAA;AAAA,EAEF,SAAA;AAAA,EACA,YAAA;AAAA,EAEA,aAAe,EAAA;AAAA,IACb,SAAA,EAAW,SAAU,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAC3C,YAAA,EAAc,YAAa,CAAA,GAAA,CAAI,kBAAkB;AAAA;AAErD,CAAC","file":"index.js","sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpointsWithFqdn } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterDns)\n\nconst { endpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.endpoints,\n args.fqdn,\n args.endpointFilter,\n args.patchMode,\n inputs.dnsProviders,\n)\n\nconst { endpoints: apiEndpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.apiEndpoints,\n args.apiFqdn,\n args.apiEndpointFilter,\n args.apiPatchMode,\n inputs.dnsProviders,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"]}