typekro 0.8.0 → 0.10.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 (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/deployers.d.ts +16 -1
  3. package/dist/alchemy/deployers.d.ts.map +1 -1
  4. package/dist/alchemy/deployers.js +131 -18
  5. package/dist/alchemy/deployers.js.map +1 -1
  6. package/dist/alchemy/deployment.d.ts +1 -1
  7. package/dist/alchemy/deployment.d.ts.map +1 -1
  8. package/dist/alchemy/deployment.js +1 -1
  9. package/dist/alchemy/deployment.js.map +1 -1
  10. package/dist/alchemy/kro-delete.d.ts +66 -0
  11. package/dist/alchemy/kro-delete.d.ts.map +1 -0
  12. package/dist/alchemy/kro-delete.js +183 -0
  13. package/dist/alchemy/kro-delete.js.map +1 -0
  14. package/dist/alchemy/resource-registration.d.ts +16 -0
  15. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  16. package/dist/alchemy/resource-registration.js +138 -24
  17. package/dist/alchemy/resource-registration.js.map +1 -1
  18. package/dist/alchemy/types.d.ts +8 -4
  19. package/dist/alchemy/types.d.ts.map +1 -1
  20. package/dist/aspects.d.ts +3 -0
  21. package/dist/aspects.d.ts.map +1 -0
  22. package/dist/aspects.js +2 -0
  23. package/dist/aspects.js.map +1 -0
  24. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
  25. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  26. package/dist/compositions/typekro-runtime/typekro-runtime.js +27 -9
  27. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
  28. package/dist/core/aspects/apply.d.ts +30 -0
  29. package/dist/core/aspects/apply.d.ts.map +1 -0
  30. package/dist/core/aspects/apply.js +369 -0
  31. package/dist/core/aspects/apply.js.map +1 -0
  32. package/dist/core/aspects/dev-aspects.d.ts +14 -0
  33. package/dist/core/aspects/dev-aspects.d.ts.map +1 -0
  34. package/dist/core/aspects/dev-aspects.js +70 -0
  35. package/dist/core/aspects/dev-aspects.js.map +1 -0
  36. package/dist/core/aspects/index.d.ts +31 -0
  37. package/dist/core/aspects/index.d.ts.map +1 -0
  38. package/dist/core/aspects/index.js +30 -0
  39. package/dist/core/aspects/index.js.map +1 -0
  40. package/dist/core/aspects/metadata-aspects.d.ts +12 -0
  41. package/dist/core/aspects/metadata-aspects.d.ts.map +1 -0
  42. package/dist/core/aspects/metadata-aspects.js +24 -0
  43. package/dist/core/aspects/metadata-aspects.js.map +1 -0
  44. package/dist/core/aspects/metadata.d.ts +16 -0
  45. package/dist/core/aspects/metadata.d.ts.map +1 -0
  46. package/dist/core/aspects/metadata.js +24 -0
  47. package/dist/core/aspects/metadata.js.map +1 -0
  48. package/dist/core/aspects/primitives.d.ts +23 -0
  49. package/dist/core/aspects/primitives.d.ts.map +1 -0
  50. package/dist/core/aspects/primitives.js +258 -0
  51. package/dist/core/aspects/primitives.js.map +1 -0
  52. package/dist/core/aspects/targets.d.ts +9 -0
  53. package/dist/core/aspects/targets.d.ts.map +1 -0
  54. package/dist/core/aspects/targets.js +23 -0
  55. package/dist/core/aspects/targets.js.map +1 -0
  56. package/dist/core/aspects/types.d.ts +361 -0
  57. package/dist/core/aspects/types.d.ts.map +1 -0
  58. package/dist/core/aspects/types.js +16 -0
  59. package/dist/core/aspects/types.js.map +1 -0
  60. package/dist/core/aspects/workload-aspects.d.ts +17 -0
  61. package/dist/core/aspects/workload-aspects.d.ts.map +1 -0
  62. package/dist/core/aspects/workload-aspects.js +40 -0
  63. package/dist/core/aspects/workload-aspects.js.map +1 -0
  64. package/dist/core/composition/context.d.ts +58 -2
  65. package/dist/core/composition/context.d.ts.map +1 -1
  66. package/dist/core/composition/context.js +4 -0
  67. package/dist/core/composition/context.js.map +1 -1
  68. package/dist/core/composition/imperative.d.ts +9 -0
  69. package/dist/core/composition/imperative.d.ts.map +1 -1
  70. package/dist/core/composition/imperative.js +538 -54
  71. package/dist/core/composition/imperative.js.map +1 -1
  72. package/dist/core/composition/nested-status-cel.d.ts +34 -1
  73. package/dist/core/composition/nested-status-cel.d.ts.map +1 -1
  74. package/dist/core/composition/nested-status-cel.js +379 -41
  75. package/dist/core/composition/nested-status-cel.js.map +1 -1
  76. package/dist/core/composition-debugger.d.ts +1 -1
  77. package/dist/core/composition-debugger.d.ts.map +1 -1
  78. package/dist/core/composition-debugger.js.map +1 -1
  79. package/dist/core/constants/brands.d.ts +1 -1
  80. package/dist/core/constants/brands.d.ts.map +1 -1
  81. package/dist/core/constants/brands.js +1 -1
  82. package/dist/core/constants/brands.js.map +1 -1
  83. package/dist/core/containers/build.d.ts.map +1 -1
  84. package/dist/core/containers/build.js +40 -12
  85. package/dist/core/containers/build.js.map +1 -1
  86. package/dist/core/dependencies/resolver.d.ts +19 -0
  87. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  88. package/dist/core/dependencies/resolver.js +261 -1
  89. package/dist/core/dependencies/resolver.js.map +1 -1
  90. package/dist/core/deployment/client-provider-manager.d.ts +9 -3
  91. package/dist/core/deployment/client-provider-manager.d.ts.map +1 -1
  92. package/dist/core/deployment/client-provider-manager.js +12 -0
  93. package/dist/core/deployment/client-provider-manager.js.map +1 -1
  94. package/dist/core/deployment/crd-manager.d.ts +24 -0
  95. package/dist/core/deployment/crd-manager.d.ts.map +1 -1
  96. package/dist/core/deployment/crd-manager.js +79 -1
  97. package/dist/core/deployment/crd-manager.js.map +1 -1
  98. package/dist/core/deployment/deployment-state-discovery.d.ts +116 -0
  99. package/dist/core/deployment/deployment-state-discovery.d.ts.map +1 -0
  100. package/dist/core/deployment/deployment-state-discovery.js +400 -0
  101. package/dist/core/deployment/deployment-state-discovery.js.map +1 -0
  102. package/dist/core/deployment/direct-factory.d.ts +65 -6
  103. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  104. package/dist/core/deployment/direct-factory.js +584 -62
  105. package/dist/core/deployment/direct-factory.js.map +1 -1
  106. package/dist/core/deployment/engine.d.ts +64 -3
  107. package/dist/core/deployment/engine.d.ts.map +1 -1
  108. package/dist/core/deployment/engine.js +194 -27
  109. package/dist/core/deployment/engine.js.map +1 -1
  110. package/dist/core/deployment/event-filter.js +1 -1
  111. package/dist/core/deployment/event-filter.js.map +1 -1
  112. package/dist/core/deployment/event-monitor.d.ts +11 -0
  113. package/dist/core/deployment/event-monitor.d.ts.map +1 -1
  114. package/dist/core/deployment/event-monitor.js +14 -0
  115. package/dist/core/deployment/event-monitor.js.map +1 -1
  116. package/dist/core/deployment/handle-tracing.d.ts +14 -0
  117. package/dist/core/deployment/handle-tracing.d.ts.map +1 -0
  118. package/dist/core/deployment/handle-tracing.js +38 -0
  119. package/dist/core/deployment/handle-tracing.js.map +1 -0
  120. package/dist/core/deployment/kro-factory.d.ts +115 -3
  121. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  122. package/dist/core/deployment/kro-factory.js +922 -278
  123. package/dist/core/deployment/kro-factory.js.map +1 -1
  124. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  125. package/dist/core/deployment/kro-readiness.js +21 -12
  126. package/dist/core/deployment/kro-readiness.js.map +1 -1
  127. package/dist/core/deployment/nested-composition-status.d.ts +1 -1
  128. package/dist/core/deployment/nested-composition-status.d.ts.map +1 -1
  129. package/dist/core/deployment/nested-composition-status.js +96 -53
  130. package/dist/core/deployment/nested-composition-status.js.map +1 -1
  131. package/dist/core/deployment/resource-applier.d.ts +15 -2
  132. package/dist/core/deployment/resource-applier.d.ts.map +1 -1
  133. package/dist/core/deployment/resource-applier.js +75 -25
  134. package/dist/core/deployment/resource-applier.js.map +1 -1
  135. package/dist/core/deployment/resource-tagging.d.ts +220 -0
  136. package/dist/core/deployment/resource-tagging.d.ts.map +1 -0
  137. package/dist/core/deployment/resource-tagging.js +292 -0
  138. package/dist/core/deployment/resource-tagging.js.map +1 -0
  139. package/dist/core/deployment/rollback-manager.d.ts +25 -4
  140. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  141. package/dist/core/deployment/rollback-manager.js +70 -57
  142. package/dist/core/deployment/rollback-manager.js.map +1 -1
  143. package/dist/core/deployment/shared-utilities.d.ts +6 -0
  144. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  145. package/dist/core/deployment/shared-utilities.js +32 -2
  146. package/dist/core/deployment/shared-utilities.js.map +1 -1
  147. package/dist/core/deployment/singleton-owner-drift.d.ts +16 -0
  148. package/dist/core/deployment/singleton-owner-drift.d.ts.map +1 -0
  149. package/dist/core/deployment/singleton-owner-drift.js +54 -0
  150. package/dist/core/deployment/singleton-owner-drift.js.map +1 -0
  151. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +3 -1
  152. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
  153. package/dist/core/deployment/strategies/alchemy-strategy.js +121 -18
  154. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
  155. package/dist/core/deployment/strategies/base-strategy.d.ts +9 -3
  156. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  157. package/dist/core/deployment/strategies/base-strategy.js +32 -4
  158. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  159. package/dist/core/deployment/strategies/direct-strategy.d.ts +12 -4
  160. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  161. package/dist/core/deployment/strategies/direct-strategy.js +112 -8
  162. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  163. package/dist/core/errors.d.ts +2 -2
  164. package/dist/core/errors.d.ts.map +1 -1
  165. package/dist/core/errors.js.map +1 -1
  166. package/dist/core/expressions/analysis/cache.d.ts +2 -2
  167. package/dist/core/expressions/analysis/cache.d.ts.map +1 -1
  168. package/dist/core/expressions/analysis/cache.js +4 -0
  169. package/dist/core/expressions/analysis/cache.js.map +1 -1
  170. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts.map +1 -1
  171. package/dist/core/expressions/analysis/fn-toString-self-test.js +0 -1
  172. package/dist/core/expressions/analysis/fn-toString-self-test.js.map +1 -1
  173. package/dist/core/expressions/analysis/shared-types.d.ts +2 -2
  174. package/dist/core/expressions/analysis/shared-types.d.ts.map +1 -1
  175. package/dist/core/expressions/analysis/source-map.d.ts.map +1 -1
  176. package/dist/core/expressions/analysis/source-map.js +1 -0
  177. package/dist/core/expressions/analysis/source-map.js.map +1 -1
  178. package/dist/core/expressions/analysis/types.d.ts +7 -7
  179. package/dist/core/expressions/analysis/types.d.ts.map +1 -1
  180. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +29 -1
  181. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
  182. package/dist/core/expressions/composition/composition-analyzer-helpers.js +348 -17
  183. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
  184. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +2 -2
  185. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
  186. package/dist/core/expressions/composition/composition-analyzer-ternary.js +221 -10
  187. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
  188. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
  189. package/dist/core/expressions/composition/composition-analyzer-traversal.js +67 -2
  190. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
  191. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +52 -0
  192. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
  193. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
  194. package/dist/core/expressions/composition/composition-analyzer.js +150 -6
  195. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
  196. package/dist/core/expressions/composition/expression-analyzer.d.ts.map +1 -1
  197. package/dist/core/expressions/composition/expression-analyzer.js +21 -4
  198. package/dist/core/expressions/composition/expression-analyzer.js.map +1 -1
  199. package/dist/core/expressions/composition/imperative-analyzer.d.ts +1 -1
  200. package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
  201. package/dist/core/expressions/composition/imperative-analyzer.js +31 -7
  202. package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
  203. package/dist/core/expressions/composition/scope-manager.d.ts +2 -2
  204. package/dist/core/expressions/composition/scope-manager.d.ts.map +1 -1
  205. package/dist/core/expressions/composition/scope-manager.js.map +1 -1
  206. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts +3 -3
  207. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts.map +1 -1
  208. package/dist/core/expressions/conditional/conditional-expression-processor.js.map +1 -1
  209. package/dist/core/expressions/conditional/conditional-integration.d.ts.map +1 -1
  210. package/dist/core/expressions/conditional/conditional-integration.js.map +1 -1
  211. package/dist/core/expressions/context/context-aware-generator.d.ts +5 -5
  212. package/dist/core/expressions/context/context-aware-generator.d.ts.map +1 -1
  213. package/dist/core/expressions/context/context-aware-generator.js.map +1 -1
  214. package/dist/core/expressions/context/context-detector.d.ts +3 -3
  215. package/dist/core/expressions/context/context-detector.d.ts.map +1 -1
  216. package/dist/core/expressions/context/context-detector.js.map +1 -1
  217. package/dist/core/expressions/context/context-validator.d.ts +6 -6
  218. package/dist/core/expressions/context/context-validator.d.ts.map +1 -1
  219. package/dist/core/expressions/context/context-validator.js +2 -2
  220. package/dist/core/expressions/context/context-validator.js.map +1 -1
  221. package/dist/core/expressions/factory/cel-conversion-engine.d.ts +4 -4
  222. package/dist/core/expressions/factory/cel-conversion-engine.d.ts.map +1 -1
  223. package/dist/core/expressions/factory/cel-conversion-engine.js.map +1 -1
  224. package/dist/core/expressions/factory/dependency-tracker.d.ts +2 -2
  225. package/dist/core/expressions/factory/dependency-tracker.d.ts.map +1 -1
  226. package/dist/core/expressions/factory/dependency-tracker.js +21 -5
  227. package/dist/core/expressions/factory/dependency-tracker.js.map +1 -1
  228. package/dist/core/expressions/factory/factory-integration.d.ts +2 -4
  229. package/dist/core/expressions/factory/factory-integration.d.ts.map +1 -1
  230. package/dist/core/expressions/factory/factory-integration.js +0 -6
  231. package/dist/core/expressions/factory/factory-integration.js.map +1 -1
  232. package/dist/core/expressions/factory/factory-pattern-handler.d.ts +3 -3
  233. package/dist/core/expressions/factory/factory-pattern-handler.d.ts.map +1 -1
  234. package/dist/core/expressions/factory/factory-pattern-handler.js +1 -0
  235. package/dist/core/expressions/factory/factory-pattern-handler.js.map +1 -1
  236. package/dist/core/expressions/factory/migration-helpers.js.map +1 -1
  237. package/dist/core/expressions/factory/resource-analyzer.d.ts +4 -4
  238. package/dist/core/expressions/factory/resource-analyzer.d.ts.map +1 -1
  239. package/dist/core/expressions/factory/resource-analyzer.js.map +1 -1
  240. package/dist/core/expressions/factory/resource-type-validator.d.ts +5 -5
  241. package/dist/core/expressions/factory/resource-type-validator.d.ts.map +1 -1
  242. package/dist/core/expressions/factory/resource-type-validator.js.map +1 -1
  243. package/dist/core/expressions/factory/status-builder-analyzer.d.ts +6 -7
  244. package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -1
  245. package/dist/core/expressions/factory/status-builder-analyzer.js +0 -3
  246. package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -1
  247. package/dist/core/expressions/factory/status-builder-types.d.ts +1 -1
  248. package/dist/core/expressions/factory/status-builder-types.d.ts.map +1 -1
  249. package/dist/core/expressions/factory/status-cel-generation.d.ts +1 -1
  250. package/dist/core/expressions/factory/status-cel-generation.d.ts.map +1 -1
  251. package/dist/core/expressions/factory/status-cel-generation.js +1 -1
  252. package/dist/core/expressions/factory/status-cel-generation.js.map +1 -1
  253. package/dist/core/expressions/factory/status-field-analysis.d.ts +3 -3
  254. package/dist/core/expressions/factory/status-field-analysis.d.ts.map +1 -1
  255. package/dist/core/expressions/factory/status-field-analysis.js.map +1 -1
  256. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts +5 -5
  257. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts.map +1 -1
  258. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js +1 -1
  259. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js.map +1 -1
  260. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts +10 -10
  261. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts.map +1 -1
  262. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js +5 -1
  263. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js.map +1 -1
  264. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts +2 -2
  265. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts.map +1 -1
  266. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js.map +1 -1
  267. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts +5 -5
  268. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts.map +1 -1
  269. package/dist/core/expressions/magic-proxy/magic-proxy-detector.js.map +1 -1
  270. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts +2 -2
  271. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts.map +1 -1
  272. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts +1 -2
  273. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts.map +1 -1
  274. package/dist/core/expressions/magic-proxy/optionality-handler.js +2 -15
  275. package/dist/core/expressions/magic-proxy/optionality-handler.js.map +1 -1
  276. package/dist/core/expressions/validation/compile-time-checker.d.ts +1 -1
  277. package/dist/core/expressions/validation/compile-time-checker.d.ts.map +1 -1
  278. package/dist/core/expressions/validation/compile-time-checker.js.map +1 -1
  279. package/dist/core/expressions/validation/compile-time-types.d.ts +2 -2
  280. package/dist/core/expressions/validation/compile-time-types.d.ts.map +1 -1
  281. package/dist/core/expressions/validation/kubernetes-field-types.d.ts +4 -4
  282. package/dist/core/expressions/validation/kubernetes-field-types.d.ts.map +1 -1
  283. package/dist/core/expressions/validation/kubernetes-field-types.js.map +1 -1
  284. package/dist/core/expressions/validation/resource-field-utils.d.ts +10 -10
  285. package/dist/core/expressions/validation/resource-field-utils.d.ts.map +1 -1
  286. package/dist/core/expressions/validation/resource-field-utils.js.map +1 -1
  287. package/dist/core/expressions/validation/resource-validation.d.ts +3 -3
  288. package/dist/core/expressions/validation/resource-validation.d.ts.map +1 -1
  289. package/dist/core/expressions/validation/resource-validation.js.map +1 -1
  290. package/dist/core/expressions/validation/type-inference-types.d.ts +2 -2
  291. package/dist/core/expressions/validation/type-inference-types.d.ts.map +1 -1
  292. package/dist/core/expressions/validation/type-safety.d.ts +2 -2
  293. package/dist/core/expressions/validation/type-safety.d.ts.map +1 -1
  294. package/dist/core/expressions/validation/type-safety.js +1 -0
  295. package/dist/core/expressions/validation/type-safety.js.map +1 -1
  296. package/dist/core/kubernetes/bun-api-client.js.map +1 -1
  297. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
  298. package/dist/core/kubernetes/bun-http-library.js +29 -3
  299. package/dist/core/kubernetes/bun-http-library.js.map +1 -1
  300. package/dist/core/kubernetes/client-provider.d.ts +12 -0
  301. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  302. package/dist/core/kubernetes/client-provider.js +35 -0
  303. package/dist/core/kubernetes/client-provider.js.map +1 -1
  304. package/dist/core/metadata/resource-metadata.d.ts +49 -1
  305. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  306. package/dist/core/metadata/resource-metadata.js.map +1 -1
  307. package/dist/core/proxy/create-resource.d.ts +15 -0
  308. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  309. package/dist/core/proxy/create-resource.js +79 -2
  310. package/dist/core/proxy/create-resource.js.map +1 -1
  311. package/dist/core/readiness/registry.js +2 -2
  312. package/dist/core/readiness/registry.js.map +1 -1
  313. package/dist/core/references/cel-evaluator.d.ts +1 -4
  314. package/dist/core/references/cel-evaluator.d.ts.map +1 -1
  315. package/dist/core/references/cel-evaluator.js +3 -7
  316. package/dist/core/references/cel-evaluator.js.map +1 -1
  317. package/dist/core/references/cel.d.ts +22 -0
  318. package/dist/core/references/cel.d.ts.map +1 -1
  319. package/dist/core/references/cel.js +106 -8
  320. package/dist/core/references/cel.js.map +1 -1
  321. package/dist/core/references/external-refs.d.ts.map +1 -1
  322. package/dist/core/references/external-refs.js +3 -0
  323. package/dist/core/references/external-refs.js.map +1 -1
  324. package/dist/core/references/resolver.d.ts.map +1 -1
  325. package/dist/core/references/resolver.js +28 -17
  326. package/dist/core/references/resolver.js.map +1 -1
  327. package/dist/core/references/schema-proxy.d.ts +18 -10
  328. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  329. package/dist/core/references/schema-proxy.js +174 -23
  330. package/dist/core/references/schema-proxy.js.map +1 -1
  331. package/dist/core/runtime-patches/crd-schema-fix.d.ts.map +1 -1
  332. package/dist/core/runtime-patches/crd-schema-fix.js +4 -1
  333. package/dist/core/runtime-patches/crd-schema-fix.js.map +1 -1
  334. package/dist/core/serialization/cel-optimizer.d.ts.map +1 -1
  335. package/dist/core/serialization/cel-optimizer.js +2 -0
  336. package/dist/core/serialization/cel-optimizer.js.map +1 -1
  337. package/dist/core/serialization/cel-references.d.ts +75 -1
  338. package/dist/core/serialization/cel-references.d.ts.map +1 -1
  339. package/dist/core/serialization/cel-references.js +692 -156
  340. package/dist/core/serialization/cel-references.js.map +1 -1
  341. package/dist/core/serialization/core.d.ts +8 -8
  342. package/dist/core/serialization/core.d.ts.map +1 -1
  343. package/dist/core/serialization/core.js +672 -90
  344. package/dist/core/serialization/core.js.map +1 -1
  345. package/dist/core/serialization/kro-post-processing.d.ts +1 -1
  346. package/dist/core/serialization/kro-post-processing.d.ts.map +1 -1
  347. package/dist/core/serialization/kro-post-processing.js +69 -22
  348. package/dist/core/serialization/kro-post-processing.js.map +1 -1
  349. package/dist/core/serialization/schema.d.ts +1 -0
  350. package/dist/core/serialization/schema.d.ts.map +1 -1
  351. package/dist/core/serialization/schema.js +378 -50
  352. package/dist/core/serialization/schema.js.map +1 -1
  353. package/dist/core/serialization/status-analysis-pipeline.d.ts +1 -1
  354. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
  355. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
  356. package/dist/core/serialization/yaml.d.ts +3 -2
  357. package/dist/core/serialization/yaml.d.ts.map +1 -1
  358. package/dist/core/serialization/yaml.js +385 -55
  359. package/dist/core/serialization/yaml.js.map +1 -1
  360. package/dist/core/singleton/singleton.d.ts +16 -0
  361. package/dist/core/singleton/singleton.d.ts.map +1 -0
  362. package/dist/core/singleton/singleton.js +135 -0
  363. package/dist/core/singleton/singleton.js.map +1 -0
  364. package/dist/core/types/common.d.ts +2 -2
  365. package/dist/core/types/common.d.ts.map +1 -1
  366. package/dist/core/types/composable.d.ts +1 -1
  367. package/dist/core/types/composable.d.ts.map +1 -1
  368. package/dist/core/types/deployment.d.ts +129 -9
  369. package/dist/core/types/deployment.d.ts.map +1 -1
  370. package/dist/core/types/deployment.js +1 -1
  371. package/dist/core/types/deployment.js.map +1 -1
  372. package/dist/core/types/kubernetes.d.ts +25 -17
  373. package/dist/core/types/kubernetes.d.ts.map +1 -1
  374. package/dist/core/types/references.d.ts +1 -1
  375. package/dist/core/types/references.d.ts.map +1 -1
  376. package/dist/core/types/references.js.map +1 -1
  377. package/dist/core/types/resource-graph.d.ts +2 -1
  378. package/dist/core/types/resource-graph.d.ts.map +1 -1
  379. package/dist/core/types/schema.d.ts +1 -1
  380. package/dist/core/types/schema.d.ts.map +1 -1
  381. package/dist/core/types/serialization.d.ts +24 -6
  382. package/dist/core/types/serialization.d.ts.map +1 -1
  383. package/dist/core/validation/cel-validator.d.ts +15 -2
  384. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  385. package/dist/core/validation/cel-validator.js +144 -63
  386. package/dist/core/validation/cel-validator.js.map +1 -1
  387. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts +2 -41
  388. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
  389. package/dist/factories/apisix/compositions/apisix-bootstrap.js +262 -217
  390. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
  391. package/dist/factories/apisix/index.d.ts +2 -2
  392. package/dist/factories/apisix/index.js +2 -2
  393. package/dist/factories/apisix/resources/helm.d.ts +2 -2
  394. package/dist/factories/apisix/resources/helm.d.ts.map +1 -1
  395. package/dist/factories/apisix/resources/helm.js.map +1 -1
  396. package/dist/factories/apisix/types.d.ts +21 -11
  397. package/dist/factories/apisix/types.d.ts.map +1 -1
  398. package/dist/factories/apisix/types.js +106 -4
  399. package/dist/factories/apisix/types.js.map +1 -1
  400. package/dist/factories/apisix/utils/admin-credentials.d.ts +5 -3
  401. package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -1
  402. package/dist/factories/apisix/utils/admin-credentials.js +14 -10
  403. package/dist/factories/apisix/utils/admin-credentials.js.map +1 -1
  404. package/dist/factories/apisix/utils/helm-values-mapper.d.ts.map +1 -1
  405. package/dist/factories/apisix/utils/helm-values-mapper.js +4 -2
  406. package/dist/factories/apisix/utils/helm-values-mapper.js.map +1 -1
  407. package/dist/factories/cert-manager/resources/challenges.js.map +1 -1
  408. package/dist/factories/cert-manager/types.d.ts +3 -3
  409. package/dist/factories/cert-manager/types.d.ts.map +1 -1
  410. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +4 -4
  411. package/dist/factories/cilium/types.d.ts +3 -3
  412. package/dist/factories/cilium/types.d.ts.map +1 -1
  413. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +1 -0
  414. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -1
  415. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +48 -0
  416. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -1
  417. package/dist/factories/cnpg/resources/cluster.js +1 -1
  418. package/dist/factories/cnpg/resources/cluster.js.map +1 -1
  419. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
  420. package/dist/factories/cnpg/resources/helm.js +1 -0
  421. package/dist/factories/cnpg/resources/helm.js.map +1 -1
  422. package/dist/factories/cnpg/resources/pooler.js +1 -1
  423. package/dist/factories/cnpg/resources/pooler.js.map +1 -1
  424. package/dist/factories/cnpg/types.d.ts +9 -8
  425. package/dist/factories/cnpg/types.d.ts.map +1 -1
  426. package/dist/factories/cnpg/types.js +11 -0
  427. package/dist/factories/cnpg/types.js.map +1 -1
  428. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -1
  429. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +153 -41
  430. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -1
  431. package/dist/factories/external-dns/resources/dns-endpoint.js +1 -1
  432. package/dist/factories/external-dns/resources/dns-endpoint.js.map +1 -1
  433. package/dist/factories/external-dns/resources/helm.d.ts +1 -1
  434. package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
  435. package/dist/factories/external-dns/resources/helm.js +17 -10
  436. package/dist/factories/external-dns/resources/helm.js.map +1 -1
  437. package/dist/factories/external-dns/types.d.ts +5 -2
  438. package/dist/factories/external-dns/types.d.ts.map +1 -1
  439. package/dist/factories/external-dns/types.js.map +1 -1
  440. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  441. package/dist/factories/flux/git-repository.js +1 -1
  442. package/dist/factories/flux/git-repository.js.map +1 -1
  443. package/dist/factories/flux/kustomize/kustomization.d.ts +2 -2
  444. package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -1
  445. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +1 -1
  446. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  447. package/dist/factories/flux/kustomize/readiness-evaluators.js +1 -1
  448. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  449. package/dist/factories/helm/helm-release.d.ts +3 -2
  450. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  451. package/dist/factories/helm/helm-release.js +1 -0
  452. package/dist/factories/helm/helm-release.js.map +1 -1
  453. package/dist/factories/helm/helm-repository.d.ts +1 -1
  454. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  455. package/dist/factories/helm/helm-repository.js +6 -4
  456. package/dist/factories/helm/helm-repository.js.map +1 -1
  457. package/dist/factories/helm/readiness-evaluators.d.ts +6 -6
  458. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  459. package/dist/factories/helm/readiness-evaluators.js +15 -9
  460. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  461. package/dist/factories/helm/types.d.ts +5 -1
  462. package/dist/factories/helm/types.d.ts.map +1 -1
  463. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +1 -0
  464. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
  465. package/dist/factories/inngest/compositions/inngest-bootstrap.js +4 -3
  466. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
  467. package/dist/factories/inngest/resources/helm.js +1 -1
  468. package/dist/factories/inngest/resources/helm.js.map +1 -1
  469. package/dist/factories/inngest/types.d.ts +5 -4
  470. package/dist/factories/inngest/types.d.ts.map +1 -1
  471. package/dist/factories/inngest/types.js +2 -0
  472. package/dist/factories/inngest/types.js.map +1 -1
  473. package/dist/factories/kro/kro-custom-resource.js +1 -1
  474. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  475. package/dist/factories/kubernetes/config/config-map.d.ts +2 -2
  476. package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -1
  477. package/dist/factories/kubernetes/config/secret.d.ts +2 -2
  478. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
  479. package/dist/factories/kubernetes/networking/service.js +1 -1
  480. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  481. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  482. package/dist/factories/kubernetes/yaml/yaml-directory.js +9 -0
  483. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  484. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  485. package/dist/factories/kubernetes/yaml/yaml-file.js +9 -0
  486. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  487. package/dist/factories/pebble/resources/helm.js.map +1 -1
  488. package/dist/factories/pebble/types.d.ts +2 -2
  489. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +3 -2
  490. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -1
  491. package/dist/factories/searxng/compositions/searxng-bootstrap.js +205 -167
  492. package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -1
  493. package/dist/factories/searxng/resources/searxng.d.ts +1 -1
  494. package/dist/factories/searxng/resources/searxng.js +1 -1
  495. package/dist/factories/searxng/types.d.ts +5 -4
  496. package/dist/factories/searxng/types.d.ts.map +1 -1
  497. package/dist/factories/searxng/types.js +8 -7
  498. package/dist/factories/searxng/types.js.map +1 -1
  499. package/dist/factories/searxng/utils/settings-builder.d.ts +4 -3
  500. package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -1
  501. package/dist/factories/searxng/utils/settings-builder.js +4 -3
  502. package/dist/factories/searxng/utils/settings-builder.js.map +1 -1
  503. package/dist/factories/simple/config/config-map.d.ts +2 -2
  504. package/dist/factories/simple/config/config-map.d.ts.map +1 -1
  505. package/dist/factories/simple/config/secret.d.ts +2 -2
  506. package/dist/factories/simple/config/secret.d.ts.map +1 -1
  507. package/dist/factories/simple/helm/index.d.ts +1 -1
  508. package/dist/factories/simple/helm/index.d.ts.map +1 -1
  509. package/dist/factories/simple/helm/index.js.map +1 -1
  510. package/dist/factories/simple/index.d.ts +3 -3
  511. package/dist/factories/simple/index.d.ts.map +1 -1
  512. package/dist/factories/simple/storage/persistent-volume.js.map +1 -1
  513. package/dist/factories/simple/types.d.ts +11 -1
  514. package/dist/factories/simple/types.d.ts.map +1 -1
  515. package/dist/factories/simple/workloads/deployment.d.ts +4 -1
  516. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  517. package/dist/factories/simple/workloads/deployment.js +9 -2
  518. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  519. package/dist/factories/simple/workloads/stateful-set.d.ts +4 -1
  520. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
  521. package/dist/factories/simple/workloads/stateful-set.js +6 -2
  522. package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
  523. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +1 -0
  524. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -1
  525. package/dist/factories/valkey/compositions/valkey-bootstrap.js +116 -0
  526. package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -1
  527. package/dist/factories/valkey/resources/valkey.js +1 -1
  528. package/dist/factories/valkey/resources/valkey.js.map +1 -1
  529. package/dist/factories/valkey/types.d.ts +6 -5
  530. package/dist/factories/valkey/types.d.ts.map +1 -1
  531. package/dist/factories/valkey/types.js +10 -0
  532. package/dist/factories/valkey/types.js.map +1 -1
  533. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +90 -6
  534. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
  535. package/dist/factories/webapp/compositions/web-app-with-processing.js +180 -20
  536. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
  537. package/dist/factories/webapp/index.d.ts +3 -4
  538. package/dist/factories/webapp/index.d.ts.map +1 -1
  539. package/dist/factories/webapp/index.js +3 -4
  540. package/dist/factories/webapp/index.js.map +1 -1
  541. package/dist/factories/webapp/types.d.ts +60 -2
  542. package/dist/factories/webapp/types.d.ts.map +1 -1
  543. package/dist/factories/webapp/types.js +80 -3
  544. package/dist/factories/webapp/types.js.map +1 -1
  545. package/dist/index.d.ts +5 -1
  546. package/dist/index.d.ts.map +1 -1
  547. package/dist/index.js +3 -0
  548. package/dist/index.js.map +1 -1
  549. package/dist/shared/brands.d.ts +18 -8
  550. package/dist/shared/brands.d.ts.map +1 -1
  551. package/dist/shared/brands.js +19 -9
  552. package/dist/shared/brands.js.map +1 -1
  553. package/dist/utils/cel-escape.d.ts +12 -0
  554. package/dist/utils/cel-escape.d.ts.map +1 -0
  555. package/dist/utils/cel-escape.js +19 -0
  556. package/dist/utils/cel-escape.js.map +1 -0
  557. package/package.json +7 -2
@@ -190,15 +190,17 @@ export class CRDManager {
190
190
  metadata: { name: crdName },
191
191
  }), abortSignal);
192
192
  const crdItem = crdStatus;
193
+ const deletionTimestamp = crdItem?.metadata?.deletionTimestamp;
193
194
  const conditions = crdItem?.status?.conditions || [];
194
195
  const establishedCondition = conditions.find((c) => c.type === 'Established');
195
- if (establishedCondition?.status === 'True') {
196
+ if (establishedCondition?.status === 'True' && !deletionTimestamp) {
196
197
  logger.debug('CRD exists and is established', { crdName });
197
198
  return;
198
199
  }
199
200
  logger.debug('CRD exists but not yet established, waiting...', {
200
201
  crdName,
201
202
  establishedStatus: establishedCondition?.status || 'unknown',
203
+ deleting: deletionTimestamp !== undefined,
202
204
  });
203
205
  }
204
206
  catch (error) {
@@ -223,5 +225,81 @@ export class CRDManager {
223
225
  }
224
226
  throw new DeploymentTimeoutError(`Timeout waiting for CRD ${crdName} to be established after ${timeout}ms`, 'CustomResourceDefinition', crdName || 'unknown', timeout, 'crd-establishment');
225
227
  }
228
+ /**
229
+ * Wait for a CRD to be created and established, discovered by (group, kind)
230
+ * rather than a pre-computed name.
231
+ *
232
+ * This is the correct path for KRO RGDs because KRO's server-side
233
+ * pluralization may not match any client-side heuristic. For example,
234
+ * already-plural kind names don't get an extra "s" suffix — only
235
+ * the CRD's `spec.names.plural` is authoritative.
236
+ *
237
+ * The method polls the full CRD list looking for one whose
238
+ * `spec.group` and `spec.names.kind` match, then delegates to
239
+ * {@link waitForCRDEstablishment} with the discovered name.
240
+ *
241
+ * @param kind - The resource kind (e.g., "WebAppWithProcessing")
242
+ * @param group - The CRD group (e.g., "kro.run")
243
+ * @param deploymentMode - The deployment mode for logging
244
+ * @param timeout - Max milliseconds to wait for the CRD to exist AND be established
245
+ * @param abortSignal - Optional abort signal for cancellation
246
+ * @throws {DeploymentTimeoutError} if the CRD is never discovered or never becomes Established within the timeout
247
+ */
248
+ async waitForCRDByKindAndGroup(kind, group, deploymentMode, timeout = DEFAULT_CRD_READY_TIMEOUT, abortSignal) {
249
+ const logger = this.logger.child({ kind, group, timeout });
250
+ const startTime = Date.now();
251
+ const pollInterval = DEFAULT_POLL_INTERVAL;
252
+ logger.debug('Discovering CRD by kind and group');
253
+ // Phase 1: discover the CRD's actual name by listing CRDs and matching
254
+ // on (group, kind). KRO creates the CRD asynchronously after the RGD
255
+ // is accepted, so we poll.
256
+ let crdName;
257
+ let plural;
258
+ while (Date.now() - startTime < timeout) {
259
+ if (abortSignal?.aborted) {
260
+ throw new DOMException('Operation aborted', 'AbortError');
261
+ }
262
+ try {
263
+ const crds = await this.withAbortSignal(this.k8sApi.list('apiextensions.k8s.io/v1', 'CustomResourceDefinition'), abortSignal);
264
+ const crdList = crds;
265
+ const match = crdList?.items?.find((crd) => {
266
+ const spec = crd.spec;
267
+ return spec?.group === group && spec?.names?.kind === kind && !crd.metadata?.deletionTimestamp;
268
+ });
269
+ if (match?.metadata?.name && match.spec?.names?.plural) {
270
+ crdName = match.metadata.name;
271
+ plural = match.spec.names.plural;
272
+ logger.debug('CRD discovered', { crdName, plural });
273
+ break;
274
+ }
275
+ }
276
+ catch (error) {
277
+ if (error instanceof DOMException &&
278
+ (error.name === 'AbortError' || error.name === 'TimeoutError')) {
279
+ throw error;
280
+ }
281
+ logger.debug('CRD list failed, retrying...', {
282
+ error: ensureError(error).message,
283
+ });
284
+ }
285
+ try {
286
+ await this.abortableDelay(pollInterval, abortSignal);
287
+ }
288
+ catch (error) {
289
+ if (error instanceof DOMException &&
290
+ (error.name === 'AbortError' || error.name === 'TimeoutError')) {
291
+ throw error;
292
+ }
293
+ }
294
+ }
295
+ if (!crdName || !plural) {
296
+ throw new DeploymentTimeoutError(`Timeout discovering CRD for kind "${kind}" in group "${group}" after ${timeout}ms`, 'CustomResourceDefinition', `${kind}.${group}`, timeout, 'crd-discovery');
297
+ }
298
+ // Phase 2: wait for the discovered CRD to become Established. Pass
299
+ // along the remaining timeout budget so total wait is bounded.
300
+ const remaining = Math.max(timeout - (Date.now() - startTime), pollInterval);
301
+ await this.waitForCRDReady(crdName, deploymentMode, remaining, abortSignal);
302
+ return { crdName, plural };
303
+ }
226
304
  }
227
305
  //# sourceMappingURL=crd-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crd-manager.js","sourceRoot":"","sources":["../../../src/core/deployment/crd-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crd-manager.js","sourceRoot":"","sources":["../../../src/core/deployment/crd-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Deployment State Discovery
3
+ *
4
+ * Reconstructs a DeploymentStateRecord for a factory+instance by querying
5
+ * the cluster for resources labeled with typekro ownership metadata.
6
+ *
7
+ * This module implements the "cluster IS the state" model: there is no
8
+ * separate state backend (ConfigMap, database, etc). Every typekro-managed
9
+ * resource is tagged at deploy time with labels and annotations via
10
+ * {@link applyTypekroTags}, and at delete time we walk the cluster to
11
+ * find those resources and rebuild the graph from their annotations.
12
+ *
13
+ * ## Discovery strategy
14
+ *
15
+ * To cover every GVK a typekro composition might have touched, we:
16
+ *
17
+ * 1. Issue label-filtered list calls against a hardcoded set of
18
+ * built-in GVKs (Deployments, Services, Namespaces, etc.).
19
+ * 2. List all CRDs on the cluster, extract their (group, version, kind,
20
+ * scope) tuples, and issue label-filtered list calls against each.
21
+ * 3. Merge the results.
22
+ *
23
+ * Each list is scoped by a label selector, so even on large clusters the
24
+ * response from a GVK with no matching resources is a near-empty payload.
25
+ * The main cost is the number of list calls, which is bounded by
26
+ * (built-in GVKs) + (CRDs on cluster) — typically 30-150 requests total
27
+ * for a fresh discovery. Requests are issued with bounded parallelism.
28
+ *
29
+ * ## Why not use /apis discovery?
30
+ *
31
+ * The Kubernetes discovery API (`/apis`, `/api/v1`) gives a complete
32
+ * list of API resources, but client-node 1.x doesn't expose a typed
33
+ * helper for walking it, and we'd need to issue one request per group-
34
+ * version anyway to get the `resources[]` list for each. Listing CRDs
35
+ * directly is simpler and covers every custom kind; the hardcoded
36
+ * built-in list covers the rest.
37
+ *
38
+ * ## Graph reconstruction
39
+ *
40
+ * Each discovered resource carries a `typekro.io/depends-on` annotation
41
+ * containing a JSON array of composition-local ids it depends on. We
42
+ * walk the discovered resources twice: first pass adds every id as a
43
+ * graph node, second pass adds edges. Dangling edges (pointing to a
44
+ * resource that no longer exists on the cluster) are silently dropped
45
+ * — that's the expected state after a partial delete.
46
+ */
47
+ import type * as k8s from '@kubernetes/client-node';
48
+ import type { DeploymentStateRecord } from '../types/deployment.js';
49
+ /**
50
+ * GVK tuple used for per-kind list calls.
51
+ *
52
+ * `namespaced` is currently unused — all list calls use a cluster-wide
53
+ * scan (namespace=undefined) because typekro compositions can span
54
+ * multiple namespaces. The field is retained for a planned optimization
55
+ * where namespace-scoped listing could reduce API server load on large
56
+ * clusters by only querying namespaces the factory has touched.
57
+ */
58
+ export interface GvkTarget {
59
+ apiVersion: string;
60
+ kind: string;
61
+ namespaced: boolean;
62
+ }
63
+ /**
64
+ * Built-in Kubernetes GVKs that typekro compositions commonly deploy.
65
+ * Kept intentionally narrow: adding entries here costs one list call
66
+ * per delete, so we only include kinds that are actually used by typekro
67
+ * factories.
68
+ *
69
+ * If a user deploys a built-in kind not on this list (e.g., a
70
+ * NetworkPolicy) and then deletes across processes, the resource will
71
+ * be missed by discovery. The fix is to add it here. A broader
72
+ * solution (full /apis walk) would be a follow-up optimization.
73
+ *
74
+ * With the `knownGvks` hint from the factory (see
75
+ * `discoverDeployedResourcesByInstance`), this list is only used as a
76
+ * fallback when the composition's resource templates are unavailable.
77
+ *
78
+ * Last audited: 2026-04-06.
79
+ */
80
+ export declare const BUILT_IN_GVKS: readonly GvkTarget[];
81
+ /**
82
+ * Enumerate every GVK typekro might need to query on this cluster:
83
+ * hardcoded built-ins + every active CRD version.
84
+ *
85
+ * CRD listing failures (RBAC, transient errors) are logged and the
86
+ * built-in list is returned alone so discovery can still make progress.
87
+ */
88
+ export declare function discoverClusterGvks(k8sApi: k8s.KubernetesObjectApi): Promise<GvkTarget[]>;
89
+ /**
90
+ * Discover the full set of resources belonging to a factory+instance and
91
+ * rebuild a {@link DeploymentStateRecord} ready to feed into
92
+ * {@link DirectDeploymentEngine.rollbackRecord}.
93
+ *
94
+ * Returns `undefined` if no resources match — legitimate state when the
95
+ * instance has already been cleaned up, was never deployed, or was
96
+ * deployed by a typekro version that did not tag resources.
97
+ *
98
+ * Resources are queried cluster-wide (namespace undefined) because
99
+ * typekro compositions can span multiple namespaces (e.g., a webapp
100
+ * composition may deploy operator resources in `cnpg-system` and
101
+ * application resources in `default`). The label selector makes this
102
+ * cheap even on large clusters.
103
+ */
104
+ export declare function discoverDeployedResourcesByInstance(k8sApi: k8s.KubernetesObjectApi, opts: {
105
+ factoryName: string;
106
+ instanceName: string;
107
+ /**
108
+ * GVK hint from the factory's resource templates. When provided,
109
+ * only these kinds are queried — dropping a typical delete from
110
+ * 100+ list calls to 5-10. Falls back to full cluster GVK
111
+ * enumeration when omitted (e.g., bare engine calls without a
112
+ * composition in hand).
113
+ */
114
+ knownGvks?: GvkTarget[];
115
+ }): Promise<DeploymentStateRecord | undefined>;
116
+ //# sourceMappingURL=deployment-state-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-state-discovery.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/deployment-state-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAIpD,OAAO,KAAK,EAAoB,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAatF;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EA6B7C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB;AA4BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB,GACA,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmG5C"}
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Deployment State Discovery
3
+ *
4
+ * Reconstructs a DeploymentStateRecord for a factory+instance by querying
5
+ * the cluster for resources labeled with typekro ownership metadata.
6
+ *
7
+ * This module implements the "cluster IS the state" model: there is no
8
+ * separate state backend (ConfigMap, database, etc). Every typekro-managed
9
+ * resource is tagged at deploy time with labels and annotations via
10
+ * {@link applyTypekroTags}, and at delete time we walk the cluster to
11
+ * find those resources and rebuild the graph from their annotations.
12
+ *
13
+ * ## Discovery strategy
14
+ *
15
+ * To cover every GVK a typekro composition might have touched, we:
16
+ *
17
+ * 1. Issue label-filtered list calls against a hardcoded set of
18
+ * built-in GVKs (Deployments, Services, Namespaces, etc.).
19
+ * 2. List all CRDs on the cluster, extract their (group, version, kind,
20
+ * scope) tuples, and issue label-filtered list calls against each.
21
+ * 3. Merge the results.
22
+ *
23
+ * Each list is scoped by a label selector, so even on large clusters the
24
+ * response from a GVK with no matching resources is a near-empty payload.
25
+ * The main cost is the number of list calls, which is bounded by
26
+ * (built-in GVKs) + (CRDs on cluster) — typically 30-150 requests total
27
+ * for a fresh discovery. Requests are issued with bounded parallelism.
28
+ *
29
+ * ## Why not use /apis discovery?
30
+ *
31
+ * The Kubernetes discovery API (`/apis`, `/api/v1`) gives a complete
32
+ * list of API resources, but client-node 1.x doesn't expose a typed
33
+ * helper for walking it, and we'd need to issue one request per group-
34
+ * version anyway to get the `resources[]` list for each. Listing CRDs
35
+ * directly is simpler and covers every custom kind; the hardcoded
36
+ * built-in list covers the rest.
37
+ *
38
+ * ## Graph reconstruction
39
+ *
40
+ * Each discovered resource carries a `typekro.io/depends-on` annotation
41
+ * containing a JSON array of composition-local ids it depends on. We
42
+ * walk the discovered resources twice: first pass adds every id as a
43
+ * graph node, second pass adds edges. Dangling edges (pointing to a
44
+ * resource that no longer exists on the cluster) are silently dropped
45
+ * — that's the expected state after a partial delete.
46
+ */
47
+ import { DependencyGraph } from '../dependencies/graph.js';
48
+ import { getComponentLogger } from '../logging/index.js';
49
+ import { setMetadataField } from '../metadata/index.js';
50
+ import { buildFactoryInstanceSelector, extractTypekroTags, } from './resource-tagging.js';
51
+ const logger = getComponentLogger('deployment-state-discovery');
52
+ /**
53
+ * Built-in Kubernetes GVKs that typekro compositions commonly deploy.
54
+ * Kept intentionally narrow: adding entries here costs one list call
55
+ * per delete, so we only include kinds that are actually used by typekro
56
+ * factories.
57
+ *
58
+ * If a user deploys a built-in kind not on this list (e.g., a
59
+ * NetworkPolicy) and then deletes across processes, the resource will
60
+ * be missed by discovery. The fix is to add it here. A broader
61
+ * solution (full /apis walk) would be a follow-up optimization.
62
+ *
63
+ * With the `knownGvks` hint from the factory (see
64
+ * `discoverDeployedResourcesByInstance`), this list is only used as a
65
+ * fallback when the composition's resource templates are unavailable.
66
+ *
67
+ * Last audited: 2026-04-06.
68
+ */
69
+ export const BUILT_IN_GVKS = [
70
+ // Core API (v1)
71
+ { apiVersion: 'v1', kind: 'Namespace', namespaced: false },
72
+ { apiVersion: 'v1', kind: 'ConfigMap', namespaced: true },
73
+ { apiVersion: 'v1', kind: 'Secret', namespaced: true },
74
+ { apiVersion: 'v1', kind: 'Service', namespaced: true },
75
+ { apiVersion: 'v1', kind: 'ServiceAccount', namespaced: true },
76
+ { apiVersion: 'v1', kind: 'PersistentVolumeClaim', namespaced: true },
77
+ { apiVersion: 'v1', kind: 'PersistentVolume', namespaced: false },
78
+ // Apps
79
+ { apiVersion: 'apps/v1', kind: 'Deployment', namespaced: true },
80
+ { apiVersion: 'apps/v1', kind: 'StatefulSet', namespaced: true },
81
+ { apiVersion: 'apps/v1', kind: 'DaemonSet', namespaced: true },
82
+ { apiVersion: 'apps/v1', kind: 'ReplicaSet', namespaced: true },
83
+ // Batch
84
+ { apiVersion: 'batch/v1', kind: 'Job', namespaced: true },
85
+ { apiVersion: 'batch/v1', kind: 'CronJob', namespaced: true },
86
+ // Networking
87
+ { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', namespaced: true },
88
+ { apiVersion: 'networking.k8s.io/v1', kind: 'NetworkPolicy', namespaced: true },
89
+ // RBAC
90
+ { apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'Role', namespaced: true },
91
+ { apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'RoleBinding', namespaced: true },
92
+ { apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'ClusterRole', namespaced: false },
93
+ { apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'ClusterRoleBinding', namespaced: false },
94
+ // Autoscaling
95
+ { apiVersion: 'autoscaling/v2', kind: 'HorizontalPodAutoscaler', namespaced: true },
96
+ // Policy
97
+ { apiVersion: 'policy/v1', kind: 'PodDisruptionBudget', namespaced: true },
98
+ ];
99
+ /**
100
+ * Enumerate every GVK typekro might need to query on this cluster:
101
+ * hardcoded built-ins + every active CRD version.
102
+ *
103
+ * CRD listing failures (RBAC, transient errors) are logged and the
104
+ * built-in list is returned alone so discovery can still make progress.
105
+ */
106
+ export async function discoverClusterGvks(k8sApi) {
107
+ const targets = [...BUILT_IN_GVKS];
108
+ try {
109
+ const crdList = (await k8sApi.list('apiextensions.k8s.io/v1', 'CustomResourceDefinition'));
110
+ for (const crd of crdList.items ?? []) {
111
+ const crdTargets = gvkTargetsFromCrd(crd);
112
+ targets.push(...crdTargets);
113
+ }
114
+ }
115
+ catch (err) {
116
+ logger.warn('Failed to list CRDs during discovery — proceeding with built-in GVKs only', { error: err instanceof Error ? err.message : String(err) });
117
+ }
118
+ return targets;
119
+ }
120
+ /**
121
+ * Extract GVK targets from a single CRD. A CRD may have multiple served
122
+ * versions; we include each served version as its own target because
123
+ * older resources may still exist at a non-storage version.
124
+ */
125
+ function gvkTargetsFromCrd(crd) {
126
+ const group = crd.spec?.group;
127
+ const kind = crd.spec?.names?.kind;
128
+ // CRD spec.scope is "Namespaced" | "Cluster". The typed interface in
129
+ // typekro has [key: string]: unknown on spec, so cast to read it.
130
+ const scope = crd.spec?.scope;
131
+ if (!group || !kind)
132
+ return [];
133
+ const versions = crd.spec?.versions ?? [];
134
+ const namespaced = scope !== 'Cluster';
135
+ const targets = [];
136
+ for (const v of versions) {
137
+ if (!v.served || !v.name)
138
+ continue;
139
+ targets.push({
140
+ apiVersion: `${group}/${v.name}`,
141
+ kind,
142
+ namespaced,
143
+ });
144
+ }
145
+ return targets;
146
+ }
147
+ /**
148
+ * Discover the full set of resources belonging to a factory+instance and
149
+ * rebuild a {@link DeploymentStateRecord} ready to feed into
150
+ * {@link DirectDeploymentEngine.rollbackRecord}.
151
+ *
152
+ * Returns `undefined` if no resources match — legitimate state when the
153
+ * instance has already been cleaned up, was never deployed, or was
154
+ * deployed by a typekro version that did not tag resources.
155
+ *
156
+ * Resources are queried cluster-wide (namespace undefined) because
157
+ * typekro compositions can span multiple namespaces (e.g., a webapp
158
+ * composition may deploy operator resources in `cnpg-system` and
159
+ * application resources in `default`). The label selector makes this
160
+ * cheap even on large clusters.
161
+ */
162
+ export async function discoverDeployedResourcesByInstance(k8sApi, opts) {
163
+ const labelSelector = buildFactoryInstanceSelector(opts);
164
+ const discoveredGvks = await discoverClusterGvks(k8sApi);
165
+ const gvkTargets = opts.knownGvks?.length
166
+ ? mergeGvkTargets([...opts.knownGvks, ...discoveredGvks])
167
+ : discoveredGvks;
168
+ const usingHint = !!opts.knownGvks?.length;
169
+ logger.debug('Discovering deployed resources by label', {
170
+ factoryName: opts.factoryName,
171
+ instanceName: opts.instanceName,
172
+ gvkCount: gvkTargets.length,
173
+ source: usingHint ? 'knownGvks hint' : 'full cluster enumeration',
174
+ labelSelector,
175
+ });
176
+ // Issue list calls with bounded parallelism. Unbounded parallelism
177
+ // can flood the API server on large clusters; 8 concurrent lists is
178
+ // a reasonable default.
179
+ const discoveryStart = Date.now();
180
+ const matches = await listWithConcurrency(gvkTargets, 8, async (target) => {
181
+ try {
182
+ const result = await k8sApi.list(target.apiVersion, target.kind, undefined, // namespace — cluster-wide scan
183
+ undefined, // pretty
184
+ undefined, // exact (deprecated)
185
+ undefined, // export (deprecated)
186
+ undefined, // fieldSelector
187
+ labelSelector);
188
+ // K8s list responses often omit apiVersion/kind on individual
189
+ // items — they're inferred from the list's metadata. Stamp
190
+ // each item with the target's GVK so downstream code (dedup,
191
+ // rollback) has the correct kind for API calls.
192
+ const items = result.items ?? [];
193
+ for (const item of items) {
194
+ if (!item.apiVersion)
195
+ item.apiVersion = target.apiVersion;
196
+ if (!item.kind)
197
+ item.kind = target.kind;
198
+ if (!target.namespaced) {
199
+ setMetadataField(item, 'scope', 'cluster');
200
+ }
201
+ }
202
+ return items;
203
+ }
204
+ catch (err) {
205
+ // 404 on a GVK means the API server doesn't recognise that
206
+ // kind — expected for CRDs that were uninstalled mid-discovery.
207
+ // Log at debug so the noise doesn't drown out real errors.
208
+ logger.debug('List failed for GVK during discovery', {
209
+ apiVersion: target.apiVersion,
210
+ kind: target.kind,
211
+ error: err instanceof Error ? err.message : String(err),
212
+ });
213
+ return [];
214
+ }
215
+ });
216
+ const discoveryDuration = Date.now() - discoveryStart;
217
+ logger.info('Discovery list calls completed', {
218
+ factoryName: opts.factoryName,
219
+ instanceName: opts.instanceName,
220
+ gvkCount: gvkTargets.length,
221
+ source: usingHint ? 'knownGvks' : 'full-cluster',
222
+ durationMs: discoveryDuration,
223
+ });
224
+ // Flatten, deduplicate by (kind, namespace, name), and post-filter
225
+ // by raw annotation values. The label selector uses sanitized values
226
+ // which can collide (e.g., "my@factory" and "my#factory" both
227
+ // sanitize to "my-factory"). The raw factory/instance name stored in
228
+ // annotations is the authoritative match — reject resources whose
229
+ // annotation doesn't match the requested factory+instance.
230
+ const seen = new Set();
231
+ const uniqueResources = [];
232
+ for (const item of matches.flat()) {
233
+ const key = `${item.apiVersion}/${item.kind}/${item.metadata?.namespace ?? ''}/${item.metadata?.name ?? ''}`;
234
+ if (seen.has(key))
235
+ continue;
236
+ seen.add(key);
237
+ // Post-filter: verify raw annotation matches requested identity
238
+ const tags = extractTypekroTags(item);
239
+ if (tags.factoryName && tags.factoryName !== opts.factoryName)
240
+ continue;
241
+ if (tags.instanceName && tags.instanceName !== opts.instanceName)
242
+ continue;
243
+ uniqueResources.push(item);
244
+ }
245
+ if (uniqueResources.length === 0) {
246
+ logger.debug('No resources found for instance', {
247
+ factoryName: opts.factoryName,
248
+ instanceName: opts.instanceName,
249
+ });
250
+ return undefined;
251
+ }
252
+ return buildRecordFromResources(uniqueResources, opts);
253
+ }
254
+ function mergeGvkTargets(targets) {
255
+ const merged = new Map();
256
+ for (const target of targets) {
257
+ const key = `${target.apiVersion}/${target.kind}`;
258
+ const existing = merged.get(key);
259
+ if (!existing) {
260
+ merged.set(key, target);
261
+ continue;
262
+ }
263
+ if (existing.namespaced && !target.namespaced) {
264
+ merged.set(key, target);
265
+ }
266
+ }
267
+ return Array.from(merged.values());
268
+ }
269
+ /**
270
+ * Convert a set of discovered live resources into a DeploymentStateRecord.
271
+ * Each resource's ownership metadata is pulled from its labels and
272
+ * annotations, and the dependency graph is reconstructed from the
273
+ * per-resource `depends-on` annotations.
274
+ */
275
+ function buildRecordFromResources(resources, opts) {
276
+ const deployedResources = [];
277
+ const idToResource = new Map();
278
+ const dependenciesById = new Map();
279
+ // First pass: extract tags and build DeployedResource records
280
+ let deploymentId;
281
+ let earliestStart;
282
+ let factoryNamespace;
283
+ for (const resource of resources) {
284
+ const tags = extractTypekroTags(resource);
285
+ const id = tags.resourceId;
286
+ if (!id) {
287
+ // A resource with no resource-id annotation can't participate in
288
+ // graph reconstruction — it must have been tagged by a partial
289
+ // upgrade or external mutator. Skip rather than crash.
290
+ logger.debug('Skipping discovered resource with no resource-id annotation', {
291
+ kind: resource.kind,
292
+ name: resource.metadata?.name,
293
+ });
294
+ continue;
295
+ }
296
+ if (!deploymentId && tags.deploymentId)
297
+ deploymentId = tags.deploymentId;
298
+ if (!factoryNamespace && tags.factoryNamespace) {
299
+ factoryNamespace = tags.factoryNamespace;
300
+ }
301
+ const deployedAt = toDate(resource.metadata?.creationTimestamp);
302
+ if (deployedAt && (!earliestStart || deployedAt < earliestStart)) {
303
+ earliestStart = deployedAt;
304
+ }
305
+ const deployed = {
306
+ id,
307
+ kind: resource.kind ?? 'Unknown',
308
+ name: resource.metadata?.name ?? 'unknown',
309
+ namespace: resource.metadata?.namespace ?? '',
310
+ manifest: resource,
311
+ status: 'deployed',
312
+ deployedAt: deployedAt ?? new Date(),
313
+ };
314
+ deployedResources.push(deployed);
315
+ idToResource.set(id, deployed);
316
+ if (tags.dependencies.length > 0) {
317
+ dependenciesById.set(id, tags.dependencies);
318
+ }
319
+ }
320
+ // Second pass: rebuild the dependency graph
321
+ const dependencyGraph = new DependencyGraph();
322
+ for (const [id, deployed] of idToResource.entries()) {
323
+ // biome-ignore lint/suspicious/noExplicitAny: minimal plain manifest, not an Enhanced proxy
324
+ dependencyGraph.addNode(id, deployed.manifest);
325
+ }
326
+ for (const [from, deps] of dependenciesById.entries()) {
327
+ for (const to of deps) {
328
+ // Skip dangling edges — the dependency may have been deleted
329
+ // manually, or was never tagged (e.g., lifecycle: shared in an
330
+ // older typekro version that we now find via annotations only).
331
+ if (!idToResource.has(to))
332
+ continue;
333
+ try {
334
+ dependencyGraph.addEdge(from, to);
335
+ }
336
+ catch (err) {
337
+ logger.debug('Failed to add edge during discovery — skipping', {
338
+ from,
339
+ to,
340
+ error: err instanceof Error ? err.message : String(err),
341
+ });
342
+ }
343
+ }
344
+ }
345
+ return {
346
+ deploymentId: deploymentId ?? `discovered-${Date.now()}`,
347
+ resources: deployedResources,
348
+ dependencyGraph,
349
+ startTime: earliestStart ?? new Date(),
350
+ status: 'completed',
351
+ options: {
352
+ mode: 'direct',
353
+ ...(factoryNamespace && { namespace: factoryNamespace }),
354
+ factoryName: opts.factoryName,
355
+ instanceName: opts.instanceName,
356
+ },
357
+ };
358
+ }
359
+ /**
360
+ * Safely convert a Kubernetes `creationTimestamp` to a Date.
361
+ * The client-node deserializer returns a `Date` object, but defensive
362
+ * callers may receive strings from raw JSON or test mocks.
363
+ */
364
+ function toDate(value) {
365
+ if (value instanceof Date)
366
+ return Number.isNaN(value.getTime()) ? undefined : value;
367
+ if (typeof value === 'string' || typeof value === 'number') {
368
+ const d = new Date(value);
369
+ return Number.isNaN(d.getTime()) ? undefined : d;
370
+ }
371
+ return undefined;
372
+ }
373
+ /**
374
+ * Run an async function over an array with bounded parallelism. Used to
375
+ * cap the number of simultaneous API requests during discovery.
376
+ */
377
+ async function listWithConcurrency(items, concurrency, fn) {
378
+ const results = new Array(items.length);
379
+ let next = 0;
380
+ const workers = [];
381
+ const worker = async () => {
382
+ while (true) {
383
+ // Safe: JS is single-threaded — workers only yield at the `await`
384
+ // below, so `next++` can't be interleaved between workers.
385
+ const idx = next++;
386
+ if (idx >= items.length)
387
+ return;
388
+ const item = items[idx];
389
+ if (item === undefined)
390
+ return;
391
+ results[idx] = await fn(item);
392
+ }
393
+ };
394
+ for (let i = 0; i < Math.min(concurrency, items.length); i++) {
395
+ workers.push(worker());
396
+ }
397
+ await Promise.all(workers);
398
+ return results;
399
+ }
400
+ //# sourceMappingURL=deployment-state-discovery.js.map