k8ts 0.4.16 → 0.4.19

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 (56) hide show
  1. package/dist/node/equiv-cdk8s.d.ts +10 -0
  2. package/dist/node/equiv-cdk8s.d.ts.map +1 -0
  3. package/dist/node/equiv-cdk8s.js +17 -0
  4. package/dist/node/equiv-cdk8s.js.map +1 -0
  5. package/dist/resources/configmap/configmap.d.ts.map +1 -1
  6. package/dist/resources/configmap/configmap.js +3 -1
  7. package/dist/resources/configmap/configmap.js.map +1 -1
  8. package/dist/resources/deployment/deployment.d.ts.map +1 -1
  9. package/dist/resources/deployment/deployment.js +3 -1
  10. package/dist/resources/deployment/deployment.js.map +1 -1
  11. package/dist/resources/http-route/http-route.d.ts.map +1 -1
  12. package/dist/resources/http-route/http-route.js +3 -1
  13. package/dist/resources/http-route/http-route.js.map +1 -1
  14. package/dist/resources/namespace/namespace.d.ts.map +1 -1
  15. package/dist/resources/namespace/namespace.js +3 -1
  16. package/dist/resources/namespace/namespace.js.map +1 -1
  17. package/dist/resources/persistent/claim/pvc.d.ts.map +1 -1
  18. package/dist/resources/persistent/claim/pvc.js +3 -1
  19. package/dist/resources/persistent/claim/pvc.js.map +1 -1
  20. package/dist/resources/persistent/volume/pv.d.ts.map +1 -1
  21. package/dist/resources/persistent/volume/pv.js +2 -1
  22. package/dist/resources/persistent/volume/pv.js.map +1 -1
  23. package/dist/resources/secret/secret.d.ts.map +1 -1
  24. package/dist/resources/secret/secret.js +3 -1
  25. package/dist/resources/secret/secret.js.map +1 -1
  26. package/dist/resources/service/service.d.ts.map +1 -1
  27. package/dist/resources/service/service.js +3 -1
  28. package/dist/resources/service/service.js.map +1 -1
  29. package/dist/runner/exporter/assembler.d.ts +10 -7
  30. package/dist/runner/exporter/assembler.d.ts.map +1 -1
  31. package/dist/runner/exporter/assembler.js +17 -11
  32. package/dist/runner/exporter/assembler.js.map +1 -1
  33. package/dist/runner/exporter/manifester.d.ts +5 -1
  34. package/dist/runner/exporter/manifester.d.ts.map +1 -1
  35. package/dist/runner/exporter/manifester.js +4 -1
  36. package/dist/runner/exporter/manifester.js.map +1 -1
  37. package/dist/runner/exporter/validator.d.ts +16 -0
  38. package/dist/runner/exporter/validator.d.ts.map +1 -0
  39. package/dist/runner/exporter/validator.js +25 -0
  40. package/dist/runner/exporter/validator.js.map +1 -0
  41. package/dist/runner/summarizer.js +1 -1
  42. package/dist/src.tsbuildinfo +1 -1
  43. package/package.json +5 -5
  44. package/src/node/equiv-cdk8s.ts +20 -0
  45. package/src/resources/configmap/configmap.ts +3 -1
  46. package/src/resources/deployment/deployment.ts +2 -0
  47. package/src/resources/http-route/http-route.ts +3 -1
  48. package/src/resources/namespace/namespace.ts +3 -1
  49. package/src/resources/persistent/claim/pvc.ts +3 -1
  50. package/src/resources/persistent/volume/pv.ts +2 -0
  51. package/src/resources/secret/secret.ts +2 -0
  52. package/src/resources/service/service.ts +2 -0
  53. package/src/runner/exporter/assembler.ts +28 -18
  54. package/src/runner/exporter/manifester.ts +10 -2
  55. package/src/runner/exporter/validator.ts +27 -0
  56. package/src/runner/summarizer.ts +1 -1
@@ -1,8 +1,9 @@
1
1
  import { manifest, relations, type Origin } from "@k8ts/instruments"
2
2
  import { Meta, MutableMeta } from "@k8ts/metadata"
3
- import type { CDK } from "../../_imports"
3
+ import { CDK } from "../../_imports"
4
4
  import { v1 } from "../../api-versions"
5
5
  import { k8ts } from "../../kind-map"
6
+ import { equiv_cdk8s } from "../../node/equiv-cdk8s"
6
7
  import { ManifestResource } from "../../node/manifest-resource"
7
8
  export type Namespace = Namespace.Namespace
8
9
  export namespace Namespace {
@@ -10,6 +11,7 @@ export namespace Namespace {
10
11
  const ident = v1.kind("Namespace")
11
12
  @k8ts(ident)
12
13
  @relations("none")
14
+ @equiv_cdk8s(CDK.KubeNamespace)
13
15
  @manifest({
14
16
  body(self): CDK.KubeNamespaceProps {
15
17
  return {
@@ -1,8 +1,9 @@
1
1
  import { manifest, relations, ResourcesSpec, Unit } from "@k8ts/instruments"
2
- import type { CDK } from "../../../_imports"
2
+ import { CDK } from "../../../_imports"
3
3
  import { v1 } from "../../../api-versions"
4
4
  import { k8ts } from "../../../kind-map"
5
5
  import { ManifestResource } from "../../../node"
6
+ import { equiv_cdk8s } from "../../../node/equiv-cdk8s"
6
7
  import { Access } from "../access-mode"
7
8
  import type { DataMode } from "../block-mode"
8
9
  import { Pv } from "../volume"
@@ -22,6 +23,7 @@ export namespace Pvc {
22
23
 
23
24
  const ident = v1.kind("PersistentVolumeClaim")
24
25
  @k8ts(ident)
26
+ @equiv_cdk8s(CDK.KubePersistentVolumeClaim)
25
27
  @relations({
26
28
  needs: self => ({
27
29
  bind: self.props.bind
@@ -3,6 +3,7 @@ import { CDK } from "../../../_imports"
3
3
  import { v1 } from "../../../api-versions"
4
4
  import { MakeError } from "../../../error"
5
5
  import { k8ts } from "../../../kind-map"
6
+ import { equiv_cdk8s } from "../../../node/equiv-cdk8s"
6
7
  import { ManifestResource } from "../../../node/manifest-resource"
7
8
  import { Access } from "../access-mode"
8
9
  import type { DataMode } from "../block-mode"
@@ -25,6 +26,7 @@ export namespace Pv {
25
26
 
26
27
  const ident = v1.kind("PersistentVolume")
27
28
 
29
+ @equiv_cdk8s(CDK.KubePersistentVolume)
28
30
  @manifest({
29
31
  body(self) {
30
32
  const pvProps = self.props
@@ -2,6 +2,7 @@ import { manifest, relations } from "@k8ts/instruments"
2
2
  import { CDK } from "../../_imports"
3
3
  import { v1 } from "../../api-versions"
4
4
  import { k8ts } from "../../kind-map"
5
+ import { equiv_cdk8s } from "../../node/equiv-cdk8s"
5
6
  import { ManifestResource } from "../../node/manifest-resource"
6
7
 
7
8
  export interface Props {
@@ -11,6 +12,7 @@ export interface Props {
11
12
 
12
13
  const ident = v1.kind("Secret")
13
14
  @k8ts(ident)
15
+ @equiv_cdk8s(CDK.KubeSecret)
14
16
  @relations("none")
15
17
  @manifest({
16
18
  body(self): CDK.KubeSecretProps {
@@ -4,6 +4,7 @@ import { CDK } from "../../_imports"
4
4
  import { v1 } from "../../api-versions"
5
5
  import { k8ts } from "../../kind-map"
6
6
  import { ManifestResource } from "../../node"
7
+ import { equiv_cdk8s } from "../../node/equiv-cdk8s"
7
8
  import type { Deployment } from "../deployment/deployment"
8
9
  import { toServicePorts } from "../utils/adapters"
9
10
  import { Frontend as Frontend_ } from "./frontend"
@@ -28,6 +29,7 @@ export namespace Service {
28
29
  backend: self.props.backend
29
30
  })
30
31
  })
32
+ @equiv_cdk8s(CDK.KubeService)
31
33
  @manifest({
32
34
  body(self): CDK.KubeServiceProps {
33
35
  const svcPorts = self.ports
@@ -1,13 +1,14 @@
1
- import { BaseManifest, Origin, ResourceNode } from "@k8ts/instruments"
1
+ import { Origin } from "@k8ts/instruments"
2
2
  import { Meta } from "@k8ts/metadata"
3
3
  import { aseq } from "doddle"
4
4
  import Emittery from "emittery"
5
5
  import { cloneDeep } from "lodash"
6
6
  import type { File } from "../../file"
7
7
  import { ResourceLoader, type ResourceLoaderEventsTable } from "./loader"
8
- import { Manifester, type ManifesterEventsTable } from "./manifester"
8
+ import { Manifester, NodeManifest, type ManifesterEventsTable } from "./manifester"
9
9
  import { ManifestSaver, type ManifestSaverEventsTable } from "./saver"
10
10
  import { YamlSerializer, type YamlSerializerEventsTable } from "./serializer"
11
+ import { NodeGraphValidator, ValidatorEventsTable } from "./validator"
11
12
 
12
13
  export class Assembler extends Emittery<AssemblerEventsTable> {
13
14
  constructor(private readonly _options: AssemblerOptions) {
@@ -21,6 +22,7 @@ export class Assembler extends Emittery<AssemblerEventsTable> {
21
22
  ) => {
22
23
  return await this.emit(event, payload)
23
24
  }
25
+ const validator = new NodeGraphValidator({})
24
26
  const loader = new ResourceLoader({})
25
27
  loader.onAny(_emit)
26
28
  const generator = new Manifester({
@@ -59,25 +61,29 @@ export class Assembler extends Emittery<AssemblerEventsTable> {
59
61
  .map(async ({ file, resources }) => {
60
62
  const manifests = await aseq(resources)
61
63
  .map(async resource => {
62
- return {
63
- k8ts: resource,
64
- manifest: await generator.generate(resource)
65
- }
64
+ return await generator.generate(resource)
66
65
  })
67
66
  .toArray()
68
67
  .pull()
69
68
 
70
69
  return {
71
- file,
72
- manifests
73
- }
70
+ file: file.node,
71
+ resources: manifests
72
+ } satisfies FileNodes
73
+ })
74
+ .after(async () => {
75
+ await _emit("stage", { stage: "validating" })
76
+ })
77
+ .collect("array")
78
+ .concatMap(async x => {
79
+ validator.validate(x)
80
+ return x
74
81
  })
75
82
  .after(async () => {
76
83
  await _emit("stage", { stage: "serializing" })
77
84
  })
78
- .collect()
79
- .map(async ({ file, manifests }) => {
80
- const artifacts = await aseq(manifests)
85
+ .map(async ({ file, resources }) => {
86
+ const artifacts = await aseq(resources)
81
87
  .map(async obj => {
82
88
  return {
83
89
  ...obj,
@@ -101,11 +107,11 @@ export class Assembler extends Emittery<AssemblerEventsTable> {
101
107
  .collect()
102
108
  .map(async ({ file, artifacts }) => {
103
109
  const { filename, bytes, path } = await saver.save(
104
- file.node,
110
+ file,
105
111
  artifacts.map(x => x.yaml)
106
112
  )
107
113
  return {
108
- file: file.node,
114
+ file: file,
109
115
  path,
110
116
  filename,
111
117
  bytes,
@@ -124,9 +130,11 @@ export class Assembler extends Emittery<AssemblerEventsTable> {
124
130
  } as AssembledResult
125
131
  }
126
132
  }
127
- export interface Artifact {
128
- k8ts: ResourceNode
129
- manifest: BaseManifest
133
+ export interface FileNodes {
134
+ file: Origin
135
+ resources: NodeManifest[]
136
+ }
137
+ export interface Artifact extends NodeManifest {
130
138
  yaml: string
131
139
  }
132
140
  export interface AssembledFile {
@@ -148,6 +156,7 @@ export interface AssemblerOptions {
148
156
  }
149
157
  export type AssemblyStage =
150
158
  | "loading"
159
+ | "validating"
151
160
  | "manifesting"
152
161
  | "serializing"
153
162
  | "saving"
@@ -159,7 +168,8 @@ export interface AssemblerEventsTable
159
168
  extends ManifestSaverEventsTable,
160
169
  YamlSerializerEventsTable,
161
170
  ManifesterEventsTable,
162
- ResourceLoaderEventsTable {
171
+ ResourceLoaderEventsTable,
172
+ ValidatorEventsTable {
163
173
  ["received-file"]: { file: Origin }
164
174
  ["stage"]: { stage: AssemblyStage }
165
175
  }
@@ -59,13 +59,21 @@ export class Manifester extends Emittery<ManifesterEventsTable> {
59
59
  })
60
60
  }
61
61
 
62
- async generate(res: ResourceNode) {
62
+ async generate(res: ResourceNode): Promise<NodeManifest> {
63
63
  this._attachProductionAnnotations(res)
64
64
  await this.emit("manifest", { resource: res })
65
65
  const manifest = await this._generate(res.entity as ManifestResource)
66
- return manifest
66
+ return {
67
+ node: res,
68
+ manifest: manifest
69
+ }
67
70
  }
68
71
  }
72
+
73
+ export interface NodeManifest {
74
+ node: ResourceNode
75
+ manifest: BaseManifest
76
+ }
69
77
  export interface ManifesterManifestEvent {
70
78
  resource: ResourceNode
71
79
  }
@@ -0,0 +1,27 @@
1
+ import { ResourceNode } from "@k8ts/instruments"
2
+ import { App, Chart } from "cdk8s"
3
+ import { ManifestResource } from "../../node"
4
+ import { EquivCdk8s } from "../../node/equiv-cdk8s"
5
+ import { FileNodes } from "./assembler"
6
+ export interface ValidatingEvent {
7
+ node: ResourceNode
8
+ }
9
+ export interface ValidatorEventsTable {
10
+ validating: ValidatingEvent
11
+ }
12
+ export interface ValidatorOptions {}
13
+ export class NodeGraphValidator {
14
+ constructor(readonly options: ValidatorOptions) {}
15
+ validate(collection: FileNodes[]) {
16
+ const app = new App()
17
+ const rootChart = new Chart(app, "root_chart")
18
+ for (const fileNode of collection) {
19
+ for (const nodeManifest of fileNode.resources) {
20
+ const equiv = EquivCdk8s.get(nodeManifest.node._entity as ManifestResource)
21
+ const fullFqn = nodeManifest.node.fullFqn.replaceAll("/", "_").replaceAll(".", "-")
22
+ const cdk8sNode = new equiv(rootChart, fullFqn, nodeManifest.manifest)
23
+ }
24
+ }
25
+ app.synthYaml()
26
+ }
27
+ }
@@ -113,7 +113,7 @@ export class Summarizer {
113
113
  this.files(
114
114
  result.files.map(x => ({
115
115
  origin: x.file,
116
- resources: x.artifacts.map(x => x.k8ts)
116
+ resources: x.artifacts.map(x => x.node)
117
117
  }))
118
118
  )
119
119
  )