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
@@ -1,15 +1,17 @@
1
1
  /**
2
2
  * YAML generation functionality for Kro ResourceGraphDefinitions
3
3
  *
4
- * Supports Kro v0.8.x features: forEach, includeWhen, readyWhen, externalRef,
4
+ * Supports Kro 0.9.1+ ResourceGraphDefinition serialization, including
5
+ * forEach, includeWhen, readyWhen, externalRef, mixed-template CEL, omit(),
5
6
  * schema group, and allowBreakingChanges annotation.
6
7
  */
7
8
  import * as yaml from 'js-yaml';
9
+ import { getMetadataField } from '../metadata/resource-metadata.js';
8
10
  import { escapeRegExp } from '../../utils/helpers.js';
9
11
  import { extractResourceReferences, isCelExpression, isKubernetesRef, } from '../../utils/type-guards.js';
10
12
  import { getForEach, getIncludeWhen, getReadyWhen, getResourceId, getTemplateOverrides, } from '../metadata/index.js';
11
13
  import { generateDeterministicResourceId } from '../resources/id.js';
12
- import { getInnerCelPath, processResourceReferences } from './cel-references.js';
14
+ import { finalizeCelForKro, getInnerCelPath, normalizeRefMarkersToCelPaths, processResourceReferences } from './cel-references.js';
13
15
  import { generateKroSchema } from './schema.js';
14
16
  /**
15
17
  * Read a non-enumerable property from an Enhanced resource.
@@ -75,19 +77,19 @@ function readTemplateOverrides(resource) {
75
77
  * - string (already CEL) → pass-through
76
78
  * - string with __KUBERNETES_REF__ markers → convert markers to CEL
77
79
  */
78
- function convertIncludeWhenValueToCel(value) {
80
+ function convertIncludeWhenValueToCel(value, context) {
79
81
  if (typeof value === 'string') {
80
82
  if (value.includes('__KUBERNETES_REF_')) {
81
- return convertRefMarkersInString(value);
83
+ return `\${${convertRefMarkersInString(value, context)}}`;
82
84
  }
83
85
  return value;
84
86
  }
85
87
  if (isKubernetesRef(value)) {
86
- const celPath = getInnerCelPath(value);
88
+ const celPath = normalizeRefMarkersToCelPaths(getInnerCelPath(value), context);
87
89
  return `\${${celPath}}`;
88
90
  }
89
91
  if (isCelExpression(value)) {
90
- return `\${${value.expression}}`;
92
+ return `\${${normalizeRefMarkersToCelPaths(value.expression, context)}}`;
91
93
  }
92
94
  // Fallback — coerce to string
93
95
  if (value !== undefined && value !== null) {
@@ -103,13 +105,13 @@ function convertIncludeWhenValueToCel(value) {
103
105
  * - An array of the above
104
106
  * - undefined (no condition)
105
107
  */
106
- function resolveIncludeWhen(raw) {
108
+ function resolveIncludeWhen(raw, context) {
107
109
  if (raw === undefined || raw === null)
108
110
  return undefined;
109
111
  const items = Array.isArray(raw) ? raw : [raw];
110
112
  const celStrings = [];
111
113
  for (const item of items) {
112
- const cel = convertIncludeWhenValueToCel(item);
114
+ const cel = convertIncludeWhenValueToCel(item, context);
113
115
  if (cel)
114
116
  celStrings.push(cel);
115
117
  }
@@ -118,6 +120,109 @@ function resolveIncludeWhen(raw) {
118
120
  // ---------------------------------------------------------------------------
119
121
  // readyWhen → CEL conversion
120
122
  // ---------------------------------------------------------------------------
123
+ const READY_WHEN_CALLBACK_METHODS = new Set(['exists', 'all', 'filter', 'map', 'some', 'every']);
124
+ function findMatchingParen(source, openIndex) {
125
+ let depth = 0;
126
+ let quote;
127
+ let escaped = false;
128
+ for (let i = openIndex; i < source.length; i++) {
129
+ const char = source[i];
130
+ if (quote) {
131
+ if (escaped) {
132
+ escaped = false;
133
+ }
134
+ else if (char === '\\') {
135
+ escaped = true;
136
+ }
137
+ else if (char === quote) {
138
+ quote = undefined;
139
+ }
140
+ continue;
141
+ }
142
+ if (char === '"' || char === "'" || char === '`') {
143
+ quote = char;
144
+ continue;
145
+ }
146
+ if (char === '(') {
147
+ depth++;
148
+ }
149
+ else if (char === ')') {
150
+ depth--;
151
+ if (depth === 0)
152
+ return i;
153
+ }
154
+ }
155
+ return -1;
156
+ }
157
+ function normalizeArrowBody(body) {
158
+ const trimmed = body.trim();
159
+ if (!trimmed.startsWith('{'))
160
+ return trimmed;
161
+ return trimmed
162
+ .replace(/^\{\s*(?:return\s+)?/, '')
163
+ .replace(/;?\s*\}\s*$/, '')
164
+ .trim();
165
+ }
166
+ function convertReadyWhenCallbackMethods(expression) {
167
+ let result = '';
168
+ let index = 0;
169
+ while (index < expression.length) {
170
+ const dotIndex = expression.indexOf('.', index);
171
+ if (dotIndex === -1) {
172
+ result += expression.slice(index);
173
+ break;
174
+ }
175
+ result += expression.slice(index, dotIndex);
176
+ let cursor = dotIndex + 1;
177
+ while (/\s/.test(expression[cursor] ?? ''))
178
+ cursor++;
179
+ const methodMatch = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(expression.slice(cursor));
180
+ if (!methodMatch || !READY_WHEN_CALLBACK_METHODS.has(methodMatch[0])) {
181
+ result += expression[dotIndex];
182
+ index = dotIndex + 1;
183
+ continue;
184
+ }
185
+ const method = methodMatch[0];
186
+ cursor += method.length;
187
+ while (/\s/.test(expression[cursor] ?? ''))
188
+ cursor++;
189
+ if (expression[cursor] !== '(') {
190
+ result += expression[dotIndex];
191
+ index = dotIndex + 1;
192
+ continue;
193
+ }
194
+ const closeIndex = findMatchingParen(expression, cursor);
195
+ if (closeIndex === -1) {
196
+ result += expression[dotIndex];
197
+ index = dotIndex + 1;
198
+ continue;
199
+ }
200
+ const callbackSource = expression.slice(cursor + 1, closeIndex).trim();
201
+ const arrowIndex = callbackSource.indexOf('=>');
202
+ if (arrowIndex === -1) {
203
+ result += expression.slice(dotIndex, closeIndex + 1);
204
+ index = closeIndex + 1;
205
+ continue;
206
+ }
207
+ let param = callbackSource.slice(0, arrowIndex).trim();
208
+ param = param.replace(/^\(\s*/, '').replace(/\s*\)$/, '').trim();
209
+ const colonIndex = param.indexOf(':');
210
+ if (colonIndex !== -1)
211
+ param = param.slice(0, colonIndex).trim();
212
+ if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(param)) {
213
+ result += expression.slice(dotIndex, closeIndex + 1);
214
+ index = closeIndex + 1;
215
+ continue;
216
+ }
217
+ let body = normalizeArrowBody(callbackSource.slice(arrowIndex + 2));
218
+ body = body.replace(/===/g, '==').replace(/!==/g, '!=');
219
+ body = convertReadyWhenCallbackMethods(body);
220
+ const celMethod = method === 'some' ? 'exists' : method === 'every' ? 'all' : method;
221
+ result += `.${celMethod}(${param}, ${body})`;
222
+ index = closeIndex + 1;
223
+ }
224
+ return result;
225
+ }
121
226
  /**
122
227
  * Convert a readyWhen callback function to a CEL expression string by parsing its source.
123
228
  *
@@ -170,17 +275,10 @@ function convertReadyWhenCallbackToCel(fn, resourceId) {
170
275
  // JS → CEL operator conversions (must happen before inner callback processing)
171
276
  celExpr = celExpr.replace(/===/g, '==');
172
277
  celExpr = celExpr.replace(/!==/g, '!=');
173
- // Convert JS arrow function callbacks inside .exists(), .filter(), .all(), .map()
174
- // Pattern: .exists((c) => c.type === 'Ready' && c.status === 'True')
175
- // .exists(c, c.type == "Ready" && c.status == "True")
176
- celExpr = celExpr.replace(/\.\s*(exists|all|filter|map)\s*\(\s*\(?([a-zA-Z_$][a-zA-Z0-9_$]*)\)?\s*(?::\s*\w+)?\s*=>\s*([\s\S]+?)\)/g, (_match, method, innerParam, innerBody) => {
177
- let cleanBody = innerBody.trim();
178
- // Fix operators in inner body too
179
- cleanBody = cleanBody.replace(/===/g, '==').replace(/!==/g, '!=');
180
- // Convert single quotes to double quotes for string literals
181
- cleanBody = cleanBody.replace(/'([^']+)'/g, '"$1"');
182
- return `.${method}(${innerParam}, ${cleanBody})`;
183
- });
278
+ // Convert JS arrow function callbacks inside CEL macros and natural JS array
279
+ // helpers. Use a balanced scanner instead of a regex so nested parentheses in
280
+ // predicate bodies don't truncate the callback body.
281
+ celExpr = convertReadyWhenCallbackMethods(celExpr);
184
282
  // Convert remaining single-quoted strings to double-quoted for CEL
185
283
  celExpr = celExpr.replace(/'([^']+)'/g, '"$1"');
186
284
  return celExpr;
@@ -194,7 +292,7 @@ function convertReadyWhenCallbackToCel(fn, resourceId) {
194
292
  * - CelExpression object → `${expression}`
195
293
  * - string (already CEL) → pass-through
196
294
  */
197
- function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
295
+ function convertReadyWhenValueToCel(value, resourceId, hasForEach, context) {
198
296
  // Callback function — parse source to extract CEL expression
199
297
  if (typeof value === 'function') {
200
298
  const baseId = hasForEach ? 'each' : resourceId;
@@ -202,15 +300,16 @@ function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
202
300
  return `\${${celExpr}}`;
203
301
  }
204
302
  if (isKubernetesRef(value)) {
205
- const celPath = getInnerCelPath(value);
303
+ const celPath = normalizeRefMarkersToCelPaths(getInnerCelPath(value), context);
206
304
  return `\${${celPath}}`;
207
305
  }
208
306
  if (isCelExpression(value)) {
209
- return `\${${value.expression}}`;
307
+ return `\${${normalizeRefMarkersToCelPaths(value.expression, context)}}`;
210
308
  }
211
309
  if (typeof value === 'string') {
212
310
  if (value.includes('__KUBERNETES_REF_')) {
213
- return `\${${convertRefMarkersInString(value)}}`;
311
+ const converted = convertRefMarkersInString(value, context);
312
+ return converted.includes('${') ? converted : `\${${converted}}`;
214
313
  }
215
314
  return value;
216
315
  }
@@ -222,13 +321,13 @@ function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
222
321
  /**
223
322
  * Resolve the readyWhen property from an Enhanced resource to an array of CEL strings.
224
323
  */
225
- function resolveReadyWhen(raw, resourceId, hasForEach) {
324
+ function resolveReadyWhen(raw, resourceId, hasForEach, context) {
226
325
  if (raw === undefined || raw === null)
227
326
  return undefined;
228
327
  const items = Array.isArray(raw) ? raw : [raw];
229
328
  const celStrings = [];
230
329
  for (const item of items) {
231
- const cel = convertReadyWhenValueToCel(item, resourceId, hasForEach);
330
+ const cel = convertReadyWhenValueToCel(item, resourceId, hasForEach, context);
232
331
  if (cel)
233
332
  celStrings.push(cel);
234
333
  }
@@ -243,16 +342,8 @@ function resolveReadyWhen(raw, resourceId, hasForEach) {
243
342
  * Input: "__KUBERNETES_REF_web_status.readyReplicas__ > 0"
244
343
  * Output: "web.status.readyReplicas > 0"
245
344
  */
246
- function convertRefMarkersInString(str) {
247
- // Pattern: __KUBERNETES_REF_{resourceId}_{fieldPath}__
248
- // For schema: __KUBERNETES_REF___schema___{fieldPath}__
249
- const refPattern = /__KUBERNETES_REF_(__schema__|[^_]+)_([a-zA-Z0-9.$]+)__/g;
250
- return str.replace(refPattern, (_match, resourceId, fieldPath) => {
251
- if (resourceId === '__schema__') {
252
- return `schema.${fieldPath}`;
253
- }
254
- return `${resourceId}.${fieldPath}`;
255
- });
345
+ function convertRefMarkersInString(str, context) {
346
+ return normalizeRefMarkersToCelPaths(str, context);
256
347
  }
257
348
  // ---------------------------------------------------------------------------
258
349
  // forEach $item sentinel substitution
@@ -302,6 +393,130 @@ function substituteForEachSentinels(template, basePath, varName) {
302
393
  // Primitives (number, boolean, null, undefined) pass through unchanged
303
394
  return template;
304
395
  }
396
+ /**
397
+ * Strip orphaned `$item` sentinel references from a template.
398
+ *
399
+ * After forEach substitution, any remaining `$item` paths are from non-forEach
400
+ * contexts — typically when `...spec.array` is spread into a literal array.
401
+ * These are not valid CEL identifiers and must be collapsed to the parent
402
+ * array reference.
403
+ *
404
+ * Handles both wrapped CEL (`${path.$item.field}`) and raw paths.
405
+ * Strips `.$item` and any trailing field access, keeping just the parent path.
406
+ */
407
+ function stripOrphanedItemSentinels(template) {
408
+ if (typeof template === 'string') {
409
+ const normalized = normalizeOptionalArrayConditional(template);
410
+ if (normalized !== undefined)
411
+ return normalized;
412
+ if (!template.includes('$item'))
413
+ return template;
414
+ // Match any path segment ending with .$item optionally followed by .field
415
+ const stripped = template.replace(/(\w[\w.]*)\.\$item(?:\.[a-zA-Z0-9_.]+)?/g, '$1');
416
+ return (normalizeOptionalArrayConditional(stripped) ?? stripped);
417
+ }
418
+ if (Array.isArray(template)) {
419
+ const collapsed = collapseOrphanedArraySpreads(template);
420
+ if (collapsed !== undefined)
421
+ return collapsed;
422
+ return template.map((item) => stripOrphanedItemSentinels(item));
423
+ }
424
+ if (template !== null && typeof template === 'object') {
425
+ const result = {};
426
+ for (const [key, value] of Object.entries(template)) {
427
+ result[key] = stripOrphanedItemSentinels(value);
428
+ }
429
+ return result;
430
+ }
431
+ return template;
432
+ }
433
+ function normalizeOptionalArrayConditional(value) {
434
+ const match = value.match(/^\$\{has\(([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\) \? (\[.*), \1\] : (\[.*\])\}$/);
435
+ if (!match?.[1] || !match[2] || !match[3])
436
+ return undefined;
437
+ const [, basePath, truthyPrefix, fallbackList] = match;
438
+ if (`${truthyPrefix}]` !== fallbackList)
439
+ return undefined;
440
+ return `\${${fallbackList} + (has(${basePath}) ? ${basePath} : [])}`;
441
+ }
442
+ function findOrphanedItemBase(value) {
443
+ const serialized = JSON.stringify(value);
444
+ return serialized?.match(/([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\.\$item/)?.[1];
445
+ }
446
+ function isDirectOrphanedItemElement(value, basePath) {
447
+ if (typeof value === 'string') {
448
+ return value.includes('${') && value.includes(`${basePath}.$item`);
449
+ }
450
+ if (Array.isArray(value))
451
+ return value.every((item) => isDirectOrphanedItemElement(item, basePath));
452
+ if (value && typeof value === 'object') {
453
+ const entries = Object.values(value);
454
+ return entries.length > 0 && entries.every((entry) => isDirectOrphanedItemElement(entry, basePath));
455
+ }
456
+ return false;
457
+ }
458
+ function collapseOrphanedArraySpreads(items) {
459
+ const parts = [];
460
+ let literals = [];
461
+ let sawSpread = false;
462
+ const flushLiterals = () => {
463
+ if (literals.length === 0)
464
+ return;
465
+ parts.push(celValueForTemplate(literals));
466
+ literals = [];
467
+ };
468
+ for (const item of items) {
469
+ const basePath = findOrphanedItemBase(item);
470
+ if (!basePath || !isDirectOrphanedItemElement(item, basePath)) {
471
+ literals.push(stripOrphanedItemSentinels(item));
472
+ continue;
473
+ }
474
+ sawSpread = true;
475
+ flushLiterals();
476
+ const serialized = JSON.stringify(item) ?? '';
477
+ parts.push(serialized.includes(`has(${basePath})`) ? `(has(${basePath}) ? ${basePath} : [])` : basePath);
478
+ }
479
+ if (!sawSpread)
480
+ return undefined;
481
+ flushLiterals();
482
+ return parts.length > 0 ? `\${${parts.join(' + ')}}` : undefined;
483
+ }
484
+ function celValueForTemplate(value) {
485
+ if (typeof value === 'string')
486
+ return celStringForTemplate(value);
487
+ if (typeof value === 'number' || typeof value === 'boolean')
488
+ return String(value);
489
+ if (value === null)
490
+ return 'null';
491
+ if (Array.isArray(value))
492
+ return `[${value.map(celValueForTemplate).join(', ')}]`;
493
+ if (value && typeof value === 'object') {
494
+ const entries = Object.entries(value).map(([key, entryValue]) => `${JSON.stringify(key)}: ${celValueForTemplate(entryValue)}`);
495
+ return `{${entries.join(', ')}}`;
496
+ }
497
+ return 'null';
498
+ }
499
+ function celStringForTemplate(value) {
500
+ const fullCel = value.match(/^\$\{(.+)\}$/);
501
+ if (fullCel?.[1])
502
+ return fullCel[1];
503
+ if (!value.includes('${'))
504
+ return JSON.stringify(value);
505
+ const parts = [];
506
+ let cursor = 0;
507
+ const pattern = /\$\{([^}]+)\}/g;
508
+ for (const match of value.matchAll(pattern)) {
509
+ const index = match.index ?? 0;
510
+ if (index > cursor)
511
+ parts.push(JSON.stringify(value.slice(cursor, index)));
512
+ if (match[1])
513
+ parts.push(`string(${match[1]})`);
514
+ cursor = index + match[0].length;
515
+ }
516
+ if (cursor < value.length)
517
+ parts.push(JSON.stringify(value.slice(cursor)));
518
+ return parts.length > 0 ? parts.join(' + ') : '""';
519
+ }
305
520
  // ---------------------------------------------------------------------------
306
521
  // Template override application
307
522
  // ---------------------------------------------------------------------------
@@ -316,33 +531,90 @@ function substituteForEachSentinels(template, basePath, varName) {
316
531
  * @param template - The processed template object (after processResourceReferences)
317
532
  * @param overrides - Array of {propertyPath, celExpression} overrides
318
533
  */
319
- function applyTemplateOverrides(template, overrides) {
534
+ function applyTemplateOverrides(template, overrides, context) {
320
535
  for (const { propertyPath, celExpression } of overrides) {
321
536
  const parts = propertyPath.split('.');
322
537
  let target = template;
323
- // Walk to the parent of the target property
538
+ // Walk to the parent of the target property. Object-branch ternaries can
539
+ // produce paths that only exist in the non-selected branch, so materialize
540
+ // missing containers instead of silently dropping those overrides.
324
541
  for (let i = 0; i < parts.length - 1; i++) {
325
542
  const part = parts[i];
326
543
  if (!part)
327
544
  continue;
328
- const next = target[part];
329
- if (next && typeof next === 'object' && !Array.isArray(next)) {
545
+ if (!target)
546
+ break;
547
+ const next = Array.isArray(target) && /^\d+$/.test(part)
548
+ ? target[Number(part)]
549
+ : target[part];
550
+ if (next && typeof next === 'object') {
330
551
  target = next;
331
552
  }
332
553
  else {
333
- // Path doesn't exist in the template — skip this override
334
- target = undefined;
335
- break;
554
+ if (!celExpression.includes('omit()')) {
555
+ target = undefined;
556
+ break;
557
+ }
558
+ const nextPart = parts[i + 1];
559
+ const container = nextPart && /^\d+$/.test(nextPart) ? [] : {};
560
+ if (Array.isArray(target) && /^\d+$/.test(part)) {
561
+ target[Number(part)] = container;
562
+ }
563
+ else {
564
+ target[part] = container;
565
+ }
566
+ target = container;
336
567
  }
337
568
  }
338
569
  if (!target)
339
570
  continue;
340
571
  const lastKey = parts[parts.length - 1];
341
- if (lastKey && lastKey in target) {
342
- target[lastKey] = celExpression;
572
+ if (lastKey) {
573
+ const finalized = finalizeCelForKro(celExpression, context.nestedStatusCel, context);
574
+ if (Array.isArray(target) && /^\d+$/.test(lastKey)) {
575
+ target[Number(lastKey)] = finalized;
576
+ }
577
+ else {
578
+ target[lastKey] = finalized;
579
+ }
343
580
  }
344
581
  }
345
582
  }
583
+ function toIdSuffix(resourceId) {
584
+ return resourceId.charAt(0).toUpperCase() + resourceId.slice(1);
585
+ }
586
+ function commonPrefixLength(left, right) {
587
+ const max = Math.min(left.length, right.length);
588
+ let index = 0;
589
+ while (index < max && left[index] === right[index]) {
590
+ index += 1;
591
+ }
592
+ return index;
593
+ }
594
+ function deriveResourceIdAliases(resourceId) {
595
+ const aliases = [];
596
+ for (const match of resourceId.matchAll(/\d+/g)) {
597
+ const suffix = resourceId.slice((match.index ?? 0) + match[0].length);
598
+ if (suffix && /^[A-Z]/.test(suffix)) {
599
+ aliases.push(suffix.charAt(0).toLowerCase() + suffix.slice(1));
600
+ }
601
+ }
602
+ return aliases;
603
+ }
604
+ function resolveDependsOnResourceId(dependencyId, currentResourceId, knownResourceIds) {
605
+ if (!knownResourceIds || knownResourceIds.has(dependencyId)) {
606
+ return dependencyId;
607
+ }
608
+ const suffix = toIdSuffix(dependencyId);
609
+ const candidates = Array.from(knownResourceIds).filter((resourceId) => resourceId.endsWith(suffix));
610
+ if (candidates.length === 0) {
611
+ return dependencyId;
612
+ }
613
+ if (candidates.length === 1) {
614
+ return candidates[0] ?? dependencyId;
615
+ }
616
+ return candidates.sort((left, right) => commonPrefixLength(right, currentResourceId) - commonPrefixLength(left, currentResourceId))[0] ?? dependencyId;
617
+ }
346
618
  // ---------------------------------------------------------------------------
347
619
  // Resource entry builder
348
620
  // ---------------------------------------------------------------------------
@@ -357,6 +629,10 @@ function applyTemplateOverrides(template, overrides) {
357
629
  function buildResourceEntry(id, resource, context) {
358
630
  const isExternalRef = readNonEnumerable(resource, '__externalRef');
359
631
  if (isExternalRef) {
632
+ const forEach = readForEachDimensions(resource);
633
+ if (forEach && forEach.length > 0) {
634
+ throw new Error(`Resource '${id}' cannot use both externalRef and forEach`);
635
+ }
360
636
  // externalRef resources: emit externalRef metadata, NOT template.
361
637
  // Use Object.getOwnPropertyDescriptor to bypass the Enhanced proxy's get trap
362
638
  // and read the actual underlying values. Going through the proxy would cause
@@ -369,22 +645,24 @@ function buildResourceEntry(id, resource, context) {
369
645
  // Process marker strings in metadata values to convert them to CEL expressions.
370
646
  // externalRef metadata.name may contain __KUBERNETES_REF__ markers from template
371
647
  // literals (e.g., `${spec.name}-db-${dbOwner}`).
372
- const rawName = typeof rawMeta?.name === 'string' ? rawMeta.name : '';
373
- const rawNamespace = typeof rawMeta?.namespace === 'string' ? rawMeta.namespace : undefined;
648
+ const rawName = rawMeta && 'name' in rawMeta ? rawMeta.name : '';
649
+ const rawNamespace = rawMeta && 'namespace' in rawMeta ? rawMeta.namespace : undefined;
650
+ const processedName = processResourceReferences(rawName, context);
651
+ const processedNamespace = processResourceReferences(rawNamespace, context);
374
652
  const extRef = {
375
653
  apiVersion: String(apiVersionDesc?.value ?? ''),
376
654
  kind: String(kindDesc?.value ?? ''),
377
655
  metadata: {
378
- name: String(processResourceReferences(rawName, context)),
379
- ...(rawNamespace && {
380
- namespace: String(processResourceReferences(rawNamespace, context)),
656
+ name: String(processedName ?? ''),
657
+ ...(rawNamespace !== undefined && processedNamespace !== undefined && {
658
+ namespace: String(processedNamespace),
381
659
  }),
382
660
  },
383
661
  };
384
662
  const entry = { id, externalRef: extRef };
385
663
  // externalRef can still have includeWhen (but NOT forEach — mutually exclusive)
386
664
  const rawIncludeWhen = readIncludeWhen(resource);
387
- const includeWhen = resolveIncludeWhen(rawIncludeWhen);
665
+ const includeWhen = resolveIncludeWhen(rawIncludeWhen, context);
388
666
  if (includeWhen) {
389
667
  entry.includeWhen = includeWhen;
390
668
  }
@@ -421,24 +699,59 @@ function buildResourceEntry(id, resource, context) {
421
699
  }
422
700
  }
423
701
  }
702
+ // Orphaned $item sentinels — strip remaining $item references from non-forEach
703
+ // resources. When a schema array proxy is spread (`...spec.envFrom`) into a
704
+ // literal array, the proxy iterator yields $item-marked refs that never get
705
+ // matched by a forEach dimension. Collapse `path.$item.field` → `path` so
706
+ // the CEL expression references the whole array (valid CEL), rather than
707
+ // leaving `$item` which is not a valid CEL identifier.
708
+ if (entry.template && !hasForEach) {
709
+ entry.template = stripOrphanedItemSentinels(entry.template);
710
+ }
424
711
  // Template overrides — ternary expressions in factory args that evaluated to
425
712
  // literals at runtime but should be CEL conditionals in the output.
426
713
  const templateOverrides = readTemplateOverrides(resource);
427
714
  if (templateOverrides && templateOverrides.length > 0 && entry.template) {
428
- applyTemplateOverrides(entry.template, templateOverrides);
715
+ applyTemplateOverrides(entry.template, templateOverrides, context);
429
716
  }
430
717
  // includeWhen — conditional resource creation (convert raw values to CEL)
431
718
  const rawIncludeWhen = readIncludeWhen(resource);
432
- const includeWhen = resolveIncludeWhen(rawIncludeWhen);
719
+ const includeWhen = resolveIncludeWhen(rawIncludeWhen, context);
433
720
  if (includeWhen) {
434
721
  entry.includeWhen = includeWhen;
435
722
  }
436
723
  // readyWhen — resource readiness conditions (convert callbacks/refs to CEL)
437
724
  const rawReadyWhen = readReadyWhen(resource);
438
- const readyWhen = resolveReadyWhen(rawReadyWhen, id, hasForEach);
725
+ const readyWhen = resolveReadyWhen(rawReadyWhen, id, hasForEach, context);
439
726
  if (readyWhen) {
440
727
  entry.readyWhen = readyWhen;
441
728
  }
729
+ // dependsOn — explicit dependency ordering via template annotation injection.
730
+ //
731
+ // KRO builds its dependency graph ONLY from template expression references.
732
+ // readyWhen only supports self-references (e.g., self.status.readyReplicas)
733
+ // — it CANNOT reference other resources. To establish a dependency edge
734
+ // between resources, we inject an annotation into the dependent resource's
735
+ // template that references the dependency's metadata.name. KRO scans ALL
736
+ // template fields for expressions and creates DAG edges from them.
737
+ //
738
+ // Once KRO sees the edge, it automatically waits for the dependency to be
739
+ // ready (all its own readyWhen conditions satisfied) before creating the
740
+ // dependent resource. No cross-resource readyWhen is needed.
741
+ const dependsOnDeps = getMetadataField(resource, 'dependsOn');
742
+ if (dependsOnDeps && dependsOnDeps.length > 0) {
743
+ const template = entry.template;
744
+ if (template) {
745
+ const metadata = (template.metadata ?? {});
746
+ const annotations = (metadata.annotations ?? {});
747
+ for (const dep of dependsOnDeps) {
748
+ const resolvedDependencyId = resolveDependsOnResourceId(dep.resourceId, id, context.resourceIds);
749
+ annotations[`typekro.dev/depends-on-${resolvedDependencyId}`] = `\${${resolvedDependencyId}.metadata.name}`;
750
+ }
751
+ metadata.annotations = annotations;
752
+ template.metadata = metadata;
753
+ }
754
+ }
442
755
  return entry;
443
756
  }
444
757
  // ---------------------------------------------------------------------------
@@ -447,7 +760,7 @@ function buildResourceEntry(id, resource, context) {
447
760
  /**
448
761
  * Serializes resources to Kro YAML (ResourceGraphDefinition).
449
762
  *
450
- * Supports Kro v0.8.x features:
763
+ * Supports Kro 0.9.1+ features:
451
764
  * - externalRef: Resources marked with __externalRef emit `externalRef` instead of `template`
452
765
  * - includeWhen: Non-enumerable includeWhen arrays are emitted per resource
453
766
  * - readyWhen: Non-enumerable readyWhen arrays are emitted per resource
@@ -465,21 +778,36 @@ export function serializeResourceGraphToYaml(name, resources, options, customSch
465
778
  ? new Set(omitFieldsList)
466
779
  : undefined;
467
780
  // Create serialization context
781
+ const nestedStatusCel = schemaWithMeta?.__nestedStatusCel;
468
782
  const context = {
469
783
  celPrefix: 'resources', // Default Kro prefix, but now configurable
470
784
  ...(options?.namespace && { namespace: options.namespace }),
471
785
  resourceIdStrategy: 'deterministic',
472
786
  ...(omitFields && { omitFields }),
787
+ ...(nestedStatusCel && { nestedStatusCel }),
473
788
  };
474
789
  // 1. Use embedded resource IDs and build dependency graph
475
790
  const resourceMap = new Map();
476
791
  const dependencies = [];
792
+ const resourceAliases = new Map();
477
793
  // 2. Process each resource and extract references
478
794
  for (const [resourceName, resource] of Object.entries(resources)) {
479
795
  // Use the embedded resource ID if available, otherwise generate deterministic one
480
796
  const resourceId = getResourceId(resource) ||
481
797
  generateDeterministicResourceId(resource.kind || 'Resource', resource.metadata?.name || resourceName, resource.metadata?.namespace || options?.namespace);
482
798
  resourceMap.set(resourceName, { id: resourceId, resource });
799
+ resourceAliases.set(resourceName, resourceId);
800
+ for (const alias of deriveResourceIdAliases(resourceId)) {
801
+ if (!resourceAliases.has(alias)) {
802
+ resourceAliases.set(alias, resourceId);
803
+ }
804
+ }
805
+ const aliases = getMetadataField(resource, 'resourceAliases');
806
+ if (aliases) {
807
+ for (const alias of aliases) {
808
+ resourceAliases.set(alias, resourceId);
809
+ }
810
+ }
483
811
  // Extract all ResourceReference objects from the resource
484
812
  const refs = extractResourceReferences(resource);
485
813
  for (const ref of refs) {
@@ -491,10 +819,12 @@ export function serializeResourceGraphToYaml(name, resources, options, customSch
491
819
  });
492
820
  }
493
821
  }
822
+ const knownResourceIds = new Set(Array.from(resourceMap.values(), ({ id }) => id));
823
+ context.resourceIds = knownResourceIds;
824
+ context.resourceAliases = resourceAliases;
494
825
  // 3. Build metadata with optional annotations
495
826
  const metadata = {
496
827
  name,
497
- namespace: options?.namespace || 'default',
498
828
  };
499
829
  if (options?.allowBreakingChanges) {
500
830
  metadata.annotations = {