kustodian 1.0.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 (351) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/cli/bin.d.ts +3 -0
  4. package/dist/cli/bin.d.ts.map +1 -0
  5. package/dist/cli/bin.js +67 -0
  6. package/dist/cli/bin.js.map +1 -0
  7. package/dist/cli/command.d.ts +57 -0
  8. package/dist/cli/command.d.ts.map +1 -0
  9. package/dist/cli/command.js +26 -0
  10. package/dist/cli/command.js.map +1 -0
  11. package/dist/cli/commands/apply.d.ts +8 -0
  12. package/dist/cli/commands/apply.d.ts.map +1 -0
  13. package/dist/cli/commands/apply.js +802 -0
  14. package/dist/cli/commands/apply.js.map +1 -0
  15. package/dist/cli/commands/init.d.ts +5 -0
  16. package/dist/cli/commands/init.d.ts.map +1 -0
  17. package/dist/cli/commands/init.js +403 -0
  18. package/dist/cli/commands/init.js.map +1 -0
  19. package/dist/cli/commands/sources.d.ts +5 -0
  20. package/dist/cli/commands/sources.d.ts.map +1 -0
  21. package/dist/cli/commands/sources.js +377 -0
  22. package/dist/cli/commands/sources.js.map +1 -0
  23. package/dist/cli/commands/update.d.ts +5 -0
  24. package/dist/cli/commands/update.d.ts.map +1 -0
  25. package/dist/cli/commands/update.js +314 -0
  26. package/dist/cli/commands/update.js.map +1 -0
  27. package/dist/cli/commands/validate.d.ts +5 -0
  28. package/dist/cli/commands/validate.d.ts.map +1 -0
  29. package/dist/cli/commands/validate.js +126 -0
  30. package/dist/cli/commands/validate.js.map +1 -0
  31. package/dist/cli/container.d.ts +48 -0
  32. package/dist/cli/container.d.ts.map +1 -0
  33. package/dist/cli/container.js +49 -0
  34. package/dist/cli/container.js.map +1 -0
  35. package/dist/cli/index.d.ts +8 -0
  36. package/dist/cli/index.d.ts.map +1 -0
  37. package/dist/cli/index.js +9 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/cli/middleware.d.ts +118 -0
  40. package/dist/cli/middleware.d.ts.map +1 -0
  41. package/dist/cli/middleware.js +280 -0
  42. package/dist/cli/middleware.js.map +1 -0
  43. package/dist/cli/runner.d.ts +34 -0
  44. package/dist/cli/runner.d.ts.map +1 -0
  45. package/dist/cli/runner.js +156 -0
  46. package/dist/cli/runner.js.map +1 -0
  47. package/dist/cli/utils/defaults.d.ts +23 -0
  48. package/dist/cli/utils/defaults.d.ts.map +1 -0
  49. package/dist/cli/utils/defaults.js +43 -0
  50. package/dist/cli/utils/defaults.js.map +1 -0
  51. package/dist/core/error.d.ts +117 -0
  52. package/dist/core/error.d.ts.map +1 -0
  53. package/dist/core/error.js +210 -0
  54. package/dist/core/error.js.map +1 -0
  55. package/dist/core/index.d.ts +6 -0
  56. package/dist/core/index.d.ts.map +1 -0
  57. package/dist/core/index.js +6 -0
  58. package/dist/core/index.js.map +1 -0
  59. package/dist/core/logger.d.ts +31 -0
  60. package/dist/core/logger.d.ts.map +1 -0
  61. package/dist/core/logger.js +78 -0
  62. package/dist/core/logger.js.map +1 -0
  63. package/dist/core/path.d.ts +57 -0
  64. package/dist/core/path.d.ts.map +1 -0
  65. package/dist/core/path.js +154 -0
  66. package/dist/core/path.js.map +1 -0
  67. package/dist/core/result.d.ts +80 -0
  68. package/dist/core/result.d.ts.map +1 -0
  69. package/dist/core/result.js +150 -0
  70. package/dist/core/result.js.map +1 -0
  71. package/dist/core/types.d.ts +80 -0
  72. package/dist/core/types.d.ts.map +1 -0
  73. package/dist/core/types.js +5 -0
  74. package/dist/core/types.js.map +1 -0
  75. package/dist/generator/external-substitutions.d.ts +21 -0
  76. package/dist/generator/external-substitutions.d.ts.map +1 -0
  77. package/dist/generator/external-substitutions.js +49 -0
  78. package/dist/generator/external-substitutions.js.map +1 -0
  79. package/dist/generator/flux.d.ts +61 -0
  80. package/dist/generator/flux.d.ts.map +1 -0
  81. package/dist/generator/flux.js +294 -0
  82. package/dist/generator/flux.js.map +1 -0
  83. package/dist/generator/generator.d.ts +77 -0
  84. package/dist/generator/generator.d.ts.map +1 -0
  85. package/dist/generator/generator.js +183 -0
  86. package/dist/generator/generator.js.map +1 -0
  87. package/dist/generator/index.d.ts +9 -0
  88. package/dist/generator/index.d.ts.map +1 -0
  89. package/dist/generator/index.js +9 -0
  90. package/dist/generator/index.js.map +1 -0
  91. package/dist/generator/kustomization-resolution.d.ts +40 -0
  92. package/dist/generator/kustomization-resolution.d.ts.map +1 -0
  93. package/dist/generator/kustomization-resolution.js +59 -0
  94. package/dist/generator/kustomization-resolution.js.map +1 -0
  95. package/dist/generator/namespace.d.ts +74 -0
  96. package/dist/generator/namespace.d.ts.map +1 -0
  97. package/dist/generator/namespace.js +109 -0
  98. package/dist/generator/namespace.js.map +1 -0
  99. package/dist/generator/output.d.ts +56 -0
  100. package/dist/generator/output.d.ts.map +1 -0
  101. package/dist/generator/output.js +171 -0
  102. package/dist/generator/output.js.map +1 -0
  103. package/dist/generator/preservation.d.ts +45 -0
  104. package/dist/generator/preservation.d.ts.map +1 -0
  105. package/dist/generator/preservation.js +71 -0
  106. package/dist/generator/preservation.js.map +1 -0
  107. package/dist/generator/substitution.d.ts +79 -0
  108. package/dist/generator/substitution.d.ts.map +1 -0
  109. package/dist/generator/substitution.js +210 -0
  110. package/dist/generator/substitution.js.map +1 -0
  111. package/dist/generator/types.d.ts +162 -0
  112. package/dist/generator/types.d.ts.map +1 -0
  113. package/dist/generator/types.js +2 -0
  114. package/dist/generator/types.js.map +1 -0
  115. package/dist/generator/validation/cycle-detection.d.ts +25 -0
  116. package/dist/generator/validation/cycle-detection.d.ts.map +1 -0
  117. package/dist/generator/validation/cycle-detection.js +101 -0
  118. package/dist/generator/validation/cycle-detection.js.map +1 -0
  119. package/dist/generator/validation/enablement.d.ts +24 -0
  120. package/dist/generator/validation/enablement.d.ts.map +1 -0
  121. package/dist/generator/validation/enablement.js +69 -0
  122. package/dist/generator/validation/enablement.js.map +1 -0
  123. package/dist/generator/validation/graph.d.ts +29 -0
  124. package/dist/generator/validation/graph.d.ts.map +1 -0
  125. package/dist/generator/validation/graph.js +106 -0
  126. package/dist/generator/validation/graph.js.map +1 -0
  127. package/dist/generator/validation/index.d.ts +38 -0
  128. package/dist/generator/validation/index.d.ts.map +1 -0
  129. package/dist/generator/validation/index.js +64 -0
  130. package/dist/generator/validation/index.js.map +1 -0
  131. package/dist/generator/validation/reference.d.ts +45 -0
  132. package/dist/generator/validation/reference.d.ts.map +1 -0
  133. package/dist/generator/validation/reference.js +143 -0
  134. package/dist/generator/validation/reference.js.map +1 -0
  135. package/dist/generator/validation/requirements.d.ts +25 -0
  136. package/dist/generator/validation/requirements.d.ts.map +1 -0
  137. package/dist/generator/validation/requirements.js +64 -0
  138. package/dist/generator/validation/requirements.js.map +1 -0
  139. package/dist/generator/validation/types.d.ts +116 -0
  140. package/dist/generator/validation/types.d.ts.map +1 -0
  141. package/dist/generator/validation/types.js +13 -0
  142. package/dist/generator/validation/types.js.map +1 -0
  143. package/dist/k8s/exec.d.ts +20 -0
  144. package/dist/k8s/exec.d.ts.map +1 -0
  145. package/dist/k8s/exec.js +47 -0
  146. package/dist/k8s/exec.js.map +1 -0
  147. package/dist/k8s/flux.d.ts +57 -0
  148. package/dist/k8s/flux.d.ts.map +1 -0
  149. package/dist/k8s/flux.js +202 -0
  150. package/dist/k8s/flux.js.map +1 -0
  151. package/dist/k8s/index.d.ts +6 -0
  152. package/dist/k8s/index.d.ts.map +1 -0
  153. package/dist/k8s/index.js +6 -0
  154. package/dist/k8s/index.js.map +1 -0
  155. package/dist/k8s/kubeconfig.d.ts +45 -0
  156. package/dist/k8s/kubeconfig.d.ts.map +1 -0
  157. package/dist/k8s/kubeconfig.js +152 -0
  158. package/dist/k8s/kubeconfig.js.map +1 -0
  159. package/dist/k8s/kubectl.d.ts +68 -0
  160. package/dist/k8s/kubectl.d.ts.map +1 -0
  161. package/dist/k8s/kubectl.js +187 -0
  162. package/dist/k8s/kubectl.js.map +1 -0
  163. package/dist/k8s/types.d.ts +65 -0
  164. package/dist/k8s/types.d.ts.map +1 -0
  165. package/dist/k8s/types.js +2 -0
  166. package/dist/k8s/types.js.map +1 -0
  167. package/dist/loader/file.d.ts +39 -0
  168. package/dist/loader/file.d.ts.map +1 -0
  169. package/dist/loader/file.js +121 -0
  170. package/dist/loader/file.js.map +1 -0
  171. package/dist/loader/index.d.ts +5 -0
  172. package/dist/loader/index.d.ts.map +1 -0
  173. package/dist/loader/index.js +5 -0
  174. package/dist/loader/index.js.map +1 -0
  175. package/dist/loader/profile.d.ts +23 -0
  176. package/dist/loader/profile.d.ts.map +1 -0
  177. package/dist/loader/profile.js +84 -0
  178. package/dist/loader/profile.js.map +1 -0
  179. package/dist/loader/project.d.ts +76 -0
  180. package/dist/loader/project.d.ts.map +1 -0
  181. package/dist/loader/project.js +279 -0
  182. package/dist/loader/project.js.map +1 -0
  183. package/dist/loader/yaml.d.ts +15 -0
  184. package/dist/loader/yaml.d.ts.map +1 -0
  185. package/dist/loader/yaml.js +44 -0
  186. package/dist/loader/yaml.js.map +1 -0
  187. package/dist/nodes/index.d.ts +5 -0
  188. package/dist/nodes/index.d.ts.map +1 -0
  189. package/dist/nodes/index.js +5 -0
  190. package/dist/nodes/index.js.map +1 -0
  191. package/dist/nodes/kubectl-labeler.d.ts +7 -0
  192. package/dist/nodes/kubectl-labeler.d.ts.map +1 -0
  193. package/dist/nodes/kubectl-labeler.js +89 -0
  194. package/dist/nodes/kubectl-labeler.js.map +1 -0
  195. package/dist/nodes/labeler.d.ts +74 -0
  196. package/dist/nodes/labeler.d.ts.map +1 -0
  197. package/dist/nodes/labeler.js +118 -0
  198. package/dist/nodes/labeler.js.map +1 -0
  199. package/dist/nodes/profile.d.ts +58 -0
  200. package/dist/nodes/profile.d.ts.map +1 -0
  201. package/dist/nodes/profile.js +128 -0
  202. package/dist/nodes/profile.js.map +1 -0
  203. package/dist/nodes/types.d.ts +84 -0
  204. package/dist/nodes/types.d.ts.map +1 -0
  205. package/dist/nodes/types.js +77 -0
  206. package/dist/nodes/types.js.map +1 -0
  207. package/dist/plugins/generators.d.ts +49 -0
  208. package/dist/plugins/generators.d.ts.map +1 -0
  209. package/dist/plugins/generators.js +7 -0
  210. package/dist/plugins/generators.js.map +1 -0
  211. package/dist/plugins/hooks.d.ts +120 -0
  212. package/dist/plugins/hooks.d.ts.map +1 -0
  213. package/dist/plugins/hooks.js +41 -0
  214. package/dist/plugins/hooks.js.map +1 -0
  215. package/dist/plugins/index.d.ts +8 -0
  216. package/dist/plugins/index.d.ts.map +1 -0
  217. package/dist/plugins/index.js +15 -0
  218. package/dist/plugins/index.js.map +1 -0
  219. package/dist/plugins/loader.d.ts +40 -0
  220. package/dist/plugins/loader.d.ts.map +1 -0
  221. package/dist/plugins/loader.js +236 -0
  222. package/dist/plugins/loader.js.map +1 -0
  223. package/dist/plugins/object-types.d.ts +71 -0
  224. package/dist/plugins/object-types.d.ts.map +1 -0
  225. package/dist/plugins/object-types.js +65 -0
  226. package/dist/plugins/object-types.js.map +1 -0
  227. package/dist/plugins/registry.d.ts +87 -0
  228. package/dist/plugins/registry.d.ts.map +1 -0
  229. package/dist/plugins/registry.js +158 -0
  230. package/dist/plugins/registry.js.map +1 -0
  231. package/dist/plugins/substitution-providers.d.ts +48 -0
  232. package/dist/plugins/substitution-providers.d.ts.map +1 -0
  233. package/dist/plugins/substitution-providers.js +2 -0
  234. package/dist/plugins/substitution-providers.js.map +1 -0
  235. package/dist/plugins/types.d.ts +288 -0
  236. package/dist/plugins/types.d.ts.map +1 -0
  237. package/dist/plugins/types.js +25 -0
  238. package/dist/plugins/types.js.map +1 -0
  239. package/dist/registry/auth.d.ts +14 -0
  240. package/dist/registry/auth.d.ts.map +1 -0
  241. package/dist/registry/auth.js +40 -0
  242. package/dist/registry/auth.js.map +1 -0
  243. package/dist/registry/client.d.ts +24 -0
  244. package/dist/registry/client.d.ts.map +1 -0
  245. package/dist/registry/client.js +85 -0
  246. package/dist/registry/client.js.map +1 -0
  247. package/dist/registry/dockerhub.d.ts +6 -0
  248. package/dist/registry/dockerhub.d.ts.map +1 -0
  249. package/dist/registry/dockerhub.js +91 -0
  250. package/dist/registry/dockerhub.js.map +1 -0
  251. package/dist/registry/ghcr.d.ts +6 -0
  252. package/dist/registry/ghcr.d.ts.map +1 -0
  253. package/dist/registry/ghcr.js +95 -0
  254. package/dist/registry/ghcr.js.map +1 -0
  255. package/dist/registry/helm.d.ts +11 -0
  256. package/dist/registry/helm.d.ts.map +1 -0
  257. package/dist/registry/helm.js +124 -0
  258. package/dist/registry/helm.js.map +1 -0
  259. package/dist/registry/index.d.ts +8 -0
  260. package/dist/registry/index.d.ts.map +1 -0
  261. package/dist/registry/index.js +12 -0
  262. package/dist/registry/index.js.map +1 -0
  263. package/dist/registry/types.d.ts +55 -0
  264. package/dist/registry/types.d.ts.map +1 -0
  265. package/dist/registry/types.js +2 -0
  266. package/dist/registry/types.js.map +1 -0
  267. package/dist/registry/version.d.ts +22 -0
  268. package/dist/registry/version.d.ts.map +1 -0
  269. package/dist/registry/version.js +62 -0
  270. package/dist/registry/version.js.map +1 -0
  271. package/dist/schema/cluster.d.ts +2890 -0
  272. package/dist/schema/cluster.d.ts.map +1 -0
  273. package/dist/schema/cluster.js +231 -0
  274. package/dist/schema/cluster.js.map +1 -0
  275. package/dist/schema/common.d.ts +1059 -0
  276. package/dist/schema/common.d.ts.map +1 -0
  277. package/dist/schema/common.js +340 -0
  278. package/dist/schema/common.js.map +1 -0
  279. package/dist/schema/index.d.ts +8 -0
  280. package/dist/schema/index.d.ts.map +1 -0
  281. package/dist/schema/index.js +8 -0
  282. package/dist/schema/index.js.map +1 -0
  283. package/dist/schema/node-list.d.ts +361 -0
  284. package/dist/schema/node-list.d.ts.map +1 -0
  285. package/dist/schema/node-list.js +104 -0
  286. package/dist/schema/node-list.js.map +1 -0
  287. package/dist/schema/profile.d.ts +166 -0
  288. package/dist/schema/profile.d.ts.map +1 -0
  289. package/dist/schema/profile.js +61 -0
  290. package/dist/schema/profile.js.map +1 -0
  291. package/dist/schema/project.d.ts +168 -0
  292. package/dist/schema/project.d.ts.map +1 -0
  293. package/dist/schema/project.js +40 -0
  294. package/dist/schema/project.js.map +1 -0
  295. package/dist/schema/sources.d.ts +338 -0
  296. package/dist/schema/sources.d.ts.map +1 -0
  297. package/dist/schema/sources.js +111 -0
  298. package/dist/schema/sources.js.map +1 -0
  299. package/dist/schema/template.d.ts +2711 -0
  300. package/dist/schema/template.d.ts.map +1 -0
  301. package/dist/schema/template.js +97 -0
  302. package/dist/schema/template.js.map +1 -0
  303. package/dist/sources/cache/index.d.ts +9 -0
  304. package/dist/sources/cache/index.d.ts.map +1 -0
  305. package/dist/sources/cache/index.js +278 -0
  306. package/dist/sources/cache/index.js.map +1 -0
  307. package/dist/sources/cache/metadata.d.ts +36 -0
  308. package/dist/sources/cache/metadata.d.ts.map +1 -0
  309. package/dist/sources/cache/metadata.js +21 -0
  310. package/dist/sources/cache/metadata.js.map +1 -0
  311. package/dist/sources/cache/ttl.d.ts +20 -0
  312. package/dist/sources/cache/ttl.d.ts.map +1 -0
  313. package/dist/sources/cache/ttl.js +53 -0
  314. package/dist/sources/cache/ttl.js.map +1 -0
  315. package/dist/sources/fetchers/git.d.ts +6 -0
  316. package/dist/sources/fetchers/git.d.ts.map +1 -0
  317. package/dist/sources/fetchers/git.js +165 -0
  318. package/dist/sources/fetchers/git.js.map +1 -0
  319. package/dist/sources/fetchers/http.d.ts +6 -0
  320. package/dist/sources/fetchers/http.d.ts.map +1 -0
  321. package/dist/sources/fetchers/http.js +159 -0
  322. package/dist/sources/fetchers/http.js.map +1 -0
  323. package/dist/sources/fetchers/index.d.ts +11 -0
  324. package/dist/sources/fetchers/index.d.ts.map +1 -0
  325. package/dist/sources/fetchers/index.js +24 -0
  326. package/dist/sources/fetchers/index.js.map +1 -0
  327. package/dist/sources/fetchers/oci.d.ts +6 -0
  328. package/dist/sources/fetchers/oci.d.ts.map +1 -0
  329. package/dist/sources/fetchers/oci.js +156 -0
  330. package/dist/sources/fetchers/oci.js.map +1 -0
  331. package/dist/sources/fetchers/types.d.ts +25 -0
  332. package/dist/sources/fetchers/types.d.ts.map +1 -0
  333. package/dist/sources/fetchers/types.js +2 -0
  334. package/dist/sources/fetchers/types.js.map +1 -0
  335. package/dist/sources/index.d.ts +6 -0
  336. package/dist/sources/index.d.ts.map +1 -0
  337. package/dist/sources/index.js +10 -0
  338. package/dist/sources/index.js.map +1 -0
  339. package/dist/sources/loader.d.ts +34 -0
  340. package/dist/sources/loader.d.ts.map +1 -0
  341. package/dist/sources/loader.js +89 -0
  342. package/dist/sources/loader.js.map +1 -0
  343. package/dist/sources/resolver.d.ts +17 -0
  344. package/dist/sources/resolver.d.ts.map +1 -0
  345. package/dist/sources/resolver.js +125 -0
  346. package/dist/sources/resolver.js.map +1 -0
  347. package/dist/sources/types.d.ts +151 -0
  348. package/dist/sources/types.d.ts.map +1 -0
  349. package/dist/sources/types.js +2 -0
  350. package/dist/sources/types.js.map +1 -0
  351. package/package.json +101 -0
@@ -0,0 +1,152 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { failure, success } from '../core/index.js';
5
+ import { exec_command } from './exec.js';
6
+ /**
7
+ * Creates a kubeconfig manager.
8
+ */
9
+ export function create_kubeconfig_manager() {
10
+ function get_default_path() {
11
+ const kubeconfig_env = process.env['KUBECONFIG'];
12
+ if (kubeconfig_env) {
13
+ // Return first path if multiple are specified
14
+ return kubeconfig_env.split(path.delimiter)[0] ?? path.join(os.homedir(), '.kube', 'config');
15
+ }
16
+ return path.join(os.homedir(), '.kube', 'config');
17
+ }
18
+ return {
19
+ get_default_path,
20
+ async get_current_context() {
21
+ const result = await exec_command('kubectl', ['config', 'current-context']);
22
+ if (!result.success) {
23
+ return result;
24
+ }
25
+ if (result.value.exit_code !== 0) {
26
+ return failure({
27
+ code: 'KUBECONFIG_ERROR',
28
+ message: result.value.stderr || 'Failed to get current context',
29
+ });
30
+ }
31
+ return success(result.value.stdout);
32
+ },
33
+ async set_context(name) {
34
+ const result = await exec_command('kubectl', ['config', 'use-context', name]);
35
+ if (!result.success) {
36
+ return result;
37
+ }
38
+ if (result.value.exit_code !== 0) {
39
+ return failure({
40
+ code: 'KUBECONFIG_ERROR',
41
+ message: result.value.stderr || `Failed to set context to ${name}`,
42
+ });
43
+ }
44
+ return success(undefined);
45
+ },
46
+ async list_contexts() {
47
+ const result = await exec_command('kubectl', ['config', 'get-contexts', '-o', 'name']);
48
+ if (!result.success) {
49
+ return result;
50
+ }
51
+ if (result.value.exit_code !== 0) {
52
+ return failure({
53
+ code: 'KUBECONFIG_ERROR',
54
+ message: result.value.stderr || 'Failed to list contexts',
55
+ });
56
+ }
57
+ // Parse context names
58
+ const context_names = result.value.stdout.split('\n').filter(Boolean);
59
+ // Get details for each context
60
+ const contexts = [];
61
+ for (const name of context_names) {
62
+ const view_result = await exec_command('kubectl', [
63
+ 'config',
64
+ 'view',
65
+ '-o',
66
+ `jsonpath={.contexts[?(@.name=="${name}")]}`,
67
+ ]);
68
+ if (view_result.success && view_result.value.exit_code === 0) {
69
+ try {
70
+ const ctx = JSON.parse(view_result.value.stdout);
71
+ contexts.push({
72
+ name,
73
+ cluster: ctx.context?.cluster ?? '',
74
+ user: ctx.context?.user ?? '',
75
+ namespace: ctx.context?.namespace,
76
+ });
77
+ }
78
+ catch {
79
+ // If parsing fails, just add basic context info
80
+ contexts.push({ name, cluster: '', user: '' });
81
+ }
82
+ }
83
+ else {
84
+ contexts.push({ name, cluster: '', user: '' });
85
+ }
86
+ }
87
+ return success(contexts);
88
+ },
89
+ async exists(kubeconfig_path) {
90
+ const path_to_check = kubeconfig_path ?? get_default_path();
91
+ try {
92
+ await fs.access(path_to_check);
93
+ return true;
94
+ }
95
+ catch {
96
+ return false;
97
+ }
98
+ },
99
+ async merge(new_kubeconfig) {
100
+ const default_path = get_default_path();
101
+ // Ensure .kube directory exists
102
+ const kube_dir = path.dirname(default_path);
103
+ try {
104
+ await fs.mkdir(kube_dir, { recursive: true });
105
+ }
106
+ catch {
107
+ // Directory may already exist
108
+ }
109
+ // Check if default kubeconfig exists
110
+ const default_exists = await this.exists();
111
+ if (!default_exists) {
112
+ // If no existing kubeconfig, just copy the new one
113
+ try {
114
+ await fs.copyFile(new_kubeconfig, default_path);
115
+ return success(undefined);
116
+ }
117
+ catch (error) {
118
+ return failure({
119
+ code: 'KUBECONFIG_WRITE_ERROR',
120
+ message: `Failed to write kubeconfig: ${error.message}`,
121
+ });
122
+ }
123
+ }
124
+ // Merge using KUBECONFIG environment variable
125
+ const merged_config = `${default_path}${path.delimiter}${new_kubeconfig}`;
126
+ const result = await exec_command('kubectl', ['config', 'view', '--flatten'], {
127
+ env: { KUBECONFIG: merged_config },
128
+ });
129
+ if (!result.success) {
130
+ return result;
131
+ }
132
+ if (result.value.exit_code !== 0) {
133
+ return failure({
134
+ code: 'KUBECONFIG_MERGE_ERROR',
135
+ message: result.value.stderr || 'Failed to merge kubeconfig',
136
+ });
137
+ }
138
+ // Write merged config
139
+ try {
140
+ await fs.writeFile(default_path, result.value.stdout);
141
+ return success(undefined);
142
+ }
143
+ catch (error) {
144
+ return failure({
145
+ code: 'KUBECONFIG_WRITE_ERROR',
146
+ message: `Failed to write merged kubeconfig: ${error.message}`,
147
+ });
148
+ }
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=kubeconfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubeconfig.js","sourceRoot":"","sources":["../../src/k8s/kubeconfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { KustodianErrorType } from '../core/index.js';
2
+ import { type ResultType } from '../core/index.js';
3
+ import type { ApplyOptionsType, K8sResourceType, LogOptionsType } from './types.js';
4
+ /**
5
+ * Options for creating a KubectlClient.
6
+ */
7
+ export interface KubectlClientOptionsType {
8
+ kubeconfig?: string;
9
+ context?: string;
10
+ timeout?: number;
11
+ }
12
+ /**
13
+ * Kubernetes resource object (generic).
14
+ */
15
+ export interface K8sObjectType {
16
+ apiVersion: string;
17
+ kind: string;
18
+ metadata: {
19
+ name: string;
20
+ namespace?: string;
21
+ labels?: Record<string, string>;
22
+ annotations?: Record<string, string>;
23
+ };
24
+ spec?: unknown;
25
+ status?: unknown;
26
+ }
27
+ /**
28
+ * Kubectl client interface.
29
+ */
30
+ export interface KubectlClientType {
31
+ /**
32
+ * Applies manifests to the cluster.
33
+ */
34
+ apply(manifest: string, options?: ApplyOptionsType): Promise<ResultType<string, KustodianErrorType>>;
35
+ /**
36
+ * Gets resources from the cluster.
37
+ */
38
+ get(resource: K8sResourceType): Promise<ResultType<K8sObjectType[], KustodianErrorType>>;
39
+ /**
40
+ * Deletes resources from the cluster.
41
+ */
42
+ delete(resource: K8sResourceType): Promise<ResultType<void, KustodianErrorType>>;
43
+ /**
44
+ * Labels a node.
45
+ */
46
+ label(node: string, labels: Record<string, string>): Promise<ResultType<void, KustodianErrorType>>;
47
+ /**
48
+ * Annotates a resource.
49
+ */
50
+ annotate(resource: K8sResourceType, annotations: Record<string, string>): Promise<ResultType<void, KustodianErrorType>>;
51
+ /**
52
+ * Waits for a resource to reach a condition.
53
+ */
54
+ wait(resource: K8sResourceType, condition: string, timeout_seconds?: number): Promise<ResultType<void, KustodianErrorType>>;
55
+ /**
56
+ * Gets logs from a pod.
57
+ */
58
+ logs(pod: string, namespace: string, options?: LogOptionsType): Promise<ResultType<string, KustodianErrorType>>;
59
+ /**
60
+ * Checks if kubectl is available.
61
+ */
62
+ check(): Promise<ResultType<boolean, KustodianErrorType>>;
63
+ }
64
+ /**
65
+ * Creates a kubectl client.
66
+ */
67
+ export declare function create_kubectl_client(options?: KubectlClientOptionsType): KubectlClientType;
68
+ //# sourceMappingURL=kubectl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubectl.d.ts","sourceRoot":"","sources":["../../src/k8s/kubectl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAGrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEnD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEzF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,QAAQ,CACN,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,IAAI,CACF,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,IAAI,CACF,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEnD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,wBAA6B,GAAG,iBAAiB,CAyN/F"}
@@ -0,0 +1,187 @@
1
+ import { failure, success } from '../core/index.js';
2
+ import { check_command, exec_command } from './exec.js';
3
+ /**
4
+ * Creates a kubectl client.
5
+ */
6
+ export function create_kubectl_client(options = {}) {
7
+ const base_args = [];
8
+ if (options.kubeconfig) {
9
+ base_args.push(`--kubeconfig=${options.kubeconfig}`);
10
+ }
11
+ if (options.context) {
12
+ base_args.push(`--context=${options.context}`);
13
+ }
14
+ const exec_options = {
15
+ timeout: options.timeout ?? 60000,
16
+ };
17
+ return {
18
+ async apply(manifest, apply_options = {}) {
19
+ const args = [...base_args, 'apply', '-f', manifest];
20
+ if (apply_options.dry_run) {
21
+ args.push('--dry-run=client');
22
+ }
23
+ if (apply_options.server_side) {
24
+ args.push('--server-side');
25
+ }
26
+ if (apply_options.force_conflicts) {
27
+ args.push('--force-conflicts');
28
+ }
29
+ const result = await exec_command('kubectl', args, exec_options);
30
+ if (!result.success) {
31
+ return result;
32
+ }
33
+ if (result.value.exit_code !== 0) {
34
+ return failure({
35
+ code: 'KUBECTL_APPLY_ERROR',
36
+ message: result.value.stderr || 'Failed to apply manifest',
37
+ });
38
+ }
39
+ return success(result.value.stdout);
40
+ },
41
+ async get(resource) {
42
+ const args = [...base_args, 'get', resource.kind.toLowerCase()];
43
+ if (resource.name) {
44
+ args.push(resource.name);
45
+ }
46
+ if (resource.namespace) {
47
+ args.push('-n', resource.namespace);
48
+ }
49
+ args.push('-o', 'json');
50
+ const result = await exec_command('kubectl', args, exec_options);
51
+ if (!result.success) {
52
+ return result;
53
+ }
54
+ if (result.value.exit_code !== 0) {
55
+ return failure({
56
+ code: 'KUBECTL_GET_ERROR',
57
+ message: result.value.stderr || 'Failed to get resource',
58
+ });
59
+ }
60
+ try {
61
+ const parsed = JSON.parse(result.value.stdout);
62
+ // Handle both single resource and list responses
63
+ if (parsed.kind?.endsWith('List')) {
64
+ return success(parsed.items);
65
+ }
66
+ return success([parsed]);
67
+ }
68
+ catch {
69
+ return failure({
70
+ code: 'KUBECTL_PARSE_ERROR',
71
+ message: 'Failed to parse kubectl output',
72
+ });
73
+ }
74
+ },
75
+ async delete(resource) {
76
+ const args = [...base_args, 'delete', resource.kind.toLowerCase(), resource.name];
77
+ if (resource.namespace) {
78
+ args.push('-n', resource.namespace);
79
+ }
80
+ const result = await exec_command('kubectl', args, exec_options);
81
+ if (!result.success) {
82
+ return result;
83
+ }
84
+ if (result.value.exit_code !== 0) {
85
+ return failure({
86
+ code: 'KUBECTL_DELETE_ERROR',
87
+ message: result.value.stderr || 'Failed to delete resource',
88
+ });
89
+ }
90
+ return success(undefined);
91
+ },
92
+ async label(node, labels) {
93
+ const label_args = Object.entries(labels).map(([k, v]) => `${k}=${v}`);
94
+ const args = [...base_args, 'label', 'node', node, ...label_args, '--overwrite'];
95
+ const result = await exec_command('kubectl', args, exec_options);
96
+ if (!result.success) {
97
+ return result;
98
+ }
99
+ if (result.value.exit_code !== 0) {
100
+ return failure({
101
+ code: 'KUBECTL_LABEL_ERROR',
102
+ message: result.value.stderr || 'Failed to label node',
103
+ });
104
+ }
105
+ return success(undefined);
106
+ },
107
+ async annotate(resource, annotations) {
108
+ const annotation_args = Object.entries(annotations).map(([k, v]) => `${k}=${v}`);
109
+ const args = [
110
+ ...base_args,
111
+ 'annotate',
112
+ resource.kind.toLowerCase(),
113
+ resource.name,
114
+ ...annotation_args,
115
+ '--overwrite',
116
+ ];
117
+ if (resource.namespace) {
118
+ args.push('-n', resource.namespace);
119
+ }
120
+ const result = await exec_command('kubectl', args, exec_options);
121
+ if (!result.success) {
122
+ return result;
123
+ }
124
+ if (result.value.exit_code !== 0) {
125
+ return failure({
126
+ code: 'KUBECTL_ANNOTATE_ERROR',
127
+ message: result.value.stderr || 'Failed to annotate resource',
128
+ });
129
+ }
130
+ return success(undefined);
131
+ },
132
+ async wait(resource, condition, timeout_seconds = 300) {
133
+ const args = [
134
+ ...base_args,
135
+ 'wait',
136
+ `${resource.kind.toLowerCase()}/${resource.name}`,
137
+ `--for=${condition}`,
138
+ `--timeout=${timeout_seconds}s`,
139
+ ];
140
+ if (resource.namespace) {
141
+ args.push('-n', resource.namespace);
142
+ }
143
+ const result = await exec_command('kubectl', args, {
144
+ ...exec_options,
145
+ timeout: (timeout_seconds + 10) * 1000,
146
+ });
147
+ if (!result.success) {
148
+ return result;
149
+ }
150
+ if (result.value.exit_code !== 0) {
151
+ return failure({
152
+ code: 'KUBECTL_WAIT_ERROR',
153
+ message: result.value.stderr || 'Timeout waiting for condition',
154
+ });
155
+ }
156
+ return success(undefined);
157
+ },
158
+ async logs(pod, namespace, log_options = {}) {
159
+ const args = [...base_args, 'logs', pod, '-n', namespace];
160
+ if (log_options.tail) {
161
+ args.push(`--tail=${log_options.tail}`);
162
+ }
163
+ if (log_options.container) {
164
+ args.push('-c', log_options.container);
165
+ }
166
+ if (log_options.previous) {
167
+ args.push('--previous');
168
+ }
169
+ const result = await exec_command('kubectl', args, exec_options);
170
+ if (!result.success) {
171
+ return result;
172
+ }
173
+ if (result.value.exit_code !== 0) {
174
+ return failure({
175
+ code: 'KUBECTL_LOGS_ERROR',
176
+ message: result.value.stderr || 'Failed to get logs',
177
+ });
178
+ }
179
+ return success(result.value.stdout);
180
+ },
181
+ async check() {
182
+ const available = await check_command('kubectl');
183
+ return success(available);
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=kubectl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubectl.js","sourceRoot":"","sources":["../../src/k8s/kubectl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Kubernetes resource reference.
3
+ */
4
+ export interface K8sResourceType {
5
+ kind: string;
6
+ name: string;
7
+ namespace?: string;
8
+ }
9
+ /**
10
+ * Flux resource reference.
11
+ */
12
+ export interface FluxResourceType {
13
+ kind: 'Kustomization' | 'GitRepository' | 'OCIRepository' | 'HelmRelease' | 'HelmRepository';
14
+ name: string;
15
+ namespace?: string;
16
+ }
17
+ /**
18
+ * Flux bootstrap options.
19
+ */
20
+ export interface FluxBootstrapOptionsType {
21
+ provider: 'github' | 'gitlab' | 'bitbucket';
22
+ owner: string;
23
+ repository: string;
24
+ path: string;
25
+ branch?: string;
26
+ personal?: boolean;
27
+ }
28
+ /**
29
+ * Flux status information.
30
+ */
31
+ export interface FluxStatusType {
32
+ installed: boolean;
33
+ version?: string;
34
+ components: {
35
+ name: string;
36
+ ready: boolean;
37
+ message?: string;
38
+ }[];
39
+ }
40
+ /**
41
+ * Kubectl apply options.
42
+ */
43
+ export interface ApplyOptionsType {
44
+ dry_run?: boolean;
45
+ server_side?: boolean;
46
+ force_conflicts?: boolean;
47
+ }
48
+ /**
49
+ * Log options for kubectl logs.
50
+ */
51
+ export interface LogOptionsType {
52
+ tail?: number;
53
+ follow?: boolean;
54
+ container?: string;
55
+ previous?: boolean;
56
+ }
57
+ /**
58
+ * Command execution result.
59
+ */
60
+ export interface ExecResultType {
61
+ exit_code: number;
62
+ stdout: string;
63
+ stderr: string;
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/k8s/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/k8s/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import type { KustodianErrorType } from '../core/index.js';
2
+ import { type ResultType } from '../core/index.js';
3
+ /**
4
+ * Checks if a file exists.
5
+ */
6
+ export declare function file_exists(file_path: string): Promise<boolean>;
7
+ /**
8
+ * Checks if a path is a directory.
9
+ */
10
+ export declare function is_directory(dir_path: string): Promise<boolean>;
11
+ /**
12
+ * Reads a file and returns its contents as a string.
13
+ */
14
+ export declare function read_file(file_path: string): Promise<ResultType<string, KustodianErrorType>>;
15
+ /**
16
+ * Writes content to a file, creating directories as needed.
17
+ */
18
+ export declare function write_file(file_path: string, content: string): Promise<ResultType<void, KustodianErrorType>>;
19
+ /**
20
+ * Reads a YAML file and parses it.
21
+ */
22
+ export declare function read_yaml_file<T>(file_path: string): Promise<ResultType<T, KustodianErrorType>>;
23
+ /**
24
+ * Reads a multi-document YAML file and parses it.
25
+ */
26
+ export declare function read_multi_yaml_file<T>(file_path: string): Promise<ResultType<T[], KustodianErrorType>>;
27
+ /**
28
+ * Writes an object to a YAML file.
29
+ */
30
+ export declare function write_yaml_file<T>(file_path: string, data: T): Promise<ResultType<void, KustodianErrorType>>;
31
+ /**
32
+ * Lists all files in a directory matching a pattern.
33
+ */
34
+ export declare function list_files(dir_path: string, extension?: string): Promise<ResultType<string[], KustodianErrorType>>;
35
+ /**
36
+ * Lists all subdirectories in a directory.
37
+ */
38
+ export declare function list_directories(dir_path: string): Promise<ResultType<string[], KustodianErrorType>>;
39
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/loader/file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAU,KAAK,UAAU,EAAkC,MAAM,kBAAkB,CAAC;AAI3F;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CASjD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAS/C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAO5C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAQ9C;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAO/C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAkBnD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAcnD"}