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,294 @@
1
+ import { generate_preservation_patches, get_preserved_resource_types } from './preservation.js';
2
+ import { collect_all_substitution_values } from './substitution.js';
3
+ import { is_parse_error, parse_dependency_ref } from './validation/reference.js';
4
+ import { is_raw_dependency_ref } from './validation/types.js';
5
+ /**
6
+ * Default interval for Flux reconciliation.
7
+ */
8
+ export const DEFAULT_INTERVAL = '10m';
9
+ /**
10
+ * Default timeout for Flux reconciliation.
11
+ */
12
+ export const DEFAULT_TIMEOUT = '5m';
13
+ /**
14
+ * Generates a Flux Kustomization name from template and kustomization.
15
+ */
16
+ export function generate_flux_name(template_name, kustomization_name) {
17
+ return `${template_name}-${kustomization_name}`;
18
+ }
19
+ /**
20
+ * Generates the path for a Flux Kustomization.
21
+ * @param template_name - The template name (used if template_source_path not provided)
22
+ * @param kustomization_path - The kustomization's relative path
23
+ * @param base_path - Base path prefix (default: './templates')
24
+ * @param template_source_path - Optional actual source path relative to templates dir
25
+ */
26
+ export function generate_flux_path(template_name, kustomization_path, base_path = './templates', template_source_path) {
27
+ // Normalize the path
28
+ const normalized = kustomization_path.replace(/^\.\//, '');
29
+ // Use actual source path if provided, otherwise fall back to template name
30
+ const template_dir = template_source_path ?? template_name;
31
+ return `${base_path}/${template_dir}/${normalized}`;
32
+ }
33
+ /**
34
+ * Generates the dependency references for a Flux Kustomization.
35
+ *
36
+ * Supports three formats:
37
+ * - Within-template: `database` → uses current template name
38
+ * - Cross-template: `secrets/doppler` → uses explicit template name
39
+ * - Raw external: `{ raw: { name: 'legacy-infrastructure', namespace: 'gitops-system' } }`
40
+ */
41
+ export function generate_depends_on(template_name, depends_on) {
42
+ if (!depends_on || depends_on.length === 0) {
43
+ return undefined;
44
+ }
45
+ return depends_on.map((dep) => {
46
+ const parsed = parse_dependency_ref(dep);
47
+ if (is_parse_error(parsed)) {
48
+ // Invalid references are caught during validation, fall back to current behavior
49
+ // This should only happen with string refs
50
+ if (typeof dep === 'string') {
51
+ return { name: generate_flux_name(template_name, dep) };
52
+ }
53
+ // If somehow we have an invalid object ref, use a placeholder
54
+ return { name: 'invalid-reference' };
55
+ }
56
+ // Handle raw dependencies - pass through name and namespace directly
57
+ if (is_raw_dependency_ref(parsed)) {
58
+ return {
59
+ name: parsed.name,
60
+ namespace: parsed.namespace,
61
+ };
62
+ }
63
+ // Handle string-based dependencies (within-template and cross-template)
64
+ const effective_template = parsed.template ?? template_name;
65
+ return { name: generate_flux_name(effective_template, parsed.kustomization) };
66
+ });
67
+ }
68
+ /**
69
+ * Generates health checks for a Flux Kustomization.
70
+ */
71
+ export function generate_health_checks(kustomization, namespace) {
72
+ if (!kustomization.health_checks || kustomization.health_checks.length === 0) {
73
+ return undefined;
74
+ }
75
+ return kustomization.health_checks.map((check) => ({
76
+ apiVersion: check.api_version ?? 'apps/v1',
77
+ kind: check.kind,
78
+ name: check.name,
79
+ namespace: check.namespace ?? namespace,
80
+ }));
81
+ }
82
+ /**
83
+ * Generates custom health checks with CEL expressions for a Flux Kustomization.
84
+ */
85
+ export function generate_custom_health_checks(kustomization, namespace) {
86
+ if (!kustomization.health_check_exprs || kustomization.health_check_exprs.length === 0) {
87
+ return undefined;
88
+ }
89
+ return kustomization.health_check_exprs.map((check) => {
90
+ const healthCheck = {
91
+ apiVersion: check.api_version,
92
+ kind: check.kind,
93
+ namespace: check.namespace ?? namespace,
94
+ };
95
+ if (check.current !== undefined) {
96
+ healthCheck.current = check.current;
97
+ }
98
+ if (check.failed !== undefined) {
99
+ healthCheck.failed = check.failed;
100
+ }
101
+ return healthCheck;
102
+ });
103
+ }
104
+ /**
105
+ * Generates a Flux OCIRepository resource.
106
+ */
107
+ export function generate_flux_oci_repository(cluster, oci_config, repository_name, flux_namespace, interval = DEFAULT_INTERVAL) {
108
+ const url = `oci://${oci_config.registry}/${oci_config.repository}`;
109
+ const ref = {};
110
+ switch (oci_config.tag_strategy) {
111
+ case 'cluster':
112
+ ref.tag = cluster.metadata.name;
113
+ break;
114
+ case 'manual':
115
+ ref.tag = oci_config.tag || 'latest';
116
+ break;
117
+ default:
118
+ ref.tag = 'latest'; // CI will update this
119
+ }
120
+ const spec = {
121
+ interval,
122
+ url,
123
+ ref,
124
+ provider: oci_config.provider || 'generic',
125
+ };
126
+ if (oci_config.secret_ref) {
127
+ spec.secretRef = { name: oci_config.secret_ref };
128
+ }
129
+ if (oci_config.insecure) {
130
+ spec.insecure = true;
131
+ }
132
+ return {
133
+ apiVersion: 'source.toolkit.fluxcd.io/v1',
134
+ kind: 'OCIRepository',
135
+ metadata: {
136
+ name: repository_name,
137
+ namespace: flux_namespace,
138
+ },
139
+ spec,
140
+ };
141
+ }
142
+ /**
143
+ * Generates a Flux Kustomization resource.
144
+ */
145
+ export function generate_flux_kustomization(resolved, source_repository_name = 'flux-system', source_kind = 'GitRepository', preservation, template_source_path, interval = DEFAULT_INTERVAL, timeout = DEFAULT_TIMEOUT) {
146
+ const { template, kustomization, values, namespace } = resolved;
147
+ const name = generate_flux_name(template.metadata.name, kustomization.name);
148
+ const path = generate_flux_path(template.metadata.name, kustomization.path, './templates', template_source_path);
149
+ const spec = {
150
+ interval,
151
+ targetNamespace: namespace,
152
+ path,
153
+ prune: kustomization.prune ?? true,
154
+ wait: kustomization.wait ?? true,
155
+ sourceRef: {
156
+ kind: source_kind,
157
+ name: source_repository_name,
158
+ },
159
+ };
160
+ // Add preservation patches if preservation is configured
161
+ if (preservation) {
162
+ const preserved_types = get_preserved_resource_types(preservation);
163
+ if (preserved_types.length > 0) {
164
+ const patches = generate_preservation_patches(preserved_types);
165
+ spec.patches = patches;
166
+ }
167
+ }
168
+ // Add timeout if specified
169
+ if (kustomization.timeout) {
170
+ spec.timeout = kustomization.timeout;
171
+ }
172
+ else {
173
+ spec.timeout = timeout;
174
+ }
175
+ // Add retry interval if specified
176
+ if (kustomization.retry_interval) {
177
+ spec.retryInterval = kustomization.retry_interval;
178
+ }
179
+ // Add dependencies
180
+ const depends_on = generate_depends_on(template.metadata.name, kustomization.depends_on);
181
+ if (depends_on) {
182
+ spec.dependsOn = depends_on;
183
+ }
184
+ // Add substitutions if there are values
185
+ if (Object.keys(values).length > 0) {
186
+ spec.postBuild = {
187
+ substitute: values,
188
+ };
189
+ }
190
+ // Add health checks
191
+ const health_checks = generate_health_checks(kustomization, namespace);
192
+ if (health_checks) {
193
+ spec.healthChecks = health_checks;
194
+ }
195
+ // Add custom health checks with CEL expressions
196
+ const custom_health_checks = generate_custom_health_checks(kustomization, namespace);
197
+ if (custom_health_checks) {
198
+ spec.customHealthChecks = custom_health_checks;
199
+ }
200
+ return {
201
+ apiVersion: 'kustomize.toolkit.fluxcd.io/v1',
202
+ kind: 'Kustomization',
203
+ metadata: {
204
+ name,
205
+ namespace: 'flux-system',
206
+ },
207
+ spec,
208
+ };
209
+ }
210
+ /**
211
+ * Resolves a kustomization with values from the cluster config.
212
+ * Includes both template-level versions and kustomization-level substitutions.
213
+ */
214
+ export function resolve_kustomization(template, kustomization, cluster_values = {}) {
215
+ // Collect values from template versions and kustomization substitutions
216
+ const values = collect_all_substitution_values(template, kustomization, cluster_values);
217
+ // Determine namespace
218
+ const namespace = kustomization.namespace?.default ?? 'default';
219
+ // Add namespace to substitution values so ${namespace} works in templates
220
+ values['namespace'] = namespace;
221
+ return {
222
+ template,
223
+ kustomization,
224
+ values,
225
+ namespace,
226
+ };
227
+ }
228
+ /**
229
+ * Gets effective settings for a controller by merging global and controller-specific settings.
230
+ */
231
+ function get_effective_controller_settings(flux_config, controller_key) {
232
+ const controllers = flux_config.controllers;
233
+ if (!controllers) {
234
+ return {};
235
+ }
236
+ const global_concurrent = controllers.concurrent;
237
+ const global_requeue = controllers.requeue_dependency;
238
+ const controller_settings = controllers[controller_key];
239
+ return {
240
+ concurrent: controller_settings?.concurrent ?? global_concurrent,
241
+ requeue_dependency: controller_settings?.requeue_dependency ?? global_requeue,
242
+ };
243
+ }
244
+ /**
245
+ * Builds JSON patch operations for a controller based on its settings.
246
+ */
247
+ function build_controller_patch_ops(settings) {
248
+ const ops = [];
249
+ if (settings.concurrent !== undefined) {
250
+ ops.push({
251
+ op: 'add',
252
+ path: '/spec/template/spec/containers/0/args/-',
253
+ value: `--concurrent=${settings.concurrent}`,
254
+ });
255
+ }
256
+ if (settings.requeue_dependency !== undefined) {
257
+ ops.push({
258
+ op: 'add',
259
+ path: '/spec/template/spec/containers/0/args/-',
260
+ value: `--requeue-dependency=${settings.requeue_dependency}`,
261
+ });
262
+ }
263
+ return ops;
264
+ }
265
+ /**
266
+ * Generates Kustomize patches for Flux controllers based on cluster configuration.
267
+ * These patches are applied to the gotk-components during Flux bootstrap/install.
268
+ */
269
+ export function generate_flux_controller_patches(flux_config) {
270
+ if (!flux_config.controllers) {
271
+ return undefined;
272
+ }
273
+ const controller_mapping = [
274
+ { key: 'kustomize_controller', name: 'kustomize-controller' },
275
+ { key: 'helm_controller', name: 'helm-controller' },
276
+ { key: 'source_controller', name: 'source-controller' },
277
+ ];
278
+ const patches = [];
279
+ for (const { key, name } of controller_mapping) {
280
+ const settings = get_effective_controller_settings(flux_config, key);
281
+ const ops = build_controller_patch_ops(settings);
282
+ if (ops.length > 0) {
283
+ patches.push({
284
+ patch: JSON.stringify(ops),
285
+ target: {
286
+ kind: 'Deployment',
287
+ name,
288
+ },
289
+ });
290
+ }
291
+ }
292
+ return patches.length > 0 ? patches : undefined;
293
+ }
294
+ //# sourceMappingURL=flux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flux.js","sourceRoot":"","sources":["../../src/generator/flux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { KustodianErrorType } from '../core/index.js';
2
+ import { type ResultType } from '../core/index.js';
3
+ import type { GeneratedResourceType, LegacyPluginRegistryType, PluginRegistryType } from '../plugins/index.js';
4
+ import type { ClusterType, TemplateType } from '../schema/index.js';
5
+ import { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization } from './flux.js';
6
+ import { generate_namespace_resources } from './namespace.js';
7
+ import { serialize_resource, serialize_resources } from './output.js';
8
+ import type { FluxKustomizationType, GenerateOptionsType, GenerationResultType, ResolvedKustomizationType, ResolvedTemplateType } from './types.js';
9
+ /**
10
+ * Options for the Generator.
11
+ */
12
+ export interface GeneratorOptionsType {
13
+ flux_namespace?: string;
14
+ git_repository_name?: string;
15
+ base_path?: string;
16
+ /** Map of template names to their source paths (relative to project root) */
17
+ template_paths?: Map<string, string>;
18
+ /** Reconciliation interval for Flux resources */
19
+ flux_reconciliation_interval?: string;
20
+ /** Timeout for Flux reconciliation */
21
+ flux_reconciliation_timeout?: string;
22
+ }
23
+ /**
24
+ * Generator hook phases.
25
+ */
26
+ export type GeneratorHookPhaseType = 'before_generate' | 'after_resolve_template' | 'after_generate_kustomization' | 'after_generate';
27
+ /**
28
+ * Hook handler function type.
29
+ */
30
+ export type GeneratorHookHandlerType = (phase: GeneratorHookPhaseType, context: GeneratorHookContextType) => void | Promise<void>;
31
+ /**
32
+ * Context passed to generator hooks.
33
+ */
34
+ export interface GeneratorHookContextType {
35
+ cluster: ClusterType;
36
+ templates?: ResolvedTemplateType[];
37
+ kustomization?: ResolvedKustomizationType;
38
+ flux_kustomization?: FluxKustomizationType;
39
+ result?: GenerationResultType;
40
+ }
41
+ /**
42
+ * Generator class for processing templates into Flux resources.
43
+ */
44
+ export interface GeneratorType {
45
+ /**
46
+ * Registers a hook handler.
47
+ */
48
+ on_hook(handler: GeneratorHookHandlerType): void;
49
+ /**
50
+ * Resolves templates for a cluster.
51
+ */
52
+ resolve_templates(cluster: ClusterType, templates: TemplateType[]): ResolvedTemplateType[];
53
+ /**
54
+ * Generates Flux resources for a cluster.
55
+ */
56
+ generate(cluster: ClusterType, templates: TemplateType[], options?: GenerateOptionsType): Promise<ResultType<GenerationResultType, KustodianErrorType>>;
57
+ /**
58
+ * Generates resources from plugins.
59
+ */
60
+ generate_plugin_resources(cluster: ClusterType, templates: ResolvedTemplateType[]): ResultType<GeneratedResourceType[], KustodianErrorType>;
61
+ /**
62
+ * Writes generation result to disk.
63
+ */
64
+ write(result: GenerationResultType): Promise<ResultType<string[], KustodianErrorType>>;
65
+ }
66
+ /**
67
+ * Creates a new Generator instance.
68
+ *
69
+ * @param options - Generator configuration options
70
+ * @param legacy_registry - Legacy plugin registry (deprecated, for backward compatibility)
71
+ * @param registry - New plugin registry with substitution provider support
72
+ */
73
+ export declare function create_generator(options?: GeneratorOptionsType, legacy_registry?: LegacyPluginRegistryType, registry?: PluginRegistryType): GeneratorType;
74
+ export { serialize_resource, serialize_resources };
75
+ export { generate_namespace_resources };
76
+ export { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization, };
77
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/generator/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { is_success, success } from '../core/index.js';
2
+ import { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_controller_patches, generate_flux_kustomization, generate_flux_name, generate_flux_oci_repository, generate_health_checks, resolve_kustomization, } from './flux.js';
3
+ import { get_template_config, resolve_kustomization_state } from './kustomization-resolution.js';
4
+ import { generate_namespace_resources } from './namespace.js';
5
+ import { serialize_resource, serialize_resources, write_generation_result } from './output.js';
6
+ import { resolve_external_substitutions } from './substitution.js';
7
+ import { validate_dependencies } from './validation/index.js';
8
+ /**
9
+ * Creates a new Generator instance.
10
+ *
11
+ * @param options - Generator configuration options
12
+ * @param legacy_registry - Legacy plugin registry (deprecated, for backward compatibility)
13
+ * @param registry - New plugin registry with substitution provider support
14
+ */
15
+ export function create_generator(options = {}, legacy_registry, registry) {
16
+ const flux_namespace = options.flux_namespace ?? 'flux-system';
17
+ const git_repository_name = options.git_repository_name ?? 'flux-system';
18
+ // base_path is available for future template path customization
19
+ const _base_path = options.base_path ?? './templates';
20
+ void _base_path; // Suppress unused variable warning
21
+ const template_paths = options.template_paths;
22
+ const flux_reconciliation_interval = options.flux_reconciliation_interval ?? '10m';
23
+ const flux_reconciliation_timeout = options.flux_reconciliation_timeout ?? '5m';
24
+ const hooks = [];
25
+ async function run_hooks(phase, context) {
26
+ for (const handler of hooks) {
27
+ await handler(phase, context);
28
+ }
29
+ }
30
+ function get_template_values(cluster, template_name) {
31
+ const template_config = cluster.spec.templates?.find((t) => t.name === template_name);
32
+ return template_config?.values ?? {};
33
+ }
34
+ function is_template_enabled(cluster, template_name) {
35
+ // Templates are only enabled if explicitly listed in cluster.yaml
36
+ // Templates not listed are NOT deployed (opt-in model)
37
+ const template_config = cluster.spec.templates?.find((t) => t.name === template_name);
38
+ return template_config !== undefined;
39
+ }
40
+ return {
41
+ on_hook(handler) {
42
+ hooks.push(handler);
43
+ },
44
+ resolve_templates(cluster, templates) {
45
+ return templates.map((template) => {
46
+ const values = get_template_values(cluster, template.metadata.name);
47
+ const enabled = is_template_enabled(cluster, template.metadata.name);
48
+ return {
49
+ template,
50
+ values,
51
+ enabled,
52
+ };
53
+ });
54
+ },
55
+ async generate(cluster, templates, generate_options = {}) {
56
+ const output_dir = generate_options.output_dir ?? './output';
57
+ const skip_validation = generate_options.skip_validation ?? false;
58
+ // Validate dependency graph before generation (unless skipped)
59
+ if (!skip_validation) {
60
+ const validation_result = validate_dependencies(cluster, templates);
61
+ if (!validation_result.success) {
62
+ return validation_result;
63
+ }
64
+ }
65
+ // Detect source kind and repository name
66
+ const source_kind = cluster.spec.oci ? 'OCIRepository' : 'GitRepository';
67
+ const source_repository_name = git_repository_name;
68
+ // Run before_generate hook
69
+ await run_hooks('before_generate', { cluster });
70
+ // Resolve templates
71
+ const resolved_templates = this.resolve_templates(cluster, templates);
72
+ // Run after_resolve_template hook for each
73
+ for (const resolved of resolved_templates) {
74
+ await run_hooks('after_resolve_template', {
75
+ cluster,
76
+ templates: [resolved],
77
+ });
78
+ }
79
+ // Resolve external substitutions via plugins (if registry provided)
80
+ const external_values = {};
81
+ if (registry) {
82
+ const external_result = await resolve_external_substitutions(resolved_templates, cluster, registry);
83
+ if (!is_success(external_result)) {
84
+ return external_result;
85
+ }
86
+ Object.assign(external_values, external_result.value);
87
+ }
88
+ // Generate kustomizations
89
+ const generated_kustomizations = [];
90
+ for (const resolved of resolved_templates) {
91
+ if (!resolved.enabled) {
92
+ continue;
93
+ }
94
+ // Get template configuration from cluster for kustomization overrides
95
+ const template_config = get_template_config(cluster, resolved.template.metadata.name);
96
+ for (const kustomization of resolved.template.spec.kustomizations) {
97
+ // Resolve kustomization state (preservation policy)
98
+ const kustomization_state = resolve_kustomization_state(kustomization, template_config, kustomization.name);
99
+ // Merge external (plugin-provided) values with template values
100
+ // External values have lower precedence than template-specific values
101
+ const merged_values = {
102
+ ...external_values,
103
+ ...resolved.values,
104
+ };
105
+ const resolved_kustomization = resolve_kustomization(resolved.template, kustomization, merged_values);
106
+ // Generate Flux resource with configurable namespace
107
+ // Look up the template source path if available
108
+ const template_source_path = template_paths?.get(resolved.template.metadata.name);
109
+ const flux_kustomization = generate_flux_kustomization(resolved_kustomization, source_repository_name, source_kind, kustomization_state.preservation, template_source_path, flux_reconciliation_interval, flux_reconciliation_timeout);
110
+ // Override namespace to configured value
111
+ flux_kustomization.metadata.namespace = flux_namespace;
112
+ // Run after_generate_kustomization hook
113
+ await run_hooks('after_generate_kustomization', {
114
+ cluster,
115
+ kustomization: resolved_kustomization,
116
+ flux_kustomization,
117
+ });
118
+ generated_kustomizations.push({
119
+ name: flux_kustomization.metadata.name,
120
+ template: resolved.template.metadata.name,
121
+ path: flux_kustomization.spec.path,
122
+ flux_kustomization,
123
+ });
124
+ }
125
+ }
126
+ const result = {
127
+ cluster: cluster.metadata.name,
128
+ output_dir,
129
+ kustomizations: generated_kustomizations,
130
+ };
131
+ // Generate OCIRepository if using OCI mode
132
+ if (cluster.spec.oci) {
133
+ result.oci_repository = generate_flux_oci_repository(cluster, cluster.spec.oci, source_repository_name, flux_namespace, flux_reconciliation_interval);
134
+ }
135
+ // Generate controller patches if flux config is present
136
+ if (cluster.spec.flux) {
137
+ const patches = generate_flux_controller_patches(cluster.spec.flux);
138
+ if (patches) {
139
+ result.controller_patches = patches;
140
+ }
141
+ }
142
+ // Run after_generate hook
143
+ await run_hooks('after_generate', {
144
+ cluster,
145
+ templates: resolved_templates,
146
+ result,
147
+ });
148
+ return success(result);
149
+ },
150
+ generate_plugin_resources(cluster, templates) {
151
+ if (!legacy_registry) {
152
+ return success([]);
153
+ }
154
+ const all_resources = [];
155
+ // Generate resources from legacy plugins
156
+ for (const generator of legacy_registry.get_resource_generators()) {
157
+ for (const resolved of templates) {
158
+ if (!resolved.enabled) {
159
+ continue;
160
+ }
161
+ const ctx = {
162
+ cluster,
163
+ template: resolved.template,
164
+ };
165
+ const result = generator.generate(ctx);
166
+ if (!result.success) {
167
+ return result;
168
+ }
169
+ all_resources.push(...result.value);
170
+ }
171
+ }
172
+ return success(all_resources);
173
+ },
174
+ async write(result) {
175
+ return write_generation_result(result);
176
+ },
177
+ };
178
+ }
179
+ // Re-export commonly used utilities
180
+ export { serialize_resource, serialize_resources };
181
+ export { generate_namespace_resources };
182
+ export { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization, };
183
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/generator/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from './external-substitutions.js';
2
+ export * from './flux.js';
3
+ export * from './generator.js';
4
+ export * from './namespace.js';
5
+ export * from './output.js';
6
+ export * from './substitution.js';
7
+ export * from './types.js';
8
+ export * from './validation/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './external-substitutions.js';
2
+ export * from './flux.js';
3
+ export * from './generator.js';
4
+ export * from './namespace.js';
5
+ export * from './output.js';
6
+ export * from './substitution.js';
7
+ export * from './types.js';
8
+ export * from './validation/index.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ClusterType, KustomizationType, PreservationPolicyType, TemplateConfigType } from '../schema/index.js';
2
+ /**
3
+ * Resolved kustomization state (preservation only).
4
+ * Enablement is now determined at the template level - templates listed in cluster.yaml are deployed.
5
+ */
6
+ export interface ResolvedKustomizationStateType {
7
+ preservation: PreservationPolicyType;
8
+ }
9
+ /**
10
+ * Resolves kustomization preservation policy from template defaults and cluster overrides.
11
+ *
12
+ * Resolution order (last wins):
13
+ * 1. Template kustomization preservation policy (defaults to 'stateful')
14
+ * 2. Cluster kustomization override preservation (if specified)
15
+ *
16
+ * @param kustomization - Template kustomization definition
17
+ * @param template_config - Cluster template configuration (may be undefined)
18
+ * @param kustomization_name - Name of the kustomization to resolve
19
+ * @returns Resolved preservation policy
20
+ */
21
+ export declare function resolve_kustomization_preservation(kustomization: KustomizationType, template_config: TemplateConfigType | undefined, kustomization_name: string): PreservationPolicyType;
22
+ /**
23
+ * Resolves complete kustomization state (preservation only).
24
+ * Template enablement is now determined by whether the template is listed in cluster.yaml.
25
+ *
26
+ * @param kustomization - Template kustomization definition
27
+ * @param template_config - Cluster template configuration (may be undefined)
28
+ * @param kustomization_name - Name of the kustomization to resolve
29
+ * @returns Resolved kustomization state
30
+ */
31
+ export declare function resolve_kustomization_state(kustomization: KustomizationType, template_config: TemplateConfigType | undefined, kustomization_name: string): ResolvedKustomizationStateType;
32
+ /**
33
+ * Gets template configuration for a specific template from cluster spec.
34
+ *
35
+ * @param cluster - Cluster configuration
36
+ * @param template_name - Name of the template to find
37
+ * @returns Template configuration or undefined if not found
38
+ */
39
+ export declare function get_template_config(cluster: ClusterType, template_name: string): TemplateConfigType | undefined;
40
+ //# sourceMappingURL=kustomization-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kustomization-resolution.d.ts","sourceRoot":"","sources":["../../src/generator/kustomization-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAChD,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,kBAAkB,GAAG,SAAS,EAC/C,kBAAkB,EAAE,MAAM,GACzB,sBAAsB,CAyBxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,kBAAkB,GAAG,SAAS,EAC/C,kBAAkB,EAAE,MAAM,GACzB,8BAA8B,CAQhC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,MAAM,GACpB,kBAAkB,GAAG,SAAS,CAEhC"}