typekro 0.28.1 → 0.29.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 (671) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/advanced/index.d.ts +5 -1
  3. package/dist/advanced/index.d.ts.map +1 -1
  4. package/dist/advanced/index.js +2 -3
  5. package/dist/advanced/index.js.map +1 -1
  6. package/dist/alchemy/deployers.d.ts +6 -4
  7. package/dist/alchemy/deployers.d.ts.map +1 -1
  8. package/dist/alchemy/deployers.js +46 -9
  9. package/dist/alchemy/deployers.js.map +1 -1
  10. package/dist/alchemy/index.d.ts +2 -3
  11. package/dist/alchemy/index.d.ts.map +1 -1
  12. package/dist/alchemy/index.js +1 -1
  13. package/dist/alchemy/index.js.map +1 -1
  14. package/dist/alchemy/kro-delete.d.ts +6 -5
  15. package/dist/alchemy/kro-delete.d.ts.map +1 -1
  16. package/dist/alchemy/kro-delete.js +169 -22
  17. package/dist/alchemy/kro-delete.js.map +1 -1
  18. package/dist/alchemy/resource-registration.d.ts +24 -31
  19. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  20. package/dist/alchemy/resource-registration.js +439 -75
  21. package/dist/alchemy/resource-registration.js.map +1 -1
  22. package/dist/alchemy/types.d.ts +56 -14
  23. package/dist/alchemy/types.d.ts.map +1 -1
  24. package/dist/alchemy/utilities.d.ts +2 -2
  25. package/dist/alchemy/utilities.d.ts.map +1 -1
  26. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  27. package/dist/compositions/typekro-runtime/typekro-runtime.js +31 -28
  28. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
  29. package/dist/compositions/typekro-runtime/types.d.ts +12 -0
  30. package/dist/compositions/typekro-runtime/types.d.ts.map +1 -1
  31. package/dist/core/composition/analysis-metadata.d.ts +15 -0
  32. package/dist/core/composition/analysis-metadata.d.ts.map +1 -0
  33. package/dist/core/composition/analysis-metadata.js +20 -0
  34. package/dist/core/composition/analysis-metadata.js.map +1 -0
  35. package/dist/core/composition/imperative.d.ts.map +1 -1
  36. package/dist/core/composition/imperative.js +38 -9
  37. package/dist/core/composition/imperative.js.map +1 -1
  38. package/dist/core/composition/nested-status-cel.js +3 -3
  39. package/dist/core/composition/nested-status-cel.js.map +1 -1
  40. package/dist/core/constants/brands.d.ts +1 -1
  41. package/dist/core/constants/brands.d.ts.map +1 -1
  42. package/dist/core/constants/brands.js +1 -1
  43. package/dist/core/constants/brands.js.map +1 -1
  44. package/dist/core/dependencies/resolver.d.ts +3 -1
  45. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  46. package/dist/core/dependencies/resolver.js +29 -13
  47. package/dist/core/dependencies/resolver.js.map +1 -1
  48. package/dist/core/deployment/deletion-result.d.ts +22 -0
  49. package/dist/core/deployment/deletion-result.d.ts.map +1 -0
  50. package/dist/core/deployment/deletion-result.js +108 -0
  51. package/dist/core/deployment/deletion-result.js.map +1 -0
  52. package/dist/core/deployment/deployment-state-discovery.d.ts +1 -0
  53. package/dist/core/deployment/deployment-state-discovery.d.ts.map +1 -1
  54. package/dist/core/deployment/deployment-state-discovery.js +89 -9
  55. package/dist/core/deployment/deployment-state-discovery.js.map +1 -1
  56. package/dist/core/deployment/direct-factory.d.ts +46 -25
  57. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  58. package/dist/core/deployment/direct-factory.js +536 -126
  59. package/dist/core/deployment/direct-factory.js.map +1 -1
  60. package/dist/core/deployment/engine.d.ts +4 -1
  61. package/dist/core/deployment/engine.d.ts.map +1 -1
  62. package/dist/core/deployment/engine.js +105 -34
  63. package/dist/core/deployment/engine.js.map +1 -1
  64. package/dist/core/deployment/errors.d.ts +20 -1
  65. package/dist/core/deployment/errors.d.ts.map +1 -1
  66. package/dist/core/deployment/errors.js +55 -0
  67. package/dist/core/deployment/errors.js.map +1 -1
  68. package/dist/core/deployment/event-monitor.d.ts +4 -3
  69. package/dist/core/deployment/event-monitor.d.ts.map +1 -1
  70. package/dist/core/deployment/event-monitor.js +17 -5
  71. package/dist/core/deployment/event-monitor.js.map +1 -1
  72. package/dist/core/deployment/index.d.ts +1 -1
  73. package/dist/core/deployment/index.d.ts.map +1 -1
  74. package/dist/core/deployment/index.js +1 -1
  75. package/dist/core/deployment/index.js.map +1 -1
  76. package/dist/core/deployment/k8s-helpers.d.ts +1 -1
  77. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
  78. package/dist/core/deployment/k8s-helpers.js +11 -5
  79. package/dist/core/deployment/k8s-helpers.js.map +1 -1
  80. package/dist/core/deployment/kro-factory.d.ts +54 -30
  81. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  82. package/dist/core/deployment/kro-factory.js +2002 -259
  83. package/dist/core/deployment/kro-factory.js.map +1 -1
  84. package/dist/core/deployment/kro-instance-admission.d.ts +17 -0
  85. package/dist/core/deployment/kro-instance-admission.d.ts.map +1 -0
  86. package/dist/core/deployment/kro-instance-admission.js +73 -0
  87. package/dist/core/deployment/kro-instance-admission.js.map +1 -0
  88. package/dist/core/deployment/kro-instance-safety.d.ts +0 -3
  89. package/dist/core/deployment/kro-instance-safety.d.ts.map +1 -1
  90. package/dist/core/deployment/kro-instance-safety.js +0 -11
  91. package/dist/core/deployment/kro-instance-safety.js.map +1 -1
  92. package/dist/core/deployment/kro-namespace-teardown.d.ts +63 -5
  93. package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -1
  94. package/dist/core/deployment/kro-namespace-teardown.js +124 -12
  95. package/dist/core/deployment/kro-namespace-teardown.js.map +1 -1
  96. package/dist/core/deployment/kro-readiness.d.ts +2 -0
  97. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  98. package/dist/core/deployment/kro-readiness.js +23 -6
  99. package/dist/core/deployment/kro-readiness.js.map +1 -1
  100. package/dist/core/deployment/poll-timeout.d.ts +1 -1
  101. package/dist/core/deployment/poll-timeout.d.ts.map +1 -1
  102. package/dist/core/deployment/poll-timeout.js +12 -1
  103. package/dist/core/deployment/poll-timeout.js.map +1 -1
  104. package/dist/core/deployment/resource-applier.d.ts +19 -3
  105. package/dist/core/deployment/resource-applier.d.ts.map +1 -1
  106. package/dist/core/deployment/resource-applier.js +263 -44
  107. package/dist/core/deployment/resource-applier.js.map +1 -1
  108. package/dist/core/deployment/rollback-manager.d.ts +6 -1
  109. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  110. package/dist/core/deployment/rollback-manager.js +38 -12
  111. package/dist/core/deployment/rollback-manager.js.map +1 -1
  112. package/dist/core/deployment/schema-cel-evaluator.d.ts.map +1 -1
  113. package/dist/core/deployment/schema-cel-evaluator.js +63 -0
  114. package/dist/core/deployment/schema-cel-evaluator.js.map +1 -1
  115. package/dist/core/deployment/shared-utilities.d.ts +11 -6
  116. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  117. package/dist/core/deployment/shared-utilities.js +169 -14
  118. package/dist/core/deployment/shared-utilities.js.map +1 -1
  119. package/dist/core/deployment/singleton-gitops.d.ts.map +1 -1
  120. package/dist/core/deployment/singleton-gitops.js +0 -2
  121. package/dist/core/deployment/singleton-gitops.js.map +1 -1
  122. package/dist/core/deployment/singleton-owner-drift.d.ts +11 -2
  123. package/dist/core/deployment/singleton-owner-drift.d.ts.map +1 -1
  124. package/dist/core/deployment/singleton-owner-drift.js +30 -13
  125. package/dist/core/deployment/singleton-owner-drift.js.map +1 -1
  126. package/dist/core/deployment/strategies/base-strategy.d.ts +2 -0
  127. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  128. package/dist/core/deployment/strategies/base-strategy.js +19 -2
  129. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  130. package/dist/core/deployment/strategies/direct-strategy.d.ts +3 -0
  131. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  132. package/dist/core/deployment/strategies/direct-strategy.js +31 -8
  133. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  134. package/dist/core/deployment/strategies/index.d.ts +1 -1
  135. package/dist/core/deployment/strategies/index.d.ts.map +1 -1
  136. package/dist/core/deployment/strategies/index.js +1 -1
  137. package/dist/core/deployment/strategies/index.js.map +1 -1
  138. package/dist/core/errors.d.ts +2 -2
  139. package/dist/core/errors.d.ts.map +1 -1
  140. package/dist/core/errors.js.map +1 -1
  141. package/dist/core/expressions/analysis/cel-emitter.d.ts.map +1 -1
  142. package/dist/core/expressions/analysis/cel-emitter.js +17 -13
  143. package/dist/core/expressions/analysis/cel-emitter.js.map +1 -1
  144. package/dist/core/expressions/analysis/expression-metadata.d.ts +15 -0
  145. package/dist/core/expressions/analysis/expression-metadata.d.ts.map +1 -0
  146. package/dist/core/expressions/analysis/expression-metadata.js +10 -0
  147. package/dist/core/expressions/analysis/expression-metadata.js.map +1 -0
  148. package/dist/core/expressions/analysis/ready-when.d.ts +3 -0
  149. package/dist/core/expressions/analysis/ready-when.d.ts.map +1 -0
  150. package/dist/core/expressions/analysis/ready-when.js +127 -0
  151. package/dist/core/expressions/analysis/ready-when.js.map +1 -0
  152. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +3 -2
  153. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
  154. package/dist/core/expressions/composition/composition-analyzer-helpers.js +6 -4
  155. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
  156. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +3 -2
  157. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
  158. package/dist/core/expressions/composition/composition-analyzer-ternary.js +12 -12
  159. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
  160. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
  161. package/dist/core/expressions/composition/composition-analyzer-traversal.js +68 -4
  162. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
  163. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +2 -0
  164. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
  165. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
  166. package/dist/core/expressions/composition/composition-analyzer.js +2 -0
  167. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
  168. package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -1
  169. package/dist/core/expressions/factory/status-builder-analyzer.js +14 -1
  170. package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -1
  171. package/dist/core/kubernetes/api.d.ts.map +1 -1
  172. package/dist/core/kubernetes/api.js +2 -3
  173. package/dist/core/kubernetes/api.js.map +1 -1
  174. package/dist/core/kubernetes/bun-api-client.d.ts +1 -1
  175. package/dist/core/kubernetes/bun-api-client.d.ts.map +1 -1
  176. package/dist/core/kubernetes/bun-api-client.js +17 -17
  177. package/dist/core/kubernetes/bun-api-client.js.map +1 -1
  178. package/dist/core/kubernetes/bun-http-library.d.ts +16 -0
  179. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
  180. package/dist/core/kubernetes/bun-http-library.js +7 -1
  181. package/dist/core/kubernetes/bun-http-library.js.map +1 -1
  182. package/dist/core/kubernetes/bun-watch.d.ts +30 -0
  183. package/dist/core/kubernetes/bun-watch.d.ts.map +1 -0
  184. package/dist/core/kubernetes/bun-watch.js +144 -0
  185. package/dist/core/kubernetes/bun-watch.js.map +1 -0
  186. package/dist/core/kubernetes/client-node-runtime.d.ts +10 -0
  187. package/dist/core/kubernetes/client-node-runtime.d.ts.map +1 -0
  188. package/dist/core/kubernetes/client-node-runtime.js +15 -0
  189. package/dist/core/kubernetes/client-node-runtime.js.map +1 -0
  190. package/dist/core/kubernetes/client-provider.d.ts +21 -1
  191. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  192. package/dist/core/kubernetes/client-provider.js +10 -10
  193. package/dist/core/kubernetes/client-provider.js.map +1 -1
  194. package/dist/core/kubernetes/index.d.ts +1 -1
  195. package/dist/core/kubernetes/index.d.ts.map +1 -1
  196. package/dist/core/kubernetes/index.js.map +1 -1
  197. package/dist/core/metadata/resource-metadata.d.ts +24 -1
  198. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  199. package/dist/core/metadata/resource-metadata.js +8 -4
  200. package/dist/core/metadata/resource-metadata.js.map +1 -1
  201. package/dist/core/planning/artifact-codec.d.ts +14 -0
  202. package/dist/core/planning/artifact-codec.d.ts.map +1 -0
  203. package/dist/core/planning/artifact-codec.js +329 -0
  204. package/dist/core/planning/artifact-codec.js.map +1 -0
  205. package/dist/core/planning/artifacts.d.ts +212 -0
  206. package/dist/core/planning/artifacts.d.ts.map +1 -0
  207. package/dist/core/planning/artifacts.js +5 -0
  208. package/dist/core/planning/artifacts.js.map +1 -0
  209. package/dist/core/planning/aspects.d.ts +11 -0
  210. package/dist/core/planning/aspects.d.ts.map +1 -0
  211. package/dist/core/planning/aspects.js +77 -0
  212. package/dist/core/planning/aspects.js.map +1 -0
  213. package/dist/core/planning/canonical.d.ts +10 -0
  214. package/dist/core/planning/canonical.d.ts.map +1 -0
  215. package/dist/core/planning/canonical.js +54 -0
  216. package/dist/core/planning/canonical.js.map +1 -0
  217. package/dist/core/planning/capabilities.d.ts +16 -0
  218. package/dist/core/planning/capabilities.d.ts.map +1 -0
  219. package/dist/core/planning/capabilities.js +90 -0
  220. package/dist/core/planning/capabilities.js.map +1 -0
  221. package/dist/core/planning/capture.d.ts +29 -0
  222. package/dist/core/planning/capture.d.ts.map +1 -0
  223. package/dist/core/planning/capture.js +18 -0
  224. package/dist/core/planning/capture.js.map +1 -0
  225. package/dist/core/planning/compiler.d.ts +12 -0
  226. package/dist/core/planning/compiler.d.ts.map +1 -0
  227. package/dist/core/planning/compiler.js +631 -0
  228. package/dist/core/planning/compiler.js.map +1 -0
  229. package/dist/core/planning/direct-runtime-adapter.d.ts +39 -0
  230. package/dist/core/planning/direct-runtime-adapter.d.ts.map +1 -0
  231. package/dist/core/planning/direct-runtime-adapter.js +238 -0
  232. package/dist/core/planning/direct-runtime-adapter.js.map +1 -0
  233. package/dist/core/planning/execution-record.d.ts +21 -0
  234. package/dist/core/planning/execution-record.d.ts.map +1 -0
  235. package/dist/core/planning/execution-record.js +304 -0
  236. package/dist/core/planning/execution-record.js.map +1 -0
  237. package/dist/core/planning/index.d.ts +20 -0
  238. package/dist/core/planning/index.d.ts.map +1 -0
  239. package/dist/core/planning/index.js +18 -0
  240. package/dist/core/planning/index.js.map +1 -0
  241. package/dist/core/planning/kro-bundle.d.ts +24 -0
  242. package/dist/core/planning/kro-bundle.d.ts.map +1 -0
  243. package/dist/core/planning/kro-bundle.js +314 -0
  244. package/dist/core/planning/kro-bundle.js.map +1 -0
  245. package/dist/core/planning/kro-runtime-adapter.d.ts +28 -0
  246. package/dist/core/planning/kro-runtime-adapter.d.ts.map +1 -0
  247. package/dist/core/planning/kro-runtime-adapter.js +211 -0
  248. package/dist/core/planning/kro-runtime-adapter.js.map +1 -0
  249. package/dist/core/planning/materialization.d.ts +54 -0
  250. package/dist/core/planning/materialization.d.ts.map +1 -0
  251. package/dist/core/planning/materialization.js +489 -0
  252. package/dist/core/planning/materialization.js.map +1 -0
  253. package/dist/core/planning/plan-codec.d.ts +11 -0
  254. package/dist/core/planning/plan-codec.d.ts.map +1 -0
  255. package/dist/core/planning/plan-codec.js +555 -0
  256. package/dist/core/planning/plan-codec.js.map +1 -0
  257. package/dist/core/planning/planner.d.ts +21 -0
  258. package/dist/core/planning/planner.d.ts.map +1 -0
  259. package/dist/core/planning/planner.js +1518 -0
  260. package/dist/core/planning/planner.js.map +1 -0
  261. package/dist/core/planning/schema.d.ts +10 -0
  262. package/dist/core/planning/schema.d.ts.map +1 -0
  263. package/dist/core/planning/schema.js +159 -0
  264. package/dist/core/planning/schema.js.map +1 -0
  265. package/dist/core/planning/types.d.ts +441 -0
  266. package/dist/core/planning/types.d.ts.map +1 -0
  267. package/dist/core/planning/types.js +3 -0
  268. package/dist/core/planning/types.js.map +1 -0
  269. package/dist/core/planning/values.d.ts +76 -0
  270. package/dist/core/planning/values.d.ts.map +1 -0
  271. package/dist/core/planning/values.js +852 -0
  272. package/dist/core/planning/values.js.map +1 -0
  273. package/dist/core/proxy/create-resource.d.ts +12 -0
  274. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  275. package/dist/core/proxy/create-resource.js +39 -9
  276. package/dist/core/proxy/create-resource.js.map +1 -1
  277. package/dist/core/readiness/evaluator-factories.d.ts +3 -1
  278. package/dist/core/readiness/evaluator-factories.d.ts.map +1 -1
  279. package/dist/core/readiness/evaluator-factories.js +130 -5
  280. package/dist/core/readiness/evaluator-factories.js.map +1 -1
  281. package/dist/core/readiness/index.d.ts +2 -1
  282. package/dist/core/readiness/index.d.ts.map +1 -1
  283. package/dist/core/readiness/index.js +2 -1
  284. package/dist/core/readiness/index.js.map +1 -1
  285. package/dist/core/readiness/portable-strategies.d.ts +28 -0
  286. package/dist/core/readiness/portable-strategies.d.ts.map +1 -0
  287. package/dist/core/readiness/portable-strategies.js +55 -0
  288. package/dist/core/readiness/portable-strategies.js.map +1 -0
  289. package/dist/core/readiness/strategy-configuration.d.ts +12 -0
  290. package/dist/core/readiness/strategy-configuration.d.ts.map +1 -0
  291. package/dist/core/readiness/strategy-configuration.js +51 -0
  292. package/dist/core/readiness/strategy-configuration.js.map +1 -0
  293. package/dist/core/references/cel-evaluator.d.ts +5 -0
  294. package/dist/core/references/cel-evaluator.d.ts.map +1 -1
  295. package/dist/core/references/cel-evaluator.js +33 -2
  296. package/dist/core/references/cel-evaluator.js.map +1 -1
  297. package/dist/core/references/external-refs.d.ts +2 -0
  298. package/dist/core/references/external-refs.d.ts.map +1 -1
  299. package/dist/core/references/external-refs.js +3 -1
  300. package/dist/core/references/external-refs.js.map +1 -1
  301. package/dist/core/references/resolver.d.ts +7 -1
  302. package/dist/core/references/resolver.d.ts.map +1 -1
  303. package/dist/core/references/resolver.js +91 -9
  304. package/dist/core/references/resolver.js.map +1 -1
  305. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  306. package/dist/core/references/schema-proxy.js +35 -21
  307. package/dist/core/references/schema-proxy.js.map +1 -1
  308. package/dist/core/resources/factory-registry.d.ts +64 -2
  309. package/dist/core/resources/factory-registry.d.ts.map +1 -1
  310. package/dist/core/resources/factory-registry.js +74 -3
  311. package/dist/core/resources/factory-registry.js.map +1 -1
  312. package/dist/core/resources/index.d.ts +3 -2
  313. package/dist/core/resources/index.d.ts.map +1 -1
  314. package/dist/core/resources/index.js +2 -1
  315. package/dist/core/resources/index.js.map +1 -1
  316. package/dist/core/resources/live-comparison.d.ts +58 -0
  317. package/dist/core/resources/live-comparison.d.ts.map +1 -0
  318. package/dist/core/resources/live-comparison.js +293 -0
  319. package/dist/core/resources/live-comparison.js.map +1 -0
  320. package/dist/core/runtime/standalone-operation.d.ts +12 -0
  321. package/dist/core/runtime/standalone-operation.d.ts.map +1 -0
  322. package/dist/core/runtime/standalone-operation.js +62 -0
  323. package/dist/core/runtime/standalone-operation.js.map +1 -0
  324. package/dist/core/serialization/cel-references.d.ts.map +1 -1
  325. package/dist/core/serialization/cel-references.js +11 -1
  326. package/dist/core/serialization/cel-references.js.map +1 -1
  327. package/dist/core/serialization/core.d.ts.map +1 -1
  328. package/dist/core/serialization/core.js +277 -182
  329. package/dist/core/serialization/core.js.map +1 -1
  330. package/dist/core/serialization/schema.d.ts.map +1 -1
  331. package/dist/core/serialization/schema.js +3 -3
  332. package/dist/core/serialization/schema.js.map +1 -1
  333. package/dist/core/serialization/status-analysis-pipeline.d.ts +1 -1
  334. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
  335. package/dist/core/serialization/status-analysis-pipeline.js +14 -11
  336. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
  337. package/dist/core/serialization/yaml.d.ts +5 -1
  338. package/dist/core/serialization/yaml.d.ts.map +1 -1
  339. package/dist/core/serialization/yaml.js +35 -182
  340. package/dist/core/serialization/yaml.js.map +1 -1
  341. package/dist/core/types/deployment.d.ts +135 -14
  342. package/dist/core/types/deployment.d.ts.map +1 -1
  343. package/dist/core/types/kubernetes.d.ts +3 -0
  344. package/dist/core/types/kubernetes.d.ts.map +1 -1
  345. package/dist/core/types/resource-graph.d.ts +7 -1
  346. package/dist/core/types/resource-graph.d.ts.map +1 -1
  347. package/dist/core/types/serialization.d.ts +8 -1
  348. package/dist/core/types/serialization.d.ts.map +1 -1
  349. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  350. package/dist/core/validation/cel-validator.js +25 -16
  351. package/dist/core/validation/cel-validator.js.map +1 -1
  352. package/dist/experimental-planning.d.ts +13 -0
  353. package/dist/experimental-planning.d.ts.map +1 -0
  354. package/dist/experimental-planning.js +12 -0
  355. package/dist/experimental-planning.js.map +1 -0
  356. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
  357. package/dist/factories/apisix/compositions/apisix-bootstrap.js +27 -22
  358. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
  359. package/dist/factories/apisix/compositions/apisix-helm-repository.d.ts +15 -0
  360. package/dist/factories/apisix/compositions/apisix-helm-repository.d.ts.map +1 -0
  361. package/dist/factories/apisix/compositions/apisix-helm-repository.js +28 -0
  362. package/dist/factories/apisix/compositions/apisix-helm-repository.js.map +1 -0
  363. package/dist/factories/apisix/compositions/index.d.ts +1 -0
  364. package/dist/factories/apisix/compositions/index.d.ts.map +1 -1
  365. package/dist/factories/apisix/compositions/index.js +1 -0
  366. package/dist/factories/apisix/compositions/index.js.map +1 -1
  367. package/dist/factories/apisix/types.d.ts +22 -0
  368. package/dist/factories/apisix/types.d.ts.map +1 -1
  369. package/dist/factories/apisix/types.js +16 -0
  370. package/dist/factories/apisix/types.js.map +1 -1
  371. package/dist/factories/apisix/utils/admin-credentials.d.ts +1 -0
  372. package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -1
  373. package/dist/factories/apisix/utils/admin-credentials.js +5 -4
  374. package/dist/factories/apisix/utils/admin-credentials.js.map +1 -1
  375. package/dist/factories/caddy/compositions/caddy-ingress.d.ts.map +1 -1
  376. package/dist/factories/caddy/compositions/caddy-ingress.js +9 -2
  377. package/dist/factories/caddy/compositions/caddy-ingress.js.map +1 -1
  378. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts.map +1 -1
  379. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js +11 -25
  380. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js.map +1 -1
  381. package/dist/factories/cert-manager/resources/certificates.d.ts.map +1 -1
  382. package/dist/factories/cert-manager/resources/certificates.js +2 -1
  383. package/dist/factories/cert-manager/resources/certificates.js.map +1 -1
  384. package/dist/factories/cert-manager/resources/challenges.d.ts.map +1 -1
  385. package/dist/factories/cert-manager/resources/challenges.js +3 -0
  386. package/dist/factories/cert-manager/resources/challenges.js.map +1 -1
  387. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +4 -4
  388. package/dist/factories/cilium/resources/gateway.d.ts.map +1 -1
  389. package/dist/factories/cilium/resources/gateway.js +13 -12
  390. package/dist/factories/cilium/resources/gateway.js.map +1 -1
  391. package/dist/factories/cilium/resources/networking.d.ts.map +1 -1
  392. package/dist/factories/cilium/resources/networking.js +9 -0
  393. package/dist/factories/cilium/resources/networking.js.map +1 -1
  394. package/dist/factories/clickhouse/compositions/clickhouse-operator-bootstrap.d.ts +2 -1
  395. package/dist/factories/clickhouse/compositions/clickhouse-operator-bootstrap.d.ts.map +1 -1
  396. package/dist/factories/clickhouse/compositions/clickhouse-operator-bootstrap.js +2 -6
  397. package/dist/factories/clickhouse/compositions/clickhouse-operator-bootstrap.js.map +1 -1
  398. package/dist/factories/clickhouse/resources/installation.d.ts.map +1 -1
  399. package/dist/factories/clickhouse/resources/installation.js +2 -0
  400. package/dist/factories/clickhouse/resources/installation.js.map +1 -1
  401. package/dist/factories/clickhouse/resources/keeper.d.ts.map +1 -1
  402. package/dist/factories/clickhouse/resources/keeper.js +2 -0
  403. package/dist/factories/clickhouse/resources/keeper.js.map +1 -1
  404. package/dist/factories/clickhouse/types.d.ts +5 -2
  405. package/dist/factories/clickhouse/types.d.ts.map +1 -1
  406. package/dist/factories/clickhouse/types.js +2 -1
  407. package/dist/factories/clickhouse/types.js.map +1 -1
  408. package/dist/factories/clickstack/compositions/k8s-telemetry.d.ts +4 -2
  409. package/dist/factories/clickstack/compositions/k8s-telemetry.d.ts.map +1 -1
  410. package/dist/factories/clickstack/compositions/k8s-telemetry.js +2 -5
  411. package/dist/factories/clickstack/compositions/k8s-telemetry.js.map +1 -1
  412. package/dist/factories/clickstack/types.d.ts +2 -1
  413. package/dist/factories/clickstack/types.d.ts.map +1 -1
  414. package/dist/factories/clickstack/types.js +3 -1
  415. package/dist/factories/clickstack/types.js.map +1 -1
  416. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +2 -1
  417. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -1
  418. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +3 -8
  419. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -1
  420. package/dist/factories/cnpg/resources/backup.d.ts.map +1 -1
  421. package/dist/factories/cnpg/resources/backup.js +2 -0
  422. package/dist/factories/cnpg/resources/backup.js.map +1 -1
  423. package/dist/factories/cnpg/resources/cluster.d.ts.map +1 -1
  424. package/dist/factories/cnpg/resources/cluster.js +2 -1
  425. package/dist/factories/cnpg/resources/cluster.js.map +1 -1
  426. package/dist/factories/cnpg/resources/pooler.d.ts.map +1 -1
  427. package/dist/factories/cnpg/resources/pooler.js +2 -0
  428. package/dist/factories/cnpg/resources/pooler.js.map +1 -1
  429. package/dist/factories/cnpg/resources/scheduled-backup.d.ts.map +1 -1
  430. package/dist/factories/cnpg/resources/scheduled-backup.js +2 -1
  431. package/dist/factories/cnpg/resources/scheduled-backup.js.map +1 -1
  432. package/dist/factories/cnpg/types.d.ts +6 -3
  433. package/dist/factories/cnpg/types.d.ts.map +1 -1
  434. package/dist/factories/cnpg/types.js +2 -1
  435. package/dist/factories/cnpg/types.js.map +1 -1
  436. package/dist/factories/dagster/compositions/dagster-bootstrap.d.ts +2 -0
  437. package/dist/factories/dagster/compositions/dagster-bootstrap.d.ts.map +1 -1
  438. package/dist/factories/dagster/types.d.ts +5 -0
  439. package/dist/factories/dagster/types.d.ts.map +1 -1
  440. package/dist/factories/dagster/types.js +1 -0
  441. package/dist/factories/dagster/types.js.map +1 -1
  442. package/dist/factories/dagster/utils/helm-values-mapper.js +3 -0
  443. package/dist/factories/dagster/utils/helm-values-mapper.js.map +1 -1
  444. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -1
  445. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +7 -4
  446. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -1
  447. package/dist/factories/external-dns/resources/dns-endpoint.d.ts.map +1 -1
  448. package/dist/factories/external-dns/resources/dns-endpoint.js +20 -18
  449. package/dist/factories/external-dns/resources/dns-endpoint.js.map +1 -1
  450. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  451. package/dist/factories/flux/git-repository.js +41 -34
  452. package/dist/factories/flux/git-repository.js.map +1 -1
  453. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +0 -6
  454. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  455. package/dist/factories/flux/kustomize/readiness-evaluators.js +12 -2
  456. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  457. package/dist/factories/harbor/compositions/harbor-installation.d.ts +46 -38
  458. package/dist/factories/harbor/compositions/harbor-installation.d.ts.map +1 -1
  459. package/dist/factories/harbor/compositions/harbor-installation.js +4 -2
  460. package/dist/factories/harbor/compositions/harbor-installation.js.map +1 -1
  461. package/dist/factories/harbor/types.d.ts +13 -11
  462. package/dist/factories/harbor/types.d.ts.map +1 -1
  463. package/dist/factories/harbor/types.js +11 -9
  464. package/dist/factories/harbor/types.js.map +1 -1
  465. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  466. package/dist/factories/helm/helm-repository.js +14 -1
  467. package/dist/factories/helm/helm-repository.js.map +1 -1
  468. package/dist/factories/helm/index.d.ts +2 -0
  469. package/dist/factories/helm/index.d.ts.map +1 -1
  470. package/dist/factories/helm/index.js +1 -0
  471. package/dist/factories/helm/index.js.map +1 -1
  472. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  473. package/dist/factories/helm/readiness-evaluators.js +46 -7
  474. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  475. package/dist/factories/helm/status.d.ts +18 -0
  476. package/dist/factories/helm/status.d.ts.map +1 -0
  477. package/dist/factories/helm/status.js +38 -0
  478. package/dist/factories/helm/status.js.map +1 -0
  479. package/dist/factories/index.d.ts +2 -2
  480. package/dist/factories/index.d.ts.map +1 -1
  481. package/dist/factories/index.js +4 -4
  482. package/dist/factories/index.js.map +1 -1
  483. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +1 -1
  484. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
  485. package/dist/factories/inngest/compositions/inngest-bootstrap.js +2 -4
  486. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
  487. package/dist/factories/inngest/resources/helm.d.ts.map +1 -1
  488. package/dist/factories/inngest/resources/helm.js +12 -3
  489. package/dist/factories/inngest/resources/helm.js.map +1 -1
  490. package/dist/factories/inngest/types.d.ts +3 -7
  491. package/dist/factories/inngest/types.d.ts.map +1 -1
  492. package/dist/factories/inngest/types.js +1 -1
  493. package/dist/factories/inngest/types.js.map +1 -1
  494. package/dist/factories/kro/kro-crd.d.ts.map +1 -1
  495. package/dist/factories/kro/kro-crd.js +32 -33
  496. package/dist/factories/kro/kro-crd.js.map +1 -1
  497. package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -1
  498. package/dist/factories/kro/kro-custom-resource.js +91 -85
  499. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  500. package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -1
  501. package/dist/factories/kro/resource-graph-definition.js +127 -117
  502. package/dist/factories/kro/resource-graph-definition.js.map +1 -1
  503. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -1
  504. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js +27 -26
  505. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -1
  506. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -1
  507. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +22 -22
  508. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js.map +1 -1
  509. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts.map +1 -1
  510. package/dist/factories/kubernetes/certificates/certificate-signing-request.js +41 -39
  511. package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -1
  512. package/dist/factories/kubernetes/core/component-status.d.ts.map +1 -1
  513. package/dist/factories/kubernetes/core/component-status.js +14 -16
  514. package/dist/factories/kubernetes/core/component-status.js.map +1 -1
  515. package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
  516. package/dist/factories/kubernetes/core/namespace.js +31 -38
  517. package/dist/factories/kubernetes/core/namespace.js.map +1 -1
  518. package/dist/factories/kubernetes/core/node.d.ts.map +1 -1
  519. package/dist/factories/kubernetes/core/node.js +17 -25
  520. package/dist/factories/kubernetes/core/node.js.map +1 -1
  521. package/dist/factories/kubernetes/core/pod.d.ts.map +1 -1
  522. package/dist/factories/kubernetes/core/pod.js +31 -35
  523. package/dist/factories/kubernetes/core/pod.js.map +1 -1
  524. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts.map +1 -1
  525. package/dist/factories/kubernetes/extensions/custom-resource-definition.js +34 -36
  526. package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -1
  527. package/dist/factories/kubernetes/extensions/custom-resource.d.ts.map +1 -1
  528. package/dist/factories/kubernetes/extensions/custom-resource.js +2 -4
  529. package/dist/factories/kubernetes/extensions/custom-resource.js.map +1 -1
  530. package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -1
  531. package/dist/factories/kubernetes/networking/endpoints.js +29 -30
  532. package/dist/factories/kubernetes/networking/endpoints.js.map +1 -1
  533. package/dist/factories/kubernetes/networking/ingress.d.ts.map +1 -1
  534. package/dist/factories/kubernetes/networking/ingress.js +46 -57
  535. package/dist/factories/kubernetes/networking/ingress.js.map +1 -1
  536. package/dist/factories/kubernetes/networking/network-policy.d.ts +9 -0
  537. package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -1
  538. package/dist/factories/kubernetes/networking/network-policy.js +51 -1
  539. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
  540. package/dist/factories/kubernetes/networking/service.d.ts.map +1 -1
  541. package/dist/factories/kubernetes/networking/service.js +48 -40
  542. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  543. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts.map +1 -1
  544. package/dist/factories/kubernetes/policy/pod-disruption-budget.js +40 -46
  545. package/dist/factories/kubernetes/policy/pod-disruption-budget.js.map +1 -1
  546. package/dist/factories/kubernetes/policy/resource-quota.d.ts.map +1 -1
  547. package/dist/factories/kubernetes/policy/resource-quota.js +30 -34
  548. package/dist/factories/kubernetes/policy/resource-quota.js.map +1 -1
  549. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts.map +1 -1
  550. package/dist/factories/kubernetes/storage/persistent-volume-claim.js +22 -21
  551. package/dist/factories/kubernetes/storage/persistent-volume-claim.js.map +1 -1
  552. package/dist/factories/kubernetes/storage/persistent-volume.d.ts.map +1 -1
  553. package/dist/factories/kubernetes/storage/persistent-volume.js +32 -38
  554. package/dist/factories/kubernetes/storage/persistent-volume.js.map +1 -1
  555. package/dist/factories/kubernetes/storage/volume-attachment.d.ts.map +1 -1
  556. package/dist/factories/kubernetes/storage/volume-attachment.js +12 -11
  557. package/dist/factories/kubernetes/storage/volume-attachment.js.map +1 -1
  558. package/dist/factories/kubernetes/workloads/cron-job.d.ts.map +1 -1
  559. package/dist/factories/kubernetes/workloads/cron-job.js +39 -34
  560. package/dist/factories/kubernetes/workloads/cron-job.js.map +1 -1
  561. package/dist/factories/kubernetes/workloads/daemon-set.d.ts.map +1 -1
  562. package/dist/factories/kubernetes/workloads/daemon-set.js +24 -23
  563. package/dist/factories/kubernetes/workloads/daemon-set.js.map +1 -1
  564. package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -1
  565. package/dist/factories/kubernetes/workloads/deployment.js +45 -35
  566. package/dist/factories/kubernetes/workloads/deployment.js.map +1 -1
  567. package/dist/factories/kubernetes/workloads/job.d.ts.map +1 -1
  568. package/dist/factories/kubernetes/workloads/job.js +87 -77
  569. package/dist/factories/kubernetes/workloads/job.js.map +1 -1
  570. package/dist/factories/kubernetes/workloads/replica-set.d.ts.map +1 -1
  571. package/dist/factories/kubernetes/workloads/replica-set.js +24 -24
  572. package/dist/factories/kubernetes/workloads/replica-set.js.map +1 -1
  573. package/dist/factories/kubernetes/workloads/replication-controller.d.ts.map +1 -1
  574. package/dist/factories/kubernetes/workloads/replication-controller.js +37 -26
  575. package/dist/factories/kubernetes/workloads/replication-controller.js.map +1 -1
  576. package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -1
  577. package/dist/factories/kubernetes/workloads/stateful-set.js +69 -55
  578. package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -1
  579. package/dist/factories/kubernetes/yaml/yaml-artifact-applier.d.ts +15 -0
  580. package/dist/factories/kubernetes/yaml/yaml-artifact-applier.d.ts.map +1 -0
  581. package/dist/factories/kubernetes/yaml/yaml-artifact-applier.js +69 -0
  582. package/dist/factories/kubernetes/yaml/yaml-artifact-applier.js.map +1 -0
  583. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +2 -1
  584. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  585. package/dist/factories/kubernetes/yaml/yaml-directory.js +3 -34
  586. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  587. package/dist/factories/kubernetes/yaml/yaml-file.d.ts +13 -91
  588. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  589. package/dist/factories/kubernetes/yaml/yaml-file.js +21 -311
  590. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  591. package/dist/factories/nats/compositions/nats-bootstrap.d.ts +2 -2
  592. package/dist/factories/nats/compositions/nats-bootstrap.d.ts.map +1 -1
  593. package/dist/factories/nats/compositions/nats-bootstrap.js +2 -3
  594. package/dist/factories/nats/compositions/nats-bootstrap.js.map +1 -1
  595. package/dist/factories/nats/resources/jetstream.d.ts.map +1 -1
  596. package/dist/factories/nats/resources/jetstream.js +2 -0
  597. package/dist/factories/nats/resources/jetstream.js.map +1 -1
  598. package/dist/factories/nats/types.d.ts +3 -3
  599. package/dist/factories/nats/types.js +1 -1
  600. package/dist/factories/nats/types.js.map +1 -1
  601. package/dist/factories/ory/compositions/ory-platform-stack.d.ts.map +1 -1
  602. package/dist/factories/ory/compositions/ory-platform-stack.js +35 -9
  603. package/dist/factories/ory/compositions/ory-platform-stack.js.map +1 -1
  604. package/dist/factories/ory/resources/oathkeeper-rule.d.ts.map +1 -1
  605. package/dist/factories/ory/resources/oathkeeper-rule.js +11 -8
  606. package/dist/factories/ory/resources/oathkeeper-rule.js.map +1 -1
  607. package/dist/factories/ory/resources/oauth2-client.d.ts.map +1 -1
  608. package/dist/factories/ory/resources/oauth2-client.js +12 -9
  609. package/dist/factories/ory/resources/oauth2-client.js.map +1 -1
  610. package/dist/factories/ory/types.d.ts +3 -0
  611. package/dist/factories/ory/types.d.ts.map +1 -1
  612. package/dist/factories/ory/types.js +1 -0
  613. package/dist/factories/ory/types.js.map +1 -1
  614. package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts +2 -2
  615. package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts.map +1 -1
  616. package/dist/factories/rook/compositions/rook-ceph-operator-installation.js +2 -3
  617. package/dist/factories/rook/compositions/rook-ceph-operator-installation.js.map +1 -1
  618. package/dist/factories/rook/resources/ceph-object-store-user.d.ts.map +1 -1
  619. package/dist/factories/rook/resources/ceph-object-store-user.js +2 -0
  620. package/dist/factories/rook/resources/ceph-object-store-user.js.map +1 -1
  621. package/dist/factories/rook/resources/ceph-object-store.d.ts.map +1 -1
  622. package/dist/factories/rook/resources/ceph-object-store.js +2 -0
  623. package/dist/factories/rook/resources/ceph-object-store.js.map +1 -1
  624. package/dist/factories/rook/resources/object-bucket-claim.d.ts.map +1 -1
  625. package/dist/factories/rook/resources/object-bucket-claim.js +2 -0
  626. package/dist/factories/rook/resources/object-bucket-claim.js.map +1 -1
  627. package/dist/factories/rook/types.d.ts +1 -1
  628. package/dist/factories/rook/types.js +1 -1
  629. package/dist/factories/rook/types.js.map +1 -1
  630. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -1
  631. package/dist/factories/searxng/compositions/searxng-bootstrap.js +2 -2
  632. package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -1
  633. package/dist/factories/searxng/resources/searxng.d.ts.map +1 -1
  634. package/dist/factories/searxng/resources/searxng.js +2 -0
  635. package/dist/factories/searxng/resources/searxng.js.map +1 -1
  636. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +2 -2
  637. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -1
  638. package/dist/factories/valkey/compositions/valkey-bootstrap.js +4 -9
  639. package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -1
  640. package/dist/factories/valkey/resources/valkey.d.ts.map +1 -1
  641. package/dist/factories/valkey/resources/valkey.js +2 -1
  642. package/dist/factories/valkey/resources/valkey.js.map +1 -1
  643. package/dist/factories/valkey/types.d.ts +3 -7
  644. package/dist/factories/valkey/types.d.ts.map +1 -1
  645. package/dist/factories/valkey/types.js +1 -1
  646. package/dist/factories/valkey/types.js.map +1 -1
  647. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +3 -2
  648. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
  649. package/dist/factories/webapp/compositions/web-app-with-processing.js +7 -6
  650. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
  651. package/dist/factories/webapp/types.d.ts +1 -0
  652. package/dist/factories/webapp/types.d.ts.map +1 -1
  653. package/dist/factories/webapp/types.js +2 -0
  654. package/dist/factories/webapp/types.js.map +1 -1
  655. package/dist/index.d.ts +2 -1
  656. package/dist/index.d.ts.map +1 -1
  657. package/dist/index.js +1 -1
  658. package/dist/index.js.map +1 -1
  659. package/dist/shared/brands.d.ts +7 -0
  660. package/dist/shared/brands.d.ts.map +1 -1
  661. package/dist/shared/brands.js +7 -0
  662. package/dist/shared/brands.js.map +1 -1
  663. package/dist/utils/index.d.ts +3 -3
  664. package/dist/utils/index.d.ts.map +1 -1
  665. package/dist/utils/index.js +3 -3
  666. package/dist/utils/index.js.map +1 -1
  667. package/package.json +20 -5
  668. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts +0 -23
  669. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts.map +0 -1
  670. package/dist/factories/kubernetes/yaml/conflict-handler.js +0 -83
  671. package/dist/factories/kubernetes/yaml/conflict-handler.js.map +0 -1
@@ -13,22 +13,26 @@
13
13
  * The Kubernetes machinery (`deployers`, `kro-delete`, client/deployer construction) is
14
14
  * alchemy-version-agnostic and reused verbatim; only the registration glue changed.
15
15
  */
16
- import { Effect } from 'effect';
17
16
  import * as Output from 'alchemy/Output';
18
17
  import * as ProviderMod from 'alchemy/Provider';
19
18
  import * as ResourceMod from 'alchemy/Resource';
19
+ import { Effect } from 'effect';
20
+ import * as Redacted from 'effect/Redacted';
20
21
  import { DEFAULT_DEPLOYMENT_TIMEOUT } from '../core/config/defaults.js';
21
- import { ensureError } from '../core/errors.js';
22
- import { createKubernetesClientProvider } from '../core/kubernetes/client-provider.js';
23
- import { getComponentLogger } from '../core/logging/index.js';
24
22
  import { CEL_EXPRESSION_BRAND } from '../core/constants/brands.js';
25
- import { createBunCompatibleCustomObjectsApi, createBunCompatibleKubernetesObjectApi, } from '../core/kubernetes/index.js';
26
- import { getResourceScope } from '../core/metadata/index.js';
27
23
  import { decideNamespaceOwnershipCreateFirst, deleteNamespaceIfEmpty, HOISTED_NAMESPACES_ANNOTATION, listNamespacesOwnedByRgd, NAMESPACE_OWNER_ANNOTATION, readHoistedNamespacesRecord, } from '../core/deployment/kro-namespace-teardown.js';
28
24
  import { SINGLETON_SPEC_FINGERPRINT_ANNOTATION } from '../core/deployment/resource-tagging.js';
29
- import { stableSerialize } from '../core/singleton/singleton.js';
25
+ import { materializeSerializableKubeConfigOptions } from '../core/deployment/shared-utilities.js';
26
+ import { singletonDriftVerdict, } from '../core/deployment/singleton-owner-drift.js';
27
+ import { ensureError } from '../core/errors.js';
28
+ import { createKubernetesClientProvider } from '../core/kubernetes/client-provider.js';
29
+ import { createBunCompatibleCustomObjectsApi, createBunCompatibleKubernetesObjectApi, } from '../core/kubernetes/index.js';
30
+ import { getComponentLogger } from '../core/logging/index.js';
31
+ import { copyResourceMetadata, getReadinessEvaluator, getResourceScope, setMetadataField, setReadinessEvaluator, setResourceId, } from '../core/metadata/index.js';
32
+ import { collectArtifactOutputUses, decodeDirectArtifactExecutionRecord, decodeKroArtifactBundle, materializeDirectArtifactManifest, materializeKroArtifactBundleOperation, planValueSensitiveBindingNames, } from '../core/planning/index.js';
33
+ import { resolvePortableReadinessStrategy } from '../core/readiness/portable-strategies.js';
30
34
  import { DirectTypeKroDeployer, KroTypeKroDeployer, ResourceGraphDefinitionDeletionDeferredError, } from './deployers.js';
31
- import { deleteKroDefinition, deleteKroInstanceFinalizerSafe, hasKroInstances } from './kro-delete.js';
35
+ import { deleteKroDefinition, deleteKroInstanceFinalizerSafe, hasKroInstances, } from './kro-delete.js';
32
36
  /** The single alchemy v2 resource type for any TypeKro KRO resource (RGD or CR instance). */
33
37
  export const KRO_RESOURCE_TYPE = 'TypeKro.KroResource';
34
38
  /**
@@ -44,18 +48,33 @@ export const KroResource = ResourceMod.Resource(KRO_RESOURCE_TYPE);
44
48
  * convergent create/update (apply the manifest, wait for readiness); `delete` performs the
45
49
  * finalizer-safe, shared-RGD-aware teardown.
46
50
  */
47
- export const kroProvider = ProviderMod.effect(KroResource, Effect.succeed({
51
+ export const kroProvider = ProviderMod.effect(KroResource,
52
+ // Typed so the service literal is checked directly against `ProviderService` (methods bivariant) —
53
+ // avoids the exactOptionalPropertyTypes friction of an inferred literal while keeping the effect-hosted
54
+ // registration the conformance boundary requires.
55
+ Effect.succeed({
48
56
  // `namespace` is identity-stable: a namespace change is a replacement, not an in-place update.
49
57
  stables: ['namespace'],
58
+ // Account-wide enumeration (powers `alchemy nuke`). A generic KRO resource isn't discoverable
59
+ // cluster-wide from props alone — TypeKro manages teardown through its own `delete` lifecycle —
60
+ // so this reports nothing to nuke rather than guessing (required by alchemy beta.58's ProviderService).
61
+ list: () => Effect.succeed([]),
50
62
  reconcile: Effect.fn(function* ({ news }) {
51
- return yield* Effect.promise(() => deployKroResource(news));
63
+ return yield* Effect.tryPromise({
64
+ try: (abortSignal) => deployKroResource(news, abortSignal),
65
+ catch: ensureError,
66
+ });
52
67
  }),
53
- delete: Effect.fn(function* ({ output, news, }) {
54
- // Prefer the live spec; fall back to reconstructing minimal props from persisted output
55
- // (a delete after the spec is gone e.g. resource removed from the stack).
56
- const props = news ?? propsFromOutput(output);
68
+ delete: Effect.fn(function* ({ output, olds }) {
69
+ // Prefer the live spec (`olds` the last-applied props; alchemy beta.58 renamed the delete
70
+ // input's spec field from `news` to `olds`); fall back to reconstructing minimal props from
71
+ // persisted output (a delete after the spec is gone — e.g. resource removed from the stack).
72
+ const props = olds ?? propsFromOutput(output);
57
73
  if (props) {
58
- yield* Effect.promise(() => deleteKroResource(props));
74
+ yield* Effect.tryPromise({
75
+ try: (abortSignal) => deleteKroResource(props, abortSignal),
76
+ catch: ensureError,
77
+ });
59
78
  }
60
79
  else {
61
80
  // Neither a live spec nor a usable output (e.g. a create that failed before persisting a
@@ -85,12 +104,15 @@ export const kroProvider = ProviderMod.effect(KroResource, Effect.succeed({
85
104
  * Declarations must be topologically ordered (as `toAlchemyResources` returns them) so each
86
105
  * dependency's output exists before its dependents reference it.
87
106
  */
88
- export function materializeAlchemyResources(kroResource, declarations) {
107
+ export function materializeAlchemyResources(kroResource, declarations, options = {}) {
89
108
  return Effect.gen(function* () {
90
109
  // Keyed by declaration id → the instantiated alchemy resource HANDLE (what `Output.of` consumes
91
110
  // and what carries the dependency edge); its resolved attributes are a `TypeKroResource`.
92
111
  const handles = {};
93
112
  for (const decl of declarations) {
113
+ if (Object.hasOwn(handles, decl.id)) {
114
+ throw new Error(`materializeAlchemyResources: duplicate declaration id '${decl.id}' in one materialization call.`);
115
+ }
94
116
  const deps = decl.dependsOn.map((id) => {
95
117
  const handle = handles[id];
96
118
  if (!handle) {
@@ -102,11 +124,18 @@ export function materializeAlchemyResources(kroResource, declarations) {
102
124
  }
103
125
  return handle;
104
126
  });
127
+ const artifactRequirements = decl.artifactRequirements ?? decl.props.artifactRequirements ?? [];
128
+ const artifactOutputUses = decl.artifactOutputUses ?? decl.props.artifactOutputUses ?? [];
129
+ const artifactOutputs = artifactOutputUses.length > 0
130
+ ? alchemyArtifactOutputs(artifactRequirements, artifactOutputUses, options)
131
+ : undefined;
105
132
  // `Output.all([...Output.of(dep)])` both (a) creates the alchemy dependency edges so these
106
133
  // deploy first and (b) resolves to the concrete dependency outputs handed to `reconcile`.
107
- const props = deps.length > 0
108
- ? { ...decl.props, dependencies: Output.all(...deps.map((d) => Output.of(d))) }
109
- : decl.props;
134
+ const props = {
135
+ ...decl.props,
136
+ ...(deps.length > 0 ? { dependencies: Output.all(...deps.map((d) => Output.of(d))) } : {}),
137
+ ...(artifactOutputs ? { artifactOutputs } : {}),
138
+ };
110
139
  // Cast: `props` carries an `Output` for `dependencies` that the `KroResource` constructor
111
140
  // accepts as an `Input<…>` and alchemy resolves before reconcile — the field's static type
112
141
  // is the resolved (post-evaluation) shape.
@@ -115,43 +144,102 @@ export function materializeAlchemyResources(kroResource, declarations) {
115
144
  return handles;
116
145
  });
117
146
  }
147
+ function alchemyArtifactOutputs(requirements, uses, options) {
148
+ const requirementsById = new Map(requirements.map((requirement) => [requirement.id, requirement]));
149
+ const uniqueUses = new Map();
150
+ for (const use of uses) {
151
+ const key = `${use.requirementId}\u0000${use.output}`;
152
+ const prior = uniqueUses.get(key);
153
+ uniqueUses.set(key, { ...use, sensitive: use.sensitive || prior?.sensitive === true });
154
+ }
155
+ const expressions = [];
156
+ const layout = [];
157
+ const handles = new Set();
158
+ for (const use of uniqueUses.values()) {
159
+ const requirement = requirementsById.get(use.requirementId);
160
+ if (!requirement || !requirement.outputs.includes(use.output)) {
161
+ throw new Error(`materializeAlchemyResources: declaration uses undeclared artifact output ${use.requirementId}.${use.output}.`);
162
+ }
163
+ const binding = options.artifacts?.[use.requirementId];
164
+ if (!binding) {
165
+ throw new Error(`materializeAlchemyResources: artifact requirement '${use.requirementId}' was not supplied.`);
166
+ }
167
+ if (!Object.hasOwn(binding.outputs, use.output)) {
168
+ throw new Error(`materializeAlchemyResources: artifact binding '${use.requirementId}' has no '${use.output}' output.`);
169
+ }
170
+ if (!handles.has(use.requirementId)) {
171
+ expressions.push(Output.of(binding.resource));
172
+ layout.push({ requirementId: use.requirementId, output: '', sensitive: false });
173
+ handles.add(use.requirementId);
174
+ }
175
+ expressions.push(Output.asOutput(binding.outputs[use.output]));
176
+ layout.push(use);
177
+ }
178
+ return Output.map(Output.all(...expressions), (resolved) => {
179
+ const outputs = {};
180
+ resolved.forEach((value, index) => {
181
+ const item = layout[index];
182
+ if (!item || item.output.length === 0)
183
+ return;
184
+ const requirementOutputs = outputs[item.requirementId] ?? {};
185
+ requirementOutputs[item.output] = item.sensitive ? Redacted.make(value) : value;
186
+ outputs[item.requirementId] = requirementOutputs;
187
+ });
188
+ return outputs;
189
+ });
190
+ }
118
191
  /**
119
192
  * Reconcile: deploy a single KRO resource (RGD or CR instance) and return its persisted state.
120
193
  * Convergent — alchemy calls this for both create and update; the deployer is idempotent apply.
121
194
  */
122
- async function deployKroResource(props) {
195
+ async function deployKroResource(props, abortSignal) {
196
+ abortSignal?.throwIfAborted();
123
197
  const logger = getComponentLogger('alchemy-deployment').child({ alchemyType: KRO_RESOURCE_TYPE });
124
198
  // Fail-closed PRE-HOIST guard on the ALCHEMY path (finding #7): before applying a
125
199
  // typekro-hoisted workload Namespace, refuse to proceed if it is still a KRO ApplySet
126
200
  // member from a pre-hoist RGD — rolling the new hoisted RGD over the old one would let
127
201
  // KRO's prune delete it. Cluster-checked here since `toAlchemyResources` is cluster-free.
128
202
  await _assertNoPreHoistNamespaceConflictAlchemy(props, logger);
203
+ abortSignal?.throwIfAborted();
129
204
  // Singleton-owner spec-drift protection (the declarative analog of `assertNoDeployedSingletonSpecDrift`
130
205
  // in the imperative deploy path): refuse to clobber a shared singleton that already exists with a
131
206
  // different spec. Cluster-checked here since `toAlchemyResources` is intentionally cluster-free.
132
207
  await _assertNoSingletonDrift(props, logger);
208
+ abortSignal?.throwIfAborted();
133
209
  // finding #2 (adopted-namespace): the hoisted workload Namespace is stamped
134
210
  // owned-by-this-RGD at BUILD time (cluster-free). READ the live namespace here and
135
211
  // KEEP that stamp ONLY when typekro actually creates it (404) or already owns it;
136
212
  // otherwise strip it so teardown never deletes a namespace typekro merely adopted.
137
213
  const effectiveProps = await _preserveHoistedNamespaceAdoption(props, logger);
214
+ abortSignal?.throwIfAborted();
138
215
  const { deployer, dispose } = await _resolveDeployer(effectiveProps, 'deployment');
139
216
  try {
140
217
  // Direct mode: hand the deployer the live state of this resource's dependencies so the engine
141
218
  // resolves its cross-resource references + CEL expressions against them (the deps deployed
142
219
  // first via alchemy ordering). KRO docs are self-contained, so the seed is irrelevant there.
143
220
  const seedResources = _seedFromDependencies(effectiveProps);
144
- // alchemy serializes props to state, flattening this resource's CEL refs to `${…}` STRINGS.
145
- // The engine resolver only evaluates CEL OBJECTS, so (direct mode, with dependency state to
146
- // resolve against) re-hydrate those strings into template CEL objects before deploying but
147
- // ONLY strings that reference a known dependency id, so genuine `${…}` literals (e.g. a shell
148
- // `${HOME}` in an env var) are left untouched.
149
- let resourceForDeploy = effectiveProps.resource;
150
- if (seedResources && effectiveProps.deploymentStrategy === 'direct') {
221
+ // New direct declarations carry a canonical per-resource execution record. Decode that record
222
+ // to restore structured references and runtime metadata without interpreting flattened YAML or
223
+ // JSON strings. The scanner branch remains only for legacy Alchemy state created before these
224
+ // records existed.
225
+ let resourceForDeploy = _resourceFromKroArtifactBundle(effectiveProps) ??
226
+ _resourceFromDirectArtifactRecord(effectiveProps) ??
227
+ unwrapAlchemyRedactedResource(effectiveProps.resource);
228
+ if (resourceForDeploy === effectiveProps.resource &&
229
+ seedResources &&
230
+ effectiveProps.deploymentStrategy === 'direct') {
151
231
  resourceForDeploy = _rehydrateCelStrings(effectiveProps.resource, new Set(seedResources.map((s) => s.id)));
152
232
  }
153
233
  else if (effectiveProps.deploymentStrategy === 'kro' &&
154
- effectiveProps.resource.kind !== 'ResourceGraphDefinition') {
234
+ resourceForDeploy.kind === 'ResourceGraphDefinition' &&
235
+ !getReadinessEvaluator(resourceForDeploy)) {
236
+ const { resourceGraphDefinition } = await import('../factories/kro/resource-graph-definition.js');
237
+ const wrapped = resourceGraphDefinition(resourceForDeploy);
238
+ copyResourceMetadata(resourceForDeploy, wrapped);
239
+ resourceForDeploy = wrapped;
240
+ }
241
+ else if (effectiveProps.deploymentStrategy === 'kro' &&
242
+ resourceForDeploy.kind !== 'ResourceGraphDefinition') {
155
243
  // KRO CR instance (the custom resource an RGD defines — not the RGD itself). After alchemy
156
244
  // serializes props to state, the resource is a plain manifest with no readiness evaluator, so a
157
245
  // `waitForReady` deploy throws "No readiness evaluator found for <Kind>". Re-wrap it with
@@ -159,18 +247,20 @@ async function deployKroResource(props) {
159
247
  // InstanceSynced) — the same KRO-instance readiness the imperative deploy path waits on. The RGD
160
248
  // is excluded (it carries its own evaluator via the resourceGraphDefinition factory).
161
249
  const { kroCustomResource } = await import('../factories/kro/kro-custom-resource.js');
162
- const r = effectiveProps.resource;
163
- resourceForDeploy = kroCustomResource({
250
+ const r = resourceForDeploy;
251
+ const wrapped = kroCustomResource({
164
252
  apiVersion: r.apiVersion ?? '',
165
253
  kind: r.kind ?? '',
166
254
  metadata: { ...(r.metadata ?? { name: '' }) },
167
255
  spec: (r.spec ?? {}),
168
256
  });
257
+ copyResourceMetadata(resourceForDeploy, wrapped);
258
+ resourceForDeploy = wrapped;
169
259
  }
170
260
  const deployProps = resourceForDeploy === effectiveProps.resource
171
261
  ? effectiveProps
172
262
  : { ...effectiveProps, resource: resourceForDeploy };
173
- const { resourceProperties } = await _deployAndCreateResult(deployProps, deployer, seedResources);
263
+ const { resourceProperties } = await _deployAndCreateResult(deployProps, deployer, seedResources, abortSignal);
174
264
  _logDeploymentSuccess(logger, KRO_RESOURCE_TYPE, effectiveProps, resourceProperties);
175
265
  return resourceProperties;
176
266
  }
@@ -182,31 +272,7 @@ async function deployKroResource(props) {
182
272
  await dispose();
183
273
  }
184
274
  }
185
- /**
186
- * Pure drift verdict (no I/O) for a singleton instance being deployed, given:
187
- * - `expectedFingerprint`: the spec-fingerprint annotation on the resource being deployed,
188
- * - `deployingSpec`: that resource's spec,
189
- * - `live`: the existing same-named owner on the cluster (or undefined if none).
190
- *
191
- * Mirrors the imperative `assertNoDeployedSingletonSpecDrift`, INCLUDING its fallback: an existing
192
- * owner with NO fingerprint annotation (a legacy/unfingerprinted owner) is still verified by
193
- * comparing serialized specs — so a different-spec legacy owner is NOT silently accepted.
194
- */
195
- export function singletonDriftVerdict(expectedFingerprint, deployingSpec, live) {
196
- if (!live)
197
- return { drift: false };
198
- const actual = live.metadata?.annotations?.[SINGLETON_SPEC_FINGERPRINT_ANNOTATION];
199
- if (actual === expectedFingerprint)
200
- return { drift: false };
201
- if (actual) {
202
- return { drift: true, reason: `existing fingerprint ${actual} does not match ${expectedFingerprint}` };
203
- }
204
- // Unfingerprinted (legacy) owner — fall back to comparing serialized specs.
205
- if (stableSerialize(live.spec) !== stableSerialize(deployingSpec)) {
206
- return { drift: true, reason: 'an existing unfingerprinted singleton owner has a different spec' };
207
- }
208
- return { drift: false };
209
- }
275
+ export { singletonDriftVerdict } from '../core/deployment/singleton-owner-drift.js';
210
276
  /**
211
277
  * Refuse to deploy a singleton owner whose identity already exists on the cluster with a DIFFERENT
212
278
  * spec — the declarative-path equivalent of the imperative `assertNoDeployedSingletonSpecDrift`. Only
@@ -470,7 +536,7 @@ function _seedFromDependencies(props) {
470
536
  const seed = deps
471
537
  .filter((d) => !!d?.deployedResource && !!d.resourceId)
472
538
  .map((d) => {
473
- const manifest = d.deployedResource;
539
+ const manifest = unwrapAlchemyRedactedResource(d.deployedResource);
474
540
  return {
475
541
  id: d.resourceId,
476
542
  kind: manifest.kind ?? 'Unknown',
@@ -484,6 +550,192 @@ function _seedFromDependencies(props) {
484
550
  });
485
551
  return seed.length > 0 ? seed : undefined;
486
552
  }
553
+ function unwrapAlchemyRedactedValue(value, seen = new WeakMap()) {
554
+ if (Redacted.isRedacted(value))
555
+ return Redacted.value(value);
556
+ if (!value || typeof value !== 'object')
557
+ return value;
558
+ const prior = seen.get(value);
559
+ if (prior !== undefined)
560
+ return prior;
561
+ if (Array.isArray(value)) {
562
+ const clone = [];
563
+ seen.set(value, clone);
564
+ value.forEach((entry) => clone.push(unwrapAlchemyRedactedValue(entry, seen)));
565
+ return clone;
566
+ }
567
+ const clone = {};
568
+ seen.set(value, clone);
569
+ for (const [key, entry] of Object.entries(value)) {
570
+ clone[key] = unwrapAlchemyRedactedValue(entry, seen);
571
+ }
572
+ return clone;
573
+ }
574
+ function unwrapAlchemyRedactedResource(resource) {
575
+ const unwrapped = unwrapAlchemyRedactedValue(resource);
576
+ if (unwrapped !== resource)
577
+ copyResourceMetadata(resource, unwrapped);
578
+ return unwrapped;
579
+ }
580
+ function artifactOutputsForOperation(source, props, preserveSensitiveInputs, operationLabel) {
581
+ const expectedUses = collectArtifactOutputUses(source);
582
+ if (expectedUses.length === 0)
583
+ return undefined;
584
+ const declaredUses = props.artifactOutputUses ?? [];
585
+ if (canonicalStringArray(expectedUses.map((use) => JSON.stringify(use))) !==
586
+ canonicalStringArray(declaredUses.map((use) => JSON.stringify(use)))) {
587
+ throw new Error(`${operationLabel} artifact-output use metadata does not match its canonical artifact.`);
588
+ }
589
+ const requirements = new Map((props.artifactRequirements ?? []).map((requirement) => [requirement.id, requirement]));
590
+ const supplied = props.artifactOutputs ?? {};
591
+ const resolved = {};
592
+ for (const use of expectedUses) {
593
+ const requirement = requirements.get(use.requirementId);
594
+ if (!requirement || !requirement.outputs.includes(use.output)) {
595
+ throw new Error(`${operationLabel} is missing declaration metadata for artifact output ${use.requirementId}.${use.output}.`);
596
+ }
597
+ const outputs = supplied[use.requirementId];
598
+ if (!outputs || !Object.hasOwn(outputs, use.output)) {
599
+ throw new Error(`${operationLabel} is missing resolved artifact output ${use.requirementId}.${use.output}.`);
600
+ }
601
+ const value = outputs[use.output];
602
+ if (use.sensitive && !Redacted.isRedacted(value)) {
603
+ throw new Error(`${operationLabel} sensitive artifact output ${use.requirementId}.${use.output} must be supplied as an Alchemy Redacted input.`);
604
+ }
605
+ const concreteValue = Redacted.isRedacted(value) ? Redacted.value(value) : value;
606
+ if (props.deploymentStrategy === 'kro' && typeof concreteValue !== 'string') {
607
+ throw new Error(`${operationLabel} artifact output ${use.requirementId}.${use.output} must be a string in KRO mode.`);
608
+ }
609
+ const requirementOutputs = resolved[use.requirementId] ?? {};
610
+ requirementOutputs[use.output] =
611
+ Redacted.isRedacted(value) && !preserveSensitiveInputs ? Redacted.value(value) : value;
612
+ resolved[use.requirementId] = requirementOutputs;
613
+ }
614
+ return resolved;
615
+ }
616
+ /**
617
+ * Decode one operation from the canonical KRO outer bundle persisted by
618
+ * Alchemy. The operation record, rather than the JSON-flattened resource, is
619
+ * authoritative for desired state and runtime metadata in new declarations.
620
+ */
621
+ function _resourceFromKroArtifactBundle(props, preserveSensitiveInputs = false) {
622
+ const encodedBundle = props.kroArtifactBundle;
623
+ const operationId = props.kroArtifactOperationId;
624
+ if (encodedBundle === undefined && operationId === undefined)
625
+ return undefined;
626
+ if (encodedBundle === undefined || operationId === undefined) {
627
+ throw new Error('KRO artifact state is incomplete: both kroArtifactBundle and kroArtifactOperationId are required.');
628
+ }
629
+ const bundle = decodeKroArtifactBundle(encodedBundle);
630
+ const operation = bundle.operations.find((candidate) => candidate.id === operationId);
631
+ if (!operation) {
632
+ throw new Error(`KRO artifact bundle ${bundle.bundleDigest} has no operation ${operationId}.`);
633
+ }
634
+ if (props.resourceId !== undefined && props.resourceId !== operation.artifact.id) {
635
+ throw new Error(`KRO artifact operation ${operationId} belongs to ${operation.artifact.id}, not ${props.resourceId}.`);
636
+ }
637
+ const dependencyOutputs = props.dependencies ?? [];
638
+ const missingOperationIds = dependencyOutputs.filter((dependency) => typeof dependency.kroArtifactOperationId !== 'string');
639
+ if (missingOperationIds.length > 0) {
640
+ throw new Error(`KRO artifact dependency mismatch for ${operationId}: ${missingOperationIds.length} dependency output(s) have no operation identity.`);
641
+ }
642
+ const suppliedDependencies = dependencyOutputs.map((dependency) => dependency.kroArtifactOperationId);
643
+ if (canonicalStringArray(suppliedDependencies) !== canonicalStringArray(operation.dependencies)) {
644
+ throw new Error(`KRO artifact dependency mismatch for ${operationId}: expected [${operation.dependencies.join(', ')}], received [${suppliedDependencies.join(', ')}].`);
645
+ }
646
+ const requiredBindings = planValueSensitiveBindingNames(operation.manifest);
647
+ const suppliedBindings = props.sensitiveBindings ?? {};
648
+ const missingBindings = requiredBindings.filter((binding) => !Object.hasOwn(suppliedBindings, binding));
649
+ if (missingBindings.length > 0) {
650
+ throw new Error(`KRO artifact operation ${operationId} is missing sensitive binding(s): ${missingBindings.join(', ')}.`);
651
+ }
652
+ const sensitive = Object.fromEntries(requiredBindings.map((binding) => {
653
+ const value = suppliedBindings[binding];
654
+ if (!Redacted.isRedacted(value)) {
655
+ throw new Error(`KRO artifact sensitive binding ${binding} must be supplied as an Alchemy Redacted input.`);
656
+ }
657
+ return [binding, preserveSensitiveInputs ? value : Redacted.value(value)];
658
+ }));
659
+ const artifactOutputs = artifactOutputsForOperation(operation.manifest, props, preserveSensitiveInputs, `KRO artifact operation ${operationId}`);
660
+ const resource = materializeKroArtifactBundleOperation(operation, {
661
+ ...(Object.keys(sensitive).length > 0 ? { sensitive } : {}),
662
+ ...(artifactOutputs ? { artifactOutputs } : {}),
663
+ });
664
+ Object.defineProperty(resource, 'id', {
665
+ value: operation.artifact.id,
666
+ configurable: true,
667
+ enumerable: false,
668
+ });
669
+ setResourceId(resource, operation.artifact.id);
670
+ if (operation.artifact.identity?.scope) {
671
+ setMetadataField(resource, 'scope', operation.artifact.identity.scope);
672
+ }
673
+ setMetadataField(resource, 'applyPolicy', operation.artifact.apply);
674
+ const strategy = operation.artifact.readiness.strategy;
675
+ if (strategy?.kind === 'runtime-binding') {
676
+ const evaluator = getReadinessEvaluator(props.resource);
677
+ if (!evaluator) {
678
+ throw new Error(`KRO readiness binding ${strategy.binding} is unavailable for operation ${operationId}.`);
679
+ }
680
+ setReadinessEvaluator(resource, evaluator);
681
+ }
682
+ else if (strategy?.kind === 'registered') {
683
+ const evaluator = resolvePortableReadinessStrategy(strategy);
684
+ if (!evaluator) {
685
+ throw new Error(`Registered readiness strategy ${strategy.id}@${strategy.revision} is unavailable for KRO operation ${operationId}.`);
686
+ }
687
+ setReadinessEvaluator(resource, evaluator);
688
+ }
689
+ return resource;
690
+ }
691
+ /** Internal test hook for canonical KRO-bundle state rehydration. */
692
+ export const resourceFromKroArtifactBundleForTest = _resourceFromKroArtifactBundle;
693
+ /**
694
+ * Decode the canonical direct execution record and reconstruct the exact
695
+ * runtime manifest contract. This is the authoritative Alchemy path for new
696
+ * declarations; the string rehydration below remains legacy-state support.
697
+ */
698
+ function _resourceFromDirectArtifactRecord(props, preserveSensitiveInputs = false) {
699
+ if (props.deploymentStrategy !== 'direct' || !props.artifactExecutionRecord)
700
+ return undefined;
701
+ const record = decodeDirectArtifactExecutionRecord(props.artifactExecutionRecord);
702
+ const logicalId = record.artifact.sourceNodeId ?? record.artifact.id;
703
+ if (props.resourceId !== undefined && props.resourceId !== logicalId) {
704
+ throw new Error(`Direct artifact record ${record.artifact.id} belongs to ${logicalId}, not ${props.resourceId}.`);
705
+ }
706
+ const suppliedDependencies = (props.dependencies ?? [])
707
+ .map((dependency) => dependency.resourceId)
708
+ .filter((resourceId) => typeof resourceId === 'string')
709
+ .sort();
710
+ if (canonicalStringArray(suppliedDependencies) !== canonicalStringArray(record.dependencies)) {
711
+ throw new Error(`Direct artifact dependency mismatch for ${logicalId}: expected [${record.dependencies.join(', ')}], received [${suppliedDependencies.join(', ')}].`);
712
+ }
713
+ const evaluator = getReadinessEvaluator(props.resource);
714
+ const strategy = record.artifact.readiness.strategy;
715
+ const readinessEvaluators = strategy?.kind === 'runtime-binding' && evaluator
716
+ ? { [strategy.binding]: evaluator }
717
+ : undefined;
718
+ const sensitive = Object.fromEntries(Object.entries(props.sensitiveBindings ?? {}).map(([binding, value]) => {
719
+ if (!Redacted.isRedacted(value)) {
720
+ throw new Error(`Direct artifact sensitive binding ${binding} must be supplied as an Alchemy Redacted input.`);
721
+ }
722
+ return [binding, preserveSensitiveInputs ? value : Redacted.value(value)];
723
+ }));
724
+ const artifactOutputs = artifactOutputsForOperation(record.artifact, props, preserveSensitiveInputs, `Direct artifact ${logicalId}`);
725
+ return materializeDirectArtifactManifest(record.artifact, {
726
+ instanceName: props.resourceId ?? logicalId,
727
+ runtimeResources: { [logicalId]: props.resource },
728
+ ...(Object.keys(sensitive).length > 0 ? { sensitive } : {}),
729
+ ...(artifactOutputs ? { artifactOutputs } : {}),
730
+ ...(readinessEvaluators ? { readinessEvaluators } : {}),
731
+ resolveReadinessStrategy: resolvePortableReadinessStrategy,
732
+ }, props.resourceId ?? logicalId);
733
+ }
734
+ /** Internal test hook for canonical direct-artifact state rehydration. */
735
+ export const resourceFromDirectArtifactRecordForTest = _resourceFromDirectArtifactRecord;
736
+ function canonicalStringArray(values) {
737
+ return JSON.stringify([...new Set(values)].sort());
738
+ }
487
739
  /**
488
740
  * Deep-clone `value`, converting strings that contain a `${dependencyId.…}` placeholder into a
489
741
  * template {@link CelExpression} object so the engine resolver evaluates them (alchemy's state
@@ -537,6 +789,15 @@ function propsFromOutput(output) {
537
789
  return {
538
790
  resource: output.resource,
539
791
  ...(output.resourceId !== undefined && { resourceId: output.resourceId }),
792
+ ...(output.artifactExecutionRecord !== undefined && {
793
+ artifactExecutionRecord: output.artifactExecutionRecord,
794
+ }),
795
+ ...(output.kroArtifactBundle !== undefined && {
796
+ kroArtifactBundle: output.kroArtifactBundle,
797
+ }),
798
+ ...(output.kroArtifactOperationId !== undefined && {
799
+ kroArtifactOperationId: output.kroArtifactOperationId,
800
+ }),
540
801
  namespace: output.namespace,
541
802
  deploymentStrategy: output.deploymentStrategy ?? 'kro',
542
803
  ...(output.kubeConfigOptions !== undefined && { kubeConfigOptions: output.kubeConfigOptions }),
@@ -558,8 +819,12 @@ function _createClientProvider(props, phase) {
558
819
  hasCluster: !!props.kubeConfigOptions?.cluster,
559
820
  hasUser: !!props.kubeConfigOptions?.user,
560
821
  });
561
- // Use the centralized KubernetesClientProvider with the provided configuration
562
- const clientProvider = createKubernetesClientProvider(props.kubeConfigOptions);
822
+ // Resolve named host bindings only inside the provider operation. Durable state contains
823
+ // binding identities, never the credential bytes they produce.
824
+ const kubeConfigOptions = props.kubeConfigOptions
825
+ ? materializeSerializableKubeConfigOptions(props.kubeConfigOptions)
826
+ : undefined;
827
+ const clientProvider = createKubernetesClientProvider(kubeConfigOptions);
563
828
  // Get the configured KubeConfig from the provider
564
829
  const kubeConfig = clientProvider.getKubeConfig();
565
830
  alchemyLogger.debug(`KubernetesClientProvider created successfully (${phase} phase)`, {
@@ -580,11 +845,32 @@ async function _createDeployer(kc, props) {
580
845
  return new DirectTypeKroDeployer(engine);
581
846
  }
582
847
  const kroDeletion = props.kroDeletion ?? inferKroDeletionOptions(props);
583
- return new KroTypeKroDeployer(engine, kroDeletion ? {
584
- deleteInstance: (name) => deleteKroInstanceFinalizerSafe(kc, name, kroDeletion),
585
- shouldSkipRgdDelete: () => hasKroInstances(kc, kroDeletion),
586
- deleteResourceGraphDefinition: () => deleteKroDefinition(kc, kroDeletion),
587
- } : {});
848
+ const validateInstanceSpec = shouldValidateKroInstanceAdmission(props);
849
+ return new KroTypeKroDeployer(engine, {
850
+ ...(validateInstanceSpec ? { validateInstanceSpec: true } : {}),
851
+ ...(kroDeletion
852
+ ? {
853
+ deleteInstance: (name, abortSignal) => deleteKroInstanceFinalizerSafe(kc, name, kroDeletion, abortSignal),
854
+ shouldSkipRgdDelete: (_rgdName, abortSignal) => hasKroInstances(kc, kroDeletion, abortSignal),
855
+ deleteResourceGraphDefinition: (_rgdName, abortSignal) => deleteKroDefinition(kc, kroDeletion, undefined, abortSignal),
856
+ }
857
+ : {}),
858
+ });
859
+ }
860
+ function shouldValidateKroInstanceAdmission(props) {
861
+ if (props.deploymentStrategy !== 'kro')
862
+ return false;
863
+ if (props.kroArtifactBundle !== undefined || props.kroArtifactOperationId !== undefined) {
864
+ if (props.kroArtifactBundle === undefined || props.kroArtifactOperationId === undefined) {
865
+ return false;
866
+ }
867
+ const bundle = decodeKroArtifactBundle(props.kroArtifactBundle);
868
+ const operation = bundle.operations.find((candidate) => candidate.id === props.kroArtifactOperationId);
869
+ return operation?.role === 'instance' || operation?.role === 'singleton-owner-instance';
870
+ }
871
+ // Legacy Alchemy declarations predate operation roles. Their KRO resources are
872
+ // either the RGD itself or its root custom resource instance.
873
+ return props.resource.kind !== 'ResourceGraphDefinition';
588
874
  }
589
875
  function fullApiVersion(apiVersion, group) {
590
876
  if (typeof apiVersion !== 'string' || apiVersion.length === 0)
@@ -614,7 +900,9 @@ function inferKroDeletionOptions(props) {
614
900
  apiVersion,
615
901
  kind: schema.kind,
616
902
  ...(typeof schema.group === 'string' && { group: schema.group }),
617
- namespace: typeof resource.metadata.namespace === 'string' ? resource.metadata.namespace : props.namespace,
903
+ namespace: typeof resource.metadata.namespace === 'string'
904
+ ? resource.metadata.namespace
905
+ : props.namespace,
618
906
  rgdName: resource.metadata.name,
619
907
  timeout: props.options?.timeout ?? DEFAULT_DEPLOYMENT_TIMEOUT,
620
908
  };
@@ -630,7 +918,9 @@ function inferKroDeletionOptions(props) {
630
918
  apiVersion: resource.apiVersion,
631
919
  kind: resource.kind,
632
920
  ...(group && { group }),
633
- namespace: typeof resource.metadata?.namespace === 'string' ? resource.metadata.namespace : props.namespace,
921
+ namespace: typeof resource.metadata?.namespace === 'string'
922
+ ? resource.metadata.namespace
923
+ : props.namespace,
634
924
  rgdName,
635
925
  timeout: props.options?.timeout ?? DEFAULT_DEPLOYMENT_TIMEOUT,
636
926
  };
@@ -657,7 +947,8 @@ async function _resolveDeployer(props, phase) {
657
947
  * stacks' instances reference), we log and let alchemy drop the state entry — the orphaned
658
948
  * RGD is cluster-scoped and dies with the cluster; it must not wedge the destroy.
659
949
  */
660
- async function deleteKroResource(props) {
950
+ async function deleteKroResource(props, abortSignal) {
951
+ abortSignal?.throwIfAborted();
661
952
  const logger = getComponentLogger('alchemy-deployment').child({ alchemyType: KRO_RESOURCE_TYPE });
662
953
  // Retained (shared) resources — e.g. the KRO instance control-plane Namespace —
663
954
  // must survive a single stack's teardown/prune: another stack targeting the same
@@ -689,6 +980,7 @@ async function deleteKroResource(props) {
689
980
  return;
690
981
  }
691
982
  const kubeConfig = _createClientProvider(props, 'delete');
983
+ abortSignal?.throwIfAborted();
692
984
  await deleteNamespaceIfEmpty(kubeConfig, namespaceName, {
693
985
  logger,
694
986
  // Ownership record (finding #4) + gated delete (finding #1): only delete a
@@ -697,14 +989,16 @@ async function deleteKroResource(props) {
697
989
  ...(props.options?.timeout !== undefined && { timeoutMs: props.options.timeout }),
698
990
  context: { alchemyType: KRO_RESOURCE_TYPE },
699
991
  });
992
+ abortSignal?.throwIfAborted();
700
993
  return;
701
994
  }
702
995
  const { deployer, dispose } = await _resolveDeployer(props, 'delete');
703
996
  try {
704
997
  await deployer.delete(props.resource, {
705
- mode: 'alchemy',
998
+ mode: props.deploymentStrategy,
706
999
  namespace: props.namespace,
707
1000
  ...props.options,
1001
+ ...(abortSignal ? { abortSignal } : {}),
708
1002
  });
709
1003
  }
710
1004
  catch (error) {
@@ -727,8 +1021,8 @@ export const deleteKroResourceForTest = deleteKroResource;
727
1021
  /**
728
1022
  * Deploy resource and create deployment result
729
1023
  */
730
- async function _deployAndCreateResult(props, deployer, seedResources) {
731
- const deploymentOptions = buildAlchemyDeploymentOptions(props);
1024
+ async function _deployAndCreateResult(props, deployer, seedResources, abortSignal) {
1025
+ const deploymentOptions = buildAlchemyDeploymentOptions(props, abortSignal);
732
1026
  // Deploy using the created deployer. The deployer/engine resolves references + CEL expressions,
733
1027
  // seeded (direct mode) with dependencies' live state so cross-resource refs resolve.
734
1028
  const deployedResource = await deployer.deploy(props.resource, deploymentOptions, seedResources);
@@ -739,12 +1033,25 @@ async function _deployAndCreateResult(props, deployer, seedResources) {
739
1033
  // structuredClone to throw "Cannot serialize unique symbol" errors.
740
1034
  // 2. JSON round-trip strips symbols, functions, and undefined values — which is
741
1035
  // exactly the behavior we want for creating clean Alchemy state entries.
742
- const cleanResource = cloneResourceForAlchemyState(props.resource);
743
- const cleanDeployedResource = cloneResourceForAlchemyState(deployedResource, getResourceScope(cleanResource));
1036
+ const stateResource = _resourceFromKroArtifactBundle(props, true) ??
1037
+ _resourceFromDirectArtifactRecord(props, true) ??
1038
+ redactSecretResourceForAlchemyState(props.resource);
1039
+ const stateDeployedResource = mergeLiveResourceState(stateResource, deployedResource);
1040
+ const cleanResource = cloneResourceForAlchemyState(stateResource);
1041
+ const cleanDeployedResource = cloneResourceForAlchemyState(stateDeployedResource, getResourceScope(cleanResource));
744
1042
  // Create the resource properties for Alchemy
745
1043
  const resourceProperties = {
746
1044
  resource: cleanResource,
747
1045
  ...(props.resourceId !== undefined && { resourceId: props.resourceId }),
1046
+ ...(props.artifactExecutionRecord !== undefined && {
1047
+ artifactExecutionRecord: props.artifactExecutionRecord,
1048
+ }),
1049
+ ...(props.kroArtifactBundle !== undefined && {
1050
+ kroArtifactBundle: props.kroArtifactBundle,
1051
+ }),
1052
+ ...(props.kroArtifactOperationId !== undefined && {
1053
+ kroArtifactOperationId: props.kroArtifactOperationId,
1054
+ }),
748
1055
  namespace: props.namespace,
749
1056
  deploymentStrategy: props.deploymentStrategy,
750
1057
  ...(props.kubeConfigOptions !== undefined && { kubeConfigOptions: props.kubeConfigOptions }),
@@ -759,7 +1066,7 @@ async function _deployAndCreateResult(props, deployer, seedResources) {
759
1066
  return { resourceProperties };
760
1067
  }
761
1068
  function cloneResourceForAlchemyState(resource, fallbackScope) {
762
- const cleanResource = JSON.parse(JSON.stringify(resource));
1069
+ const cleanResource = cloneAlchemyStateValue(resource);
763
1070
  const scope = getResourceScope(resource) ??
764
1071
  fallbackScope ??
765
1072
  cleanResource.scope;
@@ -771,16 +1078,73 @@ function cloneResourceForAlchemyState(resource, fallbackScope) {
771
1078
  }
772
1079
  return cleanResource;
773
1080
  }
1081
+ function cloneAlchemyStateValue(value, seen = new WeakMap()) {
1082
+ if (Redacted.isRedacted(value))
1083
+ return value;
1084
+ if (value === null || typeof value !== 'object') {
1085
+ return typeof value === 'function' || typeof value === 'symbol' || value === undefined
1086
+ ? undefined
1087
+ : value;
1088
+ }
1089
+ if (value instanceof Date)
1090
+ return value.toJSON();
1091
+ const prior = seen.get(value);
1092
+ if (prior !== undefined)
1093
+ return prior;
1094
+ if (Array.isArray(value)) {
1095
+ const clone = [];
1096
+ seen.set(value, clone);
1097
+ value.forEach((entry) => clone.push(cloneAlchemyStateValue(entry, seen)));
1098
+ return clone;
1099
+ }
1100
+ const clone = {};
1101
+ seen.set(value, clone);
1102
+ for (const [key, entry] of Object.entries(value)) {
1103
+ const cloned = cloneAlchemyStateValue(entry, seen);
1104
+ if (cloned !== undefined)
1105
+ clone[key] = cloned;
1106
+ }
1107
+ return clone;
1108
+ }
1109
+ function redactSecretResourceForAlchemyState(resource) {
1110
+ if (resource.kind !== 'Secret')
1111
+ return resource;
1112
+ const redactMap = (value) => {
1113
+ if (!value || typeof value !== 'object' || Array.isArray(value))
1114
+ return value;
1115
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
1116
+ key,
1117
+ Redacted.isRedacted(entry) ? entry : Redacted.make(entry),
1118
+ ]));
1119
+ };
1120
+ return {
1121
+ ...resource,
1122
+ ...(Reflect.has(resource, 'data') ? { data: redactMap(Reflect.get(resource, 'data')) } : {}),
1123
+ ...(Reflect.has(resource, 'stringData')
1124
+ ? { stringData: redactMap(Reflect.get(resource, 'stringData')) }
1125
+ : {}),
1126
+ };
1127
+ }
1128
+ function mergeLiveResourceState(desired, live) {
1129
+ const liveMetadata = live.metadata;
1130
+ const runtimeMetadata = Object.fromEntries(['uid', 'resourceVersion', 'generation', 'creationTimestamp'].flatMap((key) => liveMetadata?.[key] === undefined ? [] : [[key, liveMetadata[key]]]));
1131
+ return {
1132
+ ...desired,
1133
+ metadata: { ...(desired.metadata ?? { name: '' }), ...runtimeMetadata },
1134
+ ...(Reflect.has(live, 'status') ? { status: Reflect.get(live, 'status') } : {}),
1135
+ };
1136
+ }
774
1137
  /** Internal test hook for Alchemy state serialization semantics. */
775
1138
  export const cloneResourceForAlchemyStateForTest = cloneResourceForAlchemyState;
776
- export function buildAlchemyDeploymentOptions(props) {
1139
+ export function buildAlchemyDeploymentOptions(props, abortSignal) {
777
1140
  const { waitForReady, timeout, ...deploymentMetadataOptions } = props.options ?? {};
778
1141
  return {
779
- mode: 'alchemy',
1142
+ mode: props.deploymentStrategy,
780
1143
  namespace: props.namespace,
781
1144
  ...deploymentMetadataOptions,
782
1145
  waitForReady: waitForReady ?? true,
783
1146
  timeout: timeout ?? DEFAULT_DEPLOYMENT_TIMEOUT,
1147
+ ...(abortSignal ? { abortSignal } : {}),
784
1148
  };
785
1149
  }
786
1150
  /**