@intentius/chant-lexicon-k8s 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/api/classify.d.ts +65 -0
  2. package/dist/api/classify.d.ts.map +1 -0
  3. package/dist/api/connect.d.ts +58 -0
  4. package/dist/api/connect.d.ts.map +1 -0
  5. package/dist/api/fake-cluster.d.ts +55 -0
  6. package/dist/api/fake-cluster.d.ts.map +1 -0
  7. package/dist/api/operation-surface.d.ts +64 -0
  8. package/dist/api/operation-surface.d.ts.map +1 -0
  9. package/dist/api/owner-chain.d.ts +46 -0
  10. package/dist/api/owner-chain.d.ts.map +1 -0
  11. package/dist/api/sweep-types.d.ts +17 -0
  12. package/dist/api/sweep-types.d.ts.map +1 -0
  13. package/dist/codegen/generate-operations.d.ts +29 -0
  14. package/dist/codegen/generate-operations.d.ts.map +1 -0
  15. package/dist/codegen/generate.d.ts.map +1 -1
  16. package/dist/config.d.ts +17 -0
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/crd/parser.d.ts.map +1 -1
  19. package/dist/crd/types.d.ts +7 -0
  20. package/dist/crd/types.d.ts.map +1 -1
  21. package/dist/deep-observe-hooks.d.ts +86 -0
  22. package/dist/deep-observe-hooks.d.ts.map +1 -0
  23. package/dist/deep-observe.d.ts +146 -0
  24. package/dist/deep-observe.d.ts.map +1 -0
  25. package/dist/describe-resources.d.ts +58 -26
  26. package/dist/describe-resources.d.ts.map +1 -1
  27. package/dist/export-resources.d.ts +31 -1
  28. package/dist/export-resources.d.ts.map +1 -1
  29. package/dist/integrity.json +2 -2
  30. package/dist/kube/apply.d.ts +26 -0
  31. package/dist/kube/apply.d.ts.map +1 -0
  32. package/dist/kube/connect.d.ts +30 -0
  33. package/dist/kube/connect.d.ts.map +1 -0
  34. package/dist/kube/delete.d.ts +27 -0
  35. package/dist/kube/delete.d.ts.map +1 -0
  36. package/dist/kube/describe.d.ts +19 -0
  37. package/dist/kube/describe.d.ts.map +1 -0
  38. package/dist/kube/events.d.ts +34 -0
  39. package/dist/kube/events.d.ts.map +1 -0
  40. package/dist/kube/flags.d.ts +40 -0
  41. package/dist/kube/flags.d.ts.map +1 -0
  42. package/dist/kube/get.d.ts +21 -0
  43. package/dist/kube/get.d.ts.map +1 -0
  44. package/dist/kube/group.d.ts +19 -0
  45. package/dist/kube/group.d.ts.map +1 -0
  46. package/dist/kube/logs.d.ts +16 -0
  47. package/dist/kube/logs.d.ts.map +1 -0
  48. package/dist/kube/project.d.ts +59 -0
  49. package/dist/kube/project.d.ts.map +1 -0
  50. package/dist/kube/render.d.ts +75 -0
  51. package/dist/kube/render.d.ts.map +1 -0
  52. package/dist/kube/source.d.ts +19 -0
  53. package/dist/kube/source.d.ts.map +1 -0
  54. package/dist/kube/target.d.ts +52 -0
  55. package/dist/kube/target.d.ts.map +1 -0
  56. package/dist/kube/testing.d.ts +21 -0
  57. package/dist/kube/testing.d.ts.map +1 -0
  58. package/dist/kube/top.d.ts +23 -0
  59. package/dist/kube/top.d.ts.map +1 -0
  60. package/dist/kube/verdict.d.ts +45 -0
  61. package/dist/kube/verdict.d.ts.map +1 -0
  62. package/dist/kube/wait.d.ts +23 -0
  63. package/dist/kube/wait.d.ts.map +1 -0
  64. package/dist/manifest.json +1 -1
  65. package/dist/op/activities/index.d.ts +7 -4
  66. package/dist/op/activities/index.d.ts.map +1 -1
  67. package/dist/op/activities/kubectl.d.ts +120 -2
  68. package/dist/op/activities/kubectl.d.ts.map +1 -1
  69. package/dist/op/activities/wait-for-ready.d.ts +30 -3
  70. package/dist/op/activities/wait-for-ready.d.ts.map +1 -1
  71. package/dist/plugin.d.ts.map +1 -1
  72. package/dist/spec/parse.d.ts +42 -0
  73. package/dist/spec/parse.d.ts.map +1 -1
  74. package/package.json +5 -2
  75. package/src/api/classify.test.ts +133 -0
  76. package/src/api/classify.ts +144 -0
  77. package/src/api/connect.ts +104 -0
  78. package/src/api/fake-cluster.ts +218 -0
  79. package/src/api/operation-surface.test.ts +116 -0
  80. package/src/api/operation-surface.ts +129 -0
  81. package/src/api/owner-chain.test.ts +171 -0
  82. package/src/api/owner-chain.ts +144 -0
  83. package/src/api/sweep-types.ts +36 -0
  84. package/src/codegen/generate-operations.ts +56 -0
  85. package/src/codegen/generate.ts +9 -0
  86. package/src/config.ts +17 -0
  87. package/src/crd/parser.ts +8 -0
  88. package/src/crd/types.ts +7 -0
  89. package/src/deep-observe-hooks.ts +125 -0
  90. package/src/deep-observe.test.ts +668 -0
  91. package/src/deep-observe.ts +299 -0
  92. package/src/describe-resources.test.ts +619 -191
  93. package/src/describe-resources.ts +218 -117
  94. package/src/export-resources-io.test.ts +76 -51
  95. package/src/export-resources.ts +47 -35
  96. package/src/generated/operations.json +2156 -0
  97. package/src/kube/apply.test.ts +105 -0
  98. package/src/kube/apply.ts +101 -0
  99. package/src/kube/connect.ts +54 -0
  100. package/src/kube/delete.test.ts +123 -0
  101. package/src/kube/delete.ts +174 -0
  102. package/src/kube/describe.test.ts +106 -0
  103. package/src/kube/describe.ts +195 -0
  104. package/src/kube/events.test.ts +115 -0
  105. package/src/kube/events.ts +160 -0
  106. package/src/kube/flags.test.ts +65 -0
  107. package/src/kube/flags.ts +114 -0
  108. package/src/kube/get.test.ts +195 -0
  109. package/src/kube/get.ts +190 -0
  110. package/src/kube/group.test.ts +33 -0
  111. package/src/kube/group.ts +125 -0
  112. package/src/kube/logs.test.ts +126 -0
  113. package/src/kube/logs.ts +96 -0
  114. package/src/kube/project.test.ts +57 -0
  115. package/src/kube/project.ts +106 -0
  116. package/src/kube/render.test.ts +142 -0
  117. package/src/kube/render.ts +252 -0
  118. package/src/kube/source.test.ts +138 -0
  119. package/src/kube/source.ts +139 -0
  120. package/src/kube/target.test.ts +67 -0
  121. package/src/kube/target.ts +89 -0
  122. package/src/kube/testing.ts +42 -0
  123. package/src/kube/top.test.ts +149 -0
  124. package/src/kube/top.ts +120 -0
  125. package/src/kube/verdict.test.ts +48 -0
  126. package/src/kube/verdict.ts +77 -0
  127. package/src/kube/wait.test.ts +125 -0
  128. package/src/kube/wait.ts +160 -0
  129. package/src/lifecycle-integration.test.ts +132 -92
  130. package/src/op/activities/index.ts +7 -3
  131. package/src/op/activities/kubectl.test.ts +420 -0
  132. package/src/op/activities/kubectl.ts +379 -13
  133. package/src/op/activities/wait-for-ready.test.ts +94 -0
  134. package/src/op/activities/wait-for-ready.ts +66 -15
  135. package/src/plugin.test.ts +58 -1
  136. package/src/plugin.ts +29 -0
  137. package/src/spec/parse.ts +93 -1
@@ -3,56 +3,68 @@
3
3
  * LexiconPlugin.exportResources() so `chant import --from <cluster-env>`
4
4
  * regenerates live objects as chant TypeScript.
5
5
  *
6
- * Reads live objects with `kubectl get <kinds> -A -o json`, strips
7
- * server-managed noise to reach the declared shape (kept under `verbatim`),
8
- * and maps to the import IR via the shared K8sParser. All I/O lives here; the
9
- * cleaning and IR-building logic is pure in `./import/live-export`.
6
+ * Reads live objects through the typed API client (chant #1074, previously
7
+ * `kubectl get <kinds> -A -o json`), strips server-managed noise to reach the
8
+ * declared shape (kept under `verbatim`), and maps to the import IR via the
9
+ * shared K8sParser. All I/O lives here; the cleaning and IR-building logic is
10
+ * pure in `./import/live-export`.
11
+ *
12
+ * The list below is a *product* decision — what a bare `chant import` should
13
+ * sweep when the caller names no type — not an addressing limit. It used to be
14
+ * both, because `KUBECTL_RESOURCE` was simultaneously the sweep set and the
15
+ * only way the lexicon knew how to address anything (chant #1074 removed the
16
+ * second job). A `--selector type=<entity type>` import can now name any of the
17
+ * ~180 types the generated operation surface carries, CRDs included.
10
18
  */
11
- import { exec } from "node:child_process";
12
- import { promisify } from "node:util";
13
19
  import type { ExportedTemplate, ResourceSelector } from "@intentius/chant/lexicon";
14
- import { KUBECTL_RESOURCE } from "./describe-resources";
20
+ import { defaultK8sConnector, type K8sConnector } from "./api/connect";
21
+ import { operationFor } from "./api/operation-surface";
15
22
  import { buildExportFromObjects } from "./import/live-export";
23
+ import { DEFAULT_IMPORT_TYPES } from "./api/sweep-types";
16
24
 
17
- const execAsync = promisify(exec);
18
-
19
- interface KubectlList {
20
- items?: unknown[];
21
- }
25
+ /**
26
+ * Entity types a bare `chant import --from <cluster>` sweeps: the workload,
27
+ * config, networking and RBAC kinds people actually author. Everything else is
28
+ * reachable by naming it with `--selector type=...`. Defined in
29
+ * `./api/sweep-types.ts` and re-exported here, its original home — chant
30
+ * #1075's ownership-scoped prune needs the same list without pulling the
31
+ * import parser into a Temporal worker.
32
+ */
33
+ export { DEFAULT_IMPORT_TYPES };
22
34
 
23
- export async function exportResources(options: {
24
- environment: string;
25
- selector?: ResourceSelector;
26
- owned?: boolean;
27
- verbatim?: boolean;
28
- }): Promise<ExportedTemplate> {
29
- // Resolve which kinds to query. A type selector narrows to one kind;
30
- // otherwise sweep every kind chant knows how to map.
31
- const kinds = options.selector?.type
32
- ? [KUBECTL_RESOURCE[options.selector.type]].filter(Boolean)
33
- : Array.from(new Set(Object.values(KUBECTL_RESOURCE)));
35
+ export async function exportResources(
36
+ options: {
37
+ environment: string;
38
+ selector?: ResourceSelector;
39
+ owned?: boolean;
40
+ verbatim?: boolean;
41
+ cwd?: string;
42
+ },
43
+ connect: K8sConnector = defaultK8sConnector,
44
+ ): Promise<ExportedTemplate> {
45
+ const types = options.selector?.type ? [options.selector.type] : DEFAULT_IMPORT_TYPES;
46
+ const operations = types.map((t) => operationFor(t)).filter((o) => o !== undefined);
34
47
 
35
- if (kinds.length === 0) {
48
+ if (operations.length === 0) {
36
49
  return { resources: [], parameters: [] };
37
50
  }
38
51
 
52
+ const { client } = await connect({ environment: options.environment, cwd: options.cwd });
53
+
39
54
  // One List per kind keeps parsing simple and isolates a missing-kind error
40
- // to that kind rather than failing the whole export.
41
- const objects: unknown[] = [];
42
- for (const kind of kinds) {
55
+ // to that kind rather than failing the whole export. They now run
56
+ // concurrently instead of serially.
57
+ const perKind = await client.concurrently(operations, async (operation) => {
43
58
  try {
44
- const { stdout } = await execAsync(
45
- ["kubectl", "get", kind, "-A", "-o", "json"].join(" "),
46
- );
47
- const list = JSON.parse(stdout) as KubectlList;
48
- if (Array.isArray(list.items)) objects.push(...list.items);
59
+ return await client.list({ apiVersion: operation.apiVersion, kind: operation.kind });
49
60
  } catch {
50
- // Kind not present in the cluster / RBAC denied — skip it, don't fail
61
+ // Kind not served by this cluster / RBAC denied — skip it, don't fail
51
62
  // the whole export.
63
+ return [];
52
64
  }
53
- }
65
+ });
54
66
 
55
- return buildExportFromObjects(objects, {
67
+ return buildExportFromObjects(perKind.flat(), {
56
68
  verbatim: options.verbatim,
57
69
  selector: options.selector,
58
70
  owned: options.owned,