k8ts 0.2.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/api-versions.js +0 -1
  2. package/dist/error.js +1 -2
  3. package/dist/external/index.js +10 -14
  4. package/dist/file/exports.d.ts.map +1 -1
  5. package/dist/file/exports.js +11 -22
  6. package/dist/file/factory.d.ts +10 -4
  7. package/dist/file/factory.d.ts.map +1 -1
  8. package/dist/file/factory.js +54 -35
  9. package/dist/file/file.js +0 -1
  10. package/dist/file/index.js +0 -1
  11. package/dist/file/origin.d.ts +3 -0
  12. package/dist/file/origin.d.ts.map +1 -1
  13. package/dist/file/origin.js +1 -2
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/k8ts-sys-kind.js +0 -1
  18. package/dist/kind-map.js +1 -2
  19. package/dist/meta/k8ts-section.js +0 -1
  20. package/dist/node/abs-resource.js +12 -14
  21. package/dist/node/dependencies.d.ts +1 -0
  22. package/dist/node/dependencies.js +1 -1
  23. package/dist/node/index.d.ts +3 -0
  24. package/dist/node/index.d.ts.map +1 -1
  25. package/dist/node/index.js +7 -2
  26. package/dist/node/manifest-resource.d.ts +1 -1
  27. package/dist/node/manifest-resource.d.ts.map +1 -1
  28. package/dist/node/manifest-resource.js +2 -2
  29. package/dist/node/sub-resource.js +10 -14
  30. package/dist/node/top-resource.js +0 -1
  31. package/dist/paths.js +0 -1
  32. package/dist/resources/configmap/configmap.d.ts +4 -1
  33. package/dist/resources/configmap/configmap.d.ts.map +1 -1
  34. package/dist/resources/configmap/configmap.js +16 -19
  35. package/dist/resources/configmap/index.js +0 -1
  36. package/dist/resources/deployment/deployment.d.ts +2 -1
  37. package/dist/resources/deployment/deployment.d.ts.map +1 -1
  38. package/dist/resources/deployment/deployment.js +13 -17
  39. package/dist/resources/deployment/index.js +0 -1
  40. package/dist/resources/http-route/http-route.d.ts +1 -1
  41. package/dist/resources/http-route/http-route.d.ts.map +1 -1
  42. package/dist/resources/http-route/http-route.js +11 -19
  43. package/dist/resources/http-route/index.js +0 -1
  44. package/dist/resources/index.js +0 -1
  45. package/dist/resources/namespace/index.js +0 -1
  46. package/dist/resources/namespace/namespace.js +10 -15
  47. package/dist/resources/persistent/access-mode.js +0 -1
  48. package/dist/resources/persistent/block-mode.js +0 -1
  49. package/dist/resources/persistent/claim/index.js +0 -1
  50. package/dist/resources/persistent/claim/pvc.d.ts +5 -5
  51. package/dist/resources/persistent/claim/pvc.d.ts.map +1 -1
  52. package/dist/resources/persistent/claim/pvc.js +16 -24
  53. package/dist/resources/persistent/index.d.ts +4 -10
  54. package/dist/resources/persistent/index.d.ts.map +1 -1
  55. package/dist/resources/persistent/index.js +18 -11
  56. package/dist/resources/persistent/volume/backend.js +0 -1
  57. package/dist/resources/persistent/volume/index.js +0 -1
  58. package/dist/resources/persistent/volume/parse-backend.js +0 -1
  59. package/dist/resources/persistent/volume/pv.d.ts +3 -3
  60. package/dist/resources/persistent/volume/pv.d.ts.map +1 -1
  61. package/dist/resources/persistent/volume/pv.js +16 -21
  62. package/dist/resources/pod/container/container.d.ts +2 -2
  63. package/dist/resources/pod/container/container.d.ts.map +1 -1
  64. package/dist/resources/pod/container/container.js +13 -16
  65. package/dist/resources/pod/container/index.js +0 -1
  66. package/dist/resources/pod/container/mounts.js +3 -1
  67. package/dist/resources/pod/index.js +0 -1
  68. package/dist/resources/pod/pod-template.d.ts +5 -2
  69. package/dist/resources/pod/pod-template.d.ts.map +1 -1
  70. package/dist/resources/pod/pod-template.js +14 -21
  71. package/dist/resources/pod/volume/devices.d.ts +3 -3
  72. package/dist/resources/pod/volume/devices.d.ts.map +1 -1
  73. package/dist/resources/pod/volume/devices.js +11 -15
  74. package/dist/resources/pod/volume/index.js +0 -1
  75. package/dist/resources/pod/volume/volumes.d.ts +2 -3
  76. package/dist/resources/pod/volume/volumes.d.ts.map +1 -1
  77. package/dist/resources/pod/volume/volumes.js +8 -17
  78. package/dist/resources/secret/index.js +0 -1
  79. package/dist/resources/secret/secret.js +9 -17
  80. package/dist/resources/service/frontend.js +0 -1
  81. package/dist/resources/service/index.js +0 -1
  82. package/dist/resources/service/service-port.js +2 -1
  83. package/dist/resources/service/service.d.ts +2 -2
  84. package/dist/resources/service/service.d.ts.map +1 -1
  85. package/dist/resources/service/service.js +19 -20
  86. package/dist/resources/utils/adapters.js +0 -1
  87. package/dist/runner/exporter/assembler.js +1 -1
  88. package/dist/runner/exporter/index.js +0 -1
  89. package/dist/runner/exporter/loader.d.ts.map +1 -1
  90. package/dist/runner/exporter/loader.js +33 -10
  91. package/dist/runner/exporter/manifester.d.ts.map +1 -1
  92. package/dist/runner/exporter/manifester.js +4 -7
  93. package/dist/runner/exporter/meta.js +0 -1
  94. package/dist/runner/exporter/progress-shower.js +1 -1
  95. package/dist/runner/exporter/saver.js +2 -2
  96. package/dist/runner/exporter/serializer.js +1 -1
  97. package/dist/runner/exporter/stage.js +11 -14
  98. package/dist/runner/exporter/trace-embedder.d.ts +1 -0
  99. package/dist/runner/exporter/trace-embedder.js +1 -1
  100. package/dist/runner/index.js +0 -1
  101. package/dist/runner/proverbs.d.ts +1 -0
  102. package/dist/runner/proverbs.js +1 -1
  103. package/dist/runner/runner.d.ts.map +1 -1
  104. package/dist/runner/runner.js +6 -3
  105. package/dist/runner/silly/proverbs.js +1 -1
  106. package/dist/runner/summarizer.d.ts +2 -2
  107. package/dist/runner/summarizer.d.ts.map +1 -1
  108. package/dist/runner/summarizer.js +3 -3
  109. package/dist/src.tsbuildinfo +1 -1
  110. package/dist/version.js +0 -1
  111. package/dist/world/index.js +0 -1
  112. package/dist/world/world.d.ts +11 -4
  113. package/dist/world/world.d.ts.map +1 -1
  114. package/dist/world/world.js +33 -6
  115. package/package.json +5 -5
  116. package/src/file/exports.ts +7 -5
  117. package/src/file/factory.ts +46 -18
  118. package/src/file/origin.ts +3 -0
  119. package/src/index.ts +1 -0
  120. package/src/node/index.ts +3 -0
  121. package/src/node/manifest-resource.ts +1 -1
  122. package/src/resources/configmap/configmap.ts +19 -4
  123. package/src/resources/deployment/deployment.ts +4 -3
  124. package/src/resources/http-route/http-route.ts +3 -3
  125. package/src/resources/persistent/claim/pvc.ts +5 -5
  126. package/src/resources/persistent/index.ts +4 -10
  127. package/src/resources/persistent/volume/pv.ts +3 -3
  128. package/src/resources/pod/container/container.ts +5 -4
  129. package/src/resources/pod/pod-template.ts +8 -6
  130. package/src/resources/pod/volume/devices.ts +3 -3
  131. package/src/resources/pod/volume/volumes.ts +2 -3
  132. package/src/resources/service/service.ts +11 -5
  133. package/src/runner/exporter/loader.ts +37 -10
  134. package/src/runner/exporter/manifester.ts +4 -6
  135. package/src/runner/runner.ts +5 -2
  136. package/src/runner/summarizer.ts +3 -3
  137. package/src/tsconfig.json +6 -0
  138. package/src/world/world.ts +42 -13
  139. package/dist/api-versions.js.map +0 -1
  140. package/dist/error.js.map +0 -1
  141. package/dist/external/index.js.map +0 -1
  142. package/dist/file/exports.js.map +0 -1
  143. package/dist/file/factory.js.map +0 -1
  144. package/dist/file/file.js.map +0 -1
  145. package/dist/file/index.js.map +0 -1
  146. package/dist/file/origin.js.map +0 -1
  147. package/dist/index.js.map +0 -1
  148. package/dist/k8ts-sys-kind.js.map +0 -1
  149. package/dist/kind-map.js.map +0 -1
  150. package/dist/meta/k8ts-section.js.map +0 -1
  151. package/dist/node/abs-resource.js.map +0 -1
  152. package/dist/node/dependencies.js.map +0 -1
  153. package/dist/node/index.js.map +0 -1
  154. package/dist/node/manifest-resource.js.map +0 -1
  155. package/dist/node/sub-resource.js.map +0 -1
  156. package/dist/node/top-resource.js.map +0 -1
  157. package/dist/paths.js.map +0 -1
  158. package/dist/resources/configmap/configmap.js.map +0 -1
  159. package/dist/resources/configmap/index.js.map +0 -1
  160. package/dist/resources/deployment/deployment.js.map +0 -1
  161. package/dist/resources/deployment/index.js.map +0 -1
  162. package/dist/resources/http-route/http-route.js.map +0 -1
  163. package/dist/resources/http-route/index.js.map +0 -1
  164. package/dist/resources/index.js.map +0 -1
  165. package/dist/resources/namespace/index.js.map +0 -1
  166. package/dist/resources/namespace/namespace.js.map +0 -1
  167. package/dist/resources/persistent/access-mode.js.map +0 -1
  168. package/dist/resources/persistent/block-mode.js.map +0 -1
  169. package/dist/resources/persistent/claim/index.js.map +0 -1
  170. package/dist/resources/persistent/claim/pvc.js.map +0 -1
  171. package/dist/resources/persistent/index.js.map +0 -1
  172. package/dist/resources/persistent/volume/backend.js.map +0 -1
  173. package/dist/resources/persistent/volume/index.js.map +0 -1
  174. package/dist/resources/persistent/volume/parse-backend.js.map +0 -1
  175. package/dist/resources/persistent/volume/pv.js.map +0 -1
  176. package/dist/resources/pod/container/container.js.map +0 -1
  177. package/dist/resources/pod/container/index.js.map +0 -1
  178. package/dist/resources/pod/container/mounts.js.map +0 -1
  179. package/dist/resources/pod/index.js.map +0 -1
  180. package/dist/resources/pod/pod-template.js.map +0 -1
  181. package/dist/resources/pod/volume/devices.js.map +0 -1
  182. package/dist/resources/pod/volume/index.js.map +0 -1
  183. package/dist/resources/pod/volume/volumes.js.map +0 -1
  184. package/dist/resources/secret/index.js.map +0 -1
  185. package/dist/resources/secret/secret.js.map +0 -1
  186. package/dist/resources/service/frontend.js.map +0 -1
  187. package/dist/resources/service/index.js.map +0 -1
  188. package/dist/resources/service/service-port.js.map +0 -1
  189. package/dist/resources/service/service.js.map +0 -1
  190. package/dist/resources/utils/adapters.js.map +0 -1
  191. package/dist/runner/exporter/assembler.js.map +0 -1
  192. package/dist/runner/exporter/index.js.map +0 -1
  193. package/dist/runner/exporter/loader.js.map +0 -1
  194. package/dist/runner/exporter/manifester.js.map +0 -1
  195. package/dist/runner/exporter/meta.js.map +0 -1
  196. package/dist/runner/exporter/progress-shower.js.map +0 -1
  197. package/dist/runner/exporter/saver.js.map +0 -1
  198. package/dist/runner/exporter/serializer.js.map +0 -1
  199. package/dist/runner/exporter/stage.js.map +0 -1
  200. package/dist/runner/exporter/trace-embedder.js.map +0 -1
  201. package/dist/runner/index.js.map +0 -1
  202. package/dist/runner/proverbs.js.map +0 -1
  203. package/dist/runner/runner.js.map +0 -1
  204. package/dist/runner/silly/proverbs.js.map +0 -1
  205. package/dist/runner/summarizer.js.map +0 -1
  206. package/dist/version.js.map +0 -1
  207. package/dist/world/index.js.map +0 -1
  208. package/dist/world/world.js.map +0 -1
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExternalOriginEntity = exports.World = void 0;
4
4
  const instruments_1 = require("@k8ts/instruments");
5
+ const metadata_1 = require("@k8ts/metadata");
6
+ const lodash_1 = require("lodash");
5
7
  const external_1 = require("../external");
6
8
  const file_1 = require("../file");
7
9
  const k8ts_sys_kind_1 = require("../k8ts-sys-kind");
@@ -10,15 +12,41 @@ var World;
10
12
  (function (World) {
11
13
  const ident = k8ts_sys_kind_1.k8tsBuildKind.kind("World");
12
14
  class Builder extends instruments_1.BaseOriginEntity {
15
+ kind = ident;
16
+ _ExternalOrigin;
13
17
  constructor(props) {
14
18
  super("World", props, kind_map_1.K8tsRootOrigin.node);
15
- this.kind = ident;
16
- this.ExternalOrigin = new ExternalOriginEntity(this.node);
19
+ this._ExternalOrigin = new ExternalOriginEntity(this.node);
17
20
  }
18
21
  External(kind, name, namespace) {
19
- return new external_1.External(this.ExternalOrigin.node, kind, name, namespace);
22
+ return new external_1.External(this._ExternalOrigin.node, kind, name, namespace);
20
23
  }
21
- File(name, props) {
24
+ Scope(scope) {
25
+ const builder = this;
26
+ let meta = metadata_1.Meta.make();
27
+ return {
28
+ File(name, props) {
29
+ props ??= {};
30
+ const self = {
31
+ metadata(input) {
32
+ props = (0, lodash_1.assign)({}, props, {
33
+ meta: metadata_1.Meta.splat(props?.meta, input)
34
+ });
35
+ return self;
36
+ },
37
+ Resources(producer) {
38
+ return builder._File(name, {
39
+ ...props,
40
+ scope,
41
+ FILE: producer
42
+ });
43
+ }
44
+ };
45
+ return self;
46
+ }
47
+ };
48
+ }
49
+ _File(name, props) {
22
50
  return file_1.File.make(name, props, this.node);
23
51
  }
24
52
  }
@@ -30,12 +58,11 @@ var World;
30
58
  })(World || (exports.World = World = {}));
31
59
  const ident = k8ts_sys_kind_1.k8tsBuildKind.kind("External");
32
60
  class ExternalOriginEntity extends instruments_1.BaseOriginEntity {
61
+ kind = ident;
33
62
  constructor(parent) {
34
63
  super("EXTERNAL", {
35
64
  meta: {}
36
65
  }, parent);
37
- this.kind = ident;
38
66
  }
39
67
  }
40
68
  exports.ExternalOriginEntity = ExternalOriginEntity;
41
- //# sourceMappingURL=world.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k8ts",
3
- "version": "0.2.1",
3
+ "version": "0.4.1",
4
4
  "description": "Powerful framwork for building Kubernetes manifests in TypeScript.",
5
5
  "keywords": [
6
6
  "kubernetes",
@@ -60,8 +60,6 @@
60
60
  "test:coverage": "jest --coverage"
61
61
  },
62
62
  "dependencies": {
63
- "@k8ts/instruments": "^0.2.1",
64
- "@k8ts/metadata": "^0.2.1",
65
63
  "chalk": "4.1.2",
66
64
  "constructs": "^10.4.2",
67
65
  "dayjs": "^1.11.13",
@@ -77,6 +75,8 @@
77
75
  },
78
76
  "devDependencies": {
79
77
  "@datreeio/datree-cdk8s": "^1.3.5",
78
+ "@k8ts/instruments": "^0.4.1",
79
+ "@k8ts/metadata": "^0.4.1",
80
80
  "@swc/core": "^1.11.11",
81
81
  "@swc/jest": "^0.2.37",
82
82
  "@types/chalk": "^2.2.4",
@@ -97,8 +97,8 @@
97
97
  "yamprint": "^0.8.4"
98
98
  },
99
99
  "peerDependencies": {
100
- "@k8ts/instruments": "^0.1.0",
101
- "@k8ts/metadata": "^0.1.0"
100
+ "@k8ts/instruments": "^0.4.1",
101
+ "@k8ts/metadata": "^0.4.1"
102
102
  },
103
103
  "packageManager": "yarn@4.1.1",
104
104
  "engines": {
@@ -30,11 +30,13 @@ export namespace FileExports {
30
30
  return new Factory.Namespaced(props.origin.node)
31
31
  }
32
32
  })
33
- this.#produced = seq(() => producer(props.origin)).each(x => {
34
- x.meta.add(k8ts_namespace, {
35
- "#is-exported": "true"
33
+ this.#produced = seq(() => producer(props.origin))
34
+ .each(x => {
35
+ x.meta.add(k8ts_namespace, {
36
+ "#is-exported": "true"
37
+ })
36
38
  })
37
- })
39
+ .cache()
38
40
  }
39
41
 
40
42
  get __entity__() {
@@ -53,7 +55,7 @@ export namespace FileExports {
53
55
  export function make<Scope extends FileOrigin.Scope, Produced extends ManifestResource>(
54
56
  props: Props<Scope, Produced>
55
57
  ): Core & FutureExports<Produced> {
56
- const core = new Core(props)
58
+ const core = new Core(props as any)
57
59
  return FutureExports.make({
58
60
  actual: core,
59
61
  origin: props.origin.node,
@@ -2,11 +2,13 @@ import { Origin, auto_register, displayers, type LiveRefable } from "@k8ts/instr
2
2
  import chalk from "chalk"
3
3
  import {
4
4
  ConfigMap,
5
+ DataMode,
5
6
  Deployment,
6
7
  HttpRoute,
7
8
  Namespace,
8
- Persistent,
9
9
  PodTemplate,
10
+ Pv,
11
+ Pvc,
10
12
  Secret,
11
13
  Service
12
14
  } from "../resources"
@@ -31,15 +33,14 @@ export namespace Factory {
31
33
  }
32
34
  @auto_register
33
35
  export class Cluster extends Base {
34
- PersistentVolume<Name extends string, Mode extends Persistent.DataMode = "Filesystem">(
36
+ PersistentVolume<Name extends string, Mode extends DataMode = "Filesystem">(
35
37
  name: Name,
36
- props: Persistent.Volume.Props<Mode>
38
+ props: Pv.Props<Mode>
37
39
  ) {
38
- return new Persistent.Volume.Volume(
39
- this.origin,
40
- this._metaWithName(name),
41
- props
42
- ) as LiveRefable<Persistent.Volume<Mode>, Name>
40
+ return new Pv.Pv(this.origin, this._metaWithName(name), props) as LiveRefable<
41
+ Pv.Pv<Mode>,
42
+ Name
43
+ >
43
44
  }
44
45
  Namespace<Name extends string>(name: Name, props?: Namespace.Props) {
45
46
  return new Namespace.Namespace(
@@ -52,15 +53,11 @@ export namespace Factory {
52
53
 
53
54
  @auto_register
54
55
  export class Namespaced extends Base {
55
- Claim<Mode extends Persistent.DataMode, Name extends string>(
56
- name: Name,
57
- mode: Persistent.Claim.Props<Mode>
58
- ) {
59
- return new Persistent.Claim.Claim(
60
- this.origin,
61
- this._metaWithName(name),
62
- mode
63
- ) as LiveRefable<Persistent.Claim<Mode>, Name>
56
+ Claim<Mode extends DataMode, Name extends string>(name: Name, mode: Pvc.Props<Mode>) {
57
+ return new Pvc.Pvc(this.origin, this._metaWithName(name), mode) as LiveRefable<
58
+ Pvc.Pvc<Mode>,
59
+ Name
60
+ >
64
61
  }
65
62
  ConfigMap<Name extends string>(name: Name, props: ConfigMap.Props) {
66
63
  return new ConfigMap.ConfigMap(
@@ -69,6 +66,16 @@ export namespace Factory {
69
66
  props
70
67
  ) as LiveRefable<ConfigMap, Name>
71
68
  }
69
+ HttpRoute<Name extends string, Ports extends string>(
70
+ name: Name,
71
+ props: HttpRoute.Props<Ports>
72
+ ) {
73
+ return new HttpRoute.HttpRoute(
74
+ this.origin,
75
+ this._metaWithName(name),
76
+ props
77
+ ) as LiveRefable<HttpRoute<Ports>, Name>
78
+ }
72
79
  Secret<Name extends string>(name: Name, props: Secret.Props) {
73
80
  return new Secret.Secret(this.origin, this._metaWithName(name), props) as LiveRefable<
74
81
  Secret,
@@ -85,7 +92,7 @@ export namespace Factory {
85
92
  >
86
93
  }
87
94
 
88
- Deployment<Name extends string, Ports extends string>(
95
+ private PrvDeployment<Name extends string, Ports extends string = never>(
89
96
  name: Name,
90
97
  props: Deployment.Props<Ports>
91
98
  ) {
@@ -96,6 +103,27 @@ export namespace Factory {
96
103
  ) as LiveRefable<Deployment<Ports>, Name>
97
104
  }
98
105
 
106
+ Deployment<Name extends string>(name: Name, props: Deployment.SmallerProps) {
107
+ const builder = this
108
+ return {
109
+ Template(templateProps?: PodTemplate.PodProps) {
110
+ return {
111
+ POD<Ports extends string>(
112
+ producer: PodTemplate.PodContainerProducer<Ports>
113
+ ) {
114
+ return builder.PrvDeployment(name, {
115
+ ...props,
116
+ template: {
117
+ ...templateProps,
118
+ POD: producer
119
+ }
120
+ })
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+
99
127
  DomainRoute<Name extends string, Ports extends string>(
100
128
  name: Name,
101
129
  props: HttpRoute.Props<Ports>
@@ -7,6 +7,9 @@ export type FileOrigin<FScope extends FileOrigin.Scope = FileOrigin.Scope> =
7
7
  export namespace FileOrigin {
8
8
  export type Scope = Namespace | "cluster"
9
9
 
10
+ export interface SmallerProps extends OriginEntityProps {
11
+ meta?: Meta.Input
12
+ }
10
13
  export interface Props<FScope extends Scope = Scope> extends OriginEntityProps {
11
14
  meta?: Meta.Input
12
15
  scope: FScope
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ export { CDK } from "./_imports"
2
2
  export * from "./external"
3
3
  export * from "./file"
4
4
  export * as ScopedFactory from "./file/factory"
5
+ export * from "./node"
5
6
  export * from "./resources"
6
7
  export * from "./runner"
7
8
  export * from "./runner/exporter"
package/src/node/index.ts CHANGED
@@ -1 +1,4 @@
1
+ export { AbsResource } from "./abs-resource"
1
2
  export { ManifestResource } from "./manifest-resource"
3
+ export { SubResource } from "./sub-resource"
4
+ export { TopResource } from "./top-resource"
@@ -3,7 +3,7 @@ import type { Meta, MutableMeta } from "@k8ts/metadata"
3
3
  import { TopResource } from "./top-resource"
4
4
 
5
5
  export abstract class ManifestResource<Props extends object = object> extends TopResource<Props> {
6
- protected manifest() {
6
+ protected async manifest() {
7
7
  return Builder.get(this).manifest()
8
8
  }
9
9
  abstract override readonly kind: Kind.Kind
@@ -1,21 +1,36 @@
1
- import { manifest, relations } from "@k8ts/instruments"
1
+ import {
2
+ DataSourceRecord_Binary,
3
+ DataSourceRecord_Text,
4
+ LocalFileSource,
5
+ manifest,
6
+ relations,
7
+ resolveBinary,
8
+ resolveText
9
+ } from "@k8ts/instruments"
2
10
  import type { CDK } from "../../_imports"
3
11
  import { v1 } from "../../api-versions"
4
12
  import { k8ts } from "../../kind-map"
5
13
  import { ManifestResource } from "../../node/manifest-resource"
6
14
  export type ConfigMap = ConfigMap.ConfigMap
7
15
  export namespace ConfigMap {
16
+ export type ConfigMapEntrySource = LocalFileSource | string
8
17
  export interface Props {
9
- data: Record<string, string>
18
+ data: DataSourceRecord_Text
19
+ binaryData?: DataSourceRecord_Binary
10
20
  }
11
21
 
12
22
  const ident = v1.kind("ConfigMap")
13
23
  @k8ts(ident)
14
24
  @relations("none")
15
25
  @manifest({
16
- body(self): CDK.KubeConfigMapProps {
26
+ async body(self): Promise<CDK.KubeConfigMapProps> {
27
+ const binaryData = await resolveBinary(self.props.binaryData ?? {})
28
+ const data = await resolveText(self.props.data)
17
29
  return {
18
- data: self.props.data
30
+ data: data.isEmpty() ? undefined : data.toObject(),
31
+ binaryData: binaryData.isEmpty()
32
+ ? undefined
33
+ : binaryData.map(x => Buffer.from(x).toString("base64")).toObject()
19
34
  }
20
35
  }
21
36
  })
@@ -9,7 +9,8 @@ import { PodTemplate } from "../pod/pod-template"
9
9
 
10
10
  export type Deployment<Ports extends string> = Deployment.Deployment<Ports>
11
11
  export namespace Deployment {
12
- export type Props<Ports extends string> = Omit<CDK.DeploymentSpec, "selector" | "template"> & {
12
+ export type SmallerProps = Omit<CDK.DeploymentSpec, "selector" | "template">
13
+ export type Props<Ports extends string> = SmallerProps & {
13
14
  template: PodTemplate.Props<Ports>
14
15
  }
15
16
 
@@ -19,7 +20,7 @@ export namespace Deployment {
19
20
  kids: s => [s.template]
20
21
  })
21
22
  @manifest({
22
- body(self): CDK.KubeDeploymentProps {
23
+ async body(self): Promise<CDK.KubeDeploymentProps> {
23
24
  return {
24
25
  spec: {
25
26
  ...omit(self.props, "template"),
@@ -28,7 +29,7 @@ export namespace Deployment {
28
29
  app: self.name
29
30
  }
30
31
  },
31
- template: self.template["manifest"]()
32
+ template: await self.template["manifest"]()
32
33
  }
33
34
  }
34
35
  }
@@ -11,7 +11,7 @@ export type HttpRoute<Ports extends string> = HttpRoute.HttpRoute<Ports>
11
11
  export namespace HttpRoute {
12
12
  const gwKind = gateway_v1.kind("Gateway")
13
13
  export interface Props<Ports extends string> {
14
- parent: External<typeof gwKind>
14
+ gateway: External<typeof gwKind>
15
15
  hostname: string
16
16
  backend: Service.Port<Ports>
17
17
  }
@@ -20,7 +20,7 @@ export namespace HttpRoute {
20
20
  @k8ts(kind)
21
21
  @relations({
22
22
  needs: self => ({
23
- gateway: self.props.parent,
23
+ gateway: self.props.gateway,
24
24
  service: self.props.backend.service
25
25
  })
26
26
  })
@@ -28,7 +28,7 @@ export namespace HttpRoute {
28
28
  body(self): CDK.HttpRouteProps {
29
29
  return {
30
30
  spec: {
31
- parentRefs: [self.props.parent.ref()],
31
+ parentRefs: [self.props.gateway.ref()],
32
32
  hostnames: [self.props.hostname],
33
33
  rules: [
34
34
  {
@@ -5,10 +5,10 @@ import { k8ts } from "../../../kind-map"
5
5
  import { ManifestResource } from "../../../node"
6
6
  import { Access } from "../access-mode"
7
7
  import type { DataMode } from "../block-mode"
8
- import type { Volume } from "../volume"
8
+ import { Pv } from "../volume"
9
9
 
10
- export type Claim<T extends DataMode = DataMode> = Claim.Claim<T>
11
- export namespace Claim {
10
+ export type Pvc<T extends DataMode = DataMode> = Pvc.Pvc<T>
11
+ export namespace Pvc {
12
12
  const pvc_ResourcesSpec = ResourcesSpec.make({
13
13
  storage: Unit.Data
14
14
  })
@@ -17,7 +17,7 @@ export namespace Claim {
17
17
  export interface Props<Mode extends DataMode> extends PvcResources {
18
18
  accessModes: Access
19
19
  mode?: Mode
20
- bind: Volume.Volume<Mode>
20
+ bind: Pv<Mode>
21
21
  }
22
22
 
23
23
  const ident = v1.kind("PersistentVolumeClaim")
@@ -46,7 +46,7 @@ export namespace Claim {
46
46
  }
47
47
  }
48
48
  })
49
- export class Claim<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
49
+ export class Pvc<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
50
50
  kind = ident
51
51
  }
52
52
  }
@@ -1,10 +1,4 @@
1
- import { Access as Access_ } from "./access-mode"
2
- import { DataMode as DataMode_ } from "./block-mode"
3
- import { Claim as Claim_ } from "./claim"
4
- import { Volume as Volume_ } from "./volume"
5
- export namespace Persistent {
6
- export import Claim = Claim_
7
- export import Volume = Volume_
8
- export import Access = Access_
9
- export type DataMode = DataMode_
10
- }
1
+ export * from "./access-mode"
2
+ export * from "./block-mode"
3
+ export * from "./claim"
4
+ export * from "./volume"
@@ -8,8 +8,8 @@ import type { DataMode } from "../block-mode"
8
8
  import { Backend as Backend_ } from "./backend"
9
9
  import { parseBackend } from "./parse-backend"
10
10
 
11
- export type Volume<T extends DataMode = DataMode> = Volume.Volume<T>
12
- export namespace Volume {
11
+ export type Pv<T extends DataMode = DataMode> = Pv.Pv<T>
12
+ export namespace Pv {
13
13
  export import Backend = Backend_
14
14
  export interface Props<Mode extends DataMode = DataMode> {
15
15
  accessModes: Access
@@ -50,7 +50,7 @@ export namespace Volume {
50
50
  })
51
51
  @k8ts(ident)
52
52
  @relations("none")
53
- export class Volume<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
53
+ export class Pv<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
54
54
  declare readonly kind: typeof ident
55
55
  }
56
56
  }
@@ -30,9 +30,9 @@ export namespace Container {
30
30
  export type Mounts = {
31
31
  [key: string]: Mount.ContainerDeviceMount | Mount.ContainerVolumeMount
32
32
  }
33
- export interface Props<Ports extends string> {
33
+ export interface Props<Ports extends string = never> {
34
34
  image: TaggedImage
35
- ports: InputPortSetRecord<Ports>
35
+ ports?: InputPortSetRecord<Ports>
36
36
  command?: CmdBuilder
37
37
  mounts?: Mounts
38
38
  env?: InputEnvMapping
@@ -52,6 +52,7 @@ export namespace Container {
52
52
  get kind() {
53
53
  return this.parent.kind.subkind("Container")
54
54
  }
55
+
55
56
  get mounts() {
56
57
  return Map(this.props.mounts ?? {})
57
58
  .mapEntries(([path, mount]) => {
@@ -81,8 +82,8 @@ export namespace Container {
81
82
  const { image, ports, command, env, securityContext } = self.props
82
83
  const container: CDK.Container = {
83
84
  name: self.name,
84
- image: image.text,
85
- ports: toContainerPorts(PortSet.make(ports)).valueSeq().toArray(),
85
+ image: image.toString(),
86
+ ports: ports && toContainerPorts(PortSet.make(ports)).valueSeq().toArray(),
86
87
  resources: self._resources()?.toObject(),
87
88
  command: command?.toArray(),
88
89
  env: toEnvVars(Env(env)).valueSeq().toArray(),
@@ -1,4 +1,4 @@
1
- import { manifest, relations } from "@k8ts/instruments"
1
+ import { manifest, Producer, relations } from "@k8ts/instruments"
2
2
  import { seq } from "doddle"
3
3
  import { omit } from "lodash"
4
4
  import { CDK } from "../../_imports"
@@ -9,11 +9,13 @@ import { Container } from "./container"
9
9
  import { Device, Volume } from "./volume"
10
10
  export type PodTemplate<Ports extends string> = PodTemplate.PodTemplate<Ports>
11
11
  export namespace PodTemplate {
12
- export type Props<Ports extends string> = Omit<
13
- CDK.PodSpec,
14
- "containers" | "initContainers" | "volumes"
15
- > & {
16
- POD(scope: PodScope): Iterable<Container.Container<Ports>>
12
+ export type PodProps = Omit<CDK.PodSpec, "containers" | "initContainers" | "volumes">
13
+ export type PodContainerProducer<Ports extends string> = Producer<
14
+ PodScope,
15
+ Container.Container<Ports>
16
+ >
17
+ export type Props<Ports extends string = never> = PodProps & {
18
+ POD: PodContainerProducer<Ports>
17
19
  }
18
20
  const ident = apps_v1.kind("PodTemplate")
19
21
  @k8ts(ident)
@@ -2,12 +2,12 @@ import { relations } from "@k8ts/instruments"
2
2
  import type { CDK } from "../../../_imports"
3
3
  import type { ManifestResource } from "../../../node"
4
4
  import { SubResource } from "../../../node/sub-resource"
5
- import { Persistent } from "../../persistent"
5
+ import { Pvc } from "../../persistent"
6
6
  import { Mount } from "../container/mounts"
7
7
  export type Device = Device.PodDevice
8
8
  export namespace Device {
9
9
  interface PodDevice_Backend_Pvc {
10
- backend: Persistent.Claim<"Block">
10
+ backend: Pvc.Pvc<"Block">
11
11
  readOnly?: boolean
12
12
  }
13
13
 
@@ -39,7 +39,7 @@ export namespace Device {
39
39
  }
40
40
  }
41
41
 
42
- mount() {
42
+ Mount() {
43
43
  return new Mount.ContainerDeviceMount(this)
44
44
  }
45
45
  }
@@ -4,13 +4,13 @@ import { relations } from "@k8ts/instruments"
4
4
  import type { ManifestResource } from "../../../node"
5
5
  import { SubResource } from "../../../node/sub-resource"
6
6
  import type { ConfigMap } from "../../configmap"
7
- import type { Persistent } from "../../persistent"
7
+ import { Pvc } from "../../persistent"
8
8
  import type { Secret } from "../../secret"
9
9
  import { Mount } from "../container/mounts"
10
10
  export type Volume<Props extends Volume.Backend = Volume.Backend> = Volume.PodVolume<Props>
11
11
  export namespace Volume {
12
12
  interface PodVolume_Backend_Pvc {
13
- backend: Persistent.Claim<"Filesystem">
13
+ backend: Pvc.Pvc<"Filesystem">
14
14
  readOnly?: boolean
15
15
  }
16
16
 
@@ -30,7 +30,6 @@ export namespace Volume {
30
30
  })
31
31
  })
32
32
  export abstract class PodVolume<Props extends Backend = Backend> extends SubResource<Props> {
33
- private KIND = "Volume" as const
34
33
  get kind() {
35
34
  return this.parent.kind.subkind("Volume")
36
35
  }
@@ -1,11 +1,11 @@
1
1
  import { manifest, relations, type InputPortMapping } from "@k8ts/instruments"
2
+ import { Map } from "immutable"
2
3
  import { CDK } from "../../_imports"
3
4
  import { v1 } from "../../api-versions"
4
5
  import { k8ts } from "../../kind-map"
5
6
  import { ManifestResource } from "../../node"
6
7
  import type { Deployment } from "../deployment/deployment"
7
8
  import { toServicePorts } from "../utils/adapters"
8
-
9
9
  import { Frontend as Frontend_ } from "./frontend"
10
10
  import { Port as Port_ } from "./service-port"
11
11
  export type Service<Ports extends string> = Service.Service<Ports>
@@ -13,7 +13,7 @@ export namespace Service {
13
13
  export import Port = Port_
14
14
  export import Frontend = Frontend_
15
15
  export interface Props<Ports extends string> {
16
- ports: InputPortMapping<Ports>
16
+ ports: Partial<InputPortMapping<Ports>>
17
17
  backend: Deployment.Deployment<Ports>
18
18
  frontend: Frontend
19
19
  }
@@ -31,7 +31,9 @@ export namespace Service {
31
31
  return {
32
32
  spec: {
33
33
  ports: toServicePorts(svcPorts).toArray(),
34
- selector: self.props.backend.meta.pick("%app").labels,
34
+ selector: {
35
+ app: self.props.backend.name
36
+ },
35
37
  ...self.props.frontend
36
38
  }
37
39
  }
@@ -42,11 +44,15 @@ export namespace Service {
42
44
 
43
45
  get ports() {
44
46
  const srcPorts = this.props.backend.ports.pull()
45
- const svcPorts = srcPorts.map(this.props.ports)
47
+ const knownPorts = Map(this.props.ports)
48
+ .filter(x => x !== undefined)
49
+ .keySeq()
50
+ .toArray() as Ports[]
51
+ const svcPorts = srcPorts.pick(...knownPorts).map(this.props.ports as any)
46
52
  return svcPorts
47
53
  }
48
54
 
49
- getPortRef(port: Ports) {
55
+ portRef(port: Ports) {
50
56
  return new Port.Port(this, port)
51
57
  }
52
58
  }