typekro 0.3.1 → 0.5.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 (1280) hide show
  1. package/README.md +142 -1054
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/advanced/index.d.ts +52 -0
  4. package/dist/advanced/index.d.ts.map +1 -0
  5. package/dist/advanced/index.js +60 -0
  6. package/dist/advanced/index.js.map +1 -0
  7. package/dist/alchemy/deployers.d.ts +0 -5
  8. package/dist/alchemy/deployers.d.ts.map +1 -1
  9. package/dist/alchemy/deployers.js +26 -89
  10. package/dist/alchemy/deployers.js.map +1 -1
  11. package/dist/alchemy/index.d.ts +8 -8
  12. package/dist/alchemy/index.d.ts.map +1 -1
  13. package/dist/alchemy/index.js +12 -11
  14. package/dist/alchemy/index.js.map +1 -1
  15. package/dist/alchemy/resolver.d.ts.map +1 -1
  16. package/dist/alchemy/resolver.js +6 -5
  17. package/dist/alchemy/resolver.js.map +1 -1
  18. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  19. package/dist/alchemy/resource-registration.js +20 -8
  20. package/dist/alchemy/resource-registration.js.map +1 -1
  21. package/dist/alchemy/type-inference.d.ts.map +1 -1
  22. package/dist/alchemy/type-inference.js +6 -5
  23. package/dist/alchemy/type-inference.js.map +1 -1
  24. package/dist/alchemy/types.d.ts +1 -1
  25. package/dist/alchemy/types.d.ts.map +1 -1
  26. package/dist/alchemy/utilities.d.ts.map +1 -1
  27. package/dist/alchemy/utilities.js +1 -1
  28. package/dist/alchemy/utilities.js.map +1 -1
  29. package/dist/alchemy/wrapper.d.ts +4 -2
  30. package/dist/alchemy/wrapper.d.ts.map +1 -1
  31. package/dist/alchemy/wrapper.js +2 -1
  32. package/dist/alchemy/wrapper.js.map +1 -1
  33. package/dist/compositions/typekro-runtime/index.d.ts +3 -0
  34. package/dist/compositions/typekro-runtime/index.d.ts.map +1 -0
  35. package/dist/compositions/typekro-runtime/index.js.map +1 -0
  36. package/dist/{core/composition → compositions}/typekro-runtime/typekro-runtime.d.ts +7 -10
  37. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -0
  38. package/dist/compositions/typekro-runtime/typekro-runtime.js +404 -0
  39. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -0
  40. package/dist/compositions/typekro-runtime/types.d.ts +45 -0
  41. package/dist/compositions/typekro-runtime/types.d.ts.map +1 -0
  42. package/dist/compositions/typekro-runtime/types.js.map +1 -0
  43. package/dist/core/composition/context.d.ts +91 -0
  44. package/dist/core/composition/context.d.ts.map +1 -0
  45. package/dist/core/composition/context.js +125 -0
  46. package/dist/core/composition/context.js.map +1 -0
  47. package/dist/core/composition/imperative.d.ts +37 -11
  48. package/dist/core/composition/imperative.d.ts.map +1 -1
  49. package/dist/core/composition/imperative.js +433 -37
  50. package/dist/core/composition/imperative.js.map +1 -1
  51. package/dist/core/composition/index.d.ts +2 -4
  52. package/dist/core/composition/index.d.ts.map +1 -1
  53. package/dist/core/composition/index.js +1 -4
  54. package/dist/core/composition/index.js.map +1 -1
  55. package/dist/core/composition-debugger.d.ts +78 -0
  56. package/dist/core/composition-debugger.d.ts.map +1 -0
  57. package/dist/core/composition-debugger.js +142 -0
  58. package/dist/core/composition-debugger.js.map +1 -0
  59. package/dist/core/config/defaults.d.ts +109 -0
  60. package/dist/core/config/defaults.d.ts.map +1 -0
  61. package/dist/core/config/defaults.js +150 -0
  62. package/dist/core/config/defaults.js.map +1 -0
  63. package/dist/core/config/env.d.ts +12 -0
  64. package/dist/core/config/env.d.ts.map +1 -0
  65. package/dist/core/config/env.js +16 -0
  66. package/dist/core/config/env.js.map +1 -0
  67. package/dist/core/config/index.d.ts +3 -0
  68. package/dist/core/config/index.d.ts.map +1 -0
  69. package/dist/core/config/index.js +3 -0
  70. package/dist/core/config/index.js.map +1 -0
  71. package/dist/core/constants/brands.d.ts +4 -37
  72. package/dist/core/constants/brands.d.ts.map +1 -1
  73. package/dist/core/constants/brands.js +4 -40
  74. package/dist/core/constants/brands.js.map +1 -1
  75. package/dist/core/dependencies/graph.d.ts.map +1 -1
  76. package/dist/core/dependencies/graph.js +4 -4
  77. package/dist/core/dependencies/graph.js.map +1 -1
  78. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  79. package/dist/core/dependencies/resolver.js +3 -3
  80. package/dist/core/dependencies/resolver.js.map +1 -1
  81. package/dist/core/deployment/client-provider-manager.d.ts +40 -0
  82. package/dist/core/deployment/client-provider-manager.d.ts.map +1 -0
  83. package/dist/core/deployment/client-provider-manager.js +63 -0
  84. package/dist/core/deployment/client-provider-manager.js.map +1 -0
  85. package/dist/core/deployment/closure-planner.d.ts +20 -0
  86. package/dist/core/deployment/closure-planner.d.ts.map +1 -0
  87. package/dist/core/deployment/closure-planner.js +96 -0
  88. package/dist/core/deployment/closure-planner.js.map +1 -0
  89. package/dist/core/deployment/crd-manager.d.ts +52 -0
  90. package/dist/core/deployment/crd-manager.d.ts.map +1 -0
  91. package/dist/core/deployment/crd-manager.js +227 -0
  92. package/dist/core/deployment/crd-manager.js.map +1 -0
  93. package/dist/core/deployment/debug-logger.d.ts +3 -14
  94. package/dist/core/deployment/debug-logger.d.ts.map +1 -1
  95. package/dist/core/deployment/debug-logger.js +41 -12
  96. package/dist/core/deployment/debug-logger.js.map +1 -1
  97. package/dist/core/deployment/direct-factory.d.ts +59 -9
  98. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  99. package/dist/core/deployment/direct-factory.js +494 -117
  100. package/dist/core/deployment/direct-factory.js.map +1 -1
  101. package/dist/core/deployment/engine.d.ts +126 -64
  102. package/dist/core/deployment/engine.d.ts.map +1 -1
  103. package/dist/core/deployment/engine.js +611 -1227
  104. package/dist/core/deployment/engine.js.map +1 -1
  105. package/dist/core/deployment/errors.d.ts +30 -0
  106. package/dist/core/deployment/errors.d.ts.map +1 -0
  107. package/dist/core/deployment/errors.js +84 -0
  108. package/dist/core/deployment/errors.js.map +1 -0
  109. package/dist/core/deployment/event-filter.d.ts.map +1 -1
  110. package/dist/core/deployment/event-filter.js +21 -18
  111. package/dist/core/deployment/event-filter.js.map +1 -1
  112. package/dist/core/deployment/event-monitor.d.ts +36 -2
  113. package/dist/core/deployment/event-monitor.d.ts.map +1 -1
  114. package/dist/core/deployment/event-monitor.js +279 -51
  115. package/dist/core/deployment/event-monitor.js.map +1 -1
  116. package/dist/core/deployment/index.d.ts +5 -2
  117. package/dist/core/deployment/index.d.ts.map +1 -1
  118. package/dist/core/deployment/index.js +5 -3
  119. package/dist/core/deployment/index.js.map +1 -1
  120. package/dist/core/deployment/k8s-helpers.d.ts +44 -0
  121. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -0
  122. package/dist/core/deployment/k8s-helpers.js +109 -0
  123. package/dist/core/deployment/k8s-helpers.js.map +1 -0
  124. package/dist/core/deployment/kro-factory.d.ts +41 -13
  125. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  126. package/dist/core/deployment/kro-factory.js +355 -210
  127. package/dist/core/deployment/kro-factory.js.map +1 -1
  128. package/dist/core/deployment/kro-readiness.d.ts +54 -0
  129. package/dist/core/deployment/kro-readiness.d.ts.map +1 -0
  130. package/dist/core/deployment/kro-readiness.js +140 -0
  131. package/dist/core/deployment/kro-readiness.js.map +1 -0
  132. package/dist/core/deployment/readiness-waiter.d.ts +60 -0
  133. package/dist/core/deployment/readiness-waiter.d.ts.map +1 -0
  134. package/dist/core/deployment/readiness-waiter.js +245 -0
  135. package/dist/core/deployment/readiness-waiter.js.map +1 -0
  136. package/dist/core/deployment/readiness.d.ts +3 -9
  137. package/dist/core/deployment/readiness.d.ts.map +1 -1
  138. package/dist/core/deployment/readiness.js +16 -30
  139. package/dist/core/deployment/readiness.js.map +1 -1
  140. package/dist/core/deployment/resource-applier.d.ts +58 -0
  141. package/dist/core/deployment/resource-applier.d.ts.map +1 -0
  142. package/dist/core/deployment/resource-applier.js +385 -0
  143. package/dist/core/deployment/resource-applier.js.map +1 -0
  144. package/dist/core/deployment/rollback-manager.d.ts +21 -3
  145. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  146. package/dist/core/deployment/rollback-manager.js +132 -13
  147. package/dist/core/deployment/rollback-manager.js.map +1 -1
  148. package/dist/core/deployment/shared-utilities.d.ts +38 -9
  149. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  150. package/dist/core/deployment/shared-utilities.js +92 -22
  151. package/dist/core/deployment/shared-utilities.js.map +1 -1
  152. package/dist/core/deployment/status-hydrator.d.ts +1 -1
  153. package/dist/core/deployment/status-hydrator.d.ts.map +1 -1
  154. package/dist/core/deployment/status-hydrator.js +21 -15
  155. package/dist/core/deployment/status-hydrator.js.map +1 -1
  156. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
  157. package/dist/core/deployment/strategies/alchemy-strategy.js +16 -9
  158. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
  159. package/dist/core/deployment/strategies/base-strategy.d.ts +14 -0
  160. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  161. package/dist/core/deployment/strategies/base-strategy.js +326 -206
  162. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  163. package/dist/core/deployment/strategies/direct-strategy.d.ts +10 -3
  164. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  165. package/dist/core/deployment/strategies/direct-strategy.js +60 -1
  166. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  167. package/dist/core/deployment/strategies/kro-strategy.d.ts +16 -6
  168. package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
  169. package/dist/core/deployment/strategies/kro-strategy.js +57 -105
  170. package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
  171. package/dist/core/errors.d.ts +134 -83
  172. package/dist/core/errors.d.ts.map +1 -1
  173. package/dist/core/errors.js +177 -300
  174. package/dist/core/errors.js.map +1 -1
  175. package/dist/core/expressions/analysis/analyzer.d.ts +155 -0
  176. package/dist/core/expressions/analysis/analyzer.d.ts.map +1 -0
  177. package/dist/core/expressions/analysis/analyzer.js +540 -0
  178. package/dist/core/expressions/analysis/analyzer.js.map +1 -0
  179. package/dist/core/expressions/analysis/array-method-converters.d.ts +19 -0
  180. package/dist/core/expressions/analysis/array-method-converters.d.ts.map +1 -0
  181. package/dist/core/expressions/analysis/array-method-converters.js +175 -0
  182. package/dist/core/expressions/analysis/array-method-converters.js.map +1 -0
  183. package/dist/core/expressions/analysis/ast-helpers.d.ts +49 -0
  184. package/dist/core/expressions/analysis/ast-helpers.d.ts.map +1 -0
  185. package/dist/core/expressions/analysis/ast-helpers.js +106 -0
  186. package/dist/core/expressions/analysis/ast-helpers.js.map +1 -0
  187. package/dist/core/expressions/analysis/ast-node-converters.d.ts +15 -0
  188. package/dist/core/expressions/analysis/ast-node-converters.d.ts.map +1 -0
  189. package/dist/core/expressions/analysis/ast-node-converters.js +123 -0
  190. package/dist/core/expressions/analysis/ast-node-converters.js.map +1 -0
  191. package/dist/core/expressions/analysis/ast-type-guards.d.ts +14 -0
  192. package/dist/core/expressions/analysis/ast-type-guards.d.ts.map +1 -0
  193. package/dist/core/expressions/analysis/ast-type-guards.js +15 -0
  194. package/dist/core/expressions/analysis/ast-type-guards.js.map +1 -0
  195. package/dist/core/expressions/{cache.d.ts → analysis/cache.d.ts} +1 -1
  196. package/dist/core/expressions/analysis/cache.d.ts.map +1 -0
  197. package/dist/core/expressions/{cache.js → analysis/cache.js} +13 -13
  198. package/dist/core/expressions/analysis/cache.js.map +1 -0
  199. package/dist/core/expressions/analysis/call-expression-converters.d.ts +18 -0
  200. package/dist/core/expressions/analysis/call-expression-converters.d.ts.map +1 -0
  201. package/dist/core/expressions/analysis/call-expression-converters.js +220 -0
  202. package/dist/core/expressions/analysis/call-expression-converters.js.map +1 -0
  203. package/dist/core/expressions/analysis/cel-emitter.d.ts +85 -0
  204. package/dist/core/expressions/analysis/cel-emitter.d.ts.map +1 -0
  205. package/dist/core/expressions/analysis/cel-emitter.js +455 -0
  206. package/dist/core/expressions/analysis/cel-emitter.js.map +1 -0
  207. package/dist/core/expressions/analysis/expression-classifier.d.ts +77 -0
  208. package/dist/core/expressions/analysis/expression-classifier.d.ts.map +1 -0
  209. package/dist/core/expressions/analysis/expression-classifier.js +487 -0
  210. package/dist/core/expressions/analysis/expression-classifier.js.map +1 -0
  211. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts +146 -0
  212. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts.map +1 -0
  213. package/dist/core/expressions/analysis/fn-toString-self-test.js +243 -0
  214. package/dist/core/expressions/analysis/fn-toString-self-test.js.map +1 -0
  215. package/dist/core/expressions/analysis/operator-utils.d.ts +35 -0
  216. package/dist/core/expressions/analysis/operator-utils.d.ts.map +1 -0
  217. package/dist/core/expressions/analysis/operator-utils.js +167 -0
  218. package/dist/core/expressions/analysis/operator-utils.js.map +1 -0
  219. package/dist/core/expressions/analysis/parse-core.d.ts +63 -0
  220. package/dist/core/expressions/analysis/parse-core.d.ts.map +1 -0
  221. package/dist/core/expressions/analysis/parse-core.js +115 -0
  222. package/dist/core/expressions/analysis/parse-core.js.map +1 -0
  223. package/dist/core/expressions/analysis/parser.d.ts +127 -0
  224. package/dist/core/expressions/analysis/parser.d.ts.map +1 -0
  225. package/dist/core/expressions/analysis/parser.js +212 -0
  226. package/dist/core/expressions/analysis/parser.js.map +1 -0
  227. package/dist/core/expressions/analysis/scope-resolver.d.ts +57 -0
  228. package/dist/core/expressions/analysis/scope-resolver.d.ts.map +1 -0
  229. package/dist/core/expressions/analysis/scope-resolver.js +440 -0
  230. package/dist/core/expressions/analysis/scope-resolver.js.map +1 -0
  231. package/dist/core/expressions/analysis/shared-types.d.ts +132 -0
  232. package/dist/core/expressions/analysis/shared-types.d.ts.map +1 -0
  233. package/dist/core/expressions/analysis/shared-types.js +13 -0
  234. package/dist/core/expressions/analysis/shared-types.js.map +1 -0
  235. package/dist/core/expressions/analysis/source-map.d.ts.map +1 -0
  236. package/dist/core/expressions/{source-map.js → analysis/source-map.js} +16 -17
  237. package/dist/core/expressions/analysis/source-map.js.map +1 -0
  238. package/dist/core/expressions/analysis/string-method-converters.d.ts +27 -0
  239. package/dist/core/expressions/analysis/string-method-converters.d.ts.map +1 -0
  240. package/dist/core/expressions/analysis/string-method-converters.js +208 -0
  241. package/dist/core/expressions/analysis/string-method-converters.js.map +1 -0
  242. package/dist/core/expressions/{types.d.ts → analysis/types.d.ts} +5 -5
  243. package/dist/core/expressions/analysis/types.d.ts.map +1 -0
  244. package/dist/core/expressions/analysis/types.js.map +1 -0
  245. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +92 -0
  246. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -0
  247. package/dist/core/expressions/composition/composition-analyzer-helpers.js +301 -0
  248. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -0
  249. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +77 -0
  250. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -0
  251. package/dist/core/expressions/composition/composition-analyzer-ternary.js +364 -0
  252. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -0
  253. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts +37 -0
  254. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -0
  255. package/dist/core/expressions/composition/composition-analyzer-traversal.js +375 -0
  256. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -0
  257. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +140 -0
  258. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -0
  259. package/dist/core/expressions/composition/composition-analyzer-types.js +8 -0
  260. package/dist/core/expressions/composition/composition-analyzer-types.js.map +1 -0
  261. package/dist/core/expressions/composition/composition-analyzer.d.ts +39 -0
  262. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -0
  263. package/dist/core/expressions/composition/composition-analyzer.js +144 -0
  264. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -0
  265. package/dist/core/expressions/composition/context-tracker.d.ts +39 -0
  266. package/dist/core/expressions/composition/context-tracker.d.ts.map +1 -0
  267. package/dist/core/expressions/composition/context-tracker.js +64 -0
  268. package/dist/core/expressions/composition/context-tracker.js.map +1 -0
  269. package/dist/core/expressions/composition/expression-analyzer.d.ts +101 -0
  270. package/dist/core/expressions/composition/expression-analyzer.d.ts.map +1 -0
  271. package/dist/core/expressions/composition/expression-analyzer.js +425 -0
  272. package/dist/core/expressions/composition/expression-analyzer.js.map +1 -0
  273. package/dist/core/expressions/{imperative-analyzer.d.ts → composition/imperative-analyzer.d.ts} +3 -3
  274. package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -0
  275. package/dist/core/expressions/{imperative-analyzer.js → composition/imperative-analyzer.js} +68 -30
  276. package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -0
  277. package/dist/core/expressions/composition/index.d.ts +17 -0
  278. package/dist/core/expressions/composition/index.d.ts.map +1 -0
  279. package/dist/core/expressions/composition/index.js +18 -0
  280. package/dist/core/expressions/composition/index.js.map +1 -0
  281. package/dist/core/expressions/composition/integration-hooks.d.ts +71 -0
  282. package/dist/core/expressions/composition/integration-hooks.d.ts.map +1 -0
  283. package/dist/core/expressions/composition/integration-hooks.js +248 -0
  284. package/dist/core/expressions/composition/integration-hooks.js.map +1 -0
  285. package/dist/core/expressions/composition/scope-manager.d.ts +93 -0
  286. package/dist/core/expressions/composition/scope-manager.d.ts.map +1 -0
  287. package/dist/core/expressions/composition/scope-manager.js +215 -0
  288. package/dist/core/expressions/composition/scope-manager.js.map +1 -0
  289. package/dist/core/expressions/composition/types.d.ts +41 -0
  290. package/dist/core/expressions/composition/types.d.ts.map +1 -0
  291. package/dist/core/expressions/composition/types.js +7 -0
  292. package/dist/core/expressions/composition/types.js.map +1 -0
  293. package/dist/core/expressions/{conditional-expression-processor.d.ts → conditional/conditional-expression-processor.d.ts} +3 -3
  294. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts.map +1 -0
  295. package/dist/core/expressions/{conditional-expression-processor.js → conditional/conditional-expression-processor.js} +59 -50
  296. package/dist/core/expressions/conditional/conditional-expression-processor.js.map +1 -0
  297. package/dist/core/expressions/{conditional-integration.d.ts → conditional/conditional-integration.d.ts} +13 -35
  298. package/dist/core/expressions/conditional/conditional-integration.d.ts.map +1 -0
  299. package/dist/core/expressions/{conditional-integration.js → conditional/conditional-integration.js} +92 -86
  300. package/dist/core/expressions/conditional/conditional-integration.js.map +1 -0
  301. package/dist/core/expressions/{context-aware-generator.d.ts → context/context-aware-generator.d.ts} +4 -28
  302. package/dist/core/expressions/context/context-aware-generator.d.ts.map +1 -0
  303. package/dist/core/expressions/{context-aware-generator.js → context/context-aware-generator.js} +27 -121
  304. package/dist/core/expressions/context/context-aware-generator.js.map +1 -0
  305. package/dist/core/expressions/{context-detector.d.ts → context/context-detector.d.ts} +7 -13
  306. package/dist/core/expressions/context/context-detector.d.ts.map +1 -0
  307. package/dist/core/expressions/{context-detector.js → context/context-detector.js} +45 -63
  308. package/dist/core/expressions/context/context-detector.js.map +1 -0
  309. package/dist/core/expressions/{context-validator.d.ts → context/context-validator.d.ts} +5 -36
  310. package/dist/core/expressions/context/context-validator.d.ts.map +1 -0
  311. package/dist/core/expressions/{context-validator.js → context/context-validator.js} +55 -124
  312. package/dist/core/expressions/context/context-validator.js.map +1 -0
  313. package/dist/core/expressions/{cel-conversion-engine.d.ts → factory/cel-conversion-engine.d.ts} +3 -3
  314. package/dist/core/expressions/factory/cel-conversion-engine.d.ts.map +1 -0
  315. package/dist/core/expressions/{cel-conversion-engine.js → factory/cel-conversion-engine.js} +19 -19
  316. package/dist/core/expressions/factory/cel-conversion-engine.js.map +1 -0
  317. package/dist/core/expressions/factory/dependency-tracker.d.ts +222 -0
  318. package/dist/core/expressions/factory/dependency-tracker.d.ts.map +1 -0
  319. package/dist/core/expressions/factory/dependency-tracker.js +512 -0
  320. package/dist/core/expressions/factory/dependency-tracker.js.map +1 -0
  321. package/dist/core/expressions/{factory-integration.d.ts → factory/factory-integration.d.ts} +3 -18
  322. package/dist/core/expressions/factory/factory-integration.d.ts.map +1 -0
  323. package/dist/core/expressions/{factory-integration.js → factory/factory-integration.js} +28 -29
  324. package/dist/core/expressions/factory/factory-integration.js.map +1 -0
  325. package/dist/core/expressions/{factory-pattern-handler.d.ts → factory/factory-pattern-handler.d.ts} +8 -8
  326. package/dist/core/expressions/factory/factory-pattern-handler.d.ts.map +1 -0
  327. package/dist/core/expressions/{factory-pattern-handler.js → factory/factory-pattern-handler.js} +101 -73
  328. package/dist/core/expressions/factory/factory-pattern-handler.js.map +1 -0
  329. package/dist/core/expressions/{migration-helpers.d.ts → factory/migration-helpers.d.ts} +4 -4
  330. package/dist/core/expressions/factory/migration-helpers.d.ts.map +1 -0
  331. package/dist/core/expressions/{migration-helpers.js → factory/migration-helpers.js} +28 -26
  332. package/dist/core/expressions/factory/migration-helpers.js.map +1 -0
  333. package/dist/core/expressions/factory/resource-analyzer.d.ts +139 -0
  334. package/dist/core/expressions/factory/resource-analyzer.d.ts.map +1 -0
  335. package/dist/core/expressions/factory/resource-analyzer.js +286 -0
  336. package/dist/core/expressions/factory/resource-analyzer.js.map +1 -0
  337. package/dist/core/expressions/factory/resource-type-validator.d.ts +149 -0
  338. package/dist/core/expressions/factory/resource-type-validator.d.ts.map +1 -0
  339. package/dist/core/expressions/factory/resource-type-validator.js +318 -0
  340. package/dist/core/expressions/factory/resource-type-validator.js.map +1 -0
  341. package/dist/core/expressions/factory/status-ast-utils.d.ts +36 -0
  342. package/dist/core/expressions/factory/status-ast-utils.d.ts.map +1 -0
  343. package/dist/core/expressions/factory/status-ast-utils.js +320 -0
  344. package/dist/core/expressions/factory/status-ast-utils.js.map +1 -0
  345. package/dist/core/expressions/factory/status-builder-analyzer.d.ts +91 -0
  346. package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -0
  347. package/dist/core/expressions/factory/status-builder-analyzer.js +374 -0
  348. package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -0
  349. package/dist/core/expressions/factory/status-builder-types.d.ts +166 -0
  350. package/dist/core/expressions/factory/status-builder-types.d.ts.map +1 -0
  351. package/dist/core/expressions/factory/status-builder-types.js +8 -0
  352. package/dist/core/expressions/factory/status-builder-types.js.map +1 -0
  353. package/dist/core/expressions/factory/status-cel-generation.d.ts +67 -0
  354. package/dist/core/expressions/factory/status-cel-generation.d.ts.map +1 -0
  355. package/dist/core/expressions/factory/status-cel-generation.js +330 -0
  356. package/dist/core/expressions/factory/status-cel-generation.js.map +1 -0
  357. package/dist/core/expressions/factory/status-field-analysis.d.ts +57 -0
  358. package/dist/core/expressions/factory/status-field-analysis.d.ts.map +1 -0
  359. package/dist/core/expressions/factory/status-field-analysis.js +475 -0
  360. package/dist/core/expressions/factory/status-field-analysis.js.map +1 -0
  361. package/dist/core/expressions/index.d.ts +39 -49
  362. package/dist/core/expressions/index.d.ts.map +1 -1
  363. package/dist/core/expressions/index.js +46 -45
  364. package/dist/core/expressions/index.js.map +1 -1
  365. package/dist/core/expressions/{magic-assignable-analyzer.d.ts → magic-proxy/magic-assignable-analyzer.d.ts} +5 -5
  366. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts.map +1 -0
  367. package/dist/core/expressions/{magic-assignable-analyzer.js → magic-proxy/magic-assignable-analyzer.js} +29 -24
  368. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js.map +1 -0
  369. package/dist/core/expressions/{magic-proxy-analyzer.d.ts → magic-proxy/magic-proxy-analyzer.d.ts} +15 -68
  370. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts.map +1 -0
  371. package/dist/core/expressions/{magic-proxy-analyzer.js → magic-proxy/magic-proxy-analyzer.js} +45 -195
  372. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js.map +1 -0
  373. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts +44 -0
  374. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts.map +1 -0
  375. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js +175 -0
  376. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js.map +1 -0
  377. package/dist/core/expressions/{magic-proxy-detector.d.ts → magic-proxy/magic-proxy-detector.d.ts} +7 -7
  378. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts.map +1 -0
  379. package/dist/core/expressions/{magic-proxy-detector.js → magic-proxy/magic-proxy-detector.js} +36 -28
  380. package/dist/core/expressions/magic-proxy/magic-proxy-detector.js.map +1 -0
  381. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts +36 -0
  382. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts.map +1 -0
  383. package/dist/core/expressions/magic-proxy/magic-proxy-types.js +8 -0
  384. package/dist/core/expressions/magic-proxy/magic-proxy-types.js.map +1 -0
  385. package/dist/core/expressions/magic-proxy/optionality-analysis.d.ts +54 -0
  386. package/dist/core/expressions/magic-proxy/optionality-analysis.d.ts.map +1 -0
  387. package/dist/core/expressions/magic-proxy/optionality-analysis.js +239 -0
  388. package/dist/core/expressions/magic-proxy/optionality-analysis.js.map +1 -0
  389. package/dist/core/expressions/magic-proxy/optionality-cel-generation.d.ts +51 -0
  390. package/dist/core/expressions/magic-proxy/optionality-cel-generation.d.ts.map +1 -0
  391. package/dist/core/expressions/magic-proxy/optionality-cel-generation.js +201 -0
  392. package/dist/core/expressions/magic-proxy/optionality-cel-generation.js.map +1 -0
  393. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts +119 -0
  394. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts.map +1 -0
  395. package/dist/core/expressions/magic-proxy/optionality-handler.js +321 -0
  396. package/dist/core/expressions/magic-proxy/optionality-handler.js.map +1 -0
  397. package/dist/core/expressions/magic-proxy/optionality-hydration.d.ts +84 -0
  398. package/dist/core/expressions/magic-proxy/optionality-hydration.d.ts.map +1 -0
  399. package/dist/core/expressions/magic-proxy/optionality-hydration.js +378 -0
  400. package/dist/core/expressions/magic-proxy/optionality-hydration.js.map +1 -0
  401. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.d.ts +61 -0
  402. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.d.ts.map +1 -0
  403. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.js +218 -0
  404. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.js.map +1 -0
  405. package/dist/core/expressions/magic-proxy/optionality-types.d.ts +206 -0
  406. package/dist/core/expressions/magic-proxy/optionality-types.d.ts.map +1 -0
  407. package/dist/core/expressions/magic-proxy/optionality-types.js +9 -0
  408. package/dist/core/expressions/magic-proxy/optionality-types.js.map +1 -0
  409. package/dist/core/expressions/validation/compile-time-checker.d.ts +74 -0
  410. package/dist/core/expressions/validation/compile-time-checker.d.ts.map +1 -0
  411. package/dist/core/expressions/{compile-time-validation.js → validation/compile-time-checker.js} +44 -91
  412. package/dist/core/expressions/validation/compile-time-checker.js.map +1 -0
  413. package/dist/core/expressions/validation/compile-time-errors.d.ts +70 -0
  414. package/dist/core/expressions/validation/compile-time-errors.d.ts.map +1 -0
  415. package/dist/core/expressions/validation/compile-time-errors.js +63 -0
  416. package/dist/core/expressions/validation/compile-time-errors.js.map +1 -0
  417. package/dist/core/expressions/validation/compile-time-types.d.ts +147 -0
  418. package/dist/core/expressions/validation/compile-time-types.d.ts.map +1 -0
  419. package/dist/core/expressions/validation/compile-time-types.js +8 -0
  420. package/dist/core/expressions/validation/compile-time-types.js.map +1 -0
  421. package/dist/core/expressions/validation/compile-time-validation.d.ts +13 -0
  422. package/dist/core/expressions/validation/compile-time-validation.d.ts.map +1 -0
  423. package/dist/core/expressions/validation/compile-time-validation.js +14 -0
  424. package/dist/core/expressions/validation/compile-time-validation.js.map +1 -0
  425. package/dist/core/expressions/validation/kubernetes-field-types.d.ts +35 -0
  426. package/dist/core/expressions/validation/kubernetes-field-types.d.ts.map +1 -0
  427. package/dist/core/expressions/validation/kubernetes-field-types.js +230 -0
  428. package/dist/core/expressions/validation/kubernetes-field-types.js.map +1 -0
  429. package/dist/core/expressions/validation/resource-field-utils.d.ts +69 -0
  430. package/dist/core/expressions/validation/resource-field-utils.d.ts.map +1 -0
  431. package/dist/core/expressions/validation/resource-field-utils.js +280 -0
  432. package/dist/core/expressions/validation/resource-field-utils.js.map +1 -0
  433. package/dist/core/expressions/{resource-validation.d.ts → validation/resource-validation-types.d.ts} +6 -63
  434. package/dist/core/expressions/validation/resource-validation-types.d.ts.map +1 -0
  435. package/dist/core/expressions/validation/resource-validation-types.js +69 -0
  436. package/dist/core/expressions/validation/resource-validation-types.js.map +1 -0
  437. package/dist/core/expressions/validation/resource-validation.d.ts +49 -0
  438. package/dist/core/expressions/validation/resource-validation.d.ts.map +1 -0
  439. package/dist/core/expressions/validation/resource-validation.js +288 -0
  440. package/dist/core/expressions/validation/resource-validation.js.map +1 -0
  441. package/dist/core/expressions/{type-inference.d.ts → validation/type-inference-types.d.ts} +34 -88
  442. package/dist/core/expressions/validation/type-inference-types.d.ts.map +1 -0
  443. package/dist/core/expressions/validation/type-inference-types.js +52 -0
  444. package/dist/core/expressions/validation/type-inference-types.js.map +1 -0
  445. package/dist/core/expressions/validation/type-inference.d.ts +86 -0
  446. package/dist/core/expressions/validation/type-inference.d.ts.map +1 -0
  447. package/dist/core/expressions/{type-inference.js → validation/type-inference.js} +66 -299
  448. package/dist/core/expressions/validation/type-inference.js.map +1 -0
  449. package/dist/core/expressions/{type-safety.d.ts → validation/type-safety.d.ts} +6 -5
  450. package/dist/core/expressions/validation/type-safety.d.ts.map +1 -0
  451. package/dist/core/expressions/{type-safety.js → validation/type-safety.js} +34 -19
  452. package/dist/core/expressions/validation/type-safety.js.map +1 -0
  453. package/dist/core/kubernetes/api.d.ts.map +1 -1
  454. package/dist/core/kubernetes/api.js +26 -18
  455. package/dist/core/kubernetes/api.js.map +1 -1
  456. package/dist/core/kubernetes/bun-api-client.d.ts +117 -0
  457. package/dist/core/kubernetes/bun-api-client.d.ts.map +1 -0
  458. package/dist/core/kubernetes/bun-api-client.js +183 -0
  459. package/dist/core/kubernetes/bun-api-client.js.map +1 -0
  460. package/dist/core/kubernetes/bun-http-library.d.ts +104 -0
  461. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -0
  462. package/dist/core/kubernetes/bun-http-library.js +240 -0
  463. package/dist/core/kubernetes/bun-http-library.js.map +1 -0
  464. package/dist/core/kubernetes/client-provider.d.ts +124 -35
  465. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  466. package/dist/core/kubernetes/client-provider.js +209 -84
  467. package/dist/core/kubernetes/client-provider.js.map +1 -1
  468. package/dist/core/kubernetes/errors.d.ts +189 -0
  469. package/dist/core/kubernetes/errors.d.ts.map +1 -0
  470. package/dist/core/kubernetes/errors.js +298 -0
  471. package/dist/core/kubernetes/errors.js.map +1 -0
  472. package/dist/core/kubernetes/index.d.ts +20 -0
  473. package/dist/core/kubernetes/index.d.ts.map +1 -0
  474. package/dist/core/kubernetes/index.js +23 -0
  475. package/dist/core/kubernetes/index.js.map +1 -0
  476. package/dist/core/kubernetes/type-guards.d.ts +142 -0
  477. package/dist/core/kubernetes/type-guards.d.ts.map +1 -0
  478. package/dist/core/kubernetes/type-guards.js +151 -0
  479. package/dist/core/kubernetes/type-guards.js.map +1 -0
  480. package/dist/core/logging/config.d.ts.map +1 -1
  481. package/dist/core/logging/config.js +20 -4
  482. package/dist/core/logging/config.js.map +1 -1
  483. package/dist/core/logging/logger.d.ts +3 -3
  484. package/dist/core/logging/logger.d.ts.map +1 -1
  485. package/dist/core/logging/logger.js +19 -11
  486. package/dist/core/logging/logger.js.map +1 -1
  487. package/dist/core/logging/types.d.ts +13 -8
  488. package/dist/core/logging/types.d.ts.map +1 -1
  489. package/dist/core/metadata/index.d.ts +9 -0
  490. package/dist/core/metadata/index.d.ts.map +1 -0
  491. package/dist/core/metadata/index.js +9 -0
  492. package/dist/core/metadata/index.js.map +1 -0
  493. package/dist/core/metadata/resource-metadata.d.ts +116 -0
  494. package/dist/core/metadata/resource-metadata.d.ts.map +1 -0
  495. package/dist/core/metadata/resource-metadata.js +217 -0
  496. package/dist/core/metadata/resource-metadata.js.map +1 -0
  497. package/dist/core/proxy/create-resource.d.ts +50 -0
  498. package/dist/core/proxy/create-resource.d.ts.map +1 -0
  499. package/dist/core/proxy/create-resource.js +393 -0
  500. package/dist/core/proxy/create-resource.js.map +1 -0
  501. package/dist/core/proxy/index.d.ts +8 -0
  502. package/dist/core/proxy/index.d.ts.map +1 -0
  503. package/dist/core/proxy/index.js +7 -0
  504. package/dist/core/proxy/index.js.map +1 -0
  505. package/dist/core/proxy/known-status-fields.d.ts +27 -0
  506. package/dist/core/proxy/known-status-fields.d.ts.map +1 -0
  507. package/dist/core/proxy/known-status-fields.js +185 -0
  508. package/dist/core/proxy/known-status-fields.js.map +1 -0
  509. package/dist/core/readiness/evaluator-factories.d.ts +100 -0
  510. package/dist/core/readiness/evaluator-factories.d.ts.map +1 -0
  511. package/dist/core/readiness/evaluator-factories.js +168 -0
  512. package/dist/core/readiness/evaluator-factories.js.map +1 -0
  513. package/dist/core/readiness/evaluator.d.ts +21 -0
  514. package/dist/core/readiness/evaluator.d.ts.map +1 -0
  515. package/dist/core/readiness/evaluator.js +38 -0
  516. package/dist/core/readiness/evaluator.js.map +1 -0
  517. package/dist/core/readiness/index.d.ts +3 -0
  518. package/dist/core/readiness/index.d.ts.map +1 -1
  519. package/dist/core/readiness/index.js +2 -0
  520. package/dist/core/readiness/index.js.map +1 -1
  521. package/dist/core/readiness/registry.d.ts +3 -3
  522. package/dist/core/readiness/registry.d.ts.map +1 -1
  523. package/dist/core/readiness/registry.js +2 -0
  524. package/dist/core/readiness/registry.js.map +1 -1
  525. package/dist/core/references/cel-evaluator.d.ts +11 -0
  526. package/dist/core/references/cel-evaluator.d.ts.map +1 -1
  527. package/dist/core/references/cel-evaluator.js +77 -29
  528. package/dist/core/references/cel-evaluator.js.map +1 -1
  529. package/dist/core/references/cel.d.ts +66 -23
  530. package/dist/core/references/cel.d.ts.map +1 -1
  531. package/dist/core/references/cel.js +184 -117
  532. package/dist/core/references/cel.js.map +1 -1
  533. package/dist/core/references/external-refs.d.ts +39 -21
  534. package/dist/core/references/external-refs.d.ts.map +1 -1
  535. package/dist/core/references/external-refs.js +70 -30
  536. package/dist/core/references/external-refs.js.map +1 -1
  537. package/dist/core/references/index.d.ts +5 -4
  538. package/dist/core/references/index.d.ts.map +1 -1
  539. package/dist/core/references/index.js +6 -6
  540. package/dist/core/references/index.js.map +1 -1
  541. package/dist/core/references/resolver.d.ts +26 -3
  542. package/dist/core/references/resolver.d.ts.map +1 -1
  543. package/dist/core/references/resolver.js +322 -47
  544. package/dist/core/references/resolver.js.map +1 -1
  545. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  546. package/dist/core/references/schema-proxy.js +105 -14
  547. package/dist/core/references/schema-proxy.js.map +1 -1
  548. package/dist/core/resources/factory-registry.d.ts +99 -0
  549. package/dist/core/resources/factory-registry.d.ts.map +1 -0
  550. package/dist/core/resources/factory-registry.js +166 -0
  551. package/dist/core/resources/factory-registry.js.map +1 -0
  552. package/dist/core/resources/id.d.ts +44 -0
  553. package/dist/core/resources/id.d.ts.map +1 -0
  554. package/dist/core/resources/id.js +78 -0
  555. package/dist/core/resources/id.js.map +1 -0
  556. package/dist/core/resources/index.d.ts +7 -0
  557. package/dist/core/resources/index.d.ts.map +1 -0
  558. package/dist/core/resources/index.js +6 -0
  559. package/dist/core/resources/index.js.map +1 -0
  560. package/dist/core/runtime-patches/crd-patcher.d.ts +30 -0
  561. package/dist/core/runtime-patches/crd-patcher.d.ts.map +1 -0
  562. package/dist/core/runtime-patches/crd-patcher.js +124 -0
  563. package/dist/core/runtime-patches/crd-patcher.js.map +1 -0
  564. package/dist/core/runtime-patches/crd-schema-fix.d.ts +145 -0
  565. package/dist/core/runtime-patches/crd-schema-fix.d.ts.map +1 -0
  566. package/dist/core/runtime-patches/crd-schema-fix.js +349 -0
  567. package/dist/core/runtime-patches/crd-schema-fix.js.map +1 -0
  568. package/dist/core/runtime-patches/index.d.ts +8 -0
  569. package/dist/core/runtime-patches/index.d.ts.map +1 -0
  570. package/dist/core/runtime-patches/index.js +8 -0
  571. package/dist/core/runtime-patches/index.js.map +1 -0
  572. package/dist/core/{evaluation → serialization}/cel-optimizer.d.ts +2 -2
  573. package/dist/core/serialization/cel-optimizer.d.ts.map +1 -0
  574. package/dist/core/{evaluation → serialization}/cel-optimizer.js +11 -23
  575. package/dist/core/serialization/cel-optimizer.js.map +1 -0
  576. package/dist/core/serialization/cel-references.d.ts +36 -0
  577. package/dist/core/serialization/cel-references.d.ts.map +1 -0
  578. package/dist/core/serialization/cel-references.js +183 -0
  579. package/dist/core/serialization/cel-references.js.map +1 -0
  580. package/dist/core/serialization/core.d.ts +168 -3
  581. package/dist/core/serialization/core.d.ts.map +1 -1
  582. package/dist/core/serialization/core.js +392 -691
  583. package/dist/core/serialization/core.js.map +1 -1
  584. package/dist/core/serialization/index.d.ts +3 -1
  585. package/dist/core/serialization/index.d.ts.map +1 -1
  586. package/dist/core/serialization/index.js +5 -1
  587. package/dist/core/serialization/index.js.map +1 -1
  588. package/dist/core/serialization/schema.d.ts +34 -3
  589. package/dist/core/serialization/schema.d.ts.map +1 -1
  590. package/dist/core/serialization/schema.js +141 -11
  591. package/dist/core/serialization/schema.js.map +1 -1
  592. package/dist/core/serialization/status-analysis-helpers.d.ts +68 -0
  593. package/dist/core/serialization/status-analysis-helpers.d.ts.map +1 -0
  594. package/dist/core/serialization/status-analysis-helpers.js +284 -0
  595. package/dist/core/serialization/status-analysis-helpers.js.map +1 -0
  596. package/dist/core/serialization/status-analysis-pipeline.d.ts +63 -0
  597. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -0
  598. package/dist/core/serialization/status-analysis-pipeline.js +419 -0
  599. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -0
  600. package/dist/core/serialization/validation.d.ts.map +1 -1
  601. package/dist/core/serialization/validation.js +5 -3
  602. package/dist/core/serialization/validation.js.map +1 -1
  603. package/dist/core/serialization/yaml.d.ts +14 -3
  604. package/dist/core/serialization/yaml.d.ts.map +1 -1
  605. package/dist/core/serialization/yaml.js +453 -13
  606. package/dist/core/serialization/yaml.js.map +1 -1
  607. package/dist/core/types/common.d.ts +66 -9
  608. package/dist/core/types/common.d.ts.map +1 -1
  609. package/dist/core/types/deployment.d.ts +289 -81
  610. package/dist/core/types/deployment.d.ts.map +1 -1
  611. package/dist/core/types/deployment.js +1 -23
  612. package/dist/core/types/deployment.js.map +1 -1
  613. package/dist/core/types/index.d.ts +6 -10
  614. package/dist/core/types/index.d.ts.map +1 -1
  615. package/dist/core/types/index.js +32 -4
  616. package/dist/core/types/index.js.map +1 -1
  617. package/dist/core/types/kubernetes.d.ts +371 -19
  618. package/dist/core/types/kubernetes.d.ts.map +1 -1
  619. package/dist/core/types/kubernetes.js +11 -1
  620. package/dist/core/types/kubernetes.js.map +1 -1
  621. package/dist/core/types/references.d.ts +74 -4
  622. package/dist/core/types/references.d.ts.map +1 -1
  623. package/dist/core/types/references.js +3 -2
  624. package/dist/core/types/references.js.map +1 -1
  625. package/dist/core/types/resource-graph.d.ts +9 -33
  626. package/dist/core/types/resource-graph.d.ts.map +1 -1
  627. package/dist/core/types/resource-graph.js +2 -2
  628. package/dist/core/types/schema.d.ts +51 -0
  629. package/dist/core/types/schema.d.ts.map +1 -0
  630. package/dist/core/types/schema.js +9 -0
  631. package/dist/core/types/schema.js.map +1 -0
  632. package/dist/core/types/serialization.d.ts +105 -35
  633. package/dist/core/types/serialization.d.ts.map +1 -1
  634. package/dist/core/types/yaml.d.ts +0 -24
  635. package/dist/core/types/yaml.d.ts.map +1 -1
  636. package/dist/core/validation/cel-validator.d.ts +5 -5
  637. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  638. package/dist/core/validation/cel-validator.js +83 -19
  639. package/dist/core/validation/cel-validator.js.map +1 -1
  640. package/dist/core/yaml/path-resolver.d.ts +21 -6
  641. package/dist/core/yaml/path-resolver.d.ts.map +1 -1
  642. package/dist/core/yaml/path-resolver.js +404 -38
  643. package/dist/core/yaml/path-resolver.js.map +1 -1
  644. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts +42 -0
  645. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -0
  646. package/dist/factories/apisix/compositions/apisix-bootstrap.js +267 -0
  647. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -0
  648. package/dist/factories/apisix/compositions/index.d.ts +5 -0
  649. package/dist/factories/apisix/compositions/index.d.ts.map +1 -0
  650. package/dist/factories/apisix/compositions/index.js +5 -0
  651. package/dist/factories/apisix/compositions/index.js.map +1 -0
  652. package/dist/factories/apisix/index.d.ts +11 -0
  653. package/dist/factories/apisix/index.d.ts.map +1 -0
  654. package/dist/factories/apisix/index.js +11 -0
  655. package/dist/factories/apisix/index.js.map +1 -0
  656. package/dist/factories/apisix/resources/helm.d.ts +59 -0
  657. package/dist/factories/apisix/resources/helm.d.ts.map +1 -0
  658. package/dist/factories/apisix/resources/helm.js +148 -0
  659. package/dist/factories/apisix/resources/helm.js.map +1 -0
  660. package/dist/factories/apisix/resources/index.d.ts +5 -0
  661. package/dist/factories/apisix/resources/index.d.ts.map +1 -0
  662. package/dist/factories/apisix/resources/index.js +5 -0
  663. package/dist/factories/apisix/resources/index.js.map +1 -0
  664. package/dist/factories/apisix/types.d.ts +372 -0
  665. package/dist/factories/apisix/types.d.ts.map +1 -0
  666. package/dist/factories/apisix/types.js +88 -0
  667. package/dist/factories/apisix/types.js.map +1 -0
  668. package/dist/factories/apisix/utils/admin-credentials.d.ts +43 -0
  669. package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -0
  670. package/dist/factories/apisix/utils/admin-credentials.js +82 -0
  671. package/dist/factories/apisix/utils/admin-credentials.js.map +1 -0
  672. package/dist/factories/apisix/utils/helm-values-mapper.d.ts +19 -0
  673. package/dist/factories/apisix/utils/helm-values-mapper.d.ts.map +1 -0
  674. package/dist/factories/apisix/utils/helm-values-mapper.js +106 -0
  675. package/dist/factories/apisix/utils/helm-values-mapper.js.map +1 -0
  676. package/dist/factories/apisix/utils/index.d.ts +6 -0
  677. package/dist/factories/apisix/utils/index.d.ts.map +1 -0
  678. package/dist/factories/apisix/utils/index.js +6 -0
  679. package/dist/factories/apisix/utils/index.js.map +1 -0
  680. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts +45 -0
  681. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts.map +1 -0
  682. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js +309 -0
  683. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js.map +1 -0
  684. package/dist/factories/cert-manager/compositions/index.d.ts +2 -0
  685. package/dist/factories/cert-manager/compositions/index.d.ts.map +1 -0
  686. package/dist/factories/cert-manager/compositions/index.js +2 -0
  687. package/dist/factories/cert-manager/compositions/index.js.map +1 -0
  688. package/dist/factories/cert-manager/index.d.ts +10 -0
  689. package/dist/factories/cert-manager/index.d.ts.map +1 -0
  690. package/dist/factories/cert-manager/index.js +19 -0
  691. package/dist/factories/cert-manager/index.js.map +1 -0
  692. package/dist/factories/cert-manager/resources/certificates.d.ts +39 -0
  693. package/dist/factories/cert-manager/resources/certificates.d.ts.map +1 -0
  694. package/dist/factories/cert-manager/resources/certificates.js +97 -0
  695. package/dist/factories/cert-manager/resources/certificates.js.map +1 -0
  696. package/dist/factories/cert-manager/resources/challenges.d.ts +113 -0
  697. package/dist/factories/cert-manager/resources/challenges.d.ts.map +1 -0
  698. package/dist/factories/cert-manager/resources/challenges.js +281 -0
  699. package/dist/factories/cert-manager/resources/challenges.js.map +1 -0
  700. package/dist/factories/cert-manager/resources/helm.d.ts +37 -0
  701. package/dist/factories/cert-manager/resources/helm.d.ts.map +1 -0
  702. package/dist/factories/cert-manager/resources/helm.js +253 -0
  703. package/dist/factories/cert-manager/resources/helm.js.map +1 -0
  704. package/dist/factories/cert-manager/resources/index.d.ts +5 -0
  705. package/dist/factories/cert-manager/resources/index.d.ts.map +1 -0
  706. package/dist/factories/cert-manager/resources/index.js +6 -0
  707. package/dist/factories/cert-manager/resources/index.js.map +1 -0
  708. package/dist/factories/cert-manager/resources/issuers.d.ts +79 -0
  709. package/dist/factories/cert-manager/resources/issuers.d.ts.map +1 -0
  710. package/dist/factories/cert-manager/resources/issuers.js +109 -0
  711. package/dist/factories/cert-manager/resources/issuers.js.map +1 -0
  712. package/dist/factories/cert-manager/types.d.ts +942 -0
  713. package/dist/factories/cert-manager/types.d.ts.map +1 -0
  714. package/dist/factories/cert-manager/types.js +178 -0
  715. package/dist/factories/cert-manager/types.js.map +1 -0
  716. package/dist/factories/cert-manager/utils/helm-values-mapper.d.ts +23 -0
  717. package/dist/factories/cert-manager/utils/helm-values-mapper.d.ts.map +1 -0
  718. package/dist/factories/cert-manager/utils/helm-values-mapper.js +116 -0
  719. package/dist/factories/cert-manager/utils/helm-values-mapper.js.map +1 -0
  720. package/dist/factories/cert-manager/utils/index.d.ts +2 -0
  721. package/dist/factories/cert-manager/utils/index.d.ts.map +1 -0
  722. package/dist/factories/cert-manager/utils/index.js +2 -0
  723. package/dist/factories/cert-manager/utils/index.js.map +1 -0
  724. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +220 -0
  725. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts.map +1 -0
  726. package/dist/factories/cilium/compositions/cilium-bootstrap.js +321 -0
  727. package/dist/factories/cilium/compositions/cilium-bootstrap.js.map +1 -0
  728. package/dist/factories/cilium/compositions/index.d.ts +8 -0
  729. package/dist/factories/cilium/compositions/index.d.ts.map +1 -0
  730. package/dist/factories/cilium/compositions/index.js +11 -0
  731. package/dist/factories/cilium/compositions/index.js.map +1 -0
  732. package/dist/factories/cilium/errors.d.ts +41 -0
  733. package/dist/factories/cilium/errors.d.ts.map +1 -0
  734. package/dist/factories/cilium/errors.js +75 -0
  735. package/dist/factories/cilium/errors.js.map +1 -0
  736. package/dist/factories/cilium/index.d.ts +11 -0
  737. package/dist/factories/cilium/index.d.ts.map +1 -0
  738. package/dist/factories/cilium/index.js +23 -0
  739. package/dist/factories/cilium/index.js.map +1 -0
  740. package/dist/factories/cilium/resources/gateway.d.ts +72 -0
  741. package/dist/factories/cilium/resources/gateway.d.ts.map +1 -0
  742. package/dist/factories/cilium/resources/gateway.js +116 -0
  743. package/dist/factories/cilium/resources/gateway.js.map +1 -0
  744. package/dist/factories/cilium/resources/helm.d.ts +93 -0
  745. package/dist/factories/cilium/resources/helm.d.ts.map +1 -0
  746. package/dist/factories/cilium/resources/helm.js +369 -0
  747. package/dist/factories/cilium/resources/helm.js.map +1 -0
  748. package/dist/factories/cilium/resources/index.d.ts +10 -0
  749. package/dist/factories/cilium/resources/index.d.ts.map +1 -0
  750. package/dist/factories/cilium/resources/index.js +19 -0
  751. package/dist/factories/cilium/resources/index.js.map +1 -0
  752. package/dist/factories/cilium/resources/networking.d.ts +198 -0
  753. package/dist/factories/cilium/resources/networking.d.ts.map +1 -0
  754. package/dist/factories/cilium/resources/networking.js +482 -0
  755. package/dist/factories/cilium/resources/networking.js.map +1 -0
  756. package/dist/factories/cilium/types.d.ts +957 -0
  757. package/dist/factories/cilium/types.d.ts.map +1 -0
  758. package/dist/factories/cilium/types.js +10 -0
  759. package/dist/factories/cilium/types.js.map +1 -0
  760. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts +32 -0
  761. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -0
  762. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +146 -0
  763. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -0
  764. package/dist/factories/external-dns/compositions/index.d.ts +2 -0
  765. package/dist/factories/external-dns/compositions/index.d.ts.map +1 -0
  766. package/dist/factories/external-dns/compositions/index.js +3 -0
  767. package/dist/factories/external-dns/compositions/index.js.map +1 -0
  768. package/dist/factories/external-dns/index.d.ts +10 -0
  769. package/dist/factories/external-dns/index.d.ts.map +1 -0
  770. package/dist/factories/external-dns/index.js +19 -0
  771. package/dist/factories/external-dns/index.js.map +1 -0
  772. package/dist/factories/external-dns/resources/dns-endpoint.d.ts +54 -0
  773. package/dist/factories/external-dns/resources/dns-endpoint.d.ts.map +1 -0
  774. package/dist/factories/external-dns/resources/dns-endpoint.js +53 -0
  775. package/dist/factories/external-dns/resources/dns-endpoint.js.map +1 -0
  776. package/dist/factories/external-dns/resources/helm.d.ts +57 -0
  777. package/dist/factories/external-dns/resources/helm.d.ts.map +1 -0
  778. package/dist/factories/external-dns/resources/helm.js +440 -0
  779. package/dist/factories/external-dns/resources/helm.js.map +1 -0
  780. package/dist/factories/external-dns/resources/index.d.ts +3 -0
  781. package/dist/factories/external-dns/resources/index.d.ts.map +1 -0
  782. package/dist/factories/external-dns/resources/index.js +4 -0
  783. package/dist/factories/external-dns/resources/index.js.map +1 -0
  784. package/dist/factories/external-dns/types.d.ts +180 -0
  785. package/dist/factories/external-dns/types.d.ts.map +1 -0
  786. package/dist/factories/external-dns/types.js +39 -0
  787. package/dist/factories/external-dns/types.js.map +1 -0
  788. package/dist/factories/flux/git-repository.d.ts +14 -4
  789. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  790. package/dist/factories/flux/git-repository.js +33 -0
  791. package/dist/factories/flux/git-repository.js.map +1 -1
  792. package/dist/factories/flux/kustomize/kustomization.d.ts +2 -0
  793. package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -1
  794. package/dist/factories/flux/kustomize/kustomization.js.map +1 -1
  795. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +1 -1
  796. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  797. package/dist/factories/flux/kustomize/readiness-evaluators.js +3 -1
  798. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  799. package/dist/factories/helm/helm-release.d.ts +13 -0
  800. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  801. package/dist/factories/helm/helm-release.js +35 -16
  802. package/dist/factories/helm/helm-release.js.map +1 -1
  803. package/dist/factories/helm/helm-repository.d.ts +26 -1
  804. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  805. package/dist/factories/helm/helm-repository.js +30 -17
  806. package/dist/factories/helm/helm-repository.js.map +1 -1
  807. package/dist/factories/helm/index.d.ts +10 -4
  808. package/dist/factories/helm/index.d.ts.map +1 -1
  809. package/dist/factories/helm/index.js +10 -4
  810. package/dist/factories/helm/index.js.map +1 -1
  811. package/dist/factories/helm/readiness-evaluators.d.ts +21 -8
  812. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  813. package/dist/factories/helm/readiness-evaluators.js +98 -82
  814. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  815. package/dist/factories/helm/types.d.ts +37 -3
  816. package/dist/factories/helm/types.d.ts.map +1 -1
  817. package/dist/factories/index.d.ts +8 -3
  818. package/dist/factories/index.d.ts.map +1 -1
  819. package/dist/factories/index.js +27 -4
  820. package/dist/factories/index.js.map +1 -1
  821. package/dist/factories/kro/kro-crd.d.ts.map +1 -1
  822. package/dist/factories/kro/kro-crd.js +3 -2
  823. package/dist/factories/kro/kro-crd.js.map +1 -1
  824. package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -1
  825. package/dist/factories/kro/kro-custom-resource.js +3 -2
  826. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  827. package/dist/factories/kro/resource-graph-definition.d.ts +29 -1
  828. package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -1
  829. package/dist/factories/kro/resource-graph-definition.js +26 -8
  830. package/dist/factories/kro/resource-graph-definition.js.map +1 -1
  831. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts +3 -2
  832. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts.map +1 -1
  833. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js +3 -2
  834. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js.map +1 -1
  835. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts +3 -2
  836. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts.map +1 -1
  837. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js +3 -2
  838. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js.map +1 -1
  839. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts +3 -1
  840. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -1
  841. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -1
  842. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts +3 -1
  843. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -1
  844. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +2 -1
  845. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js.map +1 -1
  846. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts +3 -1
  847. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts.map +1 -1
  848. package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -1
  849. package/dist/factories/kubernetes/config/config-map.d.ts +17 -1
  850. package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -1
  851. package/dist/factories/kubernetes/config/config-map.js +25 -7
  852. package/dist/factories/kubernetes/config/config-map.js.map +1 -1
  853. package/dist/factories/kubernetes/config/secret.d.ts +23 -1
  854. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
  855. package/dist/factories/kubernetes/config/secret.js +31 -7
  856. package/dist/factories/kubernetes/config/secret.js.map +1 -1
  857. package/dist/factories/kubernetes/coordination/lease.d.ts +3 -1
  858. package/dist/factories/kubernetes/coordination/lease.d.ts.map +1 -1
  859. package/dist/factories/kubernetes/coordination/lease.js +2 -1
  860. package/dist/factories/kubernetes/coordination/lease.js.map +1 -1
  861. package/dist/factories/kubernetes/core/component-status.d.ts +3 -1
  862. package/dist/factories/kubernetes/core/component-status.d.ts.map +1 -1
  863. package/dist/factories/kubernetes/core/component-status.js.map +1 -1
  864. package/dist/factories/kubernetes/core/namespace.d.ts +10 -0
  865. package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
  866. package/dist/factories/kubernetes/core/namespace.js +13 -2
  867. package/dist/factories/kubernetes/core/namespace.js.map +1 -1
  868. package/dist/factories/kubernetes/core/node.d.ts +3 -1
  869. package/dist/factories/kubernetes/core/node.d.ts.map +1 -1
  870. package/dist/factories/kubernetes/core/node.js.map +1 -1
  871. package/dist/factories/kubernetes/core/pod.d.ts +3 -1
  872. package/dist/factories/kubernetes/core/pod.d.ts.map +1 -1
  873. package/dist/factories/kubernetes/core/pod.js +2 -1
  874. package/dist/factories/kubernetes/core/pod.js.map +1 -1
  875. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts +3 -1
  876. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts.map +1 -1
  877. package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -1
  878. package/dist/factories/kubernetes/extensions/custom-resource.d.ts +1 -0
  879. package/dist/factories/kubernetes/extensions/custom-resource.d.ts.map +1 -1
  880. package/dist/factories/kubernetes/extensions/custom-resource.js +5 -1
  881. package/dist/factories/kubernetes/extensions/custom-resource.js.map +1 -1
  882. package/dist/factories/kubernetes/index.d.ts +0 -2
  883. package/dist/factories/kubernetes/index.d.ts.map +1 -1
  884. package/dist/factories/kubernetes/index.js +3 -8
  885. package/dist/factories/kubernetes/index.js.map +1 -1
  886. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts +3 -1
  887. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts.map +1 -1
  888. package/dist/factories/kubernetes/networking/endpoint-slice.js.map +1 -1
  889. package/dist/factories/kubernetes/networking/endpoints.d.ts +3 -1
  890. package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -1
  891. package/dist/factories/kubernetes/networking/endpoints.js +3 -2
  892. package/dist/factories/kubernetes/networking/endpoints.js.map +1 -1
  893. package/dist/factories/kubernetes/networking/ingress-class.d.ts +3 -1
  894. package/dist/factories/kubernetes/networking/ingress-class.d.ts.map +1 -1
  895. package/dist/factories/kubernetes/networking/ingress-class.js +2 -7
  896. package/dist/factories/kubernetes/networking/ingress-class.js.map +1 -1
  897. package/dist/factories/kubernetes/networking/ingress.d.ts +15 -2
  898. package/dist/factories/kubernetes/networking/ingress.d.ts.map +1 -1
  899. package/dist/factories/kubernetes/networking/ingress.js +64 -11
  900. package/dist/factories/kubernetes/networking/ingress.js.map +1 -1
  901. package/dist/factories/kubernetes/networking/network-policy.d.ts +3 -1
  902. package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -1
  903. package/dist/factories/kubernetes/networking/network-policy.js +2 -8
  904. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
  905. package/dist/factories/kubernetes/networking/service.d.ts +14 -1
  906. package/dist/factories/kubernetes/networking/service.d.ts.map +1 -1
  907. package/dist/factories/kubernetes/networking/service.js +28 -3
  908. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  909. package/dist/factories/kubernetes/policy/limit-range.d.ts +3 -1
  910. package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -1
  911. package/dist/factories/kubernetes/policy/limit-range.js +2 -8
  912. package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
  913. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts +3 -1
  914. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts.map +1 -1
  915. package/dist/factories/kubernetes/policy/pod-disruption-budget.js +3 -2
  916. package/dist/factories/kubernetes/policy/pod-disruption-budget.js.map +1 -1
  917. package/dist/factories/kubernetes/policy/resource-quota.d.ts +3 -1
  918. package/dist/factories/kubernetes/policy/resource-quota.d.ts.map +1 -1
  919. package/dist/factories/kubernetes/policy/resource-quota.js +3 -2
  920. package/dist/factories/kubernetes/policy/resource-quota.js.map +1 -1
  921. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts +20 -1
  922. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts.map +1 -1
  923. package/dist/factories/kubernetes/rbac/cluster-role-binding.js +19 -8
  924. package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -1
  925. package/dist/factories/kubernetes/rbac/cluster-role.d.ts +3 -1
  926. package/dist/factories/kubernetes/rbac/cluster-role.d.ts.map +1 -1
  927. package/dist/factories/kubernetes/rbac/cluster-role.js +2 -8
  928. package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -1
  929. package/dist/factories/kubernetes/rbac/role-binding.d.ts +3 -1
  930. package/dist/factories/kubernetes/rbac/role-binding.d.ts.map +1 -1
  931. package/dist/factories/kubernetes/rbac/role-binding.js +2 -8
  932. package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -1
  933. package/dist/factories/kubernetes/rbac/role.d.ts +3 -1
  934. package/dist/factories/kubernetes/rbac/role.d.ts.map +1 -1
  935. package/dist/factories/kubernetes/rbac/role.js +2 -8
  936. package/dist/factories/kubernetes/rbac/role.js.map +1 -1
  937. package/dist/factories/kubernetes/rbac/service-account.d.ts +3 -1
  938. package/dist/factories/kubernetes/rbac/service-account.d.ts.map +1 -1
  939. package/dist/factories/kubernetes/rbac/service-account.js +2 -8
  940. package/dist/factories/kubernetes/rbac/service-account.js.map +1 -1
  941. package/dist/factories/kubernetes/scheduling/priority-class.d.ts +3 -1
  942. package/dist/factories/kubernetes/scheduling/priority-class.d.ts.map +1 -1
  943. package/dist/factories/kubernetes/scheduling/priority-class.js +2 -7
  944. package/dist/factories/kubernetes/scheduling/priority-class.js.map +1 -1
  945. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts +3 -2
  946. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts.map +1 -1
  947. package/dist/factories/kubernetes/scheduling/runtime-class.js +2 -1
  948. package/dist/factories/kubernetes/scheduling/runtime-class.js.map +1 -1
  949. package/dist/factories/kubernetes/storage/csi-driver.d.ts +3 -1
  950. package/dist/factories/kubernetes/storage/csi-driver.d.ts.map +1 -1
  951. package/dist/factories/kubernetes/storage/csi-driver.js +2 -7
  952. package/dist/factories/kubernetes/storage/csi-driver.js.map +1 -1
  953. package/dist/factories/kubernetes/storage/csi-node.d.ts +3 -1
  954. package/dist/factories/kubernetes/storage/csi-node.d.ts.map +1 -1
  955. package/dist/factories/kubernetes/storage/csi-node.js +2 -1
  956. package/dist/factories/kubernetes/storage/csi-node.js.map +1 -1
  957. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts +14 -1
  958. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts.map +1 -1
  959. package/dist/factories/kubernetes/storage/persistent-volume-claim.js +13 -1
  960. package/dist/factories/kubernetes/storage/persistent-volume-claim.js.map +1 -1
  961. package/dist/factories/kubernetes/storage/persistent-volume.d.ts +3 -1
  962. package/dist/factories/kubernetes/storage/persistent-volume.d.ts.map +1 -1
  963. package/dist/factories/kubernetes/storage/persistent-volume.js +3 -2
  964. package/dist/factories/kubernetes/storage/persistent-volume.js.map +1 -1
  965. package/dist/factories/kubernetes/storage/storage-class.d.ts +3 -1
  966. package/dist/factories/kubernetes/storage/storage-class.d.ts.map +1 -1
  967. package/dist/factories/kubernetes/storage/storage-class.js +2 -8
  968. package/dist/factories/kubernetes/storage/storage-class.js.map +1 -1
  969. package/dist/factories/kubernetes/storage/volume-attachment.d.ts +3 -1
  970. package/dist/factories/kubernetes/storage/volume-attachment.d.ts.map +1 -1
  971. package/dist/factories/kubernetes/storage/volume-attachment.js +10 -0
  972. package/dist/factories/kubernetes/storage/volume-attachment.js.map +1 -1
  973. package/dist/factories/kubernetes/workloads/cron-job.d.ts +14 -1
  974. package/dist/factories/kubernetes/workloads/cron-job.d.ts.map +1 -1
  975. package/dist/factories/kubernetes/workloads/cron-job.js +14 -2
  976. package/dist/factories/kubernetes/workloads/cron-job.js.map +1 -1
  977. package/dist/factories/kubernetes/workloads/daemon-set.d.ts +14 -1
  978. package/dist/factories/kubernetes/workloads/daemon-set.d.ts.map +1 -1
  979. package/dist/factories/kubernetes/workloads/daemon-set.js +13 -1
  980. package/dist/factories/kubernetes/workloads/daemon-set.js.map +1 -1
  981. package/dist/factories/kubernetes/workloads/deployment.d.ts +14 -1
  982. package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -1
  983. package/dist/factories/kubernetes/workloads/deployment.js +35 -5
  984. package/dist/factories/kubernetes/workloads/deployment.js.map +1 -1
  985. package/dist/factories/kubernetes/workloads/job.d.ts +14 -1
  986. package/dist/factories/kubernetes/workloads/job.d.ts.map +1 -1
  987. package/dist/factories/kubernetes/workloads/job.js +19 -2
  988. package/dist/factories/kubernetes/workloads/job.js.map +1 -1
  989. package/dist/factories/kubernetes/workloads/replica-set.d.ts +3 -1
  990. package/dist/factories/kubernetes/workloads/replica-set.d.ts.map +1 -1
  991. package/dist/factories/kubernetes/workloads/replica-set.js +2 -1
  992. package/dist/factories/kubernetes/workloads/replica-set.js.map +1 -1
  993. package/dist/factories/kubernetes/workloads/replication-controller.d.ts +3 -1
  994. package/dist/factories/kubernetes/workloads/replication-controller.d.ts.map +1 -1
  995. package/dist/factories/kubernetes/workloads/replication-controller.js +3 -2
  996. package/dist/factories/kubernetes/workloads/replication-controller.js.map +1 -1
  997. package/dist/factories/kubernetes/workloads/stateful-set.d.ts +14 -1
  998. package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -1
  999. package/dist/factories/kubernetes/workloads/stateful-set.js +22 -2
  1000. package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -1
  1001. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts +23 -0
  1002. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts.map +1 -0
  1003. package/dist/factories/kubernetes/yaml/conflict-handler.js +83 -0
  1004. package/dist/factories/kubernetes/yaml/conflict-handler.js.map +1 -0
  1005. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +6 -11
  1006. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  1007. package/dist/factories/kubernetes/yaml/yaml-directory.js +10 -75
  1008. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  1009. package/dist/factories/kubernetes/yaml/yaml-file.d.ts +72 -13
  1010. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  1011. package/dist/factories/kubernetes/yaml/yaml-file.js +271 -91
  1012. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  1013. package/dist/factories/pebble/compositions/index.d.ts +2 -0
  1014. package/dist/factories/pebble/compositions/index.d.ts.map +1 -0
  1015. package/dist/factories/pebble/compositions/index.js +3 -0
  1016. package/dist/factories/pebble/compositions/index.js.map +1 -0
  1017. package/dist/factories/pebble/compositions/pebble-bootstrap.d.ts +56 -0
  1018. package/dist/factories/pebble/compositions/pebble-bootstrap.d.ts.map +1 -0
  1019. package/dist/factories/pebble/compositions/pebble-bootstrap.js +95 -0
  1020. package/dist/factories/pebble/compositions/pebble-bootstrap.js.map +1 -0
  1021. package/dist/factories/pebble/index.d.ts +10 -0
  1022. package/dist/factories/pebble/index.d.ts.map +1 -0
  1023. package/dist/factories/pebble/index.js +19 -0
  1024. package/dist/factories/pebble/index.js.map +1 -0
  1025. package/dist/factories/pebble/resources/helm.d.ts +99 -0
  1026. package/dist/factories/pebble/resources/helm.d.ts.map +1 -0
  1027. package/dist/factories/pebble/resources/helm.js +148 -0
  1028. package/dist/factories/pebble/resources/helm.js.map +1 -0
  1029. package/dist/factories/pebble/resources/index.d.ts +2 -0
  1030. package/dist/factories/pebble/resources/index.d.ts.map +1 -0
  1031. package/dist/factories/pebble/resources/index.js +3 -0
  1032. package/dist/factories/pebble/resources/index.js.map +1 -0
  1033. package/dist/factories/pebble/types.d.ts +184 -0
  1034. package/dist/factories/pebble/types.d.ts.map +1 -0
  1035. package/dist/factories/pebble/types.js +23 -0
  1036. package/dist/factories/pebble/types.js.map +1 -0
  1037. package/dist/factories/pebble/utils/helm-values-mapper.d.ts +21 -0
  1038. package/dist/factories/pebble/utils/helm-values-mapper.d.ts.map +1 -0
  1039. package/dist/factories/pebble/utils/helm-values-mapper.js +96 -0
  1040. package/dist/factories/pebble/utils/helm-values-mapper.js.map +1 -0
  1041. package/dist/factories/shared.d.ts +12 -54
  1042. package/dist/factories/shared.d.ts.map +1 -1
  1043. package/dist/factories/shared.js +10 -450
  1044. package/dist/factories/shared.js.map +1 -1
  1045. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts +11 -0
  1046. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -1
  1047. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js +12 -0
  1048. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js.map +1 -1
  1049. package/dist/factories/simple/compositions/web-service.d.ts +35 -0
  1050. package/dist/factories/simple/compositions/web-service.d.ts.map +1 -0
  1051. package/dist/{core/composition/composition.js → factories/simple/compositions/web-service.js} +15 -2
  1052. package/dist/factories/simple/compositions/web-service.js.map +1 -0
  1053. package/dist/factories/simple/config/config-map.d.ts +18 -2
  1054. package/dist/factories/simple/config/config-map.d.ts.map +1 -1
  1055. package/dist/factories/simple/config/config-map.js +14 -0
  1056. package/dist/factories/simple/config/config-map.js.map +1 -1
  1057. package/dist/factories/simple/config/secret.d.ts +22 -2
  1058. package/dist/factories/simple/config/secret.d.ts.map +1 -1
  1059. package/dist/factories/simple/config/secret.js +39 -3
  1060. package/dist/factories/simple/config/secret.js.map +1 -1
  1061. package/dist/factories/simple/helm/index.d.ts +10 -0
  1062. package/dist/factories/simple/helm/index.d.ts.map +1 -1
  1063. package/dist/factories/simple/helm/index.js +10 -0
  1064. package/dist/factories/simple/helm/index.js.map +1 -1
  1065. package/dist/factories/simple/index.d.ts +1 -1
  1066. package/dist/factories/simple/networking/ingress.d.ts +14 -2
  1067. package/dist/factories/simple/networking/ingress.d.ts.map +1 -1
  1068. package/dist/factories/simple/networking/ingress.js +12 -0
  1069. package/dist/factories/simple/networking/ingress.js.map +1 -1
  1070. package/dist/factories/simple/networking/network-policy.d.ts +11 -1
  1071. package/dist/factories/simple/networking/network-policy.d.ts.map +1 -1
  1072. package/dist/factories/simple/networking/network-policy.js +10 -0
  1073. package/dist/factories/simple/networking/network-policy.js.map +1 -1
  1074. package/dist/factories/simple/networking/service.d.ts +10 -0
  1075. package/dist/factories/simple/networking/service.d.ts.map +1 -1
  1076. package/dist/factories/simple/networking/service.js +10 -0
  1077. package/dist/factories/simple/networking/service.js.map +1 -1
  1078. package/dist/factories/simple/storage/persistent-volume-claim.d.ts +10 -0
  1079. package/dist/factories/simple/storage/persistent-volume-claim.d.ts.map +1 -1
  1080. package/dist/factories/simple/storage/persistent-volume-claim.js +11 -0
  1081. package/dist/factories/simple/storage/persistent-volume-claim.js.map +1 -1
  1082. package/dist/factories/simple/storage/persistent-volume.d.ts +11 -0
  1083. package/dist/factories/simple/storage/persistent-volume.d.ts.map +1 -1
  1084. package/dist/factories/simple/storage/persistent-volume.js +12 -0
  1085. package/dist/factories/simple/storage/persistent-volume.js.map +1 -1
  1086. package/dist/factories/simple/types.d.ts +21 -1
  1087. package/dist/factories/simple/types.d.ts.map +1 -1
  1088. package/dist/factories/simple/workloads/cron-job.d.ts +10 -0
  1089. package/dist/factories/simple/workloads/cron-job.d.ts.map +1 -1
  1090. package/dist/factories/simple/workloads/cron-job.js +11 -0
  1091. package/dist/factories/simple/workloads/cron-job.js.map +1 -1
  1092. package/dist/factories/simple/workloads/daemon-set.d.ts +9 -0
  1093. package/dist/factories/simple/workloads/daemon-set.d.ts.map +1 -1
  1094. package/dist/factories/simple/workloads/daemon-set.js +9 -0
  1095. package/dist/factories/simple/workloads/daemon-set.js.map +1 -1
  1096. package/dist/factories/simple/workloads/deployment.d.ts +11 -1
  1097. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  1098. package/dist/factories/simple/workloads/deployment.js +19 -9
  1099. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  1100. package/dist/factories/simple/workloads/job.d.ts +10 -0
  1101. package/dist/factories/simple/workloads/job.d.ts.map +1 -1
  1102. package/dist/factories/simple/workloads/job.js +11 -0
  1103. package/dist/factories/simple/workloads/job.js.map +1 -1
  1104. package/dist/factories/simple/workloads/stateful-set.d.ts +11 -0
  1105. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
  1106. package/dist/factories/simple/workloads/stateful-set.js +12 -0
  1107. package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
  1108. package/dist/factories/simple/yaml/index.d.ts +8 -0
  1109. package/dist/factories/simple/yaml/index.d.ts.map +1 -1
  1110. package/dist/factories/simple/yaml/index.js +8 -0
  1111. package/dist/factories/simple/yaml/index.js.map +1 -1
  1112. package/dist/index.d.ts +105 -6
  1113. package/dist/index.d.ts.map +1 -1
  1114. package/dist/index.js +115 -42
  1115. package/dist/index.js.map +1 -1
  1116. package/dist/shared/brands.d.ts +32 -0
  1117. package/dist/shared/brands.d.ts.map +1 -0
  1118. package/dist/shared/brands.js +32 -0
  1119. package/dist/shared/brands.js.map +1 -0
  1120. package/dist/utils/helpers.d.ts +31 -57
  1121. package/dist/utils/helpers.d.ts.map +1 -1
  1122. package/dist/utils/helpers.js +47 -428
  1123. package/dist/utils/helpers.js.map +1 -1
  1124. package/dist/utils/index.d.ts +5 -4
  1125. package/dist/utils/index.d.ts.map +1 -1
  1126. package/dist/utils/index.js +8 -6
  1127. package/dist/utils/index.js.map +1 -1
  1128. package/dist/utils/string.d.ts +31 -0
  1129. package/dist/utils/string.d.ts.map +1 -0
  1130. package/dist/utils/string.js +82 -0
  1131. package/dist/utils/string.js.map +1 -0
  1132. package/dist/utils/type-guards.d.ts +20 -6
  1133. package/dist/utils/type-guards.d.ts.map +1 -1
  1134. package/dist/utils/type-guards.js +78 -20
  1135. package/dist/utils/type-guards.js.map +1 -1
  1136. package/package.json +66 -16
  1137. package/dist/core/composition/composition.d.ts +0 -10
  1138. package/dist/core/composition/composition.d.ts.map +0 -1
  1139. package/dist/core/composition/composition.js.map +0 -1
  1140. package/dist/core/composition/typekro-runtime/index.d.ts +0 -3
  1141. package/dist/core/composition/typekro-runtime/index.d.ts.map +0 -1
  1142. package/dist/core/composition/typekro-runtime/index.js.map +0 -1
  1143. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +0 -1
  1144. package/dist/core/composition/typekro-runtime/typekro-runtime.js +0 -99
  1145. package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +0 -1
  1146. package/dist/core/composition/typekro-runtime/types.d.ts +0 -16
  1147. package/dist/core/composition/typekro-runtime/types.d.ts.map +0 -1
  1148. package/dist/core/composition/typekro-runtime/types.js.map +0 -1
  1149. package/dist/core/composition/types.d.ts +0 -27
  1150. package/dist/core/composition/types.d.ts.map +0 -1
  1151. package/dist/core/composition/types.js +0 -8
  1152. package/dist/core/composition/types.js.map +0 -1
  1153. package/dist/core/dependencies/type-guards.d.ts +0 -17
  1154. package/dist/core/dependencies/type-guards.d.ts.map +0 -1
  1155. package/dist/core/dependencies/type-guards.js +0 -40
  1156. package/dist/core/dependencies/type-guards.js.map +0 -1
  1157. package/dist/core/deployment/deployment-strategies.d.ts +0 -12
  1158. package/dist/core/deployment/deployment-strategies.d.ts.map +0 -1
  1159. package/dist/core/deployment/deployment-strategies.js +0 -11
  1160. package/dist/core/deployment/deployment-strategies.js.map +0 -1
  1161. package/dist/core/deployment/event-streamer.d.ts +0 -112
  1162. package/dist/core/deployment/event-streamer.d.ts.map +0 -1
  1163. package/dist/core/deployment/event-streamer.js +0 -348
  1164. package/dist/core/deployment/event-streamer.js.map +0 -1
  1165. package/dist/core/direct-deployment.d.ts +0 -8
  1166. package/dist/core/direct-deployment.d.ts.map +0 -1
  1167. package/dist/core/direct-deployment.js +0 -9
  1168. package/dist/core/direct-deployment.js.map +0 -1
  1169. package/dist/core/evaluation/cel-optimizer.d.ts.map +0 -1
  1170. package/dist/core/evaluation/cel-optimizer.js.map +0 -1
  1171. package/dist/core/expressions/analyzer.d.ts +0 -584
  1172. package/dist/core/expressions/analyzer.d.ts.map +0 -1
  1173. package/dist/core/expressions/analyzer.js +0 -2956
  1174. package/dist/core/expressions/analyzer.js.map +0 -1
  1175. package/dist/core/expressions/cache.d.ts.map +0 -1
  1176. package/dist/core/expressions/cache.js.map +0 -1
  1177. package/dist/core/expressions/cel-conversion-engine.d.ts.map +0 -1
  1178. package/dist/core/expressions/cel-conversion-engine.js.map +0 -1
  1179. package/dist/core/expressions/compile-time-validation.d.ts +0 -270
  1180. package/dist/core/expressions/compile-time-validation.d.ts.map +0 -1
  1181. package/dist/core/expressions/compile-time-validation.js.map +0 -1
  1182. package/dist/core/expressions/composition-integration.d.ts +0 -315
  1183. package/dist/core/expressions/composition-integration.d.ts.map +0 -1
  1184. package/dist/core/expressions/composition-integration.js +0 -936
  1185. package/dist/core/expressions/composition-integration.js.map +0 -1
  1186. package/dist/core/expressions/conditional-expression-processor.d.ts.map +0 -1
  1187. package/dist/core/expressions/conditional-expression-processor.js.map +0 -1
  1188. package/dist/core/expressions/conditional-integration.d.ts.map +0 -1
  1189. package/dist/core/expressions/conditional-integration.js.map +0 -1
  1190. package/dist/core/expressions/conditional-validation.d.ts +0 -181
  1191. package/dist/core/expressions/conditional-validation.d.ts.map +0 -1
  1192. package/dist/core/expressions/conditional-validation.js +0 -460
  1193. package/dist/core/expressions/conditional-validation.js.map +0 -1
  1194. package/dist/core/expressions/context-aware-generator.d.ts.map +0 -1
  1195. package/dist/core/expressions/context-aware-generator.js.map +0 -1
  1196. package/dist/core/expressions/context-detector.d.ts.map +0 -1
  1197. package/dist/core/expressions/context-detector.js.map +0 -1
  1198. package/dist/core/expressions/context-switcher.d.ts +0 -185
  1199. package/dist/core/expressions/context-switcher.d.ts.map +0 -1
  1200. package/dist/core/expressions/context-switcher.js +0 -515
  1201. package/dist/core/expressions/context-switcher.js.map +0 -1
  1202. package/dist/core/expressions/context-validator.d.ts.map +0 -1
  1203. package/dist/core/expressions/context-validator.js.map +0 -1
  1204. package/dist/core/expressions/custom-context-manager.d.ts +0 -194
  1205. package/dist/core/expressions/custom-context-manager.d.ts.map +0 -1
  1206. package/dist/core/expressions/custom-context-manager.js +0 -390
  1207. package/dist/core/expressions/custom-context-manager.js.map +0 -1
  1208. package/dist/core/expressions/expression-proxy.d.ts +0 -80
  1209. package/dist/core/expressions/expression-proxy.d.ts.map +0 -1
  1210. package/dist/core/expressions/expression-proxy.js +0 -227
  1211. package/dist/core/expressions/expression-proxy.js.map +0 -1
  1212. package/dist/core/expressions/factory-integration.d.ts.map +0 -1
  1213. package/dist/core/expressions/factory-integration.js.map +0 -1
  1214. package/dist/core/expressions/factory-pattern-handler.d.ts.map +0 -1
  1215. package/dist/core/expressions/factory-pattern-handler.js.map +0 -1
  1216. package/dist/core/expressions/field-hydration-processor.d.ts +0 -188
  1217. package/dist/core/expressions/field-hydration-processor.d.ts.map +0 -1
  1218. package/dist/core/expressions/field-hydration-processor.js +0 -562
  1219. package/dist/core/expressions/field-hydration-processor.js.map +0 -1
  1220. package/dist/core/expressions/imperative-analyzer.d.ts.map +0 -1
  1221. package/dist/core/expressions/imperative-analyzer.js.map +0 -1
  1222. package/dist/core/expressions/lazy-analysis.d.ts +0 -1128
  1223. package/dist/core/expressions/lazy-analysis.d.ts.map +0 -1
  1224. package/dist/core/expressions/lazy-analysis.js +0 -2443
  1225. package/dist/core/expressions/lazy-analysis.js.map +0 -1
  1226. package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +0 -1
  1227. package/dist/core/expressions/magic-assignable-analyzer.js.map +0 -1
  1228. package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +0 -1
  1229. package/dist/core/expressions/magic-proxy-analyzer.js.map +0 -1
  1230. package/dist/core/expressions/magic-proxy-detector.d.ts.map +0 -1
  1231. package/dist/core/expressions/magic-proxy-detector.js.map +0 -1
  1232. package/dist/core/expressions/migration-helpers.d.ts.map +0 -1
  1233. package/dist/core/expressions/migration-helpers.js.map +0 -1
  1234. package/dist/core/expressions/optionality-handler.d.ts +0 -503
  1235. package/dist/core/expressions/optionality-handler.d.ts.map +0 -1
  1236. package/dist/core/expressions/optionality-handler.js +0 -1306
  1237. package/dist/core/expressions/optionality-handler.js.map +0 -1
  1238. package/dist/core/expressions/readiness-integration.d.ts +0 -119
  1239. package/dist/core/expressions/readiness-integration.d.ts.map +0 -1
  1240. package/dist/core/expressions/readiness-integration.js +0 -386
  1241. package/dist/core/expressions/readiness-integration.js.map +0 -1
  1242. package/dist/core/expressions/resource-analyzer.d.ts +0 -486
  1243. package/dist/core/expressions/resource-analyzer.d.ts.map +0 -1
  1244. package/dist/core/expressions/resource-analyzer.js +0 -1086
  1245. package/dist/core/expressions/resource-analyzer.js.map +0 -1
  1246. package/dist/core/expressions/resource-validation.d.ts.map +0 -1
  1247. package/dist/core/expressions/resource-validation.js +0 -552
  1248. package/dist/core/expressions/resource-validation.js.map +0 -1
  1249. package/dist/core/expressions/runtime-error-mapper.d.ts +0 -138
  1250. package/dist/core/expressions/runtime-error-mapper.d.ts.map +0 -1
  1251. package/dist/core/expressions/runtime-error-mapper.js +0 -412
  1252. package/dist/core/expressions/runtime-error-mapper.js.map +0 -1
  1253. package/dist/core/expressions/source-map.d.ts.map +0 -1
  1254. package/dist/core/expressions/source-map.js.map +0 -1
  1255. package/dist/core/expressions/status-builder-analyzer.d.ts +0 -353
  1256. package/dist/core/expressions/status-builder-analyzer.d.ts.map +0 -1
  1257. package/dist/core/expressions/status-builder-analyzer.js +0 -1311
  1258. package/dist/core/expressions/status-builder-analyzer.js.map +0 -1
  1259. package/dist/core/expressions/type-inference.d.ts.map +0 -1
  1260. package/dist/core/expressions/type-inference.js.map +0 -1
  1261. package/dist/core/expressions/type-safety.d.ts.map +0 -1
  1262. package/dist/core/expressions/type-safety.js.map +0 -1
  1263. package/dist/core/expressions/types.d.ts.map +0 -1
  1264. package/dist/core/expressions/types.js.map +0 -1
  1265. package/dist/core/factory.d.ts +0 -12
  1266. package/dist/core/factory.d.ts.map +0 -1
  1267. package/dist/core/factory.js +0 -13
  1268. package/dist/core/factory.js.map +0 -1
  1269. package/dist/core/readiness/cluster-state.d.ts +0 -229
  1270. package/dist/core/readiness/cluster-state.d.ts.map +0 -1
  1271. package/dist/core/readiness/cluster-state.js +0 -366
  1272. package/dist/core/readiness/cluster-state.js.map +0 -1
  1273. package/dist/core.d.ts +0 -30
  1274. package/dist/core.d.ts.map +0 -1
  1275. package/dist/core.js +0 -59
  1276. package/dist/core.js.map +0 -1
  1277. /package/dist/{core/composition → compositions}/typekro-runtime/index.js +0 -0
  1278. /package/dist/{core/composition → compositions}/typekro-runtime/types.js +0 -0
  1279. /package/dist/core/expressions/{source-map.d.ts → analysis/source-map.d.ts} +0 -0
  1280. /package/dist/core/expressions/{types.js → analysis/types.js} +0 -0
@@ -4,17 +4,23 @@
4
4
  * Orchestrates the deployment of Kubernetes resources directly to a cluster
5
5
  * without requiring the Kro controller, using in-process dependency resolution.
6
6
  */
7
- import * as k8s from '@kubernetes/client-node';
8
- import { ensureReadinessEvaluator } from '../../utils/helpers.js';
7
+ import { DEFAULT_CRD_READY_TIMEOUT, DEFAULT_DEPLOYMENT_TIMEOUT, DEFAULT_READINESS_TIMEOUT, } from '../config/defaults.js';
9
8
  import { DependencyResolver } from '../dependencies/index.js';
10
- import { CircularDependencyError } from '../errors.js';
9
+ import { CircularDependencyError, ensureError, ResourceGraphFactoryError } from '../errors.js';
10
+ import { createBunCompatibleKubernetesObjectApi } from '../kubernetes/index.js';
11
11
  import { getComponentLogger } from '../logging/index.js';
12
+ import { getResourceId as getResourceMetadataId } from '../metadata/index.js';
13
+ import { ensureReadinessEvaluator } from '../readiness/index.js';
12
14
  import { DeploymentMode, ReferenceResolver } from '../references/index.js';
13
- import { ResourceDeploymentError, UnsupportedMediaTypeError } from '../types/deployment.js';
15
+ import { getResourceId } from '../resources/id.js';
16
+ import { analyzeClosureDependencies, integrateClosuresIntoPlan } from './closure-planner.js';
17
+ import { CRDManager } from './crd-manager.js';
14
18
  import { createDebugLoggerFromDeploymentOptions } from './debug-logger.js';
15
- import { ResourceReadinessChecker } from './readiness.js';
16
- import { StatusHydrator } from './status-hydrator.js';
17
19
  import { createEventMonitor } from './event-monitor.js';
20
+ import { ResourceReadinessChecker } from './readiness.js';
21
+ import { ReadinessWaiter } from './readiness-waiter.js';
22
+ import { ResourceApplier } from './resource-applier.js';
23
+ import { ResourceRollbackManager } from './rollback-manager.js';
18
24
  export class DirectDeploymentEngine {
19
25
  kubeClient;
20
26
  deploymentMode;
@@ -22,22 +28,35 @@ export class DirectDeploymentEngine {
22
28
  referenceResolver;
23
29
  k8sApi;
24
30
  readinessChecker;
25
- statusHydrator;
31
+ resourceApplier;
32
+ rollbackManager;
33
+ readinessWaiter;
26
34
  debugLogger;
27
35
  eventMonitor;
28
36
  deploymentState = new Map();
37
+ crdManager;
29
38
  readyResources = new Set(); // Track resources that are already ready
39
+ activeAbortControllers = new Set(); // Track active abort controllers for cleanup
30
40
  logger = getComponentLogger('deployment-engine');
31
- constructor(kubeClient, k8sApi, referenceResolver, deploymentMode = DeploymentMode.DIRECT) {
41
+ constructor(kubeClient, k8sApi, referenceResolver, deploymentMode = DeploymentMode.DIRECT, httpTimeouts) {
32
42
  this.kubeClient = kubeClient;
33
43
  this.deploymentMode = deploymentMode;
34
44
  this.dependencyResolver = new DependencyResolver();
35
45
  this.referenceResolver =
36
46
  referenceResolver || new ReferenceResolver(kubeClient, this.deploymentMode, k8sApi);
37
- this.k8sApi = k8sApi || kubeClient.makeApiClient(k8s.KubernetesObjectApi);
47
+ // Use createBunCompatibleKubernetesObjectApi which handles both Bun and Node.js
48
+ // This works around Bun's fetch TLS issues (https://github.com/oven-sh/bun/issues/10642)
49
+ // Pass HTTP timeout configuration if provided
50
+ this.k8sApi = k8sApi || createBunCompatibleKubernetesObjectApi(kubeClient, httpTimeouts);
38
51
  this.readinessChecker = new ResourceReadinessChecker(this.k8sApi);
39
- this.statusHydrator = new StatusHydrator(this.k8sApi);
40
- // this.eventFilter = createEventFilter();
52
+ this.resourceApplier = new ResourceApplier(this.k8sApi, this.referenceResolver, this.logger);
53
+ this.rollbackManager = new ResourceRollbackManager(this.k8sApi);
54
+ this.readinessWaiter = new ReadinessWaiter(this.k8sApi, this.readyResources, this.readinessChecker, this.logger, undefined, {
55
+ abortableDelay: this.abortableDelay.bind(this),
56
+ withAbortSignal: this.withAbortSignal.bind(this),
57
+ emitEvent: this.emitEvent.bind(this),
58
+ });
59
+ this.crdManager = new CRDManager(this.k8sApi, kubeClient, this.abortableDelay.bind(this), this.withAbortSignal.bind(this));
41
60
  // Set up callback to track ready resources
42
61
  this.readinessChecker.setOnResourceReady((resource) => {
43
62
  const resourceKey = `${resource.kind}/${resource.name}/${resource.namespace}`;
@@ -48,6 +67,94 @@ export class DirectDeploymentEngine {
48
67
  });
49
68
  });
50
69
  }
70
+ /**
71
+ * Create an abortable delay that can be cancelled via AbortSignal
72
+ * @param ms - Delay in milliseconds
73
+ * @param signal - Optional AbortSignal to cancel the delay
74
+ * @returns Promise that resolves after the delay or rejects if aborted
75
+ */
76
+ abortableDelay(ms, signal) {
77
+ return new Promise((resolve, reject) => {
78
+ if (signal?.aborted) {
79
+ reject(new DOMException('Delay aborted', 'AbortError'));
80
+ return;
81
+ }
82
+ const timeoutId = setTimeout(() => {
83
+ resolve();
84
+ }, ms);
85
+ signal?.addEventListener('abort', () => {
86
+ clearTimeout(timeoutId);
87
+ reject(new DOMException('Delay aborted', 'AbortError'));
88
+ }, { once: true });
89
+ });
90
+ }
91
+ /**
92
+ * Wrap an async operation with abort signal handling
93
+ * If the signal is aborted, the promise will reject with AbortError
94
+ * Note: This doesn't actually cancel the underlying operation, but it allows
95
+ * the caller to stop waiting for it and handle the abort gracefully
96
+ * @param operation - The async operation to wrap
97
+ * @param signal - Optional AbortSignal to cancel the wait
98
+ * @returns Promise that resolves with the operation result or rejects if aborted
99
+ */
100
+ async withAbortSignal(operation, signal) {
101
+ if (!signal) {
102
+ return operation;
103
+ }
104
+ if (signal.aborted) {
105
+ throw new DOMException('Operation aborted', 'AbortError');
106
+ }
107
+ return new Promise((resolve, reject) => {
108
+ const abortHandler = () => {
109
+ reject(new DOMException('Operation aborted', 'AbortError'));
110
+ };
111
+ signal.addEventListener('abort', abortHandler, { once: true });
112
+ operation
113
+ .then((result) => {
114
+ signal.removeEventListener('abort', abortHandler);
115
+ resolve(result);
116
+ })
117
+ .catch((error) => {
118
+ signal.removeEventListener('abort', abortHandler);
119
+ // If the signal was aborted, throw AbortError instead of the original error
120
+ if (signal.aborted) {
121
+ reject(new DOMException('Operation aborted', 'AbortError'));
122
+ }
123
+ else {
124
+ reject(error);
125
+ }
126
+ });
127
+ });
128
+ }
129
+ /**
130
+ * Create and track an AbortController for a deployment operation
131
+ * @returns AbortController that is tracked for cleanup
132
+ */
133
+ createTrackedAbortController() {
134
+ const controller = new AbortController();
135
+ this.activeAbortControllers.add(controller);
136
+ return controller;
137
+ }
138
+ /**
139
+ * Remove an AbortController from tracking
140
+ * @param controller - The AbortController to remove
141
+ */
142
+ removeTrackedAbortController(controller) {
143
+ this.activeAbortControllers.delete(controller);
144
+ }
145
+ /**
146
+ * Abort all active operations and clean up
147
+ * This is called when a deployment times out or is cancelled
148
+ */
149
+ abortAllOperations() {
150
+ this.logger.debug('Aborting all active operations', {
151
+ activeControllers: this.activeAbortControllers.size,
152
+ });
153
+ for (const controller of this.activeAbortControllers) {
154
+ controller.abort();
155
+ }
156
+ this.activeAbortControllers.clear();
157
+ }
51
158
  /**
52
159
  * Get the Kubernetes API client for external integrations
53
160
  * @returns The configured KubernetesObjectApi instance
@@ -59,69 +166,7 @@ export class DirectDeploymentEngine {
59
166
  * Check if a deployed resource is ready using the factory-provided readiness evaluator
60
167
  */
61
168
  async isDeployedResourceReady(deployedResource) {
62
- try {
63
- // Check if the deployed resource has a factory-provided readiness evaluator
64
- const readinessEvaluator = deployedResource.manifest
65
- .readinessEvaluator;
66
- if (readinessEvaluator) {
67
- // Use the factory-provided readiness evaluator
68
- // Create a resource reference for the API call
69
- const resourceRef = {
70
- apiVersion: deployedResource.manifest.apiVersion || '',
71
- kind: deployedResource.kind,
72
- metadata: {
73
- name: deployedResource.name,
74
- namespace: deployedResource.namespace,
75
- },
76
- };
77
- // Get the live resource from the cluster
78
- const liveResource = await this.k8sApi.read(resourceRef);
79
- // Use the factory-provided readiness evaluator
80
- const result = readinessEvaluator(liveResource.body);
81
- let readinessResult;
82
- if (typeof result === 'boolean') {
83
- readinessResult = { ready: result };
84
- }
85
- else if (result && typeof result === 'object' && 'ready' in result) {
86
- readinessResult = result;
87
- }
88
- else {
89
- this.logger.warn('Readiness evaluator returned unexpected result', {
90
- resourceId: deployedResource.id,
91
- result,
92
- });
93
- readinessResult = { ready: false, reason: 'Invalid evaluator result' };
94
- }
95
- // Debug logging for readiness evaluation
96
- if (this.debugLogger) {
97
- this.debugLogger.logReadinessEvaluation(deployedResource, readinessEvaluator, readinessResult);
98
- }
99
- return readinessResult.ready;
100
- }
101
- else {
102
- // Fallback to generic readiness checker
103
- const resourceRef = {
104
- apiVersion: deployedResource.manifest.apiVersion || '',
105
- kind: deployedResource.kind,
106
- metadata: {
107
- name: deployedResource.name,
108
- namespace: deployedResource.namespace,
109
- },
110
- };
111
- const liveResource = await this.k8sApi.read(resourceRef);
112
- return this.readinessChecker.isResourceReady(liveResource.body);
113
- }
114
- }
115
- catch (error) {
116
- this.logger.debug('Failed to check resource readiness', {
117
- error: error,
118
- resourceId: deployedResource.id,
119
- kind: deployedResource.kind,
120
- name: deployedResource.name,
121
- namespace: deployedResource.namespace,
122
- });
123
- return false;
124
- }
169
+ return this.readinessWaiter.isDeployedResourceReady(deployedResource);
125
170
  }
126
171
  /**
127
172
  * Get all deployment states for health checking
@@ -133,6 +178,14 @@ export class DirectDeploymentEngine {
133
178
  * Deploy a resource graph to the Kubernetes cluster
134
179
  */
135
180
  async deploy(graph, options) {
181
+ // Delegate to deployWithClosures with no closures and a dummy spec.
182
+ // The closure integration code is a no-op when the closures map is empty.
183
+ return this.deployWithClosures(graph, {}, options, undefined);
184
+ }
185
+ /**
186
+ * Deploy a resource graph with deployment closures integrated into level-based execution
187
+ */
188
+ async deployWithClosures(graph, closures, options, spec, alchemyScope) {
136
189
  const deploymentId = this.generateDeploymentId();
137
190
  const startTime = Date.now();
138
191
  const deployedResources = [];
@@ -140,244 +193,39 @@ export class DirectDeploymentEngine {
140
193
  const deploymentLogger = this.logger.child({
141
194
  deploymentId,
142
195
  resourceCount: graph.resources.length,
196
+ closureCount: Object.keys(closures).length,
197
+ });
198
+ const { abortController: deploymentAbortController, timeoutId } = this.setupDeploymentTimeout(deploymentId, options, deploymentLogger);
199
+ const abortSignal = deploymentAbortController.signal;
200
+ deploymentLogger.info(Object.keys(closures).length === 0
201
+ ? 'Starting deployment'
202
+ : 'Starting deployment with closures', {
203
+ options,
204
+ closures: Object.keys(closures),
143
205
  });
144
- deploymentLogger.info('Starting deployment', { options });
145
206
  try {
146
207
  this.emitEvent(options, {
147
208
  type: 'started',
148
- message: `Starting deployment of ${graph.resources.length} resources`,
209
+ message: `Starting deployment of ${graph.resources.length} resources and ${Object.keys(closures).length} closures`,
149
210
  timestamp: new Date(),
150
211
  });
151
- // 1. Validate no cycles in dependency graph
152
- deploymentLogger.debug('Validating dependency graph', {
153
- dependencyGraph: graph.dependencyGraph,
154
- });
155
- this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
156
- // 2. Analyze deployment order and identify parallel stages
157
- deploymentLogger.debug('Analyzing deployment order for parallel execution');
158
- const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(graph.dependencyGraph);
159
- deploymentLogger.debug('Deployment plan determined', {
160
- levels: deploymentPlan.levels.length,
161
- totalResources: deploymentPlan.totalResources,
162
- maxParallelism: deploymentPlan.maxParallelism,
163
- });
164
- // 3. Initialize and start event monitoring if enabled
165
- if (options.eventMonitoring?.enabled) {
166
- try {
167
- this.eventMonitor = createEventMonitor(this.kubeClient, {
168
- namespace: options.namespace || 'default',
169
- eventTypes: options.eventMonitoring.eventTypes || ['Warning', 'Error'],
170
- includeChildResources: options.eventMonitoring.includeChildResources ?? true,
171
- startTime: new Date(startTime),
172
- ...(options.progressCallback && { progressCallback: options.progressCallback }),
173
- });
174
- // Start monitoring immediately to capture all deployment events
175
- await this.eventMonitor.startMonitoring([]);
176
- deploymentLogger.debug('Event monitoring started for deployment');
177
- }
178
- catch (error) {
179
- deploymentLogger.warn('Failed to initialize event monitoring, continuing without it', error);
180
- }
181
- }
182
- // 3.1. Initialize debug logging if enabled
183
- if (options.debugLogging?.enabled) {
184
- this.debugLogger = createDebugLoggerFromDeploymentOptions(options);
185
- this.readinessChecker.setDebugLogger(this.debugLogger);
186
- deploymentLogger.debug('Debug logging initialized');
187
- }
188
- // 4. Create resolution context
189
- const context = {
190
- deployedResources,
191
- kubeClient: this.kubeClient,
192
- ...(options.namespace && { namespace: options.namespace }),
193
- timeout: options.timeout || 30000,
194
- };
195
- // 5. Deploy resources in parallel stages
196
- for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
197
- const currentLevel = deploymentPlan.levels[levelIndex];
212
+ // Validate, plan, initialize monitoring, and build resolution context
213
+ const { enhancedPlan, context, resourceKeyMapping } = await this.validateAndPlanDeployment(graph, closures, spec, options, startTime, deployedResources, deploymentLogger);
214
+ // Deploy resources and closures level by level with proper dependency handling
215
+ for (let levelIndex = 0; levelIndex < enhancedPlan.levels.length; levelIndex++) {
216
+ const currentLevel = enhancedPlan.levels[levelIndex];
198
217
  if (!currentLevel) {
199
218
  continue;
200
219
  }
201
- const levelLogger = deploymentLogger.child({
202
- level: levelIndex + 1,
203
- resourceCount: currentLevel.length,
204
- });
205
- levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.length} resources in parallel`);
206
- // Track performance metrics for this level
207
- const levelStartTime = Date.now();
208
- // Deploy all resources in this level in parallel
209
- const levelPromises = currentLevel.map(async (resourceId) => {
210
- const resourceLogger = deploymentLogger.child({ resourceId });
211
- resourceLogger.debug('Starting resource deployment');
212
- const resource = graph.resources.find((r) => r.id === resourceId);
213
- if (!resource) {
214
- resourceLogger.error('Resource not found in graph');
215
- const error = new Error(`Resource with id '${resourceId}' not found in graph`);
216
- return {
217
- success: false,
218
- resourceId,
219
- error: {
220
- resourceId,
221
- phase: 'validation',
222
- error,
223
- timestamp: new Date(),
224
- },
225
- };
226
- }
227
- resourceLogger.debug('Found resource in graph', {
228
- resourceId: resource.id,
229
- kind: resource.manifest?.kind,
230
- name: resource.manifest?.metadata?.name,
231
- });
232
- try {
233
- resourceLogger.debug('Calling deploySingleResource');
234
- // Wait for CRD establishment if this is a custom resource
235
- await this.waitForCRDIfCustomResource(resource.manifest, options, resourceLogger);
236
- // FIX: Unconditionally ensure the readiness evaluator is attached just before deployment.
237
- const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
238
- // Add resource to event monitoring before deployment to capture creation events
239
- if (this.eventMonitor) {
240
- const preDeployedResource = {
241
- id: resourceId,
242
- kind: resourceWithEvaluator.kind,
243
- name: resourceWithEvaluator.metadata?.name || 'unknown',
244
- namespace: resourceWithEvaluator.metadata?.namespace || options.namespace || 'default',
245
- manifest: resourceWithEvaluator,
246
- status: 'deployed',
247
- deployedAt: new Date(),
248
- };
249
- try {
250
- await this.eventMonitor.addResources([preDeployedResource]);
251
- resourceLogger.debug('Added resource to event monitoring before deployment');
252
- }
253
- catch (error) {
254
- resourceLogger.warn('Failed to add resource to event monitoring, continuing deployment', error);
255
- }
256
- }
257
- const deployedResource = await this.deploySingleResource(resourceWithEvaluator, context, options);
258
- resourceLogger.debug('Resource deployed successfully');
259
- return {
260
- success: true,
261
- resourceId,
262
- deployedResource,
263
- };
264
- }
265
- catch (error) {
266
- resourceLogger.error('Resource deployment failed', error);
267
- const failedResource = {
268
- id: resourceId,
269
- kind: resource.manifest.kind,
270
- name: resource.manifest.metadata?.name || 'unknown',
271
- namespace: resource.manifest.metadata?.namespace || 'default',
272
- manifest: resource.manifest,
273
- status: 'failed',
274
- deployedAt: new Date(),
275
- error: error,
276
- };
277
- return {
278
- success: false,
279
- resourceId,
280
- deployedResource: failedResource,
281
- error: {
282
- resourceId,
283
- phase: 'deployment',
284
- error: error,
285
- timestamp: new Date(),
286
- },
287
- };
288
- }
289
- });
290
- // Wait for all resources in this level to complete
291
- const levelResults = await Promise.allSettled(levelPromises);
292
- // Process results and handle errors
293
- let levelHasFailures = false;
294
- for (const result of levelResults) {
295
- if (result.status === 'fulfilled') {
296
- const deploymentResult = result.value;
297
- if (deploymentResult.success && deploymentResult.deployedResource) {
298
- deployedResources.push(deploymentResult.deployedResource);
299
- }
300
- else {
301
- levelHasFailures = true;
302
- if (deploymentResult.error) {
303
- errors.push(deploymentResult.error);
304
- }
305
- if (deploymentResult.deployedResource) {
306
- deployedResources.push(deploymentResult.deployedResource);
307
- }
308
- }
309
- }
310
- else {
311
- // Promise was rejected
312
- levelHasFailures = true;
313
- levelLogger.error('Unexpected promise rejection in parallel deployment', result.reason);
314
- }
315
- }
316
- // Resources are now added to event monitoring before deployment (see individual resource deployment above)
317
- // Handle rollback if there are failures and rollback is enabled
318
- if (levelHasFailures && options.rollbackOnFailure) {
319
- levelLogger.warn('Level deployment failed, initiating rollback');
320
- await this.rollbackDeployedResources(deployedResources, options);
321
- const duration = Date.now() - startTime;
322
- this.emitEvent(options, {
323
- type: 'rollback',
324
- message: `Deployment failed and rolled back in ${duration}ms`,
325
- timestamp: new Date(),
326
- });
327
- return {
328
- deploymentId,
329
- resources: deployedResources,
330
- dependencyGraph: graph.dependencyGraph,
331
- duration,
332
- status: 'failed',
333
- errors,
334
- };
335
- }
336
- // Calculate level performance metrics
337
- const levelDuration = Date.now() - levelStartTime;
338
- const successfulCount = levelResults.filter((r) => r.status === 'fulfilled' && r.value.success).length;
339
- const failedCount = levelResults.filter((r) => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length;
340
- levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
341
- successful: successfulCount,
342
- failed: failedCount,
343
- duration: levelDuration,
344
- parallelism: currentLevel.length,
345
- averageTimePerResource: Math.round(levelDuration / currentLevel.length),
346
- });
347
- }
348
- const duration = Date.now() - startTime;
349
- const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
350
- const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
351
- // Log comprehensive performance metrics
352
- deploymentLogger.info('Parallel deployment performance metrics', {
353
- totalDuration: duration,
354
- totalResources: deploymentPlan.totalResources,
355
- parallelLevels: deploymentPlan.levels.length,
356
- maxParallelism: deploymentPlan.maxParallelism,
357
- averageTimePerResource: Math.round(duration / deploymentPlan.totalResources),
358
- successfulResources: successfulResources.length,
359
- failedResources: errors.length,
360
- parallelismEfficiency: Math.round((deploymentPlan.totalResources /
361
- deploymentPlan.levels.length /
362
- deploymentPlan.maxParallelism) *
363
- 100),
364
- status,
365
- });
366
- this.emitEvent(options, {
367
- type: status === 'success' ? 'completed' : 'failed',
368
- message: `Deployment ${status} in ${duration}ms (${deploymentPlan.levels.length} parallel levels, max ${deploymentPlan.maxParallelism} concurrent)`,
369
- timestamp: new Date(),
370
- });
371
- // Stop event monitoring
372
- if (this.eventMonitor) {
373
- try {
374
- await this.eventMonitor.stopMonitoring();
375
- deploymentLogger.debug('Event monitoring stopped');
376
- }
377
- catch (error) {
378
- deploymentLogger.warn('Failed to stop event monitoring cleanly', error);
220
+ const earlyReturn = await this.deployLevel(levelIndex, currentLevel, graph, deployedResources, errors, context, resourceKeyMapping, options, alchemyScope, abortSignal, startTime, deploymentId, deploymentLogger);
221
+ // If deployLevel returned a result, it means rollback occurred — return immediately
222
+ if (earlyReturn) {
223
+ await this.cleanupDeployment(deploymentAbortController, timeoutId, deploymentLogger);
224
+ return earlyReturn;
379
225
  }
380
226
  }
227
+ const result = this.buildDeploymentResult(deploymentId, graph, enhancedPlan, deployedResources, errors, startTime, options, deploymentLogger);
228
+ await this.cleanupDeployment(deploymentAbortController, timeoutId, deploymentLogger);
381
229
  // Store deployment state for rollback
382
230
  this.deploymentState.set(deploymentId, {
383
231
  deploymentId,
@@ -385,39 +233,31 @@ export class DirectDeploymentEngine {
385
233
  dependencyGraph: graph.dependencyGraph,
386
234
  startTime: new Date(startTime),
387
235
  endTime: new Date(),
388
- status: status === 'success' ? 'completed' : status === 'partial' ? 'completed' : 'failed',
236
+ status: result.status === 'success'
237
+ ? 'completed'
238
+ : result.status === 'partial'
239
+ ? 'completed'
240
+ : 'failed',
389
241
  options,
390
242
  });
391
- return {
392
- deploymentId,
393
- resources: deployedResources,
394
- dependencyGraph: graph.dependencyGraph,
395
- duration,
396
- status,
397
- errors,
398
- };
243
+ return result;
399
244
  }
400
245
  catch (error) {
401
246
  // Re-throw circular dependency errors immediately - these are configuration errors
402
247
  if (error instanceof CircularDependencyError) {
248
+ // Clean up abort controller and timeout before re-throwing
249
+ await this.cleanupDeployment(deploymentAbortController, timeoutId, deploymentLogger);
403
250
  throw error;
404
251
  }
252
+ // Clean up abort controller and timeout
253
+ await this.cleanupDeployment(deploymentAbortController, timeoutId, deploymentLogger);
405
254
  const duration = Date.now() - startTime;
406
255
  this.emitEvent(options, {
407
256
  type: 'failed',
408
- message: `Deployment failed: ${error}`,
257
+ message: `Deployment with closures failed: ${ensureError(error).message}`,
409
258
  timestamp: new Date(),
410
- error: error,
259
+ error: ensureError(error),
411
260
  });
412
- // Stop event monitoring on error
413
- if (this.eventMonitor) {
414
- try {
415
- await this.eventMonitor.stopMonitoring();
416
- }
417
- catch (_cleanupError) {
418
- // Ignore cleanup errors in error path
419
- }
420
- }
421
261
  // Store deployment state even for failed deployments (for rollback)
422
262
  this.deploymentState.set(deploymentId, {
423
263
  deploymentId,
@@ -438,7 +278,7 @@ export class DirectDeploymentEngine {
438
278
  {
439
279
  resourceId: 'deployment',
440
280
  phase: 'deployment',
441
- error: error,
281
+ error: ensureError(error),
442
282
  timestamp: new Date(),
443
283
  },
444
284
  ],
@@ -446,439 +286,484 @@ export class DirectDeploymentEngine {
446
286
  }
447
287
  }
448
288
  /**
449
- * Analyze closure dependencies to determine execution levels
289
+ * Create an AbortController and set up a timeout that aborts the deployment
290
+ * when the configured timeout is reached. Also stops event monitoring on timeout.
291
+ * @param deploymentId - The unique deployment ID for logging
292
+ * @param options - Deployment options containing the timeout configuration
293
+ * @param deploymentLogger - Logger scoped to this deployment
294
+ * @returns The AbortController and timeout ID for cleanup
450
295
  */
451
- analyzeClosureDependencies(closures, spec, dependencyGraph) {
452
- const closureDependencies = [];
453
- for (const [name, closure] of Object.entries(closures)) {
454
- // For now, analyze dependencies by examining the closure's configuration
455
- // This is a simplified implementation - in practice, we would need to analyze
456
- // the closure's arguments to detect resource references
457
- const dependencies = this.extractClosureDependencies(closure, spec);
458
- // Determine execution level based on dependencies
459
- // For now, assign all closures to level -1 to ensure they run before all resources
460
- // This is especially important for closures that install CRDs (like fluxSystem)
461
- let level = -1;
462
- if (dependencies.length > 0) {
463
- // Find the maximum level of any dependency + 1
464
- for (const depId of dependencies) {
465
- const depLevel = this.getResourceLevel(depId, dependencyGraph);
466
- level = Math.max(level, depLevel + 1);
467
- }
468
- }
469
- closureDependencies.push({
470
- name,
471
- closure,
472
- dependencies,
473
- level,
296
+ setupDeploymentTimeout(deploymentId, options, deploymentLogger) {
297
+ const abortController = this.createTrackedAbortController();
298
+ const timeout = options.timeout || DEFAULT_DEPLOYMENT_TIMEOUT;
299
+ const timeoutId = setTimeout(() => {
300
+ deploymentLogger.debug('Deployment timeout reached, aborting operations', {
301
+ deploymentId,
302
+ timeout,
474
303
  });
475
- }
476
- return closureDependencies;
477
- }
478
- /**
479
- * Extract dependencies from a closure by analyzing its configuration
480
- * This is a simplified implementation - in practice, we would need more sophisticated analysis
481
- */
482
- extractClosureDependencies(_closure, _spec) {
483
- // For now, return empty dependencies since closures typically don't depend on Enhanced<> resources
484
- // In the future, this could analyze closure arguments for resource references
485
- return [];
304
+ // Stop event monitoring immediately when timeout is reached
305
+ // This prevents watch connections from continuing to run and throwing errors
306
+ if (this.eventMonitor) {
307
+ this.eventMonitor.stopMonitoring().catch((error) => {
308
+ deploymentLogger.debug('Error stopping event monitoring on timeout', {
309
+ error: ensureError(error).message,
310
+ });
311
+ });
312
+ }
313
+ abortController.abort();
314
+ }, timeout);
315
+ return { abortController, timeoutId };
486
316
  }
487
317
  /**
488
- * Get the execution level of a resource in the dependency graph
318
+ * Validate the dependency graph for cycles, analyze deployment order,
319
+ * integrate closures into the plan, initialize event/debug monitoring,
320
+ * and build the resource key mapping and resolution context.
321
+ * @param graph - The deployment resource graph
322
+ * @param closures - Map of deployment closures keyed by name
323
+ * @param spec - The resource graph spec for closure dependency analysis
324
+ * @param options - Deployment options
325
+ * @param startTime - Deployment start timestamp for event monitoring
326
+ * @param deployedResources - Mutable array of deployed resources (used in resolution context)
327
+ * @param deploymentLogger - Logger scoped to this deployment
328
+ * @returns Enhanced plan, resolution context, and resource key mapping
489
329
  */
490
- getResourceLevel(resourceId, dependencyGraph) {
491
- // Find the level where this resource appears in the deployment plan
492
- const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(dependencyGraph);
493
- for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
494
- const level = deploymentPlan.levels[levelIndex];
495
- if (level?.includes(resourceId)) {
496
- return levelIndex;
330
+ async validateAndPlanDeployment(graph, closures, spec, options, startTime, deployedResources, deploymentLogger) {
331
+ // 1. Validate no cycles in dependency graph
332
+ deploymentLogger.debug('Validating dependency graph', {
333
+ dependencyGraph: graph.dependencyGraph,
334
+ });
335
+ this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
336
+ // 2. Analyze deployment order and identify parallel stages
337
+ deploymentLogger.debug('Analyzing deployment order for parallel execution');
338
+ const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(graph.dependencyGraph);
339
+ deploymentLogger.debug('Deployment plan determined', {
340
+ levels: deploymentPlan.levels.length,
341
+ totalResources: deploymentPlan.totalResources,
342
+ maxParallelism: deploymentPlan.maxParallelism,
343
+ });
344
+ // 3. Initialize and start event monitoring if enabled
345
+ await this.initializeEventMonitoring(options, startTime, deploymentLogger);
346
+ // 3.1. Initialize debug logging if enabled
347
+ if (options.debugLogging?.enabled) {
348
+ this.debugLogger = createDebugLoggerFromDeploymentOptions(options);
349
+ this.readinessChecker.setDebugLogger(this.debugLogger);
350
+ deploymentLogger.debug('Debug logging initialized');
351
+ }
352
+ // 4. Analyze closure dependencies and integrate into deployment plan
353
+ const closureDependencies = analyzeClosureDependencies(closures, spec, graph.dependencyGraph, this.dependencyResolver);
354
+ const enhancedPlan = integrateClosuresIntoPlan(deploymentPlan, closureDependencies);
355
+ deploymentLogger.debug('Enhanced deployment plan with closures', {
356
+ levels: enhancedPlan.levels.length,
357
+ totalResources: enhancedPlan.totalResources,
358
+ totalClosures: enhancedPlan.totalClosures,
359
+ maxParallelism: enhancedPlan.maxParallelism,
360
+ });
361
+ // 5. Create resolution context with resourceKeyMapping for cross-resource references
362
+ // The resourceKeyMapping maps original resource IDs (like 'webappDeployment') to their manifests
363
+ const resourceKeyMapping = new Map();
364
+ for (const resource of graph.resources) {
365
+ const manifest = resource.manifest;
366
+ const originalResourceId = getResourceMetadataId(manifest);
367
+ if (originalResourceId) {
368
+ // Convert the Enhanced proxy to a plain object for reliable field extraction
369
+ // The proxy's toJSON method returns a clean object without proxy behavior
370
+ const plainManifest = typeof manifest.toJSON === 'function'
371
+ ? manifest.toJSON()
372
+ : JSON.parse(JSON.stringify(manifest));
373
+ resourceKeyMapping.set(originalResourceId, plainManifest);
374
+ deploymentLogger.debug('Added resource to resourceKeyMapping', {
375
+ originalResourceId,
376
+ kind: manifest.kind,
377
+ name: manifest.metadata?.name,
378
+ });
497
379
  }
498
380
  }
499
- return 0; // Default to level 0 if not found
381
+ const context = {
382
+ deployedResources,
383
+ kubeClient: this.kubeClient,
384
+ resourceKeyMapping,
385
+ ...(options.namespace && { namespace: options.namespace }),
386
+ timeout: options.timeout || DEFAULT_READINESS_TIMEOUT,
387
+ };
388
+ return { enhancedPlan, context, resourceKeyMapping };
500
389
  }
501
390
  /**
502
- * Integrate closures into the deployment plan based on their dependencies
391
+ * Initialize and start Kubernetes event monitoring if enabled in deployment options.
392
+ * Logs a warning and continues if initialization fails.
393
+ * @param options - Deployment options containing event monitoring configuration
394
+ * @param startTime - Deployment start timestamp to filter events
395
+ * @param deploymentLogger - Logger scoped to this deployment
503
396
  */
504
- integrateClosuresIntoPlan(deploymentPlan, closureDependencies) {
505
- // Create enhanced levels with both resources and closures
506
- const enhancedLevels = [];
507
- // Check if we have any closures at level -1 (pre-resource level)
508
- const preResourceClosures = closureDependencies.filter((c) => c.level === -1);
509
- // If we have pre-resource closures, add them as level 0 and shift everything else
510
- if (preResourceClosures.length > 0) {
511
- enhancedLevels.push({
512
- resources: [],
513
- closures: preResourceClosures,
514
- });
515
- }
516
- // Initialize levels with existing resources (shifted if we added a pre-resource level)
517
- for (let i = 0; i < deploymentPlan.levels.length; i++) {
518
- enhancedLevels.push({
519
- resources: deploymentPlan.levels[i] || [],
520
- closures: [],
521
- });
522
- }
523
- // Add closures to their appropriate levels (excluding level -1 which we already handled)
524
- for (const closureInfo of closureDependencies) {
525
- if (closureInfo.level === -1) {
526
- continue; // Already handled above
527
- }
528
- // Adjust level index if we added a pre-resource level
529
- const adjustedLevel = preResourceClosures.length > 0 ? closureInfo.level + 1 : closureInfo.level;
530
- // Ensure we have enough levels
531
- while (enhancedLevels.length <= adjustedLevel) {
532
- enhancedLevels.push({ resources: [], closures: [] });
397
+ async initializeEventMonitoring(options, startTime, deploymentLogger) {
398
+ if (options.eventMonitoring?.enabled) {
399
+ try {
400
+ this.eventMonitor = createEventMonitor(this.kubeClient, {
401
+ namespace: options.namespace || 'default',
402
+ eventTypes: options.eventMonitoring.eventTypes || ['Warning', 'Error'],
403
+ includeChildResources: options.eventMonitoring.includeChildResources ?? true,
404
+ startTime: new Date(startTime),
405
+ ...(options.progressCallback && { progressCallback: options.progressCallback }),
406
+ });
407
+ // Start monitoring immediately to capture all deployment events
408
+ await this.eventMonitor.startMonitoring([]);
409
+ deploymentLogger.debug('Event monitoring started for deployment');
533
410
  }
534
- const targetLevel = enhancedLevels[adjustedLevel];
535
- if (targetLevel) {
536
- targetLevel.closures.push(closureInfo);
411
+ catch (error) {
412
+ deploymentLogger.warn('Failed to initialize event monitoring, continuing without it', {
413
+ error: ensureError(error).message,
414
+ });
537
415
  }
538
416
  }
539
- return {
540
- levels: enhancedLevels,
541
- totalResources: deploymentPlan.totalResources,
542
- totalClosures: closureDependencies.length,
543
- maxParallelism: Math.max(deploymentPlan.maxParallelism, Math.max(...enhancedLevels.map((level) => level.closures.length))),
544
- };
545
417
  }
546
418
  /**
547
- * Deploy a resource graph with deployment closures integrated into level-based execution
419
+ * Deploy a single level of resources and closures in parallel. Processes results,
420
+ * handles rollback on failure if configured, and logs level performance metrics.
421
+ * Returns a DeploymentResult if rollback occurred (early exit), or undefined to continue.
422
+ * @param levelIndex - Zero-based index of the current level
423
+ * @param currentLevel - The level definition containing resource IDs and closures
424
+ * @param graph - The full deployment resource graph
425
+ * @param deployedResources - Mutable array accumulating deployed resources across levels
426
+ * @param errors - Mutable array accumulating deployment errors across levels
427
+ * @param context - Resolution context for cross-resource references
428
+ * @param resourceKeyMapping - Map from resource IDs to their manifests (updated with live data)
429
+ * @param options - Deployment options
430
+ * @param alchemyScope - Optional alchemy scope for closure deployment context
431
+ * @param abortSignal - Signal to abort deployment operations
432
+ * @param startTime - Deployment start timestamp (used for rollback duration calculation)
433
+ * @param deploymentId - Unique deployment ID for result building
434
+ * @param deploymentLogger - Logger scoped to this deployment
435
+ * @returns DeploymentResult if rollback occurred, undefined otherwise
548
436
  */
549
- async deployWithClosures(graph, closures, options, spec, alchemyScope) {
550
- const deploymentId = this.generateDeploymentId();
551
- const startTime = Date.now();
552
- const deployedResources = [];
553
- const errors = [];
554
- const deploymentLogger = this.logger.child({
555
- deploymentId,
556
- resourceCount: graph.resources.length,
557
- closureCount: Object.keys(closures).length,
558
- });
559
- deploymentLogger.info('Starting deployment with closures', {
560
- options,
561
- closures: Object.keys(closures),
437
+ async deployLevel(levelIndex, currentLevel, graph, deployedResources, errors, context, resourceKeyMapping, options, alchemyScope, abortSignal, startTime, deploymentId, deploymentLogger) {
438
+ const levelLogger = deploymentLogger.child({
439
+ level: levelIndex + 1,
440
+ resourceCount: currentLevel.resources.length,
441
+ closureCount: currentLevel.closures.length,
562
442
  });
563
- try {
564
- this.emitEvent(options, {
565
- type: 'started',
566
- message: `Starting deployment of ${graph.resources.length} resources and ${Object.keys(closures).length} closures`,
567
- timestamp: new Date(),
568
- });
569
- // 1. Validate no cycles in dependency graph
570
- deploymentLogger.debug('Validating dependency graph', {
571
- dependencyGraph: graph.dependencyGraph,
572
- });
573
- this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
574
- // 2. Analyze deployment order and identify parallel stages
575
- deploymentLogger.debug('Analyzing deployment order for parallel execution');
576
- const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(graph.dependencyGraph);
577
- deploymentLogger.debug('Deployment plan determined', {
578
- levels: deploymentPlan.levels.length,
579
- totalResources: deploymentPlan.totalResources,
580
- maxParallelism: deploymentPlan.maxParallelism,
581
- });
582
- // 3. Analyze closure dependencies and integrate into deployment plan
583
- const closureDependencies = this.analyzeClosureDependencies(closures, spec, graph.dependencyGraph);
584
- const enhancedPlan = this.integrateClosuresIntoPlan(deploymentPlan, closureDependencies);
585
- deploymentLogger.debug('Enhanced deployment plan with closures', {
586
- levels: enhancedPlan.levels.length,
587
- totalResources: enhancedPlan.totalResources,
588
- totalClosures: enhancedPlan.totalClosures,
589
- maxParallelism: enhancedPlan.maxParallelism,
443
+ levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.resources.length} resources and ${currentLevel.closures.length} closures in parallel`);
444
+ const levelStartTime = Date.now();
445
+ // Create deployment context for closures at this level
446
+ const deployedResourcesMap = new Map();
447
+ // Populate with resources from previous levels
448
+ for (const resource of deployedResources) {
449
+ deployedResourcesMap.set(resource.id, resource);
450
+ }
451
+ const deploymentContext = {
452
+ kubernetesApi: this.k8sApi,
453
+ kubeConfig: this.kubeClient,
454
+ ...(alchemyScope && { alchemyScope }),
455
+ ...(options.namespace && { namespace: options.namespace }),
456
+ deployedResources: deployedResourcesMap,
457
+ resolveReference: async (ref) => {
458
+ // Enhanced reference resolution - will be improved in future tasks
459
+ return ref;
460
+ },
461
+ };
462
+ // Prepare promises for both resources and closures
463
+ const levelPromises = [];
464
+ // Add resource deployment promises
465
+ const resourcePromises = currentLevel.resources.map(async (resourceId) => {
466
+ const resourceLogger = deploymentLogger.child({ resourceId });
467
+ resourceLogger.debug('Starting resource deployment');
468
+ const resource = graph.resources.find((r) => r.id === resourceId);
469
+ if (!resource) {
470
+ resourceLogger.error('Resource not found in graph');
471
+ const error = new Error(`Resource with id '${resourceId}' not found in graph`);
472
+ return {
473
+ success: false,
474
+ resourceId,
475
+ error: {
476
+ resourceId,
477
+ phase: 'validation',
478
+ error,
479
+ timestamp: new Date(),
480
+ },
481
+ };
482
+ }
483
+ resourceLogger.debug('Found resource in graph', {
484
+ resourceId: resource.id,
485
+ kind: resource.manifest?.kind,
486
+ name: resource.manifest?.metadata?.name,
590
487
  });
591
- // 4. Create resolution context
592
- const context = {
593
- deployedResources,
594
- kubeClient: this.kubeClient,
595
- ...(options.namespace && { namespace: options.namespace }),
596
- timeout: options.timeout || 30000,
597
- };
598
- // 5. Deploy resources and closures level by level with proper dependency handling
599
- for (let levelIndex = 0; levelIndex < enhancedPlan.levels.length; levelIndex++) {
600
- const currentLevel = enhancedPlan.levels[levelIndex];
601
- if (!currentLevel) {
602
- continue;
603
- }
604
- const levelLogger = deploymentLogger.child({
605
- level: levelIndex + 1,
606
- resourceCount: currentLevel.resources.length,
607
- closureCount: currentLevel.closures.length,
608
- });
609
- levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.resources.length} resources and ${currentLevel.closures.length} closures in parallel`);
610
- const levelStartTime = Date.now();
611
- // Create deployment context for closures at this level
612
- const deployedResourcesMap = new Map();
613
- // Populate with resources from previous levels
614
- for (const resource of deployedResources) {
615
- deployedResourcesMap.set(resource.id, resource);
488
+ try {
489
+ resourceLogger.debug('Calling deploySingleResource');
490
+ // Wait for CRD establishment if this is a custom resource
491
+ await this.crdManager.waitForCRDIfCustomResource(resource.manifest, options, resourceLogger, abortSignal);
492
+ const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
493
+ // Add resource to event monitoring before deployment to capture creation events
494
+ // NOTE: This is fire-and-forget to avoid blocking the deployment path.
495
+ if (this.eventMonitor) {
496
+ const preDeployedResource = {
497
+ id: resourceId,
498
+ kind: resourceWithEvaluator.kind,
499
+ name: resourceWithEvaluator.metadata?.name || 'unknown',
500
+ namespace: resourceWithEvaluator.metadata?.namespace || options.namespace || 'default',
501
+ manifest: resourceWithEvaluator,
502
+ status: 'deployed',
503
+ deployedAt: new Date(),
504
+ };
505
+ this.eventMonitor.addResources([preDeployedResource]).then(() => {
506
+ resourceLogger.debug('Added resource to event monitoring before deployment');
507
+ }, (error) => {
508
+ resourceLogger.warn('Failed to add resource to event monitoring, continuing deployment', { error: ensureError(error).message });
509
+ });
616
510
  }
617
- const deploymentContext = {
618
- kubernetesApi: this.k8sApi,
619
- ...(alchemyScope && { alchemyScope }),
620
- ...(options.namespace && { namespace: options.namespace }),
621
- deployedResources: deployedResourcesMap,
622
- resolveReference: async (ref) => {
623
- // Enhanced reference resolution - will be improved in future tasks
624
- return ref;
511
+ const deployedResource = await this.deploySingleResource(resourceWithEvaluator, context, options, abortSignal);
512
+ resourceLogger.debug('Resource deployed successfully');
513
+ return {
514
+ success: true,
515
+ resourceId,
516
+ deployedResource,
517
+ };
518
+ }
519
+ catch (error) {
520
+ resourceLogger.error('Resource deployment failed', ensureError(error));
521
+ const failedResource = {
522
+ id: resourceId,
523
+ kind: resource.manifest.kind,
524
+ name: resource.manifest.metadata?.name || 'unknown',
525
+ namespace: resource.manifest.metadata?.namespace || 'default',
526
+ manifest: resource.manifest,
527
+ status: 'failed',
528
+ deployedAt: new Date(),
529
+ error: ensureError(error),
530
+ };
531
+ return {
532
+ success: false,
533
+ resourceId,
534
+ deployedResource: failedResource,
535
+ error: {
536
+ resourceId,
537
+ phase: 'deployment',
538
+ error: ensureError(error),
539
+ timestamp: new Date(),
625
540
  },
626
541
  };
627
- // Prepare promises for both resources and closures
628
- const levelPromises = [];
629
- // Add resource deployment promises
630
- const resourcePromises = currentLevel.resources.map(async (resourceId) => {
631
- const resourceLogger = deploymentLogger.child({ resourceId });
632
- resourceLogger.debug('Starting resource deployment');
633
- const resource = graph.resources.find((r) => r.id === resourceId);
634
- if (!resource) {
635
- resourceLogger.error('Resource not found in graph');
636
- const error = new Error(`Resource with id '${resourceId}' not found in graph`);
637
- return {
638
- success: false,
639
- resourceId,
640
- error: {
641
- resourceId,
642
- phase: 'validation',
643
- error,
644
- timestamp: new Date(),
645
- },
646
- };
647
- }
648
- resourceLogger.debug('Found resource in graph', {
649
- resourceId: resource.id,
650
- kind: resource.manifest?.kind,
651
- name: resource.manifest?.metadata?.name,
652
- });
653
- try {
654
- resourceLogger.debug('Calling deploySingleResource');
655
- const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
656
- const deployedResource = await this.deploySingleResource(resourceWithEvaluator, context, options);
657
- resourceLogger.debug('Resource deployed successfully');
658
- return {
659
- success: true,
660
- resourceId,
661
- deployedResource,
662
- };
663
- }
664
- catch (error) {
665
- resourceLogger.error('Resource deployment failed', error);
666
- const failedResource = {
667
- id: resourceId,
668
- kind: resource.manifest.kind,
669
- name: resource.manifest.metadata?.name || 'unknown',
670
- namespace: resource.manifest.metadata?.namespace || 'default',
671
- manifest: resource.manifest,
672
- status: 'failed',
673
- deployedAt: new Date(),
674
- error: error,
675
- };
676
- return {
677
- success: false,
678
- resourceId,
679
- deployedResource: failedResource,
680
- error: {
681
- resourceId,
682
- phase: 'deployment',
683
- error: error,
684
- timestamp: new Date(),
685
- },
686
- };
687
- }
542
+ }
543
+ });
544
+ // Add closure execution promises
545
+ const closurePromises = currentLevel.closures.map(async (closureInfo) => {
546
+ const closureLogger = levelLogger.child({ closureName: closureInfo.name });
547
+ closureLogger.debug('Executing closure at level', { level: levelIndex + 1 });
548
+ try {
549
+ const result = await closureInfo.closure(deploymentContext);
550
+ closureLogger.debug('Closure executed successfully', {
551
+ resultCount: result?.length || 0,
688
552
  });
689
- // Add closure execution promises
690
- const closurePromises = currentLevel.closures.map(async (closureInfo) => {
691
- const closureLogger = levelLogger.child({ closureName: closureInfo.name });
692
- closureLogger.debug('Executing closure at level', { level: levelIndex + 1 });
693
- try {
694
- const result = await closureInfo.closure(deploymentContext);
695
- closureLogger.debug('Closure executed successfully', {
696
- resultCount: result?.length || 0,
697
- });
698
- return {
699
- success: true,
700
- type: 'closure',
701
- name: closureInfo.name,
702
- result,
703
- };
704
- }
705
- catch (error) {
706
- closureLogger.error('Closure execution failed', error);
707
- return {
708
- success: false,
709
- type: 'closure',
710
- name: closureInfo.name,
711
- error: {
712
- resourceId: `closure-${closureInfo.name}`,
713
- phase: 'deployment',
714
- error: error,
715
- timestamp: new Date(),
716
- },
717
- };
553
+ return {
554
+ success: true,
555
+ type: 'closure',
556
+ name: closureInfo.name,
557
+ result,
558
+ };
559
+ }
560
+ catch (error) {
561
+ closureLogger.error('Closure execution failed', ensureError(error));
562
+ return {
563
+ success: false,
564
+ type: 'closure',
565
+ name: closureInfo.name,
566
+ error: {
567
+ resourceId: `closure-${closureInfo.name}`,
568
+ phase: 'deployment',
569
+ error: ensureError(error),
570
+ timestamp: new Date(),
571
+ },
572
+ };
573
+ }
574
+ });
575
+ // Combine all promises for this level
576
+ levelPromises.push(...resourcePromises, ...closurePromises);
577
+ // Wait for all resources and closures in this level to complete
578
+ const levelResults = await Promise.allSettled(levelPromises);
579
+ // Process results and handle errors
580
+ let levelHasFailures = false;
581
+ let successfulResources = 0;
582
+ let successfulClosures = 0;
583
+ let failedResources = 0;
584
+ let failedClosures = 0;
585
+ for (const result of levelResults) {
586
+ if (result.status === 'fulfilled') {
587
+ const deploymentResult = result.value;
588
+ if (deploymentResult.type === 'closure') {
589
+ // Handle closure result
590
+ if (deploymentResult.success) {
591
+ successfulClosures++;
718
592
  }
719
- });
720
- // Combine all promises for this level
721
- levelPromises.push(...resourcePromises, ...closurePromises);
722
- // Wait for all resources and closures in this level to complete
723
- const levelResults = await Promise.allSettled(levelPromises);
724
- // Process results and handle errors
725
- let levelHasFailures = false;
726
- let successfulResources = 0;
727
- let successfulClosures = 0;
728
- let failedResources = 0;
729
- let failedClosures = 0;
730
- for (const result of levelResults) {
731
- if (result.status === 'fulfilled') {
732
- const deploymentResult = result.value;
733
- if (deploymentResult.type === 'closure') {
734
- // Handle closure result
735
- if (deploymentResult.success) {
736
- successfulClosures++;
737
- }
738
- else {
739
- levelHasFailures = true;
740
- failedClosures++;
741
- if (deploymentResult.error) {
742
- errors.push(deploymentResult.error);
743
- }
744
- }
745
- }
746
- else {
747
- // Handle resource result
748
- if (deploymentResult.success && deploymentResult.deployedResource) {
749
- deployedResources.push(deploymentResult.deployedResource);
750
- successfulResources++;
751
- }
752
- else {
753
- levelHasFailures = true;
754
- failedResources++;
755
- if (deploymentResult.error) {
756
- errors.push(deploymentResult.error);
757
- }
758
- if (deploymentResult.deployedResource) {
759
- deployedResources.push(deploymentResult.deployedResource);
760
- }
761
- }
593
+ else {
594
+ levelHasFailures = true;
595
+ failedClosures++;
596
+ if (deploymentResult.error) {
597
+ errors.push(deploymentResult.error);
762
598
  }
763
599
  }
600
+ }
601
+ else {
602
+ // Handle resource result
603
+ if (deploymentResult.success && deploymentResult.deployedResource) {
604
+ deployedResources.push(deploymentResult.deployedResource);
605
+ successfulResources++;
606
+ await this.updateResourceKeyMappingWithLiveResource(deploymentResult.deployedResource, resourceKeyMapping, deploymentLogger);
607
+ }
764
608
  else {
765
609
  levelHasFailures = true;
766
- levelLogger.error('Unexpected promise rejection in parallel deployment', result.reason);
610
+ failedResources++;
611
+ if (deploymentResult.error) {
612
+ errors.push(deploymentResult.error);
613
+ }
614
+ if (deploymentResult.deployedResource) {
615
+ deployedResources.push(deploymentResult.deployedResource);
616
+ }
767
617
  }
768
618
  }
769
- // Handle rollback if there are failures and rollback is enabled
770
- if (levelHasFailures && options.rollbackOnFailure) {
771
- levelLogger.warn('Level deployment failed, initiating rollback');
772
- await this.rollbackDeployedResources(deployedResources, options);
773
- const duration = Date.now() - startTime;
774
- this.emitEvent(options, {
775
- type: 'rollback',
776
- message: `Deployment failed and rolled back in ${duration}ms`,
777
- timestamp: new Date(),
778
- });
779
- return {
780
- deploymentId,
781
- resources: deployedResources,
782
- dependencyGraph: graph.dependencyGraph,
783
- duration,
784
- status: 'failed',
785
- errors,
786
- };
787
- }
788
- // Calculate level performance metrics
789
- const levelDuration = Date.now() - levelStartTime;
790
- const totalOperations = currentLevel.resources.length + currentLevel.closures.length;
791
- levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
792
- resources: { successful: successfulResources, failed: failedResources },
793
- closures: { successful: successfulClosures, failed: failedClosures },
794
- duration: levelDuration,
795
- parallelism: totalOperations,
796
- averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0,
797
- });
798
619
  }
620
+ else {
621
+ levelHasFailures = true;
622
+ levelLogger.error('Unexpected promise rejection in parallel deployment', result.reason);
623
+ }
624
+ }
625
+ // Handle rollback if there are failures and rollback is enabled
626
+ if (levelHasFailures && options.rollbackOnFailure) {
627
+ levelLogger.warn('Level deployment failed, initiating rollback');
628
+ await this.rollbackDeployedResources(deployedResources, options);
799
629
  const duration = Date.now() - startTime;
800
- const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
801
- const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
802
- // Log comprehensive performance metrics
803
- deploymentLogger.info('Parallel deployment with closures performance metrics', {
804
- totalDuration: duration,
805
- totalResources: enhancedPlan.totalResources,
806
- totalClosures: enhancedPlan.totalClosures,
807
- parallelLevels: enhancedPlan.levels.length,
808
- maxParallelism: enhancedPlan.maxParallelism,
809
- averageTimePerResource: enhancedPlan.totalResources > 0 ? Math.round(duration / enhancedPlan.totalResources) : 0,
810
- successfulResources: successfulResources.length,
811
- failedResources: errors.length,
812
- status,
813
- });
814
630
  this.emitEvent(options, {
815
- type: status === 'success' ? 'completed' : 'failed',
816
- message: `Deployment with closures ${status} in ${duration}ms (${enhancedPlan.totalClosures} closures + ${enhancedPlan.totalResources} resources across ${enhancedPlan.levels.length} levels)`,
631
+ type: 'rollback',
632
+ message: `Deployment failed and rolled back in ${duration}ms`,
817
633
  timestamp: new Date(),
818
634
  });
819
- // Store deployment state for rollback
820
- this.deploymentState.set(deploymentId, {
821
- deploymentId,
822
- resources: deployedResources,
823
- dependencyGraph: graph.dependencyGraph,
824
- startTime: new Date(startTime),
825
- endTime: new Date(),
826
- status: status === 'success' ? 'completed' : status === 'partial' ? 'completed' : 'failed',
827
- options,
828
- });
829
635
  return {
830
636
  deploymentId,
831
637
  resources: deployedResources,
832
638
  dependencyGraph: graph.dependencyGraph,
833
639
  duration,
834
- status,
640
+ status: 'failed',
835
641
  errors,
836
642
  };
837
643
  }
838
- catch (error) {
839
- // Re-throw circular dependency errors immediately - these are configuration errors
840
- if (error instanceof CircularDependencyError) {
841
- throw error;
644
+ // Calculate level performance metrics
645
+ const levelDuration = Date.now() - levelStartTime;
646
+ const totalOperations = currentLevel.resources.length + currentLevel.closures.length;
647
+ levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
648
+ resources: { successful: successfulResources, failed: failedResources },
649
+ closures: { successful: successfulClosures, failed: failedClosures },
650
+ duration: levelDuration,
651
+ parallelism: totalOperations,
652
+ averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0,
653
+ });
654
+ return undefined;
655
+ }
656
+ /**
657
+ * Build the final DeploymentResult after all levels have been deployed.
658
+ * Logs comprehensive performance metrics and emits completion/failure events.
659
+ * @param deploymentId - Unique deployment ID
660
+ * @param graph - The deployment resource graph
661
+ * @param enhancedPlan - The enhanced deployment plan with closure information
662
+ * @param deployedResources - All deployed resources across all levels
663
+ * @param errors - All deployment errors across all levels
664
+ * @param startTime - Deployment start timestamp
665
+ * @param options - Deployment options for event emission
666
+ * @param deploymentLogger - Logger scoped to this deployment
667
+ * @returns The final deployment result
668
+ */
669
+ buildDeploymentResult(deploymentId, graph, enhancedPlan, deployedResources, errors, startTime, options, deploymentLogger) {
670
+ const duration = Date.now() - startTime;
671
+ const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
672
+ const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
673
+ // Log comprehensive performance metrics
674
+ deploymentLogger.info('Parallel deployment with closures performance metrics', {
675
+ totalDuration: duration,
676
+ totalResources: enhancedPlan.totalResources,
677
+ totalClosures: enhancedPlan.totalClosures,
678
+ parallelLevels: enhancedPlan.levels.length,
679
+ maxParallelism: enhancedPlan.maxParallelism,
680
+ averageTimePerResource: enhancedPlan.totalResources > 0 ? Math.round(duration / enhancedPlan.totalResources) : 0,
681
+ successfulResources: successfulResources.length,
682
+ failedResources: errors.length,
683
+ status,
684
+ });
685
+ this.emitEvent(options, {
686
+ type: status === 'success' ? 'completed' : 'failed',
687
+ message: `Deployment with closures ${status} in ${duration}ms (${enhancedPlan.totalClosures} closures + ${enhancedPlan.totalResources} resources across ${enhancedPlan.levels.length} levels)`,
688
+ timestamp: new Date(),
689
+ });
690
+ return {
691
+ deploymentId,
692
+ resources: deployedResources,
693
+ dependencyGraph: graph.dependencyGraph,
694
+ duration,
695
+ status,
696
+ errors,
697
+ };
698
+ }
699
+ /**
700
+ * Stop event monitoring, clear the deployment timeout, and remove the
701
+ * abort controller from tracking. Safe to call multiple times.
702
+ * @param abortController - The deployment's AbortController to untrack
703
+ * @param timeoutId - The timeout ID to clear
704
+ * @param deploymentLogger - Logger scoped to this deployment
705
+ */
706
+ async cleanupDeployment(abortController, timeoutId, deploymentLogger) {
707
+ // Stop event monitoring
708
+ if (this.eventMonitor) {
709
+ try {
710
+ await this.eventMonitor.stopMonitoring();
711
+ deploymentLogger.debug('Event monitoring stopped');
842
712
  }
843
- const duration = Date.now() - startTime;
844
- this.emitEvent(options, {
845
- type: 'failed',
846
- message: `Deployment with closures failed: ${error}`,
847
- timestamp: new Date(),
848
- error: error,
713
+ catch (error) {
714
+ deploymentLogger.warn('Failed to stop event monitoring cleanly', {
715
+ error: ensureError(error).message,
716
+ });
717
+ }
718
+ }
719
+ // Clean up abort controller and timeout
720
+ clearTimeout(timeoutId);
721
+ this.removeTrackedAbortController(abortController);
722
+ }
723
+ /**
724
+ * Update the resourceKeyMapping with a live resource fetched from the cluster.
725
+ * This is critical for CEL expression evaluation which needs access to resource status.
726
+ */
727
+ async updateResourceKeyMappingWithLiveResource(deployedRes, resourceKeyMapping, logger) {
728
+ const originalResourceId = getResourceMetadataId(deployedRes.manifest);
729
+ if (!originalResourceId || !resourceKeyMapping.has(originalResourceId)) {
730
+ return;
731
+ }
732
+ try {
733
+ const liveResource = await this.k8sApi.read({
734
+ apiVersion: deployedRes.manifest.apiVersion || '',
735
+ kind: deployedRes.kind,
736
+ metadata: {
737
+ name: deployedRes.name,
738
+ namespace: deployedRes.namespace,
739
+ },
849
740
  });
850
- // Store deployment state even for failed deployments (for rollback)
851
- this.deploymentState.set(deploymentId, {
852
- deploymentId,
853
- resources: deployedResources,
854
- dependencyGraph: graph.dependencyGraph,
855
- startTime: new Date(startTime),
856
- endTime: new Date(),
857
- status: 'failed',
858
- options,
741
+ resourceKeyMapping.set(originalResourceId, liveResource);
742
+ logger.debug('Updated resourceKeyMapping with live resource status', {
743
+ originalResourceId,
744
+ kind: deployedRes.kind,
745
+ name: deployedRes.name,
746
+ hasStatus: !!liveResource.status,
747
+ });
748
+ }
749
+ catch (error) {
750
+ logger.warn('Failed to update resourceKeyMapping with live resource', {
751
+ originalResourceId,
752
+ error: ensureError(error).message,
859
753
  });
860
- return {
861
- deploymentId,
862
- resources: deployedResources,
863
- dependencyGraph: graph.dependencyGraph,
864
- duration,
865
- status: 'failed',
866
- errors: [
867
- {
868
- resourceId: 'deployment',
869
- phase: 'deployment',
870
- error: error,
871
- timestamp: new Date(),
872
- },
873
- ],
874
- };
875
754
  }
876
- } /**
877
-
755
+ }
756
+ /**
878
757
  * Deploy a single resource
879
758
  */
880
- async deploySingleResource(resource, context, options) {
881
- const resourceId = resource.id || resource.__resourceId || resource.metadata?.name || 'unknown';
759
+ async deploySingleResource(resource, context, options, abortSignal) {
760
+ // Check if already aborted
761
+ if (abortSignal?.aborted) {
762
+ throw new DOMException('Operation aborted', 'AbortError');
763
+ }
764
+ // Resource ID from WeakMap metadata or deterministic ID generation
765
+ const internalId = getResourceMetadataId(resource);
766
+ const resourceId = internalId || getResourceId(resource);
882
767
  const resourceLogger = this.logger.child({
883
768
  resourceId,
884
769
  kind: resource.kind,
@@ -892,146 +777,11 @@ export class DirectDeploymentEngine {
892
777
  timestamp: new Date(),
893
778
  });
894
779
  // 1. Resolve all references in the resource
895
- let resolvedResource;
896
- try {
897
- resourceLogger.debug('Resolving resource references', {
898
- originalMetadata: resource.metadata,
899
- });
900
- const resolveTimeout = options.timeout || 30000;
901
- resolvedResource = (await Promise.race([
902
- this.referenceResolver.resolveReferences(resource, context),
903
- new Promise((_, reject) => setTimeout(() => reject(new Error('Reference resolution timeout')), resolveTimeout)),
904
- ]));
905
- resourceLogger.debug('References resolved successfully', {
906
- resolvedMetadata: resolvedResource.metadata,
907
- hasReadinessEvaluator: !!resolvedResource.readinessEvaluator,
908
- });
909
- }
910
- catch (error) {
911
- resourceLogger.warn('Reference resolution failed, using original resource', error);
912
- resolvedResource = resource;
913
- }
780
+ const resolvedRef = await this.resourceApplier.resolveResourceReferences(resource, context, options, resourceLogger);
914
781
  // 2. Apply namespace if specified, but only if resource doesn't already have one
915
- if (options.namespace &&
916
- resolvedResource.metadata &&
917
- typeof resolvedResource.metadata.namespace !== 'string') {
918
- resourceLogger.debug('Applying namespace from deployment options', {
919
- targetNamespace: options.namespace,
920
- currentNamespace: resolvedResource.metadata.namespace,
921
- currentNamespaceType: typeof resolvedResource.metadata.namespace,
922
- });
923
- // Create a completely new metadata object to avoid proxy issues
924
- const newMetadata = {
925
- ...resolvedResource.metadata,
926
- namespace: options.namespace,
927
- };
928
- // Preserve the readiness evaluator when creating the new resource
929
- const newResolvedResource = {
930
- ...resolvedResource,
931
- metadata: newMetadata,
932
- };
933
- // Copy the non-enumerable readiness evaluator if it exists
934
- const readinessEvaluator = resolvedResource.readinessEvaluator;
935
- if (readinessEvaluator) {
936
- Object.defineProperty(newResolvedResource, 'readinessEvaluator', {
937
- value: readinessEvaluator,
938
- enumerable: false,
939
- configurable: true,
940
- writable: false,
941
- });
942
- }
943
- resolvedResource = newResolvedResource;
944
- }
782
+ const resolvedResource = this.resourceApplier.applyNamespaceToResource(resolvedRef, options.namespace, resourceLogger);
945
783
  // 3. Apply the resource to the cluster (or simulate for dry run)
946
- let appliedResource;
947
- if (options.dryRun) {
948
- // In dry run mode, don't actually create the resource
949
- resourceLogger.debug('Dry run mode: simulating resource creation');
950
- appliedResource = {
951
- ...resolvedResource,
952
- metadata: {
953
- ...resolvedResource.metadata,
954
- uid: 'dry-run-uid',
955
- },
956
- };
957
- }
958
- else {
959
- // Apply resource with retry logic
960
- const retryPolicy = options.retryPolicy || {
961
- maxRetries: 3,
962
- backoffMultiplier: 2,
963
- initialDelay: 1000,
964
- maxDelay: 30000,
965
- };
966
- let lastError;
967
- for (let attempt = 0; attempt <= retryPolicy.maxRetries; attempt++) {
968
- try {
969
- resourceLogger.debug('Applying resource to cluster', { attempt });
970
- // Check if resource already exists
971
- let existing;
972
- try {
973
- const readResult = await this.k8sApi.read({
974
- apiVersion: resolvedResource.apiVersion,
975
- kind: resolvedResource.kind,
976
- metadata: {
977
- name: resolvedResource.metadata?.name || '',
978
- namespace: resolvedResource.metadata?.namespace || 'default',
979
- },
980
- });
981
- existing = readResult.body;
982
- }
983
- catch (error) {
984
- // If it's a 404, the resource doesn't exist, which is expected for creation
985
- if (error.statusCode !== 404) {
986
- resourceLogger.error('Error checking resource existence', error);
987
- throw error;
988
- }
989
- }
990
- if (existing) {
991
- // Resource exists, use patch for safer updates
992
- resourceLogger.debug('Resource exists, patching');
993
- const patchResult = await this.patchResourceWithCorrectContentType(resolvedResource);
994
- appliedResource = patchResult.body;
995
- }
996
- else {
997
- // Resource does not exist, create it
998
- resourceLogger.debug('Resource does not exist, creating');
999
- const createResult = await this.k8sApi.create(resolvedResource);
1000
- appliedResource = createResult.body;
1001
- }
1002
- resourceLogger.debug('Resource applied successfully', {
1003
- appliedName: appliedResource.metadata?.name,
1004
- appliedNamespace: appliedResource.metadata?.namespace,
1005
- operation: existing ? 'patched' : 'created',
1006
- attempt,
1007
- });
1008
- // Success - break out of retry loop
1009
- break;
1010
- }
1011
- catch (error) {
1012
- lastError = error;
1013
- resourceLogger.error('Failed to apply resource to cluster', lastError, { attempt });
1014
- // Check for HTTP 415 Unsupported Media Type errors
1015
- if (this.isUnsupportedMediaTypeError(error)) {
1016
- const acceptedTypes = this.extractAcceptedMediaTypes(error);
1017
- throw new UnsupportedMediaTypeError(resolvedResource.metadata?.name || 'unknown', resolvedResource.kind || 'Unknown', acceptedTypes, lastError);
1018
- }
1019
- // If this was the last attempt, throw the error
1020
- if (attempt >= retryPolicy.maxRetries) {
1021
- throw new ResourceDeploymentError(resolvedResource.metadata?.name || 'unknown', resolvedResource.kind || 'Unknown', lastError);
1022
- }
1023
- // Calculate delay for next attempt
1024
- const delay = Math.min(retryPolicy.initialDelay * retryPolicy.backoffMultiplier ** attempt, retryPolicy.maxDelay);
1025
- resourceLogger.debug('Retrying resource deployment', {
1026
- attempt: attempt + 1,
1027
- maxRetries: retryPolicy.maxRetries,
1028
- delay,
1029
- });
1030
- // Wait before retrying
1031
- await new Promise((resolve) => setTimeout(resolve, delay));
1032
- }
1033
- }
1034
- }
784
+ await this.resourceApplier.applyResourceToCluster(resolvedResource, options, resourceLogger);
1035
785
  // 4. Create deployed resource record
1036
786
  const deployedResource = {
1037
787
  id: resourceId,
@@ -1045,7 +795,7 @@ export class DirectDeploymentEngine {
1045
795
  // 5. Wait for resource to be ready if requested
1046
796
  if (options.waitForReady !== false) {
1047
797
  resourceLogger.debug('Waiting for resource to be ready');
1048
- await this.waitForResourceReady(deployedResource, options);
798
+ await this.waitForResourceReady(deployedResource, options, abortSignal);
1049
799
  deployedResource.status = 'ready';
1050
800
  }
1051
801
  resourceLogger.debug('Single resource deployment completed');
@@ -1053,145 +803,24 @@ export class DirectDeploymentEngine {
1053
803
  }
1054
804
  /**
1055
805
  * Wait for a resource to be ready
806
+ * @param deployedResource - The deployed resource to wait for
807
+ * @param options - Deployment options
808
+ * @param abortSignal - Optional AbortSignal to cancel the wait
1056
809
  */
1057
- async waitForResourceReady(deployedResource, options) {
1058
- const resourceKey = `${deployedResource.kind}/${deployedResource.name}/${deployedResource.namespace}`;
1059
- // Check if already marked as ready
1060
- if (deployedResource.status === 'ready' || this.readyResources.has(resourceKey)) {
1061
- this.logger.debug('Resource already marked as ready', { resourceKey });
1062
- return;
1063
- }
1064
- // Safety-first approach: check for readiness evaluator before starting the wait loop
1065
- const readinessEvaluator = deployedResource.manifest.readinessEvaluator;
1066
- // Debug logging removed
1067
- if (!readinessEvaluator) {
1068
- const errorMessage = `Resource ${deployedResource.kind}/${deployedResource.name} does not have a factory-provided readiness evaluator`;
1069
- this.logger.error('Missing factory-provided readiness evaluator');
1070
- throw new Error(errorMessage);
1071
- }
1072
- const startTime = Date.now();
1073
- const timeout = options.timeout || 300000; // 5 minutes default
1074
- let lastStatus = null;
1075
- while (Date.now() - startTime < timeout) {
1076
- try {
1077
- // Use custom readiness evaluator
1078
- const { body: liveResource } = await this.k8sApi.read({
1079
- apiVersion: deployedResource.manifest.apiVersion || '',
1080
- kind: deployedResource.kind,
1081
- metadata: {
1082
- name: deployedResource.name,
1083
- namespace: deployedResource.namespace,
1084
- },
1085
- });
1086
- const result = readinessEvaluator(liveResource);
1087
- if (typeof result === 'boolean') {
1088
- if (result) {
1089
- this.readyResources.add(resourceKey);
1090
- this.emitEvent(options, {
1091
- type: 'resource-ready',
1092
- resourceId: deployedResource.id,
1093
- message: `${deployedResource.kind}/${deployedResource.name} ready (custom evaluator)`,
1094
- timestamp: new Date(),
1095
- });
1096
- return;
1097
- }
1098
- }
1099
- else if (result && typeof result === 'object' && 'ready' in result) {
1100
- lastStatus = result;
1101
- if (result.ready) {
1102
- this.readyResources.add(resourceKey);
1103
- this.emitEvent(options, {
1104
- type: 'resource-ready',
1105
- resourceId: deployedResource.id,
1106
- message: result.message ||
1107
- `${deployedResource.kind}/${deployedResource.name} ready (custom evaluator)`,
1108
- timestamp: new Date(),
1109
- });
1110
- return;
1111
- }
1112
- }
1113
- // Emit status update if we have status information
1114
- if (lastStatus && typeof lastStatus === 'object' && 'message' in lastStatus) {
1115
- this.emitEvent(options, {
1116
- type: 'resource-status',
1117
- resourceId: deployedResource.id,
1118
- message: `${deployedResource.kind}/${deployedResource.name}: ${lastStatus.message}`,
1119
- timestamp: new Date(),
1120
- });
1121
- }
1122
- // Wait before next check
1123
- await new Promise((resolve) => setTimeout(resolve, 2000));
1124
- }
1125
- catch (error) {
1126
- // Emit error status event
1127
- this.emitEvent(options, {
1128
- type: 'resource-status',
1129
- resourceId: deployedResource.id,
1130
- message: `Unable to read resource status: ${error instanceof Error ? error.message : String(error)}`,
1131
- timestamp: new Date(),
1132
- });
1133
- // If we can't read the resource, it's not ready yet
1134
- await new Promise((resolve) => setTimeout(resolve, 2000));
1135
- }
1136
- }
1137
- // Timeout reached
1138
- const timeoutMessage = lastStatus
1139
- ? `Timeout waiting for ${deployedResource.kind}/${deployedResource.name}: ${lastStatus.message}`
1140
- : `Timeout waiting for ${deployedResource.kind}/${deployedResource.name} to be ready`;
1141
- throw new Error(timeoutMessage);
810
+ async waitForResourceReady(deployedResource, options, abortSignal) {
811
+ return this.readinessWaiter.waitForResourceReady(deployedResource, options, abortSignal);
1142
812
  }
1143
813
  /**
1144
814
  * Rollback deployed resources
1145
815
  */
1146
816
  async rollbackDeployedResources(deployedResources, options) {
1147
- this.emitEvent(options, {
1148
- type: 'rollback',
1149
- message: 'Starting rollback of deployed resources',
1150
- timestamp: new Date(),
1151
- });
1152
- const rolledBackResources = [];
1153
- const errors = [];
1154
- // Rollback in reverse order
1155
- const reversedResources = [...deployedResources].reverse();
1156
- for (const resource of reversedResources) {
1157
- // Only try to rollback resources that were actually deployed (not failed)
1158
- if (resource.status === 'failed') {
1159
- continue; // Skip resources that failed to deploy
1160
- }
1161
- try {
1162
- await this.k8sApi.delete({
1163
- apiVersion: resource.manifest.apiVersion || '',
1164
- kind: resource.kind,
1165
- metadata: {
1166
- name: resource.name,
1167
- namespace: resource.namespace,
1168
- },
1169
- });
1170
- rolledBackResources.push(`${resource.kind}/${resource.name}`);
1171
- }
1172
- catch (error) {
1173
- // Log and collect errors for individual resource deletion failures
1174
- this.logger.warn('Failed to delete resource during rollback', {
1175
- error: error,
1176
- resourceId: resource.id,
1177
- kind: resource.kind,
1178
- name: resource.name,
1179
- });
1180
- errors.push({
1181
- resourceId: resource.id,
1182
- phase: 'rollback',
1183
- error: error,
1184
- timestamp: new Date(),
1185
- });
1186
- }
1187
- }
1188
- return { rolledBackResources, errors };
817
+ return this.rollbackManager.rollbackDeployedResources(deployedResources, options);
1189
818
  }
1190
819
  /**
1191
820
  * Generate a unique deployment ID
1192
821
  */
1193
822
  generateDeploymentId() {
1194
- return `deployment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
823
+ return `deployment-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
1195
824
  }
1196
825
  /**
1197
826
  * Emit deployment events
@@ -1209,65 +838,16 @@ export class DirectDeploymentEngine {
1209
838
  deployedResources: [],
1210
839
  kubeClient: this.kubeClient,
1211
840
  ...(options.namespace && { namespace: options.namespace }),
1212
- timeout: options.timeout || 30000,
841
+ timeout: options.timeout || DEFAULT_READINESS_TIMEOUT,
1213
842
  };
1214
- return this.deploySingleResource(resource, context, options);
843
+ // Legacy method - no abort signal support
844
+ return this.deploySingleResource(resource, context, options, undefined);
1215
845
  }
1216
846
  /**
1217
847
  * Delete a resource from the cluster
1218
848
  */
1219
849
  async deleteResource(resource) {
1220
- const deleteLogger = this.logger.child({
1221
- resourceId: resource.id,
1222
- kind: resource.kind,
1223
- name: resource.name,
1224
- });
1225
- try {
1226
- await this.k8sApi.delete({
1227
- apiVersion: resource.manifest.apiVersion || '',
1228
- kind: resource.kind,
1229
- metadata: {
1230
- name: resource.name,
1231
- namespace: resource.namespace,
1232
- },
1233
- });
1234
- // Wait for resource to be deleted
1235
- const timeout = 30000; // 30 seconds
1236
- const startTime = Date.now();
1237
- while (Date.now() - startTime < timeout) {
1238
- try {
1239
- await this.k8sApi.read({
1240
- apiVersion: resource.manifest.apiVersion || '',
1241
- kind: resource.kind,
1242
- metadata: {
1243
- name: resource.name,
1244
- namespace: resource.namespace,
1245
- },
1246
- });
1247
- // Resource still exists, wait and try again
1248
- await new Promise((resolve) => setTimeout(resolve, 1000));
1249
- }
1250
- catch (error) {
1251
- // Resource not found, deletion successful
1252
- if (this.isNotFoundError(error)) {
1253
- deleteLogger.debug('Resource successfully deleted');
1254
- return;
1255
- }
1256
- throw error;
1257
- }
1258
- }
1259
- throw new Error(`Timeout waiting for resource ${resource.kind}/${resource.name} to be deleted`);
1260
- }
1261
- catch (error) {
1262
- deleteLogger.error('Failed to delete resource', error);
1263
- throw error;
1264
- }
1265
- }
1266
- /**
1267
- * Wait for resource readiness (legacy method for compatibility)
1268
- */
1269
- async waitForResourceReadiness(resource, options) {
1270
- return this.waitForResourceReady(resource, options);
850
+ return this.rollbackManager.deleteDeployedResource(resource);
1271
851
  }
1272
852
  /**
1273
853
  * Rollback a deployment by ID
@@ -1276,7 +856,7 @@ export class DirectDeploymentEngine {
1276
856
  const startTime = Date.now();
1277
857
  const deploymentRecord = this.deploymentState.get(deploymentId);
1278
858
  if (!deploymentRecord) {
1279
- throw new Error(`Deployment ${deploymentId} not found. Cannot rollback.`);
859
+ throw new ResourceGraphFactoryError(`Deployment ${deploymentId} not found. Cannot rollback.`, deploymentId, 'cleanup');
1280
860
  }
1281
861
  try {
1282
862
  const { rolledBackResources, errors } = await this.rollbackDeployedResources(deploymentRecord.resources, deploymentRecord.options);
@@ -1300,7 +880,7 @@ export class DirectDeploymentEngine {
1300
880
  {
1301
881
  resourceId: deploymentId,
1302
882
  phase: 'rollback',
1303
- error: error,
883
+ error: ensureError(error),
1304
884
  timestamp: new Date(),
1305
885
  },
1306
886
  ],
@@ -1336,207 +916,11 @@ export class DirectDeploymentEngine {
1336
916
  }
1337
917
  return result;
1338
918
  }
1339
- /**
1340
- * Patch a resource with the correct Content-Type header for merge patch operations
1341
- * This fixes HTTP 415 "Unsupported Media Type" errors that occur when using the generic patch method
1342
- */
1343
- async patchResourceWithCorrectContentType(resource) {
1344
- // The k8sApi.patch method already includes the correct Content-Type header for merge patch operations
1345
- // This was fixed in the deployment engine to use 'application/merge-patch+json'
1346
- return await this.k8sApi.patch(resource, undefined, undefined, undefined, undefined, {
1347
- headers: {
1348
- 'Content-Type': 'application/merge-patch+json'
1349
- }
1350
- });
1351
- }
1352
- /**
1353
- * Check if an error is a "not found" error
1354
- */
1355
- isNotFoundError(error) {
1356
- if (error && typeof error === 'object') {
1357
- const k8sError = error;
1358
- return k8sError.statusCode === 404 || k8sError.body?.code === 404;
1359
- }
1360
- return false;
1361
- }
1362
- /**
1363
- * Wait for CRD establishment if the resource is a custom resource
1364
- */
1365
- async waitForCRDIfCustomResource(resource, options, logger) {
1366
- // Skip if this is not a custom resource
1367
- if (!this.isCustomResource(resource)) {
1368
- return;
1369
- }
1370
- const crdName = await this.getCRDNameForResource(resource);
1371
- if (!crdName) {
1372
- logger.warn('Could not determine CRD name for custom resource', {
1373
- kind: resource.kind,
1374
- apiVersion: resource.apiVersion,
1375
- });
1376
- return;
1377
- }
1378
- logger.debug('Custom resource detected, waiting for CRD establishment', {
1379
- resourceKind: resource.kind,
1380
- crdName,
1381
- });
1382
- await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
1383
- logger.debug('CRD established, proceeding with custom resource deployment', {
1384
- resourceKind: resource.kind,
1385
- crdName,
1386
- });
1387
- }
1388
- /**
1389
- * Check if a resource is a custom resource (not a built-in Kubernetes resource)
1390
- */
1391
- isCustomResource(resource) {
1392
- if (!resource.apiVersion || !resource.kind) {
1393
- return false;
1394
- }
1395
- // Built-in Kubernetes API groups that are NOT custom resources
1396
- const builtInApiGroups = [
1397
- 'v1', // Core API group
1398
- 'apps/v1',
1399
- 'extensions/v1beta1',
1400
- 'networking.k8s.io/v1',
1401
- 'policy/v1',
1402
- 'rbac.authorization.k8s.io/v1',
1403
- 'storage.k8s.io/v1',
1404
- 'apiextensions.k8s.io/v1', // CRDs themselves
1405
- 'admissionregistration.k8s.io/v1',
1406
- 'apiregistration.k8s.io/v1',
1407
- 'authentication.k8s.io/v1',
1408
- 'authorization.k8s.io/v1',
1409
- 'autoscaling/v1',
1410
- 'autoscaling/v2',
1411
- 'batch/v1',
1412
- 'certificates.k8s.io/v1',
1413
- 'coordination.k8s.io/v1',
1414
- 'discovery.k8s.io/v1',
1415
- 'events.k8s.io/v1',
1416
- 'flowcontrol.apiserver.k8s.io/v1beta3',
1417
- 'node.k8s.io/v1',
1418
- 'scheduling.k8s.io/v1',
1419
- ];
1420
- return !builtInApiGroups.includes(resource.apiVersion);
1421
- }
1422
- /**
1423
- * Get the CRD name for a custom resource
1424
- */
1425
- async getCRDNameForResource(resource) {
1426
- if (!resource.apiVersion || !resource.kind) {
1427
- return null;
1428
- }
1429
- // Only return CRD name for custom resources
1430
- if (!this.isCustomResource(resource)) {
1431
- return null;
1432
- }
1433
- // Extract group from apiVersion (e.g., "example.com/v1" -> "example.com")
1434
- const apiVersionParts = resource.apiVersion.split('/');
1435
- const group = apiVersionParts.length > 1 ? apiVersionParts[0] : '';
1436
- if (!group) {
1437
- return null; // Core API resources don't have CRDs
1438
- }
1439
- try {
1440
- // Try to find the CRD by querying the API
1441
- const crds = await this.k8sApi.list('apiextensions.k8s.io/v1', 'CustomResourceDefinition');
1442
- // Look for a CRD that matches our group and kind
1443
- const matchingCrd = crds.body?.items?.find((crd) => {
1444
- const crdSpec = crd.spec;
1445
- return crdSpec?.group === group && crdSpec?.names?.kind === resource.kind;
1446
- });
1447
- if (matchingCrd) {
1448
- return matchingCrd.metadata?.name;
1449
- }
1450
- }
1451
- catch (error) {
1452
- // If we can't query CRDs, fall back to heuristic
1453
- console.warn('Failed to query CRDs, using heuristic for CRD name generation:', error);
1454
- }
1455
- // Fallback: Convert Kind to plural lowercase (simple heuristic)
1456
- const kind = resource.kind.toLowerCase();
1457
- const plural = kind.endsWith('s') ? kind : `${kind}s`;
1458
- return `${plural}.${group}`;
1459
- }
1460
919
  /**
1461
920
  * Public method to wait for CRD readiness by name
1462
921
  */
1463
- async waitForCRDReady(crdName, timeout = 300000) {
1464
- const logger = this.logger.child({ crdName, timeout });
1465
- const options = {
1466
- mode: this.deploymentMode,
1467
- timeout,
1468
- };
1469
- await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
1470
- }
1471
- /**
1472
- * Wait for a CRD to be established in the cluster
1473
- */
1474
- async waitForCRDEstablishment(crd, options, logger) {
1475
- const crdName = crd.metadata?.name;
1476
- const timeout = options.timeout || 300000; // 5 minutes default
1477
- const startTime = Date.now();
1478
- const pollInterval = 2000; // 2 seconds
1479
- logger.debug('Waiting for CRD to exist and be established', { crdName, timeout });
1480
- while (Date.now() - startTime < timeout) {
1481
- try {
1482
- // Check if CRD is established by reading its status
1483
- const crdStatus = await this.k8sApi.read({
1484
- apiVersion: 'apiextensions.k8s.io/v1',
1485
- kind: 'CustomResourceDefinition',
1486
- metadata: { name: crdName }, // CRDs are cluster-scoped, no namespace needed
1487
- });
1488
- const conditions = crdStatus.body?.status?.conditions || [];
1489
- const establishedCondition = conditions.find((c) => c.type === 'Established');
1490
- if (establishedCondition?.status === 'True') {
1491
- logger.debug('CRD exists and is established', { crdName });
1492
- return;
1493
- }
1494
- logger.debug('CRD exists but not yet established, waiting...', {
1495
- crdName,
1496
- establishedStatus: establishedCondition?.status || 'unknown',
1497
- });
1498
- }
1499
- catch (error) {
1500
- // CRD might not exist yet (e.g., being installed by a closure)
1501
- // This is expected in scenarios where closures install CRDs
1502
- logger.debug('CRD not found yet, waiting for it to be created...', {
1503
- crdName,
1504
- error: error.message,
1505
- });
1506
- }
1507
- // Wait before next poll
1508
- await new Promise((resolve) => setTimeout(resolve, pollInterval));
1509
- }
1510
- // Timeout reached
1511
- throw new Error(`Timeout waiting for CRD ${crdName} to be established after ${timeout}ms`);
1512
- }
1513
- /**
1514
- * Check if an error is an HTTP 415 Unsupported Media Type error
1515
- */
1516
- isUnsupportedMediaTypeError(error) {
1517
- return (error &&
1518
- typeof error === 'object' &&
1519
- (error.statusCode === 415 ||
1520
- (error.response && error.response.statusCode === 415) ||
1521
- (error.body && error.body.code === 415)));
1522
- }
1523
- /**
1524
- * Extract accepted media types from HTTP 415 error message
1525
- */
1526
- extractAcceptedMediaTypes(error) {
1527
- const defaultTypes = ['application/json-patch+json', 'application/merge-patch+json', 'application/apply-patch+yaml'];
1528
- try {
1529
- // Try to extract from error message
1530
- const message = error.message || error.body?.message || '';
1531
- const match = message.match(/accepted media types include: ([^"]+)/);
1532
- if (match && match[1]) {
1533
- return match[1].split(', ').map((type) => type.trim());
1534
- }
1535
- }
1536
- catch (_e) {
1537
- // Fallback to default types
1538
- }
1539
- return defaultTypes;
922
+ async waitForCRDReady(crdName, timeout = DEFAULT_CRD_READY_TIMEOUT, abortSignal) {
923
+ await this.crdManager.waitForCRDReady(crdName, this.deploymentMode, timeout, abortSignal);
1540
924
  }
1541
925
  }
1542
926
  //# sourceMappingURL=engine.js.map