typekro 0.1.0 → 0.2.2

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 (436) hide show
  1. package/LICENSE +201 -185
  2. package/README.md +581 -563
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/alchemy/deployers.d.ts +1 -1
  5. package/dist/alchemy/deployers.d.ts.map +1 -1
  6. package/dist/alchemy/deployers.js +25 -20
  7. package/dist/alchemy/deployers.js.map +1 -1
  8. package/dist/alchemy/deployment.d.ts +3 -3
  9. package/dist/alchemy/deployment.d.ts.map +1 -1
  10. package/dist/alchemy/deployment.js +2 -2
  11. package/dist/alchemy/deployment.js.map +1 -1
  12. package/dist/alchemy/index.d.ts +4 -4
  13. package/dist/alchemy/index.d.ts.map +1 -1
  14. package/dist/alchemy/index.js +6 -6
  15. package/dist/alchemy/index.js.map +1 -1
  16. package/dist/alchemy/resolver.d.ts +3 -3
  17. package/dist/alchemy/resolver.d.ts.map +1 -1
  18. package/dist/alchemy/resolver.js +70 -17
  19. package/dist/alchemy/resolver.js.map +1 -1
  20. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  21. package/dist/alchemy/resource-registration.js +3 -3
  22. package/dist/alchemy/resource-registration.js.map +1 -1
  23. package/dist/alchemy/type-inference.d.ts.map +1 -1
  24. package/dist/alchemy/type-inference.js.map +1 -1
  25. package/dist/alchemy/types.d.ts +2 -2
  26. package/dist/alchemy/types.d.ts.map +1 -1
  27. package/dist/alchemy/utilities.d.ts.map +1 -1
  28. package/dist/alchemy/utilities.js.map +1 -1
  29. package/dist/alchemy/wrapper.d.ts.map +1 -1
  30. package/dist/alchemy/wrapper.js +2 -2
  31. package/dist/alchemy/wrapper.js.map +1 -1
  32. package/dist/core/composition/composition.d.ts +1 -85
  33. package/dist/core/composition/composition.d.ts.map +1 -1
  34. package/dist/core/composition/composition.js +3 -214
  35. package/dist/core/composition/composition.js.map +1 -1
  36. package/dist/core/composition/imperative.d.ts +39 -0
  37. package/dist/core/composition/imperative.d.ts.map +1 -0
  38. package/dist/core/composition/imperative.js +219 -0
  39. package/dist/core/composition/imperative.js.map +1 -0
  40. package/dist/core/composition/index.d.ts +5 -3
  41. package/dist/core/composition/index.d.ts.map +1 -1
  42. package/dist/core/composition/index.js +4 -2
  43. package/dist/core/composition/index.js.map +1 -1
  44. package/dist/core/composition/typekro-runtime/index.d.ts +1 -1
  45. package/dist/core/composition/typekro-runtime/index.d.ts.map +1 -1
  46. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  47. package/dist/core/composition/typekro-runtime/typekro-runtime.js +3 -3
  48. package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
  49. package/dist/core/composition/types.d.ts +0 -237
  50. package/dist/core/composition/types.d.ts.map +1 -1
  51. package/dist/core/composition/types.js +6 -0
  52. package/dist/core/composition/types.js.map +1 -1
  53. package/dist/core/constants/brands.d.ts.map +1 -1
  54. package/dist/core/constants/brands.js +3 -9
  55. package/dist/core/constants/brands.js.map +1 -1
  56. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  57. package/dist/core/dependencies/resolver.js +3 -3
  58. package/dist/core/dependencies/resolver.js.map +1 -1
  59. package/dist/core/dependencies/type-guards.d.ts +3 -3
  60. package/dist/core/dependencies/type-guards.d.ts.map +1 -1
  61. package/dist/core/dependencies/type-guards.js +3 -3
  62. package/dist/core/dependencies/type-guards.js.map +1 -1
  63. package/dist/core/deployment/debug-logger.d.ts +119 -0
  64. package/dist/core/deployment/debug-logger.d.ts.map +1 -0
  65. package/dist/core/deployment/debug-logger.js +372 -0
  66. package/dist/core/deployment/debug-logger.js.map +1 -0
  67. package/dist/core/deployment/deployment-strategies.d.ts +1 -1
  68. package/dist/core/deployment/deployment-strategies.d.ts.map +1 -1
  69. package/dist/core/deployment/deployment-strategies.js +1 -1
  70. package/dist/core/deployment/deployment-strategies.js.map +1 -1
  71. package/dist/core/deployment/direct-factory.d.ts +11 -5
  72. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  73. package/dist/core/deployment/direct-factory.js +22 -12
  74. package/dist/core/deployment/direct-factory.js.map +1 -1
  75. package/dist/core/deployment/engine.d.ts +9 -6
  76. package/dist/core/deployment/engine.d.ts.map +1 -1
  77. package/dist/core/deployment/engine.js +184 -95
  78. package/dist/core/deployment/engine.js.map +1 -1
  79. package/dist/core/deployment/event-filter.d.ts +142 -0
  80. package/dist/core/deployment/event-filter.d.ts.map +1 -0
  81. package/dist/core/deployment/event-filter.js +420 -0
  82. package/dist/core/deployment/event-filter.js.map +1 -0
  83. package/dist/core/deployment/event-monitor.d.ts +197 -0
  84. package/dist/core/deployment/event-monitor.d.ts.map +1 -0
  85. package/dist/core/deployment/event-monitor.js +738 -0
  86. package/dist/core/deployment/event-monitor.js.map +1 -0
  87. package/dist/core/deployment/event-streamer.d.ts +112 -0
  88. package/dist/core/deployment/event-streamer.d.ts.map +1 -0
  89. package/dist/core/deployment/event-streamer.js +348 -0
  90. package/dist/core/deployment/event-streamer.js.map +1 -0
  91. package/dist/core/deployment/index.d.ts +5 -5
  92. package/dist/core/deployment/index.d.ts.map +1 -1
  93. package/dist/core/deployment/index.js +5 -5
  94. package/dist/core/deployment/index.js.map +1 -1
  95. package/dist/core/deployment/kro-factory.d.ts +2 -8
  96. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  97. package/dist/core/deployment/kro-factory.js +63 -109
  98. package/dist/core/deployment/kro-factory.js.map +1 -1
  99. package/dist/core/deployment/readiness.d.ts +6 -0
  100. package/dist/core/deployment/readiness.d.ts.map +1 -1
  101. package/dist/core/deployment/readiness.js +45 -1
  102. package/dist/core/deployment/readiness.js.map +1 -1
  103. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  104. package/dist/core/deployment/rollback-manager.js +3 -3
  105. package/dist/core/deployment/rollback-manager.js.map +1 -1
  106. package/dist/core/deployment/shared-utilities.d.ts +1 -1
  107. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  108. package/dist/core/deployment/shared-utilities.js +2 -0
  109. package/dist/core/deployment/shared-utilities.js.map +1 -1
  110. package/dist/core/deployment/status-hydrator.d.ts.map +1 -1
  111. package/dist/core/deployment/status-hydrator.js +31 -12
  112. package/dist/core/deployment/status-hydrator.js.map +1 -1
  113. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +4 -4
  114. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
  115. package/dist/core/deployment/strategies/alchemy-strategy.js +9 -9
  116. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
  117. package/dist/core/deployment/strategies/base-strategy.d.ts +7 -4
  118. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  119. package/dist/core/deployment/strategies/base-strategy.js +257 -11
  120. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  121. package/dist/core/deployment/strategies/direct-strategy.d.ts +4 -3
  122. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  123. package/dist/core/deployment/strategies/direct-strategy.js +4 -4
  124. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  125. package/dist/core/deployment/strategies/index.d.ts +1 -1
  126. package/dist/core/deployment/strategies/index.d.ts.map +1 -1
  127. package/dist/core/deployment/strategies/index.js +1 -1
  128. package/dist/core/deployment/strategies/index.js.map +1 -1
  129. package/dist/core/deployment/strategies/kro-strategy.d.ts +1 -1
  130. package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
  131. package/dist/core/deployment/strategies/kro-strategy.js +14 -14
  132. package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
  133. package/dist/core/errors.d.ts +136 -0
  134. package/dist/core/errors.d.ts.map +1 -1
  135. package/dist/core/errors.js +362 -0
  136. package/dist/core/errors.js.map +1 -1
  137. package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -1
  138. package/dist/core/evaluation/cel-optimizer.js +33 -11
  139. package/dist/core/evaluation/cel-optimizer.js.map +1 -1
  140. package/dist/core/factory.d.ts.map +1 -1
  141. package/dist/core/factory.js.map +1 -1
  142. package/dist/core/kubernetes/api.d.ts +13 -2
  143. package/dist/core/kubernetes/api.d.ts.map +1 -1
  144. package/dist/core/kubernetes/api.js +21 -8
  145. package/dist/core/kubernetes/api.js.map +1 -1
  146. package/dist/core/kubernetes/client-provider.d.ts +192 -0
  147. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  148. package/dist/core/kubernetes/client-provider.js +423 -22
  149. package/dist/core/kubernetes/client-provider.js.map +1 -1
  150. package/dist/core/logging/config.d.ts.map +1 -1
  151. package/dist/core/logging/config.js.map +1 -1
  152. package/dist/core/logging/index.d.ts +1 -1
  153. package/dist/core/logging/index.d.ts.map +1 -1
  154. package/dist/core/logging/index.js +1 -1
  155. package/dist/core/logging/index.js.map +1 -1
  156. package/dist/core/logging/logger.d.ts +1 -1
  157. package/dist/core/logging/logger.d.ts.map +1 -1
  158. package/dist/core/logging/logger.js.map +1 -1
  159. package/dist/core/readiness/cluster-state.d.ts.map +1 -1
  160. package/dist/core/readiness/cluster-state.js +12 -6
  161. package/dist/core/readiness/cluster-state.js.map +1 -1
  162. package/dist/core/references/cel-evaluator.js +1 -1
  163. package/dist/core/references/cel-evaluator.js.map +1 -1
  164. package/dist/core/references/cel.d.ts.map +1 -1
  165. package/dist/core/references/cel.js +1 -1
  166. package/dist/core/references/cel.js.map +1 -1
  167. package/dist/core/references/external-refs.d.ts +1 -1
  168. package/dist/core/references/external-refs.js +1 -1
  169. package/dist/core/references/index.d.ts +4 -4
  170. package/dist/core/references/index.d.ts.map +1 -1
  171. package/dist/core/references/index.js +6 -6
  172. package/dist/core/references/index.js.map +1 -1
  173. package/dist/core/references/resolver.d.ts +1 -1
  174. package/dist/core/references/resolver.d.ts.map +1 -1
  175. package/dist/core/references/resolver.js +69 -44
  176. package/dist/core/references/resolver.js.map +1 -1
  177. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  178. package/dist/core/references/schema-proxy.js +2 -4
  179. package/dist/core/references/schema-proxy.js.map +1 -1
  180. package/dist/core/serialization/core.d.ts +1 -1
  181. package/dist/core/serialization/core.d.ts.map +1 -1
  182. package/dist/core/serialization/core.js +122 -16
  183. package/dist/core/serialization/core.js.map +1 -1
  184. package/dist/core/serialization/schema.js +1 -1
  185. package/dist/core/serialization/schema.js.map +1 -1
  186. package/dist/core/serialization/validation.js +1 -1
  187. package/dist/core/serialization/validation.js.map +1 -1
  188. package/dist/core/serialization/yaml.js +1 -1
  189. package/dist/core/serialization/yaml.js.map +1 -1
  190. package/dist/core/types/common.d.ts.map +1 -1
  191. package/dist/core/types/deployment.d.ts +116 -3
  192. package/dist/core/types/deployment.d.ts.map +1 -1
  193. package/dist/core/types/deployment.js.map +1 -1
  194. package/dist/core/types/index.d.ts +1 -1
  195. package/dist/core/types/index.d.ts.map +1 -1
  196. package/dist/core/types/index.js.map +1 -1
  197. package/dist/core/types/kubernetes.d.ts.map +1 -1
  198. package/dist/core/types/serialization.d.ts +14 -3
  199. package/dist/core/types/serialization.d.ts.map +1 -1
  200. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  201. package/dist/core/validation/cel-validator.js +28 -10
  202. package/dist/core/validation/cel-validator.js.map +1 -1
  203. package/dist/core/yaml/index.d.ts +1 -1
  204. package/dist/core/yaml/index.d.ts.map +1 -1
  205. package/dist/core/yaml/index.js +1 -1
  206. package/dist/core/yaml/index.js.map +1 -1
  207. package/dist/core/yaml/path-resolver.d.ts.map +1 -1
  208. package/dist/core/yaml/path-resolver.js +6 -6
  209. package/dist/core/yaml/path-resolver.js.map +1 -1
  210. package/dist/core.d.ts +10 -10
  211. package/dist/core.d.ts.map +1 -1
  212. package/dist/core.js +14 -14
  213. package/dist/core.js.map +1 -1
  214. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  215. package/dist/factories/flux/git-repository.js.map +1 -1
  216. package/dist/factories/flux/index.d.ts +1 -1
  217. package/dist/factories/flux/index.d.ts.map +1 -1
  218. package/dist/factories/flux/index.js.map +1 -1
  219. package/dist/factories/flux/kustomize/index.d.ts +1 -1
  220. package/dist/factories/flux/kustomize/index.d.ts.map +1 -1
  221. package/dist/factories/flux/kustomize/index.js.map +1 -1
  222. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  223. package/dist/factories/flux/kustomize/readiness-evaluators.js +9 -9
  224. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  225. package/dist/factories/flux/kustomize/types.d.ts +1 -1
  226. package/dist/factories/flux/kustomize/types.d.ts.map +1 -1
  227. package/dist/factories/helm/helm-release.d.ts +7 -4
  228. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  229. package/dist/factories/helm/helm-release.js +7 -4
  230. package/dist/factories/helm/helm-release.js.map +1 -1
  231. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  232. package/dist/factories/helm/helm-repository.js.map +1 -1
  233. package/dist/factories/helm/index.d.ts +1 -1
  234. package/dist/factories/helm/index.d.ts.map +1 -1
  235. package/dist/factories/helm/index.js +1 -1
  236. package/dist/factories/helm/index.js.map +1 -1
  237. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  238. package/dist/factories/helm/readiness-evaluators.js +4 -2
  239. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  240. package/dist/factories/index.d.ts +6 -3
  241. package/dist/factories/index.d.ts.map +1 -1
  242. package/dist/factories/index.js +10 -6
  243. package/dist/factories/index.js.map +1 -1
  244. package/dist/factories/kro/index.d.ts +3 -3
  245. package/dist/factories/kro/index.d.ts.map +1 -1
  246. package/dist/factories/kro/index.js +2 -2
  247. package/dist/factories/kro/index.js.map +1 -1
  248. package/dist/factories/kro/kro-crd.d.ts.map +1 -1
  249. package/dist/factories/kro/kro-crd.js +5 -5
  250. package/dist/factories/kro/kro-crd.js.map +1 -1
  251. package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -1
  252. package/dist/factories/kro/kro-custom-resource.js +21 -21
  253. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  254. package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -1
  255. package/dist/factories/kro/resource-graph-definition.js +7 -7
  256. package/dist/factories/kro/resource-graph-definition.js.map +1 -1
  257. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -1
  258. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -1
  259. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +2 -2
  260. package/dist/factories/kubernetes/certificates/certificate-signing-request.js +2 -2
  261. package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -1
  262. package/dist/factories/kubernetes/config/config-map.js +1 -1
  263. package/dist/factories/kubernetes/config/config-map.js.map +1 -1
  264. package/dist/factories/kubernetes/config/secret.js +1 -1
  265. package/dist/factories/kubernetes/config/secret.js.map +1 -1
  266. package/dist/factories/kubernetes/core/component-status.js +1 -1
  267. package/dist/factories/kubernetes/core/component-status.js.map +1 -1
  268. package/dist/factories/kubernetes/core/node.js +1 -1
  269. package/dist/factories/kubernetes/core/node.js.map +1 -1
  270. package/dist/factories/kubernetes/core/pod.js +4 -4
  271. package/dist/factories/kubernetes/core/pod.js.map +1 -1
  272. package/dist/factories/kubernetes/extensions/custom-resource-definition.js +2 -2
  273. package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -1
  274. package/dist/factories/kubernetes/index.d.ts +2 -2
  275. package/dist/factories/kubernetes/index.d.ts.map +1 -1
  276. package/dist/factories/kubernetes/index.js +8 -8
  277. package/dist/factories/kubernetes/index.js.map +1 -1
  278. package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -1
  279. package/dist/factories/kubernetes/networking/endpoints.js +4 -4
  280. package/dist/factories/kubernetes/networking/endpoints.js.map +1 -1
  281. package/dist/factories/kubernetes/networking/ingress.js +2 -2
  282. package/dist/factories/kubernetes/networking/network-policy.js +2 -2
  283. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
  284. package/dist/factories/kubernetes/networking/service.d.ts.map +1 -1
  285. package/dist/factories/kubernetes/networking/service.js +8 -7
  286. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  287. package/dist/factories/kubernetes/policy/limit-range.js +2 -2
  288. package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
  289. package/dist/factories/kubernetes/policy/pod-disruption-budget.js +5 -5
  290. package/dist/factories/kubernetes/policy/resource-quota.js +4 -4
  291. package/dist/factories/kubernetes/rbac/cluster-role-binding.js +2 -2
  292. package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -1
  293. package/dist/factories/kubernetes/rbac/cluster-role.js +2 -2
  294. package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -1
  295. package/dist/factories/kubernetes/rbac/role-binding.js +2 -2
  296. package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -1
  297. package/dist/factories/kubernetes/rbac/role.js +2 -2
  298. package/dist/factories/kubernetes/rbac/role.js.map +1 -1
  299. package/dist/factories/kubernetes/rbac/service-account.js +2 -2
  300. package/dist/factories/kubernetes/rbac/service-account.js.map +1 -1
  301. package/dist/factories/kubernetes/storage/persistent-volume-claim.js +2 -2
  302. package/dist/factories/kubernetes/storage/persistent-volume.js +4 -4
  303. package/dist/factories/kubernetes/storage/storage-class.js +2 -2
  304. package/dist/factories/kubernetes/storage/storage-class.js.map +1 -1
  305. package/dist/factories/kubernetes/workloads/cron-job.js +5 -5
  306. package/dist/factories/kubernetes/workloads/daemon-set.js +2 -2
  307. package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -1
  308. package/dist/factories/kubernetes/workloads/deployment.js +5 -6
  309. package/dist/factories/kubernetes/workloads/deployment.js.map +1 -1
  310. package/dist/factories/kubernetes/workloads/job.js +10 -10
  311. package/dist/factories/kubernetes/workloads/replica-set.js +2 -2
  312. package/dist/factories/kubernetes/workloads/replication-controller.js +5 -5
  313. package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -1
  314. package/dist/factories/kubernetes/workloads/stateful-set.js +7 -7
  315. package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -1
  316. package/dist/factories/kubernetes/yaml/index.d.ts +1 -1
  317. package/dist/factories/kubernetes/yaml/index.d.ts.map +1 -1
  318. package/dist/factories/kubernetes/yaml/index.js +1 -1
  319. package/dist/factories/kubernetes/yaml/index.js.map +1 -1
  320. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +2 -2
  321. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  322. package/dist/factories/kubernetes/yaml/yaml-directory.js +106 -101
  323. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  324. package/dist/factories/kubernetes/yaml/yaml-file.d.ts +7 -4
  325. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  326. package/dist/factories/kubernetes/yaml/yaml-file.js +110 -99
  327. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  328. package/dist/factories/shared.d.ts +49 -0
  329. package/dist/factories/shared.d.ts.map +1 -1
  330. package/dist/factories/shared.js +75 -3
  331. package/dist/factories/shared.js.map +1 -1
  332. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts +17 -0
  333. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -0
  334. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js +46 -0
  335. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js.map +1 -0
  336. package/dist/factories/simple/autoscaling/index.d.ts +8 -0
  337. package/dist/factories/simple/autoscaling/index.d.ts.map +1 -0
  338. package/dist/factories/simple/autoscaling/index.js +8 -0
  339. package/dist/factories/simple/autoscaling/index.js.map +1 -0
  340. package/dist/factories/simple/config/config-map.d.ts +17 -0
  341. package/dist/factories/simple/config/config-map.d.ts.map +1 -0
  342. package/dist/factories/simple/config/config-map.js +25 -0
  343. package/dist/factories/simple/config/config-map.js.map +1 -0
  344. package/dist/factories/simple/config/index.d.ts +9 -0
  345. package/dist/factories/simple/config/index.d.ts.map +1 -0
  346. package/dist/factories/simple/config/index.js +9 -0
  347. package/dist/factories/simple/config/index.js.map +1 -0
  348. package/dist/factories/simple/config/secret.d.ts +17 -0
  349. package/dist/factories/simple/config/secret.d.ts.map +1 -0
  350. package/dist/factories/simple/config/secret.js +24 -0
  351. package/dist/factories/simple/config/secret.js.map +1 -0
  352. package/dist/factories/simple/helm/index.d.ts +16 -0
  353. package/dist/factories/simple/helm/index.d.ts.map +1 -0
  354. package/dist/factories/simple/helm/index.js +21 -0
  355. package/dist/factories/simple/helm/index.js.map +1 -0
  356. package/dist/factories/simple/index.d.ts +50 -0
  357. package/dist/factories/simple/index.d.ts.map +1 -0
  358. package/dist/factories/simple/index.js +58 -0
  359. package/dist/factories/simple/index.js.map +1 -0
  360. package/dist/factories/simple/networking/index.d.ts +10 -0
  361. package/dist/factories/simple/networking/index.d.ts.map +1 -0
  362. package/dist/factories/simple/networking/index.js +10 -0
  363. package/dist/factories/simple/networking/index.js.map +1 -0
  364. package/dist/factories/simple/networking/ingress.d.ts +17 -0
  365. package/dist/factories/simple/networking/ingress.d.ts.map +1 -0
  366. package/dist/factories/simple/networking/ingress.js +30 -0
  367. package/dist/factories/simple/networking/ingress.js.map +1 -0
  368. package/dist/factories/simple/networking/network-policy.d.ts +17 -0
  369. package/dist/factories/simple/networking/network-policy.d.ts.map +1 -0
  370. package/dist/factories/simple/networking/network-policy.js +30 -0
  371. package/dist/factories/simple/networking/network-policy.js.map +1 -0
  372. package/dist/factories/simple/networking/service.d.ts +17 -0
  373. package/dist/factories/simple/networking/service.d.ts.map +1 -0
  374. package/dist/factories/simple/networking/service.js +27 -0
  375. package/dist/factories/simple/networking/service.js.map +1 -0
  376. package/dist/factories/simple/storage/index.d.ts +9 -0
  377. package/dist/factories/simple/storage/index.d.ts.map +1 -0
  378. package/dist/factories/simple/storage/index.js +9 -0
  379. package/dist/factories/simple/storage/index.js.map +1 -0
  380. package/dist/factories/simple/storage/persistent-volume-claim.d.ts +17 -0
  381. package/dist/factories/simple/storage/persistent-volume-claim.d.ts.map +1 -0
  382. package/dist/factories/simple/storage/persistent-volume-claim.js +32 -0
  383. package/dist/factories/simple/storage/persistent-volume-claim.js.map +1 -0
  384. package/dist/factories/simple/storage/persistent-volume.d.ts +17 -0
  385. package/dist/factories/simple/storage/persistent-volume.d.ts.map +1 -0
  386. package/dist/factories/simple/storage/persistent-volume.js +44 -0
  387. package/dist/factories/simple/storage/persistent-volume.js.map +1 -0
  388. package/dist/factories/simple/types.d.ts +165 -0
  389. package/dist/factories/simple/types.d.ts.map +1 -0
  390. package/dist/factories/simple/types.js +9 -0
  391. package/dist/factories/simple/types.js.map +1 -0
  392. package/dist/factories/simple/workloads/cron-job.d.ts +17 -0
  393. package/dist/factories/simple/workloads/cron-job.d.ts.map +1 -0
  394. package/dist/factories/simple/workloads/cron-job.js +43 -0
  395. package/dist/factories/simple/workloads/cron-job.js.map +1 -0
  396. package/dist/factories/simple/workloads/daemon-set.d.ts +17 -0
  397. package/dist/factories/simple/workloads/daemon-set.d.ts.map +1 -0
  398. package/dist/factories/simple/workloads/daemon-set.js +46 -0
  399. package/dist/factories/simple/workloads/daemon-set.js.map +1 -0
  400. package/dist/factories/simple/workloads/deployment.d.ts +17 -0
  401. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -0
  402. package/dist/factories/simple/workloads/deployment.js +47 -0
  403. package/dist/factories/simple/workloads/deployment.js.map +1 -0
  404. package/dist/factories/simple/workloads/index.d.ts +12 -0
  405. package/dist/factories/simple/workloads/index.d.ts.map +1 -0
  406. package/dist/factories/simple/workloads/index.js +12 -0
  407. package/dist/factories/simple/workloads/index.js.map +1 -0
  408. package/dist/factories/simple/workloads/job.d.ts +17 -0
  409. package/dist/factories/simple/workloads/job.d.ts.map +1 -0
  410. package/dist/factories/simple/workloads/job.js +40 -0
  411. package/dist/factories/simple/workloads/job.js.map +1 -0
  412. package/dist/factories/simple/workloads/stateful-set.d.ts +17 -0
  413. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -0
  414. package/dist/factories/simple/workloads/stateful-set.js +47 -0
  415. package/dist/factories/simple/workloads/stateful-set.js.map +1 -0
  416. package/dist/factories/simple/yaml/index.d.ts +13 -0
  417. package/dist/factories/simple/yaml/index.d.ts.map +1 -0
  418. package/dist/factories/simple/yaml/index.js +23 -0
  419. package/dist/factories/simple/yaml/index.js.map +1 -0
  420. package/dist/index.d.ts +5 -3
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js +25 -22
  423. package/dist/index.js.map +1 -1
  424. package/dist/utils/helpers.d.ts +1 -1
  425. package/dist/utils/helpers.d.ts.map +1 -1
  426. package/dist/utils/helpers.js +53 -7
  427. package/dist/utils/helpers.js.map +1 -1
  428. package/dist/utils/index.d.ts +2 -2
  429. package/dist/utils/index.d.ts.map +1 -1
  430. package/dist/utils/index.js +2 -2
  431. package/dist/utils/index.js.map +1 -1
  432. package/dist/utils/type-guards.d.ts +1 -1
  433. package/dist/utils/type-guards.d.ts.map +1 -1
  434. package/dist/utils/type-guards.js +3 -9
  435. package/dist/utils/type-guards.js.map +1 -1
  436. package/package.json +12 -6
@@ -5,14 +5,16 @@
5
5
  * without requiring the Kro controller, using in-process dependency resolution.
6
6
  */
7
7
  import * as k8s from '@kubernetes/client-node';
8
+ import { ensureReadinessEvaluator } from '../../utils/helpers.js';
8
9
  import { DependencyResolver } from '../dependencies/index.js';
9
10
  import { CircularDependencyError } from '../errors.js';
10
11
  import { getComponentLogger } from '../logging/index.js';
11
- import { ReferenceResolver, DeploymentMode } from '../references/index.js';
12
+ import { DeploymentMode, ReferenceResolver } from '../references/index.js';
12
13
  import { ResourceDeploymentError } from '../types/deployment.js';
14
+ import { createDebugLoggerFromDeploymentOptions } from './debug-logger.js';
13
15
  import { ResourceReadinessChecker } from './readiness.js';
14
16
  import { StatusHydrator } from './status-hydrator.js';
15
- import { ensureReadinessEvaluator } from '../../utils/helpers.js';
17
+ import { createEventMonitor } from './event-monitor.js';
16
18
  export class DirectDeploymentEngine {
17
19
  kubeClient;
18
20
  deploymentMode;
@@ -21,6 +23,9 @@ export class DirectDeploymentEngine {
21
23
  k8sApi;
22
24
  readinessChecker;
23
25
  statusHydrator;
26
+ debugLogger;
27
+ eventMonitor;
28
+ eventFilter;
24
29
  deploymentState = new Map();
25
30
  readyResources = new Set(); // Track resources that are already ready
26
31
  logger = getComponentLogger('deployment-engine');
@@ -28,17 +33,19 @@ export class DirectDeploymentEngine {
28
33
  this.kubeClient = kubeClient;
29
34
  this.deploymentMode = deploymentMode;
30
35
  this.dependencyResolver = new DependencyResolver();
31
- this.referenceResolver = referenceResolver || new ReferenceResolver(kubeClient, this.deploymentMode, k8sApi);
36
+ this.referenceResolver =
37
+ referenceResolver || new ReferenceResolver(kubeClient, this.deploymentMode, k8sApi);
32
38
  this.k8sApi = k8sApi || kubeClient.makeApiClient(k8s.KubernetesObjectApi);
33
39
  this.readinessChecker = new ResourceReadinessChecker(this.k8sApi);
34
40
  this.statusHydrator = new StatusHydrator(this.k8sApi);
41
+ // this.eventFilter = createEventFilter();
35
42
  // Set up callback to track ready resources
36
43
  this.readinessChecker.setOnResourceReady((resource) => {
37
44
  const resourceKey = `${resource.kind}/${resource.name}/${resource.namespace}`;
38
45
  this.readyResources.add(resourceKey);
39
46
  this.logger.debug('Resource marked as ready via generic readiness checker', {
40
47
  resourceKey,
41
- totalReady: this.readyResources.size
48
+ totalReady: this.readyResources.size,
42
49
  });
43
50
  });
44
51
  }
@@ -55,7 +62,8 @@ export class DirectDeploymentEngine {
55
62
  async isDeployedResourceReady(deployedResource) {
56
63
  try {
57
64
  // Check if the deployed resource has a factory-provided readiness evaluator
58
- const readinessEvaluator = deployedResource.manifest.readinessEvaluator;
65
+ const readinessEvaluator = deployedResource.manifest
66
+ .readinessEvaluator;
59
67
  if (readinessEvaluator) {
60
68
  // Use the factory-provided readiness evaluator
61
69
  // Create a resource reference for the API call
@@ -71,19 +79,25 @@ export class DirectDeploymentEngine {
71
79
  const liveResource = await this.k8sApi.read(resourceRef);
72
80
  // Use the factory-provided readiness evaluator
73
81
  const result = readinessEvaluator(liveResource.body);
82
+ let readinessResult;
74
83
  if (typeof result === 'boolean') {
75
- return result;
84
+ readinessResult = { ready: result };
76
85
  }
77
86
  else if (result && typeof result === 'object' && 'ready' in result) {
78
- return result.ready;
87
+ readinessResult = result;
79
88
  }
80
89
  else {
81
90
  this.logger.warn('Readiness evaluator returned unexpected result', {
82
91
  resourceId: deployedResource.id,
83
- result
92
+ result,
84
93
  });
85
- return false;
94
+ readinessResult = { ready: false, reason: 'Invalid evaluator result' };
86
95
  }
96
+ // Debug logging for readiness evaluation
97
+ if (this.debugLogger) {
98
+ this.debugLogger.logReadinessEvaluation(deployedResource, readinessEvaluator, readinessResult);
99
+ }
100
+ return readinessResult.ready;
87
101
  }
88
102
  else {
89
103
  // Fallback to generic readiness checker
@@ -105,7 +119,7 @@ export class DirectDeploymentEngine {
105
119
  resourceId: deployedResource.id,
106
120
  kind: deployedResource.kind,
107
121
  name: deployedResource.name,
108
- namespace: deployedResource.namespace
122
+ namespace: deployedResource.namespace,
109
123
  });
110
124
  return false;
111
125
  }
@@ -124,7 +138,10 @@ export class DirectDeploymentEngine {
124
138
  const startTime = Date.now();
125
139
  const deployedResources = [];
126
140
  const errors = [];
127
- const deploymentLogger = this.logger.child({ deploymentId, resourceCount: graph.resources.length });
141
+ const deploymentLogger = this.logger.child({
142
+ deploymentId,
143
+ resourceCount: graph.resources.length,
144
+ });
128
145
  deploymentLogger.info('Starting deployment', { options });
129
146
  try {
130
147
  this.emitEvent(options, {
@@ -133,7 +150,9 @@ export class DirectDeploymentEngine {
133
150
  timestamp: new Date(),
134
151
  });
135
152
  // 1. Validate no cycles in dependency graph
136
- deploymentLogger.debug('Validating dependency graph', { dependencyGraph: graph.dependencyGraph });
153
+ deploymentLogger.debug('Validating dependency graph', {
154
+ dependencyGraph: graph.dependencyGraph,
155
+ });
137
156
  this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
138
157
  // 2. Analyze deployment order and identify parallel stages
139
158
  deploymentLogger.debug('Analyzing deployment order for parallel execution');
@@ -141,16 +160,40 @@ export class DirectDeploymentEngine {
141
160
  deploymentLogger.debug('Deployment plan determined', {
142
161
  levels: deploymentPlan.levels.length,
143
162
  totalResources: deploymentPlan.totalResources,
144
- maxParallelism: deploymentPlan.maxParallelism
163
+ maxParallelism: deploymentPlan.maxParallelism,
145
164
  });
146
- // 3. Create resolution context
165
+ // 3. Initialize and start event monitoring if enabled
166
+ if (options.eventMonitoring?.enabled) {
167
+ try {
168
+ this.eventMonitor = createEventMonitor(this.kubeClient, {
169
+ namespace: options.namespace || 'default',
170
+ eventTypes: options.eventMonitoring.eventTypes || ['Warning', 'Error'],
171
+ includeChildResources: options.eventMonitoring.includeChildResources ?? true,
172
+ startTime: new Date(startTime),
173
+ ...(options.progressCallback && { progressCallback: options.progressCallback }),
174
+ });
175
+ // Start monitoring immediately to capture all deployment events
176
+ await this.eventMonitor.startMonitoring([]);
177
+ deploymentLogger.debug('Event monitoring started for deployment');
178
+ }
179
+ catch (error) {
180
+ deploymentLogger.warn('Failed to initialize event monitoring, continuing without it', error);
181
+ }
182
+ }
183
+ // 3.1. Initialize debug logging if enabled
184
+ if (options.debugLogging?.enabled) {
185
+ this.debugLogger = createDebugLoggerFromDeploymentOptions(options);
186
+ this.readinessChecker.setDebugLogger(this.debugLogger);
187
+ deploymentLogger.debug('Debug logging initialized');
188
+ }
189
+ // 4. Create resolution context
147
190
  const context = {
148
191
  deployedResources,
149
192
  kubeClient: this.kubeClient,
150
193
  ...(options.namespace && { namespace: options.namespace }),
151
194
  timeout: options.timeout || 30000,
152
195
  };
153
- // 4. Deploy resources in parallel stages
196
+ // 5. Deploy resources in parallel stages
154
197
  for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
155
198
  const currentLevel = deploymentPlan.levels[levelIndex];
156
199
  if (!currentLevel) {
@@ -158,7 +201,7 @@ export class DirectDeploymentEngine {
158
201
  }
159
202
  const levelLogger = deploymentLogger.child({
160
203
  level: levelIndex + 1,
161
- resourceCount: currentLevel.length
204
+ resourceCount: currentLevel.length,
162
205
  });
163
206
  levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.length} resources in parallel`);
164
207
  // Track performance metrics for this level
@@ -179,13 +222,13 @@ export class DirectDeploymentEngine {
179
222
  phase: 'validation',
180
223
  error,
181
224
  timestamp: new Date(),
182
- }
225
+ },
183
226
  };
184
227
  }
185
228
  resourceLogger.debug('Found resource in graph', {
186
229
  resourceId: resource.id,
187
230
  kind: resource.manifest?.kind,
188
- name: resource.manifest?.metadata?.name
231
+ name: resource.manifest?.metadata?.name,
189
232
  });
190
233
  try {
191
234
  resourceLogger.debug('Calling deploySingleResource');
@@ -193,12 +236,31 @@ export class DirectDeploymentEngine {
193
236
  await this.waitForCRDIfCustomResource(resource.manifest, options, resourceLogger);
194
237
  // FIX: Unconditionally ensure the readiness evaluator is attached just before deployment.
195
238
  const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
239
+ // Add resource to event monitoring before deployment to capture creation events
240
+ if (this.eventMonitor) {
241
+ const preDeployedResource = {
242
+ id: resourceId,
243
+ kind: resourceWithEvaluator.kind,
244
+ name: resourceWithEvaluator.metadata?.name || 'unknown',
245
+ namespace: resourceWithEvaluator.metadata?.namespace || options.namespace || 'default',
246
+ manifest: resourceWithEvaluator,
247
+ status: 'deployed',
248
+ deployedAt: new Date(),
249
+ };
250
+ try {
251
+ await this.eventMonitor.addResources([preDeployedResource]);
252
+ resourceLogger.debug('Added resource to event monitoring before deployment');
253
+ }
254
+ catch (error) {
255
+ resourceLogger.warn('Failed to add resource to event monitoring, continuing deployment', error);
256
+ }
257
+ }
196
258
  const deployedResource = await this.deploySingleResource(resourceWithEvaluator, context, options);
197
259
  resourceLogger.debug('Resource deployed successfully');
198
260
  return {
199
261
  success: true,
200
262
  resourceId,
201
- deployedResource
263
+ deployedResource,
202
264
  };
203
265
  }
204
266
  catch (error) {
@@ -222,7 +284,7 @@ export class DirectDeploymentEngine {
222
284
  phase: 'deployment',
223
285
  error: error,
224
286
  timestamp: new Date(),
225
- }
287
+ },
226
288
  };
227
289
  }
228
290
  });
@@ -252,6 +314,7 @@ export class DirectDeploymentEngine {
252
314
  levelLogger.error('Unexpected promise rejection in parallel deployment', result.reason);
253
315
  }
254
316
  }
317
+ // Resources are now added to event monitoring before deployment (see individual resource deployment above)
255
318
  // Handle rollback if there are failures and rollback is enabled
256
319
  if (levelHasFailures && options.rollbackOnFailure) {
257
320
  levelLogger.warn('Level deployment failed, initiating rollback');
@@ -273,27 +336,21 @@ export class DirectDeploymentEngine {
273
336
  }
274
337
  // Calculate level performance metrics
275
338
  const levelDuration = Date.now() - levelStartTime;
276
- const successfulCount = levelResults.filter(r => r.status === 'fulfilled' && r.value.success).length;
277
- const failedCount = levelResults.filter(r => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length;
278
- const isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
279
- // Use debug level in test environments to reduce noise, info level in production
280
- const logLevel = isTestEnvironment ? 'debug' : 'info';
281
- levelLogger[logLevel](`Level ${levelIndex + 1} deployment completed`, {
339
+ const successfulCount = levelResults.filter((r) => r.status === 'fulfilled' && r.value.success).length;
340
+ const failedCount = levelResults.filter((r) => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length;
341
+ levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
282
342
  successful: successfulCount,
283
343
  failed: failedCount,
284
344
  duration: levelDuration,
285
345
  parallelism: currentLevel.length,
286
- averageTimePerResource: Math.round(levelDuration / currentLevel.length)
346
+ averageTimePerResource: Math.round(levelDuration / currentLevel.length),
287
347
  });
288
348
  }
289
349
  const duration = Date.now() - startTime;
290
350
  const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
291
351
  const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
292
352
  // Log comprehensive performance metrics
293
- const isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
294
- // Use debug level in test environments to reduce noise, info level in production
295
- const logLevel = isTestEnvironment ? 'debug' : 'info';
296
- deploymentLogger[logLevel]('Parallel deployment performance metrics', {
353
+ deploymentLogger.info('Parallel deployment performance metrics', {
297
354
  totalDuration: duration,
298
355
  totalResources: deploymentPlan.totalResources,
299
356
  parallelLevels: deploymentPlan.levels.length,
@@ -301,14 +358,27 @@ export class DirectDeploymentEngine {
301
358
  averageTimePerResource: Math.round(duration / deploymentPlan.totalResources),
302
359
  successfulResources: successfulResources.length,
303
360
  failedResources: errors.length,
304
- parallelismEfficiency: Math.round((deploymentPlan.totalResources / deploymentPlan.levels.length) / deploymentPlan.maxParallelism * 100),
305
- status
361
+ parallelismEfficiency: Math.round((deploymentPlan.totalResources /
362
+ deploymentPlan.levels.length /
363
+ deploymentPlan.maxParallelism) *
364
+ 100),
365
+ status,
306
366
  });
307
367
  this.emitEvent(options, {
308
368
  type: status === 'success' ? 'completed' : 'failed',
309
369
  message: `Deployment ${status} in ${duration}ms (${deploymentPlan.levels.length} parallel levels, max ${deploymentPlan.maxParallelism} concurrent)`,
310
370
  timestamp: new Date(),
311
371
  });
372
+ // Stop event monitoring
373
+ if (this.eventMonitor) {
374
+ try {
375
+ await this.eventMonitor.stopMonitoring();
376
+ deploymentLogger.debug('Event monitoring stopped');
377
+ }
378
+ catch (error) {
379
+ deploymentLogger.warn('Failed to stop event monitoring cleanly', error);
380
+ }
381
+ }
312
382
  // Store deployment state for rollback
313
383
  this.deploymentState.set(deploymentId, {
314
384
  deploymentId,
@@ -340,6 +410,15 @@ export class DirectDeploymentEngine {
340
410
  timestamp: new Date(),
341
411
  error: error,
342
412
  });
413
+ // Stop event monitoring on error
414
+ if (this.eventMonitor) {
415
+ try {
416
+ await this.eventMonitor.stopMonitoring();
417
+ }
418
+ catch (_cleanupError) {
419
+ // Ignore cleanup errors in error path
420
+ }
421
+ }
343
422
  // Store deployment state even for failed deployments (for rollback)
344
423
  this.deploymentState.set(deploymentId, {
345
424
  deploymentId,
@@ -401,7 +480,7 @@ export class DirectDeploymentEngine {
401
480
  * Extract dependencies from a closure by analyzing its configuration
402
481
  * This is a simplified implementation - in practice, we would need more sophisticated analysis
403
482
  */
404
- extractClosureDependencies(closure, spec) {
483
+ extractClosureDependencies(_closure, _spec) {
405
484
  // For now, return empty dependencies since closures typically don't depend on Enhanced<> resources
406
485
  // In the future, this could analyze closure arguments for resource references
407
486
  return [];
@@ -414,7 +493,7 @@ export class DirectDeploymentEngine {
414
493
  const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(dependencyGraph);
415
494
  for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
416
495
  const level = deploymentPlan.levels[levelIndex];
417
- if (level && level.includes(resourceId)) {
496
+ if (level?.includes(resourceId)) {
418
497
  return levelIndex;
419
498
  }
420
499
  }
@@ -427,7 +506,7 @@ export class DirectDeploymentEngine {
427
506
  // Create enhanced levels with both resources and closures
428
507
  const enhancedLevels = [];
429
508
  // Check if we have any closures at level -1 (pre-resource level)
430
- const preResourceClosures = closureDependencies.filter(c => c.level === -1);
509
+ const preResourceClosures = closureDependencies.filter((c) => c.level === -1);
431
510
  // If we have pre-resource closures, add them as level 0 and shift everything else
432
511
  if (preResourceClosures.length > 0) {
433
512
  enhancedLevels.push({
@@ -462,7 +541,7 @@ export class DirectDeploymentEngine {
462
541
  levels: enhancedLevels,
463
542
  totalResources: deploymentPlan.totalResources,
464
543
  totalClosures: closureDependencies.length,
465
- maxParallelism: Math.max(deploymentPlan.maxParallelism, Math.max(...enhancedLevels.map(level => level.closures.length))),
544
+ maxParallelism: Math.max(deploymentPlan.maxParallelism, Math.max(...enhancedLevels.map((level) => level.closures.length))),
466
545
  };
467
546
  }
468
547
  /**
@@ -476,11 +555,11 @@ export class DirectDeploymentEngine {
476
555
  const deploymentLogger = this.logger.child({
477
556
  deploymentId,
478
557
  resourceCount: graph.resources.length,
479
- closureCount: Object.keys(closures).length
558
+ closureCount: Object.keys(closures).length,
480
559
  });
481
560
  deploymentLogger.info('Starting deployment with closures', {
482
561
  options,
483
- closures: Object.keys(closures)
562
+ closures: Object.keys(closures),
484
563
  });
485
564
  try {
486
565
  this.emitEvent(options, {
@@ -489,7 +568,9 @@ export class DirectDeploymentEngine {
489
568
  timestamp: new Date(),
490
569
  });
491
570
  // 1. Validate no cycles in dependency graph
492
- deploymentLogger.debug('Validating dependency graph', { dependencyGraph: graph.dependencyGraph });
571
+ deploymentLogger.debug('Validating dependency graph', {
572
+ dependencyGraph: graph.dependencyGraph,
573
+ });
493
574
  this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
494
575
  // 2. Analyze deployment order and identify parallel stages
495
576
  deploymentLogger.debug('Analyzing deployment order for parallel execution');
@@ -497,7 +578,7 @@ export class DirectDeploymentEngine {
497
578
  deploymentLogger.debug('Deployment plan determined', {
498
579
  levels: deploymentPlan.levels.length,
499
580
  totalResources: deploymentPlan.totalResources,
500
- maxParallelism: deploymentPlan.maxParallelism
581
+ maxParallelism: deploymentPlan.maxParallelism,
501
582
  });
502
583
  // 3. Analyze closure dependencies and integrate into deployment plan
503
584
  const closureDependencies = this.analyzeClosureDependencies(closures, spec, graph.dependencyGraph);
@@ -506,7 +587,7 @@ export class DirectDeploymentEngine {
506
587
  levels: enhancedPlan.levels.length,
507
588
  totalResources: enhancedPlan.totalResources,
508
589
  totalClosures: enhancedPlan.totalClosures,
509
- maxParallelism: enhancedPlan.maxParallelism
590
+ maxParallelism: enhancedPlan.maxParallelism,
510
591
  });
511
592
  // 4. Create resolution context
512
593
  const context = {
@@ -524,7 +605,7 @@ export class DirectDeploymentEngine {
524
605
  const levelLogger = deploymentLogger.child({
525
606
  level: levelIndex + 1,
526
607
  resourceCount: currentLevel.resources.length,
527
- closureCount: currentLevel.closures.length
608
+ closureCount: currentLevel.closures.length,
528
609
  });
529
610
  levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.resources.length} resources and ${currentLevel.closures.length} closures in parallel`);
530
611
  const levelStartTime = Date.now();
@@ -562,13 +643,13 @@ export class DirectDeploymentEngine {
562
643
  phase: 'validation',
563
644
  error,
564
645
  timestamp: new Date(),
565
- }
646
+ },
566
647
  };
567
648
  }
568
649
  resourceLogger.debug('Found resource in graph', {
569
650
  resourceId: resource.id,
570
651
  kind: resource.manifest?.kind,
571
- name: resource.manifest?.metadata?.name
652
+ name: resource.manifest?.metadata?.name,
572
653
  });
573
654
  try {
574
655
  resourceLogger.debug('Calling deploySingleResource');
@@ -578,7 +659,7 @@ export class DirectDeploymentEngine {
578
659
  return {
579
660
  success: true,
580
661
  resourceId,
581
- deployedResource
662
+ deployedResource,
582
663
  };
583
664
  }
584
665
  catch (error) {
@@ -602,7 +683,7 @@ export class DirectDeploymentEngine {
602
683
  phase: 'deployment',
603
684
  error: error,
604
685
  timestamp: new Date(),
605
- }
686
+ },
606
687
  };
607
688
  }
608
689
  });
@@ -612,12 +693,14 @@ export class DirectDeploymentEngine {
612
693
  closureLogger.debug('Executing closure at level', { level: levelIndex + 1 });
613
694
  try {
614
695
  const result = await closureInfo.closure(deploymentContext);
615
- closureLogger.debug('Closure executed successfully', { resultCount: result?.length || 0 });
696
+ closureLogger.debug('Closure executed successfully', {
697
+ resultCount: result?.length || 0,
698
+ });
616
699
  return {
617
700
  success: true,
618
701
  type: 'closure',
619
702
  name: closureInfo.name,
620
- result
703
+ result,
621
704
  };
622
705
  }
623
706
  catch (error) {
@@ -631,7 +714,7 @@ export class DirectDeploymentEngine {
631
714
  phase: 'deployment',
632
715
  error: error,
633
716
  timestamp: new Date(),
634
- }
717
+ },
635
718
  };
636
719
  }
637
720
  });
@@ -706,23 +789,19 @@ export class DirectDeploymentEngine {
706
789
  // Calculate level performance metrics
707
790
  const levelDuration = Date.now() - levelStartTime;
708
791
  const totalOperations = currentLevel.resources.length + currentLevel.closures.length;
709
- const isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
710
- const logLevel = isTestEnvironment ? 'debug' : 'info';
711
- levelLogger[logLevel](`Level ${levelIndex + 1} deployment completed`, {
792
+ levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
712
793
  resources: { successful: successfulResources, failed: failedResources },
713
794
  closures: { successful: successfulClosures, failed: failedClosures },
714
795
  duration: levelDuration,
715
796
  parallelism: totalOperations,
716
- averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0
797
+ averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0,
717
798
  });
718
799
  }
719
800
  const duration = Date.now() - startTime;
720
801
  const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
721
802
  const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
722
803
  // Log comprehensive performance metrics
723
- const isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
724
- const logLevel = isTestEnvironment ? 'debug' : 'info';
725
- deploymentLogger[logLevel]('Parallel deployment with closures performance metrics', {
804
+ deploymentLogger.info('Parallel deployment with closures performance metrics', {
726
805
  totalDuration: duration,
727
806
  totalResources: enhancedPlan.totalResources,
728
807
  totalClosures: enhancedPlan.totalClosures,
@@ -731,7 +810,7 @@ export class DirectDeploymentEngine {
731
810
  averageTimePerResource: enhancedPlan.totalResources > 0 ? Math.round(duration / enhancedPlan.totalResources) : 0,
732
811
  successfulResources: successfulResources.length,
733
812
  failedResources: errors.length,
734
- status
813
+ status,
735
814
  });
736
815
  this.emitEvent(options, {
737
816
  type: status === 'success' ? 'completed' : 'failed',
@@ -804,7 +883,7 @@ export class DirectDeploymentEngine {
804
883
  const resourceLogger = this.logger.child({
805
884
  resourceId,
806
885
  kind: resource.kind,
807
- name: resource.metadata?.name
886
+ name: resource.metadata?.name,
808
887
  });
809
888
  resourceLogger.debug('Starting single resource deployment');
810
889
  this.emitEvent(options, {
@@ -817,7 +896,7 @@ export class DirectDeploymentEngine {
817
896
  let resolvedResource;
818
897
  try {
819
898
  resourceLogger.debug('Resolving resource references', {
820
- originalMetadata: resource.metadata
899
+ originalMetadata: resource.metadata,
821
900
  });
822
901
  const resolveTimeout = options.timeout || 30000;
823
902
  resolvedResource = (await Promise.race([
@@ -826,7 +905,7 @@ export class DirectDeploymentEngine {
826
905
  ]));
827
906
  resourceLogger.debug('References resolved successfully', {
828
907
  resolvedMetadata: resolvedResource.metadata,
829
- hasReadinessEvaluator: !!resolvedResource.readinessEvaluator
908
+ hasReadinessEvaluator: !!resolvedResource.readinessEvaluator,
830
909
  });
831
910
  }
832
911
  catch (error) {
@@ -834,11 +913,13 @@ export class DirectDeploymentEngine {
834
913
  resolvedResource = resource;
835
914
  }
836
915
  // 2. Apply namespace if specified, but only if resource doesn't already have one
837
- if (options.namespace && resolvedResource.metadata && typeof resolvedResource.metadata.namespace !== 'string') {
916
+ if (options.namespace &&
917
+ resolvedResource.metadata &&
918
+ typeof resolvedResource.metadata.namespace !== 'string') {
838
919
  resourceLogger.debug('Applying namespace from deployment options', {
839
920
  targetNamespace: options.namespace,
840
921
  currentNamespace: resolvedResource.metadata.namespace,
841
- currentNamespaceType: typeof resolvedResource.metadata.namespace
922
+ currentNamespaceType: typeof resolvedResource.metadata.namespace,
842
923
  });
843
924
  // Create a completely new metadata object to avoid proxy issues
844
925
  const newMetadata = {
@@ -857,7 +938,7 @@ export class DirectDeploymentEngine {
857
938
  value: readinessEvaluator,
858
939
  enumerable: false,
859
940
  configurable: true,
860
- writable: false
941
+ writable: false,
861
942
  });
862
943
  }
863
944
  resolvedResource = newResolvedResource;
@@ -923,7 +1004,7 @@ export class DirectDeploymentEngine {
923
1004
  appliedName: appliedResource.metadata?.name,
924
1005
  appliedNamespace: appliedResource.metadata?.namespace,
925
1006
  operation: existing ? 'patched' : 'created',
926
- attempt
1007
+ attempt,
927
1008
  });
928
1009
  // Success - break out of retry loop
929
1010
  break;
@@ -940,10 +1021,10 @@ export class DirectDeploymentEngine {
940
1021
  resourceLogger.debug('Retrying resource deployment', {
941
1022
  attempt: attempt + 1,
942
1023
  maxRetries: retryPolicy.maxRetries,
943
- delay
1024
+ delay,
944
1025
  });
945
1026
  // Wait before retrying
946
- await new Promise(resolve => setTimeout(resolve, delay));
1027
+ await new Promise((resolve) => setTimeout(resolve, delay));
947
1028
  }
948
1029
  }
949
1030
  }
@@ -1018,7 +1099,8 @@ export class DirectDeploymentEngine {
1018
1099
  this.emitEvent(options, {
1019
1100
  type: 'resource-ready',
1020
1101
  resourceId: deployedResource.id,
1021
- message: result.message || `${deployedResource.kind}/${deployedResource.name} ready (custom evaluator)`,
1102
+ message: result.message ||
1103
+ `${deployedResource.kind}/${deployedResource.name} ready (custom evaluator)`,
1022
1104
  timestamp: new Date(),
1023
1105
  });
1024
1106
  return;
@@ -1034,7 +1116,7 @@ export class DirectDeploymentEngine {
1034
1116
  });
1035
1117
  }
1036
1118
  // Wait before next check
1037
- await new Promise(resolve => setTimeout(resolve, 2000));
1119
+ await new Promise((resolve) => setTimeout(resolve, 2000));
1038
1120
  }
1039
1121
  catch (error) {
1040
1122
  // Emit error status event
@@ -1045,7 +1127,7 @@ export class DirectDeploymentEngine {
1045
1127
  timestamp: new Date(),
1046
1128
  });
1047
1129
  // If we can't read the resource, it's not ready yet
1048
- await new Promise(resolve => setTimeout(resolve, 2000));
1130
+ await new Promise((resolve) => setTimeout(resolve, 2000));
1049
1131
  }
1050
1132
  }
1051
1133
  // Timeout reached
@@ -1089,7 +1171,7 @@ export class DirectDeploymentEngine {
1089
1171
  error: error,
1090
1172
  resourceId: resource.id,
1091
1173
  kind: resource.kind,
1092
- name: resource.name
1174
+ name: resource.name,
1093
1175
  });
1094
1176
  errors.push({
1095
1177
  resourceId: resource.id,
@@ -1134,7 +1216,7 @@ export class DirectDeploymentEngine {
1134
1216
  const deleteLogger = this.logger.child({
1135
1217
  resourceId: resource.id,
1136
1218
  kind: resource.kind,
1137
- name: resource.name
1219
+ name: resource.name,
1138
1220
  });
1139
1221
  try {
1140
1222
  await this.k8sApi.delete({
@@ -1194,8 +1276,7 @@ export class DirectDeploymentEngine {
1194
1276
  }
1195
1277
  try {
1196
1278
  const { rolledBackResources, errors } = await this.rollbackDeployedResources(deploymentRecord.resources, deploymentRecord.options);
1197
- const status = errors.length === 0 ? 'success' :
1198
- rolledBackResources.length > 0 ? 'partial' : 'failed';
1279
+ const status = errors.length === 0 ? 'success' : rolledBackResources.length > 0 ? 'partial' : 'failed';
1199
1280
  return {
1200
1281
  deploymentId,
1201
1282
  rolledBackResources,
@@ -1211,12 +1292,14 @@ export class DirectDeploymentEngine {
1211
1292
  rolledBackResources: [],
1212
1293
  duration: Date.now() - startTime,
1213
1294
  status: 'failed',
1214
- errors: [{
1295
+ errors: [
1296
+ {
1215
1297
  resourceId: deploymentId,
1216
1298
  phase: 'rollback',
1217
1299
  error: error,
1218
1300
  timestamp: new Date(),
1219
- }],
1301
+ },
1302
+ ],
1220
1303
  };
1221
1304
  }
1222
1305
  }
@@ -1235,8 +1318,11 @@ export class DirectDeploymentEngine {
1235
1318
  }
1236
1319
  const result = {
1237
1320
  deploymentId,
1238
- status: deploymentRecord.status === 'completed' ? 'completed' :
1239
- deploymentRecord.status === 'failed' ? 'failed' : 'running',
1321
+ status: deploymentRecord.status === 'completed'
1322
+ ? 'completed'
1323
+ : deploymentRecord.status === 'failed'
1324
+ ? 'failed'
1325
+ : 'running',
1240
1326
  startTime: deploymentRecord.startTime,
1241
1327
  resources: deploymentRecord.resources,
1242
1328
  };
@@ -1268,27 +1354,20 @@ export class DirectDeploymentEngine {
1268
1354
  if (!crdName) {
1269
1355
  logger.warn('Could not determine CRD name for custom resource', {
1270
1356
  kind: resource.kind,
1271
- apiVersion: resource.apiVersion
1357
+ apiVersion: resource.apiVersion,
1272
1358
  });
1273
1359
  return;
1274
1360
  }
1275
1361
  logger.debug('Custom resource detected, waiting for CRD establishment', {
1276
1362
  resourceKind: resource.kind,
1277
- crdName
1363
+ crdName,
1278
1364
  });
1279
1365
  await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
1280
1366
  logger.debug('CRD established, proceeding with custom resource deployment', {
1281
1367
  resourceKind: resource.kind,
1282
- crdName
1368
+ crdName,
1283
1369
  });
1284
1370
  }
1285
- /**
1286
- * Check if a resource is a CustomResourceDefinition
1287
- */
1288
- isCRD(resource) {
1289
- return resource.kind === 'CustomResourceDefinition' &&
1290
- resource.apiVersion?.includes('apiextensions.k8s.io');
1291
- }
1292
1371
  /**
1293
1372
  * Check if a resource is a custom resource (not a built-in Kubernetes resource)
1294
1373
  */
@@ -1319,7 +1398,7 @@ export class DirectDeploymentEngine {
1319
1398
  'events.k8s.io/v1',
1320
1399
  'flowcontrol.apiserver.k8s.io/v1beta3',
1321
1400
  'node.k8s.io/v1',
1322
- 'scheduling.k8s.io/v1'
1401
+ 'scheduling.k8s.io/v1',
1323
1402
  ];
1324
1403
  return !builtInApiGroups.includes(resource.apiVersion);
1325
1404
  }
@@ -1346,8 +1425,7 @@ export class DirectDeploymentEngine {
1346
1425
  // Look for a CRD that matches our group and kind
1347
1426
  const matchingCrd = crds.body?.items?.find((crd) => {
1348
1427
  const crdSpec = crd.spec;
1349
- return crdSpec?.group === group &&
1350
- crdSpec?.names?.kind === resource.kind;
1428
+ return crdSpec?.group === group && crdSpec?.names?.kind === resource.kind;
1351
1429
  });
1352
1430
  if (matchingCrd) {
1353
1431
  return matchingCrd.metadata?.name;
@@ -1362,6 +1440,17 @@ export class DirectDeploymentEngine {
1362
1440
  const plural = kind.endsWith('s') ? kind : `${kind}s`;
1363
1441
  return `${plural}.${group}`;
1364
1442
  }
1443
+ /**
1444
+ * Public method to wait for CRD readiness by name
1445
+ */
1446
+ async waitForCRDReady(crdName, timeout = 300000) {
1447
+ const logger = this.logger.child({ crdName, timeout });
1448
+ const options = {
1449
+ mode: this.deploymentMode,
1450
+ timeout,
1451
+ };
1452
+ await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
1453
+ }
1365
1454
  /**
1366
1455
  * Wait for a CRD to be established in the cluster
1367
1456
  */
@@ -1377,7 +1466,7 @@ export class DirectDeploymentEngine {
1377
1466
  const crdStatus = await this.k8sApi.read({
1378
1467
  apiVersion: 'apiextensions.k8s.io/v1',
1379
1468
  kind: 'CustomResourceDefinition',
1380
- metadata: { name: crdName } // CRDs are cluster-scoped, no namespace needed
1469
+ metadata: { name: crdName }, // CRDs are cluster-scoped, no namespace needed
1381
1470
  });
1382
1471
  const conditions = crdStatus.body?.status?.conditions || [];
1383
1472
  const establishedCondition = conditions.find((c) => c.type === 'Established');
@@ -1387,7 +1476,7 @@ export class DirectDeploymentEngine {
1387
1476
  }
1388
1477
  logger.debug('CRD exists but not yet established, waiting...', {
1389
1478
  crdName,
1390
- establishedStatus: establishedCondition?.status || 'unknown'
1479
+ establishedStatus: establishedCondition?.status || 'unknown',
1391
1480
  });
1392
1481
  }
1393
1482
  catch (error) {
@@ -1395,11 +1484,11 @@ export class DirectDeploymentEngine {
1395
1484
  // This is expected in scenarios where closures install CRDs
1396
1485
  logger.debug('CRD not found yet, waiting for it to be created...', {
1397
1486
  crdName,
1398
- error: error.message
1487
+ error: error.message,
1399
1488
  });
1400
1489
  }
1401
1490
  // Wait before next poll
1402
- await new Promise(resolve => setTimeout(resolve, pollInterval));
1491
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
1403
1492
  }
1404
1493
  // Timeout reached
1405
1494
  throw new Error(`Timeout waiting for CRD ${crdName} to be established after ${timeout}ms`);